Merge changes I3d6f4dd4,I8b538cc8,Id7ba841d

* changes:
  Fix for unhandled sub.w rD, sp, rM, lsl N
  Fix the build after sync with upstream
  Merge remote-tracking branch 'aosp/upstream-master' into mymerge
diff --git a/Android.mk b/Android.mk
index bf265cb..98c47e5 100644
--- a/Android.mk
+++ b/Android.mk
@@ -159,7 +159,6 @@
 	coregrind/m_commandline.c \
 	coregrind/m_clientstate.c \
 	coregrind/m_cpuid.S \
-	coregrind/m_debugger.c \
 	coregrind/m_debuglog.c \
 	coregrind/m_errormgr.c \
 	coregrind/m_execontext.c \
diff --git a/COPYING b/COPYING
index e90dfed..d159169 100644
--- a/COPYING
+++ b/COPYING
@@ -1,12 +1,12 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
 
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-			    Preamble
+                            Preamble
 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
@@ -15,7 +15,7 @@
 General Public License applies to most of the Free Software
 Foundation's software and to any other program whose authors commit to
 using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
+the GNU Lesser General Public License instead.)  You can apply it to
 your programs, too.
 
   When we speak of free software, we are referring to freedom, not
@@ -56,7 +56,7 @@
   The precise terms and conditions for copying, distribution and
 modification follow.
 
-		    GNU GENERAL PUBLIC LICENSE
+                    GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License applies to any program or other work which contains
@@ -255,7 +255,7 @@
 of preserving the free status of all derivatives of our free software and
 of promoting the sharing and reuse of software generally.
 
-			    NO WARRANTY
+                            NO WARRANTY
 
   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
@@ -277,9 +277,9 @@
 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGES.
 
-		     END OF TERMS AND CONDITIONS
+                     END OF TERMS AND CONDITIONS
 
-	    How to Apply These Terms to Your New Programs
+            How to Apply These Terms to Your New Programs
 
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it
@@ -303,17 +303,16 @@
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
 
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 Also add information on how to contact you by electronic and paper mail.
 
 If the program is interactive, make it output a short notice like this
 when it starts in an interactive mode:
 
-    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision version 69, Copyright (C) year name of author
     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type `show c' for details.
@@ -336,5 +335,5 @@
 This General Public License does not permit incorporating your program into
 proprietary programs.  If your program is a subroutine library, you may
 consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
+library.  If this is what you want to do, use the GNU Lesser General
 Public License instead of this License.
diff --git a/COPYING.DOCS b/COPYING.DOCS
index 1ad50b0..a988da5 100644
--- a/COPYING.DOCS
+++ b/COPYING.DOCS
@@ -1,9 +1,9 @@
-        GNU Free Documentation License
-          Version 1.2, November 2002
+                GNU Free Documentation License
+                  Version 1.2, November 2002
 
 
  Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -395,4 +395,3 @@
 recommend releasing these examples in parallel under your choice of
 free software license, such as the GNU General Public License,
 to permit their use in free software.
-
diff --git a/Makefile.all.am b/Makefile.all.am
index d587548..44a6207 100644
--- a/Makefile.all.am
+++ b/Makefile.all.am
@@ -100,15 +100,17 @@
 	-O2 -g \
 	-std=gnu99 \
 	-Wall \
-	-Wcast-align \
 	-Wmissing-prototypes \
 	-Wshadow \
 	-Wpointer-arith \
 	-Wstrict-prototypes \
 	-Wmissing-declarations \
+	@FLAG_W_CAST_ALIGN@ \
 	@FLAG_W_CAST_QUAL@ \
 	@FLAG_W_WRITE_STRINGS@ \
+	@FLAG_W_EMPTY_BODY@ \
 	@FLAG_W_FORMAT@ \
+	@FLAG_W_FORMAT_SIGNEDNESS@ \
 	@FLAG_W_FORMAT_SECURITY@ \
 	@FLAG_W_IGNORED_QUALIFIERS@ \
 	@FLAG_W_MISSING_PARAMETER_TYPE@ \
@@ -133,10 +135,10 @@
 if VGCONF_OS_IS_DARWIN
 AM_CFLAGS_PSO_BASE = -dynamic \
 		     -O -g -fno-omit-frame-pointer -fno-strict-aliasing \
-		     -fpic -fPIC -fno-builtin
+		     -fpic -fPIC -fno-builtin @FLAG_FNO_IPA_ICF@
 else
 AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \
-		     -fpic -fno-builtin
+		     -fpic -fno-builtin @FLAG_FNO_IPA_ICF@
 endif
 
 
@@ -240,6 +242,18 @@
 AM_CFLAGS_TILEGX_LINUX     = @FLAG_M64@ $(AM_CFLAGS_BASE)
 AM_CFLAGS_PSO_TILEGX_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE)
 
+AM_FLAG_M3264_X86_SOLARIS   = @FLAG_M32@
+AM_CFLAGS_X86_SOLARIS       = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \
+			 	$(AM_CFLAGS_BASE) -fomit-frame-pointer
+AM_CFLAGS_PSO_X86_SOLARIS   = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE)
+AM_CCASFLAGS_X86_SOLARIS    = @FLAG_M32@ -g -D_ASM
+
+AM_FLAG_M3264_AMD64_SOLARIS = @FLAG_M64@
+AM_CFLAGS_AMD64_SOLARIS     = @FLAG_M64@ \
+				$(AM_CFLAGS_BASE) -fomit-frame-pointer
+AM_CFLAGS_PSO_AMD64_SOLARIS  = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE)
+AM_CCASFLAGS_AMD64_SOLARIS  = @FLAG_M64@ -g -D_ASM
+
 # Flags for the primary target.  These must be used to build the
 # regtests and performance tests.  In fact, these must be used to
 # build anything which is built only once on a dual-arch build.
@@ -260,6 +274,10 @@
 #
 PRELOAD_LDFLAGS_COMMON_LINUX  = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst
 PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load
+PRELOAD_LDFLAGS_COMMON_SOLARIS = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst
+if SOLARIS_XPG_SYMBOLS_PRESENT
+PRELOAD_LDFLAGS_COMMON_SOLARIS += -Wl,-M,$(top_srcdir)/solaris/vgpreload-solaris.mapfile
+endif
 
 if VGCONF_PLATVARIANT_IS_ANDROID
 # The Android toolchain includes all kinds of stdlib helpers present in
@@ -281,4 +299,6 @@
 PRELOAD_LDFLAGS_MIPS32_LINUX   = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
 PRELOAD_LDFLAGS_MIPS64_LINUX   = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
 PRELOAD_LDFLAGS_TILEGX_LINUX   = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+PRELOAD_LDFLAGS_X86_SOLARIS    = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M32@
+PRELOAD_LDFLAGS_AMD64_SOLARIS  = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M64@
 
diff --git a/Makefile.am b/Makefile.am
index d35fd36..4ad7b16 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -32,6 +32,7 @@
 	memcheck/tests/vbit-test \
 	auxprogs \
 	mpi \
+	solaris \
 	docs
 DIST_SUBDIRS  = $(SUBDIRS)
 
@@ -45,8 +46,9 @@
 	exp-sgcheck.supp \
 	darwin9.supp darwin9-drd.supp \
 	darwin10.supp darwin10-drd.supp \
-	darwin11.supp darwin12.supp darwin13.supp darwin14.supp \
-	bionic.supp
+	darwin11.supp darwin12.supp darwin13.supp darwin14.supp darwin15.supp \
+	bionic.supp \
+	solaris11.supp solaris12.supp
 DEFAULT_SUPP_FILES = @DEFAULT_SUPP@
 
 # We include all the base .supp files in the distribution, but not
@@ -106,6 +108,7 @@
 	README.android_emulator \
 	README.mips \
 	README.aarch64 \
+	README.solaris \
 	NEWS.old \
 	valgrind.pc.in \
 	valgrind.spec.in \
diff --git a/Makefile.tool-tests.am b/Makefile.tool-tests.am
index ca9d9a6..eb359db 100644
--- a/Makefile.tool-tests.am
+++ b/Makefile.tool-tests.am
@@ -26,6 +26,11 @@
 # automake;  see comments in Makefile.all.am for more detail.
 AM_CCASFLAGS = $(AM_CPPFLAGS)
 
+if VGCONF_OS_IS_SOLARIS
+# Make sure that all test programs have threaded errno.
+AM_CFLAGS  += -D_REENTRANT
+endif
+
 if VGCONF_OS_IS_DARWIN
 noinst_DSYMS = $(check_PROGRAMS)
 endif
diff --git a/Makefile.tool.am b/Makefile.tool.am
index 41f5c97..5af3023 100644
--- a/Makefile.tool.am
+++ b/Makefile.tool.am
@@ -36,6 +36,9 @@
 	-static -nodefaultlibs -nostartfiles -u _start @FLAG_NO_BUILD_ID@
 TOOL_LDFLAGS_COMMON_DARWIN = \
 	-nodefaultlibs -nostartfiles -Wl,-u,__start -Wl,-e,__start
+TOOL_LDFLAGS_COMMON_SOLARIS = \
+	-static -nodefaultlibs -nostartfiles -u _start \
+	-Wl,-M,/usr/lib/ld/map.noexstk
 
 TOOL_LDFLAGS_X86_LINUX = \
 	$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@
@@ -79,6 +82,12 @@
 TOOL_LDFLAGS_TILEGX_LINUX = \
 	$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@
 
+TOOL_LDFLAGS_X86_SOLARIS = \
+	$(TOOL_LDFLAGS_COMMON_SOLARIS) @FLAG_M32@
+
+TOOL_LDFLAGS_AMD64_SOLARIS = \
+	$(TOOL_LDFLAGS_COMMON_SOLARIS) @FLAG_M64@
+
 # On Android we must ask for non-executable stack, not sure why.
 if VGCONF_PLATFORMS_INCLUDE_ARM_LINUX
 if VGCONF_PLATVARIANT_IS_ANDROID
@@ -138,6 +147,12 @@
 LIBREPLACEMALLOC_TILEGX_LINUX = \
 	$(top_builddir)/coregrind/libreplacemalloc_toolpreload-tilegx-linux.a
 
+LIBREPLACEMALLOC_X86_SOLARIS = \
+	$(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-solaris.a
+
+LIBREPLACEMALLOC_AMD64_SOLARIS = \
+	$(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-solaris.a
+
 LIBREPLACEMALLOC_LDFLAGS_X86_LINUX = \
 	-Wl,--whole-archive \
 	$(LIBREPLACEMALLOC_X86_LINUX) \
@@ -199,6 +214,16 @@
 	$(LIBREPLACEMALLOC_TILEGX_LINUX) \
 	-Wl,--no-whole-archive
 
+LIBREPLACEMALLOC_LDFLAGS_X86_SOLARIS = \
+	-Wl,--whole-archive \
+	$(LIBREPLACEMALLOC_X86_SOLARIS) \
+	-Wl,--no-whole-archive
+
+LIBREPLACEMALLOC_LDFLAGS_AMD64_SOLARIS = \
+	-Wl,--whole-archive \
+	$(LIBREPLACEMALLOC_AMD64_SOLARIS) \
+	-Wl,--no-whole-archive
+
 #----------------------------------------------------------------------------
 # General stuff
 #----------------------------------------------------------------------------
diff --git a/NEWS b/NEWS
index f4b2ce2..b482745 100644
--- a/NEWS
+++ b/NEWS
@@ -1,87 +1,213 @@
-Release 3.11.0 (?? ????????? 201?)
+Release 3.12.0 (?? ????????? 201?)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Release 3.11.0 is under development, not yet released.
+Release 3.12.0 is under development, not yet released.
 
 * ================== PLATFORM CHANGES =================
 
-* s390x: It is now required for the host to have the long displacement
-  facility. The oldest supported machine model is z990.
-
 * ==================== TOOL CHANGES ====================
 
 * Memcheck:
 
-* Massif:
-  - New monitor command 'all_snapshots <filename>' that dumps all snapshots
-    taken so far.
-
 * Helgrind:
-  - The default value for --conflict-cache-size=N has been doubled to 2000000.
-    Users that were not using the default value should preferrably also
-    double the value they give. 
-    The default was updaded due to the changes in the full history
-    implementation. Doubling the value gives in average a slightly more
-    complete history and uses similar memory (or significantly less memory
-    in the worst case) than the previous Helgrind version.
-    
-  - Significant memory improvement and moderate speed improvement for
-    --history-level=full for applications accessing a lot of memory with
-    many different stacktraces.
-
-  - The helgrind monitor command 'info locks' now accepts an optional
-    argument 'lock_addr', to only show information about the lock at the
-    given address.
-
-  - When using --history-level=full, the new helgrind monitor command
-    'accesshistory <addr> [<len>]' will show the recorded accesses for
-    <len> (or 1) bytes at <addr>.
 
 * Callgrind:
 
+* DRD:
+n-i-bz Improved thread startup time significantly on non-Linux platforms.
+
 * ==================== OTHER CHANGES ====================
 
+* ==================== FIXED BUGS ====================
+
+The following bugs have been fixed or resolved.  Note that "n-i-bz"
+stands for "not in bugzilla" -- that is, a bug that was reported to us
+but never got a bugzilla entry.  We encourage you to file bugs in
+bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
+than mailing the developers (or mailing lists) directly -- bugs that
+are not entered into bugzilla tend to get forgotten about or ignored.
+
+To see details of a given bug, visit
+  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
+where XXXXXX is the bug number as listed below.
+
+278744  cvtps2pd with redundant RexW
+353083  arm64 doesn't implement various xattr system calls
+353084  arm64 doesn't support sigpending system call
+353370  don't advertise RDRAND in cpuid for Core-i7-4910-like avx2 machine
+353398  WARNING: unhandled amd64-solaris syscall: 207
+353680  s390x: Crash with certain glibc versions due to non-implemented TBEGIN
+353891  Assert 'bad_scanned_addr < VG_ROUNDDN(start+len, sizeof(Addr))' failed
+353917  unhandled amd64-solaris syscall fchdir(120)
+353920  unhandled amd64-solaris syscall: 170
+
+
+
+Release 3.11.0 (22 September 2015)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+3.11.0 is a feature release with many improvements and the usual
+collection of bug fixes.
+
+This release supports X86/Linux, AMD64/Linux, ARM32/Linux,
+ARM64/Linux, PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux,
+MIPS32/Linux, MIPS64/Linux, ARM/Android, ARM64/Android,
+MIPS32/Android, X86/Android, X86/Solaris, AMD64/Solaris, X86/MacOSX
+10.10 and AMD64/MacOSX 10.10.  There is also preliminary support for
+X86/MacOSX 10.11, AMD64/MacOSX 10.11 and TILEGX/Linux.
+
+* ================== PLATFORM CHANGES =================
+
+* Support for Solaris/x86 and Solaris/amd64 has been added.
+
+* Preliminary support for Mac OS X 10.11 (El Capitan) has been added.
+
+* Preliminary support for the Tilera TileGX architecture has been added.
+
+* s390x: It is now required for the host to have the "long displacement"
+  facility.  The oldest supported machine model is z990.
+
+* x86: on an SSE2 only host, Valgrind in 32 bit mode now claims to be a
+  Pentium 4.  3.10.1 wrongly claimed to be a Core 2, which is SSSE3.
+
+* The JIT's register allocator is significantly faster, making the JIT
+  as a whole somewhat faster, so JIT-intensive activities, for example
+  program startup, are modestly faster, around 5%.
+
+* There have been changes to the default settings of several command
+  line flags, as detailed below.
+
+* Intel AVX2 support is more complete (64 bit targets only).  On AVX2
+  capable hosts, the simulated CPUID will now indicate AVX2 support.
+
+* ==================== TOOL CHANGES ====================
+
+* Memcheck:
+
+  - The default value for --leak-check-heuristics has been changed from
+    "none" to "all". This helps to reduce the number of possibly
+    lost blocks, in particular for C++ applications.
+
+  - The default value for --keep-stacktraces has been changed from
+    "malloc-then-free" to "malloc-and-free".  This has a small cost in
+    memory (one word per malloc-ed block) but allows Memcheck to show the
+    3 stacktraces of a dangling reference: where the block was allocated,
+    where it was freed, and where it is acccessed after being freed.
+
+  - The default value for --partial-loads-ok has been changed from "no" to 
+    "yes", so as to avoid false positive errors resulting from some kinds
+    of vectorised loops.
+
+  - A new monitor command 'xb <addr> <len>' shows the validity bits of
+    <len> bytes at <addr>.  The monitor command 'xb' is easier to use
+    than get_vbits when you need to associate byte data value with
+    their corresponding validity bits.
+
+  - The 'block_list' monitor command has been enhanced:
+      o it can print a range of loss records
+      o it now accepts an optional argument 'limited <max_blocks>'
+        to control the number of blocks printed.
+      o if a block has been found using a heuristic, then
+        'block_list' now shows the heuristic after the block size.
+      o the loss records/blocks to print can be limited to the blocks
+        found via specified heuristics.
+
+  - The C helper functions used to instrument loads on
+    x86-{linux,solaris} and arm-linux (both 32-bit only) have been
+    replaced by handwritten assembly sequences.  This gives speedups
+    in the region of 0% to 7% for those targets only.
+
+  - A new command line option, --expensive-definedness-checks=yes|no,
+    has been added.  This is useful for avoiding occasional invalid
+    uninitialised-value errors in optimised code.  Watch out for
+    runtime degradation, as this can be up to 25%.  As always, though,
+    the slowdown is highly application specific.  The default setting
+    is "no".
+
+* Massif:
+
+  - A new monitor command 'all_snapshots <filename>' dumps all
+    snapshots taken so far.
+
+* Helgrind:
+
+  - Significant memory reduction and moderate speedups for
+    --history-level=full for applications accessing a lot of memory
+    with many different stacktraces.
+
+  - The default value for --conflict-cache-size=N has been doubled to
+    2000000.  Users that were not using the default value should
+    preferably also double the value they give.
+
+    The default was changed due to the changes in the "full history"
+    implementation.  Doubling the value gives on average a slightly more
+    complete history and uses similar memory (or significantly less memory
+    in the worst case) than the previous implementation.
+    
+  - The Helgrind monitor command 'info locks' now accepts an optional
+    argument 'lock_addr', which shows information about the lock at the
+    given address only.
+
+  - When using --history-level=full, the new Helgrind monitor command
+    'accesshistory <addr> [<len>]' will show the recorded accesses for
+    <len> (or 1) bytes at <addr>.
+
+* ==================== OTHER CHANGES ====================
+
+* The default value for the --smc-check option has been changed from
+  "stack" to "all-non-file" on targets that provide automatic D-I
+  cache coherence (x86, amd64 and s390x).  The result is to provide,
+  by default, transparent support for JIT generated and self-modifying
+  code on all targets.
+
+* Mac OS X only: the default value for the --dsymutil option has been
+  changed from "no" to "yes", since any serious usage on Mac OS X
+  always required it to be "yes".
+
+* The command line options --db-attach and --db-command have been removed.
+  They were deprecated in 3.10.0.
+
 * When a process dies due to a signal, Valgrind now shows the signal
   and the stacktrace at default verbosity (i.e. verbosity 1).
 
-* Address description logic (used by memcheck and helgrind)
-  now describes addresses in anonymous segments, file mmap-ed
-  segments, shared memory segments and the brk data segment.
+* The address description logic used by Memcheck and Helgrind now
+  describes addresses in anonymous segments, file mmap-ed segments,
+  shared memory segments and the brk data segment.
 
-* Option --error-markers=<begin>,<end> can be used to mark
-  the begin/end of errors in textual output mode, to facilitate
-  searching/extracting errors in output files mixing valgrind
-  errors with program output.
+* The new option --error-markers=<begin>,<end> can be used to mark the
+  begin/end of errors in textual output mode, to facilitate
+  searching/extracting errors in output files that mix valgrind errors
+  with program output.
 
-* New Option --max-threads=<number> can be used to change the
-  number of threads valgrind can handle. The default is 500 threads
-  which should be more than enough for most applications.
+* The new option --max-threads=<number> can be used to change the number
+  of threads valgrind can handle.  The default is 500 threads which
+  should be more than enough for most applications.
 
-* New Option --valgrind-stacksize=<number> can be used to change
-  the size of the private thread stacks used by Valgrind.
-  Useful to reduce memory use or increase the stack size if Valgrind
-  segfaults due to stack exhausted.
+* The new option --valgrind-stacksize=<number> can be used to change the
+  size of the private thread stacks used by Valgrind.  This is useful
+  for reducing memory use or increasing the stack size if Valgrind
+  segfaults due to stack overflow.
 
-* New Option --avg-transtab-entry-size=<number> can be used to tune
-  the size of the translation table sectors, either to gain memory
-  or to avoid too many retranslations.
+* The new option --avg-transtab-entry-size=<number> can be used to specify
+  the expected instrumented block size, either to reduce memory use or
+  to avoid excessive retranslation.
 
-* Valgrind can be built with Intel's ICC compiler. The required
-  compiler version is 14.0 or later.
+* Valgrind can be built with Intel's ICC compiler, version 14.0 or later.
 
 * New and modified GDB server monitor features:
+
   - When a signal is reported in GDB, you can now use the GDB convenience
     variable $_siginfo to examine detailed signal information.
  
-  - Valgrind gdbserver now allows the user to change the signal
-    to deliver to the process. So, use 'signal SIGNAL' to continue execution
+  - Valgrind's gdbserver now allows the user to change the signal
+    to deliver to the process.  So, use 'signal SIGNAL' to continue execution
     with SIGNAL instead of the signal reported to GDB. Use 'signal 0' to
     continue without passing the signal to the process.
 
-  - With recent GDB (>= 7.9.50.20150514-cvs), the command 'target remote'
+  - With GDB >= 7.10, the command 'target remote'
     will automatically load the executable file of the process running
     under Valgrind. This means you do not need to specify the executable
-    file yourself, GDB will discover it itself.
-    See GDB documentation about 'qXfer:exec-file:read' packet for more info.
+    file yourself, GDB will discover it itself.  See GDB documentation about
+    'qXfer:exec-file:read' packet for more info.
 
 * ==================== FIXED BUGS ====================
 
@@ -100,60 +226,87 @@
 155125  avoid cutting away file:lineno after long function name
 197259  Unsupported arch_prtctl PR_SET_GS option
 201152  ppc64: Assertion in ppc32g_dirtyhelper_MFSPR_268_269
+201216  Fix Valgrind does not support pthread_sigmask() on OS X
 201435  Fix Darwin: -v does not show kernel version
 208217  "Warning: noted but unhandled ioctl 0x2000747b" on Mac OS X
 211256  Fixed an outdated comment regarding the default platform.
+211529  Incomplete call stacks for code compiled by newer versions of MSVC
 211926  Avoid compilation warnings in valgrind.h with -pedantic
 212291  Fix unhandled syscall: unix:132 (mkfifo) on OS X
         == 263119
 226609  Crediting upstream authors in man page
 231257  Valgrind omits path when executing script from shebang line
-254164  OS X task_info: UNKNOWN task message [id 3405, to mach_task_self(), 
-        reply 0x........]
+254164  OS X task_info: UNKNOWN task message [id 3405, to mach_task_self() [..]
+294065  Improve the pdb file reader by avoiding hardwired absolute pathnames
 269360  s390x: Fix addressing mode selection for compare-and-swap
+302630  Memcheck: Assertion failed: 'sizeof(UWord) == sizeof(UInt)'
+        == 326797
+312989  ioctl handling needs to do POST handling on generic ioctls and [..]
 319274  Fix unhandled syscall: unix:410 (sigsuspend_nocancel) on OS X
+324181  mmap does not handle MAP_32BIT (handle it now, rather than fail it)
+327745  Fix valgrind 3.9.0 build fails on Mac OS X 10.6.8
+330147  libmpiwrap PMPI_Get_count returns undefined value
 333051  mmap of huge pages fails due to incorrect alignment
         == 339163
 334802  valgrind does not always explain why a given option is bad
+335618  mov.w rN, pc/sp (ARM32)
 335785  amd64->IR 0xC4 0xE2 0x75 0x2F (vmaskmovpd)
         == 307399
         == 343175
         == 342740
+        == 346912
 335907  segfault when running wine's ddrawex/tests/surface.c under valgrind
+338602  AVX2 bit in CPUID missing
+338606  Strange message for scripts with invalid interpreter
 338731  ppc: Fix testuite build for toolchains not supporting -maltivec
 338995  shmat with hugepages (SHM_HUGETLB) fails with EINVAL
 339045  Getting valgrind to compile and run on OS X Yosemite (10.10)
         == 340252
 339156  gdbsrv not called for fatal signal
+339215  Valgrind 3.10.0 contain 2013 in copyrights notice
 339288  support Cavium Octeon MIPS specific BBIT*32 instructions
+339636  Use fxsave64 and fxrstor64 mnemonics instead of old-school rex64 prefix
 339442  Fix testsuite build failure on OS X 10.9
 339542  Enable compilation with Intel's ICC compiler
-339636  Use fxsave64 and fxrstor64 mnemonics instead of old-school rex64 prefix 
+339563  The DVB demux DMX_STOP ioctl doesn't have a wrapper
 339688  Mac-specific ASM does not support .version directive (cpuid,
         tronical and pushfpopf tests)
 339745  Valgrind crash when check Marmalade app (partial fix)
 339755  Fix known deliberate memory leak in setenv() on Mac OS X 10.9
+339778  Linux/TileGx platform support for Valgrind
 339780  Fix known uninitialised read in pthread_rwlock_init() on Mac OS X 10.9 
 339789  Fix none/tests/execve test on Mac OS X 10.9
 339808  Fix none/tests/rlimit64_nofile test on Mac OS X 10.9
+339820  vex amd64->IR: 0x66 0xF 0x3A 0x63 0xA 0x42 0x74 0x9 (pcmpistri $0x42)
 340115  Fix none/tests/cmdline[1|2] tests on systems which define TMPDIR
+340392  Allow user to select more accurate definedness checking in memcheck
+        to avoid invalid complaints on optimised code
 340430  Fix some grammatical weirdness in the manual.
 341238  Recognize GCC5/DWARFv5 DW_LANG constants (Go, C11, C++11, C++14)
+341419  Signal handler ucontext_t not filled out correctly on OS X
 341539  VG_(describe_addr) should not describe address as belonging to client
         segment if it is past the heap end
 341613  Enable building of manythreads and thread-exits tests on Mac OS X
 341615  Fix none/tests/darwin/access_extended test on Mac OS X
-341698  Valgrind's AESKEYGENASSIST gives wrong result in words 0 and 2
-        when dest register = source register
+341698  Valgrind's AESKEYGENASSIST gives wrong result in words 0 and 2 [..]
 341789  aarch64: shmat fails with valgrind on ARMv8
+341997  MIPS64: Cavium OCTEON insns - immediate operand handled incorrectly
+342008  valgrind.h needs type cast [..] for clang/llvm in 64-bit mode
 342038  Unhandled syscalls on aarch64 (mbind/get/set_mempolicy)
 342063  wrong format specifier for test mcblocklistsearch in gdbserver_tests
+342117  Hang when loading PDB file for MSVC compiled Firefox under Wine
 342221  socket connect false positive uninit memory for unknown af family
 342353  Allow dumping full massif output while valgrind is still running
+342571  Valgrind chokes on AVX compare intrinsic with _CMP_GE_QS
+        == 346476
+        == 348387
+        == 350593
 342603  Add I2C_SMBUS ioctl support
 342635  OS X 10.10 (Yosemite) - missing system calls and fcntl code
 342683  Mark memory past the initial brk limit as unaddressable
+342783  arm: unhandled instruction 0xEEFE1ACA = "vcvt.s32.f32 s3, s3, #12"
 342795  Internal glibc __GI_mempcpy call should be intercepted
+342841  s390x: Support instructions fiebr(a) and fidbr(a)
 343012  Unhandled syscall 319 (memfd_create)
 343069  Patch updating v4l2 API support
 343173  helgrind crash during stack unwind
@@ -162,68 +315,139 @@
 343306  OS X 10.10: UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option
 343332  Unhandled instruction 0x9E310021 (fcvtmu) on aarch64
 343335  unhandled instruction 0x1E638400 (fccmp) aarch64
-343523  OS X mach_ports_register: UNKNOWN task message [id 3403, to 
-        mach_task_self(), reply 0x30f]
+343523  OS X mach_ports_register: UNKNOWN task message [id 3403, to [..]
+343525  OS X host_get_special_port: UNKNOWN host message [id 412, to [..]
 343597  ppc64le: incorrect use of offseof macro
+343649  OS X host_create_mach_voucher: UNKNOWN host message [id 222, to [..]
+343663  OS X 10.10  Memchecj always reports a leak regardless of [..]
 343732  Unhandled syscall 144 (setgid) on aarch64
 343733  Unhandled syscall 187 (msgctl and related) on aarch64
-343802  s390x: Fix false positives "conditional jump or move depends on
-        unitialised value(s)"
+343802  s390x: False positive "conditional jump or move depends on [..]
 343902  --vgdb=yes doesn't break when --xml=yes is used
 343967  Don't warn about setuid/setgid/setcap executable for directories
 343978  Recognize DWARF5/GCC5 DW_LANG_Fortran 2003 and 2008 constants
 344007  accept4 syscall unhandled on arm64 (242) and ppc64 (344)
-344033  Helgrind on ARM32 loses track of mutex lockedness state in
-        pthread_cond_wait
+344033  Helgrind on ARM32 loses track of mutex state in pthread_cond_wait
 344054  www - update info for Solaris/illumos
+344416  'make regtest' does not work cleanly on OS X
 344235  Remove duplicate include of pub_core_aspacemgr.h
 344279  syscall sendmmsg on arm64 (269) and ppc32/64 (349) unhandled
 344295  syscall recvmmsg on arm64 (243) and ppc32/64 (343) unhandled
 344307  2 unhandled syscalls on aarch64/arm64: umount2(39), mount (40)
 344314  callgrind_annotate ... warnings about commands containing newlines
 344318  socketcall should wrap recvmmsg and sendmmsg
-344499  Fix compilation for Linux kernel >= 4. With this, also require
-        a Linux kernel >= 2.6 as 2.4 is mostly untested and might trigger
-        obvious and non-obvious issues
-344512  Fix unhandled syscall: unix:348 (__pthread_chdir) and unhandled 
-        syscall: unix:349 (__pthread_fchdir) on OS X
+344337  Fix unhandled syscall: mach:41 (_kernelrpc_mach_port_guard_trap)
+344416  Fix 'make regtest' does not work cleanly on OS X
+344499  Fix compilation for Linux kernel >= 4.0.0
+344512  OS X: unhandled syscall: unix:348 (__pthread_chdir), 
+        unix:349 (__pthread_fchdir)
 344559  Garbage collection of unused segment names in address space manager
 344560  Fix stack traces missing penultimate frame on OS X
 344621  Fix memcheck/tests/err_disable4 test on OS X
 344686  Fix suppression for pthread_rwlock_init on OS X 10.10
 344702  Fix missing libobjc suppressions on OS X 10.10
+        == 344543
 344936  Fix unhandled syscall: unix:473 (readlinkat) on OS X 10.10
 344939  Fix memcheck/tests/xml1 on OS X 10.10
 345016  helgrind/tests/locked_vs_unlocked2 is failing sometimes
 345079  Fix build problems in VEX/useful/test_main.c
+345126  Incorrect handling of VIDIOC_G_AUDIO and G_AUDOUT
+345177  arm64: prfm (reg) not implemented
 345215  Performance improvements for the register allocator
+345248  add support for Solaris OS in valgrind
+345338  TIOCGSERIAL and TIOCSSERIAL ioctl support on Linux
 345394  Fix memcheck/tests/strchr on OS X
 345637  Fix memcheck/tests/sendmsg on OS X
 345695  Add POWERPC support for AT_DCACHESIZE and HWCAP2
 345824  Fix aspacem segment mismatch: seen with none/tests/bigcode
 345887  Fix an assertion in the address space manager
+345928  amd64: callstack only contains current function for small stacks
+345984  disInstr(arm): unhandled instruction: 0xEE193F1E
+345987  MIPS64: Implement cavium LHX instruction
+346031  MIPS: Implement support for the CvmCount register (rhwr %0, 31)
+346185  Fix typo saving altivec register v24
 346267  Compiler warnings for PPC64 code on call to LibVEX_GuestPPC64_get_XER()
         and LibVEX_GuestPPC64_get_CR()
 346270  Regression tests none/tests/jm_vec/isa_2_07 and
         none/tests/test_isa_2_07_part2 have failures on PPC64 little endian
 346307  fuse filesystem syscall deadlocks
 346324  PPC64 missing support for lbarx, lharx, stbcx and sthcx instructions
+346411  MIPS: SysRes::_valEx handling is incorrect
 346416  Add support for LL_IOC_PATH2FID and LL_IOC_GETPARENT Lustre ioctls
 346474  PPC64 Power 8, spr TEXASRU register not supported
 346487  Compiler generates "note" about a future ABI change for PPC64
+346562  MIPS64: lwl/lwr instructions are performing 64bit loads
+        and causing spurious "invalid read of size 8" warnings
 346801  Fix link error on OS X: _vgModuleLocal_sf_maybe_extend_stack
 347151  Fix suppression for pthread_rwlock_init on OS X 10.8
 347233  Fix memcheck/tests/strchr on OS X 10.10 (Haswell) 
-347379  valgrind --leak-check=full memleak errors from system libraries on OS X 10.8
+347322  Power PC regression test cleanup
+347379  valgrind --leak-check=full leak errors from system libs on OS X 10.8
         == 217236
 347389  unhandled syscall: 373 (Linux ARM syncfs)
+347686  Patch set to cleanup PPC64 regtests
+347978  Remove bash dependencies where not needed
+347982  OS X: undefined symbols for architecture x86_64: "_global" [..]
+347988  Memcheck: the 'impossible' happened: unexpected size for Addr (OSX/wine)
+        == 345929
+348102  Patch updating v4l2 API support
+348247  amd64 front end: jno jumps wrongly when overflow is not set
+348269  Improve mmap MAP_HUGETLB support.
+348334  (ppc) valgrind does not simulate dcbfl - then my program terminates
+348345  Assertion fails for negative lineno
+348377  Unsupported ARM instruction: yield
+348565  Fix detection of command line option availability for clang
+348574  vex amd64->IR pcmpistri SSE4.2 unsupported (pcmpistri $0x18)
+348728  Fix broken check for VIDIOC_G_ENC_INDEX
+348748  Fix redundant condition
+348890  Fix clang warning about unsupported --param inline-unit-growth=900
+348949  Bogus "ERROR: --ignore-ranges: suspiciously large range"
+349034  Add Lustre ioctls LL_IOC_GROUP_LOCK and LL_IOC_GROUP_UNLOCK
+349086  Fix UNKNOWN task message [id 3406, to mach_task_self(), [..]
+349087  Fix UNKNOWN task message [id 3410, to mach_task_self(), [..]
+349626  Implemented additional Xen hypercalls
+349769  Clang/osx: ld: warning: -read_only_relocs cannot be used with x86_64
+349790  Clean up of the hardware capability checking utilities.
+349828  memcpy intercepts memmove causing src/dst overlap error (ppc64 ld.so)
+349874  Fix typos in source code
+349879  memcheck: add handwritten assembly for helperc_LOADV*
+349941  di_notify_mmap might create wrong start/size DebugInfoMapping
+350062  vex x86->IR: 0x66 0xF 0x3A 0xB (ROUNDSD) on OS X
+350202  Add limited param to 'monitor block_list'
+350290  s390x: Support instructions fixbr(a)
+350359  memcheck/tests/x86/fxsave hangs indefinetely on OS X
+350809  Fix none/tests/async-sigs for Solaris
+350811  Remove reference to --db-attach which has been removed.
+350813  Memcheck/x86: enable handwritten assembly helpers for x86/Solaris too
+350854  hard-to-understand code in VG_(load_ELF)()
+351140  arm64 syscalls setuid (146) and setresgid (149) not implemented
+351386  Solaris: Cannot run ld.so.1 under Valgrind
+351474  Fix VG_(iseqsigset) as obvious
+351534  Fix incorrect header guard
+351632  Fix UNKNOWN fcntl 97 on OS X 10.11
+351756  Intercept platform_memchr$VARIANT$Haswell on OS X
+351858  ldsoexec support on Solaris
+351873  Newer gcc doesn't allow __builtin_tabortdc[i] in ppc32 mode
+352130  helgrind reports false races for printfs using mempcpy on FILE* state
+352284  s390: Conditional jump depends on uninitialised value(s) in vfprintf 
+352320  arm64 crash on none/tests/nestedfs
+352765  Vbit test fails on Power 6
+352768  The mbar instruction is missing from the Power PC support
+352769  Power PC program priority register (PPR) is not supported
 n-i-bz  Provide implementations of certain compiler builtins to support
-        compilers who may not provide those
+        compilers that may not provide those
 n-i-bz  Old STABS code is still being compiled, but never used. Remove it.
 n-i-bz  Fix compilation on distros with glibc < 2.5
 n-i-bz  (vex 3098) Avoid generation of Neon insns on non-Neon hosts
 n-i-bz  Enable rt_sigpending syscall on ppc64 linux.
 n-i-bz  mremap did not work properly on shared memory
+n-i-bz  Fix incorrect sizeof expression in syswrap-xen.c reported by Coverity
+n-i-bz  In VALGRIND_PRINTF write out thread name, if any, to xml
+
+(3.11.0.TEST1:  8 September 2015, vex r3187, valgrind r15646)
+(3.11.0.TEST2: 21 September 2015, vex r3193, valgrind r15667)
+(3.11.0:       22 September 2015, vex r3195, valgrind r15674)
+
 
 
 Release 3.10.1 (25 November 2014)
@@ -274,6 +498,13 @@
 340807  disInstr(arm): unhandled instruction: 0xEE989B20
 340856  disInstr(arm64): unhandled instruction 0x1E634C45 (fcsel)
 340922  arm64: unhandled getgroups/setgroups syscalls
+350251  Fix typo in VEX utility program (test_main.c).
+350407  arm64: unhandled instruction ucvtf (vector, integer)
+350809  none/tests/async-sigs breaks when run under cron on Solaris
+350811  update README.solaris after r15445
+350813  Use handwritten memcheck assembly helpers on x86/Solaris [..]
+350854  strange code in VG_(load_ELF)()
+351140  arm64 syscalls setuid (146) and setresgid (149) not implemented
 n-i-bz  DRD and Helgrind: Handle Imbe_CancelReservation (clrex on ARM)
 n-i-bz  Add missing ]] to terminate CDATA.
 n-i-bz  Glibc versions prior to 2.5 do not define PTRACE_GETSIGINFO
diff --git a/README.s390 b/README.s390
index 5b3d3c0..96dac1b 100644
--- a/README.s390
+++ b/README.s390
@@ -22,6 +22,9 @@
 - Some gcc versions use mvc to copy 4/8 byte values. This will affect
   certain debug messages. For example, memcheck will complain about
   4 one-byte reads/writes instead of just a single read/write.
+- The transactional-execution facility is not supported; it is masked
+  off from HWCAP.
+- The vector facility is not supported; it is masked off from HWCAP.
 
 
 Hardware facilities
diff --git a/README.solaris b/README.solaris
new file mode 100644
index 0000000..ed73e49
--- /dev/null
+++ b/README.solaris
@@ -0,0 +1,142 @@
+Requirements
+------------
+- You need a recent Solaris-like OS to compile this port. Solaris 11 or
+  any illumos-based distribution should work, Solaris 10 is not supported.
+  Running `uname -r` has to print '5.11'.
+- Recent GCC tools are required, GCC 3 will probably not work. GCC version
+  4.5 (or higher) is recommended.
+- Solaris ld has to be the first linker in the PATH. GNU ld cannot be used.
+  There is currently no linker check in the configure script but the linking
+  phase fails if GNU ld is used. Recent Solaris/illumos distributions are ok.
+- A working combination of autotools is required: aclocal, autoheader,
+  automake and autoconf have to be found in the PATH. You should be able to
+  install pkg:/developer/build/automake and pkg:/developer/build/autoconf
+  packages to fullfil this requirement.
+- System header files are required. On Solaris, these can be installed with:
+    # pkg install system/header
+- GNU make is also required. On Solaris, this can be quickly achieved with:
+    $ PATH=/usr/gnu/bin:$PATH; export PATH
+- For remote debugging support, working GDB is required (see below).
+
+
+Compilation
+-----------
+Please follow the generic instructions in the README file.
+
+The configure script detects a canonical host to determine which version of
+Valgrind should be built. If the system compiler by default produces 32-bit
+binaries then only a 32-bit version of Valgrind will be built. To enable
+compilation of both 64-bit and 32-bit versions on such a system, issue the
+configure script as follows:
+./configure CC='gcc -m64' CXX='g++ -m64'
+
+
+Oracle Solaris and illumos support
+----------------------------------
+One of the main goal of this port is to support both Oracle Solaris and
+illumos kernels. This is a very hard task because Solaris kernel traditionally
+does not provide a stable syscall interface and because Valgrind contains
+several parts that are closely tied to the underlying kernel. For these
+reasons, the port needs to detect which syscall interfaces are present. This
+detection cannot be done easily at run time and is currently implemented as
+a set of configure tests. This means that a binary version of this port can be
+executed only on a kernel that is compatible with a kernel that was used
+during the configure and compilation time.
+
+Main currently-known incompatibilities:
+- Solaris 11 (released in November 2011) removed a large set of syscalls where
+  *at variant of the syscall was also present, for example, open() versus
+  openat(AT_FDCWD) [1]
+- syscall number for unlinkat() is 76 on Solaris 11, but 65 on illumos [2]
+- illumos (in April 2013) changed interface of the accept() and pipe()
+  syscalls [3]
+
+[1] http://docs.oracle.com/cd/E26502_01/html/E28556/gkzlf.html#gkzip
+[2] https://www.illumos.org/issues/521
+[3] https://github.com/illumos/illumos-gate/commit/5dbfd19ad5fcc2b779f40f80fa05c1bd28fd0b4e
+
+
+Limitations
+-----------
+- The port is Work-In-Progress, many things may not work or they can be subtly
+  broken.
+- Coredumps produced by Valgrind do not contain all information available,
+  especially microstate accounting and processor bindings.
+- Accessing contents of /proc/self/psinfo is not thread-safe.  That is because
+  Valgrind emulates this file on behalf of the client programs.  Entire
+  open() - read() - close() sequence on this file needs to be performed
+  atomically.
+- Fork limitations: vfork() is translated to fork(), forkall() is not
+  supported.
+- Valgrind does not track definedness of some eflags (OF, SF, ZF, AF, CF, PF)
+  individually for each flag. After a syscall is finished, when a carry flag
+  is set and defined, all other mentioned flags will be also defined even
+  though they might be undefined before making the syscall.
+- System call "execve" with a file descriptor which points to a hardlink
+  is currently not supported. That is because from the opened file descriptor
+  itself it is not possible to reverse map the intended pathname.
+  Examples are fexecve(3C) and isaexec(3C).
+- Program headers PT_SUNW_SYSSTAT and PT_SUNW_SYSSTAT_ZONE are not supported.
+  That is, programs linked with mapfile directive RESERVE_SEGMENT and attribute
+  TYPE equal to SYSSTAT or SYSSTAT_ZONE will cause Valgrind exit. It is not
+  possible for Valgrind to arrange mapping of a kernel shared page at the
+  address specified in the mapfile for the guest application. There is currently
+  no such mechanism in Solaris. Hacky workarounds are possible, though.
+- When a thread has no stack then all system calls will result in Valgrind
+  crash, even though such system calls use just parameters passed in registers.
+  This should happen only in pathological situations when a thread is created
+  with custom mmap'ed stack and this stack is then unmap'ed during thread
+  execution.
+
+
+Remote debugging support
+------------------------
+Solaris port of GDB has a major flaw which prevents remote debugging from
+working correctly. Fortunately this flaw has an easy fix [4]. Unfortunately
+it is not present in the current GDB 7.6.2. This boils down to several
+options:
+- Use GDB shipped with Solaris 11.2 which has this flaw fixed.
+- Wait until GDB 7.7 becomes available (there won't be other 7.6.x releases).
+- Build GDB 7.6.2 with the fix by yourself using the following steps:
+    # pkg install developer/gnu-binutils
+    $ wget http://ftp.gnu.org/gnu/gdb/gdb-7.6.2.tar.gz
+    $ gzip -dc gdb-7.6.2.tar.gz | tar xf -
+    $ cd gdb-7.6.2
+    $ patch -p1 -i /path/to/valgrind-solaris/solaris/gdb-sol-thread.patch
+    $ export LIBS="-lncurses"
+    $ export CC="gcc -m64"
+    $ ./configure --with-x=no --with-curses --with-libexpat-prefix=/usr/lib
+    $ gmake && gmake install
+
+[4] https://sourceware.org/ml/gdb-patches/2013-12/msg00573.html
+
+
+TODO list
+---------
+- Fix few remaining failing tests.
+- Add more Solaris-specific tests (especially for the door and spawn
+  syscalls).
+- Provide better error reporting for various subsyscalls.
+- Implement storing of extra register state in signal frame.
+- Performance comparison against other platforms.
+
+- Prevent SIGPIPE when writing to a socket (coregrind/m_libcfile.c).
+- Implement ticket locking for fair scheduling (--fair-sched=yes).
+- Implement support in DRD and Helgrind tools for thr_join() with thread == 0.
+- Add support for accessing thread-local variables via gdb (auxprogs/getoff.c).
+  Requires research on internal libc TLS representation.
+- VEX supports AVX, BMI and AVX2. Investigate if they can be enabled on
+  Solaris/illumos.
+- Investigate support for more flags in AT_SUN_AUXFLAGS.
+- Fix Valgrind crash when a thread has no stack and syswrap-main.c accesses
+  all possible syscall parameters. Enable helgrind/tests/stackteardown.c
+  to see this in effect. Would require awareness of syscall parameter semantics.
+- Correctly print arguments of DW_CFA_ORCL_arg_loc in show_CF_instruction() when
+  it is implemented in libdwarf.
+
+
+Contacts
+--------
+Please send bug reports and any questions about the port to:
+Ivo Raisr <ivosh@ivosh.net>
+Petr Pavlu <setup@dagobah.cz>
diff --git a/README_MISSING_SYSCALL_OR_IOCTL b/README_MISSING_SYSCALL_OR_IOCTL
index 27d1ab0..ab78902 100644
--- a/README_MISSING_SYSCALL_OR_IOCTL
+++ b/README_MISSING_SYSCALL_OR_IOCTL
@@ -182,3 +182,54 @@
 As above, please create a bug report and attach the patch as described
 on http://www.valgrind.org.
 
+
+Writing your own door call wrappers (Solaris only)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Unlike syscalls or ioctls, door calls transfer data between two userspace
+programs, albeit through a kernel interface. Programs may use completely
+proprietary semantics in the data buffers passed between them.
+Therefore it may not be possible to capture these semantics within
+a Valgrind door call or door return wrapper.
+
+Nevertheless, for system or well-known door services it would be beneficial
+to have a door call and a door return wrapper. Writing such wrapper is pretty
+much the same as writing ioctl wrappers. Please take a few moments to study
+the following picture depicting how a door client and a door server interact
+through the kernel interface in a typical scenario:
+
+
+door client thread          kernel       door server thread
+invokes door_call()                     invokes door_return()
+-------------------------------------------------------------------
+                               <----  PRE(sys_door, DOOR_RETURN)
+PRE(sys_door, DOOR_CALL)  --->
+                               ---->  POST(sys_door, DOOR_RETURN)
+                                           ----> server_procedure()
+                                           <----
+                               <----  PRE(sys_door, DOOR_RETURN)
+POST(sys_door, DOOR_CALL) <---
+
+The first PRE(sys_door, DOOR_RETURN) is invoked with data_ptr=NULL
+and data_size=0. That's because it has not received any data from
+a door call, yet.
+
+Semantics are described by the following functions
+in coregring/m_syswrap/syswrap-solaris.c module:
+o For a door call wrapper the following attributes of 'params' argument:
+  - data_ptr (and associated data_size) as input buffer (request);
+      described in door_call_pre_mem_params_data()
+  - rbuf (and associated rsize) as output buffer (response);
+      described in door_call_post_mem_params_rbuf()
+o For a door return wrapper the following parameters:
+  - data_ptr (and associated data_size) as input buffer (request);
+      described in door_return_post_mem_data()
+  - data_ptr (and associated data_size) as output buffer (response);
+      described in door_return_pre_mem_data()
+
+There's a default case which may not be correct and you have to write a
+more specific case to get the right behaviour. Unless Valgrind's option
+'--sim-hints=lax-doors' is specified, the default case also spits a warning.
+
+As above, please create a bug report and attach the patch as described
+on http://www.valgrind.org.
diff --git a/VEX/auxprogs/genoffsets.c b/VEX/auxprogs/genoffsets.c
index b84efd3..70f6491 100644
--- a/VEX/auxprogs/genoffsets.c
+++ b/VEX/auxprogs/genoffsets.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_amd64_defs.h b/VEX/priv/guest_amd64_defs.h
index 003ebde..ec30015 100644
--- a/VEX/priv/guest_amd64_defs.h
+++ b/VEX/priv/guest_amd64_defs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -168,13 +168,19 @@
 extern void  amd64g_dirtyhelper_CPUID_sse3_and_cx16 ( VexGuestAMD64State* st );
 extern void  amd64g_dirtyhelper_CPUID_sse42_and_cx16 ( VexGuestAMD64State* st );
 extern void  amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st );
+extern void  amd64g_dirtyhelper_CPUID_avx2 ( VexGuestAMD64State* st );
 
 extern void  amd64g_dirtyhelper_FINIT ( VexGuestAMD64State* );
 
-extern void      amd64g_dirtyhelper_FXSAVE_ALL_EXCEPT_XMM
-                    ( VexGuestAMD64State*, HWord );
-extern VexEmNote amd64g_dirtyhelper_FXRSTOR_ALL_EXCEPT_XMM
-                    ( VexGuestAMD64State*, HWord );
+extern void amd64g_dirtyhelper_XSAVE_COMPONENT_0
+               ( VexGuestAMD64State* gst, HWord addr );
+extern void amd64g_dirtyhelper_XSAVE_COMPONENT_1_EXCLUDING_XMMREGS 
+               ( VexGuestAMD64State* gst, HWord addr );
+
+extern VexEmNote amd64g_dirtyhelper_XRSTOR_COMPONENT_0
+                    ( VexGuestAMD64State* gst, HWord addr );
+extern VexEmNote amd64g_dirtyhelper_XRSTOR_COMPONENT_1_EXCLUDING_XMMREGS 
+                    ( VexGuestAMD64State* gst, HWord addr );
 
 extern ULong amd64g_dirtyhelper_RDTSC ( void );
 extern void  amd64g_dirtyhelper_RDTSCP ( VexGuestAMD64State* st );
@@ -316,6 +322,15 @@
 #define AMD64G_CC_MASK_C    (1ULL << AMD64G_CC_SHIFT_C)
 #define AMD64G_CC_MASK_P    (1ULL << AMD64G_CC_SHIFT_P)
 
+/* additional rflags masks */
+#define AMD64G_CC_SHIFT_ID  21
+#define AMD64G_CC_SHIFT_AC  18
+#define AMD64G_CC_SHIFT_D   10
+
+#define AMD64G_CC_MASK_ID   (1ULL << AMD64G_CC_SHIFT_ID)
+#define AMD64G_CC_MASK_AC   (1ULL << AMD64G_CC_SHIFT_AC)
+#define AMD64G_CC_MASK_D    (1ULL << AMD64G_CC_SHIFT_D)
+
 /* FPU flag masks */
 #define AMD64G_FC_SHIFT_C3   14
 #define AMD64G_FC_SHIFT_C2   10
diff --git a/VEX/priv/guest_amd64_helpers.c b/VEX/priv/guest_amd64_helpers.c
index 2887b08..ab53e15 100644
--- a/VEX/priv/guest_amd64_helpers.c
+++ b/VEX/priv/guest_amd64_helpers.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -79,32 +79,34 @@
 
 static void mullS64 ( Long u, Long v, Long* rHi, Long* rLo )
 {
+   const Long halfMask = 0xFFFFFFFFLL;
    ULong u0, v0, w0;
     Long u1, v1, w1, w2, t;
-   u0   = u & 0xFFFFFFFFULL; 
+   u0   = u & halfMask; 
    u1   = u >> 32;
-   v0   = v & 0xFFFFFFFFULL;
+   v0   = v & halfMask;
    v1   = v >> 32;
    w0   = u0 * v0;
    t    = u1 * v0 + (w0 >> 32);
-   w1   = t & 0xFFFFFFFFULL;
+   w1   = t & halfMask;
    w2   = t >> 32;
    w1   = u0 * v1 + w1;
    *rHi = u1 * v1 + w2 + (w1 >> 32);
-   *rLo = u * v;
+   *rLo = (Long)((ULong)u * (ULong)v);
 }
 
 static void mullU64 ( ULong u, ULong v, ULong* rHi, ULong* rLo )
 {
+   const ULong halfMask = 0xFFFFFFFFULL;
    ULong u0, v0, w0;
    ULong u1, v1, w1,w2,t;
-   u0   = u & 0xFFFFFFFFULL;
+   u0   = u & halfMask;
    u1   = u >> 32;
-   v0   = v & 0xFFFFFFFFULL;
+   v0   = v & halfMask;
    v1   = v >> 32;
    w0   = u0 * v0;
    t    = u1 * v0 + (w0 >> 32);
-   w1   = t & 0xFFFFFFFFULL;
+   w1   = t & halfMask;
    w2   = t >> 32;
    w1   = u0 * v1 + w1;
    *rHi = u1 * v1 + w2 + (w1 >> 32);
@@ -911,6 +913,43 @@
 
 /* VISIBLE TO LIBVEX CLIENT */
 void
+LibVEX_GuestAMD64_put_rflags ( ULong rflags,
+                               /*MOD*/VexGuestAMD64State* vex_state )
+{
+   /* D flag */
+   if (rflags & AMD64G_CC_MASK_D) {
+      vex_state->guest_DFLAG = -1;
+      rflags &= ~AMD64G_CC_MASK_D;
+   }
+   else
+      vex_state->guest_DFLAG = 1;
+
+   /* ID flag */
+   if (rflags & AMD64G_CC_MASK_ID) {
+      vex_state->guest_IDFLAG = 1;
+      rflags &= ~AMD64G_CC_MASK_ID;
+   }
+   else
+      vex_state->guest_IDFLAG = 0;
+
+   /* AC flag */
+   if (rflags & AMD64G_CC_MASK_AC) {
+      vex_state->guest_ACFLAG = 1;
+      rflags &= ~AMD64G_CC_MASK_AC;
+   }
+   else
+      vex_state->guest_ACFLAG = 0;
+
+   UInt cc_mask = AMD64G_CC_MASK_O | AMD64G_CC_MASK_S | AMD64G_CC_MASK_Z |
+                  AMD64G_CC_MASK_A | AMD64G_CC_MASK_C | AMD64G_CC_MASK_P;
+   vex_state->guest_CC_OP   = AMD64G_CC_OP_COPY;
+   vex_state->guest_CC_DEP1 = rflags & cc_mask;
+   vex_state->guest_CC_DEP2 = 0;
+   vex_state->guest_CC_NDEP = 0;
+}
+
+/* VISIBLE TO LIBVEX CLIENT */
+void
 LibVEX_GuestAMD64_put_rflag_c ( ULong new_carry_flag,
                                /*MOD*/VexGuestAMD64State* vex_state )
 {
@@ -1036,7 +1075,7 @@
                             binop(Iop_Xor64,
                                   cc_dep1,
                                   binop(Iop_Sub64, cc_dep1, cc_dep2))),
-                      mkU8(64));
+                      mkU8(63));
       }
       if (isU64(cc_op, AMD64G_CC_OP_SUBQ) && isU64(cond, AMD64CondNO)) {
          /* No action.  Never yet found a test case. */
@@ -1904,11 +1943,15 @@
 }
 
 
+/*---------------------------------------------------------------*/
+/*--- Supporting functions for XSAVE/FXSAVE.                  ---*/
+/*---------------------------------------------------------------*/
+
 /* CALLED FROM GENERATED CODE */
 /* DIRTY HELPER (reads guest state, writes guest mem) */
-/* NOTE: only handles 32-bit format (no REX.W on the insn) */
-void amd64g_dirtyhelper_FXSAVE_ALL_EXCEPT_XMM ( VexGuestAMD64State* gst,
-                                                HWord addr )
+/* XSAVE component 0 is the x87 FPU state. */
+void amd64g_dirtyhelper_XSAVE_COMPONENT_0
+        ( VexGuestAMD64State* gst, HWord addr )
 {
    /* Derived from values obtained from
       vendor_id       : AuthenticAMD
@@ -1923,17 +1966,15 @@
    Fpu_State tmp;
    UShort*   addrS = (UShort*)addr;
    UChar*    addrC = (UChar*)addr;
-   UInt      mxcsr;
    UShort    fp_tags;
    UInt      summary_tags;
    Int       r, stno;
    UShort    *srcS, *dstS;
 
    do_get_x87( gst, (UChar*)&tmp );
-   mxcsr = amd64g_create_mxcsr( gst->guest_SSEROUND );
 
-   /* Now build the proper fxsave image from the x87 image we just
-      made. */
+   /* Now build the proper fxsave x87 image from the fsave x87 image
+      we just made. */
 
    addrS[0]  = tmp.env[FP_ENV_CTRL]; /* FCW: fpu control word */
    addrS[1]  = tmp.env[FP_ENV_STAT]; /* FCW: fpu status word */
@@ -1966,11 +2007,8 @@
    addrS[10] = 0; /* BOGUS */
    addrS[11] = 0; /* BOGUS */
 
-   addrS[12] = toUShort(mxcsr);  /* MXCSR */
-   addrS[13] = toUShort(mxcsr >> 16);
-
-   addrS[14] = 0xFFFF; /* MXCSR mask (lo16) */
-   addrS[15] = 0x0000; /* MXCSR mask (hi16) */
+   /* addrS[13,12] are MXCSR -- not written */
+   /* addrS[15,14] are MXCSR_MASK -- not written */
 
    /* Copy in the FP registers, in ST order. */
    for (stno = 0; stno < 8; stno++) {
@@ -1985,33 +2023,95 @@
       dstS[6] = 0;
       dstS[7] = 0;
    }
-
-   /* That's the first 160 bytes of the image done.  Now only %xmm0
-      .. %xmm15 remain to be copied, and we let the generated IR do
-      that, so as to make Memcheck's definedness flow for the non-XMM
-      parts independant from that of the all the other control and
-      status words in the structure.  This avoids the false positives
-      shown in #291310. */
 }
 
 
 /* CALLED FROM GENERATED CODE */
+/* DIRTY HELPER (reads guest state, writes guest mem) */
+/* XSAVE component 1 is the SSE state. */
+void amd64g_dirtyhelper_XSAVE_COMPONENT_1_EXCLUDING_XMMREGS 
+        ( VexGuestAMD64State* gst, HWord addr )
+{
+   UShort* addrS = (UShort*)addr;
+   UInt    mxcsr;
+
+   /* The only non-register parts of the SSE state are MXCSR and
+      MXCSR_MASK. */
+   mxcsr = amd64g_create_mxcsr( gst->guest_SSEROUND );
+
+   addrS[12] = toUShort(mxcsr);  /* MXCSR */
+   addrS[13] = toUShort(mxcsr >> 16);
+
+   addrS[14] = 0xFFFF; /* MXCSR mask (lo16) */
+   addrS[15] = 0x0000; /* MXCSR mask (hi16) */
+}
+
+
+/* VISIBLE TO LIBVEX CLIENT */
+/* Do FXSAVE from the supplied VexGuestAMD64State structure and store
+   the result at the given address which represents a buffer of at
+   least 416 bytes.
+
+   This function is not called from generated code.  FXSAVE is dealt
+   with by the amd64 front end by calling the XSAVE_COMPONENT_{0,1}
+   functions above plus some in-line IR.  This function is merely a
+   convenience function for VEX's users.
+*/
+void LibVEX_GuestAMD64_fxsave ( /*IN*/VexGuestAMD64State* gst,
+                                /*OUT*/HWord fp_state )
+{
+   /* Do the x87 part */
+   amd64g_dirtyhelper_XSAVE_COMPONENT_0(gst, fp_state);
+
+   /* And now the SSE part, except for the registers themselves. */
+   amd64g_dirtyhelper_XSAVE_COMPONENT_1_EXCLUDING_XMMREGS(gst, fp_state);
+
+   /* That's the first 160 bytes of the image done. */
+   /* Now only %xmm0 .. %xmm15 remain to be copied.  If the host is
+      big-endian, these need to be byte-swapped. */
+   U128 *xmm = (U128 *)(fp_state + 160);
+   vassert(host_is_little_endian());
+
+#  define COPY_U128(_dst,_src)                       \
+      do { _dst[0] = _src[0]; _dst[1] = _src[1];     \
+           _dst[2] = _src[2]; _dst[3] = _src[3]; }   \
+      while (0)
+
+   COPY_U128( xmm[0],  gst->guest_YMM0 );
+   COPY_U128( xmm[1],  gst->guest_YMM1 );
+   COPY_U128( xmm[2],  gst->guest_YMM2 );
+   COPY_U128( xmm[3],  gst->guest_YMM3 );
+   COPY_U128( xmm[4],  gst->guest_YMM4 );
+   COPY_U128( xmm[5],  gst->guest_YMM5 );
+   COPY_U128( xmm[6],  gst->guest_YMM6 );
+   COPY_U128( xmm[7],  gst->guest_YMM7 );
+   COPY_U128( xmm[8],  gst->guest_YMM8 );
+   COPY_U128( xmm[9],  gst->guest_YMM9 );
+   COPY_U128( xmm[10], gst->guest_YMM10 );
+   COPY_U128( xmm[11], gst->guest_YMM11 );
+   COPY_U128( xmm[12], gst->guest_YMM12 );
+   COPY_U128( xmm[13], gst->guest_YMM13 );
+   COPY_U128( xmm[14], gst->guest_YMM14 );
+   COPY_U128( xmm[15], gst->guest_YMM15 );
+#  undef COPY_U128
+}
+
+
+/*---------------------------------------------------------------*/
+/*--- Supporting functions for XRSTOR/FXRSTOR.                ---*/
+/*---------------------------------------------------------------*/
+
+/* CALLED FROM GENERATED CODE */
 /* DIRTY HELPER (writes guest state, reads guest mem) */
-VexEmNote amd64g_dirtyhelper_FXRSTOR_ALL_EXCEPT_XMM ( VexGuestAMD64State* gst,
-                                                      HWord addr )
+VexEmNote amd64g_dirtyhelper_XRSTOR_COMPONENT_0
+             ( VexGuestAMD64State* gst, HWord addr )
 {
    Fpu_State tmp;
-   VexEmNote warnX87 = EmNote_NONE;
-   VexEmNote warnXMM = EmNote_NONE;
    UShort*   addrS   = (UShort*)addr;
    UChar*    addrC   = (UChar*)addr;
    UShort    fp_tags;
    Int       r, stno, i;
 
-   /* Don't restore %xmm0 .. %xmm15, for the same reasons that
-      amd64g_dirtyhelper_FXSAVE_ALL_EXCEPT_XMM doesn't save them.  See
-      comment in that function for details. */
-
    /* Copy the x87 registers out of the image, into a temporary
       Fpu_State struct. */
    for (i = 0; i < 14; i++) tmp.env[i] = 0;
@@ -2040,16 +2140,75 @@
    tmp.env[FP_ENV_TAG] = fp_tags;
 
    /* Now write 'tmp' into the guest state. */
-   warnX87 = do_put_x87( True/*moveRegs*/, (UChar*)&tmp, gst );
+   VexEmNote warnX87 = do_put_x87( True/*moveRegs*/, (UChar*)&tmp, gst );
 
-   { UInt w32 = (((UInt)addrS[12]) & 0xFFFF)
-                | ((((UInt)addrS[13]) & 0xFFFF) << 16);
-     ULong w64 = amd64g_check_ldmxcsr( (ULong)w32 );
+   return warnX87;
+}
 
-     warnXMM = (VexEmNote)(w64 >> 32);
 
-     gst->guest_SSEROUND = w64 & 0xFFFFFFFFULL;
-   }
+/* CALLED FROM GENERATED CODE */
+/* DIRTY HELPER (writes guest state, reads guest mem) */
+VexEmNote amd64g_dirtyhelper_XRSTOR_COMPONENT_1_EXCLUDING_XMMREGS
+             ( VexGuestAMD64State* gst, HWord addr )
+{
+   UShort* addrS = (UShort*)addr;
+   UInt    w32   = (((UInt)addrS[12]) & 0xFFFF)
+                   | ((((UInt)addrS[13]) & 0xFFFF) << 16);
+   ULong   w64   = amd64g_check_ldmxcsr( (ULong)w32 );
+
+   VexEmNote warnXMM = (VexEmNote)(w64 >> 32);
+
+   gst->guest_SSEROUND = w64 & 0xFFFFFFFFULL;
+   return warnXMM;
+}
+
+
+/* VISIBLE TO LIBVEX CLIENT */
+/* Do FXRSTOR from the supplied address and store read values to the given
+   VexGuestAMD64State structure. 
+
+   This function is not called from generated code.  FXRSTOR is dealt
+   with by the amd64 front end by calling the XRSTOR_COMPONENT_{0,1}
+   functions above plus some in-line IR.  This function is merely a
+   convenience function for VEX's users.
+*/
+VexEmNote LibVEX_GuestAMD64_fxrstor ( /*IN*/HWord fp_state,
+                                      /*MOD*/VexGuestAMD64State* gst )
+{
+   /* Restore %xmm0 .. %xmm15.  If the host is big-endian, these need
+      to be byte-swapped. */
+   U128 *xmm = (U128 *)(fp_state + 160);
+
+   vassert(host_is_little_endian());
+
+#  define COPY_U128(_dst,_src)                       \
+      do { _dst[0] = _src[0]; _dst[1] = _src[1];     \
+           _dst[2] = _src[2]; _dst[3] = _src[3]; }   \
+      while (0)
+
+   COPY_U128( gst->guest_YMM0, xmm[0] );
+   COPY_U128( gst->guest_YMM1, xmm[1] );
+   COPY_U128( gst->guest_YMM2, xmm[2] );
+   COPY_U128( gst->guest_YMM3, xmm[3] );
+   COPY_U128( gst->guest_YMM4, xmm[4] );
+   COPY_U128( gst->guest_YMM5, xmm[5] );
+   COPY_U128( gst->guest_YMM6, xmm[6] );
+   COPY_U128( gst->guest_YMM7, xmm[7] );
+   COPY_U128( gst->guest_YMM8, xmm[8] );
+   COPY_U128( gst->guest_YMM9, xmm[9] );
+   COPY_U128( gst->guest_YMM10, xmm[10] );
+   COPY_U128( gst->guest_YMM11, xmm[11] );
+   COPY_U128( gst->guest_YMM12, xmm[12] );
+   COPY_U128( gst->guest_YMM13, xmm[13] );
+   COPY_U128( gst->guest_YMM14, xmm[14] );
+   COPY_U128( gst->guest_YMM15, xmm[15] );
+
+#  undef COPY_U128
+
+   VexEmNote warnXMM
+      = amd64g_dirtyhelper_XRSTOR_COMPONENT_1_EXCLUDING_XMMREGS(gst, fp_state);
+   VexEmNote warnX87
+      = amd64g_dirtyhelper_XRSTOR_COMPONENT_0(gst, fp_state);
 
    /* Prefer an X87 emwarn over an XMM one, if both exist. */
    if (warnX87 != EmNote_NONE)
@@ -2059,6 +2218,10 @@
 }
 
 
+/*---------------------------------------------------------------*/
+/*--- Supporting functions for FSAVE/FRSTOR                   ---*/
+/*---------------------------------------------------------------*/
+
 /* DIRTY HELPER (writes guest state) */
 /* Initialise the x87 FPU state as per 'finit'. */
 void amd64g_dirtyhelper_FINIT ( VexGuestAMD64State* gst )
@@ -2351,7 +2514,7 @@
 
 
 /*---------------------------------------------------------------*/
-/*--- Misc integer helpers, including rotates and CPUID.      ---*/
+/*--- CPUID helpers.                                          ---*/
 /*---------------------------------------------------------------*/
 
 /* Claim to be the following CPU, which is probably representative of
@@ -2710,6 +2873,14 @@
 /* Claim to be the following CPU (4 x ...), which is AVX and cx16
    capable.  Plus (kludge!) it "supports" HTM.
 
+   Also with the following change: claim that XSaveOpt is not
+   available, by cpuid(eax=0xD,ecx=1).eax[0] returns 0, compared to 1
+   on the real CPU.  Consequently, programs that correctly observe
+   these CPUID values should only try to use 3 of the 8 XSave-family
+   instructions: XGETBV, XSAVE and XRSTOR.  In particular this avoids
+   having to implement the compacted or optimised save/restore
+   variants.
+
    vendor_id       : GenuineIntel
    cpu family      : 6
    model           : 42
@@ -2820,7 +2991,7 @@
          switch (old_ecx) {
             case 0x00000000: SET_ABCD(0x00000007, 0x00000340,
                                       0x00000340, 0x00000000); break;
-            case 0x00000001: SET_ABCD(0x00000001, 0x00000000,
+            case 0x00000001: SET_ABCD(0x00000000, 0x00000000,
                                       0x00000000, 0x00000000); break;
             case 0x00000002: SET_ABCD(0x00000100, 0x00000240,
                                       0x00000000, 0x00000000); break;
@@ -2869,6 +3040,177 @@
 }
 
 
+/* Claim to be the following CPU (4 x ...), which is AVX2 capable.
+
+   With the following change: claim that XSaveOpt is not available, by
+   cpuid(eax=0xD,ecx=1).eax[0] returns 0, compared to 1 on the real
+   CPU.  Consequently, programs that correctly observe these CPUID
+   values should only try to use 3 of the 8 XSave-family instructions:
+   XGETBV, XSAVE and XRSTOR.  In particular this avoids having to
+   implement the compacted or optimised save/restore variants.
+
+   vendor_id       : GenuineIntel
+   cpu family      : 6
+   model           : 60
+   model name      : Intel(R) Core(TM) i7-4910MQ CPU @ 2.90GHz
+   stepping        : 3
+   microcode       : 0x1c
+   cpu MHz         : 919.957
+   cache size      : 8192 KB
+   physical id     : 0
+   siblings        : 4
+   core id         : 3
+   cpu cores       : 4
+   apicid          : 6
+   initial apicid  : 6
+   fpu             : yes
+   fpu_exception   : yes
+   cpuid level     : 13
+   wp              : yes
+   flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
+                     cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht
+                     tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc
+                     arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc
+                     aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl
+                     vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1
+                     sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave
+                     avx f16c rdrand lahf_lm abm ida arat epb pln pts dtherm
+                     tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust
+                     bmi1 avx2 smep bmi2 erms invpcid xsaveopt
+   bugs            :
+   bogomips        : 5786.68
+   clflush size    : 64
+   cache_alignment : 64
+   address sizes   : 39 bits physical, 48 bits virtual
+   power management:
+*/
+void amd64g_dirtyhelper_CPUID_avx2 ( VexGuestAMD64State* st )
+{
+#  define SET_ABCD(_a,_b,_c,_d)                \
+      do { st->guest_RAX = (ULong)(_a);        \
+           st->guest_RBX = (ULong)(_b);        \
+           st->guest_RCX = (ULong)(_c);        \
+           st->guest_RDX = (ULong)(_d);        \
+      } while (0)
+
+   UInt old_eax = (UInt)st->guest_RAX;
+   UInt old_ecx = (UInt)st->guest_RCX;
+
+   switch (old_eax) {
+      case 0x00000000:
+         SET_ABCD(0x0000000d, 0x756e6547, 0x6c65746e, 0x49656e69);
+         break;
+      case 0x00000001:
+         /* Don't advertise RDRAND support, bit 30 in ECX.  */
+         SET_ABCD(0x000306c3, 0x02100800, 0x3ffafbff, 0xbfebfbff);
+         break;
+      case 0x00000002:
+         SET_ABCD(0x76036301, 0x00f0b6ff, 0x00000000, 0x00c10000);
+         break;
+      case 0x00000003:
+         SET_ABCD(0x00000000, 0x00000000, 0x00000000, 0x00000000);
+         break;
+      case 0x00000004:
+         switch (old_ecx) {
+            case 0x00000000: SET_ABCD(0x1c004121, 0x01c0003f,
+                                      0x0000003f, 0x00000000); break;
+            case 0x00000001: SET_ABCD(0x1c004122, 0x01c0003f,
+                                      0x0000003f, 0x00000000); break;
+            case 0x00000002: SET_ABCD(0x1c004143, 0x01c0003f,
+                                      0x000001ff, 0x00000000); break;
+            case 0x00000003: SET_ABCD(0x1c03c163, 0x03c0003f,
+                                      0x00001fff, 0x00000006); break;
+            default:         SET_ABCD(0x00000000, 0x00000000,
+                                      0x00000000, 0x00000000); break;
+         }
+         break;
+      case 0x00000005:
+         SET_ABCD(0x00000040, 0x00000040, 0x00000003, 0x00042120);
+         break;
+      case 0x00000006:
+         SET_ABCD(0x00000077, 0x00000002, 0x00000009, 0x00000000);
+         break;
+      case 0x00000007:
+         switch (old_ecx) {
+            case 0x00000000: SET_ABCD(0x00000000, 0x000027ab,
+                                      0x00000000, 0x00000000); break;
+            default:         SET_ABCD(0x00000000, 0x00000000,
+                                      0x00000000, 0x00000000); break;
+         }
+         break;
+      case 0x00000008:
+         SET_ABCD(0x00000000, 0x00000000, 0x00000000, 0x00000000);
+         break;
+      case 0x00000009:
+         SET_ABCD(0x00000000, 0x00000000, 0x00000000, 0x00000000);
+         break;
+      case 0x0000000a:
+         SET_ABCD(0x07300803, 0x00000000, 0x00000000, 0x00000603);
+         break;
+      case 0x0000000b:
+         switch (old_ecx) {
+            case 0x00000000: SET_ABCD(0x00000001, 0x00000002,
+                                      0x00000100, 0x00000002); break;
+            case 0x00000001: SET_ABCD(0x00000004, 0x00000008,
+                                      0x00000201, 0x00000002); break;
+            default:         SET_ABCD(0x00000000, 0x00000000,
+                                      old_ecx,    0x00000002); break;
+         }
+         break;
+      case 0x0000000c:
+         SET_ABCD(0x00000000, 0x00000000, 0x00000000, 0x00000000);
+         break;
+      case 0x0000000d:
+         switch (old_ecx) {
+            case 0x00000000: SET_ABCD(0x00000007, 0x00000340,
+                                      0x00000340, 0x00000000); break;
+            case 0x00000001: SET_ABCD(0x00000000, 0x00000000,
+                                      0x00000000, 0x00000000); break;
+            case 0x00000002: SET_ABCD(0x00000100, 0x00000240,
+                                      0x00000000, 0x00000000); break;
+            default:         SET_ABCD(0x00000000, 0x00000000,
+                                      0x00000000, 0x00000000); break;
+         }
+         break;
+      case 0x80000000:
+         SET_ABCD(0x80000008, 0x00000000, 0x00000000, 0x00000000);
+         break;
+      case 0x80000001:
+         SET_ABCD(0x00000000, 0x00000000, 0x00000021, 0x2c100800);
+         break;
+      case 0x80000002:
+         SET_ABCD(0x65746e49, 0x2952286c, 0x726f4320, 0x4d542865);
+         break;
+      case 0x80000003:
+         SET_ABCD(0x37692029, 0x3139342d, 0x20514d30, 0x20555043);
+         break;
+      case 0x80000004:
+         SET_ABCD(0x2e322040, 0x48473039, 0x0000007a, 0x00000000);
+         break;
+      case 0x80000005:
+         SET_ABCD(0x00000000, 0x00000000, 0x00000000, 0x00000000);
+         break;
+      case 0x80000006:
+         SET_ABCD(0x00000000, 0x00000000, 0x01006040, 0x00000000);
+         break;
+      case 0x80000007:
+         SET_ABCD(0x00000000, 0x00000000, 0x00000000, 0x00000100);
+         break;
+      case 0x80000008:
+         SET_ABCD(0x00003027, 0x00000000, 0x00000000, 0x00000000);
+         break;
+      default:
+         SET_ABCD(0x00000007, 0x00000340, 0x00000340, 0x00000000);
+         break;
+   }
+#  undef SET_ABCD
+}
+
+
+/*---------------------------------------------------------------*/
+/*--- Misc integer helpers, including rotates and crypto.     ---*/
+/*---------------------------------------------------------------*/
+
 ULong amd64g_calculate_RCR ( ULong arg, 
                              ULong rot_amt, 
                              ULong rflags_in, 
diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c
index add943d..af4817f 100644
--- a/VEX/priv/guest_amd64_toIR.c
+++ b/VEX/priv/guest_amd64_toIR.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -349,6 +349,13 @@
    vpanic("doScalarWidening(amd64)");
 }
 
+static
+void putGuarded ( Int gstOffB, IRExpr* guard, IRExpr* value )
+{
+   IRType ty = typeOfIRExpr(irsb->tyenv, value);
+   stmt( IRStmt_Put(gstOffB,
+                    IRExpr_ITE(guard, value, IRExpr_Get(gstOffB, ty))) );
+}
 
 
 /*------------------------------------------------------------*/
@@ -2146,18 +2153,18 @@
    return grp8_names[opc_aux];
 }
 
-//.. static const HChar* nameSReg ( UInt sreg )
-//.. {
-//..    switch (sreg) {
-//..       case R_ES: return "%es";
-//..       case R_CS: return "%cs";
-//..       case R_SS: return "%ss";
-//..       case R_DS: return "%ds";
-//..       case R_FS: return "%fs";
-//..       case R_GS: return "%gs";
-//..       default: vpanic("nameSReg(x86)");
-//..    }
-//.. }
+static const HChar* nameSReg ( UInt sreg )
+{
+   switch (sreg) {
+      case R_ES: return "%es";
+      case R_CS: return "%cs";
+      case R_SS: return "%ss";
+      case R_DS: return "%ds";
+      case R_FS: return "%fs";
+      case R_GS: return "%gs";
+      default: vpanic("nameSReg(amd64)");
+   }
+}
 
 static const HChar* nameMMXReg ( Int mmxreg )
 {
@@ -5195,6 +5202,52 @@
 }
 
 
+/* Generate a dirty helper call that initialises the x87 state a la
+   FINIT.  If |guard| is NULL, it is done unconditionally.  Otherwise
+   |guard| is used as a guarding condition.
+*/
+static void gen_FINIT_SEQUENCE ( IRExpr* guard )
+{
+   /* Uses dirty helper: 
+         void amd64g_do_FINIT ( VexGuestAMD64State* ) */
+   IRDirty* d  = unsafeIRDirty_0_N ( 
+                    0/*regparms*/, 
+                    "amd64g_dirtyhelper_FINIT", 
+                    &amd64g_dirtyhelper_FINIT,
+                    mkIRExprVec_1( IRExpr_BBPTR() )
+                 );
+
+   /* declare we're writing guest state */
+   d->nFxState = 5;
+   vex_bzero(&d->fxState, sizeof(d->fxState));
+
+   d->fxState[0].fx     = Ifx_Write;
+   d->fxState[0].offset = OFFB_FTOP;
+   d->fxState[0].size   = sizeof(UInt);
+
+   d->fxState[1].fx     = Ifx_Write;
+   d->fxState[1].offset = OFFB_FPREGS;
+   d->fxState[1].size   = 8 * sizeof(ULong);
+
+   d->fxState[2].fx     = Ifx_Write;
+   d->fxState[2].offset = OFFB_FPTAGS;
+   d->fxState[2].size   = 8 * sizeof(UChar);
+
+   d->fxState[3].fx     = Ifx_Write;
+   d->fxState[3].offset = OFFB_FPROUND;
+   d->fxState[3].size   = sizeof(ULong);
+
+   d->fxState[4].fx     = Ifx_Write;
+   d->fxState[4].offset = OFFB_FC3210;
+   d->fxState[4].size   = sizeof(ULong);
+
+   if (guard)
+      d->guard = guard;
+
+   stmt( IRStmt_Dirty(d) );
+}
+
+
 /* ------------------------------------------------------- */
 /* Given all that stack-mangling junk, we can now go ahead
    and describe FP instructions. 
@@ -5420,7 +5473,8 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n",
+                          (UInt)gregLO3ofRM(modrm));
                vex_printf("first_opcode == 0xD8\n");
                goto decode_fail;
          }
@@ -5439,7 +5493,7 @@
             /* Dunno if this is right */
             case 0xD0 ... 0xD7: /* FCOM %st(?),%st(0) */
                r_dst = (UInt)modrm - 0xD0;
-               DIP("fcom %%st(0),%%st(%d)\n", r_dst);
+               DIP("fcom %%st(0),%%st(%u)\n", r_dst);
                /* This forces C1 to zero, which isn't right. */
                put_C3210( 
                    unop(Iop_32Uto64,
@@ -5454,7 +5508,7 @@
             /* Dunno if this is right */
             case 0xD8 ... 0xDF: /* FCOMP %st(?),%st(0) */
                r_dst = (UInt)modrm - 0xD8;
-               DIP("fcomp %%st(0),%%st(%d)\n", r_dst);
+               DIP("fcomp %%st(0),%%st(%u)\n", r_dst);
                /* This forces C1 to zero, which isn't right. */
                put_C3210( 
                    unop(Iop_32Uto64,
@@ -5679,7 +5733,8 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n",
+                          (UInt)gregLO3ofRM(modrm));
                vex_printf("first_opcode == 0xD9\n");
                goto decode_fail;
          }
@@ -6078,7 +6133,8 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n",
+                          (UInt)gregLO3ofRM(modrm));
                vex_printf("first_opcode == 0xDA\n");
                goto decode_fail;
          }
@@ -6242,7 +6298,8 @@
             }
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n",
+                          (UInt)gregLO3ofRM(modrm));
                vex_printf("first_opcode == 0xDB\n");
                goto decode_fail;
          }
@@ -6305,41 +6362,7 @@
                break;
 
             case 0xE3: {
-               /* Uses dirty helper: 
-                     void amd64g_do_FINIT ( VexGuestAMD64State* ) */
-               IRDirty* d  = unsafeIRDirty_0_N ( 
-                                0/*regparms*/, 
-                                "amd64g_dirtyhelper_FINIT", 
-                                &amd64g_dirtyhelper_FINIT,
-                                mkIRExprVec_1( IRExpr_BBPTR() )
-                             );
-
-               /* declare we're writing guest state */
-               d->nFxState = 5;
-               vex_bzero(&d->fxState, sizeof(d->fxState));
-
-               d->fxState[0].fx     = Ifx_Write;
-               d->fxState[0].offset = OFFB_FTOP;
-               d->fxState[0].size   = sizeof(UInt);
-
-               d->fxState[1].fx     = Ifx_Write;
-               d->fxState[1].offset = OFFB_FPREGS;
-               d->fxState[1].size   = 8 * sizeof(ULong);
-
-               d->fxState[2].fx     = Ifx_Write;
-               d->fxState[2].offset = OFFB_FPTAGS;
-               d->fxState[2].size   = 8 * sizeof(UChar);
-
-               d->fxState[3].fx     = Ifx_Write;
-               d->fxState[3].offset = OFFB_FPROUND;
-               d->fxState[3].size   = sizeof(ULong);
-
-               d->fxState[4].fx     = Ifx_Write;
-               d->fxState[4].offset = OFFB_FC3210;
-               d->fxState[4].size   = sizeof(ULong);
-
-               stmt( IRStmt_Dirty(d) );
-
+               gen_FINIT_SEQUENCE(NULL/*no guarding condition*/);
                DIP("fninit\n");
                break;
             }
@@ -6425,7 +6448,8 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n",
+                          (UInt)gregLO3ofRM(modrm));
                vex_printf("first_opcode == 0xDC\n");
                goto decode_fail;
          }
@@ -6660,7 +6684,8 @@
             }
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n",
+                          (UInt)gregLO3ofRM(modrm));
                vex_printf("first_opcode == 0xDD\n");
                goto decode_fail;
          }
@@ -6793,7 +6818,8 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n",
+                          (UInt)gregLO3ofRM(modrm));
                vex_printf("first_opcode == 0xDE\n");
                goto decode_fail;
          }
@@ -6909,7 +6935,8 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n",
+                          (UInt)gregLO3ofRM(modrm));
                vex_printf("first_opcode == 0xDF\n");
                goto decode_fail;
          }
@@ -7125,7 +7152,7 @@
       case 0xFB: op = Iop_Sub64; break;
 
       default: 
-         vex_printf("\n0x%x\n", (Int)opc);
+         vex_printf("\n0x%x\n", (UInt)opc);
          vpanic("dis_MMXop_regmem_to_reg");
    }
 
@@ -8615,8 +8642,57 @@
 //..       return len+delta0;
 //..    }
 //.. }
-//.. 
-//.. 
+
+/* Handle move instructions of the form
+      mov S, E  meaning
+      mov sreg, reg-or-mem
+   Is passed the a ptr to the modRM byte, and the data size.  Returns
+   the address advanced completely over this instruction.
+
+   VEX does not currently simulate segment registers on AMD64 which means that
+   instead of moving a value of a segment register, zero is moved to the
+   destination.  The zero value represents a null (unused) selector.  This is
+   not correct (especially for the %cs, %fs and %gs registers) but it seems to
+   provide a sufficient simulation for currently seen programs that use this
+   instruction.  If some program actually decides to use the obtained segment
+   selector for something meaningful then the zero value should be a clear
+   indicator that there is some problem.
+
+   S(src) is sreg.
+   E(dst) is reg-or-mem
+
+   If E is reg, -->    PUT $0, %E
+
+   If E is mem, -->    (getAddr E) -> tmpa
+                       ST $0, (tmpa)
+*/
+static
+ULong dis_mov_S_E ( const VexAbiInfo* vbi,
+                    Prefix      pfx,
+                    Int         size,
+                    Long        delta0 )
+{
+   Int   len;
+   UChar rm = getUChar(delta0);
+   HChar dis_buf[50];
+
+   if (epartIsReg(rm)) {
+      putIRegE(size, pfx, rm, mkU(szToITy(size), 0));
+      DIP("mov %s,%s\n", nameSReg(gregOfRexRM(pfx, rm)),
+                         nameIRegE(size, pfx, rm));
+      return 1+delta0;
+   }
+
+   /* E refers to memory */
+   {
+      IRTemp addr = disAMode(&len, vbi, pfx, delta0, dis_buf, 0);
+      storeLE(mkexpr(addr), mkU16(0));
+      DIP("mov %s,%s\n", nameSReg(gregOfRexRM(pfx, rm)),
+                         dis_buf);
+      return len+delta0;
+   }
+}
+
 //.. static 
 //.. void dis_push_segreg ( UInt sreg, Int sz )
 //.. {
@@ -9024,6 +9100,8 @@
 #  define XXX(_pre, _op, _not) { pre = _pre; op = _op; not = _not; }
    // If you add a case here, add a corresponding test for both VCMPSD_128
    // and VCMPSS_128 in avx-1.c.
+   // Cases 0xA and above are
+   //    "Enhanced Comparison Predicate[s] for VEX-Encoded [insns]"
    switch (imm8) {
       // "O" = ordered, "U" = unordered
       // "Q" = non-signalling (quiet), "S" = signalling
@@ -9034,39 +9112,50 @@
       //             |      |               |
       //             v      v               v
       case 0x0:  XXX(False, Iop_CmpEQ32Fx4, False); break; // EQ_OQ
-      case 0x1:  XXX(False, Iop_CmpLT32Fx4, False); break; // LT_OS
-      case 0x2:  XXX(False, Iop_CmpLE32Fx4, False); break; // LE_OS
-      case 0x3:  XXX(False, Iop_CmpUN32Fx4, False); break; // UNORD_Q
-      case 0x4:  XXX(False, Iop_CmpEQ32Fx4, True);  break; // NEQ_UQ
-      case 0x5:  XXX(False, Iop_CmpLT32Fx4, True);  break; // NLT_US
-      case 0x6:  XXX(False, Iop_CmpLE32Fx4, True);  break; // NLE_US
-      case 0x7:  XXX(False, Iop_CmpUN32Fx4, True);  break; // ORD_Q
       case 0x8:  XXX(False, Iop_CmpEQ32Fx4, False); break; // EQ_UQ
-      case 0x9:  XXX(True,  Iop_CmpLE32Fx4, True);  break; // NGE_US
-      /* "Enhanced Comparison Predicate[s] for VEX-Encoded [insns] */
-      case 0xA:  XXX(True,  Iop_CmpLT32Fx4, True);  break; // NGT_US
-      // 0xB  FALSE_OQ
+      case 0x10: XXX(False, Iop_CmpEQ32Fx4, False); break; // EQ_OS
+      case 0x18: XXX(False, Iop_CmpEQ32Fx4, False); break; // EQ_US
+      //
+      case 0x1:  XXX(False, Iop_CmpLT32Fx4, False); break; // LT_OS
+      case 0x11: XXX(False, Iop_CmpLT32Fx4, False); break; // LT_OQ
+      //
+      case 0x2:  XXX(False, Iop_CmpLE32Fx4, False); break; // LE_OS
+      case 0x12: XXX(False, Iop_CmpLE32Fx4, False); break; // LE_OQ
+      //
+      case 0x3:  XXX(False, Iop_CmpUN32Fx4, False); break; // UNORD_Q
+      case 0x13: XXX(False, Iop_CmpUN32Fx4, False); break; // UNORD_S
+      //
       // 0xC: this isn't really right because it returns all-1s when
       // either operand is a NaN, and it should return all-0s.
+      case 0x4:  XXX(False, Iop_CmpEQ32Fx4, True);  break; // NEQ_UQ
       case 0xC:  XXX(False, Iop_CmpEQ32Fx4, True);  break; // NEQ_OQ
-      case 0xD:  XXX(True,  Iop_CmpLE32Fx4, False); break; // GE_OS
-      case 0xE:  XXX(True,  Iop_CmpLT32Fx4, False); break; // GT_OS
-      // 0xF  TRUE_UQ
-      // 0x10  EQ_OS
-      case 0x11: XXX(False, Iop_CmpLT32Fx4, False); break; // LT_OQ
-      case 0x12: XXX(False, Iop_CmpLE32Fx4, False); break; // LE_OQ
-      // 0x13  UNORD_S
-      // 0x14  NEQ_US
-      // 0x15  NLT_UQ
+      case 0x14: XXX(False, Iop_CmpEQ32Fx4, True);  break; // NEQ_US
+      case 0x1C: XXX(False, Iop_CmpEQ32Fx4, True);  break; // NEQ_OS
+      //
+      case 0x5:  XXX(False, Iop_CmpLT32Fx4, True);  break; // NLT_US
+      case 0x15: XXX(False, Iop_CmpLT32Fx4, True);  break; // NLT_UQ
+      //
+      case 0x6:  XXX(False, Iop_CmpLE32Fx4, True);  break; // NLE_US
       case 0x16: XXX(False, Iop_CmpLE32Fx4, True);  break; // NLE_UQ
-      // 0x17  ORD_S
-      // 0x18  EQ_US
-      // 0x19  NGE_UQ
-      // 0x1A  NGT_UQ
-      // 0x1B  FALSE_OS
-      // 0x1C  NEQ_OS
-      // 0x1D  GE_OQ
+      //
+      case 0x7:  XXX(False, Iop_CmpUN32Fx4, True);  break; // ORD_Q
+      case 0x17: XXX(False, Iop_CmpUN32Fx4, True);  break; // ORD_S
+      //
+      case 0x9:  XXX(True,  Iop_CmpLE32Fx4, True);  break; // NGE_US
+      case 0x19: XXX(True,  Iop_CmpLE32Fx4, True);  break; // NGE_UQ
+      //
+      case 0xA:  XXX(True,  Iop_CmpLT32Fx4, True);  break; // NGT_US
+      case 0x1A: XXX(True,  Iop_CmpLT32Fx4, True);  break; // NGT_UQ
+      //
+      case 0xD:  XXX(True,  Iop_CmpLE32Fx4, False); break; // GE_OS
+      case 0x1D: XXX(True,  Iop_CmpLE32Fx4, False); break; // GE_OQ
+      //
+      case 0xE:  XXX(True,  Iop_CmpLT32Fx4, False); break; // GT_OS
       case 0x1E: XXX(True,  Iop_CmpLT32Fx4, False); break; // GT_OQ
+      // Unhandled:
+      // 0xB  FALSE_OQ
+      // 0xF  TRUE_UQ
+      // 0x1B  FALSE_OS
       // 0x1F  TRUE_US
       /* Don't forget to add test cases to VCMPSS_128_<imm8> in
          avx-1.c if new cases turn up. */
@@ -9151,8 +9240,8 @@
       assign( plain, binop(op, getXMMReg(gregOfRexRM(pfx,rm)), 
                                getXMMReg(eregOfRexRM(pfx,rm))) );
       delta += 2;
-      DIP("%s $%d,%s,%s\n", opname,
-                            (Int)imm8,
+      DIP("%s $%u,%s,%s\n", opname,
+                            imm8,
                             nameXMMReg(eregOfRexRM(pfx,rm)),
                             nameXMMReg(gregOfRexRM(pfx,rm)) );
    } else {
@@ -9175,8 +9264,8 @@
               ) 
       );
       delta += alen+1;
-      DIP("%s $%d,%s,%s\n", opname,
-                            (Int)imm8,
+      DIP("%s $%u,%s,%s\n", opname,
+                            imm8,
                             dis_buf,
                             nameXMMReg(gregOfRexRM(pfx,rm)) );
    }
@@ -9818,6 +9907,10 @@
    gen_SEGV_if_not_XX_aligned(effective_addr, 32-1);
 }
 
+static void gen_SEGV_if_not_64_aligned ( IRTemp effective_addr ) {
+   gen_SEGV_if_not_XX_aligned(effective_addr, 64-1);
+}
+
 /* Helper for deciding whether a given insn (starting at the opcode
    byte) may validly be used with a LOCK prefix.  The following insns
    may be used with LOCK when their destination operand is in memory.
@@ -11347,8 +11440,8 @@
       assign(sV, getXMMReg(rE));
       imm8 = getUChar(delta+1) & 7;
       delta += 1+1;
-      DIP("%spextrw $%d,%s,%s\n", isAvx ? "v" : "",
-          (Int)imm8, nameXMMReg(rE), nameIReg32(rG));
+      DIP("%spextrw $%u,%s,%s\n", isAvx ? "v" : "",
+          imm8, nameXMMReg(rE), nameIReg32(rG));
    } else {
       /* The memory case is disallowed, apparently. */
       return deltaIN; /* FAIL */
@@ -11493,6 +11586,495 @@
 }
 
 
+static void gen_XSAVE_SEQUENCE ( IRTemp addr, IRTemp rfbm )
+{
+   /* ------ rfbm[0] gates the x87 state ------ */
+
+   /* Uses dirty helper: 
+         void amd64g_do_XSAVE_COMPONENT_0 ( VexGuestAMD64State*, ULong )
+   */
+   IRDirty* d0 = unsafeIRDirty_0_N (
+                    0/*regparms*/, 
+                    "amd64g_dirtyhelper_XSAVE_COMPONENT_0",
+                    &amd64g_dirtyhelper_XSAVE_COMPONENT_0,
+                    mkIRExprVec_2( IRExpr_BBPTR(), mkexpr(addr) )
+                 );
+   d0->guard = binop(Iop_CmpEQ64, binop(Iop_And64, mkexpr(rfbm), mkU64(1)),
+                     mkU64(1));
+
+   /* Declare we're writing memory.  Really, bytes 24 through 31
+      (MXCSR and MXCSR_MASK) aren't written, but we can't express more
+      than 1 memory area here, so just mark the whole thing as
+      written. */
+   d0->mFx   = Ifx_Write;
+   d0->mAddr = mkexpr(addr);
+   d0->mSize = 160;
+
+   /* declare we're reading guest state */
+   d0->nFxState = 5;
+   vex_bzero(&d0->fxState, sizeof(d0->fxState));
+
+   d0->fxState[0].fx     = Ifx_Read;
+   d0->fxState[0].offset = OFFB_FTOP;
+   d0->fxState[0].size   = sizeof(UInt);
+
+   d0->fxState[1].fx     = Ifx_Read;
+   d0->fxState[1].offset = OFFB_FPREGS;
+   d0->fxState[1].size   = 8 * sizeof(ULong);
+
+   d0->fxState[2].fx     = Ifx_Read;
+   d0->fxState[2].offset = OFFB_FPTAGS;
+   d0->fxState[2].size   = 8 * sizeof(UChar);
+
+   d0->fxState[3].fx     = Ifx_Read;
+   d0->fxState[3].offset = OFFB_FPROUND;
+   d0->fxState[3].size   = sizeof(ULong);
+
+   d0->fxState[4].fx     = Ifx_Read;
+   d0->fxState[4].offset = OFFB_FC3210;
+   d0->fxState[4].size   = sizeof(ULong);
+
+   stmt( IRStmt_Dirty(d0) );
+
+   /* ------ rfbm[1] gates the SSE state ------ */
+
+   IRTemp rfbm_1    = newTemp(Ity_I64);
+   IRTemp rfbm_1or2 = newTemp(Ity_I64);
+   assign(rfbm_1,    binop(Iop_And64, mkexpr(rfbm), mkU64(2)));
+   assign(rfbm_1or2, binop(Iop_And64, mkexpr(rfbm), mkU64(6)));
+
+   IRExpr* guard_1    = binop(Iop_CmpEQ64, mkexpr(rfbm_1),    mkU64(2));
+   IRExpr* guard_1or2 = binop(Iop_CmpNE64, mkexpr(rfbm_1or2), mkU64(0));
+
+   /* Uses dirty helper: 
+         void amd64g_do_XSAVE_COMPONENT_1_EXCLUDING_XMMREGS
+                 ( VexGuestAMD64State*, ULong )
+      This creates only MXCSR and MXCSR_MASK.  We need to do this if
+      either components 1 (SSE) or 2 (AVX) are requested.  Hence the
+      guard condition is a bit more complex.
+   */
+   IRDirty* d1 = unsafeIRDirty_0_N (
+                    0/*regparms*/, 
+                    "amd64g_dirtyhelper_XSAVE_COMPONENT_1_EXCLUDING_XMMREGS",
+                    &amd64g_dirtyhelper_XSAVE_COMPONENT_1_EXCLUDING_XMMREGS,
+                    mkIRExprVec_2( IRExpr_BBPTR(), mkexpr(addr) )
+                 );
+   d1->guard = guard_1or2;
+
+   /* Declare we're writing memory: MXCSR and MXCSR_MASK.  Note that
+      the code for rbfm[0] just above claims a write of 0 .. 159, so
+      this duplicates it.  But at least correctly connects 24 .. 31 to
+      the MXCSR guest state representation (SSEROUND field). */
+   d1->mFx   = Ifx_Write;
+   d1->mAddr = binop(Iop_Add64, mkexpr(addr), mkU64(24));
+   d1->mSize = 8;
+
+   /* declare we're reading guest state */
+   d1->nFxState = 1;
+   vex_bzero(&d1->fxState, sizeof(d1->fxState));
+
+   d1->fxState[0].fx     = Ifx_Read;
+   d1->fxState[0].offset = OFFB_SSEROUND;
+   d1->fxState[0].size   = sizeof(ULong);
+
+   /* Call the helper.  This creates MXCSR and MXCSR_MASK but nothing
+      else.  We do the actual register array, XMM[0..15], separately,
+      in order that any undefinedness in the XMM registers is tracked
+      separately by Memcheck and does not "infect" the in-memory
+      shadow for the other parts of the image. */
+   stmt( IRStmt_Dirty(d1) );
+
+   /* And now the XMMs themselves. */
+   UInt reg;
+   for (reg = 0; reg < 16; reg++) {
+      stmt( IRStmt_StoreG(
+               Iend_LE,
+               binop(Iop_Add64, mkexpr(addr), mkU64(160 + reg * 16)),
+               getXMMReg(reg),
+               guard_1
+      ));
+   }
+
+   /* ------ rfbm[2] gates the AVX state ------ */
+   /* Component 2 is just a bunch of register saves, so we'll do it
+      inline, just to be simple and to be Memcheck friendly. */
+
+   IRTemp rfbm_2 = newTemp(Ity_I64);
+   assign(rfbm_2, binop(Iop_And64, mkexpr(rfbm), mkU64(4)));
+
+   IRExpr* guard_2 = binop(Iop_CmpEQ64, mkexpr(rfbm_2), mkU64(4));
+
+   for (reg = 0; reg < 16; reg++) {
+      stmt( IRStmt_StoreG(
+               Iend_LE,
+               binop(Iop_Add64, mkexpr(addr), mkU64(576 + reg * 16)),
+               getYMMRegLane128(reg,1),
+               guard_2
+      ));
+   }
+}
+
+
+static Long dis_XSAVE ( const VexAbiInfo* vbi,
+                        Prefix pfx, Long delta, Int sz )
+{
+   /* Note that the presence or absence of REX.W (indicated here by
+      |sz|) slightly affects the written format: whether the saved FPU
+      IP and DP pointers are 64 or 32 bits.  But the helper function
+      we call simply writes zero bits in the relevant fields, which
+      are 64 bits regardless of what REX.W is, and so it's good enough
+      (iow, equally broken) in both cases. */
+   IRTemp addr  = IRTemp_INVALID;
+   Int    alen  = 0;
+   HChar  dis_buf[50];
+   UChar  modrm = getUChar(delta);
+   vassert(!epartIsReg(modrm)); /* ensured by caller */
+   vassert(sz == 4 || sz == 8); /* ditto */
+
+   addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
+   delta += alen;
+   gen_SEGV_if_not_64_aligned(addr);
+
+   DIP("%sxsave %s\n", sz==8 ? "rex64/" : "", dis_buf);
+
+   /* VEX's caller is assumed to have checked this. */
+   const ULong aSSUMED_XCR0_VALUE = 7;
+
+   IRTemp rfbm = newTemp(Ity_I64);
+   assign(rfbm,
+          binop(Iop_And64,
+                binop(Iop_Or64,
+                      binop(Iop_Shl64,
+                            unop(Iop_32Uto64, getIRegRDX(4)), mkU8(32)),
+                      unop(Iop_32Uto64, getIRegRAX(4))),
+                mkU64(aSSUMED_XCR0_VALUE)));
+
+   gen_XSAVE_SEQUENCE(addr, rfbm);
+
+   /* Finally, we need to update XSTATE_BV in the XSAVE header area, by
+      OR-ing the RFBM value into it. */
+   IRTemp addr_plus_512 = newTemp(Ity_I64);
+   assign(addr_plus_512, binop(Iop_Add64, mkexpr(addr), mkU64(512)));
+   storeLE( mkexpr(addr_plus_512),
+            binop(Iop_Or8,
+                  unop(Iop_64to8, mkexpr(rfbm)),
+                  loadLE(Ity_I8, mkexpr(addr_plus_512))) );
+
+   return delta;
+}
+
+
+static Long dis_FXSAVE ( const VexAbiInfo* vbi,
+                         Prefix pfx, Long delta, Int sz )
+{
+   /* See comment in dis_XSAVE about the significance of REX.W. */
+   IRTemp addr  = IRTemp_INVALID;
+   Int    alen  = 0;
+   HChar  dis_buf[50];
+   UChar  modrm = getUChar(delta);
+   vassert(!epartIsReg(modrm)); /* ensured by caller */
+   vassert(sz == 4 || sz == 8); /* ditto */
+
+   addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
+   delta += alen;
+   gen_SEGV_if_not_16_aligned(addr);
+
+   DIP("%sfxsave %s\n", sz==8 ? "rex64/" : "", dis_buf);
+
+   /* FXSAVE is just XSAVE with components 0 and 1 selected.  Set rfbm
+      to 0b011, generate the XSAVE sequence accordingly, and let iropt
+      fold out the unused (AVX) parts accordingly. */
+   IRTemp rfbm = newTemp(Ity_I64);
+   assign(rfbm, mkU64(3));
+   gen_XSAVE_SEQUENCE(addr, rfbm);
+
+   return delta;
+}
+
+
+static void gen_XRSTOR_SEQUENCE ( IRTemp addr, IRTemp xstate_bv, IRTemp rfbm )
+{
+   /* ------ rfbm[0] gates the x87 state ------ */
+
+   /* If rfbm[0] == 1, we have to write the x87 state.  If
+      xstate_bv[0] == 1, we will read it from the memory image, else
+      we'll set it to initial values.  Doing this with a helper
+      function and getting the definedness flow annotations correct is
+      too difficult, so generate stupid but simple code: first set the
+      registers to initial values, regardless of xstate_bv[0].  Then,
+      conditionally restore from the memory image. */
+
+   IRTemp rfbm_0       = newTemp(Ity_I64);
+   IRTemp xstate_bv_0  = newTemp(Ity_I64);
+   IRTemp restore_0    = newTemp(Ity_I64);
+   assign(rfbm_0,      binop(Iop_And64, mkexpr(rfbm), mkU64(1)));
+   assign(xstate_bv_0, binop(Iop_And64, mkexpr(xstate_bv), mkU64(1)));
+   assign(restore_0,   binop(Iop_And64, mkexpr(rfbm_0), mkexpr(xstate_bv_0)));
+
+   gen_FINIT_SEQUENCE( binop(Iop_CmpNE64, mkexpr(rfbm_0), mkU64(0)) );
+
+   /* Uses dirty helper: 
+         void amd64g_do_XRSTOR_COMPONENT_0 ( VexGuestAMD64State*, ULong )
+   */
+   IRDirty* d0 = unsafeIRDirty_0_N (
+                    0/*regparms*/, 
+                    "amd64g_dirtyhelper_XRSTOR_COMPONENT_0",
+                    &amd64g_dirtyhelper_XRSTOR_COMPONENT_0,
+                    mkIRExprVec_2( IRExpr_BBPTR(), mkexpr(addr) )
+                 );
+   d0->guard = binop(Iop_CmpNE64, mkexpr(restore_0), mkU64(0));
+
+   /* Declare we're reading memory.  Really, bytes 24 through 31
+      (MXCSR and MXCSR_MASK) aren't read, but we can't express more
+      than 1 memory area here, so just mark the whole thing as
+      read. */
+   d0->mFx   = Ifx_Read;
+   d0->mAddr = mkexpr(addr);
+   d0->mSize = 160;
+
+   /* declare we're writing guest state */
+   d0->nFxState = 5;
+   vex_bzero(&d0->fxState, sizeof(d0->fxState));
+
+   d0->fxState[0].fx     = Ifx_Write;
+   d0->fxState[0].offset = OFFB_FTOP;
+   d0->fxState[0].size   = sizeof(UInt);
+
+   d0->fxState[1].fx     = Ifx_Write;
+   d0->fxState[1].offset = OFFB_FPREGS;
+   d0->fxState[1].size   = 8 * sizeof(ULong);
+
+   d0->fxState[2].fx     = Ifx_Write;
+   d0->fxState[2].offset = OFFB_FPTAGS;
+   d0->fxState[2].size   = 8 * sizeof(UChar);
+
+   d0->fxState[3].fx     = Ifx_Write;
+   d0->fxState[3].offset = OFFB_FPROUND;
+   d0->fxState[3].size   = sizeof(ULong);
+
+   d0->fxState[4].fx     = Ifx_Write;
+   d0->fxState[4].offset = OFFB_FC3210;
+   d0->fxState[4].size   = sizeof(ULong);
+
+   stmt( IRStmt_Dirty(d0) );
+
+   /* ------ rfbm[1] gates the SSE state ------ */
+
+   /* Same scheme as component 0: first zero it out, and then possibly
+      restore from the memory area. */
+   IRTemp rfbm_1       = newTemp(Ity_I64);
+   IRTemp xstate_bv_1  = newTemp(Ity_I64);
+   IRTemp restore_1    = newTemp(Ity_I64);
+   assign(rfbm_1,      binop(Iop_And64, mkexpr(rfbm), mkU64(2)));
+   assign(xstate_bv_1, binop(Iop_And64, mkexpr(xstate_bv), mkU64(2)));
+   assign(restore_1,   binop(Iop_And64, mkexpr(rfbm_1), mkexpr(xstate_bv_1)));
+   IRExpr* rfbm_1e     = binop(Iop_CmpNE64, mkexpr(rfbm_1),    mkU64(0));
+   IRExpr* restore_1e  = binop(Iop_CmpNE64, mkexpr(restore_1), mkU64(0));
+
+   IRTemp rfbm_1or2       = newTemp(Ity_I64);
+   IRTemp xstate_bv_1or2  = newTemp(Ity_I64);
+   IRTemp restore_1or2    = newTemp(Ity_I64);
+   assign(rfbm_1or2,      binop(Iop_And64, mkexpr(rfbm), mkU64(6)));
+   assign(xstate_bv_1or2, binop(Iop_And64, mkexpr(xstate_bv), mkU64(6)));
+   assign(restore_1or2,   binop(Iop_And64, mkexpr(rfbm_1or2),
+                                           mkexpr(xstate_bv_1or2)));
+   IRExpr* rfbm_1or2e     = binop(Iop_CmpNE64, mkexpr(rfbm_1or2),    mkU64(0));
+   IRExpr* restore_1or2e  = binop(Iop_CmpNE64, mkexpr(restore_1or2), mkU64(0));
+
+   /* The areas in question are: SSEROUND, and the XMM register array. */
+   putGuarded(OFFB_SSEROUND, rfbm_1or2e, mkU64(Irrm_NEAREST));
+
+   UInt reg;
+   for (reg = 0; reg < 16; reg++) {
+      putGuarded(xmmGuestRegOffset(reg), rfbm_1e, mkV128(0));
+   }
+
+   /* And now possibly restore from MXCSR/MXCSR_MASK */
+   /* Uses dirty helper: 
+         void amd64g_do_XRSTOR_COMPONENT_1_EXCLUDING_XMMREGS
+                 ( VexGuestAMD64State*, ULong )
+      This restores from only MXCSR and MXCSR_MASK.  We need to do
+      this if either components 1 (SSE) or 2 (AVX) are requested.
+      Hence the guard condition is a bit more complex.
+   */
+   IRDirty* d1 = unsafeIRDirty_0_N (
+                    0/*regparms*/, 
+                    "amd64g_dirtyhelper_XRSTOR_COMPONENT_1_EXCLUDING_XMMREGS",
+                    &amd64g_dirtyhelper_XRSTOR_COMPONENT_1_EXCLUDING_XMMREGS,
+                    mkIRExprVec_2( IRExpr_BBPTR(), mkexpr(addr) )
+                ) ;
+   d1->guard = restore_1or2e;
+
+   /* Declare we're reading memory: MXCSR and MXCSR_MASK.  Note that
+      the code for rbfm[0] just above claims a read of 0 .. 159, so
+      this duplicates it.  But at least correctly connects 24 .. 31 to
+      the MXCSR guest state representation (SSEROUND field). */
+   d1->mFx   = Ifx_Read;
+   d1->mAddr = binop(Iop_Add64, mkexpr(addr), mkU64(24));
+   d1->mSize = 8;
+
+   /* declare we're writing guest state */
+   d1->nFxState = 1;
+   vex_bzero(&d1->fxState, sizeof(d1->fxState));
+
+   d1->fxState[0].fx     = Ifx_Write;
+   d1->fxState[0].offset = OFFB_SSEROUND;
+   d1->fxState[0].size   = sizeof(ULong);
+
+   /* Call the helper.  This creates SSEROUND but nothing
+      else.  We do the actual register array, XMM[0..15], separately,
+      in order that any undefinedness in the XMM registers is tracked
+      separately by Memcheck and is not "infected" by the in-memory
+      shadow for the other parts of the image. */
+   stmt( IRStmt_Dirty(d1) );
+
+   /* And now the XMMs themselves.  For each register, we PUT either
+      its old value, or the value loaded from memory.  One convenient
+      way to do that is with a conditional load that has its the
+      default value, the old value of the register. */
+   for (reg = 0; reg < 16; reg++) {
+      IRExpr* ea  = binop(Iop_Add64, mkexpr(addr), mkU64(160 + reg * 16));
+      IRExpr* alt = getXMMReg(reg);
+      IRTemp  loadedValue = newTemp(Ity_V128);
+      stmt( IRStmt_LoadG(Iend_LE,
+                         ILGop_IdentV128, 
+                         loadedValue, ea, alt, restore_1e) );
+      putXMMReg(reg, mkexpr(loadedValue));
+   }
+
+   /* ------ rfbm[2] gates the AVX state ------ */
+   /* Component 2 is just a bunch of register loads, so we'll do it
+      inline, just to be simple and to be Memcheck friendly. */
+
+   /* Same scheme as component 0: first zero it out, and then possibly
+      restore from the memory area. */
+   IRTemp rfbm_2      = newTemp(Ity_I64);
+   IRTemp xstate_bv_2 = newTemp(Ity_I64);
+   IRTemp restore_2   = newTemp(Ity_I64);
+   assign(rfbm_2,      binop(Iop_And64, mkexpr(rfbm), mkU64(4)));
+   assign(xstate_bv_2, binop(Iop_And64, mkexpr(xstate_bv), mkU64(4)));
+   assign(restore_2,   binop(Iop_And64, mkexpr(rfbm_2), mkexpr(xstate_bv_2)));
+
+   IRExpr* rfbm_2e    = binop(Iop_CmpNE64, mkexpr(rfbm_2),    mkU64(0));
+   IRExpr* restore_2e = binop(Iop_CmpNE64, mkexpr(restore_2), mkU64(0));
+
+   for (reg = 0; reg < 16; reg++) {
+      putGuarded(ymmGuestRegLane128offset(reg, 1), rfbm_2e, mkV128(0));
+   }
+
+   for (reg = 0; reg < 16; reg++) {
+      IRExpr* ea  = binop(Iop_Add64, mkexpr(addr), mkU64(576 + reg * 16));
+      IRExpr* alt = getYMMRegLane128(reg, 1);
+      IRTemp  loadedValue = newTemp(Ity_V128);
+      stmt( IRStmt_LoadG(Iend_LE,
+                         ILGop_IdentV128, 
+                         loadedValue, ea, alt, restore_2e) );
+      putYMMRegLane128(reg, 1, mkexpr(loadedValue));
+   }
+}
+
+
+static Long dis_XRSTOR ( const VexAbiInfo* vbi,
+                         Prefix pfx, Long delta, Int sz )
+{
+   /* As with XRSTOR above we ignore the value of REX.W since we're
+      not bothering with the FPU DP and IP fields. */
+   IRTemp addr  = IRTemp_INVALID;
+   Int    alen  = 0;
+   HChar  dis_buf[50];
+   UChar  modrm = getUChar(delta);
+   vassert(!epartIsReg(modrm)); /* ensured by caller */
+   vassert(sz == 4 || sz == 8); /* ditto */
+
+   addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
+   delta += alen;
+   gen_SEGV_if_not_64_aligned(addr);
+
+   DIP("%sxrstor %s\n", sz==8 ? "rex64/" : "", dis_buf);
+
+   /* VEX's caller is assumed to have checked this. */
+   const ULong aSSUMED_XCR0_VALUE = 7;
+
+   IRTemp rfbm = newTemp(Ity_I64);
+   assign(rfbm,
+          binop(Iop_And64,
+                binop(Iop_Or64,
+                      binop(Iop_Shl64,
+                            unop(Iop_32Uto64, getIRegRDX(4)), mkU8(32)),
+                      unop(Iop_32Uto64, getIRegRAX(4))),
+                mkU64(aSSUMED_XCR0_VALUE)));
+
+   IRTemp xstate_bv = newTemp(Ity_I64);
+   assign(xstate_bv, loadLE(Ity_I64,
+                            binop(Iop_Add64, mkexpr(addr), mkU64(512+0))));
+
+   IRTemp xcomp_bv = newTemp(Ity_I64);
+   assign(xcomp_bv, loadLE(Ity_I64,
+                           binop(Iop_Add64, mkexpr(addr), mkU64(512+8))));
+
+   IRTemp xsavehdr_23_16 = newTemp(Ity_I64);
+   assign( xsavehdr_23_16, 
+           loadLE(Ity_I64,
+                  binop(Iop_Add64, mkexpr(addr), mkU64(512+16))));
+
+   /* We must fault if 
+      * xcomp_bv[63] == 1, since this simulated CPU does not support
+        the compaction extension.
+      * xstate_bv sets a bit outside of XCR0 (which we assume to be 7).
+      * any of the xsave header bytes 23 .. 8 are nonzero.  This seems to
+        imply that xcomp_bv must be zero.
+      xcomp_bv is header bytes 15 .. 8 and xstate_bv is header bytes 7 .. 0
+   */
+   IRTemp fault_if_nonzero = newTemp(Ity_I64);
+   assign(fault_if_nonzero,
+          binop(Iop_Or64,
+                binop(Iop_And64, mkexpr(xstate_bv), mkU64(~aSSUMED_XCR0_VALUE)),
+                binop(Iop_Or64, mkexpr(xcomp_bv), mkexpr(xsavehdr_23_16))));
+   stmt( IRStmt_Exit(binop(Iop_CmpNE64, mkexpr(fault_if_nonzero), mkU64(0)),
+                     Ijk_SigSEGV,
+                     IRConst_U64(guest_RIP_curr_instr),
+                     OFFB_RIP
+   ));
+
+   /* We are guaranteed now that both xstate_bv and rfbm are in the
+      range 0 .. 7.  Generate the restore sequence proper. */
+   gen_XRSTOR_SEQUENCE(addr, xstate_bv, rfbm);
+
+   return delta;
+}
+
+
+static Long dis_FXRSTOR ( const VexAbiInfo* vbi,
+                          Prefix pfx, Long delta, Int sz )
+{
+   /* As with FXSAVE above we ignore the value of REX.W since we're
+      not bothering with the FPU DP and IP fields. */
+   IRTemp addr  = IRTemp_INVALID;
+   Int    alen  = 0;
+   HChar  dis_buf[50];
+   UChar  modrm = getUChar(delta);
+   vassert(!epartIsReg(modrm)); /* ensured by caller */
+   vassert(sz == 4 || sz == 8); /* ditto */
+
+   addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
+   delta += alen;
+   gen_SEGV_if_not_16_aligned(addr);
+
+   DIP("%sfxrstor %s\n", sz==8 ? "rex64/" : "", dis_buf);
+
+   /* FXRSTOR is just XRSTOR with components 0 and 1 selected and also
+      as if components 0 and 1 are set as present in XSTATE_BV in the
+      XSAVE header.  Set both rfbm and xstate_bv to 0b011 therefore,
+      generate the XRSTOR sequence accordingly, and let iropt fold out
+      the unused (AVX) parts accordingly. */
+   IRTemp three = newTemp(Ity_I64);
+   assign(three, mkU64(3));
+   gen_XRSTOR_SEQUENCE(addr, three/*xstate_bv*/, three/*rfbm*/);
+
+   return delta;
+}
+
+
 static IRTemp math_PINSRW_128 ( IRTemp v128, IRTemp u16, UInt imm8 )
 {
    vassert(imm8 >= 0 && imm8 <= 7);
@@ -11737,6 +12319,7 @@
 __attribute__((noinline))
 static
 Long dis_ESC_0F__SSE2 ( Bool* decode_OK,
+                        const VexArchInfo* archinfo,
                         const VexAbiInfo* vbi,
                         Prefix pfx, Int sz, Long deltaIN,
                         DisResult* dres )
@@ -12813,7 +13396,8 @@
    case 0x5A:
       /* 0F 5A = CVTPS2PD -- convert 2 x F32 in low half mem/xmm to 2 x
          F64 in xmm(G). */
-      if (haveNo66noF2noF3(pfx) && sz == 4) {
+      if (haveNo66noF2noF3(pfx)
+          && (sz == 4 || /* ignore redundant REX.W */ sz == 8)) {
          delta = dis_CVTPS2PD_128( vbi, pfx, delta, False/*!isAvx*/ );
          goto decode_success;
       }
@@ -13563,166 +14147,34 @@
          delta = dis_LDMXCSR(vbi, pfx, delta, False/*!isAvx*/);
          goto decode_success;
       }
-      /* 0F AE /0 = FXSAVE m512 -- write x87 and SSE state to memory.
-         Note that the presence or absence of REX.W slightly affects the
-         written format: whether the saved FPU IP and DP pointers are 64
-         or 32 bits.  But the helper function we call simply writes zero
-         bits in the relevant fields (which are 64 bits regardless of
-         what REX.W is) and so it's good enough (iow, equally broken) in
-         both cases. */
+      /* 0F AE /0 = FXSAVE m512 -- write x87 and SSE state to memory */
       if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
           && !epartIsReg(getUChar(delta))
           && gregOfRexRM(pfx,getUChar(delta)) == 0) {
-          IRDirty* d;
-         modrm = getUChar(delta);
-         vassert(!epartIsReg(modrm));
-
-         addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
-         delta += alen;
-         gen_SEGV_if_not_16_aligned(addr);
-
-         DIP("%sfxsave %s\n", sz==8 ? "rex64/" : "", dis_buf);
-
-         /* Uses dirty helper: 
-              void amd64g_do_FXSAVE_ALL_EXCEPT_XMM ( VexGuestAMD64State*,
-                                                     ULong ) */
-         d = unsafeIRDirty_0_N ( 
-                0/*regparms*/, 
-                "amd64g_dirtyhelper_FXSAVE_ALL_EXCEPT_XMM",
-                &amd64g_dirtyhelper_FXSAVE_ALL_EXCEPT_XMM,
-                mkIRExprVec_2( IRExpr_BBPTR(), mkexpr(addr) )
-             );
-
-         /* declare we're writing memory */
-         d->mFx   = Ifx_Write;
-         d->mAddr = mkexpr(addr);
-         d->mSize = 464; /* according to recent Intel docs */
-
-         /* declare we're reading guest state */
-         d->nFxState = 6;
-         vex_bzero(&d->fxState, sizeof(d->fxState));
-
-         d->fxState[0].fx     = Ifx_Read;
-         d->fxState[0].offset = OFFB_FTOP;
-         d->fxState[0].size   = sizeof(UInt);
-
-         d->fxState[1].fx     = Ifx_Read;
-         d->fxState[1].offset = OFFB_FPREGS;
-         d->fxState[1].size   = 8 * sizeof(ULong);
-
-         d->fxState[2].fx     = Ifx_Read;
-         d->fxState[2].offset = OFFB_FPTAGS;
-         d->fxState[2].size   = 8 * sizeof(UChar);
-
-         d->fxState[3].fx     = Ifx_Read;
-         d->fxState[3].offset = OFFB_FPROUND;
-         d->fxState[3].size   = sizeof(ULong);
-
-         d->fxState[4].fx     = Ifx_Read;
-         d->fxState[4].offset = OFFB_FC3210;
-         d->fxState[4].size   = sizeof(ULong);
-
-         d->fxState[5].fx     = Ifx_Read;
-         d->fxState[5].offset = OFFB_SSEROUND;
-         d->fxState[5].size   = sizeof(ULong);
-
-         /* Call the helper.  This creates all parts of the in-memory
-            image except for the XMM[0..15] array, which we do
-            separately, in order that any undefinedness in the XMM
-            registers is tracked separately by Memcheck and does not
-            "infect" the in-memory shadow for the other parts of the
-            image (FPTOP, FPREGS, FPTAGS, FPROUND, FC3210,
-            SSEROUND). */
-         stmt( IRStmt_Dirty(d) );
-
-         /* And now the XMMs themselves. */
-         UInt xmm;
-         for (xmm = 0; xmm < 16; xmm++) {
-            storeLE( binop(Iop_Add64, mkexpr(addr), mkU64(160 + xmm * 16)),
-                     getXMMReg(xmm) );
-         }
-
+         delta = dis_FXSAVE(vbi, pfx, delta, sz);
          goto decode_success;
       }
-      /* 0F AE /1 = FXRSTOR m512 -- read x87 and SSE state from memory.
-         As with FXSAVE above we ignore the value of REX.W since we're
-         not bothering with the FPU DP and IP fields. */
+      /* 0F AE /1 = FXRSTOR m512 -- read x87 and SSE state from memory */
       if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
           && !epartIsReg(getUChar(delta))
           && gregOfRexRM(pfx,getUChar(delta)) == 1) {
-         IRDirty* d;
-         modrm = getUChar(delta);
-         vassert(!epartIsReg(modrm));
-
-         addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
-         delta += alen;
-         gen_SEGV_if_not_16_aligned(addr);
-
-         DIP("%sfxrstor %s\n", sz==8 ? "rex64/" : "", dis_buf);
-
-         /* Uses dirty helper: 
-              VexEmNote amd64g_do_FXRSTOR_ALL_EXCEPT_XMM ( VexGuestAMD64State*,
-                                                           ULong )
-            NOTE:
-              the VexEmNote value is simply ignored
-         */
-         d = unsafeIRDirty_0_N ( 
-                0/*regparms*/, 
-                "amd64g_dirtyhelper_FXRSTOR_ALL_EXCEPT_XMM", 
-                &amd64g_dirtyhelper_FXRSTOR_ALL_EXCEPT_XMM,
-                mkIRExprVec_2( IRExpr_BBPTR(), mkexpr(addr) )
-             );
-
-         /* declare we're reading memory */
-         d->mFx   = Ifx_Read;
-         d->mAddr = mkexpr(addr);
-         d->mSize = 464; /* according to recent Intel docs */
-
-         /* declare we're writing guest state */
-         d->nFxState = 6;
-         vex_bzero(&d->fxState, sizeof(d->fxState));
-
-         d->fxState[0].fx     = Ifx_Write;
-         d->fxState[0].offset = OFFB_FTOP;
-         d->fxState[0].size   = sizeof(UInt);
-
-         d->fxState[1].fx     = Ifx_Write;
-         d->fxState[1].offset = OFFB_FPREGS;
-         d->fxState[1].size   = 8 * sizeof(ULong);
-
-         d->fxState[2].fx     = Ifx_Write;
-         d->fxState[2].offset = OFFB_FPTAGS;
-         d->fxState[2].size   = 8 * sizeof(UChar);
-
-         d->fxState[3].fx     = Ifx_Write;
-         d->fxState[3].offset = OFFB_FPROUND;
-         d->fxState[3].size   = sizeof(ULong);
-
-         d->fxState[4].fx     = Ifx_Write;
-         d->fxState[4].offset = OFFB_FC3210;
-         d->fxState[4].size   = sizeof(ULong);
-
-         d->fxState[5].fx     = Ifx_Write;
-         d->fxState[5].offset = OFFB_SSEROUND;
-         d->fxState[5].size   = sizeof(ULong);
-
-         /* Call the helper.  This reads all parts of the in-memory
-            image except for the XMM[0..15] array, which we do
-            separately, in order that any undefinedness in the XMM
-            registers is tracked separately by Memcheck and does not
-            "infect" the in-guest-state shadow for the other parts of the
-            image (FPTOP, FPREGS, FPTAGS, FPROUND, FC3210,
-            SSEROUND). */
-         stmt( IRStmt_Dirty(d) );
-
-         /* And now the XMMs themselves. */
-         UInt xmm;
-         for (xmm = 0; xmm < 16; xmm++) {
-            putXMMReg(xmm, loadLE(Ity_V128,
-                                  binop(Iop_Add64, mkexpr(addr),
-                                                   mkU64(160 + xmm * 16))));
-         }
-
+         delta = dis_FXRSTOR(vbi, pfx, delta, sz);
+         goto decode_success;
+      }
+      /* 0F AE /4 = XSAVE mem -- write x87, SSE, AVX state to memory */
+      if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
+          && !epartIsReg(getUChar(delta))
+          && gregOfRexRM(pfx,getUChar(delta)) == 4
+          && (archinfo->hwcaps & VEX_HWCAPS_AMD64_AVX)) {
+         delta = dis_XSAVE(vbi, pfx, delta, sz);
+         goto decode_success;
+      }
+      /* 0F AE /5 = XRSTOR mem -- read x87, SSE, AVX state from memory */
+      if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
+          && !epartIsReg(getUChar(delta))
+          && gregOfRexRM(pfx,getUChar(delta)) == 5
+          && (archinfo->hwcaps & VEX_HWCAPS_AMD64_AVX)) {
+         delta = dis_XRSTOR(vbi, pfx, delta, sz);
          goto decode_success;
       }
       break;
@@ -13793,7 +14245,7 @@
             assign(t4, getIReg16(eregOfRexRM(pfx,modrm)));
             delta += 1+1;
             lane = getUChar(delta-1);
-            DIP("pinsrw $%d,%s,%s\n", (Int)lane, 
+            DIP("pinsrw $%d,%s,%s\n", lane, 
                                       nameIReg16(eregOfRexRM(pfx,modrm)),
                                       nameMMXReg(gregLO3ofRM(modrm)));
          } else {
@@ -13801,7 +14253,7 @@
             delta += 1+alen;
             lane = getUChar(delta-1);
             assign(t4, loadLE(Ity_I16, mkexpr(addr)));
-            DIP("pinsrw $%d,%s,%s\n", (Int)lane,
+            DIP("pinsrw $%d,%s,%s\n", lane,
                                       dis_buf,
                                       nameMMXReg(gregLO3ofRM(modrm)));
          }
@@ -13830,7 +14282,7 @@
             delta += 1+1;
             lane = getUChar(delta-1);
             DIP("pinsrw $%d,%s,%s\n",
-                (Int)lane, nameIReg16(rE), nameXMMReg(rG));
+                lane, nameIReg16(rE), nameXMMReg(rG));
          } else {
             addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 
                               1/*byte after the amode*/ );
@@ -13838,7 +14290,7 @@
             lane = getUChar(delta-1);
             assign(t4, loadLE(Ity_I16, mkexpr(addr)));
             DIP("pinsrw $%d,%s,%s\n",
-                (Int)lane, dis_buf, nameXMMReg(rG));
+                lane, dis_buf, nameXMMReg(rG));
          }
          IRTemp src_vec = newTemp(Ity_V128);
          assign(src_vec, getXMMReg(rG));
@@ -15846,7 +16298,7 @@
             assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
             d64 = (Long)getUChar(delta+1);
             delta += 1+1;
-            DIP("palignr $%d,%s,%s\n", (Int)d64,
+            DIP("palignr $%lld,%s,%s\n", d64,
                                        nameXMMReg(eregOfRexRM(pfx,modrm)),
                                        nameXMMReg(gregOfRexRM(pfx,modrm)));
          } else {
@@ -15855,7 +16307,7 @@
             assign( sV, loadLE(Ity_V128, mkexpr(addr)) );
             d64 = (Long)getUChar(delta+alen);
             delta += alen+1;
-            DIP("palignr $%d,%s,%s\n", (Int)d64,
+            DIP("palignr $%lld,%s,%s\n", d64,
                                        dis_buf,
                                        nameXMMReg(gregOfRexRM(pfx,modrm)));
          }
@@ -15878,7 +16330,7 @@
             assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
             d64 = (Long)getUChar(delta+1);
             delta += 1+1;
-            DIP("palignr $%d,%s,%s\n",  (Int)d64, 
+            DIP("palignr $%lld,%s,%s\n",  d64, 
                                         nameMMXReg(eregLO3ofRM(modrm)),
                                         nameMMXReg(gregLO3ofRM(modrm)));
          } else {
@@ -15886,7 +16338,7 @@
             assign( sV, loadLE(Ity_I64, mkexpr(addr)) );
             d64 = (Long)getUChar(delta+alen);
             delta += alen+1;
-            DIP("palignr $%d%s,%s\n", (Int)d64,
+            DIP("palignr $%lld%s,%s\n", d64,
                                       dis_buf,
                                       nameMMXReg(gregLO3ofRM(modrm)));
          }
@@ -18215,15 +18667,15 @@
       cases for which the helper function has not been verified. */
    switch (imm) {
       case 0x00: case 0x02: case 0x08: case 0x0A: case 0x0C: case 0x0E:
-      case 0x12: case 0x14: case 0x1A:
+      case 0x12: case 0x14: case 0x18: case 0x1A:
       case 0x30: case 0x34: case 0x38: case 0x3A:
-      case 0x40: case 0x44: case 0x46: case 0x4A:
+      case 0x40: case 0x42: case 0x44: case 0x46: case 0x4A:
          break;
       // the 16-bit character versions of the above
       case 0x01: case 0x03: case 0x09: case 0x0B: case 0x0D:
-      case 0x13:            case 0x1B:
+      case 0x13:                       case 0x1B:
                             case 0x39: case 0x3B:
-                 case 0x45:            case 0x4B:
+                            case 0x45:            case 0x4B:
          break;
       default:
          return delta0; /*FAIL*/
@@ -19797,7 +20249,8 @@
                  guest_RIP_bbstart+delta, d64 );
          vassert(dres->whatNext == Dis_StopHere);
       }
-      DIP("j%s-8 0x%llx %s\n", name_AMD64Condcode(opc - 0x70), d64, comment);
+      DIP("j%s-8 0x%llx %s\n", name_AMD64Condcode(opc - 0x70), (ULong)d64,
+          comment);
       return delta;
    }
 
@@ -19925,6 +20378,11 @@
       delta = dis_mov_E_G(vbi, pfx, sz, delta);
       return delta;
 
+   case 0x8C: /* MOV S,E -- MOV from a SEGMENT REGISTER */
+      if (haveF2orF3(pfx)) goto decode_failure;
+      delta = dis_mov_S_E(vbi, pfx, sz, delta);
+      return delta;
+
    case 0x8D: /* LEA M,Gv */
       if (haveF2orF3(pfx)) goto decode_failure;
       if (sz != 4 && sz != 8)
@@ -20204,7 +20662,7 @@
       assign( addr, handleAddrOverrides(vbi, pfx, mkU64(d64)) );
       putIRegRAX(sz, loadLE( ty, mkexpr(addr) ));
       DIP("mov%c %s0x%llx, %s\n", nameISize(sz), 
-                                  segRegTxt(pfx), d64,
+                                  segRegTxt(pfx), (ULong)d64,
                                   nameIRegRAX(sz));
       return delta;
 
@@ -20222,7 +20680,7 @@
       assign( addr, handleAddrOverrides(vbi, pfx, mkU64(d64)) );
       storeLE( mkexpr(addr), getIRegRAX(sz) );
       DIP("mov%c %s, %s0x%llx\n", nameISize(sz), nameIRegRAX(sz),
-                                  segRegTxt(pfx), d64);
+                                  segRegTxt(pfx), (ULong)d64);
       return delta;
 
    case 0xA4:
@@ -20534,6 +20992,18 @@
       DIP("int $0x3\n");
       return delta;
 
+   case 0xCD: /* INT imm8 */
+      d64 = getUChar(delta); delta++;
+
+      /* Handle int $0xD2 (Solaris fasttrap syscalls). */
+      if (d64 == 0xD2) {
+         jmp_lit(dres, Ijk_Sys_int210, guest_RIP_bbstart + delta);
+         vassert(dres->whatNext == Dis_StopHere);
+         DIP("int $0xD2\n");
+         return delta;
+      }
+      goto decode_failure;
+
    case 0xD0: { /* Grp2 1,Eb */
       Bool decode_OK = True;
       if (haveF2orF3(pfx)) goto decode_failure;
@@ -20684,7 +21154,7 @@
       }
       stmt( IRStmt_Exit(cond, Ijk_Boring, IRConst_U64(d64), OFFB_RIP) );
 
-      DIP("loop%s%s 0x%llx\n", xtra, haveASO(pfx) ? "l" : "", d64);
+      DIP("loop%s%s 0x%llx\n", xtra, haveASO(pfx) ? "l" : "", (ULong)d64);
       return delta;
     }
 
@@ -20702,7 +21172,7 @@
                             IRConst_U64(d64),
                             OFFB_RIP
              ));
-         DIP("jecxz 0x%llx\n", d64);
+         DIP("jecxz 0x%llx\n", (ULong)d64);
       } else {
          /* 64-bit */
          stmt( IRStmt_Exit( binop(Iop_CmpEQ64, 
@@ -20712,7 +21182,7 @@
                             IRConst_U64(d64),
                             OFFB_RIP
                ));
-         DIP("jrcxz 0x%llx\n", d64);
+         DIP("jrcxz 0x%llx\n", (ULong)d64);
       }
       return delta;
 
@@ -20833,7 +21303,7 @@
          jmp_lit(dres, Ijk_Call, d64);
          vassert(dres->whatNext == Dis_StopHere);
       }
-      DIP("call 0x%llx\n",d64);
+      DIP("call 0x%llx\n", (ULong)d64);
       return delta;
 
    case 0xE9: /* Jv (jump, 16/32 offset) */
@@ -20850,7 +21320,7 @@
          jmp_lit(dres, Ijk_Boring, d64);
          vassert(dres->whatNext == Dis_StopHere);
       }
-      DIP("jmp 0x%llx\n", d64);
+      DIP("jmp 0x%llx\n", (ULong)d64);
       return delta;
 
    case 0xEB: /* Jb (jump, byte offset) */
@@ -20867,7 +21337,7 @@
          jmp_lit(dres, Ijk_Boring, d64);
          vassert(dres->whatNext == Dis_StopHere);
       }
-      DIP("jmp-8 0x%llx\n", d64);
+      DIP("jmp-8 0x%llx\n", (ULong)d64);
       return delta;
 
    case 0xF5: /* CMC */
@@ -21342,7 +21812,8 @@
                  guest_RIP_bbstart+delta, d64 );
          vassert(dres->whatNext == Dis_StopHere);
       }
-      DIP("j%s-32 0x%llx %s\n", name_AMD64Condcode(opc - 0x80), d64, comment);
+      DIP("j%s-32 0x%llx %s\n", name_AMD64Condcode(opc - 0x80), (ULong)d64,
+          comment);
       return delta;
    }
 
@@ -21448,31 +21919,20 @@
       const HChar* fName = NULL;
       void*        fAddr = NULL;
 
-      /* JRS 2014-11-11: this a really horrible temp kludge to work
-         around the fact that the Yosemite (OSX 10.10)
-         /usr/lib/system/libdyld.dylib expects XSAVE/XRSTOR to be
-         implemented, because amd64g_dirtyhelper_CPUID_avx_and_cx16
-         claims they are supported, but so far they aren't.  So cause
-         it to fall back to a simpler CPU.  The cleaner approach of
-         setting CPUID(eax=1).OSXSAVE=0 and .XSAVE=0 isn't desirable
-         since it will (per the official Intel guidelines) lead to
-         software concluding that AVX isn't supported.
-
-         This is also a kludge in that putting these ifdefs here checks
-         the build (host) architecture, when really we're checking the
-         guest architecture. */
-      Bool this_is_yosemite = False;
-#     if defined(VGP_amd64_darwin) && DARWIN_VERS == DARWIN_10_10
-      this_is_yosemite = True;
-#     endif
-
       if (haveF2orF3(pfx)) goto decode_failure;
+
       /* This isn't entirely correct, CPUID should depend on the VEX
          capabilities, not on the underlying CPU. See bug #324882. */
-      if (!this_is_yosemite &&
-          (archinfo->hwcaps & VEX_HWCAPS_AMD64_SSE3) &&
+      if ((archinfo->hwcaps & VEX_HWCAPS_AMD64_SSE3) &&
           (archinfo->hwcaps & VEX_HWCAPS_AMD64_CX16) &&
-          (archinfo->hwcaps & VEX_HWCAPS_AMD64_AVX)) {
+          (archinfo->hwcaps & VEX_HWCAPS_AMD64_AVX2)) {
+         fName = "amd64g_dirtyhelper_CPUID_avx2";
+         fAddr = &amd64g_dirtyhelper_CPUID_avx2;
+         /* This is a Core-i7-4910-like machine */
+      }
+      else if ((archinfo->hwcaps & VEX_HWCAPS_AMD64_SSE3) &&
+               (archinfo->hwcaps & VEX_HWCAPS_AMD64_CX16) &&
+               (archinfo->hwcaps & VEX_HWCAPS_AMD64_AVX)) {
          fName = "amd64g_dirtyhelper_CPUID_avx_and_cx16";
          fAddr = &amd64g_dirtyhelper_CPUID_avx_and_cx16;
          /* This is a Core-i5-2300-like machine */
@@ -21974,7 +22434,8 @@
       facility in 64 bit mode. */
    {
       Bool decode_OK = False;
-      delta = dis_ESC_0F__SSE2 ( &decode_OK, vbi, pfx, sz, deltaIN, dres );
+      delta = dis_ESC_0F__SSE2 ( &decode_OK,
+                                 archinfo, vbi, pfx, sz, deltaIN, dres );
       if (decode_OK)
          return delta;
    }
@@ -22849,8 +23310,8 @@
       UInt rE = eregOfRexRM(pfx,rm);
       assign(argR, getXMMReg(rE));
       delta += 1+1;
-      DIP("%s $%d,%s,%s,%s\n",
-          opname, (Int)imm8,
+      DIP("%s $%u,%s,%s,%s\n",
+          opname, imm8,
           nameXMMReg(rE), nameXMMReg(rV), nameXMMReg(rG));
    } else {
       addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
@@ -22862,8 +23323,8 @@
              : sz == 8   ? unop( Iop_64UtoV128, loadLE(Ity_I64, mkexpr(addr)))
              : /*sz==4*/   unop( Iop_32UtoV128, loadLE(Ity_I32, mkexpr(addr))));
       delta += alen+1;
-      DIP("%s $%d,%s,%s,%s\n",
-          opname, (Int)imm8, dis_buf, nameXMMReg(rV), nameXMMReg(rG));
+      DIP("%s $%u,%s,%s,%s\n",
+          opname, imm8, dis_buf, nameXMMReg(rV), nameXMMReg(rG));
    }
 
    assign(plain, preSwap ? binop(op, mkexpr(argR), mkexpr(argL))
@@ -22964,8 +23425,8 @@
       UInt rE = eregOfRexRM(pfx,rm);
       assign(argR, getYMMReg(rE));
       delta += 1+1;
-      DIP("%s $%d,%s,%s,%s\n",
-          opname, (Int)imm8,
+      DIP("%s $%u,%s,%s,%s\n",
+          opname, imm8,
           nameYMMReg(rE), nameYMMReg(rV), nameYMMReg(rG));
    } else {
       addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
@@ -22975,8 +23436,8 @@
       if (!ok) return deltaIN; /* FAIL */
       assign(argR, loadLE(Ity_V256, mkexpr(addr)) );
       delta += alen+1;
-      DIP("%s $%d,%s,%s,%s\n",
-          opname, (Int)imm8, dis_buf, nameYMMReg(rV), nameYMMReg(rG));
+      DIP("%s $%u,%s,%s,%s\n",
+          opname, imm8, dis_buf, nameYMMReg(rV), nameYMMReg(rG));
    }
 
    breakupV256toV128s( preSwap ? argR : argL, &argLhi, &argLlo );
@@ -30445,14 +30906,14 @@
             assign( sV, getXMMReg(rE) );
             imm8 = getUChar(delta+1);
             delta += 1+1;
-            DIP("vpalignr $%d,%s,%s,%s\n", imm8, nameXMMReg(rE),
+            DIP("vpalignr $%u,%s,%s,%s\n", imm8, nameXMMReg(rE),
                                            nameXMMReg(rV), nameXMMReg(rG));
          } else {
             addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
             assign( sV, loadLE(Ity_V128, mkexpr(addr)) );
             imm8 = getUChar(delta+alen);
             delta += alen+1;
-            DIP("vpalignr $%d,%s,%s,%s\n", imm8, dis_buf,
+            DIP("vpalignr $%u,%s,%s,%s\n", imm8, dis_buf,
                                            nameXMMReg(rV), nameXMMReg(rG));
          }
 
@@ -30480,14 +30941,14 @@
             assign( sV, getYMMReg(rE) );
             imm8 = getUChar(delta+1);
             delta += 1+1;
-            DIP("vpalignr $%d,%s,%s,%s\n", imm8, nameYMMReg(rE),
+            DIP("vpalignr $%u,%s,%s,%s\n", imm8, nameYMMReg(rE),
                                            nameYMMReg(rV), nameYMMReg(rG));
          } else {
             addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
             assign( sV, loadLE(Ity_V256, mkexpr(addr)) );
             imm8 = getUChar(delta+alen);
             delta += alen+1;
-            DIP("vpalignr $%d,%s,%s,%s\n", imm8, dis_buf,
+            DIP("vpalignr $%u,%s,%s,%s\n", imm8, dis_buf,
                                            nameYMMReg(rV), nameYMMReg(rG));
          }
 
@@ -31609,206 +32070,20 @@
    else
       goto decode_success; /* \o/ */
 
-#if 0 /* XYZZY */
-
-   /* ---------------------------------------------------- */
-   /* --- The SSE/SSE2 decoder.                        --- */
-   /* ---------------------------------------------------- */
-
-   /* What did I do to deserve SSE ?  Perhaps I was really bad in a
-      previous life? */
-
-   /* Note, this doesn't handle SSE3 right now.  All amd64s support
-      SSE2 as a minimum so there is no point distinguishing SSE1 vs
-      SSE2. */
-
-   insn = &guest_code[delta];
-
-   /* FXSAVE is spuriously at the start here only because it is
-      thusly placed in guest-x86/toIR.c. */
-
-   /* ------ SSE decoder main ------ */
-
-   /* ---------------------------------------------------- */
-   /* --- end of the SSE decoder.                      --- */
-   /* ---------------------------------------------------- */
-
-   /* ---------------------------------------------------- */
-   /* --- start of the SSE2 decoder.                   --- */
-   /* ---------------------------------------------------- */
-
-   /* ---------------------------------------------------- */
-   /* --- end of the SSE/SSE2 decoder.                 --- */
-   /* ---------------------------------------------------- */
-
-   /* ---------------------------------------------------- */
-   /* --- start of the SSE3 decoder.                   --- */
-   /* ---------------------------------------------------- */
-
-   /* ---------------------------------------------------- */
-   /* --- end of the SSE3 decoder.                     --- */
-   /* ---------------------------------------------------- */
-
-   /* ---------------------------------------------------- */
-   /* --- start of the SSSE3 decoder.                  --- */
-   /* ---------------------------------------------------- */
-
-   /* ---------------------------------------------------- */
-   /* --- end of the SSSE3 decoder.                    --- */
-   /* ---------------------------------------------------- */
-
-   /* ---------------------------------------------------- */
-   /* --- start of the SSE4 decoder                    --- */
-   /* ---------------------------------------------------- */
-
-   /* ---------------------------------------------------- */
-   /* --- end of the SSE4 decoder                      --- */
-   /* ---------------------------------------------------- */
-
-   /*after_sse_decoders:*/
-
-   /* Get the primary opcode. */
-   opc = getUChar(delta); delta++;
-
-   /* We get here if the current insn isn't SSE, or this CPU doesn't
-      support SSE. */
-
-   switch (opc) {
-
-   /* ------------------------ Control flow --------------- */
-
-   /* ------------------------ CWD/CDQ -------------------- */
-
-   /* ------------------------ FPU ops -------------------- */
-
-   /* ------------------------ INT ------------------------ */
-
-   case 0xCD: { /* INT imm8 */
-      IRJumpKind jk = Ijk_Boring;
-      if (have66orF2orF3(pfx)) goto decode_failure;
-      d64 = getUChar(delta); delta++;
-      switch (d64) {
-         case 32: jk = Ijk_Sys_int32; break;
-         default: goto decode_failure;
-      }
-      guest_RIP_next_mustcheck = True;
-      guest_RIP_next_assumed = guest_RIP_bbstart + delta;
-      jmp_lit(jk, guest_RIP_next_assumed);
-      /* It's important that all ArchRegs carry their up-to-date value
-         at this point.  So we declare an end-of-block here, which
-         forces any TempRegs caching ArchRegs to be flushed. */
-      vassert(dres.whatNext == Dis_StopHere);
-      DIP("int $0x%02x\n", (UInt)d64);
-      break;
-   }
-
-   /* ------------------------ Jcond, byte offset --------- */
-
-   /* ------------------------ IMUL ----------------------- */
-
-   /* ------------------------ MOV ------------------------ */
-
-   /* ------------------------ MOVx ------------------------ */
-
-   /* ------------------------ opl imm, A ----------------- */
-
-   /* ------------------------ opl Ev, Gv ----------------- */
-
-   /* ------------------------ opl Gv, Ev ----------------- */
-
-   /* ------------------------ POP ------------------------ */
-
-   /* ------------------------ PUSH ----------------------- */
-
-   /* ------ AE: SCAS variants ------ */
-
-   /* ------ A6, A7: CMPS variants ------ */
-
-   /* ------ AA, AB: STOS variants ------ */
-
-   /* ------ A4, A5: MOVS variants ------ */
-
-   /* ------------------------ XCHG ----------------------- */
-
-   /* ------------------------ IN / OUT ----------------------- */
- 
-   /* ------------------------ (Grp1 extensions) ---------- */
-
-   /* ------------------------ (Grp2 extensions) ---------- */
-
-   /* ------------------------ (Grp3 extensions) ---------- */
-
-   /* ------------------------ (Grp4 extensions) ---------- */
-
-   /* ------------------------ (Grp5 extensions) ---------- */
-
-   /* ------------------------ Escapes to 2-byte opcodes -- */
-
-   case 0x0F: {
-      opc = getUChar(delta); delta++;
-      switch (opc) {
-
-      /* =-=-=-=-=-=-=-=-=- Grp8 =-=-=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- BSF/BSR -=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- BSWAP -=-=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- BT/BTS/BTR/BTC =-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- CMOV =-=-=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- CMPXCHG -=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- CPUID -=-=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- MOVZX, MOVSX =-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- MUL/IMUL =-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- NOPs =-=-=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- Jcond d32 -=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- PREFETCH =-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- RDTSC -=-=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- SETcc Eb =-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- SHLD/SHRD -=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- SYSCALL -=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- XADD -=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- SGDT and SIDT =-=-=-=-=-=-=-=-=-=-= */
-
-      /* =-=-=-=-=-=-=-=-=- unimp2 =-=-=-=-=-=-=-=-=-=-= */
-
-      default:
-         goto decode_failure;
-   } /* switch (opc) for the 2-byte opcodes */
-   goto decode_success;
-   } /* case 0x0F: of primary opcode */
 
-   /* ------------------------ ??? ------------------------ */
-#endif /* XYZZY */
-  
-     //default:
   decode_failure:
    /* All decode failures end up here. */
    if (sigill_diag) {
       vex_printf("vex amd64->IR: unhandled instruction bytes: "
                  "0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
-                 (Int)getUChar(delta_start+0),
-                 (Int)getUChar(delta_start+1),
-                 (Int)getUChar(delta_start+2),
-                 (Int)getUChar(delta_start+3),
-                 (Int)getUChar(delta_start+4),
-                 (Int)getUChar(delta_start+5),
-                 (Int)getUChar(delta_start+6),
-                 (Int)getUChar(delta_start+7) );
+                 getUChar(delta_start+0),
+                 getUChar(delta_start+1),
+                 getUChar(delta_start+2),
+                 getUChar(delta_start+3),
+                 getUChar(delta_start+4),
+                 getUChar(delta_start+5),
+                 getUChar(delta_start+6),
+                 getUChar(delta_start+7) );
       vex_printf("vex amd64->IR:   REX=%d REX.W=%d REX.R=%d REX.X=%d REX.B=%d\n",
                  haveREX(pfx) ? 1 : 0, getRexW(pfx), getRexR(pfx),
                  getRexX(pfx), getRexB(pfx));
@@ -31841,7 +32116,6 @@
    *expect_CAS = False;
    return dres;
 
-   //   } /* switch (opc) for the main (primary) opcode switch. */
 
   decode_success:
    /* All decode successes end up here. */
diff --git a/VEX/priv/guest_arm64_defs.h b/VEX/priv/guest_arm64_defs.h
index a3431f0..0d8b83b 100644
--- a/VEX/priv/guest_arm64_defs.h
+++ b/VEX/priv/guest_arm64_defs.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_arm64_helpers.c b/VEX/priv/guest_arm64_helpers.c
index e8dda64..0cf8046 100644
--- a/VEX/priv/guest_arm64_helpers.c
+++ b/VEX/priv/guest_arm64_helpers.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c
index 14c27f1..8da9780 100644
--- a/VEX/priv/guest_arm64_toIR.c
+++ b/VEX/priv/guest_arm64_toIR.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -5141,7 +5141,7 @@
             vassert(0);
          }
          putIReg64orSP(nn, mkexpr(tEA));
-         DIP(atRN ? "ldrs%c %s, [%s], #%lld\n" : "ldrs%c %s, [%s, #%lld]!",
+         DIP(atRN ? "ldrs%c %s, [%s], #%llu\n" : "ldrs%c %s, [%s, #%llu]!",
              ch, nameIRegOrZR(is64, tt), nameIReg64orSP(nn), simm9);
          return True;
       }
@@ -5216,7 +5216,7 @@
             vassert(0);
          }
          DIP("ldurs%c %s, [%s, #%lld]",
-             ch, nameIRegOrZR(is64, tt), nameIReg64orSP(nn), simm9);
+             ch, nameIRegOrZR(is64, tt), nameIReg64orSP(nn), (Long)simm9);
          return True;
       }
       /* else fall through */
@@ -5575,7 +5575,7 @@
       putIReg64orSP(nn, mkexpr(tEA));
       DIP(atRN ? "%s %s, [%s], #%lld\n" : "%s %s, [%s, #%lld]!\n",
           isLD ? "ldr" : "str",
-          nameQRegLO(tt, ty), nameIReg64orSP(nn), simm9);
+          nameQRegLO(tt, ty), nameIReg64orSP(nn), (Long)simm9);
       return True;
    }
 
@@ -6411,6 +6411,22 @@
       return True;
    }
 
+   /* ------------------ PRFM (register) ------------------ */
+   /* 31 29      22 20 15  12 11 9  4
+      11 1110001 01 Rm opt S  10 Rn Rt    PRFM pfrop=Rt, [Xn|SP, R<m>{ext/sh}]
+   */
+   if (INSN(31,21) == BITS11(1,1,1,1,1,0,0,0,1,0,1)
+       && INSN(11,10) == BITS2(1,0)) {
+      HChar  dis_buf[64];
+      UInt   tt = INSN(4,0);
+      IRTemp ea = gen_indexed_EA(dis_buf, insn, True/*to/from int regs*/);
+      if (ea != IRTemp_INVALID) {
+         /* No actual code to generate. */
+         DIP("prfm prfop=%u, %s\n", tt, dis_buf);
+         return True;
+      }
+   }
+
    vex_printf("ARM64 front end: load_store\n");
    return False;
 #  undef INSN
@@ -6843,6 +6859,19 @@
       return True;
    }
 
+   /* ------------------- YIELD ------------------- */
+   /* 31        23        15        7
+      1101 0101 0000 0011 0010 0000 0011 1111
+   */
+   if (INSN(31,0) == 0xD503203F) {
+      /* Request yield followed by continuation at the next insn. */
+      putPC(mkU64(guest_PC_curr_instr + 4));
+      dres->whatNext    = Dis_StopHere;
+      dres->jk_StopHere = Ijk_Yield;
+      DIP("yield\n");
+      return True;
+   }
+
   //fail:
    vex_printf("ARM64 front end: branch_etc\n");
    return False;
@@ -8275,7 +8304,7 @@
       putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
       const HChar* Ta = bitQ ==1 ? "16b" : "8b";
       const HChar* nm = isTBX ? "tbx" : "tbl";
-      DIP("%s %s.%s, {v%d.16b .. v%d.16b}, %s.%s\n",
+      DIP("%s %s.%s, {v%u.16b .. v%u.16b}, %s.%s\n",
           nm, nameQReg128(dd), Ta, nn, (nn + len) % 32, nameQReg128(mm), Ta);
       return True;
    }
@@ -9495,7 +9524,7 @@
                                        : (ks == 1 ? "sqdmlal" : "sqdmlsl");
       const HChar  arrNarrow = "bhsd"[size];
       const HChar  arrWide   = "bhsd"[size+1];
-      DIP("%s %c%d, %c%d, %c%d\n",
+      DIP("%s %c%u, %c%u, %c%u\n",
           nm, arrWide, dd, arrNarrow, nn, arrNarrow, mm);
       return True;
    }
@@ -9705,7 +9734,7 @@
          math_ZERO_ALL_EXCEPT_LOWEST_LANE(size, mkexpr(sat1n)));
       const HChar  arr = "bhsd"[size];
       const HChar* nm  = isR ? "sqrdmulh" : "sqdmulh";
-      DIP("%s %c%d, %c%d, %c%d\n", nm, arr, dd, arr, nn, arr, mm);
+      DIP("%s %c%u, %c%u, %c%u\n", nm, arr, dd, arr, nn, arr, mm);
       return True;
    }
 
@@ -10267,7 +10296,7 @@
                                        : (ks == 1 ? "sqdmlal" : "sqdmlsl");
       const HChar  arrNarrow = "bhsd"[size];
       const HChar  arrWide   = "bhsd"[size+1];
-      DIP("%s %c%d, %c%d, v%d.%c[%u]\n",
+      DIP("%s %c%u, %c%u, v%u.%c[%u]\n",
           nm, arrWide, dd, arrNarrow, nn, dd, arrNarrow, ix);
       return True;
    }
@@ -10302,7 +10331,7 @@
       updateQCFLAGwithDifferenceZHI(sat1q, sat1n, opZHI);
       const HChar* nm  = isR ? "sqrdmulh" : "sqdmulh";
       HChar ch         = size == X01 ? 'h' : 's';
-      DIP("%s %c%d, %c%d, v%d.%c[%u]\n", nm, ch, dd, ch, nn, ch, dd, ix);
+      DIP("%s %c%u, %c%u, v%d.%c[%u]\n", nm, ch, dd, ch, nn, ch, (Int)dd, ix);
       return True;
    }
 
@@ -10698,7 +10727,7 @@
       /* */
       if (res) {
          putQReg128(dd, res);
-         DIP("%cshll%s %s.%s, %s.%s, #%d\n",
+         DIP("%cshll%s %s.%s, %s.%s, #%u\n",
              isU ? 'u' : 's', isQ ? "2" : "",
              nameQReg128(dd), ta, nameQReg128(nn), tb, sh);
          return True;
@@ -12168,7 +12197,7 @@
       putQReg128(dd, mkexpr(res));
       const HChar* arrNarrow = nameArr_Q_SZ(bitQ, size);
       const HChar* arrWide   = nameArr_Q_SZ(1,    size+1);
-      DIP("shll%s %s.%s, %s.%s, #%u\n", is2 ? "2" : "", 
+      DIP("shll%s %s.%s, %s.%s, #%d\n", is2 ? "2" : "", 
           nameQReg128(dd), arrWide, nameQReg128(nn), arrNarrow, 8 << size);
       return True;
    }
diff --git a/VEX/priv/guest_arm_defs.h b/VEX/priv/guest_arm_defs.h
index b5b012b..a97265e 100644
--- a/VEX/priv/guest_arm_defs.h
+++ b/VEX/priv/guest_arm_defs.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_arm_helpers.c b/VEX/priv/guest_arm_helpers.c
index a07eeeb..92b96cf 100644
--- a/VEX/priv/guest_arm_helpers.c
+++ b/VEX/priv/guest_arm_helpers.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_arm_toIR.c b/VEX/priv/guest_arm_toIR.c
index 9c68e4e..54ccd07 100644
--- a/VEX/priv/guest_arm_toIR.c
+++ b/VEX/priv/guest_arm_toIR.c
@@ -7,11 +7,11 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    NEON support is
-   Copyright (C) 2010-2013 Samsung Electronics
+   Copyright (C) 2010-2015 Samsung Electronics
    contributed by Dmitry Zhurikhin <zhur@ispras.ru>
               and Kirill Batuzov <batuzovk@ispras.ru>
 
@@ -987,7 +987,7 @@
             lowbits_to_ignore == 31 );
    IRTemp masked = newTemp(Ity_I32);
    assign(masked, binop(Iop_Shr32, e, mkU8(lowbits_to_ignore)));
- 
+
    switch (flagNo) {
       case 0: putMiscReg32(OFFB_GEFLAG0, mkexpr(masked), condT); break;
       case 1: putMiscReg32(OFFB_GEFLAG1, mkexpr(masked), condT); break;
@@ -2870,7 +2870,7 @@
       putDRegI64(dreg, triop(Iop_Slice64, /*hiI64*/getDRegI64(mreg),
                              /*loI64*/getDRegI64(nreg), mkU8(imm4)), condT);
    }
-   DIP("vext.8 %c%d, %c%d, %c%d, #%d\n", reg_t, dreg, reg_t, nreg,
+   DIP("vext.8 %c%u, %c%u, %c%u, #%u\n", reg_t, dreg, reg_t, nreg,
                                          reg_t, mreg, imm4);
    return True;
 }
@@ -3030,7 +3030,7 @@
    } else {
       putDRegI64(dreg, mkexpr(res), condT);
    }
-   DIP("vdup.%d %c%d, d%d[%d]\n", size, Q ? 'q' : 'd', dreg, mreg, index);
+   DIP("vdup.%u %c%u, d%u[%u]\n", size, Q ? 'q' : 'd', dreg, mreg, index);
    return True;
 }
 
@@ -3137,7 +3137,7 @@
                                      binop(andOp, mkexpr(arg_m), imm_val),
                                      binop(andOp, mkexpr(arg_n), imm_val)),
                                mkU8(1))));
-            DIP("vhadd.%c%d %c%d, %c%d, %c%d\n",
+            DIP("vhadd.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size, regType,
                 dreg, regType, nreg, regType, mreg);
          } else {
@@ -3196,7 +3196,7 @@
             assign(res, binop(op, mkexpr(arg_n), mkexpr(arg_m)));
             assign(tmp, binop(op2, mkexpr(arg_n), mkexpr(arg_m)));
             setFlag_QC(mkexpr(res), mkexpr(tmp), Q, condT);
-            DIP("vqadd.%c%d %c%d, %c%d, %c%d\n",
+            DIP("vqadd.%c%d %c%u %c%u, %c%u\n",
                 U ? 'u' : 's',
                 8 << size, reg_t, dreg, reg_t, nreg, reg_t, mreg);
          }
@@ -3307,7 +3307,7 @@
                                              mkU8(1))),
                                  mkexpr(cc)));
             }
-            DIP("vrhadd.%c%d %c%d, %c%d, %c%d\n",
+            DIP("vrhadd.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's',
                 8 << size, reg_t, dreg, reg_t, nreg, reg_t, mreg);
          } else {
@@ -3323,7 +3323,7 @@
                         assign(res, binop(Iop_And64, mkexpr(arg_n),
                                                      mkexpr(arg_m)));
                      }
-                     DIP("vand %c%d, %c%d, %c%d\n",
+                     DIP("vand %c%u, %c%u, %c%u\n",
                          reg_t, dreg, reg_t, nreg, reg_t, mreg);
                      break;
                   }
@@ -3337,7 +3337,7 @@
                         assign(res, binop(Iop_And64, mkexpr(arg_n),
                                unop(Iop_Not64, mkexpr(arg_m))));
                      }
-                     DIP("vbic %c%d, %c%d, %c%d\n",
+                     DIP("vbic %c%u, %c%u, %c%u\n",
                          reg_t, dreg, reg_t, nreg, reg_t, mreg);
                      break;
                   }
@@ -3352,13 +3352,13 @@
                            assign(res, binop(Iop_Or64, mkexpr(arg_n),
                                                        mkexpr(arg_m)));
                         }
-                        DIP("vorr %c%d, %c%d, %c%d\n",
+                        DIP("vorr %c%u, %c%u, %c%u\n",
                             reg_t, dreg, reg_t, nreg, reg_t, mreg);
                      } else {
                         /* VMOV  */
                         HChar reg_t = Q ? 'q' : 'd';
                         assign(res, mkexpr(arg_m));
-                        DIP("vmov %c%d, %c%d\n", reg_t, dreg, reg_t, mreg);
+                        DIP("vmov %c%u, %c%u\n", reg_t, dreg, reg_t, mreg);
                      }
                      break;
                   case 3:{
@@ -3371,7 +3371,7 @@
                         assign(res, binop(Iop_Or64, mkexpr(arg_n),
                                unop(Iop_Not64, mkexpr(arg_m))));
                      }
-                     DIP("vorn %c%d, %c%d, %c%d\n",
+                     DIP("vorn %c%u, %c%u, %c%u\n",
                          reg_t, dreg, reg_t, nreg, reg_t, mreg);
                      break;
                   }
@@ -3548,7 +3548,7 @@
                                      unop(notOp, mkexpr(arg_n)),
                                      mkexpr(arg_m)),
                                imm_val)));
-            DIP("vhsub.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vhsub.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                 mreg);
@@ -3606,7 +3606,7 @@
             assign(res, binop(op, mkexpr(arg_n), mkexpr(arg_m)));
             assign(tmp, binop(op2, mkexpr(arg_n), mkexpr(arg_m)));
             setFlag_QC(mkexpr(res), mkexpr(tmp), Q, condT);
-            DIP("vqsub.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vqsub.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                 mreg);
@@ -3634,7 +3634,7 @@
             if (B == 0) {
                /* VCGT  */
                assign(res, binop(op, mkexpr(arg_n), mkexpr(arg_m)));
-               DIP("vcgt.%c%u %c%u, %c%u, %c%u\n",
+               DIP("vcgt.%c%d %c%u, %c%u, %c%u\n",
                    U ? 'u' : 's', 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                    mreg);
@@ -3647,7 +3647,7 @@
                assign(res,
                       unop(Q ? Iop_NotV128 : Iop_Not64,
                            binop(op, mkexpr(arg_m), mkexpr(arg_n))));
-               DIP("vcge.%c%u %c%u, %c%u, %c%u\n",
+               DIP("vcge.%c%d %c%u, %c%u, %c%u\n",
                    U ? 'u' : 's', 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                    mreg);
@@ -3709,7 +3709,7 @@
                else
                   assign(res, binop(op, mkexpr(arg_m), mkexpr(tmp)));
             }
-            DIP("vshl.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vshl.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, Q ? 'q' : 'd',
                 nreg);
@@ -3833,7 +3833,7 @@
                        binop(Q ? Iop_AndV128 : Iop_And64,
                              mkexpr(arg_m), mkexpr(mask)),
                        Q, condT);
-            DIP("vqshl.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vqshl.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, Q ? 'q' : 'd',
                 nreg);
@@ -3973,7 +3973,7 @@
                                  binop(op, mkexpr(arg_m), mkexpr(arg_n)),
                                  mkexpr(round)));
             }
-            DIP("vrshl.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vrshl.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, Q ? 'q' : 'd',
                 nreg);
@@ -4130,7 +4130,7 @@
                        binop(Q ? Iop_AndV128 : Iop_And64,
                              mkexpr(arg_m), mkexpr(mask)),
                        Q, condT);
-            DIP("vqrshl.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vqrshl.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, Q ? 'q' : 'd',
                 nreg);
@@ -4159,7 +4159,7 @@
                }
             }
             assign(res, binop(op, mkexpr(arg_n), mkexpr(arg_m)));
-            DIP("vmax.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vmax.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                 mreg);
@@ -4184,7 +4184,7 @@
                }
             }
             assign(res, binop(op, mkexpr(arg_n), mkexpr(arg_m)));
-            DIP("vmin.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vmin.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                 mreg);
@@ -4253,7 +4253,7 @@
                                                   mkexpr(arg_n)),
                                     unop(Q ? Iop_NotV128 : Iop_Not64,
                                          mkexpr(cond)))));
-            DIP("vabd.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vabd.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                 mreg);
@@ -4332,7 +4332,7 @@
                                     unop(Q ? Iop_NotV128 : Iop_Not64,
                                          mkexpr(cond)))));
             assign(res, binop(op_add, mkexpr(acc), mkexpr(tmp)));
-            DIP("vaba.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vaba.%c%d %c%u, %c%u, %c%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                 mreg);
@@ -4350,7 +4350,7 @@
                   case 3: op = Q ? Iop_Add64x2 : Iop_Add64; break;
                   default: vassert(0);
                }
-               DIP("vadd.i%u %c%u, %c%u, %c%u\n",
+               DIP("vadd.i%d %c%u, %c%u, %c%u\n",
                    8 << size, Q ? 'q' : 'd',
                    dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
             } else {
@@ -4362,7 +4362,7 @@
                   case 3: op = Q ? Iop_Sub64x2 : Iop_Sub64; break;
                   default: vassert(0);
                }
-               DIP("vsub.i%u %c%u, %c%u, %c%u\n",
+               DIP("vsub.i%d %c%u, %c%u, %c%u\n",
                    8 << size, Q ? 'q' : 'd',
                    dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
             }
@@ -4381,7 +4381,7 @@
                assign(res, unop(op, binop(Q ? Iop_AndV128 : Iop_And64,
                                           mkexpr(arg_n),
                                           mkexpr(arg_m))));
-               DIP("vtst.%u %c%u, %c%u, %c%u\n",
+               DIP("vtst.%d %c%u, %c%u, %c%u\n",
                    8 << size, Q ? 'q' : 'd',
                    dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
             } else {
@@ -4391,7 +4391,7 @@
                                      binop(Q ? Iop_XorV128 : Iop_Xor64,
                                            mkexpr(arg_n),
                                            mkexpr(arg_m)))));
-               DIP("vceq.i%u %c%u, %c%u, %c%u\n",
+               DIP("vceq.i%d %c%u, %c%u, %c%u\n",
                    8 << size, Q ? 'q' : 'd',
                    dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
             }
@@ -4444,7 +4444,7 @@
             assign(res, binop(op2,
                               Q ? getQReg(dreg) : getDRegI64(dreg),
                               binop(op, mkexpr(arg_n), mkexpr(arg_m))));
-            DIP("vml%c.i%u %c%u, %c%u, %c%u\n",
+            DIP("vml%c.i%d %c%u, %c%u, %c%u\n",
                 P ? 's' : 'a', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                 mreg);
@@ -4470,7 +4470,7 @@
                }
             }
             assign(res, binop(op, mkexpr(arg_n), mkexpr(arg_m)));
-            DIP("vmul.%c%u %c%u, %c%u, %c%u\n",
+            DIP("vmul.%c%d %c%u, %c%u, %c%u\n",
                 P ? 'p' : 'i', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
                 mreg);
@@ -4500,7 +4500,7 @@
             }
          }
          assign(res, binop(op, mkexpr(arg_n), mkexpr(arg_m)));
-         DIP("vp%s.%c%u %c%u, %c%u, %c%u\n",
+         DIP("vp%s.%c%d %c%u, %c%u, %c%u\n",
              P ? "min" : "max", U ? 'u' : 's',
              8 << size, Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg,
              Q ? 'q' : 'd', mreg);
@@ -4539,7 +4539,7 @@
                                            Q ? mkU128(imm) : mkU64(imm))),
                           Q ? mkU128(0) : mkU64(0),
                           Q, condT);
-               DIP("vqdmulh.s%u %c%u, %c%u, %c%u\n",
+               DIP("vqdmulh.s%d %c%u, %c%u, %c%u\n",
                    8 << size, Q ? 'q' : 'd',
                    dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
             } else {
@@ -4573,7 +4573,7 @@
                                            Q ? mkU128(imm) : mkU64(imm))),
                           Q ? mkU128(0) : mkU64(0),
                           Q, condT);
-               DIP("vqrdmulh.s%u %c%u, %c%u, %c%u\n",
+               DIP("vqrdmulh.s%d %c%u, %c%u, %c%u\n",
                    8 << size, Q ? 'q' : 'd',
                    dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
             }
@@ -4874,7 +4874,7 @@
          assign(arg_m, unop(cvt, getDRegI64(mreg)));
          putQReg(dreg, binop(op, mkexpr(arg_n), mkexpr(arg_m)),
                        condT);
-         DIP("v%s%c.%c%u q%u, %c%u, d%u\n", (A & 2) ? "sub" : "add",
+         DIP("v%s%c.%c%d q%u, %c%u, d%u\n", (A & 2) ? "sub" : "add",
              (A & 1) ? 'w' : 'l', U ? 'u' : 's', 8 << size, dreg,
              (A & 1) ? 'q' : 'd', nreg, mreg);
          return True;
@@ -4926,7 +4926,7 @@
          }
          putDRegI64(dreg, unop(cvt, binop(sh, mkexpr(res), mkU8(8 << size))),
                     condT);
-         DIP("v%saddhn.i%u d%u, q%u, q%u\n", U ? "r" : "", 16 << size, dreg,
+         DIP("v%saddhn.i%d d%u, q%u, q%u\n", U ? "r" : "", 16 << size, dreg,
              nreg, mreg);
          return True;
       case 5:
@@ -4982,7 +4982,7 @@
                                        unop(Iop_NotV128, mkexpr(cond)))),
                            getQReg(dreg)));
          putQReg(dreg, mkexpr(res), condT);
-         DIP("vabal.%c%u q%u, d%u, d%u\n", U ? 'u' : 's', 8 << size, dreg,
+         DIP("vabal.%c%d q%u, d%u, d%u\n", U ? 'u' : 's', 8 << size, dreg,
              nreg, mreg);
          return True;
       case 6:
@@ -5036,7 +5036,7 @@
          }
          putDRegI64(dreg, unop(cvt, binop(sh, mkexpr(res), mkU8(8 << size))),
                     condT);
-         DIP("v%ssubhn.i%u d%u, q%u, q%u\n", U ? "r" : "", 16 << size, dreg,
+         DIP("v%ssubhn.i%d d%u, q%u, q%u\n", U ? "r" : "", 16 << size, dreg,
              nreg, mreg);
          return True;
       case 7:
@@ -5087,7 +5087,7 @@
                                  binop(op, mkexpr(arg_m), mkexpr(arg_n)),
                                  unop(Iop_NotV128, mkexpr(cond)))));
          putQReg(dreg, mkexpr(res), condT);
-         DIP("vabdl.%c%u q%u, d%u, d%u\n", U ? 'u' : 's', 8 << size, dreg,
+         DIP("vabdl.%c%d q%u, d%u, d%u\n", U ? 'u' : 's', 8 << size, dreg,
              nreg, mreg);
          return True;
       case 8:
@@ -5118,7 +5118,7 @@
          res = newTemp(Ity_V128);
          assign(res, binop(op, getDRegI64(nreg),getDRegI64(mreg)));
          putQReg(dreg, binop(op2, getQReg(dreg), mkexpr(res)), condT);
-         DIP("vml%cl.%c%u q%u, d%u, d%u\n", P ? 's' : 'a', U ? 'u' : 's',
+         DIP("vml%cl.%c%d q%u, d%u, d%u\n", P ? 's' : 'a', U ? 'u' : 's',
              8 << size, dreg, nreg, mreg);
          return True;
       case 9:
@@ -5165,7 +5165,7 @@
                     mkU64(0),
                     False, condT);
          putQReg(dreg, binop(add, getQReg(dreg), mkexpr(res)), condT);
-         DIP("vqdml%cl.s%u q%u, d%u, d%u\n", P ? 's' : 'a', 8 << size, dreg,
+         DIP("vqdml%cl.s%d q%u, d%u, d%u\n", P ? 's' : 'a', 8 << size, dreg,
              nreg, mreg);
          return True;
       case 12:
@@ -5192,7 +5192,7 @@
          }
          putQReg(dreg, binop(op, getDRegI64(nreg),
                                  getDRegI64(mreg)), condT);
-         DIP("vmull.%c%u q%u, d%u, d%u\n", P ? 'p' : (U ? 'u' : 's'),
+         DIP("vmull.%c%d q%u, d%u, d%u\n", P ? 'p' : (U ? 'u' : 's'),
                8 << size, dreg, nreg, mreg);
          return True;
       case 13:
@@ -5230,7 +5230,7 @@
                           binop(op2, getDRegI64(mreg), mkU64(imm))),
                     mkU64(0),
                     False, condT);
-         DIP("vqdmull.s%u q%u, d%u, d%u\n", 8 << size, dreg, nreg, mreg);
+         DIP("vqdmull.s%d q%u, d%u, d%u\n", 8 << size, dreg, nreg, mreg);
          return True;
       default:
          return False;
@@ -5355,7 +5355,7 @@
       else
          putDRegI64(dreg, binop(op2, getDRegI64(dreg), mkexpr(res)),
                     condT);
-      DIP("vml%c.%c%u %c%u, %c%u, d%u[%u]\n", INSN(10,10) ? 's' : 'a',
+      DIP("vml%c.%c%d %c%u, %c%u, d%u[%u]\n", INSN(10,10) ? 's' : 'a',
             INSN(8,8) ? 'f' : 'i', 8 << size,
             Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, mreg, index);
       return True;
@@ -5412,7 +5412,7 @@
       op2 = INSN(10,10) ? sub : add;
       assign(res, binop(op, mkexpr(arg_n), mkexpr(arg_m)));
       putQReg(dreg, binop(op2, getQReg(dreg), mkexpr(res)), condT);
-      DIP("vml%cl.%c%u q%u, d%u, d%u[%u]\n",
+      DIP("vml%cl.%c%d q%u, d%u, d%u[%u]\n",
           INSN(10,10) ? 's' : 'a', U ? 'u' : 's',
           8 << size, dreg, nreg, mreg, index);
       return True;
@@ -5487,7 +5487,7 @@
       setFlag_QC(mkexpr(tmp), binop(add, getQReg(dreg), mkexpr(res)),
                  True, condT);
       putQReg(dreg, binop(add, getQReg(dreg), mkexpr(res)), condT);
-      DIP("vqdml%cl.s%u q%u, d%u, d%u[%u]\n", P ? 's' : 'a', 8 << size,
+      DIP("vqdml%cl.s%d q%u, d%u, d%u[%u]\n", P ? 's' : 'a', 8 << size,
           dreg, nreg, mreg, index);
       return True;
    }
@@ -5583,7 +5583,7 @@
          putQReg(dreg, mkexpr(res), condT);
       else
          putDRegI64(dreg, mkexpr(res), condT);
-      DIP("vmul.%c%u %c%u, %c%u, d%u[%u]\n", INSN(8,8) ? 'f' : 'i',
+      DIP("vmul.%c%d %c%u, %c%u, d%u[%u]\n", INSN(8,8) ? 'f' : 'i',
           8 << size, Q ? 'q' : 'd', dreg,
           Q ? 'q' : 'd', nreg, mreg, index);
       return True;
@@ -5628,7 +5628,7 @@
       }
       assign(res, binop(op, mkexpr(arg_n), mkexpr(arg_m)));
       putQReg(dreg, mkexpr(res), condT);
-      DIP("vmull.%c%u q%u, d%u, d%u[%u]\n", U ? 'u' : 's', 8 << size, dreg,
+      DIP("vmull.%c%d q%u, d%u, d%u[%u]\n", U ? 'u' : 's', 8 << size, dreg,
           nreg, mreg, index);
       return True;
    }
@@ -5691,7 +5691,7 @@
                        binop(op2, mkexpr(arg_m), mkU64(imm))),
                  mkU64(0),
                  False, condT);
-      DIP("vqdmull.s%u q%u, d%u, d%u[%u]\n", 8 << size, dreg, nreg, mreg,
+      DIP("vqdmull.s%d q%u, d%u, d%u[%u]\n", 8 << size, dreg, nreg, mreg,
           index);
       return True;
    }
@@ -5788,7 +5788,7 @@
          putQReg(dreg, mkexpr(res), condT);
       else
          putDRegI64(dreg, mkexpr(res), condT);
-      DIP("vqdmulh.s%u %c%u, %c%u, d%u[%u]\n",
+      DIP("vqdmulh.s%d %c%u, %c%u, d%u[%u]\n",
           8 << size, Q ? 'q' : 'd', dreg,
           Q ? 'q' : 'd', nreg, mreg, index);
       return True;
@@ -5886,7 +5886,7 @@
          putQReg(dreg, mkexpr(res), condT);
       else
          putDRegI64(dreg, mkexpr(res), condT);
-      DIP("vqrdmulh.s%u %c%u, %c%u, d%u[%u]\n",
+      DIP("vqrdmulh.s%d %c%u, %c%u, d%u[%u]\n",
           8 << size, Q ? 'q' : 'd', dreg,
           Q ? 'q' : 'd', nreg, mreg, index);
       return True;
@@ -6036,7 +6036,7 @@
                putDRegI64(dreg, binop(add, mkexpr(res), getDRegI64(dreg)),
                                 condT);
             }
-            DIP("vrsra.%c%u %c%u, %c%u, #%u\n",
+            DIP("vrsra.%c%d %c%u, %c%u, #%u\n",
                 U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
          } else {
@@ -6045,7 +6045,7 @@
             } else {
                putDRegI64(dreg, mkexpr(res), condT);
             }
-            DIP("vrshr.%c%u %c%u, %c%u, #%u\n", U ? 'u' : 's', 8 << size,
+            DIP("vrshr.%c%d %c%u, %c%u, #%u\n", U ? 'u' : 's', 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
          }
          return True;
@@ -6113,7 +6113,7 @@
                putDRegI64(dreg, binop(add, mkexpr(res), getDRegI64(dreg)),
                                 condT);
             }
-            DIP("vsra.%c%u %c%u, %c%u, #%u\n", U ? 'u' : 's', 8 << size,
+            DIP("vsra.%c%d %c%u, %c%u, #%u\n", U ? 'u' : 's', 8 << size,
                   Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
          } else {
             if (Q) {
@@ -6121,7 +6121,7 @@
             } else {
                putDRegI64(dreg, mkexpr(res), condT);
             }
-            DIP("vshr.%c%u %c%u, %c%u, #%u\n", U ? 'u' : 's', 8 << size,
+            DIP("vshr.%c%d %c%u, %c%u, #%u\n", U ? 'u' : 's', 8 << size,
                   Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
          }
          return True;
@@ -6170,7 +6170,7 @@
                                     mkU8(shift_imm))));
             putDRegI64(dreg, mkexpr(res), condT);
          }
-         DIP("vsri.%u %c%u, %c%u, #%u\n",
+         DIP("vsri.%d %c%u, %c%u, #%u\n",
              8 << size, Q ? 'q' : 'd', dreg,
              Q ? 'q' : 'd', mreg, shift_imm);
          return True;
@@ -6219,7 +6219,7 @@
                                        mkU8(shift_imm))));
                putDRegI64(dreg, mkexpr(res), condT);
             }
-            DIP("vsli.%u %c%u, %c%u, #%u\n",
+            DIP("vsli.%d %c%u, %c%u, #%u\n",
                 8 << size, Q ? 'q' : 'd', dreg,
                 Q ? 'q' : 'd', mreg, shift_imm);
             return True;
@@ -6245,7 +6245,7 @@
             } else {
                putDRegI64(dreg, mkexpr(res), condT);
             }
-            DIP("vshl.i%u %c%u, %c%u, #%u\n",
+            DIP("vshl.i%d %c%u, %c%u, #%u\n",
                 8 << size, Q ? 'q' : 'd', dreg,
                 Q ? 'q' : 'd', mreg, shift_imm);
             return True;
@@ -6277,7 +6277,7 @@
                   default:
                      vassert(0);
                }
-               DIP("vqshl.u%u %c%u, %c%u, #%u\n",
+               DIP("vqshl.u%d %c%u, %c%u, #%u\n",
                    8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
             } else {
@@ -6301,7 +6301,7 @@
                   default:
                      vassert(0);
                }
-               DIP("vqshlu.s%u %c%u, %c%u, #%u\n",
+               DIP("vqshlu.s%d %c%u, %c%u, #%u\n",
                    8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
             }
@@ -6328,7 +6328,7 @@
                default:
                   vassert(0);
             }
-            DIP("vqshl.s%u %c%u, %c%u, #%u\n",
+            DIP("vqshl.s%d %c%u, %c%u, #%u\n",
                 8 << size,
                 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
          }
@@ -6388,7 +6388,7 @@
                                       mkexpr(reg_m),
                                       mkU8(shift_imm))));
                putDRegI64(dreg, mkexpr(res), condT);
-               DIP("vshrn.i%u d%u, q%u, #%u\n", 8 << size, dreg, mreg,
+               DIP("vshrn.i%d d%u, q%u, #%u\n", 8 << size, dreg, mreg,
                    shift_imm);
                return True;
             } else {
@@ -6438,10 +6438,10 @@
                                             imm_val))));
                putDRegI64(dreg, mkexpr(res), condT);
                if (shift_imm == 0) {
-                  DIP("vmov%u d%u, q%u, #%u\n", 8 << size, dreg, mreg,
+                  DIP("vmov%d d%u, q%u, #%u\n", 8 << size, dreg, mreg,
                       shift_imm);
                } else {
-                  DIP("vrshrn.i%u d%u, q%u, #%u\n", 8 << size, dreg, mreg,
+                  DIP("vrshrn.i%d d%u, q%u, #%u\n", 8 << size, dreg, mreg,
                       shift_imm);
                }
                return True;
@@ -6476,7 +6476,7 @@
                default:
                   vassert(0);
             }
-            DIP("vq%sshrn.%c%u d%u, q%u, #%u\n", B ? "r" : "",
+            DIP("vq%sshrn.%c%d d%u, q%u, #%u\n", B ? "r" : "",
                 U ? 'u' : 's', 8 << size, dreg, mreg, shift_imm);
          } else {
             vassert(U);
@@ -6499,7 +6499,7 @@
                default:
                   vassert(0);
             }
-            DIP("vq%sshrun.s%u d%u, q%u, #%u\n", B ? "r" : "",
+            DIP("vq%sshrun.s%d d%u, q%u, #%u\n", B ? "r" : "",
                 8 << size, dreg, mreg, shift_imm);
          }
          if (B) {
@@ -6570,10 +6570,10 @@
          assign(res, binop(op, unop(cvt, getDRegI64(mreg)), mkU8(shift_imm)));
          putQReg(dreg, mkexpr(res), condT);
          if (shift_imm == 0) {
-            DIP("vmovl.%c%u q%u, d%u\n", U ? 'u' : 's', 8 << size,
+            DIP("vmovl.%c%d q%u, d%u\n", U ? 'u' : 's', 8 << size,
                 dreg, mreg);
          } else {
-            DIP("vshll.%c%u q%u, d%u, #%u\n", U ? 'u' : 's', 8 << size,
+            DIP("vshll.%c%d q%u, d%u, #%u\n", U ? 'u' : 's', 8 << size,
                 dreg, mreg, shift_imm);
          }
          return True;
@@ -6662,7 +6662,7 @@
                      vassert(0);
                }
                assign(res, unop(op, mkexpr(arg_m)));
-               DIP("vrev64.%u %c%u, %c%u\n", 8 << size,
+               DIP("vrev64.%d %c%u, %c%u\n", 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -6683,7 +6683,7 @@
                      vassert(0);
                }
                assign(res, unop(op, mkexpr(arg_m)));
-               DIP("vrev32.%u %c%u, %c%u\n", 8 << size,
+               DIP("vrev32.%d %c%u, %c%u\n", 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -6702,7 +6702,7 @@
                      vassert(0);
                }
                assign(res, unop(op, mkexpr(arg_m)));
-               DIP("vrev16.%u %c%u, %c%u\n", 8 << size,
+               DIP("vrev16.%d %c%u, %c%u\n", 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -6731,7 +6731,7 @@
                   }
                }
                assign(res, unop(op, mkexpr(arg_m)));
-               DIP("vpaddl.%c%u %c%u, %c%u\n", U ? 'u' : 's', 8 << size,
+               DIP("vpaddl.%c%d %c%u, %c%u\n", U ? 'u' : 's', 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -6749,7 +6749,7 @@
                   default: vassert(0);
                }
                assign(res, unop(op, mkexpr(arg_m)));
-               DIP("vcls.s%u %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
+               DIP("vcls.s%d %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
                    Q ? 'q' : 'd', mreg);
                break;
             }
@@ -6764,7 +6764,7 @@
                   default: vassert(0);
                }
                assign(res, unop(op, mkexpr(arg_m)));
-               DIP("vclz.i%u %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
+               DIP("vclz.i%d %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
                    Q ? 'q' : 'd', mreg);
                break;
             }
@@ -6836,7 +6836,7 @@
                }
                assign(res, binop(add_op, unop(op, mkexpr(arg_m)),
                                          mkexpr(arg_d)));
-               DIP("vpadal.%c%u %c%u, %c%u\n", U ? 'u' : 's', 8 << size,
+               DIP("vpadal.%c%d %c%u, %c%u\n", U ? 'u' : 's', 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -6898,7 +6898,7 @@
                                             mkexpr(mask)),
                                        neg2)));
                setFlag_QC(mkexpr(res), mkexpr(tmp), Q, condT);
-               DIP("vqabs.s%u %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
+               DIP("vqabs.s%d %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
                    Q ? 'q' : 'd', mreg);
                break;
             }
@@ -6932,7 +6932,7 @@
                assign(res, binop(op, zero, mkexpr(arg_m)));
                setFlag_QC(mkexpr(res), binop(op2, zero, mkexpr(arg_m)),
                           Q, condT);
-               DIP("vqneg.s%u %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
+               DIP("vqneg.s%d %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
                    Q ? 'q' : 'd', mreg);
                break;
             }
@@ -6981,7 +6981,7 @@
                   }
                }
                assign(res, binop(op, mkexpr(arg_m), zero));
-               DIP("vcgt.%c%u %c%u, %c%u, #0\n", F ? 'f' : 's', 8 << size,
+               DIP("vcgt.%c%d %c%u, %c%u, #0\n", F ? 'f' : 's', 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -7012,7 +7012,7 @@
                   assign(res, unop(Q ? Iop_NotV128 : Iop_Not64,
                                    binop(op, zero, mkexpr(arg_m))));
                }
-               DIP("vcge.%c%u %c%u, %c%u, #0\n", F ? 'f' : 's', 8 << size,
+               DIP("vcge.%c%d %c%u, %c%u, #0\n", F ? 'f' : 's', 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -7043,7 +7043,7 @@
                   assign(res, unop(Q ? Iop_NotV128 : Iop_Not64,
                                    unop(op, mkexpr(arg_m))));
                }
-               DIP("vceq.%c%u %c%u, %c%u, #0\n", F ? 'f' : 'i', 8 << size,
+               DIP("vceq.%c%d %c%u, %c%u, #0\n", F ? 'f' : 'i', 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -7074,7 +7074,7 @@
                   assign(res, unop(Q ? Iop_NotV128 : Iop_Not64,
                                    binop(op, mkexpr(arg_m), zero)));
                }
-               DIP("vcle.%c%u %c%u, %c%u, #0\n", F ? 'f' : 's', 8 << size,
+               DIP("vcle.%c%d %c%u, %c%u, #0\n", F ? 'f' : 's', 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -7104,7 +7104,7 @@
                   }
                   assign(res, binop(op, zero, mkexpr(arg_m)));
                }
-               DIP("vclt.%c%u %c%u, %c%u, #0\n", F ? 'f' : 's', 8 << size,
+               DIP("vclt.%c%d %c%u, %c%u, #0\n", F ? 'f' : 's', 8 << size,
                    Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
                break;
             }
@@ -7126,7 +7126,7 @@
                   assign(res, unop(Q ? Iop_Abs32Fx4 : Iop_Abs32Fx2,
                                    mkexpr(arg_m)));
                }
-               DIP("vabs.%c%u %c%u, %c%u\n",
+               DIP("vabs.%c%d %c%u, %c%u\n",
                    F ? 'f' : 's', 8 << size, Q ? 'q' : 'd', dreg,
                    Q ? 'q' : 'd', mreg);
                break;
@@ -7157,7 +7157,7 @@
                   }
                   assign(res, binop(op, zero, mkexpr(arg_m)));
                }
-               DIP("vneg.%c%u %c%u, %c%u\n",
+               DIP("vneg.%c%d %c%u, %c%u\n",
                    F ? 'f' : 's', 8 << size, Q ? 'q' : 'd', dreg,
                    Q ? 'q' : 'd', mreg);
                break;
@@ -7255,7 +7255,7 @@
                putDRegI64(dreg, mkexpr(new_d), condT);
                putDRegI64(mreg, mkexpr(new_m), condT);
             }
-            DIP("vtrn.%u %c%u, %c%u\n",
+            DIP("vtrn.%d %c%u, %c%u\n",
                 8 << size, Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
             return True;
          } else if ((B >> 1) == 2) {
@@ -7306,7 +7306,7 @@
                putDRegI64(dreg, mkexpr(new_d), condT);
                putDRegI64(mreg, mkexpr(new_m), condT);
             }
-            DIP("vuzp.%u %c%u, %c%u\n",
+            DIP("vuzp.%d %c%u, %c%u\n",
                 8 << size, Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
             return True;
          } else if ((B >> 1) == 3) {
@@ -7357,7 +7357,7 @@
                putDRegI64(dreg, mkexpr(new_d), condT);
                putDRegI64(mreg, mkexpr(new_m), condT);
             }
-            DIP("vzip.%u %c%u, %c%u\n",
+            DIP("vzip.%d %c%u, %c%u\n",
                 8 << size, Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
             return True;
          } else if (B == 8) {
@@ -7372,7 +7372,7 @@
                default: vassert(0);
             }
             putDRegI64(dreg, unop(op, getQReg(mreg)), condT);
-            DIP("vmovn.i%u d%u, q%u\n", 16 << size, dreg, mreg);
+            DIP("vmovn.i%d d%u, q%u\n", 16 << size, dreg, mreg);
             return True;
          } else if (B == 9 || (B >> 1) == 5) {
             /* VQMOVN, VQMOVUN */
@@ -7401,7 +7401,7 @@
                      case 3: return False;
                      default: vassert(0);
                   }
-                  DIP("vqmovun.s%u d%u, q%u\n", 16 << size, dreg, mreg);
+                  DIP("vqmovun.s%d d%u, q%u\n", 16 << size, dreg, mreg);
                   break;
                case 2:
                   switch (size) {
@@ -7411,7 +7411,7 @@
                      case 3: return False;
                      default: vassert(0);
                   }
-                  DIP("vqmovn.s%u d%u, q%u\n", 16 << size, dreg, mreg);
+                  DIP("vqmovn.s%d d%u, q%u\n", 16 << size, dreg, mreg);
                   break;
                case 3:
                   switch (size) {
@@ -7421,7 +7421,7 @@
                      case 3: return False;
                      default: vassert(0);
                   }
-                  DIP("vqmovn.u%u d%u, q%u\n", 16 << size, dreg, mreg);
+                  DIP("vqmovn.u%d d%u, q%u\n", 16 << size, dreg, mreg);
                   break;
                default:
                   vassert(0);
@@ -7454,7 +7454,7 @@
             assign(res, binop(op, unop(cvt, getDRegI64(mreg)),
                                   mkU8(shift_imm)));
             putQReg(dreg, mkexpr(res), condT);
-            DIP("vshll.i%u q%u, d%u, #%u\n", 8 << size, dreg, mreg, 8 << size);
+            DIP("vshll.i%d q%u, d%u, #%d\n", 8 << size, dreg, mreg, 8 << size);
             return True;
          } else if ((B >> 3) == 3 && (B & 3) == 0) {
             /* VCVT (half<->single) */
@@ -8387,7 +8387,7 @@
             mk_neon_elem_load_to_one_lane(rD, inc, i, N, size, addr);
          else
             mk_neon_elem_store_from_one_lane(rD, inc, i, N, size, addr);
-         DIP("v%s%u.%u {", bL ? "ld" : "st", N + 1, 8 << size);
+         DIP("v%s%u.%d {", bL ? "ld" : "st", N + 1, 8 << size);
          for (j = 0; j <= N; j++) {
             if (j)
                DIP(", ");
@@ -8482,7 +8482,7 @@
                }
             }
          }
-         DIP("vld%u.%u {", N + 1, 8 << size);
+         DIP("vld%u.%d {", N + 1, 8 << size);
          for (r = 0; r < regs; r++) {
             for (i = 0; i <= N; i++) {
                if (i || r)
@@ -8783,7 +8783,7 @@
             putIRegA(rN, e, IRTemp_INVALID, Ijk_Boring);
       }
 
-      DIP("v%s%u.%u {", bL ? "ld" : "st", N + 1, 8 << INSN(7,6));
+      DIP("v%s%u.%d {", bL ? "ld" : "st", N + 1, 8 << INSN(7,6));
       if ((inc == 1 && regs * (N + 1) > 1)
           || (inc == 2 && regs > 1 && N > 0)) {
          DIP("d%u-d%u", rD, rD + regs * (N + 1) - 1);
@@ -12674,9 +12674,9 @@
          transfer last for a load and first for a store.  Requires
          reordering xOff/xReg. */
       if (0) {
-         vex_printf("\nREG_LIST_PRE: (rN=%d)\n", rN);
+         vex_printf("\nREG_LIST_PRE: (rN=%u)\n", rN);
          for (i = 0; i < nX; i++)
-            vex_printf("reg %d   off %d\n", xReg[i], xOff[i]);
+            vex_printf("reg %u   off %u\n", xReg[i], xOff[i]);
          vex_printf("\n");
       }
 
@@ -12715,7 +12715,7 @@
       if (0) {
          vex_printf("REG_LIST_POST:\n");
          for (i = 0; i < nX; i++)
-            vex_printf("reg %d   off %d\n", xReg[i], xOff[i]);
+            vex_printf("reg %u   off %u\n", xReg[i], xOff[i]);
          vex_printf("\n");
       }
    }
@@ -13398,7 +13398,7 @@
                default:
                   vassert(0);
             }
-            DIP("vdup.%u q%u, r%u\n", 32 / (1<<size), rD, rT);
+            DIP("vdup.%d q%u, r%u\n", 32 / (1<<size), rD, rT);
          } else {
             switch (size) {
                case 0:
@@ -13415,7 +13415,7 @@
                default:
                   vassert(0);
             }
-            DIP("vdup.%u d%u, r%u\n", 32 / (1<<size), rD, rT);
+            DIP("vdup.%d d%u, r%u\n", 32 / (1<<size), rD, rT);
          }
          goto decode_success_vfp;
       }
@@ -14338,6 +14338,11 @@
       UInt size      = bSX == 0 ? 16 : 32;
       Int  frac_bits = size - ((imm4 << 1) | bI);
       UInt d         = dp_op  ? ((bD << 4) | Vd)  : ((Vd << 1) | bD);
+
+      IRExpr* rm     = mkU32(Irrm_NEAREST);
+      IRTemp  scale  = newTemp(Ity_F64);
+      assign(scale, unop(Iop_I32UtoF64, mkU32( 1 << (frac_bits-1) )));
+
       if (frac_bits >= 1 && frac_bits <= 32 && !to_fixed && !dp_op
                                             && size == 32) {
          /* VCVT.F32.{S,U}32 S[d], S[d], #frac_bits */
@@ -14349,9 +14354,6 @@
          assign(src32,  unop(Iop_ReinterpF32asI32, getFReg(d)));
          IRExpr* as_F64 = unop( unsyned ? Iop_I32UtoF64 : Iop_I32StoF64,
                                 mkexpr(src32 ) );
-         IRTemp scale = newTemp(Ity_F64);
-         assign(scale, unop(Iop_I32UtoF64, mkU32( 1 << (frac_bits-1) )));
-         IRExpr* rm     = mkU32(Irrm_NEAREST);
          IRExpr* resF64 = triop(Iop_DivF64,
                                 rm, as_F64, 
                                 triop(Iop_AddF64, rm, mkexpr(scale),
@@ -14371,9 +14373,6 @@
          assign(src32, unop(Iop_64to32, getDRegI64(d)));
          IRExpr* as_F64 = unop( unsyned ? Iop_I32UtoF64 : Iop_I32StoF64,
                                 mkexpr(src32 ) );
-         IRTemp scale = newTemp(Ity_F64);
-         assign(scale, unop(Iop_I32UtoF64, mkU32( 1 << (frac_bits-1) )));
-         IRExpr* rm     = mkU32(Irrm_NEAREST);
          IRExpr* resF64 = triop(Iop_DivF64,
                                 rm, as_F64, 
                                 triop(Iop_AddF64, rm, mkexpr(scale),
@@ -14388,10 +14387,7 @@
          /* VCVT.{S,U}32.F64 D[d], D[d], #frac_bits */
          IRTemp srcF64 = newTemp(Ity_F64);
          assign(srcF64, getDReg(d));
-         IRTemp scale = newTemp(Ity_F64);
-         assign(scale, unop(Iop_I32UtoF64, mkU32( 1 << (frac_bits-1) )));
          IRTemp scaledF64 = newTemp(Ity_F64);
-         IRExpr* rm = mkU32(Irrm_NEAREST);
          assign(scaledF64, triop(Iop_MulF64,
                                  rm, mkexpr(srcF64),
                                  triop(Iop_AddF64, rm, mkexpr(scale),
@@ -14403,6 +14399,29 @@
                              mkexpr(rmode), mkexpr(scaledF64)));
          putDRegI64(d, unop(unsyned ? Iop_32Uto64 : Iop_32Sto64,
                             mkexpr(asI32)), condT);
+
+         DIP("vcvt.%c32.f64, d%u, d%u, #%d\n",
+             unsyned ? 'u' : 's', d, d, frac_bits);
+         goto decode_success_vfp;
+      }
+      if (frac_bits >= 1 && frac_bits <= 32 && to_fixed && !dp_op
+                                            && size == 32) {
+         /* VCVT.{S,U}32.F32 S[d], S[d], #frac_bits */
+         IRTemp srcF32 = newTemp(Ity_F32);
+         assign(srcF32, getFReg(d));
+         IRTemp scaledF64 = newTemp(Ity_F64);
+         assign(scaledF64, triop(Iop_MulF64,
+                                 rm, unop(Iop_F32toF64, mkexpr(srcF32)),
+                                 triop(Iop_AddF64, rm, mkexpr(scale),
+                                                       mkexpr(scale))));
+         IRTemp rmode = newTemp(Ity_I32);
+         assign(rmode, mkU32(Irrm_ZERO)); // as per the spec
+         IRTemp asI32 = newTemp(Ity_I32);
+         assign(asI32, binop(unsyned ? Iop_F64toI32U : Iop_F64toI32S,
+                             mkexpr(rmode), mkexpr(scaledF64)));
+         putFReg(d, unop(Iop_ReinterpI32asF32, mkexpr(asI32)), condT);
+         DIP("vcvt.%c32.f32, d%u, d%u, #%d\n",
+             unsyned ? 'u' : 's', d, d, frac_bits);
          goto decode_success_vfp;
       }
       /* fall through */
@@ -16303,7 +16322,7 @@
                vassert(0); // guarded by "if" above
          }
          putIRegA(rD, mkexpr(dstT), condT, Ijk_Boring);
-         DIP("%s%s r%u, r%u, ROR #%u\n", nm, nCC(INSN_COND), rD, rM, rot);
+         DIP("%s%s r%u, r%u, ROR #%d\n", nm, nCC(INSN_COND), rD, rM, rot);
          goto decode_success;
       }
       /* fall through */
@@ -16763,12 +16782,6 @@
       }
    }
 
-   /* ------------------- NOP ------------------ */
-   if (0x0320F000 == (insn & 0x0FFFFFFF)) {
-      DIP("nop%s\n", nCC(INSN_COND));
-      goto decode_success;
-   }
-
    /* -------------- (A1) LDRT reg+/-#imm12 -------------- */
    /* Load Register Unprivileged:
       ldrt<c> Rt, [Rn] {, #+/-imm12}
@@ -17205,7 +17218,7 @@
    /* ----------------------------------------------------------- */
 
    /* -------------- read CP15 TPIDRURO register ------------- */
-   /* mrc     p15, 0, r0, c13, c0, 3  up to
+   /* mrc     p15, 0, r0,  c13, c0, 3  up to
       mrc     p15, 0, r14, c13, c0, 3
    */
    /* I don't know whether this is really v7-only.  But anyway, we
@@ -17223,6 +17236,25 @@
       /* fall through */
    }
 
+   /* -------------- read CP15 PMUSRENR register ------------- */
+   /* mrc     p15, 0, r0,  c9, c14, 0  up to
+      mrc     p15, 0, r14, c9, c14, 0
+   */
+   /* A program reading this register is really asking "which
+      performance monitoring registes are available in user space?
+      The simple answer here is to return zero, meaning "none".  See
+      #345984. */
+   if (0x0E190F1E == (insn & 0x0FFF0FFF)) {
+      UInt rD = INSN(15,12);
+      if (rD <= 14) {
+         /* skip r15, that's too stupid to handle */
+         putIRegA(rD, mkU32(0), condT, Ijk_Boring);
+         DIP("mrc%s p15,0, r%u, c9, c14, 0\n", nCC(INSN_COND), rD);
+         goto decode_success;
+      }
+      /* fall through */
+   }
+
    /* Handle various kinds of barriers.  This is rather indiscriminate
       in the sense that they are all turned into an IR Fence, which
       means we don't know which they are, so the back end has to
@@ -17262,6 +17294,30 @@
    }
 
    /* ----------------------------------------------------------- */
+   /* -- Hints                                                 -- */
+   /* ----------------------------------------------------------- */
+
+   switch (insn & 0x0FFFFFFF) {
+      /* ------------------- NOP ------------------ */
+      case 0x0320F000:
+         DIP("nop%s\n", nCC(INSN_COND));
+         goto decode_success;
+      /* ------------------- YIELD ------------------ */
+      case 0x0320F001:
+         /* Continue after conditionally yielding. */
+         DIP("yield%s\n", nCC(INSN_COND));
+         stmt( IRStmt_Exit( unop(Iop_32to1, 
+                                 condT == IRTemp_INVALID 
+                                    ? mkU32(1) : mkexpr(condT)),
+                            Ijk_Yield,
+                            IRConst_U32(guest_R15_curr_instr_notENC + 4),
+                            OFFB_R15T ));
+         goto decode_success;
+      default:
+         break;
+   }
+
+   /* ----------------------------------------------------------- */
    /* -- VFP (CP 10, CP 11) instructions (in ARM mode)         -- */
    /* ----------------------------------------------------------- */
 
@@ -17305,9 +17361,9 @@
    if (sigill_diag) {
       vex_printf("disInstr(arm): unhandled instruction: "
                  "0x%x\n", insn);
-      vex_printf("                 cond=%d(0x%x) 27:20=%u(0x%02x) "
+      vex_printf("                 cond=%d(0x%x) 27:20=%d(0x%02x) "
                                    "4:4=%d "
-                                   "3:0=%u(0x%x)\n",
+                                   "3:0=%d(0x%x)\n",
                  (Int)INSN_COND, (UInt)INSN_COND,
                  (Int)INSN(27,20), (UInt)INSN(27,20),
                  (Int)INSN(4,4),
@@ -19151,16 +19207,18 @@
          /* ------ NOP ------ */
          DIP("nop\n");
          goto decode_success;
-      case 0xBF20:
-         /* ------ WFE ------ */
-         /* WFE gets used as a spin-loop hint.  Do the usual thing,
+      case 0xBF10: // YIELD
+      case 0xBF20: // WFE
+         /* ------ WFE, YIELD ------ */
+         /* Both appear to get used as a spin-loop hints.  Do the usual thing,
             which is to continue after yielding. */
          stmt( IRStmt_Exit( unop(Iop_32to1, mkexpr(condT)),
                             Ijk_Yield,
                             IRConst_U32((guest_R15_curr_instr_notENC + 2) 
                                         | 1 /*CPSR.T*/),
                             OFFB_R15T ));
-         DIP("wfe\n");
+         Bool isWFE = INSN0(15,0) == 0xBF20;
+         DIP(isWFE ? "wfe\n" : "yield\n");
          goto decode_success;
       case 0xBF40:
          /* ------ SEV ------ */
@@ -19613,10 +19671,10 @@
           && rD != 15 && rN == 13 && imm5 <= 3 && how == 0) {
          valid = True;
       }
-      /* also allow "sub.w reg, sp, reg   w/ no shift
+      /* also allow "sub.w reg, sp, reg   lsl #N for N=0,1,2 or 3
          (T1) "SUB (SP minus register) */
       if (!valid && INSN0(8,5) == BITS4(1,1,0,1) // sub
-          && rD != 15 && rN == 13 && imm5 == 0 && how == 0) {
+          && rD != 15 && rN == 13 && imm5 <= 3 && how == 0) {
          valid = True;
       }
       if (valid) {
@@ -19848,11 +19906,14 @@
    /* ------------ (T?) MVN{S}.W Rd, Rn, {shift} ------------ */
    if ((INSN0(15,0) & 0xFFCF) == 0xEA4F
        && INSN1(15,15) == 0) {
-      UInt rD = INSN1(11,8);
-      UInt rN = INSN1(3,0);
-      if (!isBadRegT(rD) && !isBadRegT(rN)) {
-         UInt bS    = INSN0(4,4);
-         UInt isMVN = INSN0(5,5);
+      UInt rD      = INSN1(11,8);
+      UInt rN      = INSN1(3,0);
+      UInt bS      = INSN0(4,4);
+      UInt isMVN   = INSN0(5,5);
+      Bool regsOK  = (bS || isMVN) 
+                        ? (!isBadRegT(rD) && !isBadRegT(rN))
+                        : (rD != 15 && rN != 15 && (rD != 13 || rN != 13));
+      if (regsOK) {
          UInt imm5  = (INSN1(14,12) << 2) | INSN1(7,6);
          UInt how   = INSN1(5,4);
 
@@ -21458,7 +21519,7 @@
       UInt rT2 = INSN1(11,8);
       UInt rD  = INSN1(3,0);
       if (!isBadRegT(rD) && !isBadRegT(rT) && !isBadRegT(rT2)
-          && rN != 15 && rD != rN && rD != rT && rD != rT) {
+          && rN != 15 && rD != rN && rD != rT && rD != rT2) {
          IRTemp resSC1, resSC32, data;
          // go uncond
          mk_skip_over_T32_if_cond_is_false( condT );
@@ -21549,7 +21610,7 @@
       UInt bW   = INSN0(5,5);
       UInt imm2 = INSN1(5,4);
       if (!isBadRegT(rM)) {
-         DIP("pld%s [r%u, r%u, lsl %d]\n", bW ? "w" : "", rN, rM, imm2);
+         DIP("pld%s [r%u, r%u, lsl %u]\n", bW ? "w" : "", rN, rM, imm2);
          goto decode_success;
       }
       /* fall through */
@@ -21563,16 +21624,30 @@
       have to support it since arm-linux uses TPIDRURO as a thread
       state register. */
    if ((INSN0(15,0) == 0xEE1D) && (INSN1(11,0) == 0x0F70)) {
-      /* FIXME: should this be unconditional? */
       UInt rD = INSN1(15,12);
       if (!isBadRegT(rD)) {
-         putIRegT(rD, IRExpr_Get(OFFB_TPIDRURO, Ity_I32), IRTemp_INVALID);
+         putIRegT(rD, IRExpr_Get(OFFB_TPIDRURO, Ity_I32), condT);
          DIP("mrc p15,0, r%u, c13, c0, 3\n", rD);
          goto decode_success;
       }
       /* fall through */
    }
 
+   /* -------------- read CP15 PMUSRENR register ------------- */
+   /* mrc     p15, 0, r0,  c9, c14, 0  up to
+      mrc     p15, 0, r14, c9, c14, 0
+      See comment on the ARM equivalent of this (above) for details.
+   */
+   if ((INSN0(15,0) == 0xEE19) && (INSN1(11,0) == 0x0F1E)) {
+      UInt rD = INSN1(15,12);
+      if (!isBadRegT(rD)) {
+         putIRegT(rD, mkU32(0), condT);
+         DIP("mrc p15,0, r%u, c9, c14, 0\n", rD);
+         goto decode_success;
+      }
+      /* fall through */
+   }
+
    /* ------------------- CLREX ------------------ */
    if (INSN0(15,0) == 0xF3BF && INSN1(15,0) == 0x8F2F) {
       /* AFAICS, this simply cancels a (all?) reservations made by a
diff --git a/VEX/priv/guest_generic_bb_to_IR.c b/VEX/priv/guest_generic_bb_to_IR.c
index ca3682e..779f8ae 100644
--- a/VEX/priv/guest_generic_bb_to_IR.c
+++ b/VEX/priv/guest_generic_bb_to_IR.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_generic_bb_to_IR.h b/VEX/priv/guest_generic_bb_to_IR.h
index 49c94d7..78a5a87 100644
--- a/VEX/priv/guest_generic_bb_to_IR.h
+++ b/VEX/priv/guest_generic_bb_to_IR.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_generic_x87.c b/VEX/priv/guest_generic_x87.c
index 0e36e94..2c9b25b 100644
--- a/VEX/priv/guest_generic_x87.c
+++ b/VEX/priv/guest_generic_x87.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -796,9 +796,9 @@
       unvalidated cases in the code base. */
    switch (imm8) {
       case 0x00: case 0x02: case 0x08: case 0x0A: case 0x0C: case 0x0E:
-      case 0x12: case 0x14: case 0x1A:
+      case 0x12: case 0x14: case 0x18: case 0x1A:
       case 0x30: case 0x34: case 0x38: case 0x3A:
-      case 0x40: case 0x44: case 0x46: case 0x4A:
+      case 0x40: case 0x42: case 0x44: case 0x46: case 0x4A:
          break;
       default:
          return False;
diff --git a/VEX/priv/guest_generic_x87.h b/VEX/priv/guest_generic_x87.h
index 8ccdfd6..5a520ea 100644
--- a/VEX/priv/guest_generic_x87.h
+++ b/VEX/priv/guest_generic_x87.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_mips_defs.h b/VEX/priv/guest_mips_defs.h
index c60e026..f4c3bbc 100644
--- a/VEX/priv/guest_mips_defs.h
+++ b/VEX/priv/guest_mips_defs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_mips_helpers.c b/VEX/priv/guest_mips_helpers.c
index 863efda..4fbb67e 100644
--- a/VEX/priv/guest_mips_helpers.c
+++ b/VEX/priv/guest_mips_helpers.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
@@ -1085,6 +1085,10 @@
          __asm__ __volatile__("rdhwr %0, $1\n\t" : "=r" (x) );
          break;
 
+      case 31:  /* x = CVMX_get_cycles() */
+         __asm__ __volatile__("rdhwr %0, $31\n\t" : "=r" (x) );
+         break;
+
       default:
          vassert(0);
          break;
@@ -1100,6 +1104,10 @@
          __asm__ __volatile__("rdhwr %0, $1\n\t" : "=r" (x) );
          break;
 
+      case 31:  /* x = CVMX_get_cycles() */
+         __asm__ __volatile__("rdhwr %0, $31\n\t" : "=r" (x) );
+         break;
+
       default:
          vassert(0);
          break;
diff --git a/VEX/priv/guest_mips_toIR.c b/VEX/priv/guest_mips_toIR.c
index 8e94298..b72d314 100644
--- a/VEX/priv/guest_mips_toIR.c
+++ b/VEX/priv/guest_mips_toIR.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
@@ -1554,13 +1554,13 @@
       case 0x3A:
          if ((regRs & 0x01) == 0) {
             /* Doubleword Shift Right Logical - DSRL; MIPS64 */
-            DIP("dsrl r%u, r%u, %d", regRd, regRt, (Int)sImmsa);
+            DIP("dsrl r%u, r%u, %lld", regRd, regRt, sImmsa);
             assign(tmpRd, binop(Iop_Shr64, mkexpr(tmpRt), mkU8(uImmsa)));
             putIReg(regRd, mkexpr(tmpRd));
          } else if ((regRs & 0x01) == 1) {
             /* Doubleword Rotate Right - DROTR; MIPS64r2 */
             vassert(mode64);
-            DIP("drotr r%u, r%u, %d", regRd, regRt, (Int)sImmsa);
+            DIP("drotr r%u, r%u, %lld", regRd, regRt, sImmsa);
             IRTemp tmpL = newTemp(ty);
             IRTemp tmpR = newTemp(ty);
             assign(tmpR, binop(Iop_Shr64, mkexpr(tmpRt), mkU8(uImmsa)));
@@ -1575,12 +1575,12 @@
       case 0x3E:
          if ((regRs & 0x01) == 0) {
             /* Doubleword Shift Right Logical Plus 32 - DSRL32; MIPS64 */
-            DIP("dsrl32 r%u, r%u, %d", regRd, regRt, (Int)(sImmsa + 32));
+            DIP("dsrl32 r%u, r%u, %lld", regRd, regRt, sImmsa + 32);
             assign(tmpRd, binop(Iop_Shr64, mkexpr(tmpRt), mkU8(uImmsa + 32)));
             putIReg(regRd, mkexpr(tmpRd));
          } else if ((regRs & 0x01) == 1) {
             /* Doubleword Rotate Right Plus 32 - DROTR32; MIPS64r2 */
-            DIP("drotr32 r%u, r%u, %d", regRd, regRt, (Int)sImmsa);
+            DIP("drotr32 r%u, r%u, %lld", regRd, regRt, sImmsa);
             vassert(mode64);
             IRTemp tmpL = newTemp(ty);
             IRTemp tmpR = newTemp(ty);
@@ -1634,14 +1634,14 @@
          break;
 
       case 0x38:  /* Doubleword Shift Left Logical - DSLL; MIPS64 */
-         DIP("dsll r%u, r%u, %d", regRd, regRt, (Int)sImmsa);
+         DIP("dsll r%u, r%u, %lld", regRd, regRt, sImmsa);
          vassert(mode64);
          assign(tmpRd, binop(Iop_Shl64, mkexpr(tmpRt), mkU8(uImmsa)));
          putIReg(regRd, mkexpr(tmpRd));
          break;
 
       case 0x3C:  /* Doubleword Shift Left Logical Plus 32 - DSLL32; MIPS64 */
-         DIP("dsll32 r%u, r%u, %d", regRd, regRt, (Int)sImmsa);
+         DIP("dsll32 r%u, r%u, %lld", regRd, regRt, sImmsa);
          assign(tmpRd, binop(Iop_Shl64, mkexpr(tmpRt), mkU8(uImmsa + 32)));
          putIReg(regRd, mkexpr(tmpRd));
          break;
@@ -1658,14 +1658,14 @@
       }
 
       case 0x3B:  /* Doubleword Shift Right Arithmetic - DSRA; MIPS64 */
-         DIP("dsra r%u, r%u, %d", regRd, regRt, (Int)sImmsa);
+         DIP("dsra r%u, r%u, %lld", regRd, regRt, sImmsa);
          assign(tmpRd, binop(Iop_Sar64, mkexpr(tmpRt), mkU8(uImmsa)));
          putIReg(regRd, mkexpr(tmpRd));
          break;
 
       case 0x3F:  /* Doubleword Shift Right Arithmetic Plus 32 - DSRA32;
                      MIPS64 */
-         DIP("dsra32 r%u, r%u, %d", regRd, regRt, (Int)sImmsa);
+         DIP("dsra32 r%u, r%u, %lld", regRd, regRt, sImmsa);
          assign(tmpRd, binop(Iop_Sar64, mkexpr(tmpRt), mkU8(uImmsa + 32)));
          putIReg(regRd, mkexpr(tmpRd));
          break;
@@ -1745,7 +1745,7 @@
       UInt fpc_cc = get_fpc_cc(cins);
       switch (fmt) {
          case 0x10: {  /* C.cond.S */
-            DIP("c.%s.s %d, f%d, f%d", showCondCode(cond), fpc_cc, fs, ft);
+            DIP("c.%s.s %u, f%u, f%u", showCondCode(cond), fpc_cc, fs, ft);
             if (fp_mode64) {
                t0 = newTemp(Ity_I32);
                t1 = newTemp(Ity_I32);
@@ -1954,7 +1954,7 @@
             break;
 
          case 0x11: {  /* C.cond.D */
-            DIP("c.%s.d %d, f%d, f%d", showCondCode(cond), fpc_cc, fs, ft);
+            DIP("c.%s.d %u, f%u, f%u", showCondCode(cond), fpc_cc, fs, ft);
             t0 = newTemp(Ity_I32);
             t1 = newTemp(Ity_I32);
             t2 = newTemp(Ity_I32);
@@ -2257,7 +2257,7 @@
       case 0x1C: {
          switch(opc2) { 
             case 0x03: {  /* DMUL rd, rs, rt */
-               DIP("dmul r%d, r%d, r%d", regRd, regRs, regRt);
+               DIP("dmul r%u, r%u, r%u", regRd, regRs, regRt);
                IRTemp t0 = newTemp(Ity_I128);
                assign(t0, binop(Iop_MullU64, getIReg(regRs), getIReg(regRt)));
                putIReg(regRd, unop(Iop_128to64, mkexpr(t0)));
@@ -2425,7 +2425,7 @@
 
             /* Unsigned Byte Add - BADDU rd, rs, rt; Cavium OCTEON */
             case 0x28: {
-               DIP("BADDU r%d, r%d, r%d", regRs, regRt, regRd);
+               DIP("BADDU r%u, r%u, r%u", regRs, regRt, regRd);
                IRTemp t0 = newTemp(Ity_I8);
  
                assign(t0, binop(Iop_Add8,
@@ -2449,7 +2449,7 @@
                IRTemp old = newTemp(ty);
                IRTemp nyu = IRTemp_INVALID;
                assign(old, getIReg(regRs));
-               DIP("pop r%d, r%d", regRd, regRs);
+               DIP("pop r%u, r%u", regRd, regRs);
  
                for (i = 0; i < 5; i++) {
                   mask[i] = newTemp(ty);
@@ -2505,7 +2505,7 @@
                IRTemp mask[6];
                IRTemp old = newTemp(ty);
                IRTemp nyu = IRTemp_INVALID;
-               DIP("dpop r%d, r%d", regRd, regRs);
+               DIP("dpop r%u, r%u", regRd, regRs);
  
                for (i = 0; i < 6; i++) {
                   mask[i] = newTemp(ty);
@@ -2536,7 +2536,7 @@
             }
 
             case 0x32:  /* 5. CINS rd, rs, p, lenm1 */
-               DIP("cins r%u, r%u, %d, %d\n", regRt, regRs, p, lenM1); 
+               DIP("cins r%u, r%u, %u, %u\n", regRt, regRs, p, lenM1); 
                assign ( tmp  , binop(Iop_Shl64, mkexpr(tmpRs),
                                      mkU8(64-( lenM1+1 ))));
                assign ( tmpRt, binop(Iop_Shr64, mkexpr( tmp ),
@@ -2573,7 +2573,7 @@
                break;
 
             case 0x2B:  /* 20. SNE rd, rs, rt */
-               DIP("sne r%d, r%d, r%d", regRd,regRs, regRt);
+               DIP("sne r%u, r%u, r%u", regRd,regRs, regRt);
                if (mode64)
                   putIReg(regRd, unop(Iop_1Uto64, binop(Iop_CmpNE64,
                                                         getIReg(regRs),
@@ -2585,7 +2585,7 @@
                break;
 
             case 0x2A:  /* Set Equals - SEQ; Cavium OCTEON */
-               DIP("seq r%d, r%d, %d", regRd, regRs, regRt);
+               DIP("seq r%u, r%u, %d", regRd, regRs, regRt);
                if (mode64)
                   putIReg(regRd, unop(Iop_1Uto64,
                                       binop(Iop_CmpEQ64, getIReg(regRs),
@@ -2597,7 +2597,7 @@
                break;
 
             case 0x2E:  /* Set Equals Immediate - SEQI; Cavium OCTEON */
-               DIP("seqi r%d, r%d, %d", regRt, regRs, imm);
+               DIP("seqi r%u, r%u, %u", regRt, regRs, imm);
                if (mode64)
                   putIReg(regRt, unop(Iop_1Uto64,
                                       binop(Iop_CmpEQ64, getIReg(regRs),
@@ -2609,7 +2609,7 @@
                break;
 
             case 0x2F:  /* Set Not Equals Immediate - SNEI; Cavium OCTEON */
-               DIP("snei r%d, r%d, %d", regRt, regRs, imm);
+               DIP("snei r%u, r%u, %u", regRt, regRs, imm);
                if (mode64)
                   putIReg(regRt, unop(Iop_1Uto64,
                                    binop(Iop_CmpNE64,
@@ -2632,21 +2632,31 @@
             case 0x0A: {  // lx - Load indexed instructions
                switch (get_sa(theInstr)) {
                   case 0x00: {  // LWX rd, index(base)
-                     DIP("lwx r%d, r%d(r%d)", regRd, regRt, regRs);
+                     DIP("lwx r%u, r%u(r%u)", regRd, regRt, regRs);
                      LOADX_STORE_PATTERN;
                      putIReg(regRd, mkWidenFrom32(ty, load(Ity_I32, mkexpr(t1)),
                                                   True));
                      break;
                   }
+                  case 0x04:  // LHX rd, index(base)
+                     DIP("lhx r%u, r%u(r%u)", regRd, regRt, regRs);
+                     LOADX_STORE_PATTERN;
+                     if (mode64)
+                        putIReg(regRd, unop(Iop_16Sto64, load(Ity_I16,
+                                                              mkexpr(t1))));
+                     else
+                        putIReg(regRd, unop(Iop_16Sto32, load(Ity_I16,
+                                                              mkexpr(t1))));
+                     break;
                   case 0x08: {  // LDX rd, index(base)
-                     DIP("ldx r%d, r%d(r%d)", regRd, regRt, regRs);
+                     DIP("ldx r%u, r%u(r%u)", regRd, regRt, regRs);
                      vassert(mode64); /* Currently Implemented only for n64 */
                      LOADX_STORE_PATTERN;
                      putIReg(regRd, load(Ity_I64, mkexpr(t1)));
                      break;
                   }
                   case 0x06: {  // LBUX rd, index(base)
-                     DIP("lbux r%d, r%d(r%d)", regRd, regRt, regRs);
+                     DIP("lbux r%u, r%u(r%u)", regRd, regRt, regRs);
                      LOADX_STORE_PATTERN;
                      if (mode64)
                         putIReg(regRd, unop(Iop_8Uto64, load(Ity_I8,
@@ -2657,14 +2667,14 @@
                      break;
                   }
                   case 0x10: {  // LWUX rd, index(base) (Cavium OCTEON)
-                     DIP("lwux r%d, r%d(r%d)", regRd, regRt, regRs);
+                     DIP("lwux r%u, r%u(r%u)", regRd, regRt, regRs);
                      LOADX_STORE_PATTERN; /* same for both 32 and 64 modes*/
                      putIReg(regRd, mkWidenFrom32(ty, load(Ity_I32, mkexpr(t1)),
                                                   False));
                      break;
                   }
                   case 0x14: {  // LHUX rd, index(base) (Cavium OCTEON)
-                     DIP("lhux r%d, r%d(r%d)", regRd, regRt, regRs);
+                     DIP("lhux r%u, r%u(r%u)", regRd, regRt, regRs);
                      LOADX_STORE_PATTERN;
                      if (mode64)
                         putIReg(regRd,
@@ -2675,7 +2685,7 @@
                      break;
                   }
                   case 0x16: {  // LBX rd, index(base) (Cavium OCTEON)
-                     DIP("lbx r%d, r%d(r%d)", regRd, regRs, regRt);
+                     DIP("lbx r%u, r%u(r%u)", regRd, regRs, regRt);
                      LOADX_STORE_PATTERN;
                      if (mode64)
                         putIReg(regRd,
@@ -2729,13 +2739,13 @@
       case 0x00: {  /* Special */
          switch (function) {
             case 0x10: {  /* MFHI */
-               DIP("mfhi ac%d r%d", ac_mfhilo, rd);
+               DIP("mfhi ac%u r%u", ac_mfhilo, rd);
                putIReg(rd, unop(Iop_64HIto32, getAcc(ac_mfhilo)));
                break;
             }
 
             case 0x11: {  /* MTHI */
-               DIP("mthi ac%d r%d", ac, rs);
+               DIP("mthi ac%u r%u", ac, rs);
                t1 = newTemp(Ity_I32);
                assign(t1, unop(Iop_64to32, getAcc(ac)));
                putAcc(ac, binop(Iop_32HLto64, getIReg(rs), mkexpr(t1)));
@@ -2743,13 +2753,13 @@
             }
 
             case 0x12: {  /* MFLO */
-               DIP("mflo ac%d r%d", ac_mfhilo, rd);
+               DIP("mflo ac%u r%u", ac_mfhilo, rd);
                putIReg(rd, unop(Iop_64to32, getAcc(ac_mfhilo)));
                break;
             }
 
             case 0x13: {  /* MTLO */
-               DIP("mtlo ac%d r%d", ac, rs);
+               DIP("mtlo ac%u r%u", ac, rs);
                t1 = newTemp(Ity_I32);
                assign(t1, unop(Iop_64HIto32, getAcc(ac)));
                putAcc(ac, binop(Iop_32HLto64, mkexpr(t1), getIReg(rs)));
@@ -2757,7 +2767,7 @@
             }
 
             case 0x18: {  /* MULT */
-               DIP("mult ac%d r%d, r%d", ac, rs, rt);
+               DIP("mult ac%u r%u, r%u", ac, rs, rt);
                t1 = newTemp(Ity_I64);
                assign(t1, binop(Iop_MullS32, mkNarrowTo32(Ity_I32, getIReg(rs)),
                                 mkNarrowTo32(Ity_I32, getIReg(rt))));
@@ -2766,7 +2776,7 @@
             }
 
             case 0x19: {  /* MULTU */
-               DIP("multu ac%d r%d, r%d", ac, rs, rt);
+               DIP("multu ac%u r%u, r%u", ac, rs, rt);
                t1 = newTemp(Ity_I64);
                assign(t1, binop(Iop_MullU32, mkNarrowTo32(Ity_I32, getIReg(rs)),
                                              mkNarrowTo32(Ity_I32,
@@ -2780,7 +2790,7 @@
       case 0x1C: {  /* Special2 */
          switch (function) {
             case 0x00: {  /* MADD */
-               DIP("madd ac%d, r%d, r%d", ac, rs, rt);
+               DIP("madd ac%u, r%u, r%u", ac, rs, rt);
                t1 = newTemp(Ity_I64);
                t2 = newTemp(Ity_I64);
                t3 = newTemp(Ity_I64);
@@ -2793,7 +2803,7 @@
                break;
             }
             case 0x01: {  /* MADDU */
-               DIP("maddu ac%d r%d, r%d", ac, rs, rt);
+               DIP("maddu ac%u r%u, r%u", ac, rs, rt);
                t1 = newTemp(Ity_I64);
                t2 = newTemp(Ity_I64);
                t3 = newTemp(Ity_I64);
@@ -2806,7 +2816,7 @@
                break;
             }
             case 0x04: {  /* MSUB */
-               DIP("msub ac%d r%d, r%d", ac, rs, rt);
+               DIP("msub ac%u r%u, r%u", ac, rs, rt);
                t1 = newTemp(Ity_I64);
                t2 = newTemp(Ity_I64);
                t3 = newTemp(Ity_I64);
@@ -2819,7 +2829,7 @@
                break;
             }
             case 0x05: {  /* MSUBU */
-               DIP("msubu ac%d r%d, r%d", ac, rs, rt);
+               DIP("msubu ac%u r%u, r%u", ac, rs, rt);
                t1 = newTemp(Ity_I64);
                t2 = newTemp(Ity_I64);
                t3 = newTemp(Ity_I64);
@@ -2839,7 +2849,7 @@
             case 0x12: {  /* ABSQ_S.PH */
                switch (sa) {
                   case 0x1: {  /* ABSQ_S.QB */
-                     DIP("absq_s.qb r%d, r%d", rd, rt);
+                     DIP("absq_s.qb r%u, r%u", rd, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I8);
                      t1 = newTemp(Ity_I1);
@@ -2988,7 +2998,7 @@
                      break;
                   }
                   case 0x2: {  /* REPL.QB */
-                     DIP("repl.qb r%d, %d", rd, dsp_imm);
+                     DIP("repl.qb r%u, %u", rd, dsp_imm);
                      vassert(!mode64);
 
                      putIReg(rd, mkU32((dsp_imm << 24) | (dsp_imm << 16) |
@@ -2996,7 +3006,7 @@
                      break;
                   }
                   case 0x3: {  /* REPLV.QB */
-                     DIP("replv.qb r%d, r%d", rd, rt);
+                     DIP("replv.qb r%u, r%u", rd, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I8);
 
@@ -3009,7 +3019,7 @@
                      break;
                   }
                   case 0x4: {  /* PRECEQU.PH.QBL */
-                     DIP("precequ.ph.qbl r%d, r%d", rd, rt);
+                     DIP("precequ.ph.qbl r%u, r%u", rd, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_Or32,
@@ -3026,7 +3036,7 @@
                      break;
                   }
                   case 0x5: {  /* PRECEQU.PH.QBR */
-                     DIP("precequ.ph.qbr r%d, r%d", rd, rt);
+                     DIP("precequ.ph.qbr r%u, r%u", rd, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_Or32,
@@ -3043,7 +3053,7 @@
                      break;
                   }
                   case 0x6: {  /* PRECEQU.PH.QBLA */
-                     DIP("precequ.ph.qbla r%d, r%d", rd, rt);
+                     DIP("precequ.ph.qbla r%u, r%u", rd, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_Or32,
@@ -3060,7 +3070,7 @@
                      break;
                   }
                   case 0x7: {  /* PRECEQU.PH.QBRA */
-                     DIP("precequ.ph.qbra r%d, r%d", rd, rt);
+                     DIP("precequ.ph.qbra r%u, r%u", rd, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_Or32,
@@ -3077,7 +3087,7 @@
                      break;
                   }
                   case 0x9: {  /* ABSQ_S.PH */
-                     DIP("absq_s.ph r%d, r%d", rd, rt);
+                     DIP("absq_s.ph r%u, r%u", rd, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I16);
                      t1 = newTemp(Ity_I1);
@@ -3156,7 +3166,7 @@
                      break;
                   }
                   case 0xA: {  /* REPL.PH */
-                     DIP("repl.ph r%d, %d", rd, dsp_imm);
+                     DIP("repl.ph r%u, %u", rd, dsp_imm);
                      vassert(!mode64);
                      UShort immediate = extend_s_10to16(dsp_imm);
 
@@ -3164,7 +3174,7 @@
                      break;
                   }
                   case 0xB: {  /* REPLV.PH */
-                     DIP("replv.ph r%d, r%d", rd, rt);
+                     DIP("replv.ph r%u, r%u", rd, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_16HLto32,
@@ -3173,7 +3183,7 @@
                      break;
                   }
                   case 0xC: {  /* PRECEQ.W.PHL */
-                     DIP("preceq.w.phl r%d, r%d", rd, rt);
+                     DIP("preceq.w.phl r%u, r%u", rd, rt);
                      vassert(!mode64);
                      putIReg(rd, binop(Iop_And32,
                                        getIReg(rt),
@@ -3181,7 +3191,7 @@
                      break;
                   }
                   case 0xD: {  /* PRECEQ.W.PHR */
-                     DIP("preceq.w.phr r%d, r%d", rd, rt);
+                     DIP("preceq.w.phr r%u, r%u", rd, rt);
                      vassert(!mode64);
                      putIReg(rd, binop(Iop_16HLto32,
                                        unop(Iop_32to16, getIReg(rt)),
@@ -3189,7 +3199,7 @@
                      break;
                   }
                   case 0x11: {  /* ABSQ_S.W */
-                     DIP("absq_s.w r%d, r%d", rd, rt);
+                     DIP("absq_s.w r%u, r%u", rd, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I1);
                      t1 = newTemp(Ity_I1);
@@ -3218,7 +3228,7 @@
                      break;
                   }
                   case 0x1B: {  /* BITREV */
-                     DIP("bitrev r%d, r%d", rd, rt);
+                     DIP("bitrev r%u, r%u", rd, rt);
                      vassert(!mode64);
                      /* 32bit reversal as seen on Bit Twiddling Hacks site
                         http://graphics.stanford.edu/~seander/bithacks.html
@@ -3286,7 +3296,7 @@
                      break;
                   }
                   case 0x1C: {  /* PRECEU.PH.QBL */
-                     DIP("preceu.ph.qbl r%d, r%d", rd, rt);
+                     DIP("preceu.ph.qbl r%u, r%u", rd, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_Or32,
@@ -3303,7 +3313,7 @@
                      break;
                   }
                   case 0x1E: {  /* PRECEU.PH.QBLA */
-                     DIP("preceu.ph.qbla r%d, r%d", rd, rt);
+                     DIP("preceu.ph.qbla r%u, r%u", rd, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_Or32,
@@ -3320,7 +3330,7 @@
                      break;
                   }
                   case 0x1D: {  /* PRECEU.PH.QBR */
-                     DIP("preceu.ph.qbr r%d, r%d", rd, rt);
+                     DIP("preceu.ph.qbr r%u, r%u", rd, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_Or32,
@@ -3335,7 +3345,7 @@
                      break;
                   }
                   case 0x1F: {  /* PRECEU.PH.QBRA */
-                     DIP("preceu.ph.qbra r%d, r%d", rd, rt);
+                     DIP("preceu.ph.qbra r%u, r%u", rd, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_Or32,
@@ -3355,7 +3365,7 @@
             case 0x38: {  /* EXTR.W */
                switch(sa) {
                   case 0x0: {  /* EXTR.W */
-                     DIP("extr.w r%d, ac%d, %d", rt, ac, rs);
+                     DIP("extr.w r%u, ac%u, %u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -3480,7 +3490,7 @@
                      break;
                   }
                   case 0x1: {  /* EXTRV.W */
-                     DIP("extrv.w r%d, ac%d, r%d", rt, ac, rs);
+                     DIP("extrv.w r%u, ac%u, r%u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -3615,7 +3625,7 @@
                      break;
                   }
                   case 0x2: {  /* EXTP */
-                     DIP("extp r%d, ac%d, %d", rt, ac, rs);
+                     DIP("extp r%u, ac%u, %u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I32);
@@ -3698,7 +3708,7 @@
                      break;
                   }
                   case 0x3: {  /* EXTPV */
-                     DIP("extpv r%d, ac%d, r%d", rt, ac, rs);
+                     DIP("extpv r%u, ac%u, r%u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I32);
@@ -3793,7 +3803,7 @@
                      break;
                   }
                   case 0x4: {  /* EXTR_R.W */
-                     DIP("extr_r.w r%d, ac%d, %d", rt, ac, rs);
+                     DIP("extr_r.w r%u, ac%u, %u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -3926,7 +3936,7 @@
                      break;
                   }
                   case 0x5: {  /* EXTRV_R.W */
-                     DIP("extrv_r.w r%d, ac%d, r%d", rt, ac, rs);
+                     DIP("extrv_r.w r%u, ac%u, r%u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -4057,7 +4067,7 @@
                      break;
                   }
                   case 0x6: {  /* EXTR_RS.W */
-                     DIP("extr_rs.w r%d, ac%d, %d", rt, ac, rs);
+                     DIP("extr_rs.w r%u, ac%u, %u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -4194,7 +4204,7 @@
                      break;
                   }
                   case 0x7: {  /* EXTRV_RS.W */
-                     DIP("extrv_rs.w r%d, ac%d, r%d", rt, ac, rs);
+                     DIP("extrv_rs.w r%u, ac%u, r%u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -4342,7 +4352,7 @@
                      break;
                   }
                   case 0xA: {  /* EXTPDP */
-                     DIP("extpdp r%d, ac%d, %d", rt, ac, rs);
+                     DIP("extpdp r%u, ac%u, %u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I32);
@@ -4436,7 +4446,7 @@
                      break;
                   }
                   case 0xB: {  /* EXTPDPV */
-                     DIP("extpdpv r%d, ac%d, r%d", rt, ac, rs);
+                     DIP("extpdpv r%u, ac%u, r%u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I32);
@@ -4543,7 +4553,7 @@
                      break;
                   }
                   case 0xE: {  /* EXTR_S.H */
-                     DIP("extr_s.h r%d, ac%d, %d", rt, ac, rs);
+                     DIP("extr_s.h r%u, ac%u, %u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -4658,7 +4668,7 @@
                      break;
                   }
                   case 0xF: {  /* EXTRV_S.H */
-                     DIP("extrv_s.h r%d, ac%d, %d", rt, ac, rs);
+                     DIP("extrv_s.h r%u, ac%u, %u", rt, ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -4778,7 +4788,7 @@
                      break;
                   }
                   case 0x12: {  /* RDDSP*/
-                     DIP("rddsp r%d, mask 0x%x", rd, rddsp_mask);
+                     DIP("rddsp r%u, mask 0x%x", rd, rddsp_mask);
                      vassert(!mode64);
 
                      putIReg(rd, mkU32(0x0));
@@ -4847,7 +4857,7 @@
                      break;
                   }
                   case 0x13: {  /* WRDSP */
-                     DIP("wrdsp r%d, mask 0x%x", rs, wrdsp_mask);
+                     DIP("wrdsp r%u, mask 0x%x", rs, wrdsp_mask);
                      vassert(!mode64);
 
                      if ((wrdsp_mask & 0x3f) == 0x3f) {
@@ -4939,7 +4949,7 @@
                      break;
                   }
                   case 0x1A: {  /* SHILO */
-                     DIP("shilo ac%d, %d", ac, shift);
+                     DIP("shilo ac%u, %u", ac, shift);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -4970,7 +4980,7 @@
                      break;
                   }
                   case 0x1B: {  /* SHILOV */
-                     DIP("shilov ac%d, r%d", ac, rs);
+                     DIP("shilov ac%u, r%u", ac, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I32);
@@ -5008,7 +5018,7 @@
                      break;
                   }
                   case 0x1F: {  /* MTHLIP */
-                     DIP("mthlip r%d, ac%d", rs, ac);
+                     DIP("mthlip r%u, ac%u", rs, ac);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I32);
@@ -5047,7 +5057,7 @@
             case 0xA: {  /* LX */
                switch(sa) {
                   case 0x0: {  /* LWX */
-                     DIP("lwx r%d, r%d(r%d)", rd, rt, rs);
+                     DIP("lwx r%u, r%u(r%u)", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
 
@@ -5057,7 +5067,7 @@
                      break;
                   }
                   case 0x4: {  /* LHX */
-                     DIP("lhx r%d, r%d(r%d)", rd, rt, rs);
+                     DIP("lhx r%u, r%u(r%u)", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
 
@@ -5067,7 +5077,7 @@
                      break;
                   }
                   case 0x6: {  /* LBUX */
-                     DIP("lbux r%d, r%d(r%d)", rd, rt, rs);
+                     DIP("lbux r%u, r%u(r%u)", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
 
@@ -5084,7 +5094,7 @@
             case 0xC: {  /* INSV */
                switch(sa) {
                   case 0x0: {  /* INSV */
-                     DIP("insv r%d, r%d", rt, rs);
+                     DIP("insv r%u, r%u", rt, rs);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I32);
@@ -5175,7 +5185,7 @@
             case 0x10: {  /* ADDU.QB */
                switch(sa) {
                   case 0x00: {  /* ADDU.QB */
-                     DIP("addu.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addu.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -5278,7 +5288,7 @@
                      break;
                   }
                   case 0x1: {  /* SUBU.QB */
-                     DIP("subu.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subu.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -5380,7 +5390,7 @@
                      break;
                   }
                   case 0x04: {  /* ADDU_S.QB */
-                     DIP("addu_s.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addu_s.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -5500,7 +5510,7 @@
                      break;
                   }
                   case 0x05: {  /* SUBU_S.QB */
-                     DIP("subu_s.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subu_s.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I32);
                      t2 = newTemp(Ity_I1);
@@ -5597,7 +5607,7 @@
                      break;
                   }
                   case 0x6: {  /* MULEU_S.PH.QBL */
-                     DIP("muleu_s.ph.qbl r%d, r%d, r%d", rd, rs, rt);
+                     DIP("muleu_s.ph.qbl r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -5653,7 +5663,7 @@
                      break;
                   }
                   case 0x7: {  /* MULEU_S.PH.QBR */
-                     DIP("muleu_s.ph.qbr r%d, r%d, r%d", rd, rs, rt);
+                     DIP("muleu_s.ph.qbr r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -5710,7 +5720,7 @@
                      break;
                   }
                   case 0x08: {  /* ADDU.PH */
-                     DIP("addu.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addu.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -5764,7 +5774,7 @@
                      break;
                   }
                   case 0x9: {  /* SUBU.PH */
-                     DIP("subu.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subu.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -5817,7 +5827,7 @@
                      break;
                   }
                   case 0xA: {  /* ADDQ.PH */
-                     DIP("addq.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addq.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -5886,7 +5896,7 @@
                      break;
                   }
                   case 0xB: {  /* SUBQ.PH */
-                     DIP("subq.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subq.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -5955,7 +5965,7 @@
                      break;
                   }
                   case 0xC: {  /* ADDU_S.PH */
-                     DIP("addu_s.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addu_s.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -6014,7 +6024,7 @@
                      break;
                   }
                   case 0xD: {  /* SUBU_S.PH */
-                     DIP("subu_s.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subu_s.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -6070,7 +6080,7 @@
                      break;
                   }
                   case 0xE: {  /* ADDQ_S.PH */
-                     DIP("addq_s.ph r%d r%d, r%d", rd, rs, rt);
+                     DIP("addq_s.ph r%u r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -6155,7 +6165,7 @@
                      break;
                   }
                   case 0xF: {  /* SUBQ_S.PH */
-                     DIP("subq_s.ph r%d r%d, r%d", rd, rs, rt);
+                     DIP("subq_s.ph r%u r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -6240,7 +6250,7 @@
                      break;
                   }
                   case 0x10: {  /* ADDSC */
-                     DIP("addsc r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addsc r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I1);
@@ -6268,7 +6278,7 @@
                      break;
                   }
                   case 0x11: {  /* ADDWC */
-                     DIP("addwc r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addwc r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I64);
@@ -6309,7 +6319,7 @@
                      break;
                   }
                   case 0x12: {  /* MODSUB */
-                     DIP("modsub r%d, r%d, r%d", rd, rs, rt);
+                     DIP("modsub r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -6341,7 +6351,7 @@
                      break;
                   }
                   case 0x14: {  /* RADDU.W.QB */
-                     DIP("raddu.w.qb r%d, r%d", rd, rs);
+                     DIP("raddu.w.qb r%u, r%u", rd, rs);
                      vassert(!mode64);
                      putIReg(rd, binop(Iop_Add32,
                                        binop(Iop_Add32,
@@ -6365,7 +6375,7 @@
                      break;
                   }
                   case 0x16: {  /* ADDQ_S.W */
-                     DIP("addq_s.w r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addq_s.w r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I1);
@@ -6403,7 +6413,7 @@
                      break;
                   }
                   case 0x17: {  /* SUBQ_S.W */
-                     DIP("subq_s.w r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subq_s.w r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I1);
@@ -6441,7 +6451,7 @@
                      break;
                   }
                   case 0x1C: {  /* MULEQ_S.W.PHL */
-                     DIP("muleq_s.w.phl r%d, r%d, r%d", rd, rs, rt);
+                     DIP("muleq_s.w.phl r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -6483,7 +6493,7 @@
                      break;
                   }
                   case 0x1D: {  /* MULEQ_S.W.PHR */
-                     DIP("muleq_s.w.phr r%d, r%d, r%d", rd, rs, rt);
+                     DIP("muleq_s.w.phr r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -6523,7 +6533,7 @@
                      break;
                   }
                   case 0x1E: {  /* MULQ_S.PH */
-                     DIP("mulq_s.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("mulq_s.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -6609,7 +6619,7 @@
                      break;
                   }
                   case 0x1F: {  /* MULQ_RS.PH */
-                     DIP("mulq_rs.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("mulq_rs.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -6702,7 +6712,7 @@
             case 0x11: {  /* CMPU.EQ.QB */
                switch(sa) {
                   case 0x0: {  /* CMPU.EQ.QB */
-                     DIP("cmpu.eq.qb r%d, r%d", rs, rt);
+                     DIP("cmpu.eq.qb r%u, r%u", rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -6774,7 +6784,7 @@
                      break;
                   }
                   case 0x1: {  /* CMPU.LT.QB */
-                     DIP("cmpu.lt.qb r%d, r%d", rs, rt);
+                     DIP("cmpu.lt.qb r%u, r%u", rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -6851,7 +6861,7 @@
                      break;
                   }
                   case 0x2: {  /* CMPU.LE.QB */
-                     DIP("cmpu.le.qb r%d, r%d", rs, rt);
+                     DIP("cmpu.le.qb r%u, r%u", rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -6928,7 +6938,7 @@
                      break;
                   }
                   case 0x3: {  /* PICK.QB */
-                     DIP("pick.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("pick.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I8);
@@ -6987,7 +6997,7 @@
                      break;
                   }
                   case 0x4: {  /* CMPGU.EQ.QB */
-                     DIP("cmpgu.eq.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("cmpgu.eq.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -7053,7 +7063,7 @@
                      break;
                   }
                   case 0x5: {  /* CMPGU.LT.QB */
-                     DIP("cmpgu.lt.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("cmpgu.lt.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -7118,7 +7128,7 @@
                      break;
                   }
                   case 0x6: {  /* CMPGU.LE.QB */
-                     DIP("cmpgu.le.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("cmpgu.le.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -7183,7 +7193,7 @@
                      break;
                   }
                   case 0x8: {  /* CMP.EQ.PH */
-                     DIP("cmp.eq.ph r%d, r%d", rs, rt);
+                     DIP("cmp.eq.ph r%u, r%u", rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -7211,7 +7221,7 @@
                      break;
                   }
                   case 0x9: {  /* CMP.LT.PH */
-                     DIP("cmp.lt.ph r%d, r%d", rs, rt);
+                     DIP("cmp.lt.ph r%u, r%u", rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -7244,7 +7254,7 @@
                      break;
                   }
                   case 0xA: {  /* CMP.LE.PH */
-                     DIP("cmp.le.ph r%d, r%d", rs, rt);
+                     DIP("cmp.le.ph r%u, r%u", rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -7277,7 +7287,7 @@
                      break;
                   }
                   case 0xB: {  /* PICK.PH */
-                     DIP("pick.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("pick.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I16);
@@ -7305,7 +7315,7 @@
                      break;
                   }
                   case 0xC: {  /* PRECRQ.QB.PH */
-                     DIP("precrq.qb.ph r%d, r%d, %d", rd, rs, rt);
+                     DIP("precrq.qb.ph r%u, r%u, %u", rd, rs, rt);
                      vassert(!mode64);
                      putIReg(rd,
                              binop(Iop_16HLto32,
@@ -7322,7 +7332,7 @@
                      break;
                   }
                   case 0xD: {  /* PRECR.QB.PH */
-                     DIP("precr.qb.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("precr.qb.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
 
                      putIReg(rd,
@@ -7340,7 +7350,7 @@
                      break;
                   }
                   case 0xF: {  /* PRECRQU_S.QB.PH */
-                     DIP("precrqu_s.qb.ph r%d, r%d, %d", rd, rs, rt);
+                     DIP("precrqu_s.qb.ph r%u, r%u, %u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I8);
                      t1 = newTemp(Ity_I8);
@@ -7552,7 +7562,7 @@
                      break;
                   }
                   case 0x14: {  /* PRECRQ.PH.W */
-                     DIP("precrq.ph.w r%d, r%d, %d", rd, rs, rt);
+                     DIP("precrq.ph.w r%u, r%u, %u", rd, rs, rt);
                      vassert(!mode64);
                      putIReg(rd, binop(Iop_16HLto32,
                                        unop(Iop_32HIto16, getIReg(rs)),
@@ -7560,7 +7570,7 @@
                      break;
                   }
                   case 0x15: {  /* PRECRQ_RS.PH.W */
-                     DIP("precrq_rs.ph.w r%d, r%d, %d", rd, rs, rt);
+                     DIP("precrq_rs.ph.w r%u, r%u, %u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I1);
@@ -7627,7 +7637,7 @@
                      break;
                   }
                   case 0x1E: {  /* PRECR_SRA.PH.W */
-                     DIP("precr_sra.ph.w r%d, r%d, %d", rt, rs, rd);
+                     DIP("precr_sra.ph.w r%u, r%u, %u", rt, rs, rd);
                      vassert(!mode64);
 
                      if (0 == rd) {
@@ -7646,7 +7656,7 @@
                      break;
                   }
                   case 0x1F: {  /* PRECR_SRA_R.PH.W */
-                     DIP("precr_sra_r.ph.w r%d, r%d, %d", rt, rs, rd);
+                     DIP("precr_sra_r.ph.w r%u, r%u, %u", rt, rs, rd);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I32);
@@ -7678,7 +7688,7 @@
                      break;
                   }
                   case 0xE: {  /* PACKRL.PH */
-                     DIP("packrl.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("packrl.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_16HLto32,
@@ -7687,7 +7697,7 @@
                      break;
                   }
                   case 0x18: {  /* CMPGDU.EQ.QB */
-                     DIP("cmpgdu.eq.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("cmpgdu.eq.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -7781,7 +7791,7 @@
                      break;
                   }
                   case 0x19: {  /* CMPGDU.LT.QB */
-                     DIP("cmpgdu.lt.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("cmpgdu.lt.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -7875,7 +7885,7 @@
                      break;
                   }
                   case 0x1A: {  /* CMPGDU.LE.QB */
-                     DIP("cmpgdu.le.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("cmpgdu.le.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I1);
@@ -7977,7 +7987,7 @@
             case 0x13: {  /* SHLL.QB */
                switch(sa) {
                   case 0x0: {  /* SHLL.QB */
-                     DIP("shll.qb r%d, r%d, %d", rd, rt, rs);
+                     DIP("shll.qb r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -8093,7 +8103,7 @@
                      break;
                   }
                   case 0x3: {  /* SHRL.QB */
-                     DIP("shrl.qb r%d, r%d, %d", rd, rt, rs);
+                     DIP("shrl.qb r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I8);
@@ -8151,7 +8161,7 @@
                      break;
                   }
                   case 0x2: {  /* SHLLV.QB */
-                     DIP("shllv.qb r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shllv.qb r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -8272,7 +8282,7 @@
                      break;
                   }
                   case 0x1: {  /* SHRLV.QB */
-                     DIP("shrlv.qb r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shrlv.qb r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I8);
                      t1 = newTemp(Ity_I8);
@@ -8312,7 +8322,7 @@
                      break;
                   }
                   case 0x4: {  /* SHRA.QB */
-                     DIP("shra.qb r%d, r%d, %d", rd, rt, rs);
+                     DIP("shra.qb r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -8423,7 +8433,7 @@
                      break;
                   }
                   case 0x5: {  /* SHRA_R.QB */
-                     DIP("shra_r.qb r%d, r%d, %d", rd, rt, rs);
+                     DIP("shra_r.qb r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I8);
@@ -8493,7 +8503,7 @@
                      break;
                   }
                   case 0x6: {  /* SHRAV.QB */
-                     DIP("shrav.qb r%d, r%d, %d", rd, rt, rs);
+                     DIP("shrav.qb r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I32);
@@ -8679,7 +8689,7 @@
                      break;
                   }
                   case 0x7: {  /* SHRAV_R.QB */
-                     DIP("shrav_r.qb r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shrav_r.qb r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I8);
@@ -8757,7 +8767,7 @@
                      break;
                   }
                   case 0x8: {  /* SHLL.PH */
-                     DIP("shll.ph r%d, r%d, %d", rd, rt, rs);
+                     DIP("shll.ph r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -8867,7 +8877,7 @@
                      break;
                   }
                   case 0x9: {  /* SHRA.PH */
-                     DIP("shra.ph r%d, r%d, %d", rd, rt, rs);
+                     DIP("shra.ph r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -8889,7 +8899,7 @@
                      break;
                   }
                   case 0xA: {  /* SHLLV.PH */
-                     DIP("shllv.ph r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shllv.ph r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t2 = newTemp(Ity_I32);
@@ -8999,7 +9009,7 @@
                      break;
                   }
                   case 0xB: {  /* SHRAV.PH */
-                     DIP("shrav.ph r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shrav.ph r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -9027,7 +9037,7 @@
                      break;
                   }
                   case 0xC: {  /* SHLL_S.PH */
-                     DIP("shll_s.ph r%d, r%d, %d", rd, rt, rs);
+                     DIP("shll_s.ph r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -9210,7 +9220,7 @@
                      break;
                   }
                   case 0xD: {  /* SHRA_R.PH */
-                     DIP("shra.ph r%d, r%d, %d", rd, rt, rs);
+                     DIP("shra.ph r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -9242,7 +9252,7 @@
                      break;
                   }
                   case 0xE: {  /* SHLLV_S.PH */
-                     DIP("shllv_s.ph r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shllv_s.ph r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t2 = newTemp(Ity_I32);
@@ -9381,7 +9391,7 @@
                      break;
                   }
                   case 0xF: {  /* SHRAV_R.PH */
-                     DIP("shrav_r.ph r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shrav_r.ph r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -9425,7 +9435,7 @@
                      break;
                   }
                   case 0x14: {  /* SHLL_S.W */
-                     DIP("shll_s.w r%d, r%d, %d", rd, rt, rs);
+                     DIP("shll_s.w r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -9505,7 +9515,7 @@
                      break;
                   }
                   case 0x15: {  /* SHRA_R.W */
-                     DIP("shra_r.w r%d, r%d, %d", rd, rt, rs);
+                     DIP("shra_r.w r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      if (0 == rs) {
                         putIReg(rd, getIReg(rt));
@@ -9524,7 +9534,7 @@
                      break;
                   }
                   case 0x16: {  /* SHLLV_S.W */
-                     DIP("shllv_s.w r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shllv_s.w r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -9598,7 +9608,7 @@
                      break;
                   }
                   case 0x17: {  /* SHRAV_R.W */
-                     DIP("shrav_r.w r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shrav_r.w r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -9622,7 +9632,7 @@
                      break;
                   }
                   case 0x19: {  /* SHRL.PH */
-                     DIP("shrl.ph r%d, r%d, %d", rd, rt, rs);
+                     DIP("shrl.ph r%u, r%u, %u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -9640,7 +9650,7 @@
                      break;
                   }
                   case 0x1B: {  /* SHRLV.PH */
-                     DIP("shrlv.ph r%d, r%d, r%d", rd, rt, rs);
+                     DIP("shrlv.ph r%u, r%u, r%u", rd, rt, rs);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I1);
@@ -9680,7 +9690,7 @@
             case 0x18: {  /* ADDUH.QB/MUL.PH */
                switch(sa) {
                   case 0x00: {  /* ADDUH.QB */
-                     DIP("adduh.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("adduh.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
 
@@ -9690,7 +9700,7 @@
                      break;
                   }
                   case 0x1: {  /* SUBUH.QB */
-                     DIP("subuh.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subuh.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
 
@@ -9700,7 +9710,7 @@
                      break;
                   }
                   case 0x02: {  /* ADDUH_R.QB */
-                     DIP("adduh_r.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("adduh_r.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -9789,7 +9799,7 @@
                      break;
                   }
                   case 0x3: {  /* SUBUH_R.QB */
-                     DIP("subuh_r.qb r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subuh_r.qb r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I32);
                      t2 = newTemp(Ity_I32);
@@ -9877,7 +9887,7 @@
                      break;
                   }
                   case 0x8: {  /* ADDQH.PH */
-                     DIP("addqh.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addqh.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I16);
@@ -9914,7 +9924,7 @@
                      break;
                   }
                   case 0x9: {  /* SUBQH.PH */
-                     DIP("subqh.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subqh.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
 
                      putIReg(rd, binop(Iop_HSub16Sx2,
@@ -9922,7 +9932,7 @@
                      break;
                   }
                   case 0xA: {/* ADDQH_R.PH */
-                     DIP("addqh_r.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addqh_r.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I16);
@@ -9964,7 +9974,7 @@
                      break;
                   }
                   case 0xB: {  /* SUBQH_R.PH */
-                     DIP("subqh_r.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subqh_r.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I16);
@@ -10006,7 +10016,7 @@
                      break;
                   }
                   case 0xC: {  /* MUL.PH */
-                     DIP("mul.ph r%d, r%d, r%d", rd, rs, rt);
+                     DIP("mul.ph r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -10067,7 +10077,7 @@
                      break;
                   }
                   case 0xE: {  /* MUL_S.PH */
-                     DIP("mul_s.ph r%d r%d, r%d", rd, rs, rt);
+                     DIP("mul_s.ph r%u r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I32);
@@ -10157,7 +10167,7 @@
                      break;
                   }
                   case 0x10: {  /* ADDQH.W */
-                     DIP("addqh.w r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addqh.w r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -10173,7 +10183,7 @@
                      break;
                   }
                   case 0x11: {  /* SUBQH.W */
-                     DIP("subqh.w r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subqh.w r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -10189,7 +10199,7 @@
                      break;
                   }
                   case 0x12: {  /* ADDQH_R.W */
-                     DIP("addqh_r.w r%d, r%d, r%d", rd, rs, rt);
+                     DIP("addqh_r.w r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -10209,7 +10219,7 @@
                      break;
                   }
                   case 0x13: {  /* SUBQH_R.W */
-                     DIP("subqh_r.w r%d, r%d, r%d", rd, rs, rt);
+                     DIP("subqh_r.w r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -10229,7 +10239,7 @@
                      break;
                   }
                   case 0x16: {  /* MULQ_S.W */
-                     DIP("mulq_s.w r%d, r%d, r%d", rd, rs, rt);
+                     DIP("mulq_s.w r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I1);
@@ -10261,7 +10271,7 @@
                      break;
                   }
                   case 0x17: {  /* MULQ_RS.W */
-                     DIP("mulq_rs.w r%d, r%d, r%d", rd, rs, rt);
+                     DIP("mulq_rs.w r%u, r%u, r%u", rd, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I1);
@@ -10302,7 +10312,7 @@
             case 0x30: {  /* DPAQ.W.PH */
                switch(sa) {
                   case 0x0: {  /* DPA.W.PH */
-                     DIP("dpa.w.ph ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpa.w.ph ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I64);
@@ -10331,7 +10341,7 @@
                      break;
                   }
                   case 0x1: {  /* DPS.W.PH */
-                     DIP("dps.w.ph ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dps.w.ph ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I64);
@@ -10360,7 +10370,7 @@
                      break;
                   }
                   case 0x2: {  /* MULSA.W.PH */
-                     DIP("mulsa.w.ph ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("mulsa.w.ph ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -10386,7 +10396,7 @@
                      break;
                   }
                   case 0x3: {  /* DPAU.H.QBL */
-                     DIP("dpau.h.qbl ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpau.h.qbl ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -10420,7 +10430,7 @@
                      break;
                   }
                   case 0x4: {  /* DPAQ_S.W.PH */
-                     DIP("dpaq_s.w.ph ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpaq_s.w.ph ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -10513,7 +10523,7 @@
                      break;
                   }
                   case 0x5: {  /* DPSQ_S.W.PH */
-                     DIP("dpsq_s.w.ph ac%d r%d, r%d", ac, rs, rt);
+                     DIP("dpsq_s.w.ph ac%u r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -10607,7 +10617,7 @@
                      break;
                   }
                   case 0x6: {  /* MULSAQ_S.W.PH */
-                     DIP("mulsaq_s.w.ph ac%d r%d, r%d", ac, rs, rt);
+                     DIP("mulsaq_s.w.ph ac%u r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I32);
@@ -10711,7 +10721,7 @@
                      break;
                   }
                   case 0x7: {  /* DPAU.H.QBR */
-                     DIP("dpau.h.qbr ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpau.h.qbr ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -10741,7 +10751,7 @@
                      break;
                   }
                   case 0x8: {  /* DPAX.W.PH */
-                     DIP("dpax.w.ph ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpax.w.ph ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -10769,7 +10779,7 @@
                      break;
                   }
                   case 0x9: {  /* DPSX.W.PH */
-                     DIP("dpsx.w.ph ac%d r%d, r%d", ac, rs, rt);
+                     DIP("dpsx.w.ph ac%u r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I64);
@@ -10798,7 +10808,7 @@
                      break;
                   }
                   case 0xB: {  /* DPSU.H.QBL */
-                     DIP("dpsu.h.qbl ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpsu.h.qbl ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I32);
@@ -10831,7 +10841,7 @@
                      break;
                   }
                   case 0xC: {  /* DPAQ_SA.L.W */
-                     DIP("dpaq_sa.l.w ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpaq_sa.l.w ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -10928,7 +10938,7 @@
                      break;
                   }
                   case 0xD: {  /* DPSQ_SA.L.W */
-                     DIP("dpsq_sa.l.w ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpsq_sa.l.w ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -11027,7 +11037,7 @@
                      break;
                   }
                   case 0xF: {  /* DPSU.H.QBR */
-                     DIP("dpsu.h.qbr ac%d r%d, r%d", ac, rs, rt);
+                     DIP("dpsu.h.qbr ac%u r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
 
                      t0 = newTemp(Ity_I32);
@@ -11059,7 +11069,7 @@
                      break;
                   }
                   case 0x10: {  /* MAQ_SA.W.PHL */
-                     DIP("maq_sa.w.phl ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("maq_sa.w.phl ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -11149,7 +11159,7 @@
                      break;
                   }
                   case 0x12: {  /* MAQ_SA.W.PHR */
-                     DIP("maq_sa.w.phr ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("maq_sa.w.phr ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -11239,7 +11249,7 @@
                      break;
                   }
                   case 0x14: {  /* MAQ_S.W.PHL */
-                     DIP("maq_s.w.phl ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("maq_s.w.phl ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -11296,7 +11306,7 @@
                      break;
                   }
                   case 0x16: {  /* MAQ_S.W.PHR */
-                     DIP("maq_s.w.phr ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("maq_s.w.phr ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_I32);
@@ -11353,7 +11363,7 @@
                      break;
                   }
                   case 0x18: {  /* DPAQX_S.W.PH */
-                     DIP("dpaqx_s.w.ph ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpaqx_s.w.ph ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -11445,7 +11455,7 @@
                      break;
                   }
                   case 0x19: {  /* DPSQX_S.W.PH */
-                     DIP("dpsqx_s.w.ph ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpsqx_s.w.ph ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -11539,7 +11549,7 @@
                      break;
                   }
                   case 0x1A: {  /* DPAQX_SA.W.PH */
-                     DIP("dpaqx_sa.w.ph ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpaqx_sa.w.ph ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -11705,7 +11715,7 @@
                      break;
                   }
                   case 0x1B: {  /* DPSQX_SA.W.PH */
-                     DIP("dpsqx_sa.w.ph ac%d, r%d, r%d", ac, rs, rt);
+                     DIP("dpsqx_sa.w.ph ac%u, r%u, r%u", ac, rs, rt);
                      vassert(!mode64);
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I64);
@@ -11878,7 +11888,7 @@
             case 0x31: {  /* APPEND */
                switch(sa) {
                   case 0x0: {  /* APPEND */
-                     DIP("append r%d, r%d, %d", rt, rs, rd);
+                     DIP("append r%u, r%u, %u", rt, rs, rd);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I32);
                      t2 = newTemp(Ity_I32);
@@ -11912,7 +11922,7 @@
                      break;
                   }
                   case 0x1: {  /* PREPEND */
-                     DIP("prepend r%d, r%d, %d", rt, rs, rd);
+                     DIP("prepend r%u, r%u, %u", rt, rs, rd);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I32);
                      t2 = newTemp(Ity_I32);
@@ -11957,7 +11967,7 @@
                      break;
                   }
                   case 0x10: {  /* BALIGN */
-                     DIP("balign r%d, r%d, %d", rt, rs, rd);
+                     DIP("balign r%u, r%u, %u", rt, rs, rd);
                      vassert(!mode64);
                      t1 = newTemp(Ity_I32);
                      t2 = newTemp(Ity_I32);
@@ -12051,7 +12061,7 @@
 
    const UChar *code = guest_code + delta;
    cins = getUInt(code);
-   DIP("\t0x%lx:\t0x%08x\t", (long)guest_PC_curr_instr, cins);
+   DIP("\t0x%llx:\t0x%08x\t", (Addr64)guest_PC_curr_instr, cins);
 
    if (delta != 0) {
       if (branch_or_jump(guest_code + delta - 4)) {
@@ -12217,7 +12227,7 @@
 
    case 0x11: {  /* COP1 */
       if (fmt == 0x3 && fd == 0 && function == 0) {  /* MFHC1 */
-         DIP("mfhc1 r%d, f%d", rt, fs);
+         DIP("mfhc1 r%u, f%u", rt, fs);
          if (fp_mode64) {
             t0 = newTemp(Ity_I64);
             t1 = newTemp(Ity_I32);
@@ -12229,7 +12239,7 @@
          }
          break;
       } else if (fmt == 0x7 && fd == 0 && function == 0) {  /* MTHC1 */
-         DIP("mthc1 r%d, f%d", rt, fs);
+         DIP("mthc1 r%u, f%u", rt, fs);
          if (fp_mode64) {
             t0 = newTemp(Ity_I64);
             assign(t0, binop(Iop_32HLto64, getIReg(rt),
@@ -12260,23 +12270,23 @@
 
          if (tf == 1 && nd == 0) {
             /* branch on true */
-            DIP("bc1t %d, %d", bc1_cc, imm);
+            DIP("bc1t %u, %u", bc1_cc, imm);
             assign(t3, binop(Iop_CmpEQ32, mkU32(1), mkexpr(t2)));
             dis_branch(False, mkexpr(t3), imm, &bstmt);
             break;
          } else if (tf == 0 && nd == 0) {
             /* branch on false */
-            DIP("bc1f %d, %d", bc1_cc, imm);
+            DIP("bc1f %u, %u", bc1_cc, imm);
             assign(t3, binop(Iop_CmpEQ32, mkU32(0), mkexpr(t2)));
             dis_branch(False, mkexpr(t3), imm, &bstmt);
             break;
          } else if (nd == 1 && tf == 0) {
-            DIP("bc1fl %d, %d", bc1_cc, imm);
+            DIP("bc1fl %u, %u", bc1_cc, imm);
             lastn = dis_branch_likely(binop(Iop_CmpNE32, mkexpr(t2),
                                             mkU32(0x0)), imm);
             break;
          } else if (nd == 1 && tf == 1) {
-            DIP("bc1tl %d, %d", bc1_cc, imm);
+            DIP("bc1tl %u, %u", bc1_cc, imm);
             lastn = dis_branch_likely(binop(Iop_CmpEQ32, mkexpr(t2),
                                             mkU32(0x0)), imm);
             break;
@@ -12305,12 +12315,12 @@
             case 0x5:  /* abs.fmt */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("abs.s f%d, f%d", fd, fs);
+                     DIP("abs.s f%u, f%u", fd, fs);
                      putFReg(fd, mkWidenFromF32(tyF, unop(Iop_AbsF32,
                                  getLoFromF64(tyF, getFReg(fs)))));
                      break;
                   case 0x11:  /* D  */
-                     DIP("abs.d f%d, f%d", fd, fs);
+                     DIP("abs.d f%u, f%u", fd, fs);
                      putDReg(fd, unop(Iop_AbsF64, getDReg(fs)));
                      break;
                   default:
@@ -12321,14 +12331,14 @@
             case 0x02:  /* MUL.fmt */
                switch (fmt) {
                   case 0x11: {  /* D */
-                     DIP("mul.d f%d, f%d, f%d", fd, fs, ft);
+                     DIP("mul.d f%u, f%u, f%u", fd, fs, ft);
                      IRExpr *rm = get_IR_roundingmode();
                      putDReg(fd, triop(Iop_MulF64, rm, getDReg(fs),
                                        getDReg(ft)));
                      break;
                   }
                   case 0x10: {  /* S */
-                     DIP("mul.s f%d, f%d, f%d", fd, fs, ft);
+                     DIP("mul.s f%u, f%u, f%u", fd, fs, ft);
                      IRExpr *rm = get_IR_roundingmode();
                      putFReg(fd, mkWidenFromF32(tyF, triop(Iop_MulF32, rm,
                                  getLoFromF64(tyF, getFReg(fs)),
@@ -12343,14 +12353,14 @@
             case 0x03:  /* DIV.fmt */
                switch (fmt) {
                   case 0x11: {  /* D */
-                     DIP("div.d f%d, f%d, f%d", fd, fs, ft);
+                     DIP("div.d f%u, f%u, f%u", fd, fs, ft);
                      IRExpr *rm = get_IR_roundingmode();
                      putDReg(fd, triop(Iop_DivF64, rm, getDReg(fs),
                                  getDReg(ft)));
                      break;
                   }
                   case 0x10: {  /* S */
-                     DIP("div.s f%d, f%d, f%d", fd, fs, ft);
+                     DIP("div.s f%u, f%u, f%u", fd, fs, ft);
                      calculateFCSR(fs, ft, DIVS, False, 2);
                      IRExpr *rm = get_IR_roundingmode();
                      putFReg(fd, mkWidenFromF32(tyF, triop(Iop_DivF32, rm,
@@ -12366,7 +12376,7 @@
             case 0x01:  /* SUB.fmt */
                switch (fmt) {
                   case 0x11: {  /* D */
-                     DIP("sub.d f%d, f%d, f%d", fd, fs, ft);
+                     DIP("sub.d f%u, f%u, f%u", fd, fs, ft);
                      calculateFCSR(fs, ft, SUBD, False, 2);
                      IRExpr *rm = get_IR_roundingmode();
                      putDReg(fd, triop(Iop_SubF64, rm, getDReg(fs),
@@ -12374,7 +12384,7 @@
                      break;
                   }
                   case 0x10: {  /* S */
-                     DIP("sub.s f%d, f%d, f%d", fd, fs, ft);
+                     DIP("sub.s f%u, f%u, f%u", fd, fs, ft);
                      calculateFCSR(fs, ft, SUBS, True, 2);
                      IRExpr *rm = get_IR_roundingmode();
                      putFReg(fd, mkWidenFromF32(tyF, triop(Iop_SubF32, rm,
@@ -12390,7 +12400,7 @@
             case 0x06:  /* MOV.fmt */
                switch (fmt) {
                   case 0x11:  /* D */
-                     DIP("mov.d f%d, f%d", fd, fs);
+                     DIP("mov.d f%u, f%u", fd, fs);
                      if (fp_mode64) {
                         putDReg(fd, getDReg(fs));
                      } else {
@@ -12399,7 +12409,7 @@
                      }
                      break;
                   case 0x10:  /* S */
-                     DIP("mov.s f%d, f%d", fd, fs);
+                     DIP("mov.s f%u, f%u", fd, fs);
                      putFReg(fd, getFReg(fs));
                      break;
                   default:
@@ -12410,12 +12420,12 @@
             case 0x7:  /* neg.fmt */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("neg.s f%d, f%d", fd, fs);
+                     DIP("neg.s f%u, f%u", fd, fs);
                      putFReg(fd, mkWidenFromF32(tyF, unop(Iop_NegF32,
                                  getLoFromF64(tyF, getFReg(fs)))));
                      break;
                   case 0x11:  /* D */
-                     DIP("neg.d f%d, f%d", fd, fs);
+                     DIP("neg.d f%u, f%u", fd, fs);
                      putDReg(fd, unop(Iop_NegF64, getDReg(fs)));
                      break;
                   default:
@@ -12426,7 +12436,7 @@
             case 0x08:  /* ROUND.L.fmt */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("round.l.s f%d, f%d", fd, fs);
+                     DIP("round.l.s f%u, f%u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, ROUNDLS, True, 1);
                         t0 = newTemp(Ity_I64);
@@ -12440,7 +12450,7 @@
                      }
                      break;
                   case 0x11:  /* D */
-                     DIP("round.l.d f%d, f%d", fd, fs);
+                     DIP("round.l.d f%u, f%u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, ROUNDLD, False, 1);
                         putDReg(fd, binop(Iop_RoundF64toInt, mkU32(0x0),
@@ -12458,7 +12468,7 @@
             case 0x09:  /* TRUNC.L.fmt */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("trunc.l.s f%d, f%d", fd, fs);
+                     DIP("trunc.l.s f%u, f%u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, TRUNCLS, True, 1);
                         t0 = newTemp(Ity_I64);
@@ -12471,7 +12481,7 @@
                      }
                      break;
                   case 0x11:  /* D */
-                     DIP("trunc.l.d f%d, f%d", fd, fs);
+                     DIP("trunc.l.d f%u, f%u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, TRUNCLD, False, 1);
                         putDReg(fd, binop(Iop_RoundF64toInt, mkU32(0x3),
@@ -12488,7 +12498,7 @@
             case 0x15:  /* RECIP.fmt */
                switch (fmt) {
                   case 0x10: {  /* S */
-                     DIP("recip.s f%d, f%d", fd, fs);
+                     DIP("recip.s f%u, f%u", fd, fs);
                      IRExpr *rm = get_IR_roundingmode();
                      putFReg(fd, mkWidenFromF32(tyF, triop(Iop_DivF32,
                                  rm, unop(Iop_ReinterpI32asF32,
@@ -12497,7 +12507,7 @@
                      break;
                   }
                   case 0x11: {  /* D */
-                     DIP("recip.d f%d, f%d", fd, fs);
+                     DIP("recip.d f%u, f%u", fd, fs);
                      IRExpr *rm = get_IR_roundingmode();
                      /* putDReg(fd, 1.0/getDreg(fs)); */
                      putDReg(fd, triop(Iop_DivF64, rm,
@@ -12514,7 +12524,7 @@
             case 0x13:  /* MOVN.fmt */
                switch (fmt) {
                case 0x10:  /* S */
-                  DIP("movn.s f%d, f%d, r%d", fd, fs, rt);
+                  DIP("movn.s f%u, f%u, r%u", fd, fs, rt);
                   t1 = newTemp(Ity_F64);
                   t2 = newTemp(Ity_F64);
                   t3 = newTemp(Ity_I1);
@@ -12553,7 +12563,7 @@
                                        mkexpr(t4)));
                   break;
                case 0x11:  /* D */
-                  DIP("movn.d f%d, f%d, r%d", fd, fs, rt);
+                  DIP("movn.d f%u, f%u, r%u", fd, fs, rt);
 
                   t3 = newTemp(Ity_I1);
                   t4 = newTemp(Ity_F64);
@@ -12573,7 +12583,7 @@
             case 0x12:  /* MOVZ.fmt */
                switch (fmt) {
                case 0x10:  /* S */
-                  DIP("movz.s f%d, f%d, r%d", fd, fs, rt);
+                  DIP("movz.s f%u, f%u, r%u", fd, fs, rt);
 
                   t1 = newTemp(Ity_F64);
                   t2 = newTemp(Ity_F64);
@@ -12610,7 +12620,7 @@
 
                   break;
                case 0x11:  /* D */
-                  DIP("movz.d f%d, f%d, r%d", fd, fs, rt);
+                  DIP("movz.d f%u, f%u, r%u", fd, fs, rt);
                   t3 = newTemp(Ity_I1);
                   t4 = newTemp(Ity_F64);
                   if (mode64)
@@ -12630,7 +12640,7 @@
                   UInt mov_cc = get_mov_cc(cins);
                   switch (fmt) {  /* MOVCF = 010001 */
                   case 0x11:  /* D */
-                     DIP("movt.d f%d, f%d, %d", fd, fs, mov_cc);
+                     DIP("movt.d f%u, f%u, %u", fd, fs, mov_cc);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I32);
                      t3 = newTemp(Ity_I1);
@@ -12654,7 +12664,7 @@
                      putDReg(fd, mkexpr(t4));
                      break;
                   case 0x10:  /* S */
-                     DIP("movt.s f%d, f%d, %d", fd, fs, mov_cc);
+                     DIP("movt.s f%u, f%u, %u", fd, fs, mov_cc);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I32);
                      t3 = newTemp(Ity_I1);
@@ -12711,7 +12721,7 @@
                   switch (fmt)  /* MOVCF = 010001 */
                   {
                   case 0x11:  /* D */
-                     DIP("movf.d f%d, f%d, %d", fd, fs, mov_cc);
+                     DIP("movf.d f%u, f%u, %u", fd, fs, mov_cc);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I32);
                      t3 = newTemp(Ity_I1);
@@ -12735,7 +12745,7 @@
                      putDReg(fd, mkexpr(t4));
                      break;
                   case 0x10:  /* S */
-                     DIP("movf.s f%d, f%d, %d", fd, fs, mov_cc);
+                     DIP("movf.s f%u, f%u, %u", fd, fs, mov_cc);
                      t1 = newTemp(Ity_I1);
                      t2 = newTemp(Ity_I32);
                      t3 = newTemp(Ity_I1);
@@ -12793,7 +12803,7 @@
             case 0x0:  /* add.fmt */
                switch (fmt) {
                case 0x10: {  /* S */
-                  DIP("add.s f%d, f%d, f%d", fd, fs, ft);
+                  DIP("add.s f%u, f%u, f%u", fd, fs, ft);
                   calculateFCSR(fs, ft, ADDS, True, 2);
                   IRExpr *rm = get_IR_roundingmode();
                   putFReg(fd, mkWidenFromF32(tyF, triop(Iop_AddF32, rm,
@@ -12802,7 +12812,7 @@
                   break;
                }
                case 0x11: {  /* D */
-                  DIP("add.d f%d, f%d, f%d", fd, fs, ft);
+                  DIP("add.d f%u, f%u, f%u", fd, fs, ft);
                   calculateFCSR(fs, ft, ADDD, False, 2);
                   IRExpr *rm = get_IR_roundingmode();
                   putDReg(fd, triop(Iop_AddF64, rm, getDReg(fs), getDReg(ft)));
@@ -12810,7 +12820,7 @@
                }
 
                case 0x4:  /* MTC1 (Move Word to Floating Point) */
-                  DIP("mtc1 r%d, f%d", rt, fs);
+                  DIP("mtc1 r%u, f%u", rt, fs);
                   if (fp_mode64) {
                      t0 = newTemp(Ity_I32);
                      t1 = newTemp(Ity_F32);
@@ -12823,13 +12833,13 @@
                   break;
 
                case 0x5:  /* Doubleword Move to Floating Point DMTC1; MIPS64 */
-                  DIP("dmtc1 r%d, f%d", rt, fs);
+                  DIP("dmtc1 r%u, f%u", rt, fs);
                   vassert(mode64);
                   putFReg(fs, unop(Iop_ReinterpI64asF64, getIReg(rt)));
                   break;
 
                case 0x0:  /* MFC1 */
-                  DIP("mfc1 r%d, f%d", rt, fs);
+                  DIP("mfc1 r%u, f%u", rt, fs);
                   if (fp_mode64) {
                      t0 = newTemp(Ity_I64);
                      t1 = newTemp(Ity_I32);
@@ -12842,12 +12852,12 @@
 
                case 0x1:  /* Doubleword Move from Floating Point DMFC1;
                              MIPS64 */
-                  DIP("dmfc1 r%d, f%d", rt, fs);
+                  DIP("dmfc1 r%u, f%u", rt, fs);
                   putIReg(rt, unop(Iop_ReinterpF64asI64, getFReg(fs)));
                   break;
 
                case 0x6:  /* CTC1 */
-                  DIP("ctc1 r%d, f%d", rt, fs);
+                  DIP("ctc1 r%u, f%u", rt, fs);
                   t0 = newTemp(Ity_I32);
                   t1 = newTemp(Ity_I32);
                   t2 = newTemp(Ity_I32);
@@ -12898,7 +12908,7 @@
                   }
                   break;
                case 0x2:  /* CFC1 */
-                  DIP("cfc1 r%d, f%d", rt, fs);
+                  DIP("cfc1 r%u, f%u", rt, fs);
                   t0 = newTemp(Ity_I32);
                   t1 = newTemp(Ity_I32);
                   t2 = newTemp(Ity_I32);
@@ -12952,7 +12962,7 @@
             case 0x21:  /* CVT.D */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("cvt.d.s f%d, f%d", fd, fs);
+                     DIP("cvt.d.s f%u, f%u", fd, fs);
                      calculateFCSR(fs, 0, CVTDS, True, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I64);
@@ -12972,7 +12982,7 @@
                      break;
 
                   case 0x14:
-                     DIP("cvt.d.w %d, %d", fd, fs);
+                     DIP("cvt.d.w %u, %u", fd, fs);
                      calculateFCSR(fs, 0, CVTDW, True, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I64);
@@ -12994,7 +13004,7 @@
 
                   case 0x15: {  /* L */
                      if (fp_mode64) {
-                        DIP("cvt.d.l %d, %d", fd, fs);
+                        DIP("cvt.d.l %u, %u", fd, fs);
                         calculateFCSR(fs, 0, CVTDL, False, 1);
                         t0 = newTemp(Ity_I64);
                         assign(t0, unop(Iop_ReinterpF64asI64, getFReg(fs)));
@@ -13013,7 +13023,7 @@
             case 0x20:  /* cvt.s */
                switch (fmt) {
                   case 0x14:  /* W */
-                     DIP("cvt.s.w %d, %d", fd, fs);
+                     DIP("cvt.s.w %u, %u", fd, fs);
                      calculateFCSR(fs, 0, CVTSW, True, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I64);
@@ -13035,7 +13045,7 @@
                      break;
 
                   case 0x11:  /* D */
-                     DIP("cvt.s.d %d, %d", fd, fs);
+                     DIP("cvt.s.d %u, %u", fd, fs);
                      calculateFCSR(fs, 0, CVTSD, False, 1);
                      t0 = newTemp(Ity_F32);
                      assign(t0, binop(Iop_F64toF32, get_IR_roundingmode(),
@@ -13044,7 +13054,7 @@
                      break;
 
                   case 0x15:  /* L */
-                     DIP("cvt.s.l %d, %d", fd, fs);
+                     DIP("cvt.s.l %u, %u", fd, fs);
                      calculateFCSR(fs, 0, CVTSL, False, 1);
                      t0 = newTemp(Ity_I64);
                      assign(t0, unop(Iop_ReinterpF64asI64, getFReg(fs)));
@@ -13061,7 +13071,7 @@
             case 0x24:  /* cvt.w */
                switch (fmt) {
                case 0x10:  /* S */
-                  DIP("cvt.w.s %d, %d", fd, fs);
+                  DIP("cvt.w.s %u, %u", fd, fs);
                   calculateFCSR(fs, 0, CVTWS, True, 1);
                   putFReg(fd,
                           mkWidenFromF32(tyF,
@@ -13072,7 +13082,7 @@
                   break;
 
                case 0x11:
-                  DIP("cvt.w.d %d, %d", fd, fs);
+                  DIP("cvt.w.d %u, %u", fd, fs);
                   calculateFCSR(fs, 0, CVTWD, False, 1);
                   t0 = newTemp(Ity_I32);
                   t1 = newTemp(Ity_F32);
@@ -13091,7 +13101,7 @@
             case 0x25:  /* cvt.l */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("cvt.l.s %d, %d", fd, fs);
+                     DIP("cvt.l.s %u, %u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, CVTLS, True, 1);
                         t0 = newTemp(Ity_I64);
@@ -13106,7 +13116,7 @@
                      break;
 
                   case 0x11: {  /* D */
-                     DIP("cvt.l.d %d, %d", fd, fs);
+                     DIP("cvt.l.d %u, %u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, CVTLD, False, 1);
                         putDReg(fd, binop(Iop_RoundF64toInt,
@@ -13125,7 +13135,7 @@
             case 0x0B:  /* FLOOR.L.fmt */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("floor.l.s %d, %d", fd, fs);
+                     DIP("floor.l.s %u, %u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, FLOORLS, True, 1);
                         t0 = newTemp(Ity_I64);
@@ -13140,7 +13150,7 @@
                      break;
 
                   case 0x11:  /* D */
-                     DIP("floor.l.d %d, %d", fd, fs);
+                     DIP("floor.l.d %u, %u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, FLOORLD, False, 1);
                         putDReg(fd, binop(Iop_RoundF64toInt, mkU32(0x1),
@@ -13157,7 +13167,7 @@
             case 0x0C:  /* ROUND.W.fmt */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("round.w.s f%d, f%d", fd, fs);
+                     DIP("round.w.s f%u, f%u", fd, fs);
                      calculateFCSR(fs, 0, ROUNDWS, True, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I64);
@@ -13181,7 +13191,7 @@
                      break;
 
                   case 0x11:  /* D */
-                     DIP("round.w.d f%d, f%d", fd, fs);
+                     DIP("round.w.d f%u, f%u", fd, fs);
                      calculateFCSR(fs, 0, ROUNDWD, False, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I32);
@@ -13207,7 +13217,7 @@
             case 0x0F:  /* FLOOR.W.fmt */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("floor.w.s f%d, f%d", fd, fs);
+                     DIP("floor.w.s f%u, f%u", fd, fs);
                      calculateFCSR(fs, 0, FLOORWS, True, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I64);
@@ -13231,7 +13241,7 @@
                      break;
 
                   case 0x11:  /* D */
-                     DIP("floor.w.d f%d, f%d", fd, fs);
+                     DIP("floor.w.d f%u, f%u", fd, fs);
                      calculateFCSR(fs, 0, FLOORWD, False, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I32);
@@ -13258,7 +13268,7 @@
             case 0x0D:  /* TRUNC.W */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("trunc.w.s %d, %d", fd, fs);
+                     DIP("trunc.w.s %u, %u", fd, fs);
                      calculateFCSR(fs, 0, TRUNCWS, True, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I64);
@@ -13281,7 +13291,7 @@
                                        getFReg(fs)));
                      break;
                   case 0x11:  /* D */
-                     DIP("trunc.w.d %d, %d", fd, fs);
+                     DIP("trunc.w.d %u, %u", fd, fs);
                      calculateFCSR(fs, 0, TRUNCWD, False, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I32);
@@ -13309,7 +13319,7 @@
             case 0x0E:  /* CEIL.W.fmt */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("ceil.w.s %d, %d", fd, fs);
+                     DIP("ceil.w.s %u, %u", fd, fs);
                      calculateFCSR(fs, 0, CEILWS, True, 1);
                      if (fp_mode64) {
                         t0 = newTemp(Ity_I64);
@@ -13333,7 +13343,7 @@
                      break;
 
                   case 0x11:  /* D */
-                     DIP("ceil.w.d %d, %d", fd, fs);
+                     DIP("ceil.w.d %u, %u", fd, fs);
                      calculateFCSR(fs, 0, CEILWD, False, 1);
                      if (!fp_mode64) {
                         t0 = newTemp(Ity_I32);
@@ -13357,7 +13367,7 @@
             case 0x0A:  /* CEIL.L.fmt */
                switch (fmt) {
                   case 0x10:  /* S */
-                     DIP("ceil.l.s %d, %d", fd, fs);
+                     DIP("ceil.l.s %u, %u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, CEILLS, True, 1);
                         t0 = newTemp(Ity_I64);
@@ -13372,7 +13382,7 @@
                      break;
 
                   case 0x11:  /* D */
-                     DIP("ceil.l.d %d, %d", fd, fs);
+                     DIP("ceil.l.d %u, %u", fd, fs);
                      if (fp_mode64) {
                         calculateFCSR(fs, 0, CEILLD, False, 1);
                         putDReg(fd, binop(Iop_RoundF64toInt, mkU32(0x2),
@@ -13391,7 +13401,7 @@
             case 0x16:  /* RSQRT.fmt */
                switch (fmt) {
                   case 0x10: {  /* S */
-                     DIP("rsqrt.s %d, %d", fd, fs);
+                     DIP("rsqrt.s %u, %u", fd, fs);
                      IRExpr *rm = get_IR_roundingmode();
                      putFReg(fd, mkWidenFromF32(tyF, triop(Iop_DivF32, rm,
                                  unop(Iop_ReinterpI32asF32, mkU32(ONE_SINGLE)),
@@ -13400,7 +13410,7 @@
                      break;
                   }
                   case 0x11: {  /* D */
-                     DIP("rsqrt.d %d, %d", fd, fs);
+                     DIP("rsqrt.d %u, %u", fd, fs);
                      IRExpr *rm = get_IR_roundingmode();
                      putDReg(fd, triop(Iop_DivF64, rm,
                                  unop(Iop_ReinterpI64asF64,
@@ -13426,7 +13436,7 @@
       break;  /* COP1 */
    case 0x10:  /* COP0 */
       if (rs == 0) {  /* MFC0 */
-         DIP("mfc0 r%d, r%d, %d", rt, rd, sel);
+         DIP("mfc0 r%u, r%u, %u", rt, rd, sel);
          IRTemp   val  = newTemp(Ity_I32);
          IRExpr** args = mkIRExprVec_3 (IRExpr_BBPTR(), mkU32(rd), mkU32(sel));
          IRDirty *d = unsafeIRDirty_1_N(val,
@@ -13438,7 +13448,7 @@
          putIReg(rt, mkexpr(val));
       } else if (rs == 1) {
          /* Doubleword Move from Coprocessor 0 - DMFC0; MIPS64 */
-         DIP("dmfc0 r%d, r%d, %d", rt, rd, sel);
+         DIP("dmfc0 r%u, r%u, %u", rt, rd, sel);
          IRTemp   val  = newTemp(Ity_I64);
          IRExpr** args = mkIRExprVec_3 (IRExpr_BBPTR(), mkU64(rd), mkU64(sel));
          IRDirty *d = unsafeIRDirty_1_N(val,
@@ -13454,7 +13464,7 @@
 
    case 0x31:  /* LWC1 */
       /* Load Word to Floating Point - LWC1 (MIPS32) */
-      DIP("lwc1 f%d, %d(r%d)", ft, imm, rs);
+      DIP("lwc1 f%u, %u(r%u)", ft, imm, rs);
       if (fp_mode64) {
          t1 = newTemp(Ity_F32);
          t2 = newTemp(Ity_I64);
@@ -13482,7 +13492,7 @@
       break;
 
    case 0x39:  /* SWC1 */
-      DIP("swc1 f%d, %d(r%d)", ft, imm, rs);
+      DIP("swc1 f%u, %u(r%u)", ft, imm, rs);
       if (fp_mode64) {
          t0 = newTemp(Ity_I64);
          t2 = newTemp(Ity_I32);
@@ -13502,26 +13512,26 @@
 
    case 0x35:
       /* Load Doubleword to Floating Point - LDC1 (MIPS32) */
-      DIP("ldc1 f%d, %d(%d)", rt, imm, rs);
+      DIP("ldc1 f%u, %u(%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       putDReg(ft, load(Ity_F64, mkexpr(t1)));
       break;
 
    case 0x3D:
       /* Store Doubleword from Floating Point - SDC1 */
-      DIP("sdc1 f%d, %d(%d)", ft, imm, rs);
+      DIP("sdc1 f%u, %u(%u)", ft, imm, rs);
       LOAD_STORE_PATTERN;
       store(mkexpr(t1), getDReg(ft));
       break;
 
    case 0x23:  /* LW */
-      DIP("lw r%d, %d(r%d)", rt, imm, rs);
+      DIP("lw r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       putIReg(rt, mkWidenFrom32(ty, load(Ity_I32, mkexpr(t1)), True));
       break;
 
    case 0x20:  /* LB */
-      DIP("lb r%d, %d(r%d)", rt, imm, rs);
+      DIP("lb r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       if (mode64)
          putIReg(rt, unop(Iop_8Sto64, load(Ity_I8, mkexpr(t1))));
@@ -13530,7 +13540,7 @@
       break;
 
    case 0x24:  /* LBU */
-      DIP("lbu r%d, %d(r%d)", rt, imm, rs);
+      DIP("lbu r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       if (mode64)
          putIReg(rt, unop(Iop_8Uto64, load(Ity_I8, mkexpr(t1))));
@@ -13539,7 +13549,7 @@
       break;
 
    case 0x21:  /* LH */
-      DIP("lh r%d, %d(r%d)", rt, imm, rs);
+      DIP("lh r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       if (mode64)
          putIReg(rt, unop(Iop_16Sto64, load(Ity_I16, mkexpr(t1))));
@@ -13548,7 +13558,7 @@
       break;
 
    case 0x25:  /* LHU */
-      DIP("lhu r%d, %d(r%d)", rt, imm, rs);
+      DIP("lhu r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       if (mode64)
          putIReg(rt, unop(Iop_16Uto64, load(Ity_I16, mkexpr(t1))));
@@ -13558,7 +13568,7 @@
 
    case 0x0F:  /* LUI */
       p = (imm << 16);
-      DIP("lui r%d, imm: 0x%x", rt, imm);
+      DIP("lui r%u, imm: 0x%x", rt, imm);
       if (mode64)
          putIReg(rt, mkU64(extend_s_32to64(p)));
       else
@@ -13569,7 +13579,7 @@
       switch (function) {
       case 0x0: {  /* LWXC1 */
          /* Load Word  Indexed to Floating Point - LWXC1 (MIPS32r2) */
-         DIP("lwxc1 f%d, r%d(r%d)", fd, rt, rs);
+         DIP("lwxc1 f%u, r%u(r%u)", fd, rt, rs);
          if (fp_mode64) {
             t0 = newTemp(Ity_I64);
             t1 = newTemp(Ity_I32);
@@ -13598,7 +13608,7 @@
          /* Load Doubleword  Indexed to Floating Point
             LDXC1 (MIPS32r2 and MIPS64) */
          if (fp_mode64) {
-            DIP("ldxc1 f%d, r%d(r%d)", fd, rt, rs);
+            DIP("ldxc1 f%u, r%u(r%u)", fd, rt, rs);
             t0 = newTemp(ty);
             assign(t0, binop(mode64 ? Iop_Add64 : Iop_Add32, getIReg(rs),
                              getIReg(rt)));
@@ -13624,7 +13634,7 @@
 
       case 0x5:  /* Load Doubleword Indexed Unaligned to Floating Point - LUXC1;
                     MIPS32r2 */
-         DIP("luxc1 f%d, r%d(r%d)", fd, rt, rs);
+         DIP("luxc1 f%u, r%u(r%u)", fd, rt, rs);
          t0 = newTemp(Ity_I64);
          t1 = newTemp(Ity_I64);
          assign(t0, binop(Iop_Add64, getIReg(rs), getIReg(rt)));
@@ -13634,7 +13644,7 @@
          break;
 
       case 0x8: {  /* Store Word Indexed from Floating Point - SWXC1 */
-         DIP("swxc1 f%d, r%d(r%d)", ft, rt, rs);
+         DIP("swxc1 f%u, r%u(r%u)", ft, rt, rs);
          if (fp_mode64) {
             t0 = newTemp(ty);
             assign(t0, binop(mode64 ? Iop_Add64 : Iop_Add32, getIReg(rs),
@@ -13650,7 +13660,7 @@
          break;
       }
       case 0x9: {  /* Store Doubleword Indexed from Floating Point - SDXC1 */
-         DIP("sdc1 f%d, %d(%d)", ft, imm, rs);
+         DIP("sdc1 f%u, %u(%u)", ft, imm, rs);
          if (fp_mode64) {
             t0 = newTemp(ty);
             assign(t0, binop(mode64 ? Iop_Add64 : Iop_Add32, getIReg(rs),
@@ -13675,7 +13685,7 @@
       }
       case 0xD:  /* Store Doubleword Indexed Unaligned from Floating Point -
                     SUXC1; MIPS64 MIPS32r2 */
-         DIP("suxc1 f%d, r%d(r%d)", fd, rt, rs);
+         DIP("suxc1 f%u, r%u(r%u)", fd, rt, rs);
          t0 = newTemp(Ity_I64);
          t1 = newTemp(Ity_I64);
          assign(t0, binop(Iop_Add64, getIReg(rs), getIReg(rt)));
@@ -13688,7 +13698,7 @@
          break;
       }
       case 0x20:  {  /* MADD.S */
-         DIP("madd.s f%d, f%d, f%d, f%d", fd, fmt, fs, ft);
+         DIP("madd.s f%u, f%u, f%u, f%u", fd, fmt, fs, ft);
          IRExpr *rm = get_IR_roundingmode();
          t1 = newTemp(Ity_F32);
          assign(t1, qop(Iop_MAddF32, rm,
@@ -13699,14 +13709,14 @@
          break;  /* MADD.S */
       }
       case 0x21: {  /* MADD.D */
-         DIP("madd.d f%d, f%d, f%d, f%d", fd, fmt, fs, ft);
+         DIP("madd.d f%u, f%u, f%u, f%u", fd, fmt, fs, ft);
          IRExpr *rm = get_IR_roundingmode();
          putDReg(fd, qop(Iop_MAddF64, rm, getDReg(fmt), getDReg(fs),
                          getDReg(ft)));
          break;  /* MADD.D */
       }
       case 0x28: {  /* MSUB.S */
-         DIP("msub.s f%d, f%d, f%d, f%d", fd, fmt, fs, ft);
+         DIP("msub.s f%u, f%u, f%u, f%u", fd, fmt, fs, ft);
          IRExpr *rm = get_IR_roundingmode();
          t1 = newTemp(Ity_F32);
          assign(t1, qop(Iop_MSubF32, rm,
@@ -13717,14 +13727,14 @@
          break;  /* MSUB.S */
       }
       case 0x29: {  /* MSUB.D */
-         DIP("msub.d f%d, f%d, f%d, f%d", fd, fmt, fs, ft);
+         DIP("msub.d f%u, f%u, f%u, f%u", fd, fmt, fs, ft);
          IRExpr *rm = get_IR_roundingmode();
          putDReg(fd, qop(Iop_MSubF64, rm, getDReg(fmt), getDReg(fs),
                          getDReg(ft)));
          break;  /* MSUB.D */
       }
       case 0x30: {  /* NMADD.S */
-         DIP("nmadd.s f%d, f%d, f%d, f%d", fd, fmt, fs, ft);
+         DIP("nmadd.s f%u, f%u, f%u, f%u", fd, fmt, fs, ft);
          IRExpr *rm = get_IR_roundingmode();
          t1 = newTemp(Ity_F32);
          assign(t1, qop(Iop_MAddF32, rm,
@@ -13736,7 +13746,7 @@
          break;  /* NMADD.S */
       }
       case 0x31: {  /* NMADD.D */
-         DIP("nmadd.d f%d, f%d, f%d, f%d", fd, fmt, fs, ft);
+         DIP("nmadd.d f%u, f%u, f%u, f%u", fd, fmt, fs, ft);
          IRExpr *rm = get_IR_roundingmode();
          t1 = newTemp(Ity_F64);
          assign(t1, qop(Iop_MAddF64, rm, getDReg(fmt), getDReg(fs),
@@ -13745,7 +13755,7 @@
          break;  /* NMADD.D */
       }
       case 0x38: {  /* NMSUBB.S */
-         DIP("nmsub.s f%d, f%d, f%d, f%d", fd, fmt, fs, ft);
+         DIP("nmsub.s f%u, f%u, f%u, f%u", fd, fmt, fs, ft);
          IRExpr *rm = get_IR_roundingmode();
          t1 = newTemp(Ity_F32);
          assign(t1, qop(Iop_MSubF32, rm,
@@ -13757,7 +13767,7 @@
          break;  /* NMSUBB.S */
       }
       case 0x39: {  /* NMSUBB.D */
-         DIP("nmsub.d f%d, f%d, f%d, f%d", fd, fmt, fs, ft);
+         DIP("nmsub.d f%u, f%u, f%u, f%u", fd, fmt, fs, ft);
          IRExpr *rm = get_IR_roundingmode();
          t1 = newTemp(Ity_F64);
          assign(t1, qop(Iop_MSubF64, rm, getDReg(fmt), getDReg(fs),
@@ -13772,46 +13782,33 @@
       break;
 
    case 0x22:  /* LWL */
-      DIP("lwl r%d, %d(r%d)", rt, imm, rs);
+      DIP("lwl r%u, %u(r%u)", rt, imm, rs);
       if (mode64) {
          /* t1 = addr */
          t1 = newTemp(Ity_I64);
 #if defined (_MIPSEL)
          assign(t1, binop(Iop_Add64, getIReg(rs), mkU64(extend_s_16to64(imm))));
-         /* t2 = word addr */
-         /* t4 = addr mod 4 */
-         LWX_SWX_PATTERN64;
-
-         /* t3 = word content - shifted */
-         t3 = newTemp(Ity_I32);
-         assign(t3, binop(Iop_Shl32, mkNarrowTo32(ty, load(Ity_I64,
-                          mkexpr(t2))), narrowTo(Ity_I8, binop(Iop_Shl32,
-                    binop(Iop_Sub32, mkU32(0x03), mkexpr(t4)), mkU8(3)))));
-
-         /* rt content - adjusted */
-         t5 = newTemp(Ity_I32);
-         assign(t5, binop(Iop_And32,
-                          mkNarrowTo32(ty, getIReg(rt)),
-                          binop(Iop_Shr32,
-                                mkU32(0x00FFFFFF),
-                                      narrowTo(Ity_I8, binop(Iop_Mul32,
-                                                             mkU32(0x08),
-                                                             mkexpr(t4))))));
-
-         putIReg(rt, mkWidenFrom32(ty, binop(Iop_Or32, mkexpr(t5),
-                                             mkexpr(t3)), True));
 #elif defined (_MIPSEB)
-         assign(t1, binop(Iop_Xor64, mkU64(0x3),
-                binop(Iop_Add64, getIReg(rs), mkU64(extend_s_16to64(imm)))));
+         assign(t1, binop(Iop_Xor64,
+                          mkU64(0x03),
+                          binop(Iop_Add64,
+                                getIReg(rs),
+                                mkU64(extend_s_16to64(imm)))));
+#endif
          /* t2 = word addr */
          /* t4 = addr mod 4 */
          LWX_SWX_PATTERN64;
 
          /* t3 = word content - shifted */
          t3 = newTemp(Ity_I32);
-         assign(t3, binop(Iop_Shl32, unop(Iop_64HIto32, load(Ity_I64,
-                          mkexpr(t2))), narrowTo(Ity_I8, binop(Iop_Shl32,
-                    binop(Iop_Sub32, mkU32(0x03), mkexpr(t4)), mkU8(3)))));
+         assign(t3, binop(Iop_Shl32,
+                          load(Ity_I32, mkexpr(t2)),
+                          narrowTo(Ity_I8,
+                                   binop(Iop_Shl32,
+                                         binop(Iop_Sub32,
+                                               mkU32(0x03),
+                                               mkexpr(t4)),
+                                         mkU8(3)))));
 
          /* rt content - adjusted */
          t5 = newTemp(Ity_I32);
@@ -13825,7 +13822,6 @@
 
          putIReg(rt, mkWidenFrom32(ty, binop(Iop_Or32, mkexpr(t5),
                                              mkexpr(t3)), True));
-#endif
       } else {
          /* t1 = addr */
          t1 = newTemp(Ity_I32);
@@ -13861,40 +13857,29 @@
       break;
 
    case 0x26:  /* LWR */
-      DIP("lwr r%d, %d(r%d)", rt, imm, rs);
+      DIP("lwr r%u, %u(r%u)", rt, imm, rs);
       if (mode64) {
          /* t1 = addr */
          t1 = newTemp(Ity_I64);
 #if defined (_MIPSEL)
          assign(t1, binop(Iop_Add64, getIReg(rs), mkU64(extend_s_16to64(imm))));
-         /* t2 = word addr */
-         /* t4 = addr mod 8 */
-         LWX_SWX_PATTERN64;
-
-         /* t3 = word content - shifted */
-         t3 = newTemp(Ity_I32);
-         assign(t3, binop(Iop_Shr32, mkNarrowTo32(ty, load(Ity_I64,mkexpr(t2))),
-                    narrowTo(Ity_I8, binop(Iop_Shl32, mkexpr(t4), mkU8(3)))));
-
-         /* rt content  - adjusted */
-         t5 = newTemp(Ity_I32);
-         assign(t5, binop(Iop_And32, mkNarrowTo32(ty, getIReg(rt)),
-                unop(Iop_Not32, binop(Iop_Shr32, mkU32(0xFFFFFFFF),
-                narrowTo(Ity_I8, binop(Iop_Shl32, mkexpr(t4), mkU8(0x3)))))));
-
-         putIReg(rt, mkWidenFrom32(ty, binop(Iop_Or32, mkexpr(t5),
-                                       mkexpr(t3)), True));
 #elif defined (_MIPSEB)
-         assign(t1, binop(Iop_Xor64, mkU64(0x3), binop(Iop_Add64, getIReg(rs),
-                          mkU64(extend_s_16to64(imm)))));
+         assign(t1, binop(Iop_Xor64,
+                          mkU64(0x3),
+                          binop(Iop_Add64,
+                                getIReg(rs),
+                                mkU64(extend_s_16to64(imm)))));
+#endif
          /* t2 = word addr */
          /* t4 = addr mod 4 */
          LWX_SWX_PATTERN64;
 
          /* t3 = word content - shifted */
          t3 = newTemp(Ity_I32);
-         assign(t3, binop(Iop_Shr32, unop(Iop_64HIto32, load(Ity_I64,mkexpr(t2))),
-                    narrowTo(Ity_I8, binop(Iop_Shl32, mkexpr(t4), mkU8(3)))));
+         assign(t3, binop(Iop_Shr32,
+                          load(Ity_I32, mkexpr(t2)),
+                          narrowTo(Ity_I8,
+                                   binop(Iop_Shl32, mkexpr(t4), mkU8(0x03)))));
 
          /* rt content  - adjusted */
          t5 = newTemp(Ity_I32);
@@ -13904,7 +13889,6 @@
 
          putIReg(rt, mkWidenFrom32(ty, binop(Iop_Or32, mkexpr(t5),
                                        mkexpr(t3)), True));
-#endif
 
       } else {
          /* t1 = addr */
@@ -13937,13 +13921,13 @@
       break;
 
    case 0x2B:  /* SW */
-      DIP("sw r%d, %d(r%d)", rt, imm, rs);
+      DIP("sw r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       store(mkexpr(t1), mkNarrowTo32(ty, getIReg(rt)));
       break;
 
    case 0x2C: {  /* SDL rt, offset(base) MIPS64 */
-      DIP("sdl r%u, %d(r%u)", rt, (Int) imm, rs);
+      DIP("sdl r%u, %u(r%u)", rt, imm, rs);
       vassert(mode64);
       IRTemp A_byte = newTemp(Ity_I8);
       IRTemp B_byte = newTemp(Ity_I8);
@@ -14068,7 +14052,7 @@
    case 0x2D: {
       /* SDR rt, offset(base) - MIPS64 */
       vassert(mode64);
-      DIP("sdr r%u, %d(r%u)", rt, imm, rs);
+      DIP("sdr r%u, %u(r%u)", rt, imm, rs);
       IRTemp A_byte = newTemp(Ity_I8);
       IRTemp B_byte = newTemp(Ity_I8);
       IRTemp C_byte = newTemp(Ity_I8);
@@ -14189,19 +14173,19 @@
    }
 
    case 0x28:  /* SB */
-      DIP("sb r%d, %d(r%d)", rt, imm, rs);
+      DIP("sb r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       store(mkexpr(t1), narrowTo(Ity_I8, getIReg(rt)));
       break;
 
    case 0x29:  /* SH */
-      DIP("sh r%d, %d(r%d)", rt, imm, rs);
+      DIP("sh r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       store(mkexpr(t1), narrowTo(Ity_I16, getIReg(rt)));
       break;
 
    case 0x2A:  /* SWL */
-      DIP("swl r%d, %d(r%d)", rt, imm, rs);
+      DIP("swl r%u, %u(r%u)", rt, imm, rs);
       if (mode64) {
          IRTemp E_byte = newTemp(Ity_I8);
          IRTemp F_byte = newTemp(Ity_I8);
@@ -14328,7 +14312,7 @@
       break;
 
    case 0x2E:  /* SWR */
-      DIP("swr r%d, %d(r%d)", rt, imm, rs);
+      DIP("swr r%u, %u(r%u)", rt, imm, rs);
       if (mode64) {
          IRTemp E_byte = newTemp(Ity_I8);
          IRTemp F_byte = newTemp(Ity_I8);
@@ -14475,7 +14459,7 @@
          break;
 
          case 0x02: {  /* MUL */
-            DIP("mul r%d, r%d, r%d", rd, rs, rt);
+            DIP("mul r%u, r%u, r%u", rd, rs, rt);
             if (mode64) {
                IRTemp tmpRs32 = newTemp(Ity_I32);
                IRTemp tmpRt32 = newTemp(Ity_I32);
@@ -14493,7 +14477,7 @@
 
          case 0x00: {  /* MADD */
             if (mode64) {
-               DIP("madd r%d, r%d", rs, rt);
+               DIP("madd r%u, r%u", rs, rt);
                t1 = newTemp(Ity_I32);
                t2 = newTemp(Ity_I32);
                t3 = newTemp(Ity_I64);
@@ -14525,7 +14509,7 @@
                      goto decode_failure_dsp;
                   }
                } else {
-                  DIP("madd r%d, r%d", rs, rt);
+                  DIP("madd r%u, r%u", rs, rt);
                   t1 = newTemp(Ity_I32);
                   t2 = newTemp(Ity_I32);
                   t3 = newTemp(Ity_I64);
@@ -14556,7 +14540,7 @@
 
       case 0x01: {  /* MADDU */
          if (mode64) {
-            DIP("maddu r%d, r%d", rs, rt);
+            DIP("maddu r%u, r%u", rs, rt);
             t1 = newTemp(Ity_I32);
             t2 = newTemp(Ity_I32);
             t3 = newTemp(Ity_I64);
@@ -14588,7 +14572,7 @@
                   goto decode_failure_dsp;
                }
             } else {
-               DIP("maddu r%d, r%d", rs, rt);
+               DIP("maddu r%u, r%u", rs, rt);
                t1 = newTemp(Ity_I32);
                t2 = newTemp(Ity_I32);
                t3 = newTemp(Ity_I64);
@@ -14618,7 +14602,7 @@
 
       case 0x04: {  /* MSUB */
          if (mode64) {
-            DIP("msub r%d, r%d", rs, rt);
+            DIP("msub r%u, r%u", rs, rt);
             t1 = newTemp(Ity_I32);
             t2 = newTemp(Ity_I32);
             t3 = newTemp(Ity_I64);
@@ -14650,7 +14634,7 @@
                   goto decode_failure_dsp;
                }
             } else {
-               DIP("msub r%d, r%d", rs, rt);
+               DIP("msub r%u, r%u", rs, rt);
                t1 = newTemp(Ity_I32);
                t2 = newTemp(Ity_I32);
                t3 = newTemp(Ity_I64);
@@ -14684,7 +14668,7 @@
 
       case 0x05: {  /* MSUBU */
          if (mode64) {
-            DIP("msubu r%d, r%d", rs, rt);
+            DIP("msubu r%u, r%u", rs, rt);
             t1 = newTemp(Ity_I32);
             t2 = newTemp(Ity_I32);
             t3 = newTemp(Ity_I64);
@@ -14716,7 +14700,7 @@
                   goto decode_failure_dsp;
                }
             } else {
-               DIP("msubu r%d, r%d", rs, rt);
+               DIP("msubu r%u, r%u", rs, rt);
                t1 = newTemp(Ity_I32);
                t2 = newTemp(Ity_I32);
                t3 = newTemp(Ity_I64);
@@ -14817,7 +14801,7 @@
          break;
 
       case 0x20: {  /* CLZ */
-         DIP("clz r%d, r%d", rd, rs);
+         DIP("clz r%u, r%u", rd, rs);
          if (mode64) {
             IRTemp tmpClz32 = newTemp(Ity_I32);
             IRTemp tmpRs32 = newTemp(Ity_I32);
@@ -14836,7 +14820,7 @@
       }
 
       case 0x21: {  /* CLO */
-         DIP("clo r%d, r%d", rd, rs);
+         DIP("clo r%u, r%u", rd, rs);
          if (mode64) {
             IRTemp tmpClo32 = newTemp(Ity_I32);
             IRTemp tmpRs32 = newTemp(Ity_I32);
@@ -14862,7 +14846,7 @@
       }
 
       case 0x24:  /* Count Leading Zeros in Doubleword - DCLZ; MIPS64 */
-         DIP("dclz r%d, r%d", rd, rs);
+         DIP("dclz r%u, r%u", rd, rs);
          t1 = newTemp(Ity_I1);
          assign(t1, binop(Iop_CmpEQ64, getIReg(rs), mkU64(0)));
          putIReg(rd, IRExpr_ITE(mkexpr(t1),
@@ -14871,7 +14855,7 @@
          break;
 
       case 0x25:  /* Count Leading Ones in Doubleword - DCLO; MIPS64 */
-         DIP("dclo r%d, r%d", rd, rs);
+         DIP("dclo r%u, r%u", rd, rs);
          t1 = newTemp(Ity_I1);
          assign(t1, binop(Iop_CmpEQ64, getIReg(rs),
                                         mkU64(0xffffffffffffffffULL)));
@@ -14896,7 +14880,7 @@
             UInt srcPos = lsb;
             UInt dstSz = msb + 33;
             t1 = newTemp(Ity_I64);
-            DIP("dextm r%u, r%u, %d, %d", rt, rs, lsb, msb + 1);
+            DIP("dextm r%u, r%u, %u, %u", rt, rs, lsb, msb + 1);
 
             UChar lsAmt = 64 - (srcPos + dstSz);  /* left shift amount; */
             UChar rsAmt = 64 - dstSz;  /* right shift amount; */
@@ -14913,7 +14897,7 @@
             size = msb + 1;
             UInt srcPos = lsb + 32;
             UInt dstSz = msb + 1;
-            DIP("dextu r%u, r%u, %d, %d", rt, rs, srcPos, dstSz);
+            DIP("dextu r%u, r%u, %u, %u", rt, rs, srcPos, dstSz);
             t1 = newTemp(Ity_I64);
 
             vassert(srcPos >= 32 && srcPos < 64);
@@ -14951,7 +14935,7 @@
 
             assign(tmpRs, getIReg(rs));
             assign(tmpRt, getIReg(rt));
-            DIP("dinsm r%u, r%u, %d, %d", rt, rs, lsb, msb);
+            DIP("dinsm r%u, r%u, %u, %u", rt, rs, lsb, msb);
 
             UChar lsAmt = dstPos + srcSz - 1;   /* left shift amount; */
             UChar rsAmt = dstPos + srcSz - 1;   /* right shift amount; */
@@ -15003,7 +14987,7 @@
 
             assign(tmpRs, getIReg(rs));
             assign(tmpRt, getIReg(rt));
-            DIP("dinsu r%u, r%u, %d, %d", rt, rs, lsb, msb);
+            DIP("dinsu r%u, r%u, %u, %u", rt, rs, lsb, msb);
 
             UChar lsAmt = 64 - srcSz;  /* left shift amount; */
             UChar rsAmt = 64 - (dstPos + srcSz);  /* right shift amount; */
@@ -15051,7 +15035,7 @@
             msb = get_msb(cins);
             lsb = get_lsb(cins);
             size = msb + 1;
-            DIP("dins r%u, r%u, %d, %d", rt, rs, lsb,
+            DIP("dins r%u, r%u, %u, %u", rt, rs, lsb,
                 msb - lsb + 1);
             UChar lsAmt = 63 - lsb;  /* left shift amount; */
             UChar rsAmt = 63 - lsb;  /* right shift amount; */
@@ -15128,16 +15112,19 @@
                break;
             }
          default:
-            vex_printf("\nop6o10 = %d", lsb);
+            vex_printf("\nop6o10 = %u", lsb);
             goto decode_failure;;
          }
          break;
       case 0x3B: {  /* RDHWR */
-         DIP("rdhwr r%d, r%d", rt, rd);
+         DIP("rdhwr r%u, r%u", rt, rd);
             if (rd == 29) {
                putIReg(rt, getULR());
 #if defined(__mips__) && ((defined(__mips_isa_rev) && __mips_isa_rev >= 2))
-            } else if (rd == 1) {
+            } else if (rd == 1
+                       || (rd == 31
+                           && VEX_MIPS_COMP_ID(archinfo->hwcaps)
+                                                    == VEX_PRID_COMP_CAVIUM)) {
                if (mode64) {
                   IRTemp   val  = newTemp(Ity_I64);
                   IRExpr** args = mkIRExprVec_2 (mkU64(rt), mkU64(rd));
@@ -15168,7 +15155,7 @@
          msb = get_msb(cins);
          lsb = get_lsb(cins);
          size = msb - lsb + 1;
-         DIP("ins size:%d msb:%d lsb:%d", size, msb, lsb);
+         DIP("ins size:%u msb:%u lsb:%u", size, msb, lsb);
 
          vassert(lsb + size <= 32);
          vassert(lsb + size > 0);
@@ -15221,7 +15208,7 @@
          msb = get_msb(cins);
          lsb = get_lsb(cins);
          size = msb + 1;
-         DIP("ext size:%d msb:%d lsb:%d", size, msb, lsb);
+         DIP("ext size:%u msb:%u lsb:%u", size, msb, lsb);
          vassert(lsb + size <= 32);
          vassert(lsb + size > 0);
          /* put size bits from rs at the top of in temporary */
@@ -15243,7 +15230,7 @@
          msb = get_msb(cins);
          lsb = get_lsb(cins);
          size = msb + 1;
-         DIP("dext r%u, r%u, %d, %d", rt, rs, lsb, msb + 1);
+         DIP("dext r%u, r%u, %u, %u", rt, rs, lsb, msb + 1);
          t1 = newTemp(Ity_I64);
          vassert(lsb >= 0 && lsb < 32);
          vassert(size > 0 && size <= 32);
@@ -15260,7 +15247,7 @@
       case 0x20:  /* BSHFL */
          switch (sa) {
             case 0x02:  /* WSBH */
-               DIP("wsbh r%d, r%d", rd, rt);
+               DIP("wsbh r%u, r%u", rd, rt);
                t0 = newTemp(Ity_I32);
                t1 = newTemp(Ity_I32);
                t2 = newTemp(Ity_I32);
@@ -15281,7 +15268,7 @@
                break;
 
             case 0x10:  /* SEB */
-               DIP("seb r%d, r%d", rd, rt);
+               DIP("seb r%u, r%u", rd, rt);
                if (mode64)
                   putIReg(rd, unop(Iop_8Sto64, unop(Iop_64to8, getIReg(rt))));
                else
@@ -15289,7 +15276,7 @@
                break;
 
             case 0x18:  /* SEH */
-               DIP("seh r%d, r%d", rd, rt);
+               DIP("seh r%u, r%u", rd, rt);
                if (mode64)
                   putIReg(rd, unop(Iop_16Sto64, unop(Iop_64to16, getIReg(rt))));
                else
@@ -15509,7 +15496,7 @@
       if (0x3B == function &&
           (VEX_MIPS_COMP_ID(archinfo->hwcaps) == VEX_PRID_COMP_BROADCOM)) {
          /*RDHWR*/
-         DIP("rdhwr r%d, r%d", rt, rd);
+         DIP("rdhwr r%u, r%u", rt, rd);
          if (rd == 29) {
             putIReg(rt, getULR());
          } else
@@ -15525,7 +15512,7 @@
       case 0x1: {
          UInt mov_cc = get_mov_cc(cins);
          if (tf == 0) {  /* MOVF */
-            DIP("movf r%d, r%d, %d", rd, rs, mov_cc);
+            DIP("movf r%u, r%u, %u", rd, rs, mov_cc);
             t1 = newTemp(Ity_I1);
             t2 = newTemp(Ity_I32);
             t3 = newTemp(Ity_I1);
@@ -15544,7 +15531,7 @@
             assign(t3, binop(Iop_CmpEQ32, mkU32(0), mkexpr(t2)));
             putIReg(rd, IRExpr_ITE(mkexpr(t3), getIReg(rs), getIReg(rd)));
          } else if (tf == 1) {  /* MOVT */
-            DIP("movt r%d, r%d, %d", rd, rs, mov_cc);
+            DIP("movt r%u, r%u, %u", rd, rs, mov_cc);
             t1 = newTemp(Ity_I1);
             t2 = newTemp(Ity_I32);
             t3 = newTemp(Ity_I1);
@@ -15566,7 +15553,7 @@
          break;
       }
       case 0x0A: {  /* MOVZ */
-         DIP("movz r%d, r%d, r%d", rd, rs, rt);
+         DIP("movz r%u, r%u, r%u", rd, rs, rt);
          t1 = newTemp(ty);
          t2 = newTemp(ty);
          if (mode64) {
@@ -15589,7 +15576,7 @@
       }
 
       case 0x0B: {  /* MOVN */
-         DIP("movn r%d, r%d, r%d", rd, rs, rt);
+         DIP("movn r%u, r%u, r%u", rd, rs, rt);
          t1 = newTemp(ty);
          t2 = newTemp(ty);
          if (mode64) {
@@ -15625,7 +15612,7 @@
                goto decode_failure_dsp;
             }
          } else {
-            DIP("mult r%d, r%d", rs, rt);
+            DIP("mult r%u, r%u", rs, rt);
             t2 = newTemp(Ity_I64);
 
             assign(t2, binop(Iop_MullS32, mkNarrowTo32(ty, getIReg(rs)),
@@ -15649,7 +15636,7 @@
                goto decode_failure_dsp;
             }
          } else {
-            DIP("multu r%d, r%d", rs, rt);
+            DIP("multu r%u, r%u", rs, rt);
             t2 = newTemp(Ity_I64);
 
             assign(t2, binop(Iop_MullU32, mkNarrowTo32(ty, getIReg(rs)),
@@ -15661,7 +15648,7 @@
          }
       }
       case 0x20: {  /* ADD */
-         DIP("add r%d, r%d, r%d", rd, rs, rt);
+         DIP("add r%u, r%u, r%u", rd, rs, rt);
          IRTemp tmpRs32 = newTemp(Ity_I32);
          IRTemp tmpRt32 = newTemp(Ity_I32);
 
@@ -15705,7 +15692,7 @@
          break;
       }
       case 0x1A:  /* DIV */
-         DIP("div r%d, r%d", rs, rt);
+         DIP("div r%u, r%u", rs, rt);
          if (mode64) {
             t2 = newTemp(Ity_I64);
 
@@ -15727,7 +15714,7 @@
          break;
 
       case 0x1B:  /* DIVU */
-         DIP("divu r%d, r%d", rs, rt);
+         DIP("divu r%u, r%u", rs, rt);
          if (mode64) {
             t2 = newTemp(Ity_I64);
 
@@ -15798,7 +15785,7 @@
             }
             break;
          } else {
-            DIP("mfhi r%d", rd);
+            DIP("mfhi r%u", rd);
             putIReg(rd, getHI());
             break;
          }
@@ -15813,7 +15800,7 @@
             }
             break;
          } else {
-            DIP("mthi r%d", rs);
+            DIP("mthi r%u", rs);
             putHI(getIReg(rs));
             break;
          }
@@ -15828,7 +15815,7 @@
             }
             break;
          } else {
-            DIP("mflo r%d", rd);
+            DIP("mflo r%u", rd);
             putIReg(rd, getLO());
             break;
          }
@@ -15843,14 +15830,14 @@
             }
             break;
          } else {
-            DIP("mtlo r%d", rs);
+            DIP("mtlo r%u", rs);
             putLO(getIReg(rs));
             break;
          }
       }
 
       case 0x21:  /* ADDU */
-         DIP("addu r%d, r%d, r%d", rd, rs, rt);
+         DIP("addu r%u, r%u, r%u", rd, rs, rt);
          if (mode64) {
             ALU_PATTERN64(Iop_Add32);
          } else {
@@ -15859,7 +15846,7 @@
          break;
 
       case 0x22: {  /* SUB */
-         DIP("sub r%d, r%d, r%d", rd, rs, rt);
+         DIP("sub r%u, r%u, r%u", rd, rs, rt);
          IRTemp tmpRs32 = newTemp(Ity_I32);
          IRTemp tmpRt32 = newTemp(Ity_I32);
 
@@ -15898,7 +15885,7 @@
          break;
       }
       case 0x23:  /* SUBU */
-         DIP("subu r%d, r%d, r%d", rd, rs, rt);
+         DIP("subu r%u, r%u, r%u", rd, rs, rt);
          if (mode64) {
             ALU_PATTERN64(Iop_Sub32);
          } else {
@@ -15907,7 +15894,7 @@
          break;
 
       case 0x24:  /* AND */
-         DIP("and r%d, r%d, r%d", rd, rs, rt);
+         DIP("and r%u, r%u, r%u", rd, rs, rt);
          if (mode64) {
             ALU_PATTERN(Iop_And64);
          } else {
@@ -15916,7 +15903,7 @@
          break;
 
       case 0x25:  /* OR */
-         DIP("or r%d, r%d, r%d", rd, rs, rt);
+         DIP("or r%u, r%u, r%u", rd, rs, rt);
          if (mode64) {
             ALU_PATTERN(Iop_Or64);
          } else {
@@ -15925,7 +15912,7 @@
          break;
 
       case 0x26:  /* XOR */
-         DIP("xor r%d, r%d, r%d", rd, rs, rt);
+         DIP("xor r%u, r%u, r%u", rd, rs, rt);
          if (mode64) {
             ALU_PATTERN(Iop_Xor64);
          } else {
@@ -15934,7 +15921,7 @@
          break;
 
       case 0x27:  /* NOR */
-         DIP("nor r%d, r%d, r%d", rd, rs, rt);
+         DIP("nor r%u, r%u, r%u", rd, rs, rt);
          if (mode64)
             putIReg(rd, unop(Iop_Not64, binop(Iop_Or64, getIReg(rs),
                                               getIReg(rt))));
@@ -15944,14 +15931,14 @@
          break;
 
       case 0x08:  /* JR */
-         DIP("jr r%d", rs);
+         DIP("jr r%u", rs);
          t0 = newTemp(ty);
          assign(t0, getIReg(rs));
          lastn = mkexpr(t0);
          break;
 
       case 0x09:  /* JALR */
-         DIP("jalr r%d r%d", rd, rs);
+         DIP("jalr r%u r%u", rd, rs);
          if (mode64) {
             putIReg(rd, mkU64(guest_PC_curr_instr + 8));
             t0 = newTemp(Ity_I64);
@@ -15976,7 +15963,7 @@
          break;
 
       case 0x2A:  /* SLT */
-         DIP("slt r%d, r%d, r%d", rd, rs, rt);
+         DIP("slt r%u, r%u, r%u", rd, rs, rt);
          if (mode64)
             putIReg(rd, unop(Iop_1Uto64, binop(Iop_CmpLT64S, getIReg(rs),
                                                getIReg(rt))));
@@ -15986,7 +15973,7 @@
          break;
 
       case 0x2B:  /* SLTU */
-         DIP("sltu r%d, r%d, r%d", rd, rs, rt);
+         DIP("sltu r%u, r%u, r%u", rd, rs, rt);
          if (mode64)
             putIReg(rd, unop(Iop_1Uto64, binop(Iop_CmpLT64U, getIReg(rs),
                                          getIReg(rt))));
@@ -15996,7 +15983,7 @@
          break;
 
       case 0x00: {  /* SLL */
-         DIP("sll r%d, r%d, %d", rd, rt, sa);
+         DIP("sll r%u, r%u, %u", rd, rt, sa);
          IRTemp tmpRt32 = newTemp(Ity_I32);
          IRTemp tmpSh32 = newTemp(Ity_I32);
          IRTemp tmpRd = newTemp(Ity_I64);
@@ -16011,7 +15998,7 @@
       }
 
       case 0x04: {  /* SLLV */
-         DIP("sllv r%d, r%d, r%d", rd, rt, rs);
+         DIP("sllv r%u, r%u, r%u", rd, rt, rs);
          if (mode64) {
             IRTemp tmpRs8 = newTemp(Ity_I8);
             IRTemp tmpRt32 = newTemp(Ity_I32);
@@ -16030,7 +16017,7 @@
       }
 
       case 0x03:  /* SRA */
-         DIP("sra r%d, r%d, %d", rd, rt, sa);
+         DIP("sra r%u, r%u, %u", rd, rt, sa);
          if (mode64) {
             IRTemp tmpRt32 = newTemp(Ity_I32);
             IRTemp tmpSh32 = newTemp(Ity_I32);
@@ -16054,7 +16041,7 @@
          break;
 
       case 0x07:  /* SRAV */
-         DIP("srav r%d, r%d, r%d", rd, rt, rs);
+         DIP("srav r%u, r%u, r%u", rd, rt, rs);
          if (mode64) {
             IRTemp tmpRt32 = newTemp(Ity_I32);
             IRTemp tmpSh32 = newTemp(Ity_I32);
@@ -16084,11 +16071,11 @@
       case 0x02: {  /* SRL */
          rot = get_rot(cins);
          if (rot) {
-            DIP("rotr r%d, r%d, %d", rd, rt, sa);
+            DIP("rotr r%u, r%u, %u", rd, rt, sa);
             putIReg(rd, mkWidenFrom32(ty, genROR32(mkNarrowTo32(ty,
                         getIReg(rt)), sa), True));
          } else {
-            DIP("srl r%d, r%d, %d", rd, rt, sa);
+            DIP("srl r%u, r%u, %u", rd, rt, sa);
             if (mode64) {
                IRTemp tmpSh32 = newTemp(Ity_I32);
                IRTemp tmpRt32 = newTemp(Ity_I32);
@@ -16106,12 +16093,12 @@
       case 0x06: {
          rot = get_rotv(cins);
          if (rot) {
-            DIP("rotrv r%d, r%d, r%d", rd, rt, rs);
+            DIP("rotrv r%u, r%u, r%u", rd, rt, rs);
             putIReg(rd, mkWidenFrom32(ty, genRORV32(mkNarrowTo32(ty,
                         getIReg(rt)), mkNarrowTo32(ty, getIReg(rs))), True));
             break;
          } else {  /* SRLV */
-            DIP("srlv r%d, r%d, r%d", rd, rt, rs);
+            DIP("srlv r%u, r%u, r%u", rd, rt, rs);
             if (mode64) {
                SXXV_PATTERN64(Iop_Shr32);
             } else {
@@ -16131,7 +16118,7 @@
          break;
 
       case 0x30: {  /* TGE */
-         DIP("tge r%d, r%d %d", rs, rt, trap_code);
+         DIP("tge r%u, r%u %u", rs, rt, trap_code);
          if (mode64) {
             if (trap_code == 7)
                stmt (IRStmt_Exit (unop (Iop_Not1,
@@ -16186,7 +16173,7 @@
          break;
       }
       case 0x31: {  /* TGEU */
-         DIP("tgeu r%d, r%d %d", rs, rt, trap_code);
+         DIP("tgeu r%u, r%u %u", rs, rt, trap_code);
          if (mode64) {
             if (trap_code == 7)
                stmt (IRStmt_Exit (unop (Iop_Not1,
@@ -16241,7 +16228,7 @@
          break;
       }
       case 0x32: {  /* TLT */
-         DIP("tlt r%d, r%d %d", rs, rt, trap_code);
+         DIP("tlt r%u, r%u %u", rs, rt, trap_code);
          if (mode64) {
             if (trap_code == 7)
                stmt(IRStmt_Exit(binop(Iop_CmpLT64S, getIReg(rs),
@@ -16278,7 +16265,7 @@
          break;
       }
       case 0x33: {  /* TLTU */
-         DIP("tltu r%d, r%d %d", rs, rt, trap_code);
+         DIP("tltu r%u, r%u %u", rs, rt, trap_code);
          if (mode64) {
             if (trap_code == 7)
                stmt(IRStmt_Exit(binop(Iop_CmpLT64U, getIReg(rs),
@@ -16315,7 +16302,7 @@
          break;
       }
       case 0x34: {  /* TEQ */
-         DIP("teq r%d, r%d, %d", rs, rt, trap_code);
+         DIP("teq r%u, r%u, %u", rs, rt, trap_code);
          if (mode64) {
             if (trap_code == 7)
                stmt(IRStmt_Exit(binop(Iop_CmpEQ64, getIReg(rs),
@@ -16352,7 +16339,7 @@
          break;
       }
       case 0x36: {  /* TNE */
-         DIP("tne r%d, r%d %d", rs, rt, trap_code);
+         DIP("tne r%u, r%u %u", rs, rt, trap_code);
          if (mode64) {
             if (trap_code == 7)
                stmt(IRStmt_Exit(binop(Iop_CmpNE64, getIReg(rs),
@@ -16407,7 +16394,7 @@
          break;
 
       case 0x2C: {  /* Doubleword Add - DADD; MIPS64 */
-         DIP("dadd r%d, r%d, r%d", rd, rs, rt);
+         DIP("dadd r%u, r%u, r%u", rd, rs, rt);
          IRTemp tmpRs64 = newTemp(Ity_I64);
          IRTemp tmpRt64 = newTemp(Ity_I64);
 
@@ -16453,7 +16440,7 @@
       }
 
       case 0x2D:  /* Doubleword Add Unsigned - DADDU; MIPS64 */
-         DIP("daddu r%d, r%d, r%d", rd, rs, rt);
+         DIP("daddu r%u, r%u, r%u", rd, rs, rt);
          ALU_PATTERN(Iop_Add64);
          break;
 
@@ -16520,7 +16507,7 @@
 
       switch (rt) {
       case 0x00:  /* BLTZ */
-         DIP("bltz r%d, %d", rs, imm);
+         DIP("bltz r%u, %u", rs, imm);
          if (mode64) {
             if (!dis_instr_branch(cins, &dres, resteerOkFn,
                         callback_opaque, &bstmt))
@@ -16531,7 +16518,7 @@
          break;
 
       case 0x01:  /* BGEZ */
-         DIP("bgez r%d, %d", rs, imm);
+         DIP("bgez r%u, %u", rs, imm);
          if (mode64) {
             if (!dis_instr_branch(cins, &dres, resteerOkFn,
                                   callback_opaque, &bstmt))
@@ -16542,7 +16529,7 @@
          break;
 
       case 0x02:  /* BLTZL */
-         DIP("bltzl r%d, %d", rs, imm);
+         DIP("bltzl r%u, %u", rs, imm);
          lastn = dis_branch_likely(binop(mode64 ? Iop_CmpNE64 : Iop_CmpNE32,
                      binop(mode64 ? Iop_And64 : Iop_And32, getIReg(rs),
                      mode64 ? mkU64(0x8000000000000000ULL) : mkU32(0x80000000)),
@@ -16551,7 +16538,7 @@
          break;
 
       case 0x03:  /* BGEZL */
-         DIP("bgezl r%d, %d", rs, imm);
+         DIP("bgezl r%u, %u", rs, imm);
          lastn = dis_branch_likely(binop(mode64 ? Iop_CmpNE64 : Iop_CmpNE32,
                      binop(mode64 ? Iop_And64 : Iop_And32, getIReg(rs),
                      mode64 ? mkU64(0x8000000000000000ULL) : mkU32(0x80000000)),
@@ -16559,7 +16546,7 @@
          break;
 
       case 0x10:  /* BLTZAL */
-         DIP("bltzal r%d, %d", rs, imm);
+         DIP("bltzal r%u, %u", rs, imm);
          if (mode64) {
             if (!dis_instr_branch(cins, &dres, resteerOkFn,
                         callback_opaque, &bstmt))
@@ -16570,7 +16557,7 @@
          break;
 
       case 0x12:  /* BLTZALL */
-         DIP("bltzall r%d, %d", rs, imm);
+         DIP("bltzall r%u, %u", rs, imm);
          putIReg(31, mode64 ? mkU64(guest_PC_curr_instr + 8) :
                               mkU32(guest_PC_curr_instr + 8));
          lastn = dis_branch_likely(binop(mode64 ? Iop_CmpNE64 : Iop_CmpNE32,
@@ -16581,7 +16568,7 @@
          break;
 
       case 0x11:  /* BGEZAL */
-         DIP("bgezal r%d, %d", rs, imm);
+         DIP("bgezal r%u, %u", rs, imm);
          if (mode64) {
             if (!dis_instr_branch(cins, &dres, resteerOkFn,
                         callback_opaque, &bstmt))
@@ -16592,7 +16579,7 @@
          break;
 
       case 0x13:  /* BGEZALL */
-         DIP("bgezall r%d, %d", rs, imm);
+         DIP("bgezall r%u, %u", rs, imm);
          if (mode64) {
             putIReg(31, mkU64(guest_PC_curr_instr + 8));
             lastn = dis_branch_likely(binop(Iop_CmpNE64,
@@ -16610,7 +16597,7 @@
          break;
 
       case 0x08:  /* TGEI */
-         DIP("tgei r%d, %d %d", rs, imm, trap_code);
+         DIP("tgei r%u, %u %u", rs, imm, trap_code);
          if (mode64) {
             stmt (IRStmt_Exit (unop (Iop_Not1,
                                      binop (Iop_CmpLT64S,
@@ -16631,7 +16618,7 @@
          break;
 
       case 0x09: {  /* TGEIU */
-         DIP("tgeiu r%d, %d %d", rs, imm, trap_code);
+         DIP("tgeiu r%u, %u %u", rs, imm, trap_code);
          if (mode64) {
             stmt (IRStmt_Exit (unop (Iop_Not1,
                                      binop (Iop_CmpLT64U,
@@ -16652,7 +16639,7 @@
          break;
       }
       case 0x0A: {  /* TLTI */
-         DIP("tlti r%d, %d %d", rs, imm, trap_code);
+         DIP("tlti r%u, %u %u", rs, imm, trap_code);
          if (mode64) {
             stmt (IRStmt_Exit (binop (Iop_CmpLT64S, getIReg (rs),
                                       mkU64 (extend_s_16to64 (imm))),
@@ -16669,7 +16656,7 @@
          break;
       }
       case 0x0B: {  /* TLTIU */
-         DIP("tltiu r%d, %d %d", rs, imm, trap_code);
+         DIP("tltiu r%u, %u %u", rs, imm, trap_code);
          if (mode64) {
             stmt (IRStmt_Exit (binop (Iop_CmpLT64U, getIReg (rs),
                                       mkU64 (extend_s_16to64 (imm))),
@@ -16686,7 +16673,7 @@
          break;
       }
       case 0x0C: {  /* TEQI */
-          DIP("teqi r%d, %d %d", rs, imm, trap_code);
+          DIP("teqi r%u, %u %u", rs, imm, trap_code);
          if (mode64) {
             stmt (IRStmt_Exit (binop (Iop_CmpEQ64, getIReg (rs),
                                       mkU64 (extend_s_16to64 (imm))),
@@ -16703,7 +16690,7 @@
          break;
       }
       case 0x0E: {  /* TNEI */
-         DIP("tnei r%d, %d %d", rs, imm, trap_code);
+         DIP("tnei r%u, %u %u", rs, imm, trap_code);
          if (mode64) {
             stmt (IRStmt_Exit (binop (Iop_CmpNE64, getIReg (rs),
                                       mkU64 (extend_s_16to64 (imm))),
@@ -16720,7 +16707,7 @@
          break;
       }
       case 0x1C: {  /* BPOSGE32 */
-         DIP("bposge32 %d", imm);
+         DIP("bposge32 %u", imm);
          vassert(!mode64);
          t0 = newTemp(Ity_I32);
          /* Get pos field from DSPControl register. */
@@ -16739,7 +16726,7 @@
       break;
 
    case 0x04:
-      DIP("beq r%d, r%d, %d", rs, rt, imm);
+      DIP("beq r%u, r%u, %u", rs, rt, imm);
       if (mode64)
          dis_branch(False, binop(Iop_CmpEQ64, getIReg(rs), getIReg(rt)),
                                  imm, &bstmt);
@@ -16749,13 +16736,13 @@
       break;
 
    case 0x14:
-      DIP("beql r%d, r%d, %d", rs, rt, imm);
+      DIP("beql r%u, r%u, %u", rs, rt, imm);
       lastn = dis_branch_likely(binop(mode64 ? Iop_CmpNE64 : Iop_CmpNE32,
                                 getIReg(rs), getIReg(rt)), imm);
       break;
 
    case 0x05:
-      DIP("bne r%d, r%d, %d", rs, rt, imm);
+      DIP("bne r%u, r%u, %u", rs, rt, imm);
       if (mode64)
          dis_branch(False, binop(Iop_CmpNE64, getIReg(rs), getIReg(rt)),
                                  imm, &bstmt);
@@ -16765,13 +16752,13 @@
       break;
 
    case 0x15:
-      DIP("bnel r%d, r%d, %d", rs, rt, imm);
+      DIP("bnel r%u, r%u, %u", rs, rt, imm);
       lastn = dis_branch_likely(binop(mode64 ? Iop_CmpEQ64 : Iop_CmpEQ32,
                                       getIReg(rs), getIReg(rt)), imm);
       break;
 
    case 0x07:  /* BGTZ */
-      DIP("bgtz r%d, %d", rs, imm);
+      DIP("bgtz r%u, %u", rs, imm);
       if (mode64)
          dis_branch(False, unop(Iop_Not1, binop(Iop_CmpLE64S, getIReg(rs),
                                 mkU64(0x00))), imm, &bstmt);
@@ -16781,7 +16768,7 @@
       break;
 
    case 0x17:  /* BGTZL */
-      DIP("bgtzl r%d, %d", rs, imm);
+      DIP("bgtzl r%u, %u", rs, imm);
       if (mode64)
          lastn = dis_branch_likely(binop(Iop_CmpLE64S, getIReg(rs),
                                          mkU64(0x00)), imm);
@@ -16791,7 +16778,7 @@
       break;
 
    case 0x06:  /* BLEZ */
-      DIP("blez r%d, %d", rs, imm);
+      DIP("blez r%u, %u", rs, imm);
       if (mode64)
          dis_branch(False, binop(Iop_CmpLE64S, getIReg(rs), mkU64(0x0)),
                                 imm, &bstmt);
@@ -16801,14 +16788,14 @@
       break;
 
    case 0x16:  /* BLEZL */
-      DIP("blezl r%d, %d", rs, imm);
+      DIP("blezl r%u, %u", rs, imm);
       lastn = dis_branch_likely(unop(Iop_Not1, (binop(mode64 ? Iop_CmpLE64S :
                                      Iop_CmpLE32S, getIReg(rs), mode64 ?
                                      mkU64(0x0) : mkU32(0x0)))), imm);
       break;
 
    case 0x08: {  /* ADDI */
-      DIP("addi r%d, r%d, %d", rt, rs, imm);
+      DIP("addi r%u, r%u, %u", rt, rs, imm);
       IRTemp tmpRs32 = newTemp(Ity_I32);
       assign(tmpRs32, mkNarrowTo32(ty, getIReg(rs)));
 
@@ -16845,7 +16832,7 @@
       break;
    }
    case 0x09:  /* ADDIU */
-      DIP("addiu r%d, r%d, %d", rt, rs, imm);
+      DIP("addiu r%u, r%u, %u", rt, rs, imm);
       if (mode64) {
          putIReg(rt, mkWidenFrom32(ty, binop(Iop_Add32,
                      mkNarrowTo32(ty, getIReg(rs)),mkU32(extend_s_16to32(imm))),
@@ -16855,7 +16842,7 @@
       break;
 
    case 0x0C:  /* ANDI */
-      DIP("andi r%d, r%d, %d", rt, rs, imm);
+      DIP("andi r%u, r%u, %u", rt, rs, imm);
       if (mode64) {
          ALUI_PATTERN64(Iop_And64);
       } else {
@@ -16864,7 +16851,7 @@
       break;
 
    case 0x0E:  /* XORI */
-      DIP("xori r%d, r%d, %d", rt, rs, imm);
+      DIP("xori r%u, r%u, %u", rt, rs, imm);
       if (mode64) {
          ALUI_PATTERN64(Iop_Xor64);
       } else {
@@ -16873,7 +16860,7 @@
       break;
 
    case 0x0D:  /* ORI */
-      DIP("ori r%d, r%d, %d", rt, rs, imm);
+      DIP("ori r%u, r%u, %u", rt, rs, imm);
       if (mode64) {
          ALUI_PATTERN64(Iop_Or64);
       } else {
@@ -16882,7 +16869,7 @@
       break;
 
    case 0x0A:  /* SLTI */
-      DIP("slti r%d, r%d, %d", rt, rs, imm);
+      DIP("slti r%u, r%u, %u", rt, rs, imm);
       if (mode64)
          putIReg(rt, unop(Iop_1Uto64, binop(Iop_CmpLT64S, getIReg(rs),
                                             mkU64(extend_s_16to64(imm)))));
@@ -16892,7 +16879,7 @@
       break;
 
    case 0x0B:  /* SLTIU */
-      DIP("sltiu r%d, r%d, %d", rt, rs, imm);
+      DIP("sltiu r%u, r%u, %u", rt, rs, imm);
       if (mode64)
          putIReg(rt, unop(Iop_1Uto64, binop(Iop_CmpLT64U, getIReg(rs),
                                             mkU64(extend_s_16to64(imm)))));
@@ -16902,7 +16889,7 @@
       break;
 
    case 0x18: {  /* Doubleword Add Immidiate - DADD; MIPS64 */
-      DIP("daddi r%d, r%d, %d", rt, rs, imm);
+      DIP("daddi r%u, r%u, %u", rt, rs, imm);
       IRTemp tmpRs64 = newTemp(Ity_I64);
       assign(tmpRs64, getIReg(rs));
 
@@ -16941,14 +16928,14 @@
    }
 
    case 0x19:  /* Doubleword Add Immidiate Unsigned - DADDIU; MIPS64 */
-      DIP("daddiu r%d, r%d, %d", rt, rs, imm);
+      DIP("daddiu r%u, r%u, %u", rt, rs, imm);
       putIReg(rt, binop(Iop_Add64, getIReg(rs), mkU64(extend_s_16to64(imm))));
       break;
 
    case 0x1A: {
       /* Load Doubleword Left - LDL; MIPS64 */
       vassert(mode64);
-      DIP("ldl r%u, %d(r%u)", rt, imm, rs);
+      DIP("ldl r%u, %u(r%u)", rt, imm, rs);
       /* t1 = addr */
 #if defined (_MIPSEL)
       t1 = newTemp(Ity_I64);
@@ -16987,7 +16974,7 @@
    case 0x1B: {
       /* Load Doubleword Right - LDR; MIPS64 */
       vassert(mode64);
-      DIP("ldr r%u,%d(r%u)", rt, imm, rs);
+      DIP("ldr r%u,%u(r%u)", rt, imm, rs);
       /* t1 = addr */
 #if defined (_MIPSEL)
       t1 = newTemp(Ity_I64);
@@ -17017,14 +17004,14 @@
    }
 
    case 0x27:  /* Load Word unsigned - LWU; MIPS64 */
-      DIP("lwu r%u,%d(r%u)", rt, imm, rs);
+      DIP("lwu r%u,%u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
 
       putIReg(rt, mkWidenFrom32(ty, load(Ity_I32, mkexpr(t1)), False));
       break;
 
    case 0x30:  /* LL / LWC0 */
-      DIP("ll r%d, %d(r%d)", rt, imm, rs);
+      DIP("ll r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
 
       t2 = newTemp(Ity_I32);
@@ -17040,7 +17027,7 @@
       break;
 
    case 0x34:  /* Load Linked Doubleword - LLD; MIPS64 */
-      DIP("lld r%d, %d(r%d)", rt, imm, rs);
+      DIP("lld r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
 
       t2 = newTemp(Ity_I64);
@@ -17056,7 +17043,7 @@
       break;
 
    case 0x38:  /* SC / SWC0 */
-      DIP("sc r%d, %d(r%d)", rt, imm, rs);
+      DIP("sc r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
 
       t2 = newTemp(Ity_I1);
@@ -17070,7 +17057,7 @@
       break;
 
    case 0x3C:  /* Store Conditional Doubleword - SCD; MIPS64 */
-      DIP("sdc r%d, %d(r%d)", rt, imm, rs);
+      DIP("sdc r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
 
       t2 = newTemp(Ity_I1);
@@ -17084,13 +17071,13 @@
       break;
 
    case 0x37:  /* Load Doubleword - LD; MIPS64 */
-      DIP("ld r%u, %d(r%u)", rt, imm, rs);
+      DIP("ld r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       putIReg(rt, load(Ity_I64, mkexpr(t1)));
       break;
 
    case 0x3F:  /* Store Doubleword - SD; MIPS64 */
-      DIP("sd r%u, %d(r%u)", rt, imm, rs);
+      DIP("sd r%u, %u(r%u)", rt, imm, rs);
       LOAD_STORE_PATTERN;
       store(mkexpr(t1), getIReg(rt));
       break;
@@ -17098,7 +17085,7 @@
    case 0x32:  /* Branch on Bit Clear - BBIT0; Cavium OCTEON */
       /* Cavium Specific instructions. */
       if (VEX_MIPS_COMP_ID(archinfo->hwcaps) == VEX_PRID_COMP_CAVIUM) {
-         DIP("bbit0 r%d, 0x%x, %x", rs, rt, imm);
+         DIP("bbit0 r%u, 0x%x, %x", rs, rt, imm);
          t0 = newTemp(Ity_I32);
          t1 = newTemp(Ity_I32);
          assign(t0, mkU32(0x1));
@@ -17117,7 +17104,7 @@
    case 0x36:  /* Branch on Bit Clear Plus 32 - BBIT032; Cavium OCTEON */
       /* Cavium Specific instructions. */
       if (VEX_MIPS_COMP_ID(archinfo->hwcaps) == VEX_PRID_COMP_CAVIUM) {
-         DIP("bbit032 r%d, 0x%x, %x", rs, rt, imm);
+         DIP("bbit032 r%u, 0x%x, %x", rs, rt, imm);
          t0 = newTemp(Ity_I64);
          t1 = newTemp(Ity_I8);  /* Shift. */
          t2 = newTemp(Ity_I64);
@@ -17138,7 +17125,7 @@
    case 0x3A:  /* Branch on Bit Set - BBIT1; Cavium OCTEON */
       /* Cavium Specific instructions. */
       if (VEX_MIPS_COMP_ID(archinfo->hwcaps) == VEX_PRID_COMP_CAVIUM) {
-         DIP("bbit1 r%d, 0x%x, %x", rs, rt, imm);
+         DIP("bbit1 r%u, 0x%x, %x", rs, rt, imm);
          t0 = newTemp(Ity_I32);
          t1 = newTemp(Ity_I32);
          assign(t0, mkU32(0x1));
@@ -17157,7 +17144,7 @@
    case 0x3E:  /* Branch on Bit Set Plus 32 - BBIT132; Cavium OCTEON */
       /* Cavium Specific instructions. */
       if (VEX_MIPS_COMP_ID(archinfo->hwcaps) == VEX_PRID_COMP_CAVIUM) {
-         DIP("bbit132 r%d, 0x%x, %x", rs, rt, imm);
+         DIP("bbit132 r%u, 0x%x, %x", rs, rt, imm);
          t0 = newTemp(Ity_I64);
          t1 = newTemp(Ity_I8);  /* Shift. */
          t2 = newTemp(Ity_I64);
@@ -17187,10 +17174,10 @@
       if (sigill_diag)
          vex_printf("vex mips->IR: unhandled instruction bytes: "
                     "0x%x 0x%x 0x%x 0x%x\n",
-                    (Int) getIByte(delta_start + 0),
-                    (Int) getIByte(delta_start + 1),
-                    (Int) getIByte(delta_start + 2),
-                    (Int) getIByte(delta_start + 3));
+                    (UInt) getIByte(delta_start + 0),
+                    (UInt) getIByte(delta_start + 1),
+                    (UInt) getIByte(delta_start + 2),
+                    (UInt) getIByte(delta_start + 3));
 
       /* Tell the dispatcher that this insn cannot be decoded, and so has
          not been executed, and (is currently) the next to be executed.
diff --git a/VEX/priv/guest_ppc_defs.h b/VEX/priv/guest_ppc_defs.h
index 8ef1706..f2cf7c7 100644
--- a/VEX/priv/guest_ppc_defs.h
+++ b/VEX/priv/guest_ppc_defs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/guest_ppc_helpers.c b/VEX/priv/guest_ppc_helpers.c
index dc36818..a94bdad 100644
--- a/VEX/priv/guest_ppc_helpers.c
+++ b/VEX/priv/guest_ppc_helpers.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -521,6 +521,8 @@
 
    vex_state->guest_IP_AT_SYSCALL = 0;
    vex_state->guest_SPRG3_RO = 0;
+   vex_state->guest_PPR = 0x4ULL << 50;  // medium priority
+   vex_state->guest_PSPB = 0x100;  // an arbitrary non-zero value to start with
 
    vex_state->padding1 = 0;
    vex_state->padding2 = 0;
@@ -691,6 +693,8 @@
    vex_state->guest_TFHAR  = 0;
    vex_state->guest_TFIAR  = 0;
    vex_state->guest_TEXASR = 0;
+   vex_state->guest_PPR = 0x4ULL << 50;  // medium priority
+   vex_state->guest_PSPB = 0x100;  // an arbitrary non-zero value to start with
 }
 
 
diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c
index f15e166..6a0b6d8 100644
--- a/VEX/priv/guest_ppc_toIR.c
+++ b/VEX/priv/guest_ppc_toIR.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -288,6 +288,8 @@
 #define OFFB_TEXASR      offsetofPPCGuestState(guest_TEXASR)
 #define OFFB_TEXASRU     offsetofPPCGuestState(guest_TEXASRU)
 #define OFFB_TFIAR       offsetofPPCGuestState(guest_TFIAR)
+#define OFFB_PPR         offsetofPPCGuestState(guest_PPR)
+#define OFFB_PSPB        offsetofPPCGuestState(guest_PSPB)
 
 
 /*------------------------------------------------------------*/
@@ -438,6 +440,14 @@
     PPC_GST_TFIAR,  // Transactional Failure Instruction Address Register
     PPC_GST_TEXASR, // Transactional EXception And Summary Register
     PPC_GST_TEXASRU, // Transactional EXception And Summary Register Upper
+    PPC_GST_PPR,     // Program Priority register
+    PPC_GST_PPR32,   // Upper 32-bits of Program Priority register
+    PPC_GST_PSPB,    /* Problem State Priority Boost register, Note, the
+                      * register is initialized to a non-zero value.  Currently
+                      * Valgrind is not supporting the register value to
+                      * automatically decrement. Could be added later if
+                      * needed.
+                      */
     PPC_GST_MAX
 } PPC_GST;
 
@@ -1710,12 +1720,12 @@
 static IRExpr* addr_align( IRExpr* addr, UChar align )
 {
    IRType ty = mode64 ? Ity_I64 : Ity_I32;
-   Long mask;
+   ULong mask;
    switch (align) {
    case 1:  return addr;                    // byte aligned
-   case 2:  mask = ((Long)-1) << 1; break;  // half-word aligned
-   case 4:  mask = ((Long)-1) << 2; break;  // word aligned
-   case 16: mask = ((Long)-1) << 4; break;  // quad-word aligned
+   case 2:  mask = ~0ULL << 1; break;       // half-word aligned
+   case 4:  mask = ~0ULL << 2; break;       // word aligned
+   case 16: mask = ~0ULL << 4; break;       // quad-word aligned
    default:
       vex_printf("addr_align: align = %u\n", align);
       vpanic("addr_align(ppc)");
@@ -2747,6 +2757,15 @@
    case PPC_GST_TFIAR:
       return IRExpr_Get( OFFB_TFIAR, ty );
 
+   case PPC_GST_PPR:
+      return IRExpr_Get( OFFB_PPR, ty );
+
+   case PPC_GST_PPR32:
+      return unop( Iop_64HIto32, IRExpr_Get( OFFB_PPR, ty ) );
+
+   case PPC_GST_PSPB:
+      return IRExpr_Get( OFFB_PSPB, ty );
+
    default:
       vex_printf("getGST(ppc): reg = %u", reg);
       vpanic("getGST(ppc)");
@@ -2926,6 +2945,95 @@
       vassert( ty_src == Ity_I64 );
       stmt( IRStmt_Put( OFFB_TFHAR, src ) );
       break;
+
+   case PPC_GST_PPR32:
+   case PPC_GST_PPR:
+      {
+         /* The Program Priority Register (PPR) stores the priority in
+          * bits [52:50].  The user setable priorities are:
+          *
+          *    001  very low
+          *    010  low
+          *    011  medium low
+          *    100  medium
+          *    101  medium high
+          *
+          * If the argument is not between 0b001 and 0b100 the priority is set
+          * to 0b100.  The priority can only be set to 0b101 if the the Problem
+          * State Boost Register is non-zero.  The value of the PPR is not
+          * changed if the input is not valid.
+          */
+
+         IRTemp not_valid = newTemp(Ity_I64);
+         IRTemp has_perm = newTemp(Ity_I64);
+         IRTemp new_src  = newTemp(Ity_I64);
+         IRTemp PSPB_val = newTemp(Ity_I64);
+         IRTemp value    = newTemp(Ity_I64);
+
+         vassert(( ty_src == Ity_I64 ) || ( ty_src == Ity_I32 ));
+         assign( PSPB_val, binop( Iop_32HLto64,
+                                  mkU32( 0 ),
+                                  IRExpr_Get( OFFB_PSPB, Ity_I32 ) ) );
+         if( reg == PPC_GST_PPR32 ) {
+            vassert( ty_src == Ity_I32 );
+            assign( value, binop( Iop_32HLto64,
+                                  mkU32(0),
+                                  binop( Iop_And32,
+                                         binop( Iop_Shr32, src,  mkU8( 18 ) ),
+                                         mkU32( 0x7 ) ) ) );
+         } else {
+            vassert( ty_src == Ity_I64 );
+            assign( value, binop( Iop_And64,
+                                  binop( Iop_Shr64, src,  mkU8( 50 ) ),
+                                  mkU64( 0x7 ) ) );
+         }
+         assign( has_perm,
+                 binop( Iop_And64,
+                        unop( Iop_1Sto64,
+                              binop( Iop_CmpEQ64,
+                                     mkexpr( PSPB_val ),
+                                     mkU64( 0 ) ) ),
+                        unop( Iop_1Sto64,
+                              binop( Iop_CmpEQ64,
+                                     mkU64( 0x5 ),
+                                     mkexpr( value ) ) ) ) );
+         assign( not_valid,
+                 binop( Iop_Or64,
+                        unop( Iop_1Sto64,
+                              binop( Iop_CmpEQ64,
+                                     mkexpr( value ),
+                                     mkU64( 0 ) ) ),
+                        unop( Iop_1Sto64,
+                              binop( Iop_CmpLT64U,
+                                     mkU64( 0x5 ),
+                                     mkexpr( value ) ) ) ) );
+         assign( new_src,
+                 binop( Iop_Or64,
+                        binop( Iop_And64,
+                               unop( Iop_Not64,
+                                     mkexpr( not_valid ) ),
+                               src ),
+                        binop( Iop_And64,
+                               mkexpr( not_valid ),
+                               binop( Iop_Or64,
+                                      binop( Iop_And64,
+                                             mkexpr( has_perm),
+                                             binop( Iop_Shl64,
+                                                    mkexpr( value ),
+                                                    mkU8( 50 ) ) ),
+                                      binop( Iop_And64,
+                                             IRExpr_Get( OFFB_PPR, ty ),
+                                             unop( Iop_Not64,
+                                                   mkexpr( has_perm )
+                                                   ) ) ) ) ) );
+
+                 /* make sure we only set the valid bit field [52:50] */
+                 stmt( IRStmt_Put( OFFB_PPR,
+                                   binop( Iop_And64,
+                                          mkexpr( new_src ),
+                                          mkU64( 0x1C000000000000) ) ) );
+      break;
+      }
    default:
       vex_printf("putGST(ppc): reg = %u", reg);
       vpanic("putGST(ppc)");
@@ -3425,7 +3533,7 @@
          DIP("lis r%u,%d\n", rD_addr, (Int)simm16);
          assign( rD, mkSzExtendS32(ty, uimm16 << 16) );
       } else {
-         DIP("addis r%u,r%u,0x%x\n", rD_addr, rA_addr, (Int)simm16);
+         DIP("addis r%u,r%u,0x%x\n", rD_addr, rA_addr, (UInt)simm16);
          assign( rD, binop( mkSzOp(ty, Iop_Add8), mkexpr(rA),
                             mkSzExtendS32(ty, uimm16 << 16) ) );
       }
@@ -5728,7 +5836,7 @@
 
    IRType   ty        = mode64 ? Ity_I64 : Ity_I32;
    Addr64   tgt       = 0;
-   Int      BD        = extend_s_16to32(BD_u16);
+   UInt     BD        = extend_s_16to32(BD_u16);
    IRTemp   do_branch = newTemp(Ity_I32);
    IRTemp   ctr_ok    = newTemp(Ity_I32);
    IRTemp   cond_ok   = newTemp(Ity_I32);
@@ -5826,7 +5934,7 @@
          b11to15 are a branch hint, and so we only need to ensure it's
          of the form 000XX. */
       if ((b11to15 & ~3) != 0) {
-         vex_printf("dis_int_branch(ppc)(0x13,b11to15)(%d)\n", (Int)b11to15);
+         vex_printf("dis_int_branch(ppc)(0x13,b11to15)(%d)\n", b11to15);
          return False;
       }
 
@@ -6128,9 +6236,9 @@
                         mkU32( (UInt)simm16 ),
                         cia );
       if (TO == 4) {
-         DIP("tweqi r%u,%d\n", (UInt)rA_addr, (Int)simm16);
+         DIP("tweqi r%u,%d\n", rA_addr, (Int)simm16);
       } else {
-         DIP("tw%di r%u,%d\n", (Int)TO, (UInt)rA_addr, (Int)simm16);
+         DIP("tw%di r%u,%d\n", TO, rA_addr, (Int)simm16);
       }
       break;
    case 0x02: // tdi
@@ -6138,9 +6246,9 @@
          return False;
       uncond = do_trap( TO, getIReg(rA_addr), mkU64( (ULong)simm16 ), cia );
       if (TO == 4) {
-         DIP("tdeqi r%u,%d\n", (UInt)rA_addr, (Int)simm16);
+         DIP("tdeqi r%u,%d\n", rA_addr, (Int)simm16);
       } else {
-         DIP("td%di r%u,%d\n", (Int)TO, (UInt)rA_addr, (Int)simm16);
+         DIP("td%di r%u,%d\n", TO, rA_addr, (Int)simm16);
       }
       break;
    default:
@@ -6182,9 +6290,9 @@
                                : getIReg(rB_addr),
                         cia );
       if (TO == 4) {
-         DIP("tweq r%u,r%u\n", (UInt)rA_addr, (UInt)rB_addr);
+         DIP("tweq r%u,r%u\n", rA_addr, rB_addr);
       } else {
-         DIP("tw%d r%u,r%u\n", (Int)TO, (UInt)rA_addr, (UInt)rB_addr);
+         DIP("tw%d r%u,r%u\n", TO, rA_addr, rB_addr);
       }
       break;
    case 0x044: // td (Trap Doubleword, PPC64 p534)
@@ -6192,9 +6300,9 @@
          return False;
       uncond = do_trap( TO, getIReg(rA_addr), getIReg(rB_addr), cia );
       if (TO == 4) {
-         DIP("tdeq r%u,r%u\n", (UInt)rA_addr, (UInt)rB_addr);
+         DIP("tdeq r%u,r%u\n", rA_addr, rB_addr);
       } else {
-         DIP("td%d r%u,r%u\n", (Int)TO, (UInt)rA_addr, (UInt)rB_addr);
+         DIP("td%d r%u,r%u\n", TO, rA_addr, rB_addr);
       }
       break;
    default:
@@ -6261,6 +6369,7 @@
    UInt  b11to25 = IFIELD(theInstr, 11, 15);
    UChar flag_L  = ifieldRegDS(theInstr);
    UInt  b11to20 = IFIELD(theInstr, 11, 10);
+   UInt  M0      = IFIELD(theInstr, 11, 5);
    UChar rD_addr = ifieldRegDS(theInstr);
    UChar rS_addr = rD_addr;
    UChar rA_addr = ifieldRegA(theInstr);
@@ -6291,12 +6400,20 @@
    /* X-Form */
    case 0x1F:
       switch (opc2) {
-      case 0x356: // eieio (Enforce In-Order Exec of I/O, PPC32 p394)
-         if (b11to25 != 0 || b0 != 0) {
-            vex_printf("dis_memsync(ppc)(eiei0,b11to25|b0)\n");
-            return False;
+      case 0x356: // eieio or mbar (Enforce In-Order Exec of I/O, PPC32 p394)
+         if (M0 == 0) {
+            if (b11to20 != 0 || b0 != 0) {
+               vex_printf("dis_memsync(ppc)(eieio,b11to20|b0)\n");
+               return False;
+            }
+            DIP("eieio\n");
+         } else {
+            if (b11to20 != 0 || b0 != 0) {
+               vex_printf("dis_memsync(ppc)(mbar,b11to20|b0)\n");
+               return False;
+            }
+            DIP("mbar %d\n", M0);
          }
-         DIP("eieio\n");
          /* Insert a memory fence, just to be on the safe side. */
          stmt( IRStmt_MBE(Imbe_Fence) );
          break;
@@ -6307,7 +6424,7 @@
             in the documentation) is merely a hint bit to the
             hardware, I think as to whether or not contention is
             likely.  So we can just ignore it. */
-         DIP("lwarx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, (UInt)b0);
+         DIP("lwarx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, b0);
 
          // trap if misaligned
          gen_SIGBUS_if_misaligned( EA, 4 );
@@ -6326,7 +6443,7 @@
             in the documentation) is merely a hint bit to the
             hardware, I think as to whether or not contention is
             likely.  So we can just ignore it. */
-         DIP("lbarx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, (UInt)b0);
+         DIP("lbarx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, b0);
 
          // and actually do the load
          res = newTemp(Ity_I8);
@@ -6342,7 +6459,7 @@
             in the documentation) is merely a hint bit to the
             hardware, I think as to whether or not contention is
             likely.  So we can just ignore it. */
-         DIP("lharx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, (UInt)b0);
+         DIP("lharx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, b0);
 
          // trap if misaligned
          gen_SIGBUS_if_misaligned( EA, 2 );
@@ -6500,7 +6617,7 @@
             likely.  So we can just ignore it. */
          if (!mode64)
             return False;
-         DIP("ldarx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, (UInt)b0);
+         DIP("ldarx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, b0);
 
          // trap if misaligned
          gen_SIGBUS_if_misaligned( EA, 8 );
@@ -6556,7 +6673,7 @@
             in the documentation) is merely a hint bit to the
             hardware, I think as to whether or not contention is
             likely.  So we can just ignore it. */
-         DIP("lqarx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, (UInt)b0);
+         DIP("lqarx r%u,r%u,r%u,EH=%u\n", rD_addr, rA_addr, rB_addr, b0);
 
          // trap if misaligned
          gen_SIGBUS_if_misaligned( EA, 16 );
@@ -7131,6 +7248,18 @@
          DIP("mfspr r%u (TEXASRU)\n", rD_addr);
          putIReg( rD_addr, getGST( PPC_GST_TEXASRU) );
          break;
+      case 0x9F:  // 159
+         DIP("mfspr r%u (PSPB)\n", rD_addr);
+         putIReg( rD_addr, getGST( PPC_GST_PSPB) );
+         break;
+      case 0x380:  // 896
+         DIP("mfspr r%u (PPR)\n", rD_addr);
+         putIReg( rD_addr, getGST( PPC_GST_PPR) );
+         break;
+      case 0x382:  // 898
+         DIP("mfspr r%u (PPR)32\n", rD_addr);
+         putIReg( rD_addr, getGST( PPC_GST_PPR32) );
+         break;
       case 0x100: 
          DIP("mfvrsave r%u\n", rD_addr);
          putIReg( rD_addr, mkWidenFrom32(ty, getGST( PPC_GST_VRSAVE ),
@@ -7161,7 +7290,7 @@
          stmt( IRStmt_Dirty(d) );
          putIReg( rD_addr,
                   mkWidenFrom32(ty, mkexpr(val), False/*unsigned*/) );
-         DIP("mfspr r%u,%u", rD_addr, (UInt)SPR);
+         DIP("mfspr r%u,%u", rD_addr, SPR);
          break;
       }
 
@@ -7182,7 +7311,7 @@
          stmt( IRStmt_Dirty(d) );
          putIReg( rD_addr,
                   mkWidenFrom32(ty, mkexpr(val), False/*unsigned*/) );
-         DIP("mfspr r%u,%u", rD_addr, (UInt)SPR);
+         DIP("mfspr r%u,%u", rD_addr, SPR);
          break;
       }
 
@@ -7287,6 +7416,18 @@
          DIP("mtspr r%u (TEXASR)\n", rS_addr);
          putGST( PPC_GST_TEXASR, mkexpr(rS) );
          break;
+      case 0x9F:  // 159
+         DIP("mtspr r%u (PSPB)\n", rS_addr);
+         putGST( PPC_GST_PSPB, mkexpr(rS) );
+         break;
+      case 0x380:  // 896
+         DIP("mtspr r%u (PPR)\n", rS_addr);
+         putGST( PPC_GST_PPR, mkexpr(rS) );
+         break;
+      case 0x382:  // 898
+         DIP("mtspr r%u (PPR32)\n", rS_addr);
+         putGST( PPC_GST_PPR32, mkexpr(rS) );
+         break;
       default:
          vex_printf("dis_proc_ctl(ppc)(mtspr,SPR)(%u)\n", SPR);
          return False;
@@ -7299,7 +7440,7 @@
       UChar rA_addr = ifieldRegA(theInstr);
       IRExpr * high64;
       IRTemp vS = newTemp( Ity_V128 );
-      DIP("mfvsrd r%u,vsr%d\n", rA_addr, (UInt)XS);
+      DIP("mfvsrd r%u,vsr%d\n", rA_addr, XS);
 
       /*  XS = SX || S
        *  For SX=0, mfvsrd is treated as a Floating-Point
@@ -7321,7 +7462,7 @@
       UChar rA_addr = ifieldRegA(theInstr);
       IRExpr * high64;
       IRTemp vS = newTemp( Ity_V128 );
-      DIP("mfvsrwz r%u,vsr%d\n", rA_addr, (UInt)XS);
+      DIP("mfvsrwz r%u,vsr%d\n", rA_addr, XS);
       /*  XS = SX || S
        *  For SX=0, mfvsrwz is treated as a Floating-Point
        *            instruction in terms of resource availability.
@@ -7345,7 +7486,7 @@
       UChar XT = ifieldRegXT( theInstr );
       UChar rA_addr = ifieldRegA(theInstr);
       IRTemp rA = newTemp(ty);
-      DIP("mtvsrd vsr%d,r%u\n", (UInt)XT, rA_addr);
+      DIP("mtvsrd vsr%d,r%u\n", XT, rA_addr);
       /*  XS = SX || S
        *  For SX=0, mfvsrd is treated as a Floating-Point
        *            instruction in terms of resource availability.
@@ -7371,7 +7512,7 @@
       UChar XT = ifieldRegXT( theInstr );
       UChar rA_addr = ifieldRegA(theInstr);
       IRTemp rA = newTemp( Ity_I32 );
-      DIP("mtvsrwa vsr%d,r%u\n", (UInt)XT, rA_addr);
+      DIP("mtvsrwa vsr%d,r%u\n", XT, rA_addr);
       /*  XS = SX || S
        *  For SX=0, mtvsrwa is treated as a Floating-Point
        *            instruction in terms of resource availability.
@@ -7395,7 +7536,7 @@
          UChar XT = ifieldRegXT( theInstr );
          UChar rA_addr = ifieldRegA(theInstr);
          IRTemp rA = newTemp( Ity_I32 );
-         DIP("mtvsrwz vsr%d,r%u\n", rA_addr, (UInt)XT);
+         DIP("mtvsrwz vsr%d,r%u\n", rA_addr, XT);
          /*  XS = SX || S
           *  For SX=0, mtvsrwz is treated as a Floating-Point
           *            instruction in terms of resource availability.
@@ -7462,10 +7603,10 @@
       }
    }
 
-   if (opc1 != 0x1F || b21to25 != 0 || b0 != 0) {
-      if (0) vex_printf("dis_cache_manage %d %d %d\n", 
-                        (Int)opc1, (Int)b21to25, (Int)b0);
-      vex_printf("dis_cache_manage(ppc)(opc1|b21to25|b0)\n");
+   if (opc1 != 0x1F || b0 != 0) {
+      if (0) vex_printf("dis_cache_manage %d %d\n", 
+                        opc1, b0);
+      vex_printf("dis_cache_manage(ppc)(opc1|b0)\n");
       return False;
    }
 
@@ -9400,7 +9541,7 @@
          vex_printf("dis_fp_scr(ppc)(instr,mtfsfi)\n");
          return False;
       }      
-      DIP("mtfsfi%s crf%d,%d\n", flag_rC ? ".":"", crfD, IMM);
+      DIP("mtfsfi%s crf%u,%d\n", flag_rC ? ".":"", crfD, IMM);
       if (GX_level) {
          /* This implies that Decimal Floating Point is supported, and the
           * FPSCR must be managed as a 64-bit register.
@@ -11175,7 +11316,7 @@
    assign( gfield_0_4_shift, mkU8( 31 - 5 ) );  // G-field[0:4]
    switch (opc1) {
    case 0x3b: // dtstdc, dtstdg
-      DIP("dtstd%s %u,r%u,%d\n", opc2 == 0xc2 ? "c" : "g",
+      DIP("dtstd%s %u,r%u,%u\n", opc2 == 0xc2 ? "c" : "g",
                crfD, frA_addr, DCM);
       /* setup the parameters for the long format of the two instructions */
       assign( frAI64_lo, mkU64( 0 ) );
@@ -11211,7 +11352,7 @@
       break;
 
    case 0x3F:   // dtstdcq, dtstdgq
-      DIP("dtstd%sq %u,r%u,%d\n", opc2 == 0xc2 ? "c" : "g",
+      DIP("dtstd%sq %u,r%u,%u\n", opc2 == 0xc2 ? "c" : "g",
                crfD, frA_addr, DCM);
       /* setup the parameters for the extended format of the
        * two instructions
@@ -12593,7 +12734,7 @@
       case 0x2B0:
          // xscvdpsxds (VSX Scalar truncate Double-Precision to integer and Convert
          //             to Signed Integer Doubleword format with Saturate)
-         DIP("xscvdpsxds v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvdpsxds v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128, binop( Iop_F64toI64S,
                                                  mkU32( Irrm_ZERO ),
@@ -12601,7 +12742,7 @@
          break;
       case 0x0b0: // xscvdpsxws (VSX Scalar truncate Double-Precision to integer and
                   //             Convert to Signed Integer Word format with Saturate)
-         DIP("xscvdpsxws v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvdpsxws v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_32Sto64,
@@ -12612,7 +12753,7 @@
          break;
       case 0x290: // xscvdpuxds (VSX Scalar truncate Double-Precision integer and Convert
                   //             to Unsigned Integer Doubleword format with Saturate)
-         DIP("xscvdpuxds v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvdpuxds v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_F64toI64U,
@@ -12623,7 +12764,7 @@
       case 0x270:
          // xscvsxdsp (VSX Scalar Convert and round Signed Integer Doubleword
          //             to Single-Precision format)
-         DIP("xscvsxdsp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvsxdsp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -12637,7 +12778,7 @@
       case 0x2F0:
          // xscvsxddp (VSX Scalar Convert and round Signed Integer Doubleword to
          //            Double-Precision format)
-         DIP("xscvsxddp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvsxddp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128, unop( Iop_ReinterpF64asI64,
                                                 binop( Iop_I64StoF64, get_IR_roundingmode(),
@@ -12647,7 +12788,7 @@
       case 0x250:
          // xscvuxdsp (VSX Scalar Convert and round Unsigned Integer
          //            Doubleword to Singel-Precision format)
-         DIP("xscvuxdsp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvuxdsp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -12661,7 +12802,7 @@
       case 0x2D0:
          // xscvuxddp (VSX Scalar Convert and round Unsigned Integer Doubleword to
          //            Double-Precision format)
-         DIP("xscvuxddp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvuxddp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128, unop( Iop_ReinterpF64asI64,
                                                 binop( Iop_I64UtoF64, get_IR_roundingmode(),
@@ -12675,7 +12816,7 @@
          IRTemp loResult_32 = newTemp(Ity_I32);
          IRExpr* rmZero = mkU32(Irrm_ZERO);
 
-         DIP("xvcvdpsxws v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvdpsxws v%u,v%u\n",  XT, XB);
          assign(hiResult_32, binop(Iop_F64toI32S, rmZero, mkexpr(xB)));
          assign(loResult_32, binop(Iop_F64toI32S, rmZero, mkexpr(xB2)));
          putVSReg( XT,
@@ -12699,7 +12840,7 @@
          Bool un_signed = (opc2 == 0x110);
          IROp op = un_signed ? Iop_QFtoI32Ux4_RZ : Iop_QFtoI32Sx4_RZ;
 
-         DIP("xvcvsp%sxws v%u,v%u\n", un_signed ? "u" : "s", (UInt)XT, (UInt)XB);
+         DIP("xvcvsp%sxws v%u,v%u\n", un_signed ? "u" : "s", XT, XB);
          /* The xvcvsp{s|u}xws instruction is similar to vct{s|u}xs, except if src is a NaN,
           * then result is set to 0x80000000.  */
          assign(tempResult, unop(op, getVSReg(XB)));
@@ -12739,7 +12880,7 @@
       }
       case 0x212: // xscvdpsp (VSX Scalar round Double-Precision to single-precision and
                   //           Convert to Single-Precision format
-         DIP("xscvdpsp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvdpsp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_32HLto64,
@@ -12753,7 +12894,7 @@
          break;
       case 0x216: /* xscvdpspn (VSX Scalar convert scalar Single-Precision to
                               vector Single-Precision non-signalling */
-         DIP("xscvdpspn v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvdpspn v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_32HLto64,
@@ -12765,7 +12906,7 @@
          break;
       case 0x090: // xscvdpuxws (VSX Scalar truncate Double-Precision to integer
                   //             and Convert to Unsigned Integer Word format with Saturate)
-         DIP("xscvdpuxws v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvdpuxws v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_32HLto64,
@@ -12776,7 +12917,7 @@
                           mkU64( 0ULL ) ) );
          break;
       case 0x292: // xscvspdp (VSX Scalar Convert Single-Precision to Double-Precision format, signaling)
-         DIP("xscvspdp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvspdp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -12785,7 +12926,7 @@
                           mkU64( 0ULL ) ) );
          break;
       case 0x296: // xscvspdpn (VSX Scalar Convert Single-Precision to Double-Precision format Non signaling)
-         DIP("xscvspdpn v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xscvspdpn v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -12795,7 +12936,7 @@
          break;
       case 0x312: // xvcvdpsp (VSX Vector round Double-Precision to single-precision
                   //           and Convert to Single-Precision format)
-         DIP("xvcvdpsp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvdpsp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_32HLto64,
@@ -12816,7 +12957,7 @@
       case 0x390: // xvcvdpuxds (VSX Vector truncate Double-Precision to integer
                   //             and Convert to Unsigned Integer Doubleword format
                   //             with Saturate)
-         DIP("xvcvdpuxds v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvdpuxds v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_F64toI64U, mkU32( Irrm_ZERO ), mkexpr( xB ) ),
@@ -12824,7 +12965,7 @@
          break;
       case 0x190: // xvcvdpuxws (VSX Vector truncate Double-Precision to integer and
                   //             Convert to Unsigned Integer Word format with Saturate)
-         DIP("xvcvdpuxws v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvdpuxws v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_32HLto64,
@@ -12839,7 +12980,7 @@
                                  mkU32( 0 ) ) ) );
          break;
       case 0x392: // xvcvspdp (VSX Vector Convert Single-Precision to Double-Precision format)
-         DIP("xvcvspdp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvspdp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -12853,7 +12994,7 @@
          break;
       case 0x330: // xvcvspsxds (VSX Vector truncate Single-Precision to integer and
                   //           Convert to Signed Integer Doubleword format with Saturate)
-         DIP("xvcvspsxds v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvspsxds v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_F64toI64S,
@@ -12867,7 +13008,7 @@
          break;
       case 0x310: // xvcvspuxds (VSX Vector truncate Single-Precision to integer and
                   //            Convert to Unsigned Integer Doubleword format with Saturate)
-         DIP("xvcvspuxds v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvspuxds v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_F64toI64U,
@@ -12881,7 +13022,7 @@
          break;
       case 0x3B0: // xvcvdpsxds (VSX Vector truncate Double-Precision to integer and
                   //             Convert to Signed Integer Doubleword format with Saturate)
-         DIP("xvcvdpsxds v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvdpsxds v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_F64toI64S, mkU32( Irrm_ZERO ), mkexpr( xB ) ),
@@ -12889,7 +13030,7 @@
          break;
       case 0x3f0: // xvcvsxddp (VSX Vector Convert and round Signed Integer Doubleword
                   //            to Double-Precision format)
-         DIP("xvcvsxddp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvsxddp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -12903,7 +13044,7 @@
          break;
       case 0x3d0: // xvcvuxddp (VSX Vector Convert and round Unsigned Integer Doubleword
                   //            to Double-Precision format)
-         DIP("xvcvuxddp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvuxddp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -12918,7 +13059,7 @@
          break;
       case 0x370: // xvcvsxdsp (VSX Vector Convert and round Signed Integer Doubleword
                   //            to Single-Precision format)
-         DIP("xvcvsxddp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvsxddp v%u,v%u\n",  XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_32HLto64,
@@ -12942,7 +13083,7 @@
          break;
       case 0x350: // xvcvuxdsp (VSX Vector Convert and round Unsigned Integer Doubleword
                   //            to Single-Precision format)
-         DIP("xvcvuxddp v%u,v%u\n", (UInt)XT, (UInt)XB);
+         DIP("xvcvuxddp v%u,v%u\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_32HLto64,
@@ -12966,7 +13107,7 @@
          break;
 
       case 0x1f0: // xvcvsxwdp (VSX Vector Convert Signed Integer Word to Double-Precision format)
-         DIP("xvcvsxwdp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvsxwdp v%u,v%u\n",  XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -12977,7 +13118,7 @@
                                        unop( Iop_32Sto64, mkexpr( b1 ) ) ) ) ) );
          break;
       case 0x1d0: // xvcvuxwdp (VSX Vector Convert Unsigned Integer Word to Double-Precision format)
-         DIP("xvcvuxwdp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvuxwdp v%u,v%u\n",  XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -12988,11 +13129,11 @@
                                        unop( Iop_32Uto64, mkexpr( b1 ) ) ) ) ) );
          break;
       case 0x170: // xvcvsxwsp (VSX Vector Convert Signed Integer Word to Single-Precision format)
-         DIP("xvcvsxwsp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvsxwsp v%u,v%u\n",  XT, XB);
          putVSReg( XT, unop( Iop_I32StoFx4, getVSReg( XB ) ) );
          break;
       case 0x150: // xvcvuxwsp (VSX Vector Convert Unsigned Integer Word to Single-Precision format)
-         DIP("xvcvuxwsp v%u,v%u\n",  (UInt)XT, (UInt)XB);
+         DIP("xvcvuxwsp v%u,v%u\n",  XT, XB);
          putVSReg( XT, unop( Iop_I32UtoFx4, getVSReg( XB ) ) );
          break;
 
@@ -13061,7 +13202,7 @@
          }
          IRTemp hiResult = newTemp(Ity_I64);
          IRTemp loResult = newTemp(Ity_I64);
-         DIP("xv%sdp v%d,v%d,v%d\n", oper_name, (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xv%sdp v%d,v%d,v%d\n", oper_name, XT, XA, XB);
 
          assign( hiResult,
                  unop( Iop_ReinterpF64asI64,
@@ -13077,7 +13218,7 @@
       {
          IRTemp hiResult = newTemp(Ity_I64);
          IRTemp loResult = newTemp(Ity_I64);
-         DIP("xvsqrtdp v%d,v%d\n", (UInt)XT, (UInt)XB);
+         DIP("xvsqrtdp v%d,v%d\n", XT, XB);
 
          assign( hiResult,
                  unop( Iop_ReinterpF64asI64,
@@ -13141,7 +13282,7 @@
          IRTemp frT = newTemp(Ity_F64);
          IRTemp frT2 = newTemp(Ity_F64);
          DIP("xv%sm%s%s v%d,v%d,v%d\n", negate ? "n" : "", oper_name, mdp ? "mdp" : "adp",
-             (UInt)XT, (UInt)XA, (UInt)XB);
+             XT, XA, XB);
          assign(frT,  unop(Iop_ReinterpI64asF64, unop(Iop_V128HIto64, getVSReg( XT ) ) ) );
          assign(frT2, unop(Iop_ReinterpI64asF64, unop(Iop_V128to64, getVSReg( XT ) ) ) );
 
@@ -13177,7 +13318,7 @@
          IRTemp  fe_flagHi, fg_flagHi, fe_flagLo, fg_flagLo;
          fe_flagHi = fg_flagHi = fe_flagLo = fg_flagLo = IRTemp_INVALID;
 
-         DIP("xvtsqrtdp cr%d,v%d\n", (UInt)crfD, (UInt)XB);
+         DIP("xvtsqrtdp cr%d,v%d\n", crfD, XB);
          assign( frBHi_I64, unop(Iop_V128HIto64, getVSReg( XB )) );
          assign( frBLo_I64, unop(Iop_V128to64, getVSReg( XB )) );
          do_fp_tsqrt(frBHi_I64, False /*not single precision*/, &fe_flagHi, &fg_flagHi);
@@ -13212,7 +13353,7 @@
          IRTemp  fe_flagHi, fg_flagHi, fe_flagLo, fg_flagLo;
          fe_flagHi = fg_flagHi = fe_flagLo = fg_flagLo = IRTemp_INVALID;
 
-         DIP("xvtdivdp cr%d,v%d,v%d\n", (UInt)crfD, (UInt)XA, (UInt)XB);
+         DIP("xvtdivdp cr%d,v%d,v%d\n", crfD, XA, XB);
          assign( frAHi_I64, unop(Iop_V128HIto64, getVSReg( XA )) );
          assign( frALo_I64, unop(Iop_V128to64, getVSReg( XA )) );
          assign( frBHi_I64, unop(Iop_V128HIto64, getVSReg( XB )) );
@@ -13275,21 +13416,21 @@
 
    switch (opc2) {
       case 0x100: // xvaddsp (VSX Vector Add Single-Precision)
-         DIP("xvaddsp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xvaddsp v%d,v%d,v%d\n", XT, XA, XB);
          // WARNING: BOGUS! The backend ignores rm on Iop_Add32Fx4
          putVSReg( XT, triop(Iop_Add32Fx4, rm,
                              getVSReg( XA ), getVSReg( XB )) );
          break;
 
       case 0x140: // xvmulsp (VSX Vector Multiply Single-Precision)
-         DIP("xvmulsp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xvmulsp v%d,v%d,v%d\n", XT, XA, XB);
          // WARNING: BOGUS! The backend ignores rm on Iop_Mul32Fx4
          putVSReg( XT, triop(Iop_Mul32Fx4, rm,
                              getVSReg( XA ), getVSReg( XB )) );
          break;
 
       case 0x120: // xvsubsp (VSX Vector Subtract Single-Precision)
-         DIP("xvsubsp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xvsubsp v%d,v%d,v%d\n", XT, XA, XB);
          // WARNING: BOGUS! The backend ignores rm on Iop_Sub32Fx4
          putVSReg( XT, triop(Iop_Sub32Fx4, rm,
                              getVSReg( XA ), getVSReg( XB )) );
@@ -13305,7 +13446,7 @@
           * I will do the latter, due to the general philosophy of
           * reusing existing implementations when practical.
           */
-         DIP("xvdivsp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xvdivsp v%d,v%d,v%d\n", XT, XA, XB);
          breakV128to4xF64( getVSReg( XA ), &a3, &a2, &a1, &a0 );
          breakV128to4xF64( getVSReg( XB ), &b3, &b2, &b1, &b0 );
 
@@ -13334,7 +13475,7 @@
       }
       case 0x116: // xvsqrtsp (VSX Vector Square Root Single-Precision)
       {
-         DIP("xvsqrtsp v%d,v%d\n", (UInt)XT, (UInt)XB);
+         DIP("xvsqrtsp v%d,v%d\n", XT, XB);
          breakV128to4xF64( getVSReg( XB ), &b3, &b2, &b1, &b0 );
          /* Note: The native xvsqrtsp insruction does not always give the same precision
           * as what we get with Iop_SqrtF64.  But it doesn't seem worthwhile to implement
@@ -13405,8 +13546,8 @@
                negate = False;
          }
 
-         DIP("xv%sm%s%s v%d,v%d,v%d\n", negate ? "n" : "", oper_name, msp ? "msp" : "asp",
-             (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xv%sm%s%s v%d,v%d,v%d\n", negate ? "n" : "", oper_name,
+             msp ? "msp" : "asp", XT, XA, XB);
 
          t3 = t2 = t1 = t0 = IRTemp_INVALID;
          breakV128to4xF64( getVSReg( XA ), &a3, &a2, &a1, &a0 );
@@ -13466,7 +13607,7 @@
          IRTemp  fe_flag2, fg_flag2, fe_flag3, fg_flag3;
          fe_flag0 = fg_flag0 = fe_flag1 = fg_flag1 = IRTemp_INVALID;
          fe_flag2 = fg_flag2 = fe_flag3 = fg_flag3 = IRTemp_INVALID;
-         DIP("xvtsqrtsp cr%d,v%d\n", (UInt)crfD, (UInt)XB);
+         DIP("xvtsqrtsp cr%d,v%d\n", crfD, XB);
 
          breakV128to4x32( getVSReg( XB ), &b3, &b2, &b1, &b0 );
          do_fp_tsqrt(b0, True /* single precision*/, &fe_flag0, &fg_flag0);
@@ -13520,7 +13661,7 @@
          IRTemp  fe_flag2, fg_flag2, fe_flag3, fg_flag3;
          fe_flag0 = fg_flag0 = fe_flag1 = fg_flag1 = IRTemp_INVALID;
          fe_flag2 = fg_flag2 = fe_flag3 = fg_flag3 = IRTemp_INVALID;
-         DIP("xvtdivsp cr%d,v%d,v%d\n", (UInt)crfD, (UInt)XA, (UInt)XB);
+         DIP("xvtdivsp cr%d,v%d,v%d\n", crfD, XA, XB);
 
          breakV128to4x32( getVSReg( XA ), &a3, &a2, &a1, &a0 );
          breakV128to4x32( getVSReg( XB ), &b3, &b2, &b1, &b0 );
@@ -14067,7 +14208,7 @@
          assign(frB,  unop(Iop_V128HIto64, getVSReg( XB )));
          assign(frB2, unop(Iop_V128to64, getVSReg( XB )));
 
-         DIP("%s v%d,v%d\n", redp ? "xvredp" : "xvrsqrtedp", (UInt)XT, (UInt)XB);
+         DIP("%s v%d,v%d\n", redp ? "xvredp" : "xvrsqrtedp", XT, XB);
          if (!redp) {
             assign( sqrtHi,
                     binop( Iop_SqrtF64,
@@ -14115,7 +14256,7 @@
          IRExpr* ieee_one = IRExpr_Const(IRConst_F64i(0x3ff0000000000000ULL));
 
          b3 = b2 = b1 = b0 = IRTemp_INVALID;
-         DIP("%s v%d,v%d\n", resp ? "xvresp" : "xvrsqrtesp", (UInt)XT, (UInt)XB);
+         DIP("%s v%d,v%d\n", resp ? "xvresp" : "xvrsqrtesp", XT, XB);
          breakV128to4xF64( getVSReg( XB ), &b3, &b2, &b1, &b0 );
 
          if (!resp) {
@@ -14182,7 +14323,7 @@
 
          a3 = a2 = a1 = a0 = IRTemp_INVALID;
          b3 = b2 = b1 = b0 = IRTemp_INVALID;
-         DIP("%s v%d,v%d v%d\n", isMin ? "xvminsp" : "xvmaxsp", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("%s v%d,v%d v%d\n", isMin ? "xvminsp" : "xvmaxsp", XT, XA, XB);
          breakV128to4xF64( getVSReg( XA ), &a3, &a2, &a1, &a0 );
          breakV128to4xF64( getVSReg( XB ), &b3, &b2, &b1, &b0 );
          assign( a0_I64, unop( Iop_ReinterpF64asI64, mkexpr( a0 ) ) );
@@ -14233,7 +14374,7 @@
          assign(frB,  unop(Iop_V128HIto64, getVSReg( XB )));
          assign(frA2, unop(Iop_V128to64, getVSReg( XA )));
          assign(frB2, unop(Iop_V128to64, getVSReg( XB )));
-         DIP("%s v%d,v%d v%d\n", isMin ? "xvmindp" : "xvmaxdp", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("%s v%d,v%d v%d\n", isMin ? "xvmindp" : "xvmaxdp", XT, XA, XB);
          putVSReg( XT, binop( Iop_64HLtoV128, get_max_min_fp(frA, frB, isMin), get_max_min_fp(frA2, frB2, isMin) ) );
 
          break;
@@ -14250,7 +14391,7 @@
          assign(frA2, unop(Iop_V128to64, getVSReg( XA )));
          assign(frB2, unop(Iop_V128to64, getVSReg( XB )));
 
-         DIP("xvcpsgndp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xvcpsgndp v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           binop( Iop_Or64,
@@ -14279,7 +14420,7 @@
 
          a3_I64 = a2_I64 = a1_I64 = a0_I64 = IRTemp_INVALID;
          b3_I64 = b2_I64 = b1_I64 = b0_I64 = IRTemp_INVALID;
-         DIP("xvcpsgnsp v%d,v%d v%d\n",(UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xvcpsgnsp v%d,v%d v%d\n",XT, XA, XB);
          breakV128to4x64U( getVSReg( XA ), &a3_I64, &a2_I64, &a1_I64, &a0_I64 );
          breakV128to4x64U( getVSReg( XB ), &b3_I64, &b2_I64, &b1_I64, &b0_I64 );
 
@@ -14331,7 +14472,7 @@
          assign(frB,  unop(Iop_ReinterpI64asF64, unop(Iop_V128HIto64, getVSReg( XB ))));
          assign(frB2, unop(Iop_ReinterpI64asF64, unop(Iop_V128to64, getVSReg(XB))));
 
-         DIP("xv%sabsdp v%d,v%d\n", make_negative ? "n" : "", (UInt)XT, (UInt)XB);
+         DIP("xv%sabsdp v%d,v%d\n", make_negative ? "n" : "", XT, XB);
          if (make_negative) {
             assign(abs_resultHi, unop( Iop_NegF64, unop( Iop_AbsF64, mkexpr( frB ) ) ) );
             assign(abs_resultLo, unop( Iop_NegF64, unop( Iop_AbsF64, mkexpr( frB2 ) ) ) );
@@ -14392,7 +14533,7 @@
          IRTemp frB2 = newTemp(Ity_F64);
          assign(frB,  unop(Iop_ReinterpI64asF64, unop(Iop_V128HIto64, getVSReg( XB ))));
          assign(frB2, unop(Iop_ReinterpI64asF64, unop(Iop_V128to64, getVSReg(XB))));
-         DIP("xvnegdp v%d,v%d\n",  (UInt)XT, (UInt)XB);
+         DIP("xvnegdp v%d,v%d\n",  XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -14417,7 +14558,7 @@
          assign( frBLo_I64, unop( Iop_V128to64, getVSReg( XB ) ) );
          frD_fp_roundLo = _do_vsx_fp_roundToInt(frBLo_I64, opc2);
 
-         DIP("xvrdpi%s v%d,v%d\n", _get_vsx_rdpi_suffix(opc2), (UInt)XT, (UInt)XB);
+         DIP("xvrdpi%s v%d,v%d\n", _get_vsx_rdpi_suffix(opc2), XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64, frD_fp_roundHi ),
@@ -14456,7 +14597,7 @@
                   vex_printf("Unrecognized opcode %x\n", opc2);
                   vpanic("dis_vxv_misc(ppc)(vrspi<x>)(opc2)\n");
             }
-            DIP("xvrspi%s v%d,v%d\n", insn_suffix, (UInt)XT, (UInt)XB);
+            DIP("xvrspi%s v%d,v%d\n", insn_suffix, XT, XB);
             putVSReg( XT, unop( op, getVSReg(XB) ) );
          } else {
             // Handle xvrspic.  Unfortunately there is no corresponding "vfric" instruction.
@@ -14482,7 +14623,7 @@
                                   _do_vsx_fp_roundToInt(b1_I64, opc2));
             frD_fp_roundb0 = unop(Iop_TruncF64asF32,
                                   _do_vsx_fp_roundToInt(b0_I64, opc2));
-            DIP("xvrspic v%d,v%d\n", (UInt)XT, (UInt)XB);
+            DIP("xvrspic v%d,v%d\n", XT, XB);
             putVSReg( XT,
                       binop( Iop_64HLtoV128,
                              binop( Iop_32HLto64,
@@ -14532,7 +14673,7 @@
     */
    switch (opc2) {
       case 0x000: // xsaddsp  (VSX Scalar Add Single-Precision)
-         DIP("xsaddsp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsaddsp v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_64HLtoV128,
                               unop( Iop_ReinterpF64asI64,
                                     binop( Iop_RoundF64toF32, rm,
@@ -14542,7 +14683,7 @@
                               mkU64( 0 ) ) );
          break;
       case 0x020: // xssubsp  (VSX Scalar Subtract Single-Precision)
-         DIP("xssubsp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xssubsp v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_64HLtoV128,
                               unop( Iop_ReinterpF64asI64,
                                     binop( Iop_RoundF64toF32, rm,
@@ -14552,7 +14693,7 @@
                               mkU64( 0 ) ) );
          break;
       case 0x080: // xsadddp (VSX scalar add double-precision)
-         DIP("xsadddp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsadddp v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_64HLtoV128, unop( Iop_ReinterpF64asI64,
                                                     triop( Iop_AddF64, rm,
                                                            mkexpr( frA ),
@@ -14560,7 +14701,7 @@
                               mkU64( 0 ) ) );
          break;
       case 0x060: // xsdivsp (VSX scalar divide single-precision)
-         DIP("xsdivsp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsdivsp v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_64HLtoV128,
                               unop( Iop_ReinterpF64asI64,
                                     binop( Iop_RoundF64toF32, rm,
@@ -14570,7 +14711,7 @@
                                mkU64( 0 ) ) );
          break;
       case 0x0E0: // xsdivdp (VSX scalar divide double-precision)
-         DIP("xsdivdp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsdivdp v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_64HLtoV128, unop( Iop_ReinterpF64asI64,
                                                     triop( Iop_DivF64, rm,
                                                            mkexpr( frA ),
@@ -14583,7 +14724,7 @@
       {
          IRTemp frT = newTemp(Ity_F64);
          Bool mdp = opc2 == 0x024;
-         DIP("xsmadd%ssp v%d,v%d,v%d\n", mdp ? "m" : "a", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsmadd%ssp v%d,v%d,v%d\n", mdp ? "m" : "a", XT, XA, XB);
          assign( frT, unop( Iop_ReinterpI64asF64, unop( Iop_V128HIto64,
                                                         getVSReg( XT ) ) ) );
          putVSReg( XT,
@@ -14601,7 +14742,7 @@
       {
          IRTemp frT = newTemp(Ity_F64);
          Bool mdp = opc2 == 0x0A4;
-         DIP("xsmadd%sdp v%d,v%d,v%d\n", mdp ? "m" : "a", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsmadd%sdp v%d,v%d,v%d\n", mdp ? "m" : "a", XT, XA, XB);
          assign( frT, unop( Iop_ReinterpI64asF64, unop( Iop_V128HIto64,
                                                         getVSReg( XT ) ) ) );
          putVSReg( XT, binop( Iop_64HLtoV128, unop( Iop_ReinterpF64asI64,
@@ -14618,7 +14759,7 @@
       {
          IRTemp frT = newTemp(Ity_F64);
          Bool mdp = opc2 == 0x064;
-         DIP("xsmsub%ssp v%d,v%d,v%d\n", mdp ? "m" : "a", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsmsub%ssp v%d,v%d,v%d\n", mdp ? "m" : "a", XT, XA, XB);
          assign( frT, unop( Iop_ReinterpI64asF64, unop( Iop_V128HIto64,
                                                         getVSReg( XT ) ) ) );
          putVSReg( XT,
@@ -14636,7 +14777,7 @@
       {
          IRTemp frT = newTemp(Ity_F64);
          Bool mdp = opc2 == 0x0E4;
-         DIP("xsmsub%sdp v%d,v%d,v%d\n", mdp ? "m" : "a", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsmsub%sdp v%d,v%d,v%d\n", mdp ? "m" : "a", XT, XA, XB);
          assign( frT, unop( Iop_ReinterpI64asF64, unop( Iop_V128HIto64,
                                                         getVSReg( XT ) ) ) );
          putVSReg( XT, binop( Iop_64HLtoV128, unop( Iop_ReinterpF64asI64,
@@ -14660,7 +14801,7 @@
          IRTemp frT = newTemp(Ity_F64);
          IRTemp maddResult = newTemp(Ity_I64);
 
-         DIP("xsnmadd%sdp v%d,v%d,v%d\n", mdp ? "m" : "a", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsnmadd%sdp v%d,v%d,v%d\n", mdp ? "m" : "a", XT, XA, XB);
          assign( frT, unop( Iop_ReinterpI64asF64, unop( Iop_V128HIto64,
                                                         getVSReg( XT ) ) ) );
          assign( maddResult, unop( Iop_ReinterpF64asI64, qop( Iop_MAddF64, rm,
@@ -14680,7 +14821,7 @@
          IRTemp frT = newTemp(Ity_F64);
          IRTemp maddResult = newTemp(Ity_I64);
 
-         DIP("xsnmadd%ssp v%d,v%d,v%d\n", mdp ? "m" : "a", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsnmadd%ssp v%d,v%d,v%d\n", mdp ? "m" : "a", XT, XA, XB);
          assign( frT, unop( Iop_ReinterpI64asF64, unop( Iop_V128HIto64,
                                                         getVSReg( XT ) ) ) );
          assign( maddResult,
@@ -14704,7 +14845,7 @@
          Bool mdp = opc2 == 0x264;
          IRTemp msubResult = newTemp(Ity_I64);
 
-         DIP("xsnmsub%ssp v%d,v%d,v%d\n", mdp ? "m" : "a", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsnmsub%ssp v%d,v%d,v%d\n", mdp ? "m" : "a", XT, XA, XB);
          assign( frT, unop( Iop_ReinterpI64asF64, unop( Iop_V128HIto64,
                                                         getVSReg( XT ) ) ) );
          assign( msubResult,
@@ -14728,7 +14869,7 @@
          Bool mdp = opc2 == 0x2E4;
          IRTemp msubResult = newTemp(Ity_I64);
 
-         DIP("xsnmsub%sdp v%d,v%d,v%d\n", mdp ? "m" : "a", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsnmsub%sdp v%d,v%d,v%d\n", mdp ? "m" : "a", XT, XA, XB);
          assign( frT, unop( Iop_ReinterpI64asF64, unop( Iop_V128HIto64,
                                                         getVSReg( XT ) ) ) );
          assign(msubResult, unop( Iop_ReinterpF64asI64,
@@ -14744,7 +14885,7 @@
       }
 
       case 0x040: // xsmulsp (VSX Scalar Multiply Single-Precision)
-         DIP("xsmulsp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsmulsp v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_64HLtoV128,
                               unop( Iop_ReinterpF64asI64,
                                     binop( Iop_RoundF64toF32, rm,
@@ -14755,7 +14896,7 @@
          break;
 
       case 0x0C0: // xsmuldp (VSX Scalar Multiply Double-Precision)
-         DIP("xsmuldp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xsmuldp v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_64HLtoV128, unop( Iop_ReinterpF64asI64,
                                                     triop( Iop_MulF64, rm,
                                                            mkexpr( frA ),
@@ -14763,7 +14904,7 @@
                               mkU64( 0 ) ) );
          break;
       case 0x0A0: // xssubdp (VSX Scalar Subtract Double-Precision)
-         DIP("xssubdp v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xssubdp v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_64HLtoV128, unop( Iop_ReinterpF64asI64,
                                                     triop( Iop_SubF64, rm,
                                                            mkexpr( frA ),
@@ -14772,7 +14913,7 @@
          break;
 
       case 0x016: // xssqrtsp (VSX Scalar Square Root Single-Precision)
-         DIP("xssqrtsp v%d,v%d\n", (UInt)XT, (UInt)XB);
+         DIP("xssqrtsp v%d,v%d\n", XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64,
@@ -14783,7 +14924,7 @@
          break;
 
       case 0x096: // xssqrtdp (VSX Scalar Square Root Double-Precision)
-         DIP("xssqrtdp v%d,v%d\n", (UInt)XT, (UInt)XB);
+         DIP("xssqrtdp v%d,v%d\n", XT, XB);
          putVSReg( XT,  binop( Iop_64HLtoV128, unop( Iop_ReinterpF64asI64,
                                                      binop( Iop_SqrtF64, rm,
                                                             mkexpr( frB ) ) ),
@@ -14795,7 +14936,7 @@
          UChar crfD     = toUChar( IFIELD( theInstr, 23, 3 ) );
          IRTemp frA_I64 = newTemp(Ity_I64);
          IRTemp frB_I64 = newTemp(Ity_I64);
-         DIP("xstdivdp crf%d,v%d,v%d\n", crfD, (UInt)XA, (UInt)XB);
+         DIP("xstdivdp crf%d,v%d,v%d\n", crfD, XA, XB);
          assign( frA_I64, unop( Iop_ReinterpF64asI64, mkexpr( frA ) ) );
          assign( frB_I64, unop( Iop_ReinterpF64asI64, mkexpr( frB ) ) );
          putGST_field( PPC_GST_CR, do_fp_tdiv(frA_I64, frB_I64), crfD );
@@ -14808,7 +14949,7 @@
          IRTemp flags = newTemp(Ity_I32);
          IRTemp  fe_flag, fg_flag;
          fe_flag = fg_flag = IRTemp_INVALID;
-         DIP("xstsqrtdp v%d,v%d\n", (UInt)XT, (UInt)XB);
+         DIP("xstsqrtdp v%d,v%d\n", XT, XB);
          assign( frB_I64, unop(Iop_V128HIto64, getVSReg( XB )) );
          do_fp_tsqrt(frB_I64, False /*not single precision*/, &fe_flag, &fg_flag);
          /* The CR field consists of fl_flag || fg_flag || fe_flag || 0b0
@@ -14859,7 +15000,7 @@
          /* Note: Differences between xscmpudp and xscmpodp are only in
           * exception flag settings, which aren't supported anyway. */
          DIP("xscmp%sdp crf%d,fr%u,fr%u\n", opc2 == 0x08c ? "u" : "o",
-                                           crfD, (UInt)XA, (UInt)XB);
+                                           crfD, XA, XB);
          ccPPC32 = get_fp_cmp_CR_val( binop(Iop_CmpF64, mkexpr(frA), mkexpr(frB)));
          putGST_field( PPC_GST_CR, mkexpr(ccPPC32), crfD );
          break;
@@ -14983,7 +15124,7 @@
       case 0x18C: case 0x38C:  // xvcmpeqdp[.] (VSX Vector Compare Equal To Double-Precision [ & Record ])
       {
          DIP("xvcmpeqdp%s crf%d,fr%u,fr%u\n", (flag_rC ? ".":""),
-             (UInt)XT, (UInt)XA, (UInt)XB);
+             XT, XA, XB);
          do_vvec_fp_cmp(vA, vB, XT, flag_rC, PPC_CMP_EQ);
          break;
       }
@@ -14991,7 +15132,7 @@
       case 0x1CC: case 0x3CC: // xvcmpgedp[.] (VSX Vector Compare Greater Than or Equal To Double-Precision [ & Record ])
       {
          DIP("xvcmpgedp%s crf%d,fr%u,fr%u\n", (flag_rC ? ".":""),
-             (UInt)XT, (UInt)XA, (UInt)XB);
+             XT, XA, XB);
          do_vvec_fp_cmp(vA, vB, XT, flag_rC, PPC_CMP_GE);
          break;
       }
@@ -14999,7 +15140,7 @@
       case 0x1AC: case 0x3AC: // xvcmpgtdp[.] (VSX Vector Compare Greater Than Double-Precision [ & Record ])
       {
          DIP("xvcmpgtdp%s crf%d,fr%u,fr%u\n", (flag_rC ? ".":""),
-             (UInt)XT, (UInt)XA, (UInt)XB);
+             XT, XA, XB);
          do_vvec_fp_cmp(vA, vB, XT, flag_rC, PPC_CMP_GT);
          break;
       }
@@ -15009,7 +15150,7 @@
          IRTemp vD = newTemp(Ity_V128);
 
          DIP("xvcmpeqsp%s crf%d,fr%u,fr%u\n", (flag_rC ? ".":""),
-             (UInt)XT, (UInt)XA, (UInt)XB);
+             XT, XA, XB);
          assign( vD, binop(Iop_CmpEQ32Fx4, mkexpr(vA), mkexpr(vB)) );
          putVSReg( XT, mkexpr(vD) );
          if (flag_rC) {
@@ -15023,7 +15164,7 @@
          IRTemp vD = newTemp(Ity_V128);
 
          DIP("xvcmpgesp%s crf%d,fr%u,fr%u\n", (flag_rC ? ".":""),
-             (UInt)XT, (UInt)XA, (UInt)XB);
+             XT, XA, XB);
          assign( vD, binop(Iop_CmpGE32Fx4, mkexpr(vA), mkexpr(vB)) );
          putVSReg( XT, mkexpr(vD) );
          if (flag_rC) {
@@ -15037,7 +15178,7 @@
          IRTemp vD = newTemp(Ity_V128);
 
          DIP("xvcmpgtsp%s crf%d,fr%u,fr%u\n", (flag_rC ? ".":""),
-             (UInt)XT, (UInt)XA, (UInt)XB);
+             XT, XA, XB);
          assign( vD, binop(Iop_CmpGT32Fx4, mkexpr(vA), mkexpr(vB)) );
          putVSReg( XT, mkexpr(vD) );
          if (flag_rC) {
@@ -15099,7 +15240,7 @@
                                  binop(Iop_ShlV128, mkexpr(vB),
                                        mkU8(1)), mkU8(1)));
          }
-         DIP("xsabsdp v%d,v%d\n", (UInt)XT, (UInt)XB);
+         DIP("xsabsdp v%d,v%d\n", XT, XB);
          putVSReg(XT, mkexpr(absVal));
          break;
       }
@@ -15109,7 +15250,7 @@
          IRTemp vecA_signed = newTemp(Ity_I64);
          IRTemp vecB_unsigned = newTemp(Ity_I64);
          IRTemp vec_result = newTemp(Ity_V128);
-         DIP("xscpsgndp v%d,v%d v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xscpsgndp v%d,v%d v%d\n", XT, XA, XB);
          assign( vecA_signed, binop( Iop_And64,
                                      unop( Iop_V128HIto64,
                                            mkexpr(vA)),
@@ -15130,7 +15271,7 @@
       {
          /* Scalar negative absolute value double-precision */
          IRTemp BHi_signed = newTemp(Ity_I64);
-         DIP("xsnabsdp v%d,v%d\n", (UInt)XT, (UInt)XB);
+         DIP("xsnabsdp v%d,v%d\n", XT, XB);
          assign( BHi_signed, binop( Iop_Or64,
                                     unop( Iop_V128HIto64,
                                           mkexpr(vB) ),
@@ -15147,7 +15288,7 @@
          IRTemp BHi_negated = newTemp(Ity_I64);
          IRTemp BHi_negated_signbit = newTemp(Ity_I1);
          IRTemp vec_result = newTemp(Ity_V128);
-         DIP("xsnabsdp v%d,v%d\n", (UInt)XT, (UInt)XB);
+         DIP("xsnabsdp v%d,v%d\n", XT, XB);
          assign( BHi_signed, unop( Iop_V128HIto64, mkexpr(vB) ) );
          assign( BHi_unsigned, binop( Iop_And64, mkexpr(BHi_signed),
                                       mkU64(VG_PPC_SIGN_MASK) ) );
@@ -15181,7 +15322,7 @@
          IRTemp frA     = newTemp(Ity_I64);
          IRTemp frB     = newTemp(Ity_I64);
          Bool isMin = opc2 == 0x2A0 ? True : False;
-         DIP("%s v%d,v%d v%d\n", isMin ? "xsmaxdp" : "xsmindp", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("%s v%d,v%d v%d\n", isMin ? "xsmaxdp" : "xsmindp", XT, XA, XB);
 
          assign(frA, unop(Iop_V128HIto64, mkexpr( vA )));
          assign(frB, unop(Iop_V128HIto64, mkexpr( vB )));
@@ -15201,7 +15342,7 @@
          assign(frB_I64, unop(Iop_V128HIto64, mkexpr( vB )));
          frD_fp_round = _do_vsx_fp_roundToInt(frB_I64, opc2);
 
-         DIP("xsrdpi%s v%d,v%d\n", _get_vsx_rdpi_suffix(opc2), (UInt)XT, (UInt)XB);
+         DIP("xsrdpi%s v%d,v%d\n", _get_vsx_rdpi_suffix(opc2), XT, XB);
          putVSReg( XT,
                    binop( Iop_64HLtoV128,
                           unop( Iop_ReinterpF64asI64, frD_fp_round),
@@ -15218,8 +15359,8 @@
          IRExpr* ieee_one = IRExpr_Const(IRConst_F64i(0x3ff0000000000000ULL));
          IRExpr* rm  = get_IR_roundingmode();
          Bool redp = opc2 == 0x034;
-         DIP("%s v%d,v%d\n", redp ? "xsresp" : "xsrsqrtesp", (UInt)XT,
-             (UInt)XB);
+         DIP("%s v%d,v%d\n", redp ? "xsresp" : "xsrsqrtesp", XT,
+             XB);
 
          assign( frB,
                  unop( Iop_ReinterpI64asF64,
@@ -15252,7 +15393,7 @@
          IRExpr* ieee_one = IRExpr_Const(IRConst_F64i(0x3ff0000000000000ULL));
          IRExpr* rm  = get_IR_roundingmode();
          Bool redp = opc2 == 0x0B4;
-         DIP("%s v%d,v%d\n", redp ? "xsredp" : "xsrsqrtedp", (UInt)XT, (UInt)XB);
+         DIP("%s v%d,v%d\n", redp ? "xsredp" : "xsrsqrtedp", XT, XB);
          assign( frB,
                  unop( Iop_ReinterpI64asF64,
                        unop( Iop_V128HIto64, mkexpr( vB ) ) ) );
@@ -15277,7 +15418,7 @@
       {
          IRTemp frB = newTemp(Ity_F64);
          IRExpr* rm  = get_IR_roundingmode();
-         DIP("xsrsp v%d, v%d\n", (UInt)XT, (UInt)XB);
+         DIP("xsrsp v%d, v%d\n", XT, XB);
          assign( frB,
                  unop( Iop_ReinterpI64asF64,
                        unop( Iop_V128HIto64, mkexpr( vB ) ) ) );
@@ -15322,41 +15463,41 @@
 
    switch (opc2) {
       case 0x268: // xxlxor
-         DIP("xxlxor v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xxlxor v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_XorV128, mkexpr( vA ), mkexpr( vB ) ) );
          break;
       case 0x248: // xxlor
-         DIP("xxlor v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xxlor v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_OrV128, mkexpr( vA ), mkexpr( vB ) ) );
          break;
       case 0x288: // xxlnor
-         DIP("xxlnor v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xxlnor v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, unop( Iop_NotV128, binop( Iop_OrV128, mkexpr( vA ),
                                                  mkexpr( vB ) ) ) );
          break;
       case 0x208: // xxland
-         DIP("xxland v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xxland v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_AndV128, mkexpr( vA ), mkexpr( vB ) ) );
          break;
       case 0x228: //xxlandc
-         DIP("xxlandc v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xxlandc v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_AndV128, mkexpr( vA ), unop( Iop_NotV128,
                                                                mkexpr( vB ) ) ) );
          break;
       case 0x2A8: // xxlorc (VSX Logical OR with complement)
-         DIP("xxlorc v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xxlorc v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, binop( Iop_OrV128,
                               mkexpr( vA ),
                               unop( Iop_NotV128, mkexpr( vB ) ) ) );
          break;
       case 0x2C8: // xxlnand (VSX Logical NAND)
-         DIP("xxlnand v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xxlnand v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, unop( Iop_NotV128,
                              binop( Iop_AndV128, mkexpr( vA ),
                                     mkexpr( vB ) ) ) );
          break;
       case 0x2E8: // xxleqv (VSX Logical Equivalence)
-         DIP("xxleqv v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xxleqv v%d,v%d,v%d\n", XT, XA, XB);
          putVSReg( XT, unop( Iop_NotV128,
                              binop( Iop_XorV128,
                              mkexpr( vA ), mkexpr( vB ) ) ) );
@@ -15396,7 +15537,7 @@
    case 0x00C: // lxsiwzx (Load VSX Scalar as Integer Word and Zero Indexed)
    {
       IRExpr * exp;
-      DIP("lxsiwzx %d,r%u,r%u\n", (UInt)XT, rA_addr, rB_addr);
+      DIP("lxsiwzx %d,r%u,r%u\n", XT, rA_addr, rB_addr);
 
       if (host_endness == VexEndnessLE)
          exp = unop( Iop_64to32, load( Ity_I64, mkexpr( EA ) ) );
@@ -15411,7 +15552,7 @@
    case 0x04C: // lxsiwax (Load VSX Scalar as Integer Word Algebraic Indexed)
    {
       IRExpr * exp;
-      DIP("lxsiwax %d,r%u,r%u\n", (UInt)XT, rA_addr, rB_addr);
+      DIP("lxsiwax %d,r%u,r%u\n", XT, rA_addr, rB_addr);
 
       if (host_endness == VexEndnessLE)
          exp = unop( Iop_64to32, load( Ity_I64, mkexpr( EA ) ) );
@@ -15426,7 +15567,7 @@
    case 0x20C: // lxsspx (Load VSX Scalar Single-Precision Indexed)
    {
       IRExpr * exp;
-      DIP("lxsspx %d,r%u,r%u\n", (UInt)XT, rA_addr, rB_addr);
+      DIP("lxsspx %d,r%u,r%u\n", XT, rA_addr, rB_addr);
       /* Take 32-bit floating point value in the upper half of the fetched
        * 64-bit value, convert to 64-bit floating point value and load into
        * top word of V128.
@@ -15442,7 +15583,7 @@
    case 0x24C: // lxsdx
    {
       IRExpr * exp;
-      DIP("lxsdx %d,r%u,r%u\n", (UInt)XT, rA_addr, rB_addr);
+      DIP("lxsdx %d,r%u,r%u\n", XT, rA_addr, rB_addr);
       exp = load( Ity_I64, mkexpr( EA ) );
       // We need to pass an expression of type Ity_V128 with putVSReg, but the load
       // we just performed is only a DW.  But since the contents of VSR[XT] element 1
@@ -15456,7 +15597,7 @@
       IRExpr * high, *low;
       ULong ea_off = 8;
       IRExpr* high_addr;
-      DIP("lxvd2x %d,r%u,r%u\n", (UInt)XT, rA_addr, rB_addr);
+      DIP("lxvd2x %d,r%u,r%u\n", XT, rA_addr, rB_addr);
       high = load( Ity_I64, mkexpr( EA ) );
       high_addr = binop( addOp, mkexpr( EA ), ty == Ity_I64 ? mkU64( ea_off )
             : mkU32( ea_off ) );
@@ -15467,7 +15608,7 @@
    case 0x14C: // lxvdsx
    {
       IRTemp data = newTemp(Ity_I64);
-      DIP("lxvdsx %d,r%u,r%u\n", (UInt)XT, rA_addr, rB_addr);
+      DIP("lxvdsx %d,r%u,r%u\n", XT, rA_addr, rB_addr);
       assign( data, load( Ity_I64, mkexpr( EA ) ) );
       putVSReg( XT, binop( Iop_64HLtoV128, mkexpr( data ), mkexpr( data ) ) );
       break;
@@ -15476,7 +15617,7 @@
    {
       IRExpr *t0;
 
-      DIP("lxvw4x %d,r%u,r%u\n", (UInt)XT, rA_addr, rB_addr);
+      DIP("lxvw4x %d,r%u,r%u\n", XT, rA_addr, rB_addr);
 
       /* The load will result in the data being in BE order. */
       if (host_endness == VexEndnessLE) {
@@ -15537,7 +15678,7 @@
       * the 128-bit vector.
       */
       IRExpr * high64, * low32;
-      DIP("stxsiwx %d,r%u,r%u\n", (UInt)XS, rA_addr, rB_addr);
+      DIP("stxsiwx %d,r%u,r%u\n", XS, rA_addr, rB_addr);
       high64 = unop( Iop_V128HIto64, mkexpr( vS ) );
       low32  = unop( Iop_64to32, high64 );
       store( mkexpr( EA ), low32 );
@@ -15547,7 +15688,7 @@
    {
       IRTemp high64 = newTemp(Ity_F64);
       IRTemp val32  = newTemp(Ity_I32);
-      DIP("stxsspx %d,r%u,r%u\n", (UInt)XS, rA_addr, rB_addr);
+      DIP("stxsspx %d,r%u,r%u\n", XS, rA_addr, rB_addr);
       assign(high64, unop( Iop_ReinterpI64asF64,
                            unop( Iop_V128HIto64, mkexpr( vS ) ) ) );
       assign(val32, unop( Iop_ReinterpF32asI32,
@@ -15559,7 +15700,7 @@
    case 0x2CC:
    {
       IRExpr * high64;
-      DIP("stxsdx %d,r%u,r%u\n", (UInt)XS, rA_addr, rB_addr);
+      DIP("stxsdx %d,r%u,r%u\n", XS, rA_addr, rB_addr);
       high64 = unop( Iop_V128HIto64, mkexpr( vS ) );
       store( mkexpr( EA ), high64 );
       break;
@@ -15567,7 +15708,7 @@
    case 0x3CC:
    {
       IRExpr * high64, *low64;
-      DIP("stxvd2x %d,r%u,r%u\n", (UInt)XS, rA_addr, rB_addr);
+      DIP("stxvd2x %d,r%u,r%u\n", XS, rA_addr, rB_addr);
       high64 = unop( Iop_V128HIto64, mkexpr( vS ) );
       low64 = unop( Iop_V128to64, mkexpr( vS ) );
       store( mkexpr( EA ), high64 );
@@ -15582,7 +15723,7 @@
       IRTemp hi64 = newTemp( Ity_I64 );
       IRTemp lo64 = newTemp( Ity_I64 );
 
-      DIP("stxvw4x %d,r%u,r%u\n", (UInt)XS, rA_addr, rB_addr);
+      DIP("stxvw4x %d,r%u,r%u\n", XS, rA_addr, rB_addr);
 
       // This instruction supports word-aligned stores, so EA may not be
       // quad-word aligned.  Therefore, do 4 individual word-size stores.
@@ -15647,7 +15788,7 @@
              assign ( result, binop(Iop_OrV128, mkexpr(hi), mkexpr(lo)) );
          } else
              assign ( result, mkexpr(vA) );
-         DIP("xxsldwi v%d,v%d,v%d,%d\n", (UInt)XT, (UInt)XA, (UInt)XB, (UInt)SHW);
+         DIP("xxsldwi v%d,v%d,v%d,%d\n", XT, XA, XB, SHW);
          putVSReg( XT, mkexpr(result) );
          break;
       }
@@ -15669,7 +15810,7 @@
 
          assign( vT, binop(Iop_64HLtoV128, mkexpr(hi), mkexpr(lo)) );
 
-         DIP("xxpermdi v%d,v%d,v%d,0x%x\n", (UInt)XT, (UInt)XA, (UInt)XB, (UInt)DM);
+         DIP("xxpermdi v%d,v%d,v%d,0x%x\n", XT, XA, XB, DM);
          putVSReg( XT, mkexpr( vT ) );
          break;
       }
@@ -15697,7 +15838,7 @@
                            binop(Iop_32HLto64, mkexpr(ahi32), mkexpr(bhi32)),
                            binop(Iop_32HLto64, mkexpr(alo32), mkexpr(blo32))) );
 
-         DIP("xxmrg%cw v%d,v%d,v%d\n", type, (UInt)XT, (UInt)XA, (UInt)XB);
+         DIP("xxmrg%cw v%d,v%d,v%d\n", type, XT, XA, XB);
          putVSReg( XT, mkexpr( vT ) );
          break;
       }
@@ -15706,7 +15847,7 @@
          UChar XC = ifieldRegXC(theInstr);
          IRTemp vC = newTemp( Ity_V128 );
          assign( vC, getVSReg( XC ) );
-         DIP("xxsel v%d,v%d,v%d,v%d\n", (UInt)XT, (UInt)XA, (UInt)XB, (UInt)XC);
+         DIP("xxsel v%d,v%d,v%d,v%d\n", XT, XA, XB, XC);
          /* vD = (vA & ~vC) | (vB & vC) */
          putVSReg( XT, binop(Iop_OrV128,
             binop(Iop_AndV128, mkexpr(vA), unop(Iop_NotV128, mkexpr(vC))),
@@ -15717,7 +15858,7 @@
       {
          UChar UIM   = ifieldRegA(theInstr) & 3;
          UChar sh_uim = (3 - (UIM)) * 32;
-         DIP("xxspltw v%d,v%d,%d\n", (UInt)XT, (UInt)XB, UIM);
+         DIP("xxspltw v%d,v%d,%d\n", XT, XB, UIM);
          putVSReg( XT,
                    unop( Iop_Dup32x4,
                          unop( Iop_V128to32,
@@ -18485,7 +18626,7 @@
                                  as the reason for failing the trasaction */
       UInt tm_exact   = 1;    /* have exact address for failure */
 
-      DIP("tbegin. %d\n", R);
+      DIP("tbegin. %u\n", R);
 
       /* Set the CR0 field to indicate the tbegin failed.  Then let
        * the code do the branch to the failure path.
@@ -18517,7 +18658,7 @@
       /* The tend. is just a noop.  Do nothing */
       UInt A = IFIELD( theInstr, 25, 1 );
 
-      DIP("tend. %d\n", A);
+      DIP("tend. %u\n", A);
       break;
    }
 
@@ -18525,7 +18666,7 @@
       /* The tsr. is just a noop.  Do nothing */
       UInt L = IFIELD( theInstr, 21, 1 );
 
-      DIP("tsr. %d\n", L);
+      DIP("tsr. %u\n", L);
       break;
    }
 
@@ -18533,7 +18674,7 @@
       /* The tcheck. is just a noop.  Do nothing */
       UInt BF = IFIELD( theInstr, 25, 1 );
 
-      DIP("tcheck. %d\n", BF);
+      DIP("tcheck. %u\n", BF);
       break;
    }
 
@@ -18543,7 +18684,7 @@
       UInt RA = IFIELD( theInstr, 16, 5 );
       UInt RB = IFIELD( theInstr, 11, 5 );
 
-      DIP("tabortwc. %d,%d,%d\n", TO, RA, RB);
+      DIP("tabortwc. %u,%u,%u\n", TO, RA, RB);
       break;
    }
 
@@ -18553,7 +18694,7 @@
       UInt RA = IFIELD( theInstr, 16, 5 );
       UInt RB = IFIELD( theInstr, 11, 5 );
 
-      DIP("tabortdc. %d,%d,%d\n", TO, RA, RB);
+      DIP("tabortdc. %u,%u,%u\n", TO, RA, RB);
       break;
    }
 
@@ -18563,7 +18704,7 @@
       UInt RA = IFIELD( theInstr, 16, 5 );
       UInt SI = IFIELD( theInstr, 11, 5 );
 
-      DIP("tabortwci. %d,%d,%d\n", TO, RA, SI);
+      DIP("tabortwci. %u,%u,%u\n", TO, RA, SI);
       break;
    }
 
@@ -18573,7 +18714,7 @@
       UInt RA = IFIELD( theInstr, 16, 5 );
       UInt SI = IFIELD( theInstr, 11, 5 );
 
-      DIP("tabortdci. %d,%d,%d\n", TO, RA, SI);
+      DIP("tabortdci. %u,%u,%u\n", TO, RA, SI);
       break;
    }
 
@@ -18581,7 +18722,7 @@
       /* The tabort. is just a noop.  Do nothing */
       UInt RA = IFIELD( theInstr, 16, 5 );
 
-      DIP("tabort. %d\n", RA);
+      DIP("tabort. %u\n", RA);
       break;
    }
 
@@ -18589,7 +18730,7 @@
       /* The treclaim. is just a noop.  Do nothing */
       UInt RA = IFIELD( theInstr, 16, 5 );
 
-      DIP("treclaim. %d\n", RA);
+      DIP("treclaim. %u\n", RA);
       break;
    }
 
@@ -19172,6 +19313,7 @@
          case 0x322: // POWER 7 inst, dcffix - DFP convert from fixed
             if (!allow_VX)
                goto decode_failure;
+            if (!allow_DFP) goto decode_noDFP;
             if (dis_dfp_fmt_conv( theInstr ))
                goto decode_success;
             goto decode_failure;
@@ -19598,6 +19740,7 @@
             goto decode_success;
          goto decode_failure;
       case 0xA2: // dtstexq - DFP Test exponent Quad
+         if (!allow_DFP) goto decode_noDFP;
          if (dis_dfp_exponent_test( theInstr ) )
             goto decode_success;
          goto decode_failure;
diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h
index 758cf91..cfe5f2f 100644
--- a/VEX/priv/guest_s390_defs.h
+++ b/VEX/priv/guest_s390_defs.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c
index 622cdcc..f484f8e 100644
--- a/VEX/priv/guest_s390_helpers.c
+++ b/VEX/priv/guest_s390_helpers.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -2151,6 +2151,8 @@
             return mkU32(0);
          }
 
+         if (cond == 15) return mkU32(1);
+
          if (cond == 8) {
             return unop(Iop_1Uto32, binop(Iop_CmpEQ64,
                                           binop(Iop_And64, cc_dep1, cc_dep2),
@@ -2227,6 +2229,17 @@
                               binop(Iop_And64, cc_dep1, mkU64(msb)),
                               mkU64(0)));
          }
+         if (cond == 13) { /* cc == 0 || cc == 1 || cc == 3 */
+            IRExpr *c01, *c3;
+
+            c01 = binop(Iop_CmpEQ64, binop(Iop_And64, cc_dep1, mkU64(msb)),
+                        mkU64(0));
+            c3 = binop(Iop_CmpEQ64, binop(Iop_And64, cc_dep1, cc_dep2),
+                       mkU64(mask16));
+            return binop(Iop_Or32, unop(Iop_1Uto32, c01),
+                         unop(Iop_1Uto32, c3));
+         }
+         // fixs390: handle cond = 5,6,9,10 (the missing cases)
          // vex_printf("TUM mask = 0x%llx\n", mask16);
          goto missed;
       }
@@ -2365,7 +2378,7 @@
       goto missed;
    }
 
-   /* --------- Specialising "s390_calculate_cond" --------- */
+   /* --------- Specialising "s390_calculate_cc" --------- */
 
    if (vex_streq(function_name, "s390_calculate_cc")) {
       IRExpr *cc_op_expr, *cc_dep1;
diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c
index 023cb7d..116a606 100644
--- a/VEX/priv/guest_s390_toIR.c
+++ b/VEX/priv/guest_s390_toIR.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -12384,6 +12384,45 @@
 }
 
 static const HChar *
+s390_irgen_FIEBRA(UChar m3, UChar m4 __attribute__((unused)),
+                  UChar r1, UChar r2)
+{
+   IRTemp result = newTemp(Ity_F32);
+
+   assign(result, binop(Iop_RoundF32toInt, mkexpr(encode_bfp_rounding_mode(m3)),
+                        get_fpr_w0(r2)));
+   put_fpr_w0(r1, mkexpr(result));
+
+   return "fiebra";
+}
+
+static const HChar *
+s390_irgen_FIDBRA(UChar m3, UChar m4 __attribute__((unused)),
+                  UChar r1, UChar r2)
+{
+   IRTemp result = newTemp(Ity_F64);
+
+   assign(result, binop(Iop_RoundF64toInt, mkexpr(encode_bfp_rounding_mode(m3)),
+                        get_fpr_dw0(r2)));
+   put_fpr_dw0(r1, mkexpr(result));
+
+   return "fidbra";
+}
+
+static const HChar *
+s390_irgen_FIXBRA(UChar m3, UChar m4 __attribute__((unused)),
+                  UChar r1, UChar r2)
+{
+   IRTemp result = newTemp(Ity_F128);
+
+   assign(result, binop(Iop_RoundF128toInt, mkexpr(encode_bfp_rounding_mode(m3)),
+                        get_fpr_pair(r2)));
+   put_fpr_pair(r1, mkexpr(result));
+
+   return "fixbra";
+}
+
+static const HChar *
 s390_irgen_LNEBR(UChar r1, UChar r2)
 {
    IRTemp result = newTemp(Ity_F32);
@@ -14505,7 +14544,9 @@
    case 0xb346: s390_format_RRF_UUFF(s390_irgen_LEXBR, ovl.fmt.RRF2.m3,
                                      ovl.fmt.RRF2.m4, ovl.fmt.RRF2.r1,
                                      ovl.fmt.RRF2.r2);  goto ok;
-   case 0xb347: /* FIXBR */ goto unimplemented;
+   case 0xb347: s390_format_RRF_UUFF(s390_irgen_FIXBRA, ovl.fmt.RRF2.m3,
+                                     ovl.fmt.RRF2.m4, ovl.fmt.RRF2.r1,
+                                     ovl.fmt.RRF2.r2);  goto ok;
    case 0xb348: /* KXBR */ goto unimplemented;
    case 0xb349: s390_format_RRE_FF(s390_irgen_CXBR, ovl.fmt.RRE.r1,
                                    ovl.fmt.RRE.r2);  goto ok;
@@ -14520,11 +14561,15 @@
    case 0xb350: /* TBEDR */ goto unimplemented;
    case 0xb351: /* TBDR */ goto unimplemented;
    case 0xb353: /* DIEBR */ goto unimplemented;
-   case 0xb357: /* FIEBR */ goto unimplemented;
+   case 0xb357: s390_format_RRF_UUFF(s390_irgen_FIEBRA, ovl.fmt.RRF2.m3,
+                                     ovl.fmt.RRF2.m4, ovl.fmt.RRF2.r1,
+                                     ovl.fmt.RRF2.r2);  goto ok;
    case 0xb358: /* THDER */ goto unimplemented;
    case 0xb359: /* THDR */ goto unimplemented;
    case 0xb35b: /* DIDBR */ goto unimplemented;
-   case 0xb35f: /* FIDBR */ goto unimplemented;
+   case 0xb35f: s390_format_RRF_UUFF(s390_irgen_FIDBRA, ovl.fmt.RRF2.m3,
+                                     ovl.fmt.RRF2.m4, ovl.fmt.RRF2.r1,
+                                     ovl.fmt.RRF2.r2);  goto ok;
    case 0xb360: /* LPXR */ goto unimplemented;
    case 0xb361: /* LNXR */ goto unimplemented;
    case 0xb362: /* LTXR */ goto unimplemented;
diff --git a/VEX/priv/guest_tilegx_defs.h b/VEX/priv/guest_tilegx_defs.h
index efa78ca..9910890 100644
--- a/VEX/priv/guest_tilegx_defs.h
+++ b/VEX/priv/guest_tilegx_defs.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 Tilera Corp.
+   Copyright (C) 2010-2015 Tilera Corp.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/VEX/priv/guest_tilegx_helpers.c b/VEX/priv/guest_tilegx_helpers.c
index cda5499..b26c06d 100644
--- a/VEX/priv/guest_tilegx_helpers.c
+++ b/VEX/priv/guest_tilegx_helpers.c
@@ -6,7 +6,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013 Tilera Corp.
+  Copyright (C) 2010-2015 Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -778,7 +778,7 @@
     break;
   case 271:
     {
-      return __insn_v1shli(rd1, rd2);
+      return __insn_v1shl(rd1, rd2);
     }
     break;
   case 272:
@@ -788,7 +788,7 @@
     break;
   case 273:
     {
-      return __insn_v1shrsi(rd1, rd2);
+      return __insn_v1shrs(rd1, rd2);
     }
     break;
   case 274:
@@ -988,7 +988,7 @@
     break;
   case 313:
     {
-      return __insn_v2shli(rd1, rd2);
+      return __insn_v2shl(rd1, rd2);
     }
     break;
   case 314:
@@ -1003,7 +1003,7 @@
     break;
   case 316:
     {
-      return __insn_v2shrsi(rd1, rd2);
+      return __insn_v2shrs(rd1, rd2);
     }
     break;
   case 317:
@@ -1013,7 +1013,7 @@
     break;
   case 318:
     {
-      return __insn_v2shrui(rd1, rd2);
+      return __insn_v2shru(rd1, rd2);
     }
     break;
   case 319:
diff --git a/VEX/priv/guest_tilegx_toIR.c b/VEX/priv/guest_tilegx_toIR.c
index 4ce6f7b..f13c7ad 100644
--- a/VEX/priv/guest_tilegx_toIR.c
+++ b/VEX/priv/guest_tilegx_toIR.c
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013  Tilera Corp.
+  Copyright (C) 2010-2015  Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -180,7 +180,7 @@
   IRType ty = Ity_I64;
   if(!(iregNo < 56 || iregNo == 63 ||
        (iregNo >= 70 && iregNo <= 73))) {
-    vex_printf("iregNo=%d\n", iregNo);
+    vex_printf("iregNo=%u\n", iregNo);
     vassert(0);
   }
   return IRExpr_Get(integerGuestRegOffset(iregNo), ty);
@@ -191,7 +191,7 @@
   IRType ty = Ity_I64;
   if(!(archreg < 56 || archreg == 63 || archreg == 70 ||
        archreg == 72 || archreg == 73)) {
-    vex_printf("archreg=%d\n", archreg);
+    vex_printf("archreg=%u\n", archreg);
     vassert(0);
   }
   vassert(typeOfIRExpr(irsb->tyenv, e) == ty);
@@ -257,6 +257,22 @@
     rd_wb_index++;                              \
   } while(0)
 
+
+/* Expand/repeat byte _X 8 times to a 64-bit value */
+#define  V1EXP(_X)                                     \
+  ({                                                   \
+    _X = ((((UChar)(_X)) << 8) | ((UChar)(_X)));       \
+    _X = (((_X) << 16) | (_X));                        \
+    (((_X) << 32) | (_X));                             \
+  })
+
+/* Expand/repeat byte _X 4 times to a 64-bit value */
+#define  V2EXP(_X)                                 \
+  ({                                               \
+    _X = ((((UChar)(_X)) << 16) | ((UChar)(_X)));  \
+    (((_X) << 32) | (_X));                         \
+  })
+
 /*------------------------------------------------------------*/
 /*--- Disassemble a single instruction                     ---*/
 /*------------------------------------------------------------*/
@@ -2082,9 +2098,12 @@
     case 232:
       /* Fall-through */
     case 233:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 234:
-      /* Fall-through */
+      opd[3] = V1EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 235:
       /* Fall-through */
     case 236:
@@ -2110,12 +2129,18 @@
     case 241:
       /* Fall-through */
     case 242:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 243:
+      opd[3] = V1EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
       /* Fall-through */
     case 244:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 245:
+      opd[3] = V1EXP(opd[3]);
       use_dirty_helper = 1;
       break;
     case 246:  /* "v1cmpne" */
@@ -2151,13 +2176,19 @@
     case 258:
       /* Fall-through */
     case 259:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 260:
-      /* Fall-through */
+      opd[3] = V1EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 261:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 262:
-      /* Fall-through */
+      opd[3] = V1EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 263:
       /* Fall-through */
     case 264:
@@ -2173,13 +2204,19 @@
     case 269:
       /* Fall-through */
     case 270:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 271:
-      /* Fall-through */
+      opd[3] = V1EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 272:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 273:
-      /* Fall-through */
+      opd[3] = V1EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 274:
       use_dirty_helper = 1;
       break;
@@ -2195,9 +2232,12 @@
     case 277:
       /* Fall-through */
     case 278:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 279:
-      /* Fall-through */
+      opd[3] = V2EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 280:
       /* Fall-through */
     case 281:
@@ -2205,21 +2245,30 @@
     case 282:
       /* Fall-through */
     case 283:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 284:
-      /* Fall-through */
+      opd[3] = V2EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 285:
       /* Fall-through */
     case 286:
       /* Fall-through */
     case 287:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 288:
-      /* Fall-through */
+      opd[3] = V2EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 289:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 290:
-      /* Fall-through */
+      opd[3] = V2EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 291:
       /* Fall-through */
     case 292:
@@ -2231,13 +2280,19 @@
     case 295:
       /* Fall-through */
     case 296:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 297:
-      /* Fall-through */
+      opd[3] = V2EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 298:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 299:
-      /* Fall-through */
+      opd[3] = V2EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 300:
       /* Fall-through */
     case 301:
@@ -2263,19 +2318,28 @@
     case 311:
       /* Fall-through */
     case 312:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 313:
-      /* Fall-through */
+      opd[3] = V2EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 314:
       /* Fall-through */
     case 315:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 316:
-      /* Fall-through */
+      opd[3] = V2EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 317:
-      /* Fall-through */
+      use_dirty_helper = 1;
+      break;
     case 318:
-      /* Fall-through */
+      opd[3] = V2EXP(opd[3]);
+      use_dirty_helper = 1;
+      break;
     case 319:
       /* Fall-through */
     case 320:
diff --git a/VEX/priv/guest_x86_defs.h b/VEX/priv/guest_x86_defs.h
index 412ee94..65f4a08 100644
--- a/VEX/priv/guest_x86_defs.h
+++ b/VEX/priv/guest_x86_defs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -148,6 +148,7 @@
 extern void  x86g_dirtyhelper_CPUID_mmxext ( VexGuestX86State* );
 extern void  x86g_dirtyhelper_CPUID_sse1 ( VexGuestX86State* );
 extern void  x86g_dirtyhelper_CPUID_sse2 ( VexGuestX86State* );
+extern void  x86g_dirtyhelper_CPUID_sse3 ( VexGuestX86State* );
 
 extern void  x86g_dirtyhelper_FINIT ( VexGuestX86State* );
 
@@ -193,6 +194,15 @@
 #define X86G_CC_MASK_C    (1 << X86G_CC_SHIFT_C)
 #define X86G_CC_MASK_P    (1 << X86G_CC_SHIFT_P)
 
+/* additional eflags masks */
+#define X86G_CC_SHIFT_ID  21
+#define X86G_CC_SHIFT_AC  18
+#define X86G_CC_SHIFT_D   10
+
+#define X86G_CC_MASK_ID   (1 << X86G_CC_SHIFT_ID)
+#define X86G_CC_MASK_AC   (1 << X86G_CC_SHIFT_AC)
+#define X86G_CC_MASK_D    (1 << X86G_CC_SHIFT_D)
+
 /* FPU flag masks */
 #define X86G_FC_SHIFT_C3   14
 #define X86G_FC_SHIFT_C2   10
diff --git a/VEX/priv/guest_x86_helpers.c b/VEX/priv/guest_x86_helpers.c
index b4875ee..bc5a29e 100644
--- a/VEX/priv/guest_x86_helpers.c
+++ b/VEX/priv/guest_x86_helpers.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -724,17 +724,54 @@
    UInt dflag = vex_state->guest_DFLAG;
    vassert(dflag == 1 || dflag == 0xFFFFFFFF);
    if (dflag == 0xFFFFFFFF)
-      eflags |= (1<<10);
+      eflags |= X86G_CC_MASK_D;
    if (vex_state->guest_IDFLAG == 1)
-      eflags |= (1<<21);
+      eflags |= X86G_CC_MASK_ID;
    if (vex_state->guest_ACFLAG == 1)
-      eflags |= (1<<18);
+      eflags |= X86G_CC_MASK_AC;
 					     
    return eflags;
 }
 
 /* VISIBLE TO LIBVEX CLIENT */
 void
+LibVEX_GuestX86_put_eflags ( UInt eflags,
+                             /*MOD*/VexGuestX86State* vex_state )
+{
+   /* D flag */
+   if (eflags & X86G_CC_MASK_D) {
+      vex_state->guest_DFLAG = 0xFFFFFFFF;
+      eflags &= ~X86G_CC_MASK_D;
+   }
+   else
+      vex_state->guest_DFLAG = 1;
+
+   /* ID flag */
+   if (eflags & X86G_CC_MASK_ID) {
+      vex_state->guest_IDFLAG = 1;
+      eflags &= ~X86G_CC_MASK_ID;
+   }
+   else
+      vex_state->guest_IDFLAG = 0;
+
+   /* AC flag */
+   if (eflags & X86G_CC_MASK_AC) {
+      vex_state->guest_ACFLAG = 1;
+      eflags &= ~X86G_CC_MASK_AC;
+   }
+   else
+      vex_state->guest_ACFLAG = 0;
+
+   UInt cc_mask = X86G_CC_MASK_O | X86G_CC_MASK_S | X86G_CC_MASK_Z |
+                  X86G_CC_MASK_A | X86G_CC_MASK_C | X86G_CC_MASK_P;
+   vex_state->guest_CC_OP   = X86G_CC_OP_COPY;
+   vex_state->guest_CC_DEP1 = eflags & cc_mask;
+   vex_state->guest_CC_DEP2 = 0;
+   vex_state->guest_CC_NDEP = 0;
+}
+
+/* VISIBLE TO LIBVEX CLIENT */
+void
 LibVEX_GuestX86_put_eflag_c ( UInt new_carry_flag,
                               /*MOD*/VexGuestX86State* vex_state )
 {
@@ -1800,6 +1837,7 @@
    /* Code that seems to trigger the problem:
       for (i = 0; i < 14; i++) tmp.env[i] = 0; */
    for (i = 0; i < 7; i++) tmp.env[i+0] = 0;
+   __asm__ __volatile__("" ::: "memory");
    for (i = 0; i < 7; i++) tmp.env[i+7] = 0;
    
    for (i = 0; i < 80; i++) tmp.reg[i] = 0;
@@ -1835,7 +1873,7 @@
 
      warnXMM = (VexEmNote)(w64 >> 32);
 
-     gst->guest_SSEROUND = (UInt)w64;
+     gst->guest_SSEROUND = w64 & 0xFFFFFFFF;
    }
 
    /* Prefer an X87 emwarn over an XMM one, if both exist. */
@@ -1880,6 +1918,42 @@
    return do_put_x87( False/*don't move regs*/, (UChar*)addr, gst);
 }
 
+/* VISIBLE TO LIBVEX CLIENT */
+/* Do x87 save from the supplied VexGuestX86State structure and store the
+   result at the given address which represents a buffer of at least 108
+   bytes. */
+void LibVEX_GuestX86_get_x87 ( /*IN*/VexGuestX86State* vex_state,
+                               /*OUT*/UChar* x87_state )
+{
+   do_get_x87 ( vex_state, x87_state );
+}
+
+/* VISIBLE TO LIBVEX CLIENT */
+/* Do x87 restore from the supplied address and store read values to the given
+   VexGuestX86State structure. */
+VexEmNote LibVEX_GuestX86_put_x87 ( /*IN*/UChar* x87_state,
+                                    /*MOD*/VexGuestX86State* vex_state )
+{
+   return do_put_x87 ( True/*moveRegs*/, x87_state, vex_state );
+}
+
+/* VISIBLE TO LIBVEX CLIENT */
+/* Return mxcsr from the supplied VexGuestX86State structure. */
+UInt LibVEX_GuestX86_get_mxcsr ( /*IN*/VexGuestX86State* vex_state )
+{
+   return x86g_create_mxcsr ( vex_state->guest_SSEROUND );
+}
+
+/* VISIBLE TO LIBVEX CLIENT */
+/* Modify the given VexGuestX86State structure according to the passed mxcsr
+   value. */
+VexEmNote LibVEX_GuestX86_put_mxcsr ( /*IN*/UInt mxcsr,
+                                      /*MOD*/VexGuestX86State* vex_state)
+{
+   ULong w64 = x86g_check_ldmxcsr( mxcsr );
+   vex_state->guest_SSEROUND = w64 & 0xFFFFFFFF;
+   return (VexEmNote)(w64 >> 32);
+}
 
 /*---------------------------------------------------------------*/
 /*--- Misc integer helpers, including rotates and CPUID.      ---*/
@@ -2297,6 +2371,46 @@
    }
 }
 
+/* Claim to be the following SSE2-capable CPU:
+   vendor_id    : GenuineIntel
+   cpu family   : 15
+   model        : 2
+   model name   : Intel(R) Pentium(R) 4 CPU 3.00GHz
+   stepping     : 9
+   microcode    : 0x17
+   cpu MHz      : 2992.577
+   cache size   : 512 KB
+   flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
+                  pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe
+                   pebs bts cid xtpr
+   clflush size : 64
+   cache_alignment : 128
+   address sizes : 36 bits physical, 32 bits virtual
+*/
+void x86g_dirtyhelper_CPUID_sse2 ( VexGuestX86State* st )
+{
+   switch (st->guest_EAX) {
+      case 0: 
+         st->guest_EAX = 0x00000002;
+         st->guest_EBX = 0x756e6547;
+         st->guest_ECX = 0x6c65746e;
+         st->guest_EDX = 0x49656e69;
+         break;
+      case 1: 
+         st->guest_EAX = 0x00000f29;
+         st->guest_EBX = 0x01020809;
+         st->guest_ECX = 0x00004400;
+         st->guest_EDX = 0xbfebfbff;
+         break;
+      default:
+         st->guest_EAX = 0x03020101;
+         st->guest_EBX = 0x00000000;
+         st->guest_ECX = 0x00000000;
+         st->guest_EDX = 0x0c040883;
+         break;
+   }
+}
+
 /* Claim to be the following SSSE3-capable CPU (2 x ...):
    vendor_id       : GenuineIntel
    cpu family      : 6
@@ -2324,7 +2438,7 @@
    address sizes   : 36 bits physical, 48 bits virtual
    power management:
 */
-void x86g_dirtyhelper_CPUID_sse2 ( VexGuestX86State* st )
+void x86g_dirtyhelper_CPUID_sse3 ( VexGuestX86State* st )
 {
 #  define SET_ABCD(_a,_b,_c,_d)               \
       do { st->guest_EAX = (UInt)(_a);        \
diff --git a/VEX/priv/guest_x86_toIR.c b/VEX/priv/guest_x86_toIR.c
index fc402ce..c24d9a4 100644
--- a/VEX/priv/guest_x86_toIR.c
+++ b/VEX/priv/guest_x86_toIR.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -1549,7 +1549,7 @@
       /* ! 14 */ case 0x15: case 0x16: case 0x17:
          { UChar rm = toUChar(mod_reg_rm & 7);
            UInt  d  = getUDisp32(delta);
-           DIS(buf, "%s0x%x(%s)", sorbTxt(sorb), (Int)d, nameIReg(4,rm));
+           DIS(buf, "%s0x%x(%s)", sorbTxt(sorb), d, nameIReg(4,rm));
            *len = 5;
            return disAMode_copy2tmp(
                   handleSegOverride(sorb,
@@ -3784,8 +3784,8 @@
 void fp_do_op_ST_ST ( const HChar* op_txt, IROp op, UInt st_src, UInt st_dst,
                       Bool pop_after )
 {
-   DIP("f%s%s st(%d), st(%d)\n", op_txt, pop_after?"p":"", 
-                                 (Int)st_src, (Int)st_dst );
+   DIP("f%s%s st(%u), st(%u)\n", op_txt, pop_after?"p":"",
+                                 st_src, st_dst);
    put_ST_UNCHECKED( 
       st_dst, 
       triop( op, 
@@ -3804,8 +3804,8 @@
 void fp_do_oprev_ST_ST ( const HChar* op_txt, IROp op, UInt st_src,
                          UInt st_dst, Bool pop_after )
 {
-   DIP("f%s%s st(%d), st(%d)\n", op_txt, pop_after?"p":"",
-                                 (Int)st_src, (Int)st_dst );
+   DIP("f%s%s st(%u), st(%u)\n", op_txt, pop_after?"p":"",
+                                 st_src, st_dst);
    put_ST_UNCHECKED( 
       st_dst, 
       triop( op, 
@@ -3820,7 +3820,7 @@
 /* %eflags(Z,P,C) = UCOMI( st(0), st(i) ) */
 static void fp_do_ucomi_ST0_STi ( UInt i, Bool pop_after )
 {
-   DIP("fucomi%s %%st(0),%%st(%d)\n", pop_after ? "p" : "", (Int)i );
+   DIP("fucomi%s %%st(0),%%st(%u)\n", pop_after ? "p" : "", i);
    /* This is a bit of a hack (and isn't really right).  It sets
       Z,P,C,O correctly, but forces A and S to zero, whereas the Intel
       documentation implies A and S are unchanged. 
@@ -3923,7 +3923,7 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
                vex_printf("first_opcode == 0xD8\n");
                goto decode_fail;
          }
@@ -3942,7 +3942,7 @@
             /* Dunno if this is right */
             case 0xD0 ... 0xD7: /* FCOM %st(?),%st(0) */
                r_dst = (UInt)modrm - 0xD0;
-               DIP("fcom %%st(0),%%st(%d)\n", (Int)r_dst);
+               DIP("fcom %%st(0),%%st(%u)\n", r_dst);
                /* This forces C1 to zero, which isn't right. */
                put_C3210( 
                    binop( Iop_And32,
@@ -3956,7 +3956,7 @@
             /* Dunno if this is right */
             case 0xD8 ... 0xDF: /* FCOMP %st(?),%st(0) */
                r_dst = (UInt)modrm - 0xD8;
-               DIP("fcomp %%st(0),%%st(%d)\n", (Int)r_dst);
+               DIP("fcomp %%st(0),%%st(%u)\n", r_dst);
                /* This forces C1 to zero, which isn't right. */
                put_C3210( 
                    binop( Iop_And32,
@@ -4178,7 +4178,7 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
                vex_printf("first_opcode == 0xD9\n");
                goto decode_fail;
          }
@@ -4189,7 +4189,7 @@
 
             case 0xC0 ... 0xC7: /* FLD %st(?) */
                r_src = (UInt)modrm - 0xC0;
-               DIP("fld %%st(%d)\n", (Int)r_src);
+               DIP("fld %%st(%u)\n", r_src);
                t1 = newTemp(Ity_F64);
                assign(t1, get_ST(r_src));
                fp_push();
@@ -4198,7 +4198,7 @@
 
             case 0xC8 ... 0xCF: /* FXCH %st(?) */
                r_src = (UInt)modrm - 0xC8;
-               DIP("fxch %%st(%d)\n", (Int)r_src);
+               DIP("fxch %%st(%u)\n", r_src);
                t1 = newTemp(Ity_F64);
                t2 = newTemp(Ity_F64);
                assign(t1, get_ST(0));
@@ -4624,7 +4624,7 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
                vex_printf("first_opcode == 0xDA\n");
                goto decode_fail;
          }
@@ -4636,7 +4636,7 @@
 
             case 0xC0 ... 0xC7: /* FCMOVB ST(i), ST(0) */
                r_src = (UInt)modrm - 0xC0;
-               DIP("fcmovb %%st(%d), %%st(0)\n", (Int)r_src);
+               DIP("fcmovb %%st(%u), %%st(0)\n", r_src);
                put_ST_UNCHECKED(0, 
                                 IRExpr_ITE( 
                                     mk_x86g_calculate_condition(X86CondB),
@@ -4645,7 +4645,7 @@
 
             case 0xC8 ... 0xCF: /* FCMOVE(Z) ST(i), ST(0) */
                r_src = (UInt)modrm - 0xC8;
-               DIP("fcmovz %%st(%d), %%st(0)\n", (Int)r_src);
+               DIP("fcmovz %%st(%u), %%st(0)\n", r_src);
                put_ST_UNCHECKED(0, 
                                 IRExpr_ITE( 
                                     mk_x86g_calculate_condition(X86CondZ),
@@ -4654,7 +4654,7 @@
 
             case 0xD0 ... 0xD7: /* FCMOVBE ST(i), ST(0) */
                r_src = (UInt)modrm - 0xD0;
-               DIP("fcmovbe %%st(%d), %%st(0)\n", (Int)r_src);
+               DIP("fcmovbe %%st(%u), %%st(0)\n", r_src);
                put_ST_UNCHECKED(0, 
                                 IRExpr_ITE( 
                                     mk_x86g_calculate_condition(X86CondBE),
@@ -4663,7 +4663,7 @@
 
             case 0xD8 ... 0xDF: /* FCMOVU ST(i), ST(0) */
                r_src = (UInt)modrm - 0xD8;
-               DIP("fcmovu %%st(%d), %%st(0)\n", (Int)r_src);
+               DIP("fcmovu %%st(%u), %%st(0)\n", r_src);
                put_ST_UNCHECKED(0, 
                                 IRExpr_ITE( 
                                     mk_x86g_calculate_condition(X86CondP),
@@ -4785,7 +4785,7 @@
             }
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
                vex_printf("first_opcode == 0xDB\n");
                goto decode_fail;
          }
@@ -4797,7 +4797,7 @@
 
             case 0xC0 ... 0xC7: /* FCMOVNB ST(i), ST(0) */
                r_src = (UInt)modrm - 0xC0;
-               DIP("fcmovnb %%st(%d), %%st(0)\n", (Int)r_src);
+               DIP("fcmovnb %%st(%u), %%st(0)\n", r_src);
                put_ST_UNCHECKED(0, 
                                 IRExpr_ITE( 
                                     mk_x86g_calculate_condition(X86CondNB),
@@ -4806,7 +4806,7 @@
 
             case 0xC8 ... 0xCF: /* FCMOVNE(NZ) ST(i), ST(0) */
                r_src = (UInt)modrm - 0xC8;
-               DIP("fcmovnz %%st(%d), %%st(0)\n", (Int)r_src);
+               DIP("fcmovnz %%st(%u), %%st(0)\n", r_src);
                put_ST_UNCHECKED(0, 
                                 IRExpr_ITE( 
                                     mk_x86g_calculate_condition(X86CondNZ),
@@ -4815,7 +4815,7 @@
 
             case 0xD0 ... 0xD7: /* FCMOVNBE ST(i), ST(0) */
                r_src = (UInt)modrm - 0xD0;
-               DIP("fcmovnbe %%st(%d), %%st(0)\n", (Int)r_src);
+               DIP("fcmovnbe %%st(%u), %%st(0)\n", r_src);
                put_ST_UNCHECKED(0, 
                                 IRExpr_ITE( 
                                     mk_x86g_calculate_condition(X86CondNBE),
@@ -4824,7 +4824,7 @@
 
             case 0xD8 ... 0xDF: /* FCMOVNU ST(i), ST(0) */
                r_src = (UInt)modrm - 0xD8;
-               DIP("fcmovnu %%st(%d), %%st(0)\n", (Int)r_src);
+               DIP("fcmovnu %%st(%u), %%st(0)\n", r_src);
                put_ST_UNCHECKED(0, 
                                 IRExpr_ITE( 
                                     mk_x86g_calculate_condition(X86CondNP),
@@ -4955,7 +4955,7 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
                vex_printf("first_opcode == 0xDC\n");
                goto decode_fail;
          }
@@ -5146,7 +5146,7 @@
             }
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
                vex_printf("first_opcode == 0xDD\n");
                goto decode_fail;
          }
@@ -5156,13 +5156,13 @@
 
             case 0xC0 ... 0xC7: /* FFREE %st(?) */
                r_dst = (UInt)modrm - 0xC0;
-               DIP("ffree %%st(%d)\n", (Int)r_dst);
+               DIP("ffree %%st(%u)\n", r_dst);
                put_ST_TAG ( r_dst, mkU8(0) );
                break;
 
             case 0xD0 ... 0xD7: /* FST %st(0),%st(?) */
                r_dst = (UInt)modrm - 0xD0;
-               DIP("fst %%st(0),%%st(%d)\n", (Int)r_dst);
+               DIP("fst %%st(0),%%st(%u)\n", r_dst);
                /* P4 manual says: "If the destination operand is a
                   non-empty register, the invalid-operation exception
                   is not generated.  Hence put_ST_UNCHECKED. */
@@ -5171,7 +5171,7 @@
 
             case 0xD8 ... 0xDF: /* FSTP %st(0),%st(?) */
                r_dst = (UInt)modrm - 0xD8;
-               DIP("fstp %%st(0),%%st(%d)\n", (Int)r_dst);
+               DIP("fstp %%st(0),%%st(%u)\n", r_dst);
                /* P4 manual says: "If the destination operand is a
                   non-empty register, the invalid-operation exception
                   is not generated.  Hence put_ST_UNCHECKED. */
@@ -5181,7 +5181,7 @@
 
             case 0xE0 ... 0xE7: /* FUCOM %st(0),%st(?) */
                r_dst = (UInt)modrm - 0xE0;
-               DIP("fucom %%st(0),%%st(%d)\n", (Int)r_dst);
+               DIP("fucom %%st(0),%%st(%u)\n", r_dst);
                /* This forces C1 to zero, which isn't right. */
                put_C3210( 
                    binop( Iop_And32,
@@ -5194,7 +5194,7 @@
 
             case 0xE8 ... 0xEF: /* FUCOMP %st(0),%st(?) */
                r_dst = (UInt)modrm - 0xE8;
-               DIP("fucomp %%st(0),%%st(%d)\n", (Int)r_dst);
+               DIP("fucomp %%st(0),%%st(%u)\n", r_dst);
                /* This forces C1 to zero, which isn't right. */
                put_C3210( 
                    binop( Iop_And32,
@@ -5310,7 +5310,7 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
                vex_printf("first_opcode == 0xDE\n");
                goto decode_fail;
          }
@@ -5422,7 +5422,7 @@
                break;
 
             default:
-               vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
+               vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
                vex_printf("first_opcode == 0xDF\n");
                goto decode_fail;
          }
@@ -5642,7 +5642,7 @@
       case 0xFB: op = Iop_Sub64; break;
 
       default: 
-         vex_printf("\n0x%x\n", (Int)opc);
+         vex_printf("\n0x%x\n", opc);
          vpanic("dis_MMXop_regmem_to_reg");
    }
 
@@ -7358,7 +7358,7 @@
                                getXMMReg(eregOfRM(rm))) );
       delta += 2;
       DIP("%s $%d,%s,%s\n", opname,
-                            (Int)imm8,
+                            imm8,
                             nameXMMReg(eregOfRM(rm)),
                             nameXMMReg(gregOfRM(rm)) );
    } else {
@@ -7376,7 +7376,7 @@
       );
       delta += alen+1;
       DIP("%s $%d,%s,%s\n", opname,
-                            (Int)imm8,
+                            imm8,
                             dis_buf,
                             nameXMMReg(gregOfRM(rm)) );
    }
@@ -8890,7 +8890,7 @@
          assign(t4, getIReg(2, eregOfRM(modrm)));
          delta += 3+1;
          lane = insn[3+1-1];
-         DIP("pinsrw $%d,%s,%s\n", (Int)lane, 
+         DIP("pinsrw $%d,%s,%s\n", lane,
                                    nameIReg(2,eregOfRM(modrm)),
                                    nameMMXReg(gregOfRM(modrm)));
       } else {
@@ -8898,7 +8898,7 @@
          delta += 3+alen;
          lane = insn[3+alen-1];
          assign(t4, loadLE(Ity_I16, mkexpr(addr)));
-         DIP("pinsrw $%d,%s,%s\n", (Int)lane, 
+         DIP("pinsrw $%d,%s,%s\n", lane,
                                    dis_buf,
                                    nameMMXReg(gregOfRM(modrm)));
       }
@@ -10974,7 +10974,7 @@
          assign(t4, getIReg(2, eregOfRM(modrm)));
          delta += 3+1;
          lane = insn[3+1-1];
-         DIP("pinsrw $%d,%s,%s\n", (Int)lane, 
+         DIP("pinsrw $%d,%s,%s\n", lane,
                                    nameIReg(2,eregOfRM(modrm)),
                                    nameXMMReg(gregOfRM(modrm)));
       } else {
@@ -10982,7 +10982,7 @@
          delta += 3+alen;
          lane = insn[3+alen-1];
          assign(t4, loadLE(Ity_I16, mkexpr(addr)));
-         DIP("pinsrw $%d,%s,%s\n", (Int)lane, 
+         DIP("pinsrw $%d,%s,%s\n", lane,
                                    dis_buf,
                                    nameXMMReg(gregOfRM(modrm)));
       }
@@ -12567,7 +12567,7 @@
          assign( sV, getMMXReg(eregOfRM(modrm)) );
          d32 = (UInt)insn[3+1];
          delta += 3+1+1;
-         DIP("palignr $%d,%s,%s\n",  (Int)d32, 
+         DIP("palignr $%u,%s,%s\n",  d32,
                                      nameMMXReg(eregOfRM(modrm)),
                                      nameMMXReg(gregOfRM(modrm)));
       } else {
@@ -12575,7 +12575,7 @@
          assign( sV, loadLE(Ity_I64, mkexpr(addr)) );
          d32 = (UInt)insn[3+alen];
          delta += 3+alen+1;
-         DIP("palignr $%d%s,%s\n", (Int)d32,
+         DIP("palignr $%u%s,%s\n", d32,
                                    dis_buf,
                                    nameMMXReg(gregOfRM(modrm)));
       }
@@ -12625,7 +12625,7 @@
          assign( sV, getXMMReg(eregOfRM(modrm)) );
          d32 = (UInt)insn[3+1];
          delta += 3+1+1;
-         DIP("palignr $%d,%s,%s\n", (Int)d32,
+         DIP("palignr $%u,%s,%s\n", d32,
                                     nameXMMReg(eregOfRM(modrm)),
                                     nameXMMReg(gregOfRM(modrm)));
       } else {
@@ -12634,7 +12634,7 @@
          assign( sV, loadLE(Ity_V128, mkexpr(addr)) );
          d32 = (UInt)insn[3+alen];
          delta += 3+alen+1;
-         DIP("palignr $%d,%s,%s\n", (Int)d32,
+         DIP("palignr $%u,%s,%s\n", d32,
                                     dis_buf,
                                     nameXMMReg(gregOfRM(modrm)));
       }
@@ -12885,7 +12885,7 @@
    */
    if (sz == 2 
        && insn[0] == 0x0F && insn[1] == 0x3A
-       && (/*insn[2] == 0x0B || */insn[2] == 0x0A)) {
+       && (insn[2] == 0x0B || insn[2] == 0x0A)) {
 
       Bool   isD = insn[2] == 0x0B;
       IRTemp src = newTemp(isD ? Ity_F64 : Ity_F32);
@@ -13032,7 +13032,7 @@
       d32 = getUDisp16(delta); 
       delta += 2;
       dis_ret(&dres, d32);
-      DIP("ret %d\n", (Int)d32);
+      DIP("ret %u\n", d32);
       break;
    case 0xC3: /* RET */
       dis_ret(&dres, 0);
@@ -13361,41 +13361,43 @@
       if (d32 >= 0x3F && d32 <= 0x4F) {
          jmp_lit(&dres, Ijk_SigSEGV, ((Addr32)guest_EIP_bbstart)+delta-2);
          vassert(dres.whatNext == Dis_StopHere);
-         DIP("int $0x%x\n", (Int)d32);
+         DIP("int $0x%x\n", d32);
          break;
       }
 
       /* Handle int $0x80 (linux syscalls), int $0x81 and $0x82
-         (darwin syscalls).  As part of this, note where we are, so we
+         (darwin syscalls), int $0x91 (Solaris syscalls) and int $0xD2
+         (Solaris fasttrap syscalls).  As part of this, note where we are, so we
          can back up the guest to this point if the syscall needs to
          be restarted. */
-      if (d32 == 0x80) {
-         stmt( IRStmt_Put( OFFB_IP_AT_SYSCALL,
-                           mkU32(guest_EIP_curr_instr) ) );
-         jmp_lit(&dres, Ijk_Sys_int128, ((Addr32)guest_EIP_bbstart)+delta);
-         vassert(dres.whatNext == Dis_StopHere);
-         DIP("int $0x80\n");
+      IRJumpKind jump_kind;
+      switch (d32) {
+      case 0x80:
+         jump_kind = Ijk_Sys_int128;
          break;
-      }
-      if (d32 == 0x81) {
-         stmt( IRStmt_Put( OFFB_IP_AT_SYSCALL,
-                           mkU32(guest_EIP_curr_instr) ) );
-         jmp_lit(&dres, Ijk_Sys_int129, ((Addr32)guest_EIP_bbstart)+delta);
-         vassert(dres.whatNext == Dis_StopHere);
-         DIP("int $0x81\n");
+      case 0x81:
+         jump_kind = Ijk_Sys_int129;
          break;
-      }
-      if (d32 == 0x82) {
-         stmt( IRStmt_Put( OFFB_IP_AT_SYSCALL,
-                           mkU32(guest_EIP_curr_instr) ) );
-         jmp_lit(&dres, Ijk_Sys_int130, ((Addr32)guest_EIP_bbstart)+delta);
-         vassert(dres.whatNext == Dis_StopHere);
-         DIP("int $0x82\n");
+      case 0x82:
+         jump_kind = Ijk_Sys_int130;
          break;
+      case 0x91:
+         jump_kind = Ijk_Sys_int145;
+         break;
+      case 0xD2:
+         jump_kind = Ijk_Sys_int210;
+         break;
+      default:
+         /* none of the above */
+         goto decode_failure;
       }
 
-      /* none of the above */
-      goto decode_failure;
+      stmt( IRStmt_Put( OFFB_IP_AT_SYSCALL,
+                        mkU32(guest_EIP_curr_instr) ) );
+      jmp_lit(&dres, jump_kind, ((Addr32)guest_EIP_bbstart)+delta);
+      vassert(dres.whatNext == Dis_StopHere);
+      DIP("int $0x%x\n", d32);
+      break;
 
    /* ------------------------ Jcond, byte offset --------- */
 
@@ -14413,14 +14415,14 @@
       t1 = newTemp(Ity_I32);
       abyte = getIByte(delta); delta++;
       assign(t1, mkU32( abyte & 0xFF ));
-      DIP("in%c $%d,%s\n", nameISize(sz), (Int)abyte, nameIReg(sz,R_EAX));
+      DIP("in%c $%d,%s\n", nameISize(sz), abyte, nameIReg(sz,R_EAX));
       goto do_IN;
    case 0xE5: /* IN imm8, eAX */
       vassert(sz == 2 || sz == 4);
       t1 = newTemp(Ity_I32);
       abyte = getIByte(delta); delta++;
       assign(t1, mkU32( abyte & 0xFF ));
-      DIP("in%c $%d,%s\n", nameISize(sz), (Int)abyte, nameIReg(sz,R_EAX));
+      DIP("in%c $%d,%s\n", nameISize(sz), abyte, nameIReg(sz,R_EAX));
       goto do_IN;
    case 0xEC: /* IN %DX, AL */
       sz = 1; 
@@ -14461,14 +14463,14 @@
       t1 = newTemp(Ity_I32);
       abyte = getIByte(delta); delta++;
       assign( t1, mkU32( abyte & 0xFF ) );
-      DIP("out%c %s,$%d\n", nameISize(sz), nameIReg(sz,R_EAX), (Int)abyte);
+      DIP("out%c %s,$%d\n", nameISize(sz), nameIReg(sz,R_EAX), abyte);
       goto do_OUT;
    case 0xE7: /* OUT eAX, imm8 */
       vassert(sz == 2 || sz == 4);
       t1 = newTemp(Ity_I32);
       abyte = getIByte(delta); delta++;
       assign( t1, mkU32( abyte & 0xFF ) );
-      DIP("out%c %s,$%d\n", nameISize(sz), nameIReg(sz,R_EAX), (Int)abyte);
+      DIP("out%c %s,$%d\n", nameISize(sz), nameIReg(sz,R_EAX), abyte);
       goto do_OUT;
    case 0xEE: /* OUT AL, %DX */
       sz = 1;
@@ -14842,6 +14844,11 @@
          IRDirty* d     = NULL;
          void*    fAddr = NULL;
          const HChar* fName = NULL;
+         if (archinfo->hwcaps & VEX_HWCAPS_X86_SSE3) {
+            fName = "x86g_dirtyhelper_CPUID_sse3";
+            fAddr = &x86g_dirtyhelper_CPUID_sse3; 
+         } 
+         else
          if (archinfo->hwcaps & VEX_HWCAPS_X86_SSE2) {
             fName = "x86g_dirtyhelper_CPUID_sse2";
             fAddr = &x86g_dirtyhelper_CPUID_sse2; 
@@ -15337,7 +15344,7 @@
 
       case 0x05: /* AMD's syscall */
          stmt( IRStmt_Put( OFFB_IP_AT_SYSCALL,
-              mkU32(guest_EIP_curr_instr) ) );
+                           mkU32(guest_EIP_curr_instr) ) );
          jmp_lit(&dres, Ijk_Sys_syscall, ((Addr32)guest_EIP_bbstart)+delta);
          vassert(dres.whatNext == Dis_StopHere);
          DIP("syscall\n");
@@ -15359,10 +15366,10 @@
    if (sigill_diag) {
       vex_printf("vex x86->IR: unhandled instruction bytes: "
                  "0x%x 0x%x 0x%x 0x%x\n",
-                 (Int)getIByte(delta_start+0),
-                 (Int)getIByte(delta_start+1),
-                 (Int)getIByte(delta_start+2),
-                 (Int)getIByte(delta_start+3) );
+                 getIByte(delta_start+0),
+                 getIByte(delta_start+1),
+                 getIByte(delta_start+2),
+                 getIByte(delta_start+3));
    }
 
    /* Tell the dispatcher that this insn cannot be decoded, and so has
diff --git a/VEX/priv/host_amd64_defs.c b/VEX/priv/host_amd64_defs.c
index 7534e43..9dec78c 100644
--- a/VEX/priv/host_amd64_defs.c
+++ b/VEX/priv/host_amd64_defs.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -910,6 +910,28 @@
    vassert(sz == 4 || sz == 8 || sz == 16);
    return i;
 }
+AMD64Instr* AMD64Instr_SseCStore ( AMD64CondCode cond,
+                                   HReg src, AMD64AMode* addr )
+{
+   AMD64Instr* i         = LibVEX_Alloc_inline(sizeof(AMD64Instr));
+   i->tag                = Ain_SseCStore;
+   i->Ain.SseCStore.cond = cond;
+   i->Ain.SseCStore.src  = src;
+   i->Ain.SseCStore.addr = addr;
+   vassert(cond != Acc_ALWAYS);
+   return i;
+}
+AMD64Instr* AMD64Instr_SseCLoad ( AMD64CondCode cond,
+                                  AMD64AMode* addr, HReg dst )
+{
+   AMD64Instr* i        = LibVEX_Alloc_inline(sizeof(AMD64Instr));
+   i->tag               = Ain_SseCLoad;
+   i->Ain.SseCLoad.cond = cond;
+   i->Ain.SseCLoad.addr = addr;
+   i->Ain.SseCLoad.dst  = dst;
+   vassert(cond != Acc_ALWAYS);
+   return i;
+}
 AMD64Instr* AMD64Instr_SseLdzLO  ( Int sz, HReg reg, AMD64AMode* addr )
 {
    AMD64Instr* i         = LibVEX_Alloc_inline(sizeof(AMD64Instr));
@@ -1268,6 +1290,24 @@
             ppAMD64AMode(i->Ain.SseLdSt.addr);
          }
          return;
+      case Ain_SseCStore:
+         vex_printf("if (%%rflags.%s) { ",
+                    showAMD64CondCode(i->Ain.SseCStore.cond));
+         vex_printf("movups ");
+         ppHRegAMD64(i->Ain.SseCStore.src);
+         vex_printf(", ");
+         ppAMD64AMode(i->Ain.SseCStore.addr);
+         vex_printf(" }");
+         return;
+      case Ain_SseCLoad:
+         vex_printf("if (%%rflags.%s) { ",
+                    showAMD64CondCode(i->Ain.SseCLoad.cond));
+         vex_printf("movups ");
+         ppAMD64AMode(i->Ain.SseCLoad.addr);
+         vex_printf(", ");
+         ppHRegAMD64(i->Ain.SseCLoad.dst);
+         vex_printf(" }");
+         return;
       case Ain_SseLdzLO:
          vex_printf("movs%s ", i->Ain.SseLdzLO.sz==4 ? "s" : "d");
          ppAMD64AMode(i->Ain.SseLdzLO.addr);
@@ -1311,7 +1351,7 @@
          ppHRegAMD64(i->Ain.SseCMov.dst);
          return;
       case Ain_SseShuf:
-         vex_printf("pshufd $0x%x,", i->Ain.SseShuf.order);
+         vex_printf("pshufd $0x%x,", (UInt)i->Ain.SseShuf.order);
          ppHRegAMD64(i->Ain.SseShuf.src);
          vex_printf(",");
          ppHRegAMD64(i->Ain.SseShuf.dst);
@@ -1566,6 +1606,14 @@
          addHRegUse(u, i->Ain.SseLdSt.isLoad ? HRmWrite : HRmRead,
                        i->Ain.SseLdSt.reg);
          return;
+      case Ain_SseCStore:
+         addRegUsage_AMD64AMode(u, i->Ain.SseCStore.addr);
+         addHRegUse(u, HRmRead, i->Ain.SseCStore.src);
+         return;
+      case Ain_SseCLoad:
+         addRegUsage_AMD64AMode(u, i->Ain.SseCLoad.addr);
+         addHRegUse(u, HRmModify, i->Ain.SseCLoad.dst);
+         return;
       case Ain_SseLdzLO:
          addRegUsage_AMD64AMode(u, i->Ain.SseLdzLO.addr);
          addHRegUse(u, HRmWrite, i->Ain.SseLdzLO.reg);
@@ -1799,6 +1847,14 @@
          mapReg(m, &i->Ain.SseLdSt.reg);
          mapRegs_AMD64AMode(m, i->Ain.SseLdSt.addr);
          break;
+      case Ain_SseCStore:
+         mapRegs_AMD64AMode(m, i->Ain.SseCStore.addr);
+         mapReg(m, &i->Ain.SseCStore.src);
+         return;
+      case Ain_SseCLoad:
+         mapRegs_AMD64AMode(m, i->Ain.SseCLoad.addr);
+         mapReg(m, &i->Ain.SseCLoad.dst);
+         return;
       case Ain_SseLdzLO:
          mapReg(m, &i->Ain.SseLdzLO.reg);
          mapRegs_AMD64AMode(m, i->Ain.SseLdzLO.addr);
@@ -2366,7 +2422,7 @@
    UChar* p = &buf[0];
    UChar* ptmp;
    Int    j;
-   vassert(nbuf >= 32);
+   vassert(nbuf >= 64);
    vassert(mode64 == True);
 
    /* vex_printf("asm  "); ppAMD64Instr(i, mode64); vex_printf("\n"); */
@@ -2823,13 +2879,33 @@
                *p++ = 0x48; *p++ = 0xB8; p = emit64(p, 0x5555555555555555ULL);
                break;
             case RLPri_2Int:
-               vassert(0); //ATC
+               goto bad; //ATC
                // movabsq $0x5555555555555555, %rax
                *p++ = 0x48; *p++ = 0xB8; p = emit64(p, 0x5555555555555555ULL);
                // movq %rax, %rdx
                *p++ = 0x48; *p++ = 0x89; *p++ = 0xC2;
+               break;
+            case RLPri_V128SpRel:
+               if (i->Ain.Call.rloc.spOff == 0) {
+                  // We could accept any |spOff| here, but that's more
+                  // hassle and the only value we're ever going to get
+                  // is zero (I believe.)  Hence take the easy path :)
+                  // We need a scag register -- r11 can be it.
+                  // movabsq $0x5555555555555555, %r11
+                  *p++ = 0x49; *p++ = 0xBB;
+                  p = emit64(p, 0x5555555555555555ULL);
+                  // movq %r11, 0(%rsp)
+                  *p++ = 0x4C; *p++ = 0x89; *p++ = 0x1C; *p++ = 0x24;
+                  // movq %r11, 8(%rsp)
+                  *p++ = 0x4C; *p++ = 0x89; *p++ = 0x5C; *p++ = 0x24;
+                  *p++ = 0x08;
+                  break;
+               }
+               goto bad; //ATC for all other spOff values
+            case RLPri_V256SpRel:
+               goto bad; //ATC
             case RLPri_None: case RLPri_INVALID: default:
-               vassert(0);
+               vassert(0); // should never get here
          }
 
          // after:
@@ -3004,6 +3080,7 @@
          case Ijk_ClientReq:   trcval = VEX_TRC_JMP_CLIENTREQ;   break;
          case Ijk_Sys_syscall: trcval = VEX_TRC_JMP_SYS_SYSCALL; break;
          case Ijk_Sys_int32:   trcval = VEX_TRC_JMP_SYS_INT32;   break;
+         case Ijk_Sys_int210:  trcval = VEX_TRC_JMP_SYS_INT210;  break;
          case Ijk_Yield:       trcval = VEX_TRC_JMP_YIELD;       break;
          case Ijk_EmWarn:      trcval = VEX_TRC_JMP_EMWARN;      break;
          case Ijk_MapFail:     trcval = VEX_TRC_JMP_MAPFAIL;     break;
@@ -3080,7 +3157,7 @@
    }
 
    case Ain_CStore: {
-      /* AFAICS this is identical to Ain_CStore except that the opcode
+      /* AFAICS this is identical to Ain_CLoad except that the opcode
          is 0x89 instead of 0x8B. */
       vassert(i->Ain.CStore.cond != Acc_ALWAYS);
 
@@ -3417,6 +3494,60 @@
                            i->Ain.SseLdSt.addr);
       goto done;
 
+   case Ain_SseCStore: {
+      vassert(i->Ain.SseCStore.cond != Acc_ALWAYS);
+
+      /* Use ptmp for backpatching conditional jumps. */
+      ptmp = NULL;
+
+      /* jmp fwds if !condition */
+      *p++ = toUChar(0x70 + (0xF & (i->Ain.SseCStore.cond ^ 1)));
+      ptmp = p; /* fill in this bit later */
+      *p++ = 0; /* # of bytes to jump over; don't know how many yet. */
+
+      /* Now the store. */
+      *p++ = clearWBit(
+             rexAMode_M_enc(vregEnc3210(i->Ain.SseCStore.src),
+                            i->Ain.SseCStore.addr));
+      *p++ = 0x0F; 
+      *p++ = toUChar(0x11);
+      p = doAMode_M_enc(p, vregEnc3210(i->Ain.SseCStore.src),
+                           i->Ain.SseCStore.addr);
+
+      /* Fix up the conditional branch */
+      Int delta = p - ptmp;
+      vassert(delta > 0 && delta < 40);
+      *ptmp = toUChar(delta-1);
+      goto done;
+   }
+
+   case Ain_SseCLoad: {
+      vassert(i->Ain.SseCLoad.cond != Acc_ALWAYS);
+
+      /* Use ptmp for backpatching conditional jumps. */
+      ptmp = NULL;
+
+      /* jmp fwds if !condition */
+      *p++ = toUChar(0x70 + (0xF & (i->Ain.SseCLoad.cond ^ 1)));
+      ptmp = p; /* fill in this bit later */
+      *p++ = 0; /* # of bytes to jump over; don't know how many yet. */
+
+      /* Now the load. */
+      *p++ = clearWBit(
+             rexAMode_M_enc(vregEnc3210(i->Ain.SseCLoad.dst),
+                            i->Ain.SseCLoad.addr));
+      *p++ = 0x0F; 
+      *p++ = toUChar(0x10);
+      p = doAMode_M_enc(p, vregEnc3210(i->Ain.SseCLoad.dst),
+                           i->Ain.SseCLoad.addr);
+
+      /* Fix up the conditional branch */
+      Int delta = p - ptmp;
+      vassert(delta > 0 && delta < 40);
+      *ptmp = toUChar(delta-1);
+      goto done;
+   }
+
    case Ain_SseLdzLO:
       vassert(i->Ain.SseLdzLO.sz == 4 || i->Ain.SseLdzLO.sz == 8);
       /* movs[sd] amode, %xmm-dst */
@@ -3725,7 +3856,7 @@
    /*NOTREACHED*/
    
   done:
-   vassert(p - &buf[0] <= 32);
+   vassert(p - &buf[0] <= 64);
    return p - &buf[0];
 }
 
@@ -3758,7 +3889,7 @@
    UChar* p = (UChar*)place_to_chain;
    vassert(p[0] == 0x49);
    vassert(p[1] == 0xBB);
-   vassert(*(Addr*)(&p[2]) == (Addr)disp_cp_chain_me_EXPECTED);
+   vassert(read_misaligned_ULong_LE(&p[2]) == (Addr)disp_cp_chain_me_EXPECTED);
    vassert(p[10] == 0x41);
    vassert(p[11] == 0xFF);
    vassert(p[12] == 0xD3);
@@ -3807,10 +3938,7 @@
    /* And make the modifications. */
    if (shortOK) {
       p[0]  = 0xE9;
-      p[1]  = (delta >> 0) & 0xFF;
-      p[2]  = (delta >> 8) & 0xFF;
-      p[3]  = (delta >> 16) & 0xFF;
-      p[4]  = (delta >> 24) & 0xFF;
+      write_misaligned_UInt_LE(&p[1], (UInt)(Int)delta);
       p[5]  = 0x0F; p[6]  = 0x0B;
       p[7]  = 0x0F; p[8]  = 0x0B;
       p[9]  = 0x0F; p[10] = 0x0B;
@@ -3820,7 +3948,7 @@
       vassert(delta == 0LL || delta == -1LL);
    } else {
       /* Minimal modifications from the starting sequence. */   
-     *(Addr*)(&p[2]) = (Addr)place_to_jump_to;
+      write_misaligned_ULong_LE(&p[2], (ULong)(Addr)place_to_jump_to);
       p[12] = 0xE3;
    }
    VexInvalRange vir = { (HWord)place_to_chain, 13 };
@@ -3855,7 +3983,8 @@
    UChar* p     = (UChar*)place_to_unchain;
    Bool   valid = False;
    if (p[0] == 0x49 && p[1] == 0xBB
-       && *(Addr*)(&p[2]) == (Addr)place_to_jump_to_EXPECTED
+       && read_misaligned_ULong_LE(&p[2])
+          == (ULong)(Addr)place_to_jump_to_EXPECTED
        && p[10] == 0x41 && p[11] == 0xFF && p[12] == 0xE3) {
       /* it's the long form */
       valid = True;
@@ -3867,7 +3996,7 @@
        && p[9]  == 0x0F && p[10] == 0x0B
        && p[11] == 0x0F && p[12] == 0x0B) {
       /* It's the short form.  Check the offset is right. */
-      Int  s32 = *(Int*)(&p[1]);
+      Int  s32 = (Int)read_misaligned_UInt_LE(&p[1]);
       Long s64 = (Long)s32;
       if ((UChar*)p + 5 + s64 == place_to_jump_to_EXPECTED) {
          valid = True;
@@ -3886,7 +4015,7 @@
    */
    p[0] = 0x49;
    p[1] = 0xBB;
-   *(Addr*)(&p[2]) = (Addr)disp_cp_chain_me;
+   write_misaligned_ULong_LE(&p[2], (ULong)(Addr)disp_cp_chain_me);
    p[10] = 0x41;
    p[11] = 0xFF;
    p[12] = 0xD3;
diff --git a/VEX/priv/host_amd64_defs.h b/VEX/priv/host_amd64_defs.h
index f76cd83..fe999f2 100644
--- a/VEX/priv/host_amd64_defs.h
+++ b/VEX/priv/host_amd64_defs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -390,6 +390,8 @@
       Ain_SseSDSS,     /* scalar float32 to/from float64 */
       Ain_SseLdSt,     /* SSE load/store 32/64/128 bits, no alignment
                           constraints, upper 96/64/0 bits arbitrary */
+      Ain_SseCStore,   /* SSE conditional store, 128 bit only, any alignment */
+      Ain_SseCLoad,    /* SSE conditional load, 128 bit only, any alignment */
       Ain_SseLdzLO,    /* SSE load low 32/64 bits, zero remainder of reg */
       Ain_Sse32Fx4,    /* SSE binary, 32Fx4 */
       Ain_Sse32FLo,    /* SSE binary, 32F in lowest lane only */
@@ -642,6 +644,16 @@
             AMD64AMode* addr;
          } SseLdSt;
          struct {
+            AMD64CondCode cond; /* may not be Acc_ALWAYS */
+            HReg          src;
+            AMD64AMode*   addr;
+         } SseCStore;
+         struct {
+            AMD64CondCode cond; /* may not be Acc_ALWAYS */
+            AMD64AMode*   addr;
+            HReg          dst;
+         } SseCLoad;
+         struct {
             Int         sz; /* 4 or 8 only */
             HReg        reg;
             AMD64AMode* addr;
@@ -751,6 +763,8 @@
 extern AMD64Instr* AMD64Instr_SseSF2SI   ( Int szS, Int szD, HReg src, HReg dst );
 extern AMD64Instr* AMD64Instr_SseSDSS    ( Bool from64, HReg src, HReg dst );
 extern AMD64Instr* AMD64Instr_SseLdSt    ( Bool isLoad, Int sz, HReg, AMD64AMode* );
+extern AMD64Instr* AMD64Instr_SseCStore  ( AMD64CondCode, HReg, AMD64AMode* );
+extern AMD64Instr* AMD64Instr_SseCLoad   ( AMD64CondCode, AMD64AMode*, HReg );
 extern AMD64Instr* AMD64Instr_SseLdzLO   ( Int sz, HReg, AMD64AMode* );
 extern AMD64Instr* AMD64Instr_Sse32Fx4   ( AMD64SseOp, HReg, HReg );
 extern AMD64Instr* AMD64Instr_Sse32FLo   ( AMD64SseOp, HReg, HReg );
diff --git a/VEX/priv/host_amd64_isel.c b/VEX/priv/host_amd64_isel.c
index 3403d54..a08c980 100644
--- a/VEX/priv/host_amd64_isel.c
+++ b/VEX/priv/host_amd64_isel.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -4298,21 +4298,35 @@
 
       UChar szB = 0; /* invalid */
       switch (lg->cvt) {
-         case ILGop_Ident32: szB = 4; break;
-         case ILGop_Ident64: szB = 8; break;
+         case ILGop_Ident32:   szB = 4;  break;
+         case ILGop_Ident64:   szB = 8;  break;
+         case ILGop_IdentV128: szB = 16; break;
          default: break;
       }
       if (szB == 0)
          goto stmt_fail;
 
-      AMD64AMode* amAddr = iselIntExpr_AMode(env, lg->addr);
-      HReg rAlt  = iselIntExpr_R(env, lg->alt);
-      HReg rDst  = lookupIRTemp(env, lg->dst);
+      AMD64AMode* amAddr
+         = iselIntExpr_AMode(env, lg->addr);
+      HReg rAlt
+         = szB == 16 ? iselVecExpr(env, lg->alt)
+                     : iselIntExpr_R(env, lg->alt);
+      HReg rDst
+         = lookupIRTemp(env, lg->dst);
+
       /* Get the alt value into the dst.  We'll do a conditional load
          which overwrites it -- or not -- with loaded data. */
-      addInstr(env, mk_iMOVsd_RR(rAlt, rDst));
+      if (szB == 16) {
+         addInstr(env, mk_vMOVsd_RR(rAlt, rDst));
+      } else {
+         addInstr(env, mk_iMOVsd_RR(rAlt, rDst));
+      }
       AMD64CondCode cc = iselCondCode(env, lg->guard);
-      addInstr(env, AMD64Instr_CLoad(cc, szB, amAddr, rDst));
+      if (szB == 16) {
+         addInstr(env, AMD64Instr_SseCLoad(cc, amAddr, rDst));
+      } else {
+         addInstr(env, AMD64Instr_CLoad(cc, szB, amAddr, rDst));
+      }
       return;
    }
 
@@ -4324,17 +4338,26 @@
 
       UChar szB = 0; /* invalid */
       switch (typeOfIRExpr(env->type_env, sg->data)) {
-         case Ity_I32: szB = 4; break;
-         case Ity_I64: szB = 8; break;
+         case Ity_I32:  szB = 4; break;
+         case Ity_I64:  szB = 8; break;
+         case Ity_V128: szB = 16; break;
          default: break;
       }
       if (szB == 0)
          goto stmt_fail;
 
-      AMD64AMode*   amAddr = iselIntExpr_AMode(env, sg->addr);
-      HReg          rSrc   = iselIntExpr_R(env, sg->data);
-      AMD64CondCode cc     = iselCondCode(env, sg->guard);
-      addInstr(env, AMD64Instr_CStore(cc, szB, rSrc, amAddr));
+      AMD64AMode* amAddr
+         = iselIntExpr_AMode(env, sg->addr);
+      HReg rSrc
+         = szB == 16 ? iselVecExpr(env, sg->data)
+                     : iselIntExpr_R(env, sg->data);
+      AMD64CondCode cc
+         = iselCondCode(env, sg->guard);
+      if (szB == 16) {
+         addInstr(env, AMD64Instr_SseCStore(cc, rSrc, amAddr));
+      } else {
+         addInstr(env, AMD64Instr_CStore(cc, szB, rSrc, amAddr));
+      }
       return;
    }
 
@@ -4774,6 +4797,7 @@
          case Ijk_SigSEGV:
          case Ijk_SigTRAP:
          case Ijk_Sys_syscall:
+         case Ijk_Sys_int210:
          case Ijk_InvalICache:
          case Ijk_Yield:
          {
@@ -4869,6 +4893,7 @@
       case Ijk_SigSEGV:
       case Ijk_SigTRAP:
       case Ijk_Sys_syscall:
+      case Ijk_Sys_int210:
       case Ijk_InvalICache:
       case Ijk_Yield: {
          HReg        r     = iselIntExpr_R(env, next);
diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c
index b886e81..82f658e 100644
--- a/VEX/priv/host_arm64_defs.c
+++ b/VEX/priv/host_arm64_defs.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -3617,7 +3617,7 @@
             case Ijk_ClientReq:   trcval = VEX_TRC_JMP_CLIENTREQ;   break;
             case Ijk_Sys_syscall: trcval = VEX_TRC_JMP_SYS_SYSCALL; break;
             //case Ijk_Sys_int128:  trcval = VEX_TRC_JMP_SYS_INT128;  break;
-            //case Ijk_Yield:       trcval = VEX_TRC_JMP_YIELD;       break;
+            case Ijk_Yield:       trcval = VEX_TRC_JMP_YIELD;       break;
             //case Ijk_EmWarn:      trcval = VEX_TRC_JMP_EMWARN;      break;
             //case Ijk_MapFail:     trcval = VEX_TRC_JMP_MAPFAIL;     break;
             case Ijk_NoDecode:    trcval = VEX_TRC_JMP_NODECODE;    break;
diff --git a/VEX/priv/host_arm64_defs.h b/VEX/priv/host_arm64_defs.h
index 039fce1..d74f8a1 100644
--- a/VEX/priv/host_arm64_defs.h
+++ b/VEX/priv/host_arm64_defs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c
index 0568fde..a572408 100644
--- a/VEX/priv/host_arm64_isel.c
+++ b/VEX/priv/host_arm64_isel.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -3870,9 +3870,7 @@
          = mk_baseblock_64bit_access_amode(stmt->Ist.Exit.offsIP);
 
       /* Case: boring transfer to known address */
-      if (stmt->Ist.Exit.jk == Ijk_Boring
-          /*ATC || stmt->Ist.Exit.jk == Ijk_Call */
-          /*ATC || stmt->Ist.Exit.jk == Ijk_Ret */ ) {
+      if (stmt->Ist.Exit.jk == Ijk_Boring) {
          if (env->chainingAllowed) {
             /* .. almost always true .. */
             /* Skip the event check at the dst if this is a forwards
@@ -3892,6 +3890,26 @@
          return;
       }
 
+      /* Case: assisted transfer to arbitrary address */
+      switch (stmt->Ist.Exit.jk) {
+         /* Keep this list in sync with that for iselNext below */
+         case Ijk_ClientReq:
+         case Ijk_NoDecode:
+         case Ijk_NoRedir:
+         case Ijk_Sys_syscall:
+         case Ijk_InvalICache:
+         case Ijk_FlushDCache:
+         case Ijk_SigTRAP:
+         case Ijk_Yield: {
+            HReg r = iselIntExpr_R(env, IRExpr_Const(stmt->Ist.Exit.dst));
+            addInstr(env, ARM64Instr_XAssisted(r, amPC, cc,
+                                               stmt->Ist.Exit.jk));
+            return;
+         }
+         default:
+            break;
+      }
+
       /* Do we ever expect to see any other kind? */
       goto stmt_fail;
    }
@@ -3975,6 +3993,7 @@
       case Ijk_InvalICache:
       case Ijk_FlushDCache:
       case Ijk_SigTRAP:
+      case Ijk_Yield:
       {
          HReg        r    = iselIntExpr_R(env, next);
          ARM64AMode* amPC = mk_baseblock_64bit_access_amode(offsIP);
diff --git a/VEX/priv/host_arm_defs.c b/VEX/priv/host_arm_defs.c
index 310271d..82d5519 100644
--- a/VEX/priv/host_arm_defs.c
+++ b/VEX/priv/host_arm_defs.c
@@ -7,11 +7,11 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    NEON support is
-   Copyright (C) 2010-2013 Samsung Electronics
+   Copyright (C) 2010-2015 Samsung Electronics
    contributed by Dmitry Zhurikhin <zhur@ispras.ru>
               and Kirill Batuzov <batuzovk@ispras.ru>
 
@@ -656,7 +656,7 @@
 {
    ppHRegARM(p->reg);
    if (p->tag == ARMNRS_Scalar) {
-      vex_printf("[%d]", p->index);
+      vex_printf("[%u]", p->index);
    }
 }
 
@@ -1889,7 +1889,7 @@
              i->ARMin.NUnary.op == ARMneon_VCVTFtoFixedU ||
              i->ARMin.NUnary.op == ARMneon_VCVTFixedStoF ||
              i->ARMin.NUnary.op == ARMneon_VCVTFixedUtoF) {
-            vex_printf(", #%d", i->ARMin.NUnary.size);
+            vex_printf(", #%u", i->ARMin.NUnary.size);
          }
          if (i->ARMin.NUnary.op == ARMneon_VQSHLNSS ||
              i->ARMin.NUnary.op == ARMneon_VQSHLNUU ||
@@ -1897,13 +1897,13 @@
             UInt size;
             size = i->ARMin.NUnary.size;
             if (size & 0x40) {
-               vex_printf(", #%d", size - 64);
+               vex_printf(", #%u", size - 64);
             } else if (size & 0x20) {
-               vex_printf(", #%d", size - 32);
+               vex_printf(", #%u", size - 32);
             } else if (size & 0x10) {
-               vex_printf(", #%d", size - 16);
+               vex_printf(", #%u", size - 16);
             } else if (size & 0x08) {
-               vex_printf(", #%d", size - 8);
+               vex_printf(", #%u", size - 8);
             }
          }
          return;
@@ -1973,7 +1973,7 @@
          vex_printf(", ");
          ppHRegARM(i->ARMin.Add32.rN);
          vex_printf(", ");
-         vex_printf("%d", i->ARMin.Add32.imm32);
+         vex_printf("%u", i->ARMin.Add32.imm32);
          return;
       case ARMin_EvCheck:
          vex_printf("(evCheck) ldr r12,");
diff --git a/VEX/priv/host_arm_defs.h b/VEX/priv/host_arm_defs.h
index f0b172b..47f459d 100644
--- a/VEX/priv/host_arm_defs.h
+++ b/VEX/priv/host_arm_defs.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_arm_isel.c b/VEX/priv/host_arm_isel.c
index b867c3d..1513112 100644
--- a/VEX/priv/host_arm_isel.c
+++ b/VEX/priv/host_arm_isel.c
@@ -7,11 +7,11 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    NEON support is
-   Copyright (C) 2010-2013 Samsung Electronics
+   Copyright (C) 2010-2015 Samsung Electronics
    contributed by Dmitry Zhurikhin <zhur@ispras.ru>
               and Kirill Batuzov <batuzovk@ispras.ru>
 
diff --git a/VEX/priv/host_generic_maddf.c b/VEX/priv/host_generic_maddf.c
index d4e9fb7..fe44974 100644
--- a/VEX/priv/host_generic_maddf.c
+++ b/VEX/priv/host_generic_maddf.c
@@ -5,7 +5,7 @@
 
 /* 
    Compute x * y + z as ternary operation.
-   Copyright (C) 2010-2013 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2010.
 
diff --git a/VEX/priv/host_generic_maddf.h b/VEX/priv/host_generic_maddf.h
index 6757f74..7282d97 100644
--- a/VEX/priv/host_generic_maddf.h
+++ b/VEX/priv/host_generic_maddf.h
@@ -5,7 +5,7 @@
 
 /* 
    Compute x * y + z as ternary operation.
-   Copyright (C) 2010-2013 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2010.
 
diff --git a/VEX/priv/host_generic_reg_alloc2.c b/VEX/priv/host_generic_reg_alloc2.c
index b303606..fd46486 100644
--- a/VEX/priv/host_generic_reg_alloc2.c
+++ b/VEX/priv/host_generic_reg_alloc2.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_generic_regs.c b/VEX/priv/host_generic_regs.c
index a6192f7..33fc7a3 100644
--- a/VEX/priv/host_generic_regs.c
+++ b/VEX/priv/host_generic_regs.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_generic_regs.h b/VEX/priv/host_generic_regs.h
index b6de07b..5c4804e 100644
--- a/VEX/priv/host_generic_regs.h
+++ b/VEX/priv/host_generic_regs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_generic_simd128.c b/VEX/priv/host_generic_simd128.c
index 22df708..77a3183 100644
--- a/VEX/priv/host_generic_simd128.c
+++ b/VEX/priv/host_generic_simd128.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 OpenWorks GbR
+   Copyright (C) 2010-2015 OpenWorks GbR
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_generic_simd128.h b/VEX/priv/host_generic_simd128.h
index c30c0df..c547666 100644
--- a/VEX/priv/host_generic_simd128.h
+++ b/VEX/priv/host_generic_simd128.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 OpenWorks GbR
+   Copyright (C) 2010-2015 OpenWorks GbR
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_generic_simd256.c b/VEX/priv/host_generic_simd256.c
index c5dd7b6..045ee8d 100644
--- a/VEX/priv/host_generic_simd256.c
+++ b/VEX/priv/host_generic_simd256.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2012-2013 OpenWorks GbR
+   Copyright (C) 2012-2015 OpenWorks GbR
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_generic_simd256.h b/VEX/priv/host_generic_simd256.h
index 2913435..ffb55f4 100644
--- a/VEX/priv/host_generic_simd256.h
+++ b/VEX/priv/host_generic_simd256.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2012-2013 OpenWorks GbR
+   Copyright (C) 2012-2015 OpenWorks GbR
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_generic_simd64.c b/VEX/priv/host_generic_simd64.c
index 367491f..be70f5d 100644
--- a/VEX/priv/host_generic_simd64.c
+++ b/VEX/priv/host_generic_simd64.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_generic_simd64.h b/VEX/priv/host_generic_simd64.h
index e8d33df..c01e3c9 100644
--- a/VEX/priv/host_generic_simd64.h
+++ b/VEX/priv/host_generic_simd64.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_mips_defs.c b/VEX/priv/host_mips_defs.c
index d85a306..7d73ecc 100644
--- a/VEX/priv/host_mips_defs.c
+++ b/VEX/priv/host_mips_defs.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
@@ -397,7 +397,7 @@
          ret = "c.ngt.d";
          break;
       default:
-         vex_printf("Unknown op: %d", op);
+         vex_printf("Unknown op: %d", (Int)op);
          vpanic("showMIPSFpOp");
          break;
    }
@@ -2135,7 +2135,7 @@
             UInt func)
 {
    if (rs >= 0x20)
-      vex_printf("rs = %d\n", rs);
+      vex_printf("rs = %u\n", rs);
    UInt theInstr;
    vassert(opc < 0x40);
    vassert(rs < 0x20);
@@ -2534,13 +2534,9 @@
             /* Malu_ADD, Malu_SUB, Malu_AND, Malu_OR, Malu_NOR, Malu_XOR, Malu_SLT */
             case Malu_ADD:
                if (immR) {
-                  vassert(srcR->Mrh.Imm.imm16 != 0x8000);
-                  if (srcR->Mrh.Imm.syned)
-                     /* addi */
-                     p = mkFormI(p, 9, r_srcL, r_dst, srcR->Mrh.Imm.imm16);
-                  else
-                     /* addiu */
-                     p = mkFormI(p, 9, r_srcL, r_dst, srcR->Mrh.Imm.imm16);
+                  vassert(srcR->Mrh.Imm.syned);
+                  /* addiu */
+                  p = mkFormI(p, 9, r_srcL, r_dst, srcR->Mrh.Imm.imm16);
                } else {
                   /* addu */
                   p = mkFormR(p, 0, r_srcL, r_srcR, r_dst, 0, 33);
@@ -2548,10 +2544,10 @@
                break;
             case Malu_SUB:
                if (immR) {
-                  /* addi , but with negated imm */
+                  /* addiu , but with negated imm */
                   vassert(srcR->Mrh.Imm.syned);
                   vassert(srcR->Mrh.Imm.imm16 != 0x8000);
-                  p = mkFormI(p, 8, r_srcL, r_dst, (-srcR->Mrh.Imm.imm16));
+                  p = mkFormI(p, 9, r_srcL, r_dst, (-srcR->Mrh.Imm.imm16));
                } else {
                   /* subu */
                   p = mkFormR(p, 0, r_srcL, r_srcR, r_dst, 0, 35);
diff --git a/VEX/priv/host_mips_defs.h b/VEX/priv/host_mips_defs.h
index 500c97f..8504498 100644
--- a/VEX/priv/host_mips_defs.h
+++ b/VEX/priv/host_mips_defs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_mips_isel.c b/VEX/priv/host_mips_isel.c
index 213c52a..a4a89cb 100644
--- a/VEX/priv/host_mips_isel.c
+++ b/VEX/priv/host_mips_isel.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_ppc_defs.c b/VEX/priv/host_ppc_defs.c
index e9de08b..13b193c 100644
--- a/VEX/priv/host_ppc_defs.c
+++ b/VEX/priv/host_ppc_defs.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -5510,7 +5510,7 @@
          break;
       default:
          vex_printf("ERROR: emit_PPCInstr quad default case %d \n",
-                    i->Pin.DfpShift128.op);
+                    (Int)i->Pin.DfpShift128.op);
          goto bad;
       }
 
diff --git a/VEX/priv/host_ppc_defs.h b/VEX/priv/host_ppc_defs.h
index 8f41190..c04c994 100644
--- a/VEX/priv/host_ppc_defs.h
+++ b/VEX/priv/host_ppc_defs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_ppc_isel.c b/VEX/priv/host_ppc_isel.c
index 40fe895..43e7989 100644
--- a/VEX/priv/host_ppc_isel.c
+++ b/VEX/priv/host_ppc_isel.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -2475,19 +2475,21 @@
 static Bool uInt_fits_in_16_bits ( UInt u ) 
 {
    /* Is u the same as the sign-extend of its lower 16 bits? */
-   Int i = u & 0xFFFF;
-   i <<= 16;
-   i >>= 16;
-   return toBool(u == (UInt)i);
+   UInt v = u & 0xFFFF;
+
+   v = (Int)(v << 16) >> 16;   /* sign extend */
+
+   return u == v;
 }
 
 static Bool uLong_fits_in_16_bits ( ULong u ) 
 {
    /* Is u the same as the sign-extend of its lower 16 bits? */
-   Long i = u & 0xFFFFULL;
-   i <<= 48;
-   i >>= 48;
-   return toBool(u == (ULong)i);
+   ULong v = u & 0xFFFFULL;
+
+   v = (Long)(v << 48) >> 48;   /* sign extend */
+
+   return u == v;
 }
 
 static Bool uLong_is_4_aligned ( ULong u )
@@ -4362,7 +4364,7 @@
        }
       default:
          vex_printf( "ERROR: iselDfp64Expr_wrk, UNKNOWN unop case %d\n",
-                     e->Iex.Unop.op );
+                     (Int)e->Iex.Unop.op );
       }
    }
 
@@ -4721,7 +4723,7 @@
       }
       default:
          vex_printf( "ERROR: iselDfp128Expr_wrk, UNKNOWN binop case %d\n",
-                     e->Iex.Binop.op );
+                     (Int)e->Iex.Binop.op );
          break;
       }
    }
diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c
index 974ec6d..9885d47 100644
--- a/VEX/priv/host_s390_defs.c
+++ b/VEX/priv/host_s390_defs.c
@@ -8,8 +8,8 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
-   Copyright (C) 2012-2013  Florian Krohm   (britzel@acm.org)
+   Copyright IBM Corp. 2010-2015
+   Copyright (C) 2012-2015  Florian Krohm   (britzel@acm.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -108,8 +108,8 @@
    if (hregIsVirtual(reg)) {
       buf[0] = '\0';
       switch (hregClass(reg)) {
-      case HRcInt64: vex_sprintf(buf, "%%vR%d", r); break;
-      case HRcFlt64: vex_sprintf(buf, "%%vF%d", r); break;
+      case HRcInt64: vex_sprintf(buf, "%%vR%u", r); break;
+      case HRcFlt64: vex_sprintf(buf, "%%vF%u", r); break;
       default:       goto fail;
       }
       return buf;
@@ -3939,6 +3939,57 @@
 
 
 static UChar *
+s390_emit_FIEBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
+{
+   vassert(m3 == 0 || s390_host_has_fpext);
+
+   if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
+      if (m4 == 0)
+         s390_disasm(ENC4(MNM, FPR, UINT, FPR), "fiebr", r1, m3, r2);
+      else
+         s390_disasm(ENC5(MNM, FPR, UINT, FPR, UINT),
+                     "fiebra", r1, m3, r2, m4);
+   }
+
+   return emit_RRF2(p, 0xb3570000, m3, m4, r1, r2);
+}
+
+
+static UChar *
+s390_emit_FIDBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
+{
+   vassert(m3 == 0 || s390_host_has_fpext);
+
+   if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
+      if (m4 == 0)
+         s390_disasm(ENC4(MNM, FPR, UINT, FPR), "fidbr", r1, m3, r2);
+      else
+         s390_disasm(ENC5(MNM, FPR, UINT, FPR, UINT),
+                     "fidbra", r1, m3, r2, m4);
+   }
+
+   return emit_RRF2(p, 0xb35f0000, m3, m4, r1, r2);
+}
+
+
+static UChar *
+s390_emit_FIXBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
+{
+   vassert(m3 == 0 || s390_host_has_fpext);
+
+   if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
+      if (m4 == 0)
+         s390_disasm(ENC4(MNM, FPR, UINT, FPR), "fixbr", r1, m3, r2);
+      else
+         s390_disasm(ENC5(MNM, FPR, UINT, FPR, UINT),
+                     "fixbra", r1, m3, r2, m4);
+   }
+
+   return emit_RRF2(p, 0xb3470000, m3, m4, r1, r2);
+}
+
+
+static UChar *
 s390_emit_MEEBR(UChar *p, UChar r1, UChar r2)
 {
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
@@ -5714,7 +5765,7 @@
 }
 
 
-static s390_insn *
+s390_insn *
 s390_insn_bfp128_convert(UChar size, s390_bfp_conv_t tag, HReg dst_hi,
                          HReg dst_lo, HReg op_hi, HReg op_lo,
                          s390_bfp_round_t rounding_mode)
@@ -5722,9 +5773,10 @@
    s390_insn *insn = LibVEX_Alloc_inline(sizeof(s390_insn));
 
    if (size == 16) {
-      /* From smaller size to 16 bytes */
+      /* From smaller or equal size to 16 bytes */
       vassert(is_valid_fp128_regpair(dst_hi, dst_lo));
-      vassert(hregIsInvalid(op_lo));
+      vassert(hregIsInvalid(op_lo)
+              || is_valid_fp128_regpair(op_hi, op_lo));
    } else {
       /* From 16 bytes to smaller size */
       vassert(is_valid_fp128_regpair(op_hi, op_lo));
@@ -6388,7 +6440,7 @@
          continue;
 
       case 'G':     /* %G = guest state @ offset */
-         p += vex_sprintf(p, "guest[%d]", va_arg(args, UInt));
+         p += vex_sprintf(p, "guest[%u]", va_arg(args, UInt));
          continue;
 
       case 'C':     /* %C = condition code */
@@ -6407,7 +6459,7 @@
 
          for (i = 0; i < num_args; ++i) {
             if (i != 0) p += vex_sprintf(p, ", ");
-            p += vex_sprintf(p, "r%d", s390_gprno_from_arg_index(i));
+            p += vex_sprintf(p, "r%u", s390_gprno_from_arg_index(i));
          }
          continue;
       }
@@ -6693,6 +6745,9 @@
       case S390_BFP_F64_TO_F128:
       case S390_BFP_F128_TO_F32:
       case S390_BFP_F128_TO_F64: op = "v-f2f"; break;
+      case S390_BFP_F32_TO_F32I:
+      case S390_BFP_F64_TO_F64I:
+      case S390_BFP_F128_TO_F128I: op = "v-f2fi"; break;
       default: goto fail;
       }
       s390_sprintf(buf, "%M %R,%R", op, insn->variant.bfp_convert.dst_hi,
@@ -8964,6 +9019,11 @@
    case S390_BFP_F128_TO_F32: return s390_emit_LEXBRA(buf, m3, m4, r1, r2);
    case S390_BFP_F128_TO_F64: return s390_emit_LDXBRA(buf, m3, m4, r1, r2);
 
+      /* Load FP integer */
+   case S390_BFP_F32_TO_F32I: return s390_emit_FIEBRA(buf, m3, m4, r1, r2);
+   case S390_BFP_F64_TO_F64I: return s390_emit_FIDBRA(buf, m3, m4, r1, r2);
+   case S390_BFP_F128_TO_F128I: return s390_emit_FIXBRA(buf, m3, m4, r1, r2);
+
    default: goto fail;
    }
 
diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h
index 9d732f9..a7c4b1e 100644
--- a/VEX/priv/host_s390_defs.h
+++ b/VEX/priv/host_s390_defs.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -242,7 +242,10 @@
    S390_BFP_F128_TO_U32,
    S390_BFP_F128_TO_U64,
    S390_BFP_F128_TO_F32,
-   S390_BFP_F128_TO_F64
+   S390_BFP_F128_TO_F64,
+   S390_BFP_F32_TO_F32I,
+   S390_BFP_F64_TO_F64I,
+   S390_BFP_F128_TO_F128I
 } s390_bfp_conv_t;
 
 /* Type conversion operations: to and/or from decimal floating point */
@@ -658,6 +661,9 @@
 s390_insn *s390_insn_bfp_compare(UChar size, HReg dst, HReg op1, HReg op2);
 s390_insn *s390_insn_bfp_convert(UChar size, s390_bfp_conv_t tag, HReg dst,
                                  HReg op, s390_bfp_round_t);
+s390_insn *s390_insn_bfp128_convert(UChar size, s390_bfp_conv_t tag, HReg dst_hi,
+                                    HReg dst_lo, HReg op_hi, HReg op_lo,
+                                    s390_bfp_round_t rounding_mode);
 s390_insn *s390_insn_bfp128_binop(UChar size, s390_bfp_binop_t, HReg dst_hi,
                                   HReg dst_lo, HReg op2_hi, HReg op2_lo);
 s390_insn *s390_insn_bfp128_unop(UChar size, s390_bfp_unop_t, HReg dst_hi,
diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c
index dee892a..02f399d 100644
--- a/VEX/priv/host_s390_isel.c
+++ b/VEX/priv/host_s390_isel.c
@@ -8,8 +8,8 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
-   Copyright (C) 2012-2013  Florian Krohm   (britzel@acm.org)
+   Copyright IBM Corp. 2010-2015
+   Copyright (C) 2012-2015  Florian Krohm   (britzel@acm.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -559,7 +559,7 @@
          IRType type = typeOfIRExpr(env->type_env, args[i]);
          if (type != Ity_I64) {
             ++arg_errors;
-            vex_printf("calling %s: argument #%d has type ", callee->name, i);
+            vex_printf("calling %s: argument #%u has type ", callee->name, i);
             ppIRType(type);
             vex_printf("; Ity_I64 is required\n");
          }
@@ -2143,6 +2143,42 @@
          return;
       }
 
+      case Iop_RoundF128toInt: {
+         IRExpr *irrm;
+         IRExpr *left;
+         s390_bfp_round_t rm;
+         HReg op_hi, op_lo;
+         HReg f0, f2, f4, f6;           /* real registers */
+
+         f4 = make_fpr(4); /* source */
+         f6 = make_fpr(6); /* source */
+         f0 = make_fpr(0); /* destination */
+         f2 = make_fpr(2); /* destination */
+
+         irrm = expr->Iex.Binop.arg1;
+         left = expr->Iex.Binop.arg2;
+         
+         if (s390_host_has_fpext) {
+            rm = get_bfp_rounding_mode(env, irrm);
+         } else {
+            set_bfp_rounding_mode_in_fpc(env, irrm);
+            rm = S390_BFP_ROUND_PER_FPC;
+         }
+
+         s390_isel_float128_expr(&op_hi, &op_lo, env, left);
+         /* operand --> (f4, f6) */
+         addInstr(env, s390_insn_move(8, f4, op_hi));
+         addInstr(env, s390_insn_move(8, f6, op_lo));
+         addInstr(env, s390_insn_bfp128_convert(16, S390_BFP_F128_TO_F128I,
+                                                f0, f2, f4, f6, rm));
+         /* (f0, f2) --> destination */
+         *dst_hi = newVRegF(env);
+         *dst_lo = newVRegF(env);
+         addInstr(env, s390_insn_move(8, *dst_hi, f0));
+         addInstr(env, s390_insn_move(8, *dst_lo, f2));
+         return;
+      }
+
       default:
          goto irreducible;
       }
@@ -2378,6 +2414,8 @@
          return dst;
 
       case Iop_F64toF32:  conv = S390_BFP_F64_TO_F32; goto convert_float;
+      case Iop_RoundF32toInt: conv = S390_BFP_F32_TO_F32I; goto convert_float;
+      case Iop_RoundF64toInt: conv = S390_BFP_F64_TO_F64I; goto convert_float;
       case Iop_I32StoF32: conv = S390_BFP_I32_TO_F32; goto convert_int;
       case Iop_I32UtoF32: conv = S390_BFP_U32_TO_F32; goto convert_int;
       case Iop_I64StoF32: conv = S390_BFP_I64_TO_F32; goto convert_int;
diff --git a/VEX/priv/host_tilegx_defs.c b/VEX/priv/host_tilegx_defs.c
index 92ca2c7..fc259e9 100644
--- a/VEX/priv/host_tilegx_defs.c
+++ b/VEX/priv/host_tilegx_defs.c
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013 Tilera Corp.
+  Copyright (C) 2010-2015 Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -1271,7 +1271,7 @@
       if (op->type == TILEGX_OP_TYPE_REGISTER)
         vex_printf("r%d", (Int) decoded[i].operand_values[n]);
       else
-        vex_printf("%ld", (unsigned long)decoded[i].operand_values[n]);
+        vex_printf("%llu", (ULong)decoded[i].operand_values[n]);
 
       if (n != (decoded[i].opcode->num_operands - 1))
         vex_printf(", ");
@@ -1306,7 +1306,7 @@
 
     Int n, k, bundled = 0;
 
-    for(k = 0; decode[k].opcode && (k <TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE);
+    for(k = 0; (k < TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE) && decode[k].opcode;
         k++) {
       if (decode[k].opcode->mnemonic != TILEGX_OPC_FNOP)
         bundled++;
@@ -1317,7 +1317,7 @@
       vex_printf("{ ");
 
     n = bundled;
-    for(k = 0; decode[k].opcode && (k <TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE);
+    for(k = 0; (k < TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE) && decode[k].opcode;
         k++) {
       if (decode[k].opcode->mnemonic == TILEGX_OPC_FNOP)
         continue;
diff --git a/VEX/priv/host_tilegx_defs.h b/VEX/priv/host_tilegx_defs.h
index 8788e1a..344a440 100644
--- a/VEX/priv/host_tilegx_defs.h
+++ b/VEX/priv/host_tilegx_defs.h
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013 Tilera Corp.
+  Copyright (C) 2010-2015 Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/VEX/priv/host_tilegx_isel.c b/VEX/priv/host_tilegx_isel.c
index 7e4e6eb..0c9ea65 100644
--- a/VEX/priv/host_tilegx_isel.c
+++ b/VEX/priv/host_tilegx_isel.c
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013 Tilera Corp.
+  Copyright (C) 2010-2015 Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -247,7 +247,7 @@
   }
 
   if (nVECRETs || nBBPTRs)
-    vex_printf("nVECRETs=%d, nBBPTRs=%d\n",
+    vex_printf("nVECRETs=%u, nBBPTRs=%u\n",
                nVECRETs, nBBPTRs);
 
   if (TILEGX_N_REGPARMS < n_args) {
@@ -369,12 +369,13 @@
    result.  The expression may only be a word-size one.
 */
 
-static Bool uInt_fits_in_16_bits ( UInt u )
+static Bool uInt_fits_in_16_bits ( UInt u ) 
 {
-  Int i = u & 0xFFFF;
-  i <<= 16;
-  i >>= 16;
-  return toBool(u == (UInt) i);
+   UInt v = u & 0xFFFF;
+
+   v = (Int)(v << 16) >> 16;   /* sign extend */
+
+   return u == v;
 }
 
 static Bool sane_AMode ( ISelEnv * env, TILEGXAMode * am )
diff --git a/VEX/priv/host_x86_defs.c b/VEX/priv/host_x86_defs.c
index 792381e..6321a3e 100644
--- a/VEX/priv/host_x86_defs.c
+++ b/VEX/priv/host_x86_defs.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -1196,7 +1196,7 @@
          ppHRegX86(i->Xin.SseCMov.dst);
          return;
       case Xin_SseShuf:
-         vex_printf("pshufd $0x%x,", i->Xin.SseShuf.order);
+         vex_printf("pshufd $0x%x,", (UInt)i->Xin.SseShuf.order);
          ppHRegX86(i->Xin.SseShuf.src);
          vex_printf(",");
          ppHRegX86(i->Xin.SseShuf.dst);
@@ -2560,6 +2560,8 @@
          case Ijk_Sys_int128:   trcval = VEX_TRC_JMP_SYS_INT128;   break;
          case Ijk_Sys_int129:   trcval = VEX_TRC_JMP_SYS_INT129;   break;
          case Ijk_Sys_int130:   trcval = VEX_TRC_JMP_SYS_INT130;   break;
+         case Ijk_Sys_int145:   trcval = VEX_TRC_JMP_SYS_INT145;   break;
+         case Ijk_Sys_int210:   trcval = VEX_TRC_JMP_SYS_INT210;   break;
          case Ijk_Sys_sysenter: trcval = VEX_TRC_JMP_SYS_SYSENTER; break;
          case Ijk_Yield:        trcval = VEX_TRC_JMP_YIELD;        break;
          case Ijk_EmWarn:       trcval = VEX_TRC_JMP_EMWARN;       break;
@@ -3360,7 +3362,8 @@
    */
    UChar* p = (UChar*)place_to_chain;
    vassert(p[0] == 0xBA);
-   vassert(*(UInt*)(&p[1]) == (UInt)(Addr)disp_cp_chain_me_EXPECTED);
+   vassert(read_misaligned_UInt_LE(&p[1])
+           == (UInt)(Addr)disp_cp_chain_me_EXPECTED);
    vassert(p[5] == 0xFF);
    vassert(p[6] == 0xD2);
    /* And what we want to change it to is:
@@ -3377,11 +3380,8 @@
 
    /* And make the modifications. */
    p[0] = 0xE9;
-   p[1] = (delta >> 0) & 0xFF;
-   p[2] = (delta >> 8) & 0xFF;
-   p[3] = (delta >> 16) & 0xFF;
-   p[4] = (delta >> 24) & 0xFF;
-   p[5] = 0x0F; p[6]  = 0x0B;
+   write_misaligned_UInt_LE(&p[1], (UInt)(ULong)delta);
+   p[5] = 0x0F; p[6] = 0x0B;
    /* sanity check on the delta -- top 32 are all 0 or all 1 */
    delta >>= 32;
    vassert(delta == 0LL || delta == -1LL);
@@ -3409,9 +3409,9 @@
    UChar* p     = (UChar*)place_to_unchain;
    Bool   valid = False;
    if (p[0] == 0xE9 
-       && p[5]  == 0x0F && p[6]  == 0x0B) {
+       && p[5] == 0x0F && p[6]  == 0x0B) {
       /* Check the offset is right. */
-      Int s32 = *(Int*)(&p[1]);
+      Int s32 = (Int)read_misaligned_UInt_LE(&p[1]);
       if ((UChar*)p + 5 + s32 == place_to_jump_to_EXPECTED) {
          valid = True;
          if (0)
@@ -3428,7 +3428,7 @@
       So it's the same length (convenient, huh).
    */
    p[0] = 0xBA;
-   *(UInt*)(&p[1]) = (UInt)(Addr)disp_cp_chain_me;
+   write_misaligned_UInt_LE(&p[1], (UInt)(Addr)disp_cp_chain_me);
    p[5] = 0xFF;
    p[6] = 0xD2;
    VexInvalRange vir = { (HWord)place_to_unchain, 7 };
@@ -3463,12 +3463,12 @@
    p[2] = imm32 & 0xFF; imm32 >>= 8;
    p[3] = imm32 & 0xFF; imm32 >>= 8;
    p[4] = imm32 & 0xFF; imm32 >>= 8;
-   p[5] = imm32 & 0xFF; imm32 >>= 8;
+   p[5] = imm32 & 0xFF;
    imm32 = 4 + (UInt)(Addr)location_of_counter;
    p[9]  = imm32 & 0xFF; imm32 >>= 8;
    p[10] = imm32 & 0xFF; imm32 >>= 8;
    p[11] = imm32 & 0xFF; imm32 >>= 8;
-   p[12] = imm32 & 0xFF; imm32 >>= 8;
+   p[12] = imm32 & 0xFF;
    VexInvalRange vir = { (HWord)place_to_patch, 14 };
    return vir;
 }
diff --git a/VEX/priv/host_x86_defs.h b/VEX/priv/host_x86_defs.h
index f1f737f..3eacad7 100644
--- a/VEX/priv/host_x86_defs.h
+++ b/VEX/priv/host_x86_defs.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/host_x86_isel.c b/VEX/priv/host_x86_isel.c
index 011cba5..56171bf 100644
--- a/VEX/priv/host_x86_isel.c
+++ b/VEX/priv/host_x86_isel.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -4285,6 +4285,8 @@
          case Ijk_Sys_int128:
          case Ijk_Sys_int129:
          case Ijk_Sys_int130:
+         case Ijk_Sys_int145:
+         case Ijk_Sys_int210:
          case Ijk_Sys_syscall:
          case Ijk_Sys_sysenter:
          case Ijk_InvalICache:
@@ -4384,6 +4386,8 @@
       case Ijk_Sys_int128:
       case Ijk_Sys_int129:
       case Ijk_Sys_int130:
+      case Ijk_Sys_int145:
+      case Ijk_Sys_int210:
       case Ijk_Sys_syscall:
       case Ijk_Sys_sysenter:
       case Ijk_InvalICache:
diff --git a/VEX/priv/ir_defs.c b/VEX/priv/ir_defs.c
index da851f5..4a7b770 100644
--- a/VEX/priv/ir_defs.c
+++ b/VEX/priv/ir_defs.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -63,7 +63,7 @@
       case Ity_D128:    vex_printf( "D128"); break;
       case Ity_V128:    vex_printf( "V128"); break;
       case Ity_V256:    vex_printf( "V256"); break;
-      default: vex_printf("ty = 0x%x\n", (Int)ty);
+      default: vex_printf("ty = 0x%x\n", (UInt)ty);
                vpanic("ppIRType");
    }
 }
@@ -114,7 +114,7 @@
    if (tmp == IRTemp_INVALID)
       vex_printf("IRTemp_INVALID");
    else
-      vex_printf( "t%d", (Int)tmp);
+      vex_printf( "t%u", tmp);
 }
 
 void ppIROp ( IROp op )
@@ -396,6 +396,7 @@
       case Iop_F32toF64: vex_printf("F32toF64"); return;
       case Iop_F64toF32: vex_printf("F64toF32"); return;
 
+      case Iop_RoundF128toInt: vex_printf("RoundF128toInt"); return;
       case Iop_RoundF64toInt: vex_printf("RoundF64toInt"); return;
       case Iop_RoundF32toInt: vex_printf("RoundF32toInt"); return;
       case Iop_RoundF64toF32: vex_printf("RoundF64toF32"); return;
@@ -1470,13 +1471,14 @@
 void ppIRLoadGOp ( IRLoadGOp cvt )
 {
    switch (cvt) {
-      case ILGop_INVALID: vex_printf("ILGop_INVALID"); break;      
-      case ILGop_Ident64: vex_printf("Ident64"); break;      
-      case ILGop_Ident32: vex_printf("Ident32"); break;      
-      case ILGop_16Uto32: vex_printf("16Uto32"); break;      
-      case ILGop_16Sto32: vex_printf("16Sto32"); break;      
-      case ILGop_8Uto32:  vex_printf("8Uto32"); break;      
-      case ILGop_8Sto32:  vex_printf("8Sto32"); break;      
+      case ILGop_INVALID:   vex_printf("ILGop_INVALID"); break;      
+      case ILGop_IdentV128: vex_printf("IdentV128"); break;      
+      case ILGop_Ident64:   vex_printf("Ident64"); break;      
+      case ILGop_Ident32:   vex_printf("Ident32"); break;      
+      case ILGop_16Uto32:   vex_printf("16Uto32"); break;      
+      case ILGop_16Sto32:   vex_printf("16Sto32"); break;      
+      case ILGop_8Uto32:    vex_printf("8Uto32"); break;      
+      case ILGop_8Sto32:    vex_printf("8Sto32"); break;      
       default: vpanic("ppIRLoadGOp");
    }
 }
@@ -1520,6 +1522,8 @@
       case Ijk_Sys_int128:    vex_printf("Sys_int128"); break;
       case Ijk_Sys_int129:    vex_printf("Sys_int129"); break;
       case Ijk_Sys_int130:    vex_printf("Sys_int130"); break;
+      case Ijk_Sys_int145:    vex_printf("Sys_int145"); break;
+      case Ijk_Sys_int210:    vex_printf("Sys_int210"); break;
       case Ijk_Sys_sysenter:  vex_printf("Sys_sysenter"); break;
       default:                vpanic("ppIRJumpKind");
    }
@@ -2470,7 +2474,6 @@
 /*--- Primop types                                            ---*/
 /*---------------------------------------------------------------*/
 
-static
 void typeOfPrimop ( IROp op, 
                     /*OUTs*/
                     IRType* t_dst, 
@@ -3158,6 +3161,7 @@
          UNARY(Ity_F128, Ity_F128);
 
       case Iop_SqrtF128:
+      case Iop_RoundF128toInt:
          BINARY(ity_RMode,Ity_F128, Ity_F128);
 
       case Iop_I32StoF128: UNARY(Ity_I32, Ity_F128);
@@ -3523,6 +3527,8 @@
                        /*OUT*/IRType* t_res, /*OUT*/IRType* t_arg )
 {
    switch (cvt) {
+      case ILGop_IdentV128:
+         *t_res = Ity_V128; *t_arg = Ity_V128; break;
       case ILGop_Ident64:
          *t_res = Ity_I64; *t_arg = Ity_I64; break;
       case ILGop_Ident32:
diff --git a/VEX/priv/ir_inject.c b/VEX/priv/ir_inject.c
index 012eecd..93b4c1c 100644
--- a/VEX/priv/ir_inject.c
+++ b/VEX/priv/ir_inject.c
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2012-2013  Florian Krohm   (britzel@acm.org)
+   Copyright (C) 2012-2015  Florian Krohm   (britzel@acm.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -213,7 +213,8 @@
       if (iricb.shift_amount_is_immediate) {
          // This implies that the IROp is a shift op
          vassert(iricb.t_opnd2 == Ity_I8);
-         opnd2 = mkU8(*((Char *)iricb.opnd2));
+         /* Interpret the memory as an ULong. */
+         opnd2 = mkU8(*((ULong *)iricb.opnd2));
       } else {
          opnd2 = load(endian, iricb.t_opnd2, iricb.opnd2);
       }
diff --git a/VEX/priv/ir_match.c b/VEX/priv/ir_match.c
index 560a25b..40fd46f 100644
--- a/VEX/priv/ir_match.c
+++ b/VEX/priv/ir_match.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/ir_match.h b/VEX/priv/ir_match.h
index 6900fa7..f339426 100644
--- a/VEX/priv/ir_match.h
+++ b/VEX/priv/ir_match.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/ir_opt.c b/VEX/priv/ir_opt.c
index 52cef9b..7a7246a 100644
--- a/VEX/priv/ir_opt.c
+++ b/VEX/priv/ir_opt.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -1264,6 +1264,7 @@
       case Iop_Xor64: return IRExpr_Const(IRConst_U64(0));
       case Iop_XorV128:
       case Iop_AndV128: return IRExpr_Const(IRConst_V128(0));
+      case Iop_XorV256:
       case Iop_AndV256: return IRExpr_Const(IRConst_V256(0));
       default: vpanic("mkZeroOfPrimopResultType: bad primop");
    }
@@ -2285,6 +2286,7 @@
             case Iop_Xor32:
             case Iop_Xor64:
             case Iop_XorV128:
+            case Iop_XorV256:
                /* Xor8/16/32/64/V128(t,t) ==> 0, for some IRTemp t */
                if (sameIRExprs(env, e->Iex.Binop.arg1, e->Iex.Binop.arg2)) {
                   e2 = mkZeroOfPrimopResultType(e->Iex.Binop.op);
@@ -2887,6 +2889,8 @@
       typeOfIRLoadGOp(lg->cvt, &cvtRes, &cvtArg);
       IROp cvtOp = Iop_INVALID;
       switch (lg->cvt) {
+         case ILGop_IdentV128:
+         case ILGop_Ident64:
          case ILGop_Ident32: break;
          case ILGop_8Uto32:  cvtOp = Iop_8Uto32;  break;
          case ILGop_8Sto32:  cvtOp = Iop_8Sto32;  break;
diff --git a/VEX/priv/ir_opt.h b/VEX/priv/ir_opt.h
index 43b2a47..f012962 100644
--- a/VEX/priv/ir_opt.h
+++ b/VEX/priv/ir_opt.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/main_globals.c b/VEX/priv/main_globals.c
index dbe6369..8f3a394 100644
--- a/VEX/priv/main_globals.c
+++ b/VEX/priv/main_globals.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/main_globals.h b/VEX/priv/main_globals.h
index eb97ec1..af13e75 100644
--- a/VEX/priv/main_globals.h
+++ b/VEX/priv/main_globals.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c
index ec68065..2e51ded 100644
--- a/VEX/priv/main_main.c
+++ b/VEX/priv/main_main.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/priv/main_util.c b/VEX/priv/main_util.c
index d0732e9..028d353 100644
--- a/VEX/priv/main_util.c
+++ b/VEX/priv/main_util.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -580,6 +580,59 @@
 }
 
 
+/*---------------------------------------------------------*/
+/*--- Misaligned memory access support                  ---*/
+/*---------------------------------------------------------*/
+
+UInt read_misaligned_UInt_LE ( void* addr )
+{
+   UChar* p = (UChar*)addr;
+   UInt   w = 0;
+   w = (w << 8) | p[3];
+   w = (w << 8) | p[2];
+   w = (w << 8) | p[1];
+   w = (w << 8) | p[0];
+   return w;
+}
+
+ULong read_misaligned_ULong_LE ( void* addr )
+{
+   UChar* p = (UChar*)addr;
+   ULong  w = 0;
+   w = (w << 8) | p[7];
+   w = (w << 8) | p[6];
+   w = (w << 8) | p[5];
+   w = (w << 8) | p[4];
+   w = (w << 8) | p[3];
+   w = (w << 8) | p[2];
+   w = (w << 8) | p[1];
+   w = (w << 8) | p[0];
+   return w;
+}
+
+void write_misaligned_UInt_LE ( void* addr, UInt w )
+{
+   UChar* p = (UChar*)addr;
+   p[0] = (w & 0xFF); w >>= 8;
+   p[1] = (w & 0xFF); w >>= 8;
+   p[2] = (w & 0xFF); w >>= 8;
+   p[3] = (w & 0xFF); w >>= 8;
+}
+
+void write_misaligned_ULong_LE ( void* addr, ULong w )
+{
+   UChar* p = (UChar*)addr;
+   p[0] = (w & 0xFF); w >>= 8;
+   p[1] = (w & 0xFF); w >>= 8;
+   p[2] = (w & 0xFF); w >>= 8;
+   p[3] = (w & 0xFF); w >>= 8;
+   p[4] = (w & 0xFF); w >>= 8;
+   p[5] = (w & 0xFF); w >>= 8;
+   p[6] = (w & 0xFF); w >>= 8;
+   p[7] = (w & 0xFF); w >>= 8;
+}
+
+
 /*---------------------------------------------------------------*/
 /*--- end                                         main_util.c ---*/
 /*---------------------------------------------------------------*/
diff --git a/VEX/priv/main_util.h b/VEX/priv/main_util.h
index 018ba4f..57f45ed 100644
--- a/VEX/priv/main_util.h
+++ b/VEX/priv/main_util.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -163,6 +163,14 @@
 #endif
 }
 
+/* Misaligned memory access support. */
+
+extern UInt  read_misaligned_UInt_LE  ( void* addr );
+extern ULong read_misaligned_ULong_LE ( void* addr );
+
+extern void  write_misaligned_UInt_LE  ( void* addr, UInt  w );
+extern void  write_misaligned_ULong_LE ( void* addr, ULong w );
+
 #endif /* ndef __VEX_MAIN_UTIL_H */
 
 /*---------------------------------------------------------------*/
diff --git a/VEX/priv/s390_defs.h b/VEX/priv/s390_defs.h
index 1e89883..6751d80 100644
--- a/VEX/priv/s390_defs.h
+++ b/VEX/priv/s390_defs.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/VEX/priv/s390_disasm.c b/VEX/priv/s390_disasm.c
index 95cf1f7..fa18ca5 100644
--- a/VEX/priv/s390_disasm.c
+++ b/VEX/priv/s390_disasm.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/VEX/priv/s390_disasm.h b/VEX/priv/s390_disasm.h
index 1522445..2334f01 100644
--- a/VEX/priv/s390_disasm.h
+++ b/VEX/priv/s390_disasm.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h
index 3543de9..011fd53 100644
--- a/VEX/pub/libvex.h
+++ b/VEX/pub/libvex.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -324,11 +324,13 @@
    guest_amd64_assume_fs_is_const
       guest is amd64-linux                ==> True
       guest is amd64-darwin               ==> False
+      guest is amd64-solaris              ==> True
       guest is other                      ==> inapplicable
 
    guest_amd64_assume_gs_is_const
       guest is amd64-darwin               ==> True
       guest is amd64-linux                ==> True
+      guest is amd64-solaris              ==> False
       guest is other                      ==> inapplicable
 
    guest_ppc_zap_RZ_at_blr
@@ -355,7 +357,7 @@
 
       /* AMD64 GUESTS only: should we translate %fs-prefixed
          instructions using the assumption that %fs always contains
-         the same value? (typically zero on linux) */
+         the same value? (typically zero on linux and solaris) */
       Bool guest_amd64_assume_fs_is_const;
 
       /* AMD64 GUESTS only: should we translate %gs-prefixed
diff --git a/VEX/pub/libvex_basictypes.h b/VEX/pub/libvex_basictypes.h
index 59859d0..b1d0f6c 100644
--- a/VEX/pub/libvex_basictypes.h
+++ b/VEX/pub/libvex_basictypes.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/pub/libvex_emnote.h b/VEX/pub/libvex_emnote.h
index 5e6a9d8..9435130 100644
--- a/VEX/pub/libvex_emnote.h
+++ b/VEX/pub/libvex_emnote.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/pub/libvex_guest_amd64.h b/VEX/pub/libvex_guest_amd64.h
index 1043b20..fd104ab 100644
--- a/VEX/pub/libvex_guest_amd64.h
+++ b/VEX/pub/libvex_guest_amd64.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -37,6 +37,7 @@
 #define __LIBVEX_PUB_GUEST_AMD64_H
 
 #include "libvex_basictypes.h"
+#include "libvex_emnote.h"
 
 
 /*---------------------------------------------------------------*/
@@ -90,8 +91,8 @@
          all the old x87 FPU gunk
          segment registers */
 
-      /* HACK to e.g. make tls on amd64-linux work.  %fs only ever seems to
-         hold a constant value (zero on linux main thread, 0x63 in other
+      /* HACK to e.g. make tls on amd64-linux/solaris work.  %fs only ever seems
+         to hold a constant value (zero on linux main thread, 0x63 in other
          threads), and so guest_FS_CONST holds
          the 64-bit offset associated with this constant %fs value. */
       /* 200 */ ULong guest_FS_CONST;
@@ -159,7 +160,7 @@
          %gs only ever seems to hold a constant value (e.g. 0x60 on darwin,
          0x6b on linux), and so guest_GS_CONST holds the 64-bit offset
          associated with this constant %gs value.  (A direct analogue
-         of the %fs-const hack for amd64-linux). */
+         of the %fs-const hack for amd64-linux/solaris). */
       ULong guest_GS_CONST;
 
       /* Needed for Darwin (but mandated for all guest architectures):
@@ -192,6 +193,11 @@
 extern 
 ULong LibVEX_GuestAMD64_get_rflags ( /*IN*/const VexGuestAMD64State* vex_state );
 
+/* Put rflags into the given state. */
+extern
+void LibVEX_GuestAMD64_put_rflags ( ULong rflags,
+                                    /*MOD*/VexGuestAMD64State* vex_state );
+
 /* Set the carry flag in the given state to 'new_carry_flag', which
    should be zero or one. */
 extern
@@ -199,6 +205,18 @@
 LibVEX_GuestAMD64_put_rflag_c ( ULong new_carry_flag,
                                 /*MOD*/VexGuestAMD64State* vex_state );
 
+/* Do FXSAVE from the supplied VexGuestAMD64tate structure and store the
+   result at the given address which represents a buffer of at least 416
+   bytes. */
+extern
+void LibVEX_GuestAMD64_fxsave ( /*IN*/VexGuestAMD64State* gst,
+                                /*OUT*/HWord fp_state );
+
+/* Do FXRSTOR from the supplied address and store read values to the given
+   VexGuestAMD64State structure. */
+extern
+VexEmNote LibVEX_GuestAMD64_fxrstor ( /*IN*/HWord fp_state,
+                                      /*MOD*/VexGuestAMD64State* gst );
 
 #endif /* ndef __LIBVEX_PUB_GUEST_AMD64_H */
 
diff --git a/VEX/pub/libvex_guest_arm.h b/VEX/pub/libvex_guest_arm.h
index ae77b17..f446262 100644
--- a/VEX/pub/libvex_guest_arm.h
+++ b/VEX/pub/libvex_guest_arm.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/pub/libvex_guest_arm64.h b/VEX/pub/libvex_guest_arm64.h
index ac22432..c438c1e 100644
--- a/VEX/pub/libvex_guest_arm64.h
+++ b/VEX/pub/libvex_guest_arm64.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/pub/libvex_guest_mips32.h b/VEX/pub/libvex_guest_mips32.h
index 99b9dbb..fd702a3 100644
--- a/VEX/pub/libvex_guest_mips32.h
+++ b/VEX/pub/libvex_guest_mips32.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/pub/libvex_guest_mips64.h b/VEX/pub/libvex_guest_mips64.h
index 70073b6..fe28aca 100644
--- a/VEX/pub/libvex_guest_mips64.h
+++ b/VEX/pub/libvex_guest_mips64.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/VEX/pub/libvex_guest_ppc32.h b/VEX/pub/libvex_guest_ppc32.h
index 3c2fd9e..5bebef8 100644
--- a/VEX/pub/libvex_guest_ppc32.h
+++ b/VEX/pub/libvex_guest_ppc32.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -241,11 +241,12 @@
       /* 1360 */ ULong guest_TFHAR;     // Transaction Failure Handler Address Register 
       /* 1368 */ ULong guest_TEXASR;    // Transaction EXception And Summary Register
       /* 1376 */ ULong guest_TFIAR;     // Transaction Failure Instruction Address Register
-      /* 1384 */ UInt  guest_TEXASRU;   // Transaction EXception And Summary Register Upper
-
+      /* 1384 */ ULong guest_PPR;       // Program Priority register
+      /* 1392 */ UInt  guest_TEXASRU;   // Transaction EXception And Summary Register Upper
+      /* 1396 */ UInt  guest_PSPB;      // Problem State Priority Boost register
       /* Padding to make it have an 16-aligned size */
-      /* 1388 */ UInt  padding2;
-
+      /* 1400 */ UInt  padding2;
+      /* 1404 */ UInt  padding3;
    }
    VexGuestPPC32State;
 
diff --git a/VEX/pub/libvex_guest_ppc64.h b/VEX/pub/libvex_guest_ppc64.h
index 13a3540..f3310cb 100644
--- a/VEX/pub/libvex_guest_ppc64.h
+++ b/VEX/pub/libvex_guest_ppc64.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -282,12 +282,14 @@
       /* 1656 */ ULong guest_TFHAR;     // Transaction Failure Handler Address Register 
       /* 1664 */ ULong guest_TEXASR;    // Transaction EXception And Summary Register
       /* 1672 */ ULong guest_TFIAR;     // Transaction Failure Instruction Address Register
-      /* 1680 */ UInt  guest_TEXASRU;   // Transaction EXception And Summary Register Upper
+      /* 1680 */ ULong guest_PPR;       // Program Priority register
+      /* 1688 */ UInt  guest_TEXASRU;   // Transaction EXception And Summary Register Upper
+      /* 1692 */ UInt  guest_PSPB;      // Problem State Priority Boost register
 
       /* Padding to make it have an 16-aligned size */
-      /* 1684 */  UInt  padding1;
-      /* 1688 */  UInt  padding2;
-      /* 1692 */  UInt  padding3;
+      /* 1696   UInt  padding1;  currently not needed */
+      /* 1700   UInt  padding2;  currently not needed */
+      /* 1708   UInt  padding3;  currently not needed */
 
    }
    VexGuestPPC64State;
diff --git a/VEX/pub/libvex_guest_s390x.h b/VEX/pub/libvex_guest_s390x.h
index a163b7f..99d5947 100644
--- a/VEX/pub/libvex_guest_s390x.h
+++ b/VEX/pub/libvex_guest_s390x.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/VEX/pub/libvex_guest_tilegx.h b/VEX/pub/libvex_guest_tilegx.h
index 61a60e3..d3c7062 100644
--- a/VEX/pub/libvex_guest_tilegx.h
+++ b/VEX/pub/libvex_guest_tilegx.h
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013 Tilera Corp.
+  Copyright (C) 2010-2015 Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/VEX/pub/libvex_guest_x86.h b/VEX/pub/libvex_guest_x86.h
index ac780ac..5c77569 100644
--- a/VEX/pub/libvex_guest_x86.h
+++ b/VEX/pub/libvex_guest_x86.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -37,6 +37,7 @@
 #define __LIBVEX_PUB_GUEST_X86_H
 
 #include "libvex_basictypes.h"
+#include "libvex_emnote.h"
 
 
 /*---------------------------------------------------------------*/
@@ -279,6 +280,11 @@
 extern 
 UInt LibVEX_GuestX86_get_eflags ( /*IN*/const VexGuestX86State* vex_state );
 
+/* Put eflags into the given state. */
+extern
+void LibVEX_GuestX86_put_eflags ( UInt eflags,
+                                  /*MOD*/VexGuestX86State* vex_state );
+
 /* Set the carry flag in the given state to 'new_carry_flag', which
    should be zero or one. */
 extern
@@ -286,6 +292,29 @@
 LibVEX_GuestX86_put_eflag_c ( UInt new_carry_flag,
                               /*MOD*/VexGuestX86State* vex_state );
 
+/* Do x87 save from the supplied VexGuestX86State structure and store the
+   result at the given address which represents a buffer of at least 108
+   bytes. */
+extern
+void LibVEX_GuestX86_get_x87 ( /*IN*/VexGuestX86State* vex_state,
+                               /*OUT*/UChar* x87_state );
+
+/* Do x87 restore from the supplied address and store read values to the given
+   VexGuestX86State structure. */
+extern
+VexEmNote LibVEX_GuestX86_put_x87 ( /*IN*/UChar* x87_state,
+                                    /*MOD*/VexGuestX86State* vex_state);
+
+/* Return mxcsr from the supplied VexGuestX86State structure. */
+extern
+UInt LibVEX_GuestX86_get_mxcsr ( /*IN*/VexGuestX86State* vex_state );
+
+/* Modify the given VexGuestX86State structure according to the passed mxcsr
+   value. */
+extern
+VexEmNote LibVEX_GuestX86_put_mxcsr ( /*IN*/UInt mxcsr,
+                                      /*MOD*/VexGuestX86State* vex_state);
+
 #endif /* ndef __LIBVEX_PUB_GUEST_X86_H */
 
 /*---------------------------------------------------------------*/
diff --git a/VEX/pub/libvex_ir.h b/VEX/pub/libvex_ir.h
index 145caa4..4c05399 100644
--- a/VEX/pub/libvex_ir.h
+++ b/VEX/pub/libvex_ir.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -713,6 +713,8 @@
       Iop_CosF64,    /* FCOS */
       Iop_TanF64,    /* FTAN */
       Iop_2xm1F64,   /* (2^arg - 1.0) */
+      Iop_RoundF128toInt, /* F128 value to nearest integral value (still
+                             as F128) */
       Iop_RoundF64toInt, /* F64 value to nearest integral value (still
                             as F64) */
       Iop_RoundF32toInt, /* F32 value to nearest integral value (still
@@ -1848,6 +1850,10 @@
 /* Pretty-print an op. */
 extern void ppIROp ( IROp );
 
+/* For a given operand return the types of its arguments and its result. */
+extern void typeOfPrimop ( IROp op,
+                           /*OUTs*/ IRType* t_dst, IRType* t_arg1,
+                           IRType* t_arg2, IRType* t_arg3, IRType* t_arg4 );
 
 /* Encoding of IEEE754-specified rounding modes.
    Note, various front and back ends rely on the actual numerical
@@ -2282,6 +2288,8 @@
       Ijk_Sys_int128,     /* amd64/x86 'int $0x80' */
       Ijk_Sys_int129,     /* amd64/x86 'int $0x81' */
       Ijk_Sys_int130,     /* amd64/x86 'int $0x82' */
+      Ijk_Sys_int145,     /* amd64/x86 'int $0x91' */
+      Ijk_Sys_int210,     /* amd64/x86 'int $0xD2' */
       Ijk_Sys_sysenter    /* x86 'sysenter'.  guest_EIP becomes 
                              invalid at the point this happens. */
    }
@@ -2590,6 +2598,7 @@
 typedef
    enum {
       ILGop_INVALID=0x1D00,
+      ILGop_IdentV128, /* 128 bit vector, no conversion */
       ILGop_Ident64,   /* 64 bit, no conversion */
       ILGop_Ident32,   /* 32 bit, no conversion */
       ILGop_16Uto32,   /* 16 bit load, Z-widen to 32 */
diff --git a/VEX/pub/libvex_s390x_common.h b/VEX/pub/libvex_s390x_common.h
index a8c8c53..ecdc11b 100644
--- a/VEX/pub/libvex_s390x_common.h
+++ b/VEX/pub/libvex_s390x_common.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/VEX/pub/libvex_trc_values.h b/VEX/pub/libvex_trc_values.h
index 8209042..38ff2e1 100644
--- a/VEX/pub/libvex_trc_values.h
+++ b/VEX/pub/libvex_trc_values.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -83,6 +83,8 @@
 #define VEX_TRC_JMP_SYS_INT128   77 /* do syscall before continuing */
 #define VEX_TRC_JMP_SYS_INT129   89 /* do syscall before continuing */
 #define VEX_TRC_JMP_SYS_INT130   91 /* do syscall before continuing */
+#define VEX_TRC_JMP_SYS_INT145  111 /* do syscall before continuing */
+#define VEX_TRC_JMP_SYS_INT210  113 /* do syscall before continuing */
 
 #define VEX_TRC_JMP_SYS_SYSENTER 79 /* do syscall before continuing */
 
diff --git a/VEX/useful/test_main.c b/VEX/useful/test_main.c
index 2b47591..5db6ec6 100644
--- a/VEX/useful/test_main.c
+++ b/VEX/useful/test_main.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2013 OpenWorks LLP
+   Copyright (C) 2004-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -516,7 +516,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -672,9 +672,9 @@
    are identically-kinded. */
 static Bool sameKindedAtoms ( IRAtom* a1, IRAtom* a2 )
 {
-   if (a1->tag == Iex_RdTmp && a1->tag == Iex_RdTmp)
+   if (a1->tag == Iex_RdTmp && a2->tag == Iex_RdTmp)
       return True;
-   if (a1->tag == Iex_Const && a1->tag == Iex_Const)
+   if (a1->tag == Iex_Const && a2->tag == Iex_Const)
       return True;
    return False;
 }
diff --git a/auxprogs/Makefile.am b/auxprogs/Makefile.am
index 89ca89b..f5654c1 100644
--- a/auxprogs/Makefile.am
+++ b/auxprogs/Makefile.am
@@ -36,9 +36,16 @@
 if VGCONF_PLATVARIANT_IS_ANDROID
 valgrind_listener_CFLAGS    += -static
 endif
+# If there is no secondary platform, and the platforms include x86-darwin,
+# then the primary platform must be x86-darwin.  Hence:
+if ! VGCONF_HAVE_PLATFORM_SEC
 if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
 valgrind_listener_LDFLAGS   += -Wl,-read_only_relocs -Wl,suppress
 endif
+endif
+if VGCONF_OS_IS_SOLARIS
+valgrind_listener_LDADD      = -lsocket -lnsl
+endif
 
 valgrind_di_server_SOURCES   = valgrind-di-server.c
 valgrind_di_server_CPPFLAGS  = $(AM_CPPFLAGS_PRI) -I$(top_srcdir)/coregrind
@@ -48,9 +55,16 @@
 if VGCONF_PLATVARIANT_IS_ANDROID
 valgrind_di_server_CFLAGS    += -static
 endif
+# If there is no secondary platform, and the platforms include x86-darwin,
+# then the primary platform must be x86-darwin.  Hence:
+if ! VGCONF_HAVE_PLATFORM_SEC
 if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
 valgrind_di_server_LDFLAGS   += -Wl,-read_only_relocs -Wl,suppress
 endif
+endif
+if VGCONF_OS_IS_SOLARIS
+valgrind_di_server_LDADD     = -lsocket -lnsl
+endif
 
 #----------------------------------------------------------------------------
 # getoff-<platform>
diff --git a/auxprogs/build-gcc b/auxprogs/build-gcc
new file mode 100755
index 0000000..1f0332a
--- /dev/null
+++ b/auxprogs/build-gcc
@@ -0,0 +1,55 @@
+#!/bin/sh -e
+
+# Simple script to build GCC natively including its prerequisites.
+#
+# Depending on your needs you maybe able to speed up the GCC build:
+#
+# (a) Do not build a c++ compiler
+#     c++ is only needed for "make check" and running regression tests
+#     --> choose  LANGUEGES=c   below
+# (b) Do not build a compiler that can produce 32-bit executables
+#     on a 64-bit platform
+#     --> choose  MULTILIB=--disable-multilib   below
+#
+# Define the following 5 variables:
+
+BUILD_DIR=/tmp/build-gcc
+INSTALL_DIR=/tmp/install
+
+GCC_VERSION=5.1.0
+LANGUAGES=c,c++
+MULTILIB=
+#LANGUAGES=c
+#MULTILIB=--disable-multilib
+
+#-----------------------------------------------------------
+# No changes should be needed below this line
+#-----------------------------------------------------------
+
+# Create build directory
+echo "...creating build directory $BUILD_DIR"
+mkdir -p $BUILD_DIR
+cd $BUILD_DIR
+
+# Download tarballs
+echo "...downloading tarball"
+wget ftp://ftp.gnu.org/gnu/gcc/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.bz2
+
+# Build GCC
+echo "...building GCC"
+rm -rf gcc-$GCC_VERSION
+tar xf gcc-$GCC_VERSION.tar.bz2
+cd gcc-$GCC_VERSION
+./contrib/download_prerequisites
+cd ..
+rm -rf objdir
+mkdir objdir
+cd objdir
+../gcc-$GCC_VERSION/configure --prefix=$INSTALL_DIR --disable-bootstrap \
+       $MULTILIB --enable-languages=$LANGUAGES  2>&1 > gcc-config.log
+make -s 2>&1 > gcc-make.log
+make -s install 2>&1 > gcc-install.log
+mv gcc-config.log gcc-make.log gcc-install.log ..
+
+# done
+echo "...done"
diff --git a/auxprogs/change-copyright-year b/auxprogs/change-copyright-year
index e6b9802..bd8fdc5 100755
--- a/auxprogs/change-copyright-year
+++ b/auxprogs/change-copyright-year
@@ -19,11 +19,11 @@
 for i in `find . -name '*.[chS]' -o -name '*.in' -type f -not -path '*.svn\/*'` ; do
     echo $i
     if [ -L $i ]; then continue; fi  # skip symbolic links
-    perl -p -e 's/Copyright \(C\) 20([0-1])([0-9])-2013/Copyright (C) 20$1$2-2014/' < $i > tmp.$$
+    perl -p -e 's/Copyright \(C\) 20([0-1])([0-9])-2013/Copyright (C) 20$1$2-2015/' < $i > tmp.$$
     mv tmp.$$ $i
 
 # Copyright IBM Corp. 2010-2011
 
-    perl -p -e 's/Copyright IBM Corp. 20([0-1])([0-9])-2013/Copyright IBM Corp. 20$1$2-2014/' < $i > tmp.$$
+    perl -p -e 's/Copyright IBM Corp. 20([0-1])([0-9])-2013/Copyright IBM Corp. 20$1$2-2015/' < $i > tmp.$$
     mv tmp.$$ $i
 done
diff --git a/auxprogs/getoff.c b/auxprogs/getoff.c
index fa95515..6e94b9a 100644
--- a/auxprogs/getoff.c
+++ b/auxprogs/getoff.c
@@ -2,7 +2,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Philippe Waroquiers
+   Copyright (C) 2014-2015 Philippe Waroquiers
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/auxprogs/gsl16test b/auxprogs/gsl16test
index bd127d7..22f7cab 100755
--- a/auxprogs/gsl16test
+++ b/auxprogs/gsl16test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 
 # Do an automated test which involves building and regtesting version
 # 1.6 of the GNU Scientific Library (gsl).  This has proven to be a 
@@ -43,7 +43,7 @@
 
    (eval "$*") >> log.verbose 2>&1
 
-   if [ $? == 0 ]
+   if [ $? = 0 ]
    then
       echo "done"
       return 0
diff --git a/auxprogs/gsl19test b/auxprogs/gsl19test
index 3c81e1d..b97738f 100755
--- a/auxprogs/gsl19test
+++ b/auxprogs/gsl19test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 
 # Do an automated test which involves building and regtesting version
 # 1.9 of the GNU Scientific Library (gsl).  This has proven to be a 
@@ -45,7 +45,7 @@
 
    (eval "$*") >> log.verbose 2>&1
 
-   if [ $? == 0 ]
+   if [ $? = 0 ]
    then
       echo "done"
       return 0
diff --git a/auxprogs/valgrind-di-server.c b/auxprogs/valgrind-di-server.c
index bfcdd18..1715a55 100644
--- a/auxprogs/valgrind-di-server.c
+++ b/auxprogs/valgrind-di-server.c
@@ -17,7 +17,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 Mozilla Foundation
+   Copyright (C) 2013-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -89,7 +89,9 @@
 #include "pub_core_libcfile.h"      // For VG_CLO_DEFAULT_LOGPORT
 
 /* Needed to get a definition for pread() from unistd.h */
-#define _XOPEN_SOURCE 500
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 600
+#endif
 
 #include <stdio.h>
 #include <unistd.h>
diff --git a/auxprogs/valgrind-listener.c b/auxprogs/valgrind-listener.c
index 8da7a28..d56c74e 100644
--- a/auxprogs/valgrind-listener.c
+++ b/auxprogs/valgrind-listener.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/cachegrind/Makefile.am b/cachegrind/Makefile.am
index af9f804..a587d24 100644
--- a/cachegrind/Makefile.am
+++ b/cachegrind/Makefile.am
@@ -28,9 +28,13 @@
 cg_merge_CFLAGS    = $(AM_CFLAGS_PRI)
 cg_merge_CCASFLAGS = $(AM_CCASFLAGS_PRI)
 cg_merge_LDFLAGS   = $(AM_CFLAGS_PRI)
+# If there is no secondary platform, and the platforms include x86-darwin,
+# then the primary platform must be x86-darwin.  Hence:
+if ! VGCONF_HAVE_PLATFORM_SEC
 if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
 cg_merge_LDFLAGS   += -Wl,-read_only_relocs -Wl,suppress
 endif
+endif
 
 #----------------------------------------------------------------------------
 # cachegrind-<platform>
diff --git a/cachegrind/cg_annotate.in b/cachegrind/cg_annotate.in
index 9fbea20..69365e8 100644
--- a/cachegrind/cg_annotate.in
+++ b/cachegrind/cg_annotate.in
@@ -7,7 +7,7 @@
 #  This file is part of Cachegrind, a Valgrind tool for cache
 #  profiling programs.
 #
-#  Copyright (C) 2002-2013 Nicholas Nethercote
+#  Copyright (C) 2002-2015 Nicholas Nethercote
 #     njn@valgrind.org
 #
 #  This program is free software; you can redistribute it and/or
@@ -158,7 +158,7 @@
     -I<d> --include=<d>   add <d> to list of directories to search for 
                           source files
 
-  cg_annotate is Copyright (C) 2002-2013 Nicholas Nethercote.
+  cg_annotate is Copyright (C) 2002-2015 Nicholas Nethercote.
   and licensed under the GNU General Public License, version 2.
   Bug reports, feedback, admiration, abuse, etc, to: njn\@valgrind.org.
                                                 
diff --git a/cachegrind/cg_arch.c b/cachegrind/cg_arch.c
index 376d79e..08558be 100644
--- a/cachegrind/cg_arch.c
+++ b/cachegrind/cg_arch.c
@@ -6,7 +6,7 @@
    This file is part of Cachegrind, a Valgrind tool for cache
    profiling programs.
 
-   Copyright (C) 2011-2013 Nicholas Nethercote
+   Copyright (C) 2011-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -382,7 +382,7 @@
          }
          VG_(dmsg)("warning: Pentium 4 with %u KB micro-op instruction trace cache\n",
                    i1->sizeB / 1024);
-         VG_(dmsg)("         Simulating a %d KB I-cache with %d B lines\n",
+         VG_(dmsg)("         Simulating a %u KB I-cache with %u B lines\n",
                    adjusted_size / 1024, guessed_line_size);
 
          *I1c = (cache_t) { adjusted_size, i1->assoc, guessed_line_size };
diff --git a/cachegrind/cg_arch.h b/cachegrind/cg_arch.h
index 7f9430b..910a9b1 100644
--- a/cachegrind/cg_arch.h
+++ b/cachegrind/cg_arch.h
@@ -7,7 +7,7 @@
    This file is part of Cachegrind, a Valgrind tool for cache
    profiling programs.
 
-   Copyright (C) 2002-2013 Nicholas Nethercote
+   Copyright (C) 2002-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
diff --git a/cachegrind/cg_branchpred.c b/cachegrind/cg_branchpred.c
index 396bde1..a347345 100644
--- a/cachegrind/cg_branchpred.c
+++ b/cachegrind/cg_branchpred.c
@@ -7,7 +7,7 @@
    This file is part of Cachegrind, a Valgrind tool for cache
    profiling programs.
 
-   Copyright (C) 2002-2013 Nicholas Nethercote
+   Copyright (C) 2002-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
diff --git a/cachegrind/cg_diff.in b/cachegrind/cg_diff.in
index 96f4b15..395460b 100755
--- a/cachegrind/cg_diff.in
+++ b/cachegrind/cg_diff.in
@@ -7,7 +7,7 @@
 #  This file is part of Cachegrind, a Valgrind tool for cache
 #  profiling programs.
 #
-#  Copyright (C) 2002-2013 Nicholas Nethercote
+#  Copyright (C) 2002-2015 Nicholas Nethercote
 #     njn@valgrind.org
 #
 #  This program is free software; you can redistribute it and/or
@@ -52,7 +52,7 @@
                           to filenames, eg. --mod-filename='s/prog[0-9]/projN/'
     --mod-funcname=<expr> like --mod-filename, but applied to function names
 
-  cg_diff is Copyright (C) 2002-2013 Nicholas Nethercote.
+  cg_diff is Copyright (C) 2002-2015 Nicholas Nethercote.
   and licensed under the GNU General Public License, version 2.
   Bug reports, feedback, admiration, abuse, etc, to: njn\@valgrind.org.
                                                 
diff --git a/cachegrind/cg_main.c b/cachegrind/cg_main.c
index dcc6220..de0c2a9 100644
--- a/cachegrind/cg_main.c
+++ b/cachegrind/cg_main.c
@@ -8,7 +8,7 @@
    This file is part of Cachegrind, a Valgrind tool for cache
    profiling programs.
 
-   Copyright (C) 2002-2013 Nicholas Nethercote
+   Copyright (C) 2002-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -1456,7 +1456,7 @@
 
       // Print the LineCC
       if (clo_cache_sim && clo_branch_sim) {
-         VG_(fprintf)(fp,  "%u %llu %llu %llu"
+         VG_(fprintf)(fp,  "%d %llu %llu %llu"
                              " %llu %llu %llu"
                              " %llu %llu %llu"
                              " %llu %llu %llu %llu\n",
@@ -1468,7 +1468,7 @@
                             lineCC->Bi.b, lineCC->Bi.mp);
       }
       else if (clo_cache_sim && !clo_branch_sim) {
-         VG_(fprintf)(fp,  "%u %llu %llu %llu"
+         VG_(fprintf)(fp,  "%d %llu %llu %llu"
                              " %llu %llu %llu"
                              " %llu %llu %llu\n",
                             lineCC->loc.line,
@@ -1477,7 +1477,7 @@
                             lineCC->Dw.a, lineCC->Dw.m1, lineCC->Dw.mL);
       }
       else if (!clo_cache_sim && clo_branch_sim) {
-         VG_(fprintf)(fp,  "%u %llu"
+         VG_(fprintf)(fp,  "%d %llu"
                              " %llu %llu %llu %llu\n",
                             lineCC->loc.line,
                             lineCC->Ir.a, 
@@ -1485,7 +1485,7 @@
                             lineCC->Bi.b, lineCC->Bi.mp);
       }
       else {
-         VG_(fprintf)(fp,  "%u %llu\n",
+         VG_(fprintf)(fp,  "%d %llu\n",
                             lineCC->loc.line,
                             lineCC->Ir.a);
       }
@@ -1698,11 +1698,11 @@
       VG_(dmsg)("cachegrind: with zero      info:%6.1f%% (%d)\n", 
                 no_debugs * 100.0 / debug_lookups, no_debugs);
 
-      VG_(dmsg)("cachegrind: string table size: %lu\n",
+      VG_(dmsg)("cachegrind: string table size: %u\n",
                 VG_(OSetGen_Size)(stringTable));
-      VG_(dmsg)("cachegrind: CC table size: %lu\n",
+      VG_(dmsg)("cachegrind: CC table size: %u\n",
                 VG_(OSetGen_Size)(CC_table));
-      VG_(dmsg)("cachegrind: InstrInfo table size: %lu\n",
+      VG_(dmsg)("cachegrind: InstrInfo table size: %u\n",
                 VG_(OSetGen_Size)(instrInfoTable));
    }
 }
@@ -1783,7 +1783,7 @@
    VG_(details_version)         (NULL);
    VG_(details_description)     ("a cache and branch-prediction profiler");
    VG_(details_copyright_author)(
-      "Copyright (C) 2002-2013, and GNU GPL'd, by Nicholas Nethercote et al.");
+      "Copyright (C) 2002-2015, and GNU GPL'd, by Nicholas Nethercote et al.");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
    VG_(details_avg_translation_sizeB) ( 500 );
 
diff --git a/cachegrind/cg_merge.c b/cachegrind/cg_merge.c
index 6cb7f5e..b17b1ea 100644
--- a/cachegrind/cg_merge.c
+++ b/cachegrind/cg_merge.c
@@ -8,7 +8,7 @@
   This file is part of Cachegrind, a Valgrind tool for cache
   profiling programs.
 
-  Copyright (C) 2002-2013 Nicholas Nethercote
+  Copyright (C) 2002-2015 Nicholas Nethercote
      njn@valgrind.org
 
   AVL tree code derived from
diff --git a/cachegrind/cg_sim.c b/cachegrind/cg_sim.c
index 1b33fcf..7edd18e 100644
--- a/cachegrind/cg_sim.c
+++ b/cachegrind/cg_sim.c
@@ -7,7 +7,7 @@
    This file is part of Cachegrind, a Valgrind tool for cache
    profiling programs.
 
-   Copyright (C) 2002-2013 Nicholas Nethercote
+   Copyright (C) 2002-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -155,7 +155,7 @@
       }
       return cachesim_setref_is_miss(c, set2, tag2);
    }
-   VG_(printf)("addr: %lx  size: %u  blocks: %ld %ld",
+   VG_(printf)("addr: %lx  size: %u  blocks: %lu %lu",
                a, size, block1, block2);
    VG_(tool_panic)("item straddles more than two cache sets");
    /* not reached */
diff --git a/callgrind/bb.c b/callgrind/bb.c
index b9b3812..ceea5b9 100644
--- a/callgrind/bb.c
+++ b/callgrind/bb.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -101,7 +101,7 @@
     VG_(free)(bbs.table);
 
 
-    CLG_DEBUG(0, "Resize BB Hash: %d => %d (entries %d, conflicts %d/%d)\n",
+    CLG_DEBUG(0, "Resize BB Hash: %u => %d (entries %u, conflicts %d/%d)\n",
 	     bbs.size, new_size,
 	     bbs.entries, conflicts1, conflicts2);
 
@@ -157,7 +157,7 @@
 
 #if CLG_ENABLE_DEBUG
    CLG_DEBUGIF(3) {
-     VG_(printf)("  new_bb (instr %d, jmps %d, inv %s) [now %d]: ",
+     VG_(printf)("  new_bb (instr %u, jmps %u, inv %s) [now %d]: ",
 		 instr_count, cjmp_count,
 		 cjmp_inverted ? "yes":"no",
 		 CLG_(stat).distinct_bbs);
@@ -188,7 +188,7 @@
     }
 
     CLG_DEBUG(5, "  lookup_bb (Obj %s, off %#lx): %p\n",
-	     obj->name, offset, bb);
+              obj->name, (UWord)offset, bb);
     return bb;
 }
 
@@ -234,7 +234,7 @@
  *   This involves a possibly different address, but is handled by
  *   looking up a BB keyed by (obj_node, file offset).
  *
- * bbIn==0 is possible for artifical BB without real code.
+ * bbIn==0 is possible for artificial BB without real code.
  * Such a BB is created when returning to an unknown function.
  */
 BB* CLG_(get_bb)(Addr addr, IRSB* bbIn, /*OUT*/ Bool *seen_before)
@@ -260,12 +260,12 @@
 		   "ERROR: BB Retranslation Mismatch at BB %#lx\n", addr);
       VG_(message)(Vg_DebugMsg,
 		   "  new: Obj %s, Off %#lx, BBOff %#lx, Instrs %u\n",
-		   obj->name, obj->offset,
+		   obj->name, (UWord)obj->offset,
 		   addr - obj->offset, n_instrs);
       VG_(message)(Vg_DebugMsg,
 		   "  old: Obj %s, Off %#lx, BBOff %#lx, Instrs %u\n",
-		   bb->obj->name, bb->obj->offset,
-		   bb->offset, bb->instr_count);
+		   bb->obj->name, (UWord)bb->obj->offset,
+		   (UWord)bb->offset, bb->instr_count);
       CLG_ASSERT(bb->instr_count == n_instrs );
     }
     CLG_ASSERT(bb->cjmp_count == n_jmps );
@@ -306,7 +306,7 @@
 
     if (bb == NULL) {
 	CLG_DEBUG(3, "  delete_bb (Obj %s, off %#lx): NOT FOUND\n",
-		  obj->name, offset);
+		  obj->name, (UWord)offset);
 
 	/* we didn't find it.
 	 * this happens when callgrinds instrumentation mode
@@ -327,7 +327,7 @@
     }
 
     CLG_DEBUG(3, "  delete_bb (Obj %s, off %#lx): %p, BBCC head: %p\n",
-	      obj->name, offset, bb, bb->bbcc_list);
+	      obj->name, (UWord)offset, bb, bb->bbcc_list);
 
     if (bb->bbcc_list == 0) {
 	/* can be safely deleted */
diff --git a/callgrind/bbcc.c b/callgrind/bbcc.c
index 1580a47..e9426e5 100644
--- a/callgrind/bbcc.c
+++ b/callgrind/bbcc.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -86,8 +86,8 @@
   jCC* jcc;
 
   CLG_ASSERT(bbcc->cxt != 0);
-  CLG_DEBUG(1, "  zero_bbcc: BB %#lx, Cxt %d "
-	   "(fn '%s', rec %d)\n", 
+  CLG_DEBUG(1, "  zero_bbcc: BB %#lx, Cxt %u "
+	   "(fn '%s', rec %u)\n", 
 	   bb_addr(bbcc->bb),
 	   bbcc->cxt->base_number + bbcc->rec_index,
 	   bbcc->cxt->fn[0]->name,
@@ -178,7 +178,7 @@
        bbcc = bbcc->next;
    }
    
-   CLG_DEBUG(2,"  lookup_bbcc(BB %#lx, Cxt %d, fn '%s'): %p (tid %d)\n",
+   CLG_DEBUG(2,"  lookup_bbcc(BB %#lx, Cxt %u, fn '%s'): %p (tid %u)\n",
 	    bb_addr(bb), cxt->base_number, cxt->fn[0]->name, 
 	    bbcc, bbcc ? bbcc->tid : 0);
 
@@ -230,7 +230,7 @@
     VG_(free)(current_bbccs.table);
 
 
-    CLG_DEBUG(0,"Resize BBCC Hash: %d => %d (entries %d, conflicts %d/%d)\n",
+    CLG_DEBUG(0,"Resize BBCC Hash: %u => %d (entries %u, conflicts %d/%d)\n",
 	     current_bbccs.size, new_size,
 	     current_bbccs.entries, conflicts1, conflicts2);
 
@@ -332,7 +332,7 @@
     bbcc->next = current_bbccs.table[idx];
     current_bbccs.table[idx] = bbcc;
 
-    CLG_DEBUG(3,"- insert_bbcc_into_hash: %d entries\n",
+    CLG_DEBUG(3,"- insert_bbcc_into_hash: %u entries\n",
 	     current_bbccs.entries);
 }
 
@@ -906,7 +906,7 @@
     VG_(printf)("\n");
   }
   
-  CLG_DEBUG(3,"- setup_bbcc (BB %#lx): Cost %p (Len %d), Instrs %d (Len %d)\n",
+  CLG_DEBUG(3,"- setup_bbcc (BB %#lx): Cost %p (Len %u), Instrs %u (Len %u)\n",
 	   bb_addr(bb), bbcc->cost, bb->cost_count, 
 	   bb->instr_count, bb->instr_len);
   CLG_DEBUGIF(3)
diff --git a/callgrind/callgrind.h b/callgrind/callgrind.h
index 1079090..33b0e29 100644
--- a/callgrind/callgrind.h
+++ b/callgrind/callgrind.h
@@ -13,7 +13,7 @@
    This file is part of callgrind, a valgrind tool for cache simulation
    and call tree tracing.
 
-   Copyright (C) 2003-2013 Josef Weidendorfer.  All rights reserved.
+   Copyright (C) 2003-2015 Josef Weidendorfer.  All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
diff --git a/callgrind/callgrind_annotate.in b/callgrind/callgrind_annotate.in
index 75b1a07..82f6f05 100644
--- a/callgrind/callgrind_annotate.in
+++ b/callgrind/callgrind_annotate.in
@@ -8,11 +8,11 @@
 #  This file is part of Callgrind, a cache-simulator and call graph
 #  tracer built on Valgrind.
 #
-#  Copyright (C) 2003-2013 Josef Weidendorfer
+#  Copyright (C) 2003-2015 Josef Weidendorfer
 #     Josef.Weidendorfer@gmx.de
 #
 #  This file is based heavily on cg_annotate, part of Valgrind.
-#  Copyright (C) 2002-2013 Nicholas Nethercote
+#  Copyright (C) 2002-2015 Nicholas Nethercote
 #     njn@valgrind.org
 #
 #  This program is free software; you can redistribute it and/or
diff --git a/callgrind/callgrind_control.in b/callgrind/callgrind_control.in
index a38ee16..7660259 100644
--- a/callgrind/callgrind_control.in
+++ b/callgrind/callgrind_control.in
@@ -7,7 +7,7 @@
 #  This file is part of Callgrind, a cache-simulator and call graph
 #  tracer built on Valgrind.
 #
-#  Copyright (C) 2003-2013 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
+#  Copyright (C) 2003-2015 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
 #
 #  This program is free software; you can redistribute it and/or
 #  modify it under the terms of the GNU General Public License as
diff --git a/callgrind/callstack.c b/callgrind/callstack.c
index 19846af..abe5126 100644
--- a/callgrind/callstack.c
+++ b/callgrind/callstack.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -107,7 +107,7 @@
   CLG_(stat).call_stack_resizes++;
  
   CLG_DEBUGIF(2)
-    VG_(printf)("        call stack enlarged to %d entries\n",
+    VG_(printf)("        call stack enlarged to %u entries\n",
 		CLG_(current_call_stack).size);
 }
 
@@ -280,7 +280,7 @@
 				  ".   .   .   .   .   .   .   .   .   .   " };
 
 	    int s = CLG_(current_call_stack).sp;
-	    Int* pars = (Int*) sp;
+	    UInt* pars = (UInt*) sp;
 
 	    BB* bb = jcc->to->bb;
 	    if (s>40) s=40;
@@ -288,7 +288,7 @@
                         pars ? pars[1]:0,
 			pars ? pars[2]:0,
 			bb->obj->name + bb->obj->last_slash_pos,
-			bb->offset);
+			(UWord)bb->offset);
 	  }
 	}
 	else if (CLG_(clo).verbose<4) {
diff --git a/callgrind/clo.c b/callgrind/clo.c
index 5ee62e6..fa76f1e 100644
--- a/callgrind/clo.c
+++ b/callgrind/clo.c
@@ -2,10 +2,10 @@
    This file is part of Callgrind, a Valgrind tool for call graph
    profiling programs.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This tool is derived from and contains lot of code from Cachegrind
-   Copyright (C) 2002-2013 Nicholas Nethercote (njn@valgrind.org)
+   Copyright (C) 2002-2015 Nicholas Nethercote (njn@valgrind.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/context.c b/callgrind/context.c
index 92b8527..33f7386 100644
--- a/callgrind/context.c
+++ b/callgrind/context.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -120,7 +120,7 @@
     VG_(free)(cxts.table);
 
 
-    CLG_DEBUG(0, "Resize Context Hash: %d => %d (entries %d, conflicts %d/%d)\n",
+    CLG_DEBUG(0, "Resize Context Hash: %u => %u (entries %u, conflicts %u/%u)\n",
              cxts.size, new_size,
              cxts.entries, conflicts1, conflicts2);
 
@@ -236,7 +236,7 @@
     size = (*fn)->separate_callers+1;
     if (size<=0) { size = -size+1; }
 
-    CLG_DEBUG(5, "+ get_cxt(fn '%s'): size %d\n",
+    CLG_DEBUG(5, "+ get_cxt(fn '%s'): size %u\n",
                 (*fn)->name, size);
 
     hash = cxt_hash_val(fn, size);
@@ -279,7 +279,7 @@
   CLG_DEBUG(5, "+ push_cxt(fn '%s'): old ctx %d\n", 
 	    fn ? fn->name : "0x0",
 	    CLG_(current_state).cxt ?
-	    CLG_(current_state).cxt->base_number : -1);
+	    (Int)CLG_(current_state).cxt->base_number : -1);
 
   /* save old context on stack (even if not changed at all!) */
   CLG_ASSERT(cs->sp < cs->size);
@@ -294,7 +294,7 @@
   /* resizing needed ? */
   fn_entries = CLG_(current_fn_stack).top - CLG_(current_fn_stack).bottom;
   if (fn_entries == CLG_(current_fn_stack).size-1) {
-    int new_size = CLG_(current_fn_stack).size *2;
+    UInt new_size = CLG_(current_fn_stack).size *2;
     fn_node** new_array = (fn_node**) CLG_MALLOC("cl.context.pc.1",
 						 new_size * sizeof(fn_node*));
     int i;
@@ -304,7 +304,7 @@
     CLG_(current_fn_stack).top = new_array + fn_entries;
     CLG_(current_fn_stack).bottom = new_array;
 
-    CLG_DEBUG(0, "Resize Context Stack: %d => %d (pushing '%s')\n", 
+    CLG_DEBUG(0, "Resize Context Stack: %u => %u (pushing '%s')\n", 
 	     CLG_(current_fn_stack).size, new_size,
 	     fn ? fn->name : "0x0");
 
@@ -326,7 +326,7 @@
   CLG_DEBUG(5, "- push_cxt(fn '%s'): new cxt %d, fn_sp %ld\n",
 	    fn ? fn->name : "0x0",
 	    CLG_(current_state).cxt ?
-	      CLG_(current_state).cxt->base_number : -1,
+	    (Int)CLG_(current_state).cxt->base_number : -1,
 	    CLG_(current_fn_stack).top - CLG_(current_fn_stack).bottom + 0L);
 }
 			       
diff --git a/callgrind/costs.c b/callgrind/costs.c
index 63256c7..5071170 100644
--- a/callgrind/costs.c
+++ b/callgrind/costs.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/costs.h b/callgrind/costs.h
index 8335f0d..25ad7c3 100644
--- a/callgrind/costs.h
+++ b/callgrind/costs.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2014 Josef Weidendorfer
+   Copyright (C) 2004-2015 Josef Weidendorfer
       josef.weidendorfer@gmx.de
 
    This program is free software; you can redistribute it and/or
diff --git a/callgrind/debug.c b/callgrind/debug.c
index 2ef21fd..6e8215c 100644
--- a/callgrind/debug.c
+++ b/callgrind/debug.c
@@ -2,10 +2,10 @@
    This file is part of Callgrind, a Valgrind tool for call graph
    profiling programs.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This tool is derived from and contains lot of code from Cachegrind
-   Copyright (C) 2002-2013 Nicholas Nethercote (njn@valgrind.org)
+   Copyright (C) 2002-2015 Nicholas Nethercote (njn@valgrind.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -83,9 +83,9 @@
     UInt *pactive = CLG_(get_fn_entry)(cxt->fn[0]->number);
     CLG_ASSERT(rec_index < cxt->fn[0]->separate_recursions);
     
-    VG_(printf)("Cxt %d" ,cxt->base_number + rec_index);
+    VG_(printf)("Cxt %u" ,cxt->base_number + rec_index);
     if (*pactive>0)
-      VG_(printf)(" [active=%d]", *pactive);
+      VG_(printf)(" [active=%u]", *pactive);
     VG_(printf)(": ");	
     print_mangled_cxt(cxt, rec_index);
     VG_(printf)("\n");
@@ -131,7 +131,7 @@
 
   VG_(printf)("%s +%#lx=%#lx, ",
 	      bb->obj->name + bb->obj->last_slash_pos,
-	      bb->offset, bb_addr(bb));
+	      (UWord)bb->offset, bb_addr(bb));
   CLG_(print_cxt)(s+8, bbcc->cxt, bbcc->rec_index);
 }
 
@@ -151,7 +151,7 @@
 	return;
     }
 
-    VG_(printf)("EventSet %d (%d groups, size %d):",
+    VG_(printf)("EventSet %u (%d groups, size %d):",
 		es->mask, es->count, es->size);
 
     if (es->count == 0) {
@@ -188,7 +188,7 @@
       return;
     }
     if (!c) {
-      VG_(printf)("Cost (Null, EventSet %d)\n", es->mask);
+      VG_(printf)("Cost (Null, EventSet %u)\n", es->mask);
       return;
     }
 
@@ -297,11 +297,11 @@
     obj_node* obj;
 
     if (!bbcc) {
-	VG_(printf)("%08x", 0);
+	VG_(printf)("%08x", 0u);
 	return;
     }
 
-    VG_(printf)("%08lx/%c  %d:", bb_addr(bbcc->bb), 
+    VG_(printf)("%08lx/%c  %u:", bb_addr(bbcc->bb), 
 		(bbcc->bb->sect_kind == Vg_SectText) ? 'T' :
 		(bbcc->bb->sect_kind == Vg_SectData) ? 'D' :
 		(bbcc->bb->sect_kind == Vg_SectBSS) ? 'B' :
@@ -317,7 +317,7 @@
     if (VG_(strcmp)(bbcc->cxt->fn[0]->file->name, "???") !=0) {
 	VG_(printf)(" %s", bbcc->cxt->fn[0]->file->name);
 	if ((bbcc->cxt->fn[0] == bbcc->bb->fn) && (bbcc->bb->line>0))
-	    VG_(printf)(":%d", bbcc->bb->line);
+	    VG_(printf)(":%u", bbcc->bb->line);
     }
 }	
 
@@ -347,7 +347,7 @@
   print_indent(s+2);
   VG_(printf)("ECounter: sum %llu ", ecounter);
   for(i=0; i<bb->cjmp_count; i++) {
-      VG_(printf)("[%d]=%llu ",
+      VG_(printf)("[%u]=%llu ",
 		  bb->jmp[i].instr, bbcc->jmp[i].ecounter);
   }
   VG_(printf)("\n");
@@ -356,7 +356,7 @@
   for(i=0; i<bb->instr_count; i++) {
       InstrInfo* ii = &(bb->instr[i]);
       print_indent(s+2);
-      VG_(printf)("[%2d] IOff %2d ecnt %3llu ",
+      VG_(printf)("[%2d] IOff %2u ecnt %3llu ",
 		  i, ii->instr_offset, ecounter);
       CLG_(print_cost)(s+5, ii->eventset, bbcc->cost + ii->cost_offset);
 
@@ -430,7 +430,7 @@
 {
   BBCC* bbcc;
 
-  CLG_DEBUG(0,"In tid %d [%d] ",
+  CLG_DEBUG(0,"In tid %u [%d] ",
 	   CLG_(current_tid),  CLG_(current_call_stack).sp);
   bbcc =  CLG_(current_state).bbcc;
   print_mangled_cxt(CLG_(current_state).cxt,
diff --git a/callgrind/docs/cl-format.xml b/callgrind/docs/cl-format.xml
index 4426b6a..182b199 100644
--- a/callgrind/docs/cl-format.xml
+++ b/callgrind/docs/cl-format.xml
@@ -103,7 +103,7 @@
 position specifications, but consist of two lines. For calls, the format
 looks like
 <screen>
- calls=(Call Count) (Destination position)
+ calls=(Call Count) (Target position)
  (Source position) (Inclusive cost of call)
 </screen></para>
 
@@ -327,7 +327,7 @@
 
 <para>
 <screen>ProfileDataFile := FormatVersion? Creator? PartData*</screen>
-<screen>FormatVersion := "version:" Space* Number "\n"</screen>
+<screen>FormatVersion := "version: 1\n"</screen>
 <screen>Creator := "creator:" NoNewLineChar* "\n"</screen>
 <screen>PartData := (HeaderLine "\n")+ (BodyLine "\n")+</screen>
 <screen>HeaderLine := (empty line)
@@ -351,22 +351,23 @@
 <screen>BodyLine := (empty line)
   | ('#' NoNewLineChar*)
   | CostLine
-  | PositionSpecification
-  | AssociationSpecification</screen>
+  | PositionSpec
+  | CallSpec
+  | UncondJumpSpec
+  | CondJumpSpec</screen>
 <screen>CostLine := SubPositionList Costs?</screen>
 <screen>SubPositionList := (SubPosition+ Space+)+</screen>
 <screen>SubPosition := Number | "+" Number | "-" Number | "*"</screen>
 <screen>Costs := (Number Space+)+</screen>
-<screen>PositionSpecification := Position "=" Space* PositionName</screen>
+<screen>PositionSpec := Position "=" Space* PositionName</screen>
 <screen>Position := CostPosition | CalledPosition</screen>
 <screen>CostPosition := "ob" | "fl" | "fi" | "fe" | "fn"</screen>
 <screen>CalledPosition := " "cob" | "cfi" | "cfl" | "cfn"</screen>
 <screen>PositionName := ( "(" Number ")" )? (Space* NoNewLineChar* )?</screen>
-<screen>AssociationSpecification := CallSpecification
-  | JumpSpecification</screen>
-<screen>CallSpecification := CallLine "\n" CostLine</screen>
+<screen>CallSpec := CallLine "\n" CostLine</screen>
 <screen>CallLine := "calls=" Space* Number Space+ SubPositionList</screen>
-<screen>JumpSpecification := ...</screen>
+<screen>UncondJumpSpec := "jump=" Space* Number Space+ SubPositionList</screen>
+<screen>CondJumpSpec := "jcnd=" Space* Number Space+ Number Space+ SubPositionList</screen>
 <screen>Space := " " | "\t"</screen>
 <screen>Number := HexNumber | (Digit)+</screen>
 <screen>Digit := "0" | ... | "9"</screen>
@@ -377,16 +378,23 @@
 <screen>NoNewLineChar := all characters without "\n"</screen>
 </para>
 
+<para>A profile data file ("ProfileDataFile") starts with basic information
+  such as the version and creator information, and then has a list of parts, where
+  each part has its own header and body. Parts typically are different threads
+  and/or time spans/phases within a profiled application run.</para>
+
+<para>Note that callgrind_annotate currently only supports profile data files with
+  one part. Callgrind may produce multiple parts for one profile run, but defaults
+  to one output file for each part.</para>
+
 </sect2>
 
 <sect2 id="cl-format.reference.header" xreflabel="Description of Header Lines">
 <title>Description of Header Lines</title>
 
-<para>The header has an arbitrary number of lines of the format 
-"key: value". Possible <emphasis>key</emphasis> values for the header are:</para>
+<para>Basic information in the first lines of a profile data file:</para>
 
 <itemizedlist>
-
   <listitem>
     <para><computeroutput>version: number</computeroutput> [Callgrind]</para>
     <para>This is used to distinguish future profile data formats.  A 
@@ -396,6 +404,19 @@
   </listitem>
 
   <listitem>
+    <para><computeroutput>creator: string</computeroutput> [Callgrind]</para>
+    <para>This is an arbitrary string to denote the creator of this file.
+      Optional.</para>
+  </listitem>
+
+</itemizedlist>    
+
+<para>The header for each part has an arbitrary number of lines of the format 
+"key: value". Possible <emphasis>key</emphasis> values for the header are:</para>
+
+<itemizedlist>
+
+  <listitem>
     <para><computeroutput>pid: process id</computeroutput> [Callgrind]</para>
     <para>Optional. This specifies the process ID of the supervised application 
     for which this profile was generated.</para>
@@ -441,33 +462,18 @@
     responsible for the events raised. Note that the mapping of "instr"
     and "line" positions are given by the debugging line information
     produced by the compiler.</para>
-    <para>This field is optional. If not specified, "line" is supposed 
-    only.</para>
+    <para>This header line is optional, defaulting to "positions:
+    line" if not specified.</para>
   </listitem>
 
   <listitem>
     <para><computeroutput>events: event type abbreviations</computeroutput> [Cachegrind]</para>
-    <para>A list of short names of the event types logged in this file. 
-    The order is the same as in cost lines.  The first event type is the
-    second or third number in a cost line, depending on the value of 
-    "positions".  Callgrind does not add additional cost types.  Specify
-    exactly once.</para>
-    <para>Cost types from original Cachegrind are:
-      <itemizedlist>
-        <listitem>
-          <para><command>Ir</command>: Instruction read access</para>
-        </listitem>
-        <listitem>
-          <para><command>I1mr</command>: Instruction Level 1 read cache miss</para>
-        </listitem>
-        <listitem>
-          <para><command>ILmr</command>: Instruction last-level read cache miss</para>
-        </listitem>
-        <listitem>
-          <para>...</para>
-        </listitem>
-      </itemizedlist>
-    </para>
+    <para>A list of short names of the event types logged in cost
+      lines in this part of the profile data file. Arbitrary short
+      names are allowed.  The order given specifies the required order
+      in cost lines. Thus, the first event type is the second or third
+      number in a cost line, depending on the value of "positions".
+      Required to appear for each header part exactly once.</para>
   </listitem>
 
   <listitem>
@@ -491,9 +497,19 @@
 <sect2 id="cl-format.reference.body" xreflabel="Description of Body Lines">
 <title>Description of Body Lines</title>
 
-<para>There exist lines
-<computeroutput>spec=position</computeroutput>.  The values for position
-specifications are arbitrary strings.  When starting with "(" and a
+<para>The regular body line is a cost line consisting of one or two
+position numbers (depending on "positions:" header line, see above)
+and an array of cost numbers. A position number either is a
+line numbers into a source file or an instruction address within binary
+code, with source/binary file names specified as position names (see
+below). The cost numbers get mapped to event types in the same order
+as specified in the "events:" header line. If less numbers than event
+types are given, the costs default to zero for the remaining event
+types.</para>
+
+<para>Further, there exist lines
+<computeroutput>spec=position name</computeroutput>.  A position name
+is an arbitrary string. If it starts with "(" and a
 digit, it's a string in compressed format.  Otherwise it's the real
 position string.  This allows for file and symbol names as position
 strings, as these never start with "(" + <emphasis>digit</emphasis>.
@@ -558,26 +574,30 @@
     lines.</para>
   </listitem>
 
+</itemizedlist>
+
+<para>The last type of body line provides specific costs not just
+related to one position as regular cost lines. It starts with specific
+strings similar to position name specifications.</para>
+
+<itemizedlist>
+
   <listitem>
-    <para><computeroutput>calls=</computeroutput> [Callgrind]</para>
-    <para>The number of nonrecursive calls which are responsible for the 
-    cost specified by the next call cost line. This is the cost spent 
-    inside of the called function.</para>
-    <para>After "calls=" there MUST be a cost line. This is the cost
-    spent in the called function. The first number is the source line 
-    from where the call happened.</para>
+    <para><computeroutput>calls=count target-position</computeroutput> [Callgrind]</para>
+    <para>Call executed "count" times to "target-position".
+    After a "calls=" line there MUST be a cost line. This provides the source position
+    of the call and the cost spent in the called function in total.</para>
   </listitem>
 
   <listitem>
-    <para><computeroutput>jump=count target position</computeroutput> [Callgrind]</para>
-    <para>Unconditional jump, executed count times, to the given target
-    position.</para>
+    <para><computeroutput>jump=count target-position</computeroutput> [Callgrind]</para>
+    <para>Unconditional jump, executed "count" times, to "target-position".</para>
   </listitem>
 
   <listitem>
-    <para><computeroutput>jcnd=exe.count jumpcount target position</computeroutput> [Callgrind]</para>
-    <para>Conditional jump, executed exe.count times with jumpcount 
-    jumps to the given target position.</para>
+    <para><computeroutput>jcnd=exe-count jump-count target-position</computeroutput> [Callgrind]</para>
+    <para>Conditional jump, executed "exe-count" times with "jump-count" jumps
+    happening (rest is fall-through) to "target-position".</para>
   </listitem>
 
 </itemizedlist>
diff --git a/callgrind/docs/cl-manual.xml b/callgrind/docs/cl-manual.xml
index 369180c..508094e 100644
--- a/callgrind/docs/cl-manual.xml
+++ b/callgrind/docs/cl-manual.xml
@@ -310,49 +310,78 @@
          xreflabel="Limiting range of event collection">
   <title>Limiting the range of collected events</title>
 
-  <para>For aggregating events (function enter/leave,
-  instruction execution, memory access) into event numbers,
-  first, the events must be recognizable by Callgrind, and second,
-  the collection state must be enabled.</para>
-
-  <para>Event collection is only possible if <emphasis>instrumentation</emphasis>
-  for program code is enabled. This is the default, but for faster
-  execution (identical to <computeroutput>valgrind --tool=none</computeroutput>),
-  it can be disabled until the program reaches a state in which
-  you want to start collecting profiling data.  
-  Callgrind can start without instrumentation
-  by specifying option <option><xref linkend="opt.instr-atstart"/>=no</option>.
-  Instrumentation can be enabled interactively
-  with: <screen>callgrind_control -i on</screen>
-  and off by specifying "off" instead of "on".
-  Furthermore, instrumentation state can be programatically changed with
-  the macros <computeroutput><xref linkend="cr.start-instr"/>;</computeroutput>
-  and <computeroutput><xref linkend="cr.stop-instr"/>;</computeroutput>.
+  <para>By default, whenever events are happening (such as an
+    instruction execution or cache hit/miss), Callgrind is aggregating
+    them into event counters. However, you may be interested only in
+    what is happening within a given function or starting from a given
+    program phase. To this end, you can disable event aggregation for
+    uninteresting program parts. While attribution of events to
+    functions as well as producing seperate output per program phase
+    can be done by other means (see previous section), there are two
+    benefits by disabling aggregation. First, this is very
+    fine-granular (e.g. just for a loop within a function).  Second,
+    disabling event aggregation for complete program phases allows to
+    switch off time-consuming cache simulation and allows Callgrind to
+    progress at much higher speed with an slowdown of around factor 2
+    (identical to <computeroutput>valgrind
+    --tool=none</computeroutput>).
   </para>
-  
-  <para>In addition to enabling instrumentation, you must also enable
-  event collection for the parts of your program you are interested in.
-  By default, event collection is enabled everywhere.
-  You can limit collection to a specific function
-  by using 
-  <option><xref linkend="opt.toggle-collect"/>=function</option>. 
-  This will toggle the collection state on entering and leaving
-  the specified functions.
-  When this option is in effect, the default collection state
-  at program start is "off".  Only events happening while running
-  inside of the given function will be collected. Recursive
-  calls of the given function do not trigger any action.</para>
 
-  <para>It is important to note that with instrumentation disabled, the
-  cache simulator cannot see any memory access events, and thus, any
-  simulated cache state will be frozen and wrong without instrumentation.
-  Therefore, to get useful cache events (hits/misses) after switching on
-  instrumentation, the cache first must warm up,
-  probably leading to many <emphasis>cold misses</emphasis>
-  which would not have happened in reality. If you do not want to see these,
-  start event collection a few million instructions after you have enabled
-  instrumentation.</para>
+  <para>There are two aspects which influence whether Callgrind is
+    aggregating events at some point in time of program execution.
+    First, there is the <emphasis>collection state</emphasis>. If this
+    is off, no aggregation will be done.  By changing the collection
+    state, you can control event aggregation at a very fine
+    granularity.  However, there is not much difference in regard to
+    execution speed of Callgrind.  By default, collection is switched
+    on, but can be disabled by different means (see below).  Second,
+    there is the <emphasis>instrumentation mode</emphasis> in which
+    Callgrind is running. This mode either can be on or off. If
+    instrumentation is off, no observation of actions in the program
+    will be done and thus, no actions will be forwarded to the
+    simulator which could trigger events. In the end, no events will
+    be aggregated.  The huge benefit is the much higher speed with
+    instrumentation switched off.  However, this only should be used
+    with care and in a coarse fashion: every mode change resets the
+    simulator state (ie. whether a memory block is cached or not) and
+    flushes Valgrinds internal cache of instrumented code blocks,
+    resulting in latency penalty at switching time. Also, cache
+    simulator results directly after switching on instrumentation will
+    be skewed due to identified cache misses which would not happen in
+    reality (if you care about this warm-up effect, you should make
+    sure to temporarly have collection state switched off directly
+    after turning instrumentation mode on). However, switching
+    instrumentation state is very useful to skip larger program phases
+    such as an initialization phase. By default, instrumentation is
+    switched on, but as with the collection state, can be changed by
+    various means.
+  </para>
 
+  <para>Callgrind can start with instrumentation mode switched off by
+    specifying
+    option <option><xref linkend="opt.instr-atstart"/>=no</option>.
+    Afterwards, instrumentation can be controlled in two ways: first,
+    interactively with: <screen>callgrind_control -i on</screen> (and
+    switching off again by specifying "off" instead of "on").  Second,
+    instrumentation state can be programatically changed with the
+    macros <computeroutput><xref linkend="cr.start-instr"/>;</computeroutput>
+    and <computeroutput><xref linkend="cr.stop-instr"/>;</computeroutput>.
+  </para>
+
+  <para>Similarly, the collection state at program start can be
+    switched off
+    by <option><xref linkend="opt.instr-atstart"/>=no</option>. During
+    execution, it can be controlled programatically with the
+    macro <computeroutput>CALLGRIND_TOGGLE_COLLECT;</computeroutput>.
+    Further, you can limit event collection to a specific function by
+    using <option><xref linkend="opt.toggle-collect"/>=function</option>.
+    This will toggle the collection state on entering and leaving the
+    specified function.  When this option is in effect, the default
+    collection state at program start is "off".  Only events happening
+    while running inside of the given function will be
+    collected. Recursive calls of the given function do not trigger
+    any action. This option can be given multiple times to specify
+    different functions of interest.</para>
   </sect2>
 
   <sect2 id="cl-manual.busevents" xreflabel="Counting global bus events">
diff --git a/callgrind/dump.c b/callgrind/dump.c
index c6d4de1..8907995 100644
--- a/callgrind/dump.c
+++ b/callgrind/dump.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -129,9 +129,9 @@
     if (CLG_(clo).compress_strings) {
 	CLG_ASSERT(obj_dumped != 0);
 	if (obj_dumped[obj->number])
-            VG_(fprintf)(fp, "%s(%d)\n", prefix, obj->number);
+            VG_(fprintf)(fp, "%s(%u)\n", prefix, obj->number);
 	else {
-            VG_(fprintf)(fp, "%s(%d) %s\n", prefix, obj->number, obj->name);
+            VG_(fprintf)(fp, "%s(%u) %s\n", prefix, obj->number, obj->name);
 	}
     }
     else
@@ -155,9 +155,9 @@
     if (CLG_(clo).compress_strings) {
 	CLG_ASSERT(file_dumped != 0);
 	if (file_dumped[file->number])
-            VG_(fprintf)(fp, "%s(%d)\n", prefix, file->number);
+            VG_(fprintf)(fp, "%s(%u)\n", prefix, file->number);
 	else {
-            VG_(fprintf)(fp, "%s(%d) %s\n", prefix, file->number, file->name);
+            VG_(fprintf)(fp, "%s(%u) %s\n", prefix, file->number, file->name);
 	    file_dumped[file->number] = True;
 	}
     }
@@ -174,9 +174,9 @@
     if (CLG_(clo).compress_strings) {
 	CLG_ASSERT(fn_dumped != 0);
 	if (fn_dumped[fn->number])
-	    VG_(fprintf)(fp, "(%d)\n", fn->number);
+	    VG_(fprintf)(fp, "(%u)\n", fn->number);
 	else {
-	    VG_(fprintf)(fp, "(%d) %s\n", fn->number, fn->name);
+	    VG_(fprintf)(fp, "(%u) %s\n", fn->number, fn->name);
 	    fn_dumped[fn->number] = True;
 	}
     }
@@ -196,7 +196,7 @@
 
 	CLG_ASSERT(cxt_dumped != 0);
 	if (cxt_dumped[cxt->base_number+rec_index]) {
-            VG_(fprintf)(fp, "%s=(%d)\n",
+            VG_(fprintf)(fp, "%s=(%u)\n",
 			     tag, cxt->base_number + rec_index);
 	    return;
 	}
@@ -216,13 +216,13 @@
 	/* If the last context was the context to print, we are finished */
 	if ((last == cxt) && (rec_index == 0)) return;
 
-	VG_(fprintf)(fp, "%s=(%d) (%d)", tag,
+	VG_(fprintf)(fp, "%s=(%u) (%u)", tag,
 			 cxt->base_number + rec_index,
 			 cxt->fn[0]->pure_cxt->base_number);
 	if (rec_index >0)
 	    VG_(fprintf)(fp, "'%d", rec_index +1);
 	for(i=1;i<cxt->size;i++)
-	    VG_(fprintf)(fp, "'(%d)", 
+	    VG_(fprintf)(fp, "'(%u)", 
 			      cxt->fn[i]->pure_cxt->base_number);
 	VG_(fprintf)(fp, "\n");
 
@@ -235,11 +235,11 @@
     if (CLG_(clo).compress_strings) {
 	CLG_ASSERT(cxt_dumped != 0);
 	if (cxt_dumped[cxt->base_number+rec_index]) {
-	    VG_(fprintf)(fp, "(%d)\n", cxt->base_number + rec_index);
+	    VG_(fprintf)(fp, "(%u)\n", cxt->base_number + rec_index);
 	    return;
 	}
 	else {
-	    VG_(fprintf)(fp, "(%d) ", cxt->base_number + rec_index);
+	    VG_(fprintf)(fp, "(%u) ", cxt->base_number + rec_index);
 	    cxt_dumped[cxt->base_number+rec_index] = True;
 	}
     }
@@ -273,7 +273,7 @@
 
     if (!CLG_(clo).mangle_names) {
 	if (last->rec_index != bbcc->rec_index) {
-	    VG_(fprintf)(fp, "rec=%d\n\n", bbcc->rec_index);
+	    VG_(fprintf)(fp, "rec=%u\n\n", bbcc->rec_index);
 	    last->rec_index = bbcc->rec_index;
 	    last->cxt = 0; /* reprint context */
 	    res = True;
@@ -436,7 +436,7 @@
                         file_node* func_file)
 {
     CLG_ASSERT(curr->file != 0);
-    CLG_DEBUG(2, "    print_apos(file '%s', line %d, bb %#lx, addr %#lx) fnFile '%s'\n",
+    CLG_DEBUG(2, "    print_apos(file '%s', line %u, bb %#lx, addr %#lx) fnFile '%s'\n",
 	     curr->file->name, curr->line, curr->bb_addr, curr->addr,
 	     func_file->name);
 
@@ -451,7 +451,7 @@
 
     if (CLG_(clo).dump_bbs) {
 	if (curr->line != last->line) {
-	    VG_(fprintf)(fp, "ln=%d\n", curr->line);
+	    VG_(fprintf)(fp, "ln=%u\n", curr->line);
 	}
     }
 }
@@ -541,7 +541,7 @@
 static void fprint_fcost(VgFile *fp, AddrCost* c, AddrPos* last)
 {
   CLG_DEBUGIF(3) {
-    CLG_DEBUG(2, "   print_fcost(file '%s', line %d, bb %#lx, addr %#lx):\n",
+    CLG_DEBUG(2, "   print_fcost(file '%s', line %u, bb %#lx, addr %#lx):\n",
 	     c->p.file->name, c->p.line, c->p.bb_addr, c->p.addr);
     CLG_(print_cost)(-5, CLG_(sets).full, c->cost);
   }
@@ -566,7 +566,7 @@
     obj_node*  obj;
 
     CLG_DEBUGIF(2) {
-      CLG_DEBUG(2, "   fprint_jcc (jkind %d)\n", jcc->jmpkind);
+      CLG_DEBUG(2, "   fprint_jcc (jkind %d)\n", (Int)jcc->jmpkind);
       CLG_(print_jcc)(-10, jcc);
     }
 
@@ -589,7 +589,7 @@
        */
       CLG_ASSERT(jcc->from->bb->obj == jcc->to->bb->obj);
 
-	/* only print if target position info is usefull */
+	/* only print if target position info is useful */
 	if (!CLG_(clo).dump_instr && !CLG_(clo).dump_bb && target.line==0) {
 	  jcc->call_counter = 0;
 	  return;
@@ -689,7 +689,7 @@
 
   CLG_ASSERT(bbcc->cxt != 0);
   CLG_DEBUGIF(1) {
-    VG_(printf)("+ fprint_bbcc (Instr %d): ", bb->instr_count);
+    VG_(printf)("+ fprint_bbcc (Instr %u): ", bb->instr_count);
     CLG_(print_bbcc)(15, bbcc);
   }
 
@@ -817,7 +817,7 @@
     }
     if (CLG_(clo).dump_bbs) VG_(fprintf)(fp, "\n");
     
-    /* when every cost was immediatly written, we must have done so,
+    /* when every cost was immediately written, we must have done so,
      * as this function is only called when there's cost in a BBCC
      */
     CLG_ASSERT(something_written);
@@ -907,7 +907,7 @@
 
 static BBCC** qsort_start = 0;
 
-static void qsort(BBCC **a, int n, int (*cmp)(BBCC**,BBCC**))
+static void CLG_(qsort)(BBCC **a, int n, int (*cmp)(BBCC**,BBCC**))
 {
 	BBCC **pa, **pb, **pc, **pd, **pl, **pm, **pn, **pv;
 	int s, r;
@@ -1005,8 +1005,8 @@
 	    }
 	}
 
-	if ((s = pb+1-pa) > 1) qsort(a,     s, cmp);
-	if ((s = pd+1-pc) > 1) qsort(a+n-s, s, cmp);
+	if ((s = pb+1-pa) > 1) CLG_(qsort)(a,     s, cmp);
+	if ((s = pd+1-pc) > 1) CLG_(qsort)(a+n-s, s, cmp);
 }
 
 
@@ -1049,7 +1049,7 @@
 			   e->enter_cost, CLG_(current_state).cost);
     bbcc = e->jcc->from;
 
-    CLG_DEBUG(1, " [%2d] (tid %d), added active: %s\n",
+    CLG_DEBUG(1, " [%2d] (tid %u), added active: %s\n",
 	     i,CLG_(current_tid),bbcc->cxt->fn[0]->name);
     
     if (bbcc->ecounter_sum>0 || bbcc->ret_counter>0) {
@@ -1131,7 +1131,7 @@
     CLG_DEBUG(0,"             BBCCs inserted\n");
 
     qsort_start = array;
-    qsort(array, prepare_count, my_cmp);
+    CLG_(qsort)(array, prepare_count, my_cmp);
 
     CLG_DEBUG(0,"             BBCCs sorted\n");
 
@@ -1372,11 +1372,11 @@
   FnPos lastFnPos;
   AddrPos lastAPos;
 
-  CLG_DEBUG(1, "+ print_bbccs(tid %d)\n", CLG_(current_tid));
+  CLG_DEBUG(1, "+ print_bbccs(tid %u)\n", CLG_(current_tid));
 
   VgFile *print_fp = new_dumpfile(CLG_(current_tid), print_trigger);
   if (print_fp == NULL) {
-    CLG_DEBUG(1, "- print_bbccs(tid %d): No output...\n", CLG_(current_tid));
+    CLG_DEBUG(1, "- print_bbccs(tid %u): No output...\n", CLG_(current_tid));
     return;
   }
 
@@ -1419,14 +1419,14 @@
 	/* FIXME: Specify Object of BB if different to object of fn */
         int i;
 	ULong ecounter = (*p)->ecounter_sum;
-        VG_(fprintf)(print_fp, "bb=%#lx ", (*p)->bb->offset);
+        VG_(fprintf)(print_fp, "bb=%#lx ", (UWord)(*p)->bb->offset);
 	for(i = 0; i<(*p)->bb->cjmp_count;i++) {
-	    VG_(fprintf)(print_fp, "%d %llu ", 
+	    VG_(fprintf)(print_fp, "%u %llu ", 
 				(*p)->bb->jmp[i].instr,
 				ecounter);
 	    ecounter -= (*p)->jmp[i].ecounter;
 	}
-	VG_(fprintf)(print_fp, "%d %llu\n", 
+	VG_(fprintf)(print_fp, "%u %llu\n", 
 		     (*p)->bb->instr_count,
 		     ecounter);
     }
@@ -1443,7 +1443,7 @@
   CLG_(copy_cost)( CLG_(sets).full, ti->lastdump_cost,
 		  CLG_(current_state).cost );
 
-  CLG_DEBUG(1, "- print_bbccs(tid %d)\n", CLG_(current_tid));
+  CLG_DEBUG(1, "- print_bbccs(tid %u)\n", CLG_(current_tid));
 }
 
 
diff --git a/callgrind/events.c b/callgrind/events.c
index 95babca..e7ca68e 100644
--- a/callgrind/events.c
+++ b/callgrind/events.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/events.h b/callgrind/events.h
index 0293043..b38b3c3 100644
--- a/callgrind/events.h
+++ b/callgrind/events.h
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/fn.c b/callgrind/fn.c
index c348fd7..2434941 100644
--- a/callgrind/fn.c
+++ b/callgrind/fn.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -508,10 +508,10 @@
         static HChar buf[32];  // for sure large enough
 	/* Use address as found in library */
 	if (sizeof(Addr) == 4)
-	    p = VG_(sprintf)(buf, "%#08lx", bb->offset);
+          p = VG_(sprintf)(buf, "%#08lx", (UWord)bb->offset);
 	else 	    
 	    // 64bit address
-	    p = VG_(sprintf)(buf, "%#016lx", bb->offset);
+          p = VG_(sprintf)(buf, "%#016lx", (UWord)bb->offset);
 
 	VG_(sprintf)(buf + p, "%s", 
 		     (bb->sect_kind == Vg_SectData) ? " [Data]" :
@@ -572,7 +572,7 @@
 	      VG_(message)(Vg_DebugMsg, "Symbol match: found runtime_resolve:"
                                         " %s +%#lx=%#lx\n",
 		      bb->obj->name + bb->obj->last_slash_pos,
-		      bb->offset, bb_addr(bb));
+                      (UWord)bb->offset, bb_addr(bb));
       }
 
       fn->is_malloc  = (VG_(strcmp)(fn->name, "malloc")==0);
@@ -663,12 +663,12 @@
 static void resize_fn_array(void)
 {
     UInt* new_array;
-    Int i, newsize;
+    Int i;
 
-    newsize = current_fn_active.size;
+    UInt newsize = current_fn_active.size;
     while (newsize <= CLG_(stat).distinct_fns) newsize *=2;
 
-    CLG_DEBUG(0, "Resize fn_active_array: %d => %d\n",
+    CLG_DEBUG(0, "Resize fn_active_array: %u => %u\n",
 	     current_fn_active.size, newsize);
 
     new_array = (UInt*) CLG_MALLOC("cl.fn.rfa.1", newsize * sizeof(UInt));
diff --git a/callgrind/global.h b/callgrind/global.h
index 6f33050..bf511f7 100644
--- a/callgrind/global.h
+++ b/callgrind/global.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2014 Josef Weidendorfer
+   Copyright (C) 2004-2015 Josef Weidendorfer
       josef.weidendorfer@gmx.de
 
    This program is free software; you can redistribute it and/or
diff --git a/callgrind/jumps.c b/callgrind/jumps.c
index ae787b2..dbd4533 100644
--- a/callgrind/jumps.c
+++ b/callgrind/jumps.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -119,7 +119,7 @@
     VG_(free)(current_jccs.table);
 
 
-    CLG_DEBUG(0, "Resize JCC Hash: %d => %d (entries %d, conflicts %d/%d)\n",
+    CLG_DEBUG(0, "Resize JCC Hash: %u => %d (entries %u, conflicts %d/%d)\n",
 	     current_jccs.size, new_size,
 	     current_jccs.entries, conflicts1, conflicts2);
 
@@ -188,7 +188,7 @@
     jCC* jcc;
     UInt idx;
 
-    CLG_DEBUG(5, "+ get_jcc(bbcc %p/%d => bbcc %p)\n",
+    CLG_DEBUG(5, "+ get_jcc(bbcc %p/%u => bbcc %p)\n",
 		from, jmp, to);
 
     /* first check last recently used JCC */
diff --git a/callgrind/main.c b/callgrind/main.c
index 5e501bc..2a9d44e 100644
--- a/callgrind/main.c
+++ b/callgrind/main.c
@@ -8,10 +8,10 @@
    This file is part of Callgrind, a Valgrind tool for call graph
    profiling programs.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This tool is derived from and contains code from Cachegrind
-   Copyright (C) 2002-2013 Nicholas Nethercote (njn@valgrind.org)
+   Copyright (C) 2002-2015 Nicholas Nethercote (njn@valgrind.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -140,7 +140,7 @@
     Int fullOffset_Bc;
     ULong* cost_Bc;
 
-    CLG_DEBUG(6, "log_cond_branch:  Ir %#lx, taken %lu\n",
+    CLG_DEBUG(6, "log_cond_branch:  Ir %#lx, taken %ld\n",
               CLG_(bb_base) + ii->instr_offset, taken);
 
     miss = 1 & do_cond_branch_predict(CLG_(bb_base) + ii->instr_offset, taken);
@@ -331,23 +331,23 @@
 {
    switch (ev->tag) {
       case Ev_Ir:
-	 VG_(printf)("Ir (InstrInfo %p) at +%d\n",
+	 VG_(printf)("Ir (InstrInfo %p) at +%u\n",
 		     ev->inode, ev->inode->instr_offset);
 	 break;
       case Ev_Dr:
-	 VG_(printf)("Dr (InstrInfo %p) at +%d %d EA=",
+	 VG_(printf)("Dr (InstrInfo %p) at +%u %d EA=",
 		     ev->inode, ev->inode->instr_offset, ev->Ev.Dr.szB);
 	 ppIRExpr(ev->Ev.Dr.ea);
 	 VG_(printf)("\n");
 	 break;
       case Ev_Dw:
-	 VG_(printf)("Dw (InstrInfo %p) at +%d %d EA=",
+	 VG_(printf)("Dw (InstrInfo %p) at +%u %d EA=",
 		     ev->inode, ev->inode->instr_offset, ev->Ev.Dw.szB);
 	 ppIRExpr(ev->Ev.Dw.ea);
 	 VG_(printf)("\n");
 	 break;
       case Ev_Dm:
-	 VG_(printf)("Dm (InstrInfo %p) at +%d %d EA=",
+	 VG_(printf)("Dm (InstrInfo %p) at +%u %d EA=",
 		     ev->inode, ev->inode->instr_offset, ev->Ev.Dm.szB);
 	 ppIRExpr(ev->Ev.Dm.ea);
 	 VG_(printf)("\n");
@@ -1353,7 +1353,7 @@
    if (cJumps>0) {
        CLG_DEBUG(3, "                     [ ");
        for (i=0;i<cJumps;i++)
-	   CLG_DEBUG(3, "%d ", clgs.bb->jmp[i].instr);
+	   CLG_DEBUG(3, "%u ", clgs.bb->jmp[i].instr);
        CLG_DEBUG(3, "], last inverted: %s \n",
 		 clgs.bb->cjmp_inverted ? "yes":"no");
    }
@@ -1823,7 +1823,7 @@
 		CLG_(stat).distinct_contexts);
    VG_(message)(Vg_DebugMsg, "Distinct BBs:     %d\n",
 		CLG_(stat).distinct_bbs);
-   VG_(message)(Vg_DebugMsg, "Cost entries:     %d (Chunks %d)\n",
+   VG_(message)(Vg_DebugMsg, "Cost entries:     %u (Chunks %u)\n",
 		CLG_(costarray_entries), CLG_(costarray_chunks));
    VG_(message)(Vg_DebugMsg, "Distinct BBCCs:   %d\n",
 		CLG_(stat).distinct_bbccs);
@@ -2038,7 +2038,7 @@
     VG_(details_name)            ("Callgrind");
     VG_(details_version)         (NULL);
     VG_(details_description)     ("a call-graph generating cache profiler");
-    VG_(details_copyright_author)("Copyright (C) 2002-2013, and GNU GPL'd, "
+    VG_(details_copyright_author)("Copyright (C) 2002-2015, and GNU GPL'd, "
 				  "by Josef Weidendorfer et al.");
     VG_(details_bug_reports_to)  (VG_BUGS_TO);
     VG_(details_avg_translation_sizeB) ( 500 );
diff --git a/callgrind/sim.c b/callgrind/sim.c
index 7478a32..8fedbea 100644
--- a/callgrind/sim.c
+++ b/callgrind/sim.c
@@ -7,10 +7,10 @@
    This file is part of Callgrind, a Valgrind tool for call graph
    profiling programs.
 
-   Copyright (C) 2003-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2003-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This tool is derived from and contains code from Cachegrind
-   Copyright (C) 2002-2013 Nicholas Nethercote (njn@valgrind.org)
+   Copyright (C) 2002-2015 Nicholas Nethercote (njn@valgrind.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -305,7 +305,7 @@
 	return ((res1 == Miss) || (res2 == Miss)) ? Miss : Hit;
 
    } else {
-       VG_(printf)("addr: %lx  size: %u  blocks: %ld %ld",
+       VG_(printf)("addr: %lx  size: %u  blocks: %lu %lu",
 		   a, size, block1, block2);
        VG_(tool_panic)("item straddles more than two cache sets");
    }
@@ -413,7 +413,7 @@
 	return ((res1 == Miss) || (res2 == Miss)) ? Miss : Hit;
 
    } else {
-       VG_(printf)("addr: %lx  size: %u  sets: %d %d", a, size, set1, set2);
+       VG_(printf)("addr: %lx  size: %u  sets: %u %u", a, size, set1, set2);
        VG_(tool_panic)("item straddles more than two cache sets");
    }
    return Hit;
@@ -666,7 +666,7 @@
     CLG_DEBUG(6, "Config %s:\n", c->desc_line);
     for(i=0;i<c->line_size;i++) {
 	CLG_DEBUG(6, " [%2d]: start mask %8x, end mask %8x\n",
-		  i, c->line_start_mask[i], c->line_end_mask[i]);
+		  i, (UInt)c->line_start_mask[i], (UInt)c->line_end_mask[i]);
     }
     
     /* We use lower tag bits as offset pointers to cache use info.
@@ -694,7 +694,7 @@
    UWord *set, tmp_tag; 						    \
    UInt use_mask;							    \
                                                                             \
-   CLG_DEBUG(6,"%s.Acc(Addr %#lx, size %d): Sets [%d/%d]\n",                  \
+   CLG_DEBUG(6,"%s.Acc(Addr %#lx, size %d): Sets [%u/%u]\n",                \
 	    L.name, a, size, set1, set2);				    \
                                                                             \
    /* First case: word entirely within line. */                             \
@@ -711,7 +711,7 @@
         idx = (set1 * L.assoc) + (set[0] & ~L.tag_mask);                    \
         L.use[idx].count ++;                                                \
         L.use[idx].mask |= use_mask;                                        \
-	CLG_DEBUG(6," Hit0 [idx %d] (line %#lx from %#lx): %x => %08x, count %d\n",\
+	CLG_DEBUG(6," Hit0 [idx %d] (line %#lx from %#lx): %x => %08x, count %u\n",\
 		 idx, L.loaded[idx].memline,  L.loaded[idx].iaddr,          \
 		 use_mask, L.use[idx].mask, L.use[idx].count);              \
 	return L1_Hit;							    \
@@ -728,7 +728,7 @@
             idx = (set1 * L.assoc) + (tmp_tag & ~L.tag_mask);               \
             L.use[idx].count ++;                                            \
             L.use[idx].mask |= use_mask;                                    \
-	CLG_DEBUG(6," Hit%d [idx %d] (line %#lx from %#lx): %x => %08x, count %d\n",\
+	CLG_DEBUG(6," Hit%d [idx %d] (line %#lx from %#lx): %x => %08x, count %u\n",\
 		 i, idx, L.loaded[idx].memline,  L.loaded[idx].iaddr,       \
 		 use_mask, L.use[idx].mask, L.use[idx].count);              \
             return L1_Hit;                                                  \
@@ -755,7 +755,7 @@
          idx = (set1 * L.assoc) + (set[0] & ~L.tag_mask);                   \
          L.use[idx].count ++;                                               \
          L.use[idx].mask |= use_mask;                                       \
-	CLG_DEBUG(6," Hit0 [idx %d] (line %#lx from %#lx): %x => %08x, count %d\n",\
+	CLG_DEBUG(6," Hit0 [idx %d] (line %#lx from %#lx): %x => %08x, count %u\n",\
 		 idx, L.loaded[idx].memline,  L.loaded[idx].iaddr,          \
 		 use_mask, L.use[idx].mask, L.use[idx].count);              \
          goto block2;                                                       \
@@ -770,7 +770,7 @@
             idx = (set1 * L.assoc) + (tmp_tag & ~L.tag_mask);               \
             L.use[idx].count ++;                                            \
             L.use[idx].mask |= use_mask;                                    \
-	CLG_DEBUG(6," Hit%d [idx %d] (line %#lx from %#lx): %x => %08x, count %d\n",\
+	CLG_DEBUG(6," Hit%d [idx %d] (line %#lx from %#lx): %x => %08x, count %u\n",\
 		 i, idx, L.loaded[idx].memline,  L.loaded[idx].iaddr,       \
 		 use_mask, L.use[idx].mask, L.use[idx].count);              \
             goto block2;                                                    \
@@ -792,7 +792,7 @@
          idx = (set2 * L.assoc) + (set[0] & ~L.tag_mask);                   \
          L.use[idx].count ++;                                               \
          L.use[idx].mask |= use_mask;                                       \
-	CLG_DEBUG(6," Hit0 [idx %d] (line %#lx from %#lx): %x => %08x, count %d\n",\
+	CLG_DEBUG(6," Hit0 [idx %d] (line %#lx from %#lx): %x => %08x, count %u\n",\
 		 idx, L.loaded[idx].memline,  L.loaded[idx].iaddr,          \
 		 use_mask, L.use[idx].mask, L.use[idx].count);              \
          return miss1;                                                      \
@@ -807,7 +807,7 @@
             idx = (set2 * L.assoc) + (tmp_tag & ~L.tag_mask);               \
             L.use[idx].count ++;                                            \
             L.use[idx].mask |= use_mask;                                    \
-	CLG_DEBUG(6," Hit%d [idx %d] (line %#lx from %#lx): %x => %08x, count %d\n",\
+	CLG_DEBUG(6," Hit%d [idx %d] (line %#lx from %#lx): %x => %08x, count %u\n",\
 		 i, idx, L.loaded[idx].memline,  L.loaded[idx].iaddr,       \
 		 use_mask, L.use[idx].mask, L.use[idx].count);              \
             return miss1;                                                   \
@@ -824,7 +824,7 @@
       return (miss1==MemAccess || miss2==MemAccess) ? MemAccess:LL_Hit;     \
                                                                             \
    } else {                                                                 \
-       VG_(printf)("addr: %#lx  size: %u  sets: %d %d", a, size, set1, set2); \
+       VG_(printf)("addr: %#lx  size: %u  sets: %u %u", a, size, set1, set2); \
        VG_(tool_panic)("item straddles more than two cache sets");          \
    }                                                                        \
    return 0;                                                                \
@@ -858,7 +858,7 @@
   CLG_DEBUG(2, " LL.miss [%d]: at %#lx accessing memline %#lx\n",
            idx, CLG_(bb_base) + current_ii->instr_offset, memline);
   if (use->count>0) {
-    CLG_DEBUG(2, "   old: used %d, loss bits %d (%08x) [line %#lx from %#lx]\n",
+    CLG_DEBUG(2, "   old: used %u, loss bits %d (%08x) [line %#lx from %#lx]\n",
 	     use->count, i, use->mask, loaded->memline, loaded->iaddr);
     CLG_DEBUG(2, "   collect: %d, use_base %p\n",
 	     CLG_(current_state).collect, loaded->use_base);
@@ -889,13 +889,13 @@
    int i, j, idx;
    UWord tmp_tag;
    
-   CLG_DEBUG(6,"LL.Acc(Memline %#lx): Set %d\n", memline, setNo);
+   CLG_DEBUG(6,"LL.Acc(Memline %#lx): Set %u\n", memline, setNo);
 
    if (tag == (set[0] & LL.tag_mask)) {
      idx = (setNo * LL.assoc) + (set[0] & ~LL.tag_mask);
      l1_loaded->dep_use = &(LL.use[idx]);
 
-     CLG_DEBUG(6," Hit0 [idx %d] (line %#lx from %#lx): => %08x, count %d\n",
+     CLG_DEBUG(6," Hit0 [idx %d] (line %#lx from %#lx): => %08x, count %u\n",
 		 idx, LL.loaded[idx].memline,  LL.loaded[idx].iaddr,
 		 LL.use[idx].mask, LL.use[idx].count);
      return LL_Hit;
@@ -910,7 +910,7 @@
        idx = (setNo * LL.assoc) + (tmp_tag & ~LL.tag_mask);
        l1_loaded->dep_use = &(LL.use[idx]);
 
-	CLG_DEBUG(6," Hit%d [idx %d] (line %#lx from %#lx): => %08x, count %d\n",
+	CLG_DEBUG(6," Hit%d [idx %d] (line %#lx from %#lx): => %08x, count %u\n",
 		 i, idx, LL.loaded[idx].memline,  LL.loaded[idx].iaddr,
 		 LL.use[idx].mask, LL.use[idx].count);
 	return LL_Hit;
@@ -946,7 +946,7 @@
   CLG_DEBUG(2, " %s.miss [%d]: at %#lx accessing memline %#lx (mask %08x)\n", \
            cache->name, idx, CLG_(bb_base) + current_ii->instr_offset, memline, mask); \
   if (use->count>0) {                                                \
-    CLG_DEBUG(2, "   old: used %d, loss bits %d (%08x) [line %#lx from %#lx]\n",\
+    CLG_DEBUG(2, "   old: used %u, loss bits %d (%08x) [line %#lx from %#lx]\n",\
 	     use->count, c, use->mask, loaded->memline, loaded->iaddr);	\
     CLG_DEBUG(2, "   collect: %d, use_base %p\n", \
 	     CLG_(current_state).collect, loaded->use_base);	     \
@@ -1165,7 +1165,7 @@
     IrRes = (*simulator.I1_Read)(CLG_(bb_base) + ii->instr_offset, ii->instr_size);
     DrRes = (*simulator.D1_Read)(data_addr, data_size);
 
-    CLG_DEBUG(6, "log_1I1Dr: Ir  %#lx/%u => %s, Dr  %#lx/%lu => %s\n",
+    CLG_DEBUG(6, "log_1I1Dr: Ir  %#lx/%u => %s, Dr  %#lx/%ld => %s\n",
               CLG_(bb_base) + ii->instr_offset, ii->instr_size, cacheRes(IrRes),
 	      data_addr, data_size, cacheRes(DrRes));
 
@@ -1200,7 +1200,7 @@
     current_ii = ii;
     DrRes = (*simulator.D1_Read)(data_addr, data_size);
 
-    CLG_DEBUG(6, "log_0I1Dr: Dr  %#lx/%lu => %s\n",
+    CLG_DEBUG(6, "log_0I1Dr: Dr  %#lx/%ld => %s\n",
 	      data_addr, data_size, cacheRes(DrRes));
 
     if (CLG_(current_state).collect) {
@@ -1228,7 +1228,7 @@
     IrRes = (*simulator.I1_Read)(CLG_(bb_base) + ii->instr_offset, ii->instr_size);
     DwRes = (*simulator.D1_Write)(data_addr, data_size);
 
-    CLG_DEBUG(6, "log_1I1Dw: Ir  %#lx/%u => %s, Dw  %#lx/%lu => %s\n",
+    CLG_DEBUG(6, "log_1I1Dw: Ir  %#lx/%u => %s, Dw  %#lx/%ld => %s\n",
               CLG_(bb_base) + ii->instr_offset, ii->instr_size, cacheRes(IrRes),
 	      data_addr, data_size, cacheRes(DwRes));
 
@@ -1260,7 +1260,7 @@
     current_ii = ii;
     DwRes = (*simulator.D1_Write)(data_addr, data_size);
 
-    CLG_DEBUG(6, "log_0I1Dw: Dw  %#lx/%lu => %s\n",
+    CLG_DEBUG(6, "log_0I1Dw: Dw  %#lx/%ld => %s\n",
 	      data_addr, data_size, cacheRes(DwRes));
 
     if (CLG_(current_state).collect) {
diff --git a/callgrind/threads.c b/callgrind/threads.c
index 7dca771..2a38fc1 100644
--- a/callgrind/threads.c
+++ b/callgrind/threads.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -131,7 +131,7 @@
 {
   if (tid == CLG_(current_tid)) return;
 
-  CLG_DEBUG(0, ">> thread %d (was %d)\n", tid, CLG_(current_tid));
+  CLG_DEBUG(0, ">> thread %u (was %u)\n", tid, CLG_(current_tid));
 
   if (CLG_(current_tid) != VG_INVALID_THREADID) {    
     /* save thread state */
@@ -200,7 +200,7 @@
 {
     exec_state *es;
 
-    CLG_DEBUG(0, ">> pre_signal(TID %d, sig %d, alt_st %s)\n",
+    CLG_DEBUG(0, ">> pre_signal(TID %u, sig %d, alt_st %s)\n",
 	     tid, sigNum, alt_stack ? "yes":"no");
 
     /* switch to the thread the handler runs in */
@@ -241,7 +241,7 @@
     exec_state* es;
     UInt fn_number, *pactive;
 
-    CLG_DEBUG(0, ">> post_signal(TID %d, sig %d)\n",
+    CLG_DEBUG(0, ">> post_signal(TID %u, sig %d)\n",
 	     tid, sigNum);
 
     /* thread switching potentially needed, eg. with instrumentation off */
@@ -261,7 +261,7 @@
       fn_number = CLG_(current_state).cxt->fn[0]->number;
       pactive = CLG_(get_fn_entry)(fn_number);
       (*pactive)--;
-      CLG_DEBUG(0, "  set active count of %s back to %d\n",
+      CLG_DEBUG(0, "  set active count of %s back to %u\n",
 	       CLG_(current_state).cxt->fn[0]->name, *pactive);
     }
 
diff --git a/configure.ac b/configure.ac
index 7faeac2..e93c882 100644
--- a/configure.ac
+++ b/configure.ac
@@ -8,7 +8,7 @@
 ##------------------------------------------------------------##
 
 # Process this file with autoconf to produce a configure script.
-AC_INIT([Valgrind],[3.11.0.SVN],[valgrind-users@lists.sourceforge.net])
+AC_INIT([Valgrind],[3.12.0.SVN],[valgrind-users@lists.sourceforge.net])
 AC_CONFIG_SRCDIR(coregrind/m_main.c)
 AC_CONFIG_HEADERS([config.h])
 AM_INIT_AUTOMAKE([foreign subdir-objects])
@@ -154,7 +154,7 @@
 # Note: m4 arguments are quoted with [ and ] so square brackets in shell
 # statements have to be quoted.
 case "${is_clang}-${gcc_version}" in
-     applellvm-5.1|applellvm-6.*)
+     applellvm-5.1|applellvm-6.*|applellvm-7.*)
 	AC_MSG_RESULT([ok (Apple LLVM version ${gcc_version})])
 	;;
      icc-1[[3-9]].*)
@@ -352,6 +352,7 @@
         AC_DEFINE([DARWIN_10_8], 100800, [DARWIN_VERS value for Mac OS X 10.8])
         AC_DEFINE([DARWIN_10_9], 100900, [DARWIN_VERS value for Mac OS X 10.9])
         AC_DEFINE([DARWIN_10_10], 101000, [DARWIN_VERS value for Mac OS X 10.10])
+        AC_DEFINE([DARWIN_10_11], 101100, [DARWIN_VERS value for Mac OS X 10.11])
 
 	AC_MSG_CHECKING([for the kernel version])
 	kernel=`uname -r`
@@ -409,13 +410,31 @@
 		  DEFAULT_SUPP="darwin14.supp ${DEFAULT_SUPP}"
 		  DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
 		  ;;
+	     15.*)
+		  AC_MSG_RESULT([Darwin 15.x (${kernel}) / Mac OS X 10.11 El Capitan])
+		  AC_DEFINE([DARWIN_VERS], DARWIN_10_11, [Darwin / Mac OS X version])
+		  DEFAULT_SUPP="darwin15.supp ${DEFAULT_SUPP}"
+		  DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
+		  ;;
              *) 
 		  AC_MSG_RESULT([unsupported (${kernel})])
-		  AC_MSG_ERROR([Valgrind works on Darwin 10.x, 11.x, 12.x, 13.x and 14.x (Mac OS X 10.6/7/8/9/10)])
+		  AC_MSG_ERROR([Valgrind works on Darwin 10.x, 11.x, 12.x, 13.x, 14.x and 15.x (Mac OS X 10.6/7/8/9/10/11)])
 		  ;;
 	esac
         ;;
 
+     solaris2.11*)
+        AC_MSG_RESULT([ok (${host_os})])
+        VGCONF_OS="solaris"
+        DEFAULT_SUPP="solaris11.supp ${DEFAULT_SUPP}"
+        ;;
+
+     solaris2.12*)
+        AC_MSG_RESULT([ok (${host_os})])
+        VGCONF_OS="solaris"
+        DEFAULT_SUPP="solaris12.supp ${DEFAULT_SUPP}"
+        ;;
+
      *) 
 	AC_MSG_RESULT([no (${host_os})])
 	AC_MSG_ERROR([Valgrind is operating system specific. Sorry.])
@@ -429,7 +448,7 @@
 # does not support building 32 bit programs
 
 case "$ARCH_MAX-$VGCONF_OS" in
-     amd64-linux|ppc64be-linux|arm64-linux)
+     amd64-linux|ppc64be-linux|arm64-linux|amd64-solaris)
         AC_MSG_CHECKING([for 32 bit build support])
         safe_CFLAGS=$CFLAGS
         CFLAGS="-m32"
@@ -707,6 +726,46 @@
         valt_load_address_sec_inner="0xUNSET"
         AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
         ;;
+     x86-solaris)
+        VGCONF_ARCH_PRI="x86"
+        VGCONF_ARCH_SEC=""
+        VGCONF_PLATFORM_PRI_CAPS="X86_SOLARIS"
+        VGCONF_PLATFORM_SEC_CAPS=""
+        valt_load_address_pri_norml="0x38000000"
+        valt_load_address_pri_inner="0x28000000"
+        valt_load_address_sec_norml="0xUNSET"
+        valt_load_address_sec_inner="0xUNSET"
+        AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+        ;;
+     amd64-solaris)
+        valt_load_address_sec_norml="0xUNSET"
+        valt_load_address_sec_inner="0xUNSET"
+        if test x$vg_cv_only64bit = xyes; then
+           VGCONF_ARCH_PRI="amd64"
+           VGCONF_ARCH_SEC=""
+           VGCONF_PLATFORM_PRI_CAPS="AMD64_SOLARIS"
+           VGCONF_PLATFORM_SEC_CAPS=""
+           valt_load_address_pri_norml="0x38000000"
+           valt_load_address_pri_inner="0x28000000"
+        elif test x$vg_cv_only32bit = xyes; then
+           VGCONF_ARCH_PRI="x86"
+           VGCONF_ARCH_SEC=""
+           VGCONF_PLATFORM_PRI_CAPS="X86_SOLARIS"
+           VGCONF_PLATFORM_SEC_CAPS=""
+           valt_load_address_pri_norml="0x38000000"
+           valt_load_address_pri_inner="0x28000000"
+        else
+           VGCONF_ARCH_PRI="amd64"
+           VGCONF_ARCH_SEC="x86"
+           VGCONF_PLATFORM_PRI_CAPS="AMD64_SOLARIS"
+           VGCONF_PLATFORM_SEC_CAPS="X86_SOLARIS"
+           valt_load_address_pri_norml="0x38000000"
+           valt_load_address_pri_inner="0x28000000"
+           valt_load_address_sec_norml="0x38000000"
+           valt_load_address_sec_inner="0x28000000"
+        fi
+        AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+        ;;
     *)
         VGCONF_ARCH_PRI="unknown"
         VGCONF_ARCH_SEC="unknown"
@@ -729,10 +788,13 @@
                test x$VGCONF_PLATFORM_PRI_CAPS = xX86_LINUX \
                  -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_LINUX \
                  -o x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
-                 -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN )
+                 -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN \
+                 -o x$VGCONF_PLATFORM_PRI_CAPS = xX86_SOLARIS \
+                 -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_SOLARIS )
 AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_AMD64, 
                test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \
-                 -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN )
+                 -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN \
+                 -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_SOLARIS )
 AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_PPC32, 
                test x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \ 
                  -o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_LINUX )
@@ -786,6 +848,11 @@
                  -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN)
 AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_AMD64_DARWIN, 
                test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_X86_SOLARIS,
+               test x$VGCONF_PLATFORM_PRI_CAPS = xX86_SOLARIS \
+                 -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_SOLARIS)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_AMD64_SOLARIS,
+               test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_SOLARIS)
 
 
 # Similarly, set up VGCONF_OS_IS_<os>.  Exactly one of these becomes defined.
@@ -806,6 +873,9 @@
 AM_CONDITIONAL(VGCONF_OS_IS_DARWIN,
                test x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
                  -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN)
+AM_CONDITIONAL(VGCONF_OS_IS_SOLARIS,
+               test x$VGCONF_PLATFORM_PRI_CAPS = xX86_SOLARIS \
+                 -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_SOLARIS)
 
 
 # Sometimes, in the Makefile.am files, it's useful to know whether or not
@@ -933,6 +1003,12 @@
 ],
 GLIBC_VERSION="bionic")
 
+# there is only one version of libc on Solaris
+if test x$VGCONF_PLATFORM_PRI_CAPS = xX86_SOLARIS \
+     -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_SOLARIS; then
+    GLIBC_VERSION="solaris"
+fi
+
 
 AC_MSG_CHECKING([the glibc version])
 
@@ -983,25 +1059,32 @@
 	AC_DEFINE([BIONIC_LIBC], 1, [Define to 1 if you're using Bionic])
 	DEFAULT_SUPP="bionic.supp ${DEFAULT_SUPP}"
 	;;
+     solaris)
+	AC_MSG_RESULT(Solaris)
+	# DEFAULT_SUPP set in host_os switch-case above.
+	# No other suppression file is used.
+	;;
      2.0|2.1|*)
 	AC_MSG_RESULT([unsupported version ${GLIBC_VERSION}])
-	AC_MSG_ERROR([Valgrind requires glibc version 2.2 or later])
-	AC_MSG_ERROR([or Darwin or Bionic libc])
+	AC_MSG_ERROR([Valgrind requires glibc version 2.2 or later,])
+	AC_MSG_ERROR([Darwin libc, Bionic libc or Solaris libc])
 	;;
 esac
 
 AC_SUBST(GLIBC_VERSION)
 
 
-# Add default suppressions for the X client libraries.  Make no
-# attempt to detect whether such libraries are installed on the
-# build machine (or even if any X facilities are present); just
-# add the suppressions antidisirregardless.
-DEFAULT_SUPP="xfree-4.supp ${DEFAULT_SUPP}"
-DEFAULT_SUPP="xfree-3.supp ${DEFAULT_SUPP}"
+if test "$VGCONF_OS" != "solaris"; then
+    # Add default suppressions for the X client libraries.  Make no
+    # attempt to detect whether such libraries are installed on the
+    # build machine (or even if any X facilities are present); just
+    # add the suppressions antidisirregardless.
+    DEFAULT_SUPP="xfree-4.supp ${DEFAULT_SUPP}"
+    DEFAULT_SUPP="xfree-3.supp ${DEFAULT_SUPP}"
 
-# Add glibc and X11 suppressions for exp-sgcheck
-DEFAULT_SUPP="exp-sgcheck.supp ${DEFAULT_SUPP}"
+    # Add glibc and X11 suppressions for exp-sgcheck
+    DEFAULT_SUPP="exp-sgcheck.supp ${DEFAULT_SUPP}"
+fi
 
 
 #----------------------------------------------------------------------------
@@ -1257,15 +1340,59 @@
 		[],
 		[#include <pthread.h>])
 
+# Convenience function.  Set flags based on the existing HWCAP entries.
+# The AT_HWCAP entries are generated by glibc, and are based on
+# functions supported by the hardware/system/libc.
+# Subsequent support for whether the capability will actually be utilized
+# will also be checked against the compiler capabilities.
+# called as
+#      AC_HWCAP_CONTAINS_FLAG[hwcap_string_to_match],[VARIABLE_TO_SET]
+AC_DEFUN([AC_HWCAP_CONTAINS_FLAG],[
+  AUXV_CHECK_FOR=$1
+  AC_MSG_CHECKING([if AT_HWCAP contains the $AUXV_CHECK_FOR indicator])
+  if LD_SHOW_AUXV=1 `which true` | grep ^AT_HWCAP | grep -q -w ${AUXV_CHECK_FOR}
+  then
+    AC_MSG_RESULT([yes])
+    AC_SUBST([$2],[yes])
+  else
+    AC_MSG_RESULT([no])
+    AC_SUBST([$2],[])
+  fi
+])
 
+# gather hardware capabilities. (hardware/kernel/libc)
+AC_HWCAP_CONTAINS_FLAG([altivec],[HWCAP_HAS_ALTIVEC])
+AC_HWCAP_CONTAINS_FLAG([vsx],[HWCAP_HAS_VSX])
+AC_HWCAP_CONTAINS_FLAG([dfp],[HWCAP_HAS_DFP])
+AC_HWCAP_CONTAINS_FLAG([arch_2_05],[HWCAP_HAS_ISA_2_05])
+AC_HWCAP_CONTAINS_FLAG([arch_2_06],[HWCAP_HAS_ISA_2_06])
+AC_HWCAP_CONTAINS_FLAG([arch_2_07],[HWCAP_HAS_ISA_2_07])
+AC_HWCAP_CONTAINS_FLAG([htm],[HWCAP_HAS_HTM])
+
+# ISA Levels
+AM_CONDITIONAL(HAS_ISA_2_05, [test x$HWCAP_HAS_ISA_2_05 = xyes])
+AM_CONDITIONAL(HAS_ISA_2_06, [test x$HWCAP_HAS_ISA_2_06 = xyes])
+# compiler support for isa 2.07 level instructions
+AC_MSG_CHECKING([that assembler knows ISA 2.07 instructions ])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+]], [[
+  __asm__ __volatile__("mtvsrd 1,2 ");
+]])], [
+ac_asm_have_isa_2_07=yes
+AC_MSG_RESULT([yes])
+], [
+ac_asm_have_isa_2_07=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(HAS_ISA_2_07, [test x$ac_asm_have_isa_2_07 = xyes \
+                               -a x$HWCAP_HAS_ISA_2_07 = xyes])
+
+# altivec (vsx) support.
 # does this compiler support -maltivec and does it have the include file
 # <altivec.h> ?
-
-AC_MSG_CHECKING([for Altivec])
-
+AC_MSG_CHECKING([for Altivec support in the compiler ])
 safe_CFLAGS=$CFLAGS
-CFLAGS="-maltivec"
-
+CFLAGS="-maltivec -Werror"
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <altivec.h>
 ]], [[
@@ -1280,42 +1407,48 @@
 AC_MSG_RESULT([no])
 ])
 CFLAGS=$safe_CFLAGS
-
-AM_CONDITIONAL([HAS_ALTIVEC], [test x$ac_have_altivec = xyes])
-
+AM_CONDITIONAL([HAS_ALTIVEC], [test x$ac_have_altivec = xyes \
+                                 -a x$HWCAP_HAS_ALTIVEC = xyes])
 
 # Check that both: the compiler supports -mvsx and that the assembler
 # understands VSX instructions.  If either of those doesn't work,
-# conclude that we can't do VSX.  NOTE: basically this is a kludge
-# in that it conflates two things that should be separate -- whether
-# the compiler understands the flag vs whether the assembler 
-# understands the opcodes.  This really ought to be cleaned up
-# and done properly, like it is for x86/x86_64.
-
-AC_MSG_CHECKING([for VSX])
-
+# conclude that we can't do VSX.
+AC_MSG_CHECKING([for VSX compiler flag support])
 safe_CFLAGS=$CFLAGS
-CFLAGS="-mvsx"
+CFLAGS="-mvsx -Werror"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+]], [[
+]])], [
+ac_compiler_supports_vsx_flag=yes
+AC_MSG_RESULT([yes])
+], [
+ac_compiler_supports_vsx_flag=no
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
 
+AC_MSG_CHECKING([for VSX support in the assembler ])
+safe_CFLAGS=$CFLAGS
+CFLAGS="-mvsx -Werror"
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <altivec.h>
 ]], [[
   vector unsigned int v;
   __asm__ __volatile__("xsmaddadp 32, 32, 33" ::: "memory","cc");
 ]])], [
-ac_have_vsx=yes
+ac_compiler_supports_vsx=yes
 AC_MSG_RESULT([yes])
 ], [
-ac_have_vsx=no
+ac_compiler_supports_vsx=no
 AC_MSG_RESULT([no])
 ])
 CFLAGS=$safe_CFLAGS
+AM_CONDITIONAL([HAS_VSX], [test x$ac_compiler_supports_vsx_flag = xyes \
+                             -a x$ac_compiler_supports_vsx = xyes \
+                             -a x$HWCAP_HAS_VSX = xyes ])
 
-AM_CONDITIONAL(HAS_VSX, test x$ac_have_vsx = xyes)
-
-
+# DFP (Decimal Float)
 AC_MSG_CHECKING([that assembler knows DFP])
-
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 ]], [[
   __asm__ __volatile__("dadd 1, 2, 3");
@@ -1327,63 +1460,81 @@
 ac_asm_have_dfp=no
 AC_MSG_RESULT([no])
 ])
-
-
 AC_MSG_CHECKING([that compiler knows -mhard-dfp switch])
 safe_CFLAGS=$CFLAGS
-CFLAGS="-mhard-dfp"
+CFLAGS="-mhard-dfp -Werror"
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 ]], [[
   __asm__ __volatile__("dadd 1, 2, 3");
   __asm__ __volatile__("dcffix 1, 2");
 ]])], [
-ac_gcc_have_dfp=yes
+ac_compiler_have_dfp=yes
 AC_MSG_RESULT([yes])
 ], [
-ac_gcc_have_dfp=no
+ac_compiler_have_dfp=no
 AC_MSG_RESULT([no])
 ])
-
 CFLAGS=$safe_CFLAGS
-
-AM_CONDITIONAL(HAS_DFP, test x$ac_asm_have_dfp = xyes -a x$ac_gcc_have_dfp = xyes)
-
+AM_CONDITIONAL(HAS_DFP, test x$ac_asm_have_dfp = xyes \
+                          -a x$ac_compiler_have_dfp = xyes \
+                          -a x$HWCAP_HAS_DFP = xyes )
 
 AC_MSG_CHECKING([that compiler knows DFP datatypes])
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 ]], [[
   _Decimal64 x = 0.0DD;
 ]])], [
-ac_gcc_have_dfp_type=yes
+ac_compiler_have_dfp_type=yes
 AC_MSG_RESULT([yes])
 ], [
-ac_gcc_have_dfp_type=no
+ac_compiler_have_dfp_type=no
 AC_MSG_RESULT([no])
 ])
+AM_CONDITIONAL(BUILD_DFP_TESTS, test x$ac_compiler_have_dfp_type = xyes \
+                                  -a xHWCAP_$HAS_DFP = xyes )
 
-AM_CONDITIONAL(BUILD_DFP_TESTS, test x$ac_gcc_have_dfp_type = xyes)
 
-# isa 2.07 checking
-AC_MSG_CHECKING([that assembler knows ISA 2.07 ])
-
+# HTM (Hardware Transactional Memory)
+AC_MSG_CHECKING([if compiler accepts the -mhtm flag])
+safe_CFLAGS=$CFLAGS
+CFLAGS="-mhtm -Werror"
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 ]], [[
-  __asm__ __volatile__("mtvsrd 1,2 ");
+  return 0;
 ]])], [
-ac_asm_have_isa_2_07=yes
 AC_MSG_RESULT([yes])
+ac_compiler_supports_htm=yes
 ], [
-ac_asm_have_isa_2_07=no
 AC_MSG_RESULT([no])
+ac_compiler_supports_htm=no
 ])
+CFLAGS=$safe_CFLAGS
 
-AM_CONDITIONAL(HAS_ISA_2_07, test x$ac_asm_have_isa_2_07 = xyes)
+AC_MSG_CHECKING([if compiler can find the htm builtins])
+safe_CFLAGS=$CFLAGS
+CFLAGS="-mhtm -Werror"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ ]], [[
+   if (__builtin_tbegin (0))
+      __builtin_tend (0);
+ ]])], [
+ AC_MSG_RESULT([yes])
+ac_compiler_sees_htm_builtins=yes
+ ], [
+ AC_MSG_RESULT([no])
+ac_compiler_sees_htm_builtins=no
+ ])
+CFLAGS=$safe_CFLAGS
+
+AM_CONDITIONAL(SUPPORTS_HTM, test x$ac_compiler_supports_htm = xyes \
+                               -a x$ac_compiler_sees_htm_builtins = xyes \
+                               -a x$HWCAP_HAS_HTM = xyes )
 
 # Check for pthread_create@GLIBC2.0
 AC_MSG_CHECKING([for pthread_create@GLIBC2.0()])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-lpthread"
+CFLAGS="-lpthread -Werror"
 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 extern int pthread_create_glibc_2_0(void*, const void*,
                                     void *(*)(void*), void*);
@@ -1515,7 +1666,7 @@
 AC_MSG_CHECKING([if gcc accepts -m32])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-m32"
+CFLAGS="-m32 -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1535,7 +1686,7 @@
 AC_MSG_CHECKING([if gcc accepts -m64])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-m64"
+CFLAGS="-m64 -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1555,7 +1706,7 @@
 AC_MSG_CHECKING([if gcc accepts -march=mips32])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="$CFLAGS -march=mips32"
+CFLAGS="$CFLAGS -march=mips32 -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1575,7 +1726,7 @@
 AC_MSG_CHECKING([if gcc accepts -march=mips64])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="$CFLAGS -march=mips64"
+CFLAGS="$CFLAGS -march=mips64 -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1595,7 +1746,7 @@
 AC_MSG_CHECKING([if gcc accepts -march=octeon])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="$CFLAGS -march=octeon"
+CFLAGS="$CFLAGS -march=octeon -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1615,7 +1766,7 @@
 AC_MSG_CHECKING([if gcc accepts -march=octeon2])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="$CFLAGS -march=octeon2"
+CFLAGS="$CFLAGS -march=octeon2 -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1635,7 +1786,7 @@
 AC_MSG_CHECKING([if gcc accepts -mmmx])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-mmmx"
+CFLAGS="-mmmx -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1655,7 +1806,7 @@
 AC_MSG_CHECKING([if gcc accepts -msse])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-msse"
+CFLAGS="-msse -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1680,7 +1831,7 @@
 AC_MSG_CHECKING([if gcc accepts -mpreferred-stack-boundary=2 -m32])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-mpreferred-stack-boundary=2 -m32"
+CFLAGS="-mpreferred-stack-boundary=2 -m32 -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1696,28 +1847,27 @@
 AC_SUBST(PREFERRED_STACK_BOUNDARY_2)
 
 
-# Convenience function to check whether GCC supports a particular
-# warning option. Takes two arguments, first the warning flag name
-# to check (without -W), then the conditional name to set if that
-# warning flag is supported.
-AC_DEFUN([AC_GCC_WARNING_COND],[
-  AC_MSG_CHECKING([if gcc accepts -W$1])
-  safe_CFLAGS=$CFLAGS
-  CFLAGS="-W$1"
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[;]])], [
-  has_warning_flag=yes
-  AC_MSG_RESULT([yes])], [
-  has_warning_flag=no
-  AC_MSG_RESULT([no])])
-  CFLAGS=$safe_CFLAGS
-  AM_CONDITIONAL([$2], test x$has_warning_flag = xyes)
+# does this compiler support -mlong-double-128 ?
+AC_MSG_CHECKING([if gcc accepts -mlong-double-128])
+safe_CFLAGS=$CFLAGS
+CFLAGS="-mlong-double-128 -Werror"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+  return 0;
+]])], [
+ac_compiler_supports_mlong_double_128=yes
+AC_MSG_RESULT([yes])
+], [
+ac_compiler_supports_mlong_double_128=no
+AC_MSG_RESULT([no])
 ])
+CFLAGS=$safe_CFLAGS
+AM_CONDITIONAL(HAS_MLONG_DOUBLE_128, test x$ac_compiler_supports_mlong_double_128 = xyes)
+FLAG_MLONG_DOUBLE_128="-mlong-double-128"
+AC_SUBST(FLAG_MLONG_DOUBLE_128)
 
-AC_GCC_WARNING_COND([pointer-sign], [HAS_POINTER_SIGN_WARNING])
 
 # Convenience function to check whether GCC supports a particular
-# warning option. Similar to AC_GCC_WARNING_COND, but does a
-# substitution instead of setting an conditional. Takes two arguments,
+# warning option. Takes two arguments,
 # first the warning flag name to check (without -W), then the
 # substitution name to set with -Wno-warning-flag if the flag exists,
 # or the empty string if the compiler doesn't accept the flag. Note
@@ -1726,7 +1876,7 @@
 AC_DEFUN([AC_GCC_WARNING_SUBST_NO],[
   AC_MSG_CHECKING([if gcc accepts -W$1])
   safe_CFLAGS=$CFLAGS
-  CFLAGS="-W$1"
+  CFLAGS="-W$1 -Werror"
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[;]])], [
   AC_SUBST([$2], [-Wno-$1])
   AC_MSG_RESULT([yes])], [
@@ -1740,7 +1890,7 @@
 AC_DEFUN([AC_GCC_WARNING_SUBST],[
   AC_MSG_CHECKING([if gcc accepts -W$1])
   safe_CFLAGS=$CFLAGS
-  CFLAGS="-W$1"
+  CFLAGS="-W$1 -Werror"
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[;]])], [
   AC_SUBST([$2], [-W$1])
   AC_MSG_RESULT([yes])], [
@@ -1749,27 +1899,54 @@
   CFLAGS=$safe_CFLAGS
 ])
 
-AC_GCC_WARNING_SUBST_NO([empty-body], [FLAG_W_NO_EMPTY_BODY])
-AC_GCC_WARNING_SUBST_NO([format-zero-length], [FLAG_W_NO_FORMAT_ZERO_LENGTH])
+AC_GCC_WARNING_SUBST_NO([memset-transposed-args], [FLAG_W_NO_MEMSET_TRANSPOSED_ARGS])
 AC_GCC_WARNING_SUBST_NO([nonnull], [FLAG_W_NO_NONNULL])
 AC_GCC_WARNING_SUBST_NO([overflow], [FLAG_W_NO_OVERFLOW])
+AC_GCC_WARNING_SUBST_NO([pointer-sign], [FLAG_W_NO_POINTER_SIGN])
 AC_GCC_WARNING_SUBST_NO([uninitialized], [FLAG_W_NO_UNINITIALIZED])
 AC_GCC_WARNING_SUBST_NO([unused-function], [FLAG_W_NO_UNUSED_FUNCTION])
 AC_GCC_WARNING_SUBST_NO([static-local-in-inline], [FLAG_W_NO_STATIC_LOCAL_IN_INLINE])
+AC_GCC_WARNING_SUBST_NO([mismatched-new-delete], [FLAG_W_NO_MISMATCHED_NEW_DELETE])
+AC_GCC_WARNING_SUBST_NO([infinite-recursion], [FLAG_W_NO_INFINITE_RECURSION])
 AC_GCC_WARNING_SUBST([write-strings], [FLAG_W_WRITE_STRINGS])
+AC_GCC_WARNING_SUBST([empty-body], [FLAG_W_EMPTY_BODY])
 AC_GCC_WARNING_SUBST([format], [FLAG_W_FORMAT])
-AC_GCC_WARNING_SUBST([format-security], [FLAG_W_FORMAT_SECURITY])
+# Disabled for now until all platforms are clean
+format_checking_enabled=no
+#format_checking_enabled=yes
+if test "$format_checking_enabled" = "yes"; then
+   AC_GCC_WARNING_SUBST([format-signedness], [FLAG_W_FORMAT_SIGNEDNESS])
+else
+   dumy_assignment_to_avoid_syntax_errors=1
+   AC_SUBST([FLAG_W_FORMAT_SIGNEDNESS], [])
+fi
 AC_GCC_WARNING_SUBST([cast-qual], [FLAG_W_CAST_QUAL])
 AC_GCC_WARNING_SUBST([old-style-declaration], [FLAG_W_OLD_STYLE_DECLARATION])
 AC_GCC_WARNING_SUBST([ignored-qualifiers], [FLAG_W_IGNORED_QUALIFIERS])
 AC_GCC_WARNING_SUBST([missing-parameter-type], [FLAG_W_MISSING_PARAMETER_TYPE])
 
+# Does this compiler support -Wformat-security ?
+# Special handling is needed, because certain GCC versions require -Wformat
+# being present if -Wformat-security is given. Otherwise a warning is issued.
+# However, AC_GCC_WARNING_SUBST will stick in -Werror (see r15323 for rationale).
+# And with that the warning will be turned into an error with the result
+# that -Wformat-security is believed to be unsupported when in fact it is.
+AC_MSG_CHECKING([if gcc accepts -Wformat-security])
+safe_CFLAGS=$CFLAGS
+CFLAGS="-Wformat -Wformat-security -Werror"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[;]])], [
+AC_SUBST([FLAG_W_FORMAT_SECURITY], [-Wformat-security])
+AC_MSG_RESULT([yes])], [
+AC_SUBST([FLAG_W_FORMAT_SECURITY], [])
+AC_MSG_RESULT([no])])
+CFLAGS=$safe_CFLAGS
+
 # does this compiler support -Wextra or the older -W ?
 
 AC_MSG_CHECKING([if gcc accepts -Wextra or -W])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-Wextra"
+CFLAGS="-Wextra -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
@@ -1777,7 +1954,7 @@
 AC_SUBST([FLAG_W_EXTRA], [-Wextra])
 AC_MSG_RESULT([-Wextra])
 ], [
-  CFLAGS="-W"
+  CFLAGS="-W -Werror"
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
     return 0;
   ]])], [
@@ -1790,11 +1967,20 @@
 ])
 CFLAGS=$safe_CFLAGS
 
+# On ARM we do not want to pass -Wcast-align as that produces loads
+# of warnings. GCC is just being conservative. See here:
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65459#c4
+if test "X$VGCONF_ARCH_PRI" = "Xarm"; then
+  AC_SUBST([FLAG_W_CAST_ALIGN], [""])
+else
+  AC_SUBST([FLAG_W_CAST_ALIGN], [-Wcast-align])
+fi
+
 # does this compiler support -fno-stack-protector ?
 AC_MSG_CHECKING([if gcc accepts -fno-stack-protector])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-fno-stack-protector"
+CFLAGS="-fno-stack-protector -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
@@ -1811,13 +1997,55 @@
 
 AC_SUBST(FLAG_FNO_STACK_PROTECTOR)
 
+# Does GCC support disabling Identical Code Folding?
+# We want to disabled Identical Code Folding for the
+# tools preload shared objects to get better backraces.
+# For GCC 5.1+ -fipa-icf is enabled by default at -O2.
+# "The optimization reduces code size and may disturb
+#  unwind stacks by replacing a function by equivalent
+#  one with a different name."
+AC_MSG_CHECKING([if gcc accepts -fno-ipa-icf])
 
-# Does this compiler support -fsanitize=undefined?
+safe_CFLAGS=$CFLAGS
+CFLAGS="-fno-ipa-icf -Werror"
+
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+  return 0;
+]])], [
+no_ipa_icf=yes
+FLAG_FNO_IPA_ICF="-fno-ipa-icf"
+AC_MSG_RESULT([yes])
+], [
+no_ipa_icf=no
+FLAG_FNO_IPA_ICF=""
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AC_SUBST(FLAG_FNO_IPA_ICF)
+
+
+# Does this compiler support -fsanitize=undefined. This is true for
+# GCC 4.9 and newer. However, the undefined behaviour sanitiser in GCC 5.1
+# also checks for alignment violations on memory accesses which the valgrind
+# code base is sprinkled (if not littered) with. As those alignment issues
+# don't pose a problem we want to suppress warnings about them.
+# In GCC 5.1 this can be done by passing -fno-sanitize=alignment. Earlier
+# GCCs do not support that.
+#
 # Only checked for if --enable-ubsan was given.
 if test "x${vg_cv_ubsan}" = "xyes"; then
-AC_MSG_CHECKING([if gcc accepts -fsanitize=undefined])
+AC_MSG_CHECKING([if gcc accepts -fsanitize=undefined -fno-sanitize=alignment])
 safe_CFLAGS=$CFLAGS
-CFLAGS="-fsanitize=undefined"
+CFLAGS="-fsanitize=undefined -fno-sanitize=alignment -Werror"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+  return 0;
+]])], [
+FLAG_FSANITIZE="-fsanitize=undefined -fno-sanitize=alignment"
+LIB_UBSAN="-static-libubsan"
+AC_MSG_RESULT([yes])
+], [
+CFLAGS="-fsanitize=undefined -Werror"
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
 ]])], [
@@ -1829,6 +2057,7 @@
 LIB_UBSAN=""
 AC_MSG_RESULT([no])
 ])
+])
 CFLAGS=$safe_CFLAGS
 AC_SUBST(FLAG_FSANITIZE)
 AC_SUBST(LIB_UBSAN)
@@ -1838,7 +2067,7 @@
 AC_MSG_CHECKING([if gcc accepts --param inline-unit-growth])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="--param inline-unit-growth=900"
+CFLAGS="--param inline-unit-growth=900 -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
@@ -1858,7 +2087,7 @@
 AC_MSG_CHECKING([if gcc accepts -gdwarf-4 -fdebug-types-section])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-gdwarf-4 -fdebug-types-section"
+CFLAGS="-gdwarf-4 -fdebug-types-section -Werror"
 
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
@@ -1924,7 +2153,7 @@
 AC_MSG_CHECKING([if the linker accepts -Wl,-Ttext-segment])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-static -nodefaultlibs -nostartfiles -Wl,-Ttext-segment=$valt_load_address_pri_norml"
+CFLAGS="-static -nodefaultlibs -nostartfiles -Wl,-Ttext-segment=$valt_load_address_pri_norml -Werror"
 
 AC_LINK_IFELSE(
 [AC_LANG_SOURCE([int _start () { return 0; }])],
@@ -1953,7 +2182,7 @@
 # directly.
 AC_MSG_CHECKING([if the linker accepts -Wl,--build-id=none])
 safe_CFLAGS=$CFLAGS
-CFLAGS="-Wl,--build-id=none"
+CFLAGS="-Wl,--build-id=none -Werror"
 
 AC_LINK_IFELSE(
 [AC_LANG_PROGRAM([ ], [return 0;])],
@@ -2011,6 +2240,24 @@
 fi
 
 
+# does the amd64 assembler understand "fxsave64" and "fxrstor64"?
+AC_MSG_CHECKING([if amd64 assembler supports fxsave64/fxrstor64])
+
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+void* p;
+asm __volatile__("fxsave64 (%0)" : : "r" (p) : "memory" );
+asm __volatile__("fxrstor64 (%0)" : : "r" (p) : "memory" );
+]])], [
+ac_have_as_amd64_fxsave64=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_amd64_fxsave64=no
+AC_MSG_RESULT([no])
+])
+if test x$ac_have_as_amd64_fxsave64 = xyes ; then
+  AC_DEFINE(HAVE_AS_AMD64_FXSAVE64, 1, [Define to 1 if as supports fxsave64/fxrstor64.])
+fi
+
 # does the x86/amd64 assembler understand SSE3 instructions?
 # Note, this doesn't generate a C-level symbol.  It generates a
 # automake-level symbol (BUILD_SSE3_TESTS), used in test Makefile.am's
@@ -2037,7 +2284,7 @@
 AC_MSG_CHECKING([if x86/amd64 assembler speaks SSSE3])
 
 save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -msse"
+CFLAGS="$CFLAGS -msse -Werror"
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   do { long long int x; 
    __asm__ __volatile__(
@@ -2315,6 +2562,10 @@
   do {
     asm ("bndmov %bnd0,(%rsp)");
     asm ("bndldx 3(%rbx,%rdx), %bnd2");
+    asm ("bnd call foo\n"
+          bnd jmp  end\n"
+          foo: bnd ret\n"
+          end: nop");
   } while (0)
 ]])], [
 ac_have_as_mpx=yes
@@ -2403,12 +2654,841 @@
                                [vg_cv_tls=no],
                                [vg_cv_tls=$vg_cv_linktime_tls])])])
 
-if test "$vg_cv_tls" = yes; then
+if test "$vg_cv_tls" = yes -a $is_clang != applellvm; then
 AC_DEFINE([HAVE_TLS], 1, [can use __thread to define thread-local variables])
 fi
 
 
 #----------------------------------------------------------------------------
+# Solaris-specific checks.
+#----------------------------------------------------------------------------
+
+if test "$VGCONF_OS" = "solaris" ; then
+# Solaris-specific check determining if the Sun Studio Assembler is used to
+# build Valgrind.  The test checks if the x86/amd64 assembler understands the
+# cmovl.l instruction, if yes then it's Sun Assembler.
+#
+# C-level symbol: none
+# Automake-level symbol: SOLARIS_SUN_STUDIO_AS
+#
+AC_MSG_CHECKING([if x86/amd64 assembler speaks cmovl.l (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+]], [[
+  __asm__ __volatile__("cmovl.l %edx, %eax");
+]])], [
+solaris_have_sun_studio_as=yes
+AC_MSG_RESULT([yes])
+], [
+solaris_have_sun_studio_as=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_SUN_STUDIO_AS, test x$solaris_have_sun_studio_as = xyes)
+
+# Solaris-specific check determining if symbols __xpg4 and __xpg6
+# are present in linked elfs when gcc is invoked with -std=gnu99.
+# See solaris/vgpreload-solaris.mapfile for details.
+# gcc on Solaris instructs linker to include these symbols,
+# gcc on illumos does not.
+#
+# C-level symbol: none
+# Automake-level symbol: SOLARIS_XPG_SYMBOLS_PRESENT
+#
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -std=gnu99"
+AC_MSG_CHECKING([if xpg symbols are present with -std=gnu99 (Solaris-specific)])
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, const char *argv[]) {
+    char command[PATH_MAX + 50];
+    snprintf(command, sizeof(command), "nm %s | egrep '__xpg[4,6]'", argv[0]);
+
+    FILE *output = popen(command, "r");
+    if (output == NULL) return -1;
+
+    char buf[100];
+    if (fgets(buf, sizeof(buf), output) != NULL) {
+        pclose(output);
+        return 0;
+    } else {
+        pclose(output);
+        return 1;
+    }
+}
+]])], [
+solaris_xpg_symbols_present=yes
+AC_MSG_RESULT([yes])
+], [
+solaris_xpg_symbols_present=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_XPG_SYMBOLS_PRESENT, test x$solaris_xpg_symbols_present = xyes)
+CFLAGS="$save_CFLAGS"
+
+
+# Solaris-specific check determining if /proc/self/cmdline
+# or /proc/<pid>/cmdline is supported.
+#
+# C-level symbol: SOLARIS_PROC_CMDLINE
+# Automake-level symbol: SOLARIS_PROC_CMDLINE
+#
+AC_CHECK_FILE([/proc/self/cmdline],
+[
+solaris_proc_cmdline=yes
+AC_DEFINE([SOLARIS_PROC_CMDLINE], 1,
+          [Define to 1 if you have /proc/self/cmdline.])
+], [
+solaris_proc_cmdline=no
+])
+AM_CONDITIONAL(SOLARIS_PROC_CMDLINE, test x$solaris_proc_cmdline = xyes)
+
+
+# Solaris-specific check determining default platform for the Valgrind launcher.
+# Used in case the launcher cannot select platform by looking at the client
+# image (for example because the executable is a shell script).
+#
+# C-level symbol: SOLARIS_LAUNCHER_DEFAULT_PLATFORM
+# Automake-level symbol: none
+#
+AC_MSG_CHECKING([for default platform of Valgrind launcher (Solaris-specific)])
+# Get the ELF class of /bin/sh first.
+if ! test -f /bin/sh; then
+  AC_MSG_ERROR([Shell interpreter `/bin/sh' not found.])
+fi
+elf_class=$( /usr/bin/file /bin/sh | sed -n 's/.*ELF \(..\)-bit.*/\1/p' )
+case "$elf_class" in
+  64)
+    default_arch="$VGCONF_ARCH_PRI";
+    ;;
+  32)
+    if test "x$VGCONF_ARCH_SEC" != "x"; then
+      default_arch="$VGCONF_ARCH_SEC"
+    else
+      default_arch="$VGCONF_ARCH_PRI";
+    fi
+    ;;
+  *)
+    AC_MSG_ERROR([Cannot determine ELF class of `/bin/sh'.])
+    ;;
+esac
+default_platform="$default_arch-$VGCONF_OS"
+AC_MSG_RESULT([$default_platform])
+AC_DEFINE_UNQUOTED([SOLARIS_LAUNCHER_DEFAULT_PLATFORM], ["$default_platform"],
+                   [Default platform for Valgrind launcher.])
+
+
+# Solaris-specific check determining if the old syscalls are available.
+#
+# C-level symbol: SOLARIS_OLD_SYSCALLS
+# Automake-level symbol: SOLARIS_OLD_SYSCALLS
+#
+AC_MSG_CHECKING([for the old Solaris syscalls (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+]], [[
+  return !SYS_open;
+]])], [
+solaris_old_syscalls=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_OLD_SYSCALLS], 1,
+          [Define to 1 if you have the old Solaris syscalls.])
+], [
+solaris_old_syscalls=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_OLD_SYSCALLS, test x$solaris_old_syscalls = xyes)
+
+
+# Solaris-specific check determining if the new accept() syscall is available.
+#
+# Old syscall:
+# int accept(int sock, struct sockaddr *name, socklen_t *namelenp,
+#            int version);
+#
+# New syscall (available on illumos):
+# int accept(int sock, struct sockaddr *name, socklen_t *namelenp,
+#            int version, int flags);
+#
+# If the old syscall is present then the following syscall will fail with
+# ENOTSOCK (because file descriptor 0 is not a socket), if the new syscall is
+# available then it will fail with EINVAL (because the flags parameter is
+# invalid).
+#
+# C-level symbol: SOLARIS_NEW_ACCEPT_SYSCALL
+# Automake-level symbol: none
+#
+AC_MSG_CHECKING([for the new `accept' syscall (Solaris-specific)])
+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+#include <errno.h>
+]], [[
+  errno = 0;
+  syscall(SYS_accept, 0, 0, 0, 0, -1);
+  return !(errno == EINVAL);
+]])], [
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_NEW_ACCEPT_SYSCALL], 1,
+          [Define to 1 if you have the new `accept' syscall.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
+# Solaris-specific check determining if the new illumos pipe() syscall is
+# available.
+#
+# Old syscall:
+# longlong_t pipe();
+#
+# New syscall (available on illumos):
+# int pipe(intptr_t arg, int flags);
+#
+# If the old syscall is present then the following call will succeed, if the
+# new syscall is available then it will fail with EFAULT (because address 0
+# cannot be accessed).
+#
+# C-level symbol: SOLARIS_NEW_PIPE_SYSCALL
+# Automake-level symbol: none
+#
+AC_MSG_CHECKING([for the new `pipe' syscall (Solaris-specific)])
+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+#include <errno.h>
+]], [[
+  errno = 0;
+  syscall(SYS_pipe, 0, 0);
+  return !(errno == EFAULT);
+]])], [
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_NEW_PIPE_SYSCALL], 1,
+          [Define to 1 if you have the new `pipe' syscall.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
+# Solaris-specific check determining if the new lwp_sigqueue() syscall is
+# available.
+#
+# Old syscall:
+# int lwp_kill(id_t lwpid, int sig);
+#
+# New syscall (available on Solaris 11):
+# int lwp_sigqueue(id_t lwpid, int sig, void *value,
+#                  int si_code, timespec_t *timeout);
+#
+# C-level symbol: SOLARIS_LWP_SIGQUEUE_SYSCALL
+# Automake-level symbol: SOLARIS_LWP_SIGQUEUE_SYSCALL
+#
+AC_MSG_CHECKING([for the new `lwp_sigqueue' syscall (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h> 
+]], [[
+  return !SYS_lwp_sigqueue;
+]])], [
+solaris_lwp_sigqueue_syscall=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_LWP_SIGQUEUE_SYSCALL], 1,
+          [Define to 1 if you have the new `lwp_sigqueue' syscall.])
+], [
+solaris_lwp_sigqueue_syscall=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_LWP_SIGQUEUE_SYSCALL, test x$solaris_lwp_sigqueue_syscall = xyes)
+
+
+# Solaris-specific check determining if the lwp_sigqueue() syscall
+# takes both pid and thread id arguments or just thread id.
+#
+# Old syscall (available on Solaris 11.x):
+# int lwp_sigqueue(id_t lwpid, int sig, void *value,
+#                  int si_code, timespec_t *timeout);
+#
+# New syscall (available on Solaris 12):
+# int lwp_sigqueue(pid_t pid, id_t lwpid, int sig, void *value,
+#                  int si_code, timespec_t *timeout);
+#
+# If the old syscall is present then the following syscall will fail with
+# EINVAL (because signal is out of range); if the new syscall is available
+# then it will fail with ESRCH (because it would not find such thread in the
+# current process).
+#
+# C-level symbol: SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID
+# Automake-level symbol: SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID
+#
+AM_COND_IF(SOLARIS_LWP_SIGQUEUE_SYSCALL,
+AC_MSG_CHECKING([if the `lwp_sigqueue' syscall accepts pid (Solaris-specific)])
+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+#include <errno.h>
+]], [[
+  errno = 0;
+  syscall(SYS_lwp_sigqueue, 0, 101, 0, 0, 0, 0);
+  return !(errno == ESRCH);
+]])], [
+solaris_lwp_sigqueue_syscall_takes_pid=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID], 1,
+          [Define to 1 if you have the new `lwp_sigqueue' syscall which accepts pid.])
+], [
+solaris_lwp_sigqueue_syscall_takes_pid=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID,
+               test x$solaris_lwp_sigqueue_syscall_takes_pid = xyes)
+,
+AM_CONDITIONAL(SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID, test x = y)
+)
+
+
+# Solaris-specific check determining if the new lwp_name() syscall is
+# available.
+#
+# New syscall (available on Solaris 11):
+# int lwp_name(int opcode, id_t lwpid, char *name, size_t len);
+#
+# C-level symbol: SOLARIS_LWP_NAME_SYSCALL
+# Automake-level symbol: SOLARIS_LWP_NAME_SYSCALL
+#
+AC_MSG_CHECKING([for the new `lwp_name' syscall (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+]], [[
+  return !SYS_lwp_name;
+]])], [
+solaris_lwp_name_syscall=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_LWP_NAME_SYSCALL], 1,
+          [Define to 1 if you have the new `lwp_name' syscall.])
+], [
+solaris_lwp_name_syscall=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_LWP_NAME_SYSCALL, test x$solaris_lwp_name_syscall = xyes)
+
+
+# Solaris-specific check determining if the new zone() syscall subcodes
+# ZONE_LIST_DEFUNCT and ZONE_GETATTR_DEFUNCT are available.  These subcodes
+# were added in Solaris 11 but are missing on illumos.
+#
+# C-level symbol: SOLARIS_ZONE_DEFUNCT
+# Automake-level symbol: SOLARIS_ZONE_DEFUNCT
+#
+AC_MSG_CHECKING([for ZONE_LIST_DEFUNCT and ZONE_GETATTR_DEFUNCT (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/zone.h>
+]], [[
+  return !(ZONE_LIST_DEFUNCT && ZONE_GETATTR_DEFUNCT);
+]])], [
+solaris_zone_defunct=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_ZONE_DEFUNCT], 1,
+          [Define to 1 if you have the `ZONE_LIST_DEFUNCT' and `ZONE_GETATTR_DEFUNC' constants.])
+], [
+solaris_zone_defunct=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_ZONE_DEFUNCT, test x$solaris_zone_defunct = xyes)
+
+
+# Solaris-specific check determining if the new shmsys() syscall subcodes
+# IPC_XSTAT64, SHMADV, SHM_ADV_GET, SHM_ADV_SET and SHMGET_OSM are available.
+# These subcodes were added in Solaris 11 but are missing on illumos.
+#
+# C-level symbol: SOLARIS_SHM_NEW
+# Automake-level symbol: SOLARIS_SHM_NEW
+#
+AC_MSG_CHECKING([for SHMADV, SHM_ADV_GET, SHM_ADV_SET and SHMGET_OSM (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/ipc_impl.h>
+#include <sys/shm.h>
+#include <sys/shm_impl.h>
+]], [[
+  return !(IPC_XSTAT64 && SHMADV && SHM_ADV_GET && SHM_ADV_SET && SHMGET_OSM);
+]])], [
+solaris_shm_new=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_SHM_NEW], 1,
+          [Define to 1 if you have the `IPC_XSTAT64', `SHMADV', `SHM_ADV_GET', `SHM_ADV_SET' and `SHMGET_OSM' constants.])
+], [
+solaris_shm_new=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_SHM_NEW, test x$solaris_shm_new = xyes)
+
+
+# Solaris-specific check determining if prxregset_t is available.  Illumos
+# currently does not define it on the x86 platform.
+#
+# C-level symbol: SOLARIS_PRXREGSET_T
+# Automake-level symbol: SOLARIS_PRXREGSET_T
+#
+AC_MSG_CHECKING([for the `prxregset_t' type (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/procfs_isa.h>
+]], [[
+  return !sizeof(prxregset_t);
+]])], [
+solaris_prxregset_t=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_PRXREGSET_T], 1,
+          [Define to 1 if you have the `prxregset_t' type.])
+], [
+solaris_prxregset_t=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_PRXREGSET_T, test x$solaris_prxregset_t = xyes)
+
+
+# Solaris-specific check determining if the new frealpathat() syscall is
+# available.
+#
+# New syscall (available on Solaris 11.1):
+# int frealpathat(int fd, char *path, char *buf, size_t buflen);
+#
+# C-level symbol: SOLARIS_FREALPATHAT_SYSCALL
+# Automake-level symbol: SOLARIS_FREALPATHAT_SYSCALL
+#
+AC_MSG_CHECKING([for the new `frealpathat' syscall (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+]], [[
+  return !SYS_frealpathat;
+]])], [
+solaris_frealpathat_syscall=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_FREALPATHAT_SYSCALL], 1,
+          [Define to 1 if you have the new `frealpathat' syscall.])
+], [
+solaris_frealpathat_syscall=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_FREALPATHAT_SYSCALL, test x$solaris_frealpathat_syscall = xyes)
+
+
+# Solaris-specific check determining if the new uuidsys() syscall is
+# available.
+#
+# New syscall (available on newer Solaris):
+# int uuidsys(struct uuid *uuid);
+#
+# C-level symbol: SOLARIS_UUIDSYS_SYSCALL
+# Automake-level symbol: SOLARIS_UUIDSYS_SYSCALL
+#
+AC_MSG_CHECKING([for the new `uuidsys' syscall (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+]], [[
+  return !SYS_uuidsys;
+]])], [
+solaris_uuidsys_syscall=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_UUIDSYS_SYSCALL], 1,
+          [Define to 1 if you have the new `uuidsys' syscall.])
+], [
+solaris_uuidsys_syscall=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_UUIDSYS_SYSCALL, test x$solaris_uuidsys_syscall = xyes)
+
+
+# Solaris-specific check determining if the new labelsys() syscall subcode
+# TNDB_GET_TNIP is available.  This subcode was added in Solaris 11 but is
+# missing on illumos.
+#
+# C-level symbol: SOLARIS_TNDB_GET_TNIP
+# Automake-level symbol: SOLARIS_TNDB_GET_TNIP
+#
+AC_MSG_CHECKING([for TNDB_GET_TNIP (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/tsol/tndb.h>
+]], [[
+  return !TNDB_GET_TNIP;
+]])], [
+solaris_tndb_get_tnip=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_TNDB_GET_TNIP], 1,
+          [Define to 1 if you have the `TNDB_GET_TNIP' constant.])
+], [
+solaris_tndb_get_tnip=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_TNDB_GET_TNIP, test x$solaris_tndb_get_tnip = xyes)
+
+
+# Solaris-specific check determining if the new labelsys() syscall opcodes
+# TSOL_GETCLEARANCE and TSOL_SETCLEARANCE are available. These opcodes were
+# added in Solaris 11 but are missing on illumos.
+#
+# C-level symbol: SOLARIS_TSOL_CLEARANCE
+# Automake-level symbol: SOLARIS_TSOL_CLEARANCE
+#
+AC_MSG_CHECKING([for TSOL_GETCLEARANCE and TSOL_SETCLEARANCE (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/tsol/tsyscall.h>
+]], [[
+  return !(TSOL_GETCLEARANCE && TSOL_SETCLEARANCE);
+]])], [
+solaris_tsol_clearance=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_TSOL_CLEARANCE], 1,
+          [Define to 1 if you have the `TSOL_GETCLEARANCE' and `TSOL_SETCLEARANCE' constants.])
+], [
+solaris_tsol_clearance=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_TSOL_CLEARANCE, test x$solaris_tsol_clearance = xyes)
+
+
+# Solaris-specific check determining if the new pset() syscall subcode
+# PSET_GET_NAME is available. This subcode was added in Solaris 12 but
+# is missing on illumos and Solaris 11.
+#
+# C-level symbol: SOLARIS_PSET_GET_NAME
+# Automake-level symbol: SOLARIS_PSET_GET_NAME
+#
+AC_MSG_CHECKING([for PSET_GET_NAME (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/pset.h>
+]], [[
+  return !(PSET_GET_NAME);
+]])], [
+solaris_pset_get_name=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_PSET_GET_NAME], 1,
+          [Define to 1 if you have the `PSET_GET_NAME' constants.])
+], [
+solaris_pset_get_name=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_PSET_GET_NAME, test x$solaris_pset_get_name = xyes)
+
+
+# Solaris-specific check determining if the utimesys() syscall is
+# available (on illumos and older Solaris).
+#
+# C-level symbol: SOLARIS_UTIMESYS_SYSCALL
+# Automake-level symbol: SOLARIS_UTIMESYS_SYSCALL
+#
+AC_MSG_CHECKING([for the `utimesys' syscall (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+]], [[
+  return !SYS_utimesys;
+]])], [
+solaris_utimesys_syscall=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_UTIMESYS_SYSCALL], 1,
+          [Define to 1 if you have the `utimesys' syscall.])
+], [
+solaris_utimesys_syscall=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_UTIMESYS_SYSCALL, test x$solaris_utimesys_syscall = xyes)
+
+
+# Solaris-specific check determining if the utimensat() syscall is
+# available (on newer Solaris).
+#
+# C-level symbol: SOLARIS_UTIMENSAT_SYSCALL
+# Automake-level symbol: SOLARIS_UTIMENSAT_SYSCALL
+#
+AC_MSG_CHECKING([for the `utimensat' syscall (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+]], [[
+  return !SYS_utimensat;
+]])], [
+solaris_utimensat_syscall=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_UTIMENSAT_SYSCALL], 1,
+          [Define to 1 if you have the `utimensat' syscall.])
+], [
+solaris_utimensat_syscall=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_UTIMENSAT_SYSCALL, test x$solaris_utimensat_syscall = xyes)
+
+
+# Solaris-specific check determining if the spawn() syscall is available
+# (on newer Solaris).
+#
+# C-level symbol: SOLARIS_SPAWN_SYSCALL
+# Automake-level symbol: SOLARIS_SPAWN_SYSCALL
+#
+AC_MSG_CHECKING([for the `spawn' syscall (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+]], [[
+  return !SYS_spawn;
+]])], [
+solaris_spawn_syscall=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_SPAWN_SYSCALL], 1,
+          [Define to 1 if you have the `spawn' syscall.])
+], [
+solaris_spawn_syscall=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_SPAWN_SYSCALL, test x$solaris_spawn_syscall = xyes)
+
+
+# Solaris-specific check determining whether nscd (name switch cache daemon)
+# attaches its door at /system/volatile/name_service_door (Solaris)
+# or at /var/run/name_service_door (illumos).
+#
+# Note that /var/run is a symlink to /system/volatile on Solaris
+# but not vice versa on illumos.
+#
+# C-level symbol: SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE
+# Automake-level symbol: SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE
+#
+AC_MSG_CHECKING([for nscd door location (Solaris-specific)])
+if test -e /system/volatile/name_service_door; then
+    solaris_nscd_door_system_volatile=yes
+    AC_MSG_RESULT([/system/volatile/name_service_door])
+    AC_DEFINE([SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE], 1,
+              [Define to 1 if nscd attaches to /system/volatile/name_service_door.])
+else
+    solaris_nscd_door_system_volatile=no
+    AC_MSG_RESULT([/var/run/name_service_door])
+fi
+AM_CONDITIONAL(SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE, test x$solaris_nscd_door_system_volatile = xyes)
+
+
+# Solaris-specific check determining if the new gethrt() fasttrap is available.
+#
+# New fasttrap (available on Solaris 11):
+# hrt_t *gethrt(void);
+#
+# C-level symbol: SOLARIS_GETHRT_FASTTRAP
+# Automake-level symbol: SOLARIS_GETHRT_FASTTRAP
+#
+AC_MSG_CHECKING([for the new `gethrt' fasttrap (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/trap.h>
+]], [[
+  return !T_GETHRT;
+]])], [
+solaris_gethrt_fasttrap=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_GETHRT_FASTTRAP], 1,
+          [Define to 1 if you have the new `gethrt' fasttrap.])
+], [
+solaris_gethrt_fasttrap=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_GETHRT_FASTTRAP, test x$solaris_gethrt_fasttrap = xyes)
+
+
+# Solaris-specific check determining if the new get_zone_offset() fasttrap
+# is available.
+#
+# New fasttrap (available on Solaris 11):
+# zonehrtoffset_t *get_zone_offset(void);
+#
+# C-level symbol: SOLARIS_GETZONEOFFSET_FASTTRAP
+# Automake-level symbol: SOLARIS_GETZONEOFFSET_FASTTRAP
+#
+AC_MSG_CHECKING([for the new `get_zone_offset' fasttrap (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/trap.h>
+]], [[
+  return !T_GETZONEOFFSET;
+]])], [
+solaris_getzoneoffset_fasttrap=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_GETZONEOFFSET_FASTTRAP], 1,
+          [Define to 1 if you have the new `get_zone_offset' fasttrap.])
+], [
+solaris_getzoneoffset_fasttrap=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_GETZONEOFFSET_FASTTRAP, test x$solaris_getzoneoffset_fasttrap = xyes)
+
+
+# Solaris-specific check determining if the execve() syscall
+# takes fourth argument (flags) or not.
+#
+# Old syscall (available on illumos):
+# int execve(const char *fname, const char **argv, const char **envp);
+#
+# New syscall (available on Solaris):
+# int execve(uintptr_t file, const char **argv, const char **envp, int flags);
+#
+# If the new syscall is present then it will fail with EINVAL (because flags
+# are invalid); if the old syscall is available then it will fail with ENOENT
+# (because the file could not be found).
+#
+# C-level symbol: SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS
+# Automake-level symbol: SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS
+#
+AC_MSG_CHECKING([if the `execve' syscall accepts flags (Solaris-specific)])
+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+#include <errno.h>
+]], [[
+  errno = 0;
+  syscall(SYS_execve, "/no/existing/path", 0, 0, 0xdeadbeef, 0, 0);
+  return !(errno == EINVAL);
+]])], [
+solaris_execve_syscall_takes_flags=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS], 1,
+          [Define to 1 if you have the new `execve' syscall which accepts flags.])
+], [
+solaris_execve_syscall_takes_flags=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS,
+               test x$solaris_execve_syscall_takes_flags = xyes)
+
+
+# Solaris-specific check determining version of the repository cache protocol.
+# Every Solaris version uses a different one, ranging from 21 to current 25.
+# The check is very ugly, though.
+#
+# C-level symbol: SOLARIS_REPCACHE_PROTOCOL_VERSION vv
+# Automake-level symbol: none
+#
+AC_PATH_PROG(DIS_PATH, dis, false)
+if test "x$DIS_PATH" = "xfalse"; then
+  AC_MSG_FAILURE([Object code disassembler (`dis') not found.])
+fi
+AC_CHECK_LIB(scf, scf_handle_bind, [], [
+  AC_MSG_WARN([Function `scf_handle_bind' was not found in `libscf'.])
+  AC_MSG_ERROR([Cannot determine version of the repository cache protocol.])
+])
+
+AC_MSG_CHECKING([for version of the repository cache protocol (Solaris-specific)])
+if test "X$VGCONF_ARCH_PRI" = "Xamd64"; then
+  libscf=/usr/lib/64/libscf.so.1
+else
+  libscf=/usr/lib/libscf.so.1
+fi
+if ! $DIS_PATH -F scf_handle_bind $libscf  | grep -q 0x526570; then
+  AC_MSG_WARN([Function `scf_handle_bind' does not contain repository cache protocol version.])
+  AC_MSG_ERROR([Cannot determine version of the repository cache protocol.])
+fi
+hex=$( $DIS_PATH -F scf_handle_bind $libscf  | sed -n 's/.*0x526570\(..\).*/\1/p' )
+if test -z "$hex"; then
+  AC_MSG_WARN([Version of the repository cache protocol is empty?!])
+  AC_MSG_ERROR([Cannot determine version of the repository cache protocol.])
+fi
+version=$( printf "%d\n" 0x$hex )
+AC_MSG_RESULT([$version])
+AC_DEFINE_UNQUOTED([SOLARIS_REPCACHE_PROTOCOL_VERSION], [$version],
+                   [Version number of the repository door cache protocol.])
+
+
+# Solaris-specific check determining if "sysstat" segment reservation type
+# is available.
+#
+# New "sysstat" segment reservation (available on Solaris 12):
+# - program header type:    PT_SUNW_SYSSTAT
+# - auxiliary vector entry: AT_SUN_SYSSTAT_ADDR
+#
+# C-level symbol: SOLARIS_RESERVE_SYSSTAT_ADDR
+# Automake-level symbol: SOLARIS_RESERVE_SYSSTAT_ADDR
+#
+AC_MSG_CHECKING([for the new `sysstat' segment reservation (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/auxv.h>
+]], [[
+  return !AT_SUN_SYSSTAT_ADDR;
+]])], [
+solaris_reserve_sysstat_addr=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_RESERVE_SYSSTAT_ADDR], 1,
+          [Define to 1 if you have the new `sysstat' segment reservation.])
+], [
+solaris_reserve_sysstat_addr=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_RESERVE_SYSSTAT_ADDR, test x$solaris_reserve_sysstat_addr = xyes)
+
+
+# Solaris-specific check determining if "sysstat_zone" segment reservation type
+# is available.
+#
+# New "sysstat_zone" segment reservation (available on Solaris 12):
+# - program header type:    PT_SUNW_SYSSTAT_ZONE
+# - auxiliary vector entry: AT_SUN_SYSSTAT_ZONE_ADDR
+#
+# C-level symbol: SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR
+# Automake-level symbol: SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR
+#
+AC_MSG_CHECKING([for the new `sysstat_zone' segment reservation (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/auxv.h>
+]], [[
+  return !AT_SUN_SYSSTAT_ZONE_ADDR;
+]])], [
+solaris_reserve_sysstat_zone_addr=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR], 1,
+          [Define to 1 if you have the new `sysstat_zone' segment reservation.])
+], [
+solaris_reserve_sysstat_zone_addr=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR, test x$solaris_reserve_sysstat_zone_addr = xyes)
+
+
+# Solaris-specific check determining if the system_stats() syscall is available
+# (on newer Solaris).
+#
+# C-level symbol: SOLARIS_SYSTEM_STATS_SYSCALL
+# Automake-level symbol: SOLARIS_SYSTEM_STATS_SYSCALL
+#
+AC_MSG_CHECKING([for the `system_stats' syscall (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/syscall.h>
+]], [[
+  return !SYS_system_stats;
+]])], [
+solaris_system_stats_syscall=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_SYSTEM_STATS_SYSCALL], 1,
+          [Define to 1 if you have the `system_stats' syscall.])
+], [
+solaris_system_stats_syscall=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_SYSTEM_STATS_SYSCALL, test x$solaris_system_stats_syscall = xyes)
+
+else
+AM_CONDITIONAL(SOLARIS_SUN_STUDIO_AS, false)
+AM_CONDITIONAL(SOLARIS_XPG_SYMBOLS_PRESENT, false)
+AM_CONDITIONAL(SOLARIS_PROC_CMDLINE, false)
+AM_CONDITIONAL(SOLARIS_OLD_SYSCALLS, false)
+AM_CONDITIONAL(SOLARIS_LWP_SIGQUEUE_SYSCALL, false)
+AM_CONDITIONAL(SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID, false)
+AM_CONDITIONAL(SOLARIS_LWP_NAME_SYSCALL, false)
+AM_CONDITIONAL(SOLARIS_ZONE_DEFUNCT, false)
+AM_CONDITIONAL(SOLARIS_SHM_NEW, false)
+AM_CONDITIONAL(SOLARIS_PRXREGSET_T, false)
+AM_CONDITIONAL(SOLARIS_FREALPATHAT_SYSCALL, false)
+AM_CONDITIONAL(SOLARIS_UUIDSYS_SYSCALL, false)
+AM_CONDITIONAL(SOLARIS_TNDB_GET_TNIP, false)
+AM_CONDITIONAL(SOLARIS_TSOL_CLEARANCE, false)
+AM_CONDITIONAL(SOLARIS_PSET_GET_NAME, false)
+AM_CONDITIONAL(SOLARIS_UTIMESYS_SYSCALL, false)
+AM_CONDITIONAL(SOLARIS_UTIMENSAT_SYSCALL, false)
+AM_CONDITIONAL(SOLARIS_SPAWN_SYSCALL, false)
+AM_CONDITIONAL(SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE, false)
+AM_CONDITIONAL(SOLARIS_GETHRT_FASTTRAP, false)
+AM_CONDITIONAL(SOLARIS_GETZONEOFFSET_FASTTRAP, false)
+AM_CONDITIONAL(SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS, false)
+AM_CONDITIONAL(SOLARIS_RESERVE_SYSSTAT_ADDR, false)
+AM_CONDITIONAL(SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR, false)
+AM_CONDITIONAL(SOLARIS_SYSTEM_STATS_SYSCALL, false)
+fi # test "$VGCONF_OS" = "solaris"
+
+
+#----------------------------------------------------------------------------
 # Checks for C header files.
 #----------------------------------------------------------------------------
 
@@ -2422,6 +3502,7 @@
         sys/eventfd.h    \
         sys/klog.h       \
         sys/poll.h       \
+        sys/prctl.h      \
         sys/signal.h     \
         sys/signalfd.h   \
         sys/syscall.h    \
@@ -2538,7 +3619,8 @@
      -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \
      -o x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX \
      -o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS32_LINUX \
-     -o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX ; then
+     -o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX \
+     -o x$VGCONF_PLATFORM_PRI_CAPS = xX86_SOLARIS ; then
   mflag_primary=$FLAG_M32
 elif test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \
        -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX \
@@ -2553,7 +3635,8 @@
 
 mflag_secondary=
 if test x$VGCONF_PLATFORM_SEC_CAPS = xX86_LINUX \
-     -o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_LINUX ; then
+     -o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_LINUX \
+     -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_SOLARIS ; then
   mflag_secondary=$FLAG_M32
 elif test x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN ; then
   mflag_secondary="$FLAG_M32 -arch i386"
@@ -2577,6 +3660,9 @@
 AM_COND_IF([VGCONF_OS_IS_DARWIN],
            [CFLAGS_MPI="-g -O -fno-omit-frame-pointer -Wall -dynamic"
             LDFLAGS_MPI="-dynamic -dynamiclib -all_load"])
+AM_COND_IF([VGCONF_OS_IS_SOLARIS],
+           [CFLAGS_MPI="-g -O -fno-omit-frame-pointer -Wall -fpic"
+            LDFLAGS_MPI="-fpic -shared"])
 
 AC_SUBST([CFLAGS_MPI])
 AC_SUBST([LDFLAGS_MPI])
@@ -2713,7 +3799,7 @@
 AC_MSG_CHECKING([for OpenMP])
 
 safe_CFLAGS=$CFLAGS
-CFLAGS="-fopenmp $mflag_primary"
+CFLAGS="-fopenmp $mflag_primary -Werror"
 
 AC_LINK_IFELSE([AC_LANG_SOURCE([
 #include <omp.h> 
@@ -2987,6 +4073,7 @@
    perf/Makefile 
    perf/vg_perf
    gdbserver_tests/Makefile
+   gdbserver_tests/solaris/Makefile
    include/Makefile 
    auxprogs/Makefile
    mpi/Makefile
@@ -2998,8 +4085,11 @@
    memcheck/tests/x86/Makefile
    memcheck/tests/linux/Makefile
    memcheck/tests/darwin/Makefile
+   memcheck/tests/solaris/Makefile
    memcheck/tests/amd64-linux/Makefile
    memcheck/tests/x86-linux/Makefile
+   memcheck/tests/amd64-solaris/Makefile
+   memcheck/tests/x86-solaris/Makefile
    memcheck/tests/ppc32/Makefile
    memcheck/tests/ppc64/Makefile
    memcheck/tests/s390x/Makefile
@@ -3035,8 +4125,13 @@
    none/tests/tilegx/Makefile
    none/tests/linux/Makefile
    none/tests/darwin/Makefile
+   none/tests/solaris/Makefile
    none/tests/amd64-linux/Makefile
    none/tests/x86-linux/Makefile
+   none/tests/amd64-darwin/Makefile
+   none/tests/x86-darwin/Makefile
+   none/tests/amd64-solaris/Makefile
+   none/tests/x86-solaris/Makefile
    exp-sgcheck/Makefile
    exp-sgcheck/tests/Makefile
    drd/Makefile
@@ -3052,11 +4147,14 @@
    exp-dhat/Makefile
    exp-dhat/tests/Makefile
    shared/Makefile
+   solaris/Makefile
 ])
 AC_CONFIG_FILES([coregrind/link_tool_exe_linux],
                 [chmod +x coregrind/link_tool_exe_linux])
 AC_CONFIG_FILES([coregrind/link_tool_exe_darwin],
                 [chmod +x coregrind/link_tool_exe_darwin])
+AC_CONFIG_FILES([coregrind/link_tool_exe_solaris],
+                [chmod +x coregrind/link_tool_exe_solaris])
 AC_OUTPUT
 
 cat<<EOF
diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am
index f43d4c9..d29f954 100644
--- a/coregrind/Makefile.am
+++ b/coregrind/Makefile.am
@@ -44,19 +44,31 @@
 	launcher-darwin.c \
 	m_debuglog.c
 endif
+if VGCONF_OS_IS_SOLARIS
+valgrind_SOURCES = \
+	launcher-linux.c \
+	m_debuglog.c
+endif
 
 valgrind_CPPFLAGS  = $(AM_CPPFLAGS_PRI)
 valgrind_CFLAGS    = $(AM_CFLAGS_PRI)
 valgrind_CCASFLAGS = $(AM_CCASFLAGS_PRI)
 valgrind_LDFLAGS   = $(AM_CFLAGS_PRI) @LIB_UBSAN@
+# If there is no secondary platform, and the platforms include x86-darwin,
+# then the primary platform must be x86-darwin.  Hence:
+if ! VGCONF_HAVE_PLATFORM_SEC
 if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
 valgrind_LDFLAGS   += -Wl,-read_only_relocs -Wl,suppress
 endif
+endif
 # On Android we must ask for non-executable stack, not sure why.
 if VGCONF_PLATVARIANT_IS_ANDROID
 valgrind_CFLAGS += -static
 valgrind_LDFLAGS   += -Wl,-z,noexecstack
 endif
+if VGCONF_OS_IS_SOLARIS
+valgrind_LDFLAGS   += -Wl,-M,/usr/lib/ld/map.noexstk
+endif
 
 
 vgdb_SOURCES = vgdb.c
@@ -73,6 +85,9 @@
 # having access to Darwin, 'none' implementation is used.
 vgdb_SOURCES += vgdb-invoker-none.c
 endif
+if VGCONF_OS_IS_SOLARIS
+vgdb_SOURCES += vgdb-invoker-solaris.c
+endif
 
 vgdb_CPPFLAGS  = $(AM_CPPFLAGS_PRI)
 vgdb_CFLAGS    = $(AM_CFLAGS_PRI)
@@ -81,12 +96,20 @@
 if VGCONF_PLATVARIANT_IS_ANDROID
 vgdb_CFLAGS    += -static
 endif
+if VGCONF_OS_IS_SOLARIS
+vgdb_LDADD     = -lsocket
+else
 if !VGCONF_PLATVARIANT_IS_ANDROID
 vgdb_LDADD     = -lpthread
 endif
+endif
+# If there is no secondary platform, and the platforms include x86-darwin,
+# then the primary platform must be x86-darwin.  Hence:
+if ! VGCONF_HAVE_PLATFORM_SEC
 if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
 vgdb_LDFLAGS   += -Wl,-read_only_relocs -Wl,suppress
 endif
+endif
 
 #----------------------------------------------------------------------------
 # Darwin Mach stuff
@@ -162,7 +185,6 @@
 	pub_core_cpuid.h	\
 	pub_core_deduppoolalloc.h \
 	pub_core_debuginfo.h	\
-	pub_core_debugger.h	\
 	pub_core_debuglog.h	\
 	pub_core_demangle.h	\
 	pub_core_dispatch.h	\
@@ -186,9 +208,9 @@
 	pub_core_mallocfree.h	\
 	pub_core_options.h	\
 	pub_core_oset.h		\
+	pub_core_poolalloc.h	\
 	pub_core_rangemap.h	\
 	pub_core_redir.h	\
-	pub_core_poolalloc.h	\
 	pub_core_replacemalloc.h\
 	pub_core_sbprofile.h	\
 	pub_core_scheduler.h	\
@@ -249,6 +271,7 @@
 	m_syswrap/priv_syswrap-linux.h \
 	m_syswrap/priv_syswrap-linux-variants.h \
 	m_syswrap/priv_syswrap-darwin.h \
+	m_syswrap/priv_syswrap-solaris.h \
 	m_syswrap/priv_syswrap-main.h \
 	m_syswrap/priv_syswrap-xen.h \
 	m_ume/priv_ume.h \
@@ -274,11 +297,9 @@
 	m_clientstate.c \
 	m_cpuid.S \
 	m_deduppoolalloc.c \
-	m_debugger.c \
 	m_debuglog.c \
 	m_errormgr.c \
 	m_execontext.c \
-	m_poolalloc.c \
 	m_hashtable.c \
 	m_libcbase.c \
 	m_libcassert.c \
@@ -292,6 +313,7 @@
 	m_mallocfree.c \
 	m_options.c \
 	m_oset.c \
+	m_poolalloc.c \
 	m_rangemap.c \
 	m_redir.c \
 	m_sbprofile.c \
@@ -316,9 +338,12 @@
 	m_aspacemgr/aspacemgr-segnames.c \
 	m_coredump/coredump-elf.c \
 	m_coredump/coredump-macho.c \
+	m_coredump/coredump-solaris.c \
 	m_debuginfo/misc.c \
 	m_debuginfo/d3basics.c \
 	m_debuginfo/debuginfo.c \
+	m_debuginfo/image.c \
+	m_debuginfo/minilzo-inl.c \
 	m_debuginfo/readdwarf.c \
 	m_debuginfo/readdwarf3.c \
 	m_debuginfo/readelf.c \
@@ -327,8 +352,6 @@
 	m_debuginfo/readpdb.c \
 	m_debuginfo/storage.c \
 	m_debuginfo/tytypes.c \
-	m_debuginfo/image.c \
-	m_debuginfo/minilzo-inl.c \
 	m_demangle/cp-demangle.c \
 	m_demangle/cplus-dem.c \
 	m_demangle/demangle.c \
@@ -347,6 +370,8 @@
 	m_dispatch/dispatch-tilegx-linux.S \
 	m_dispatch/dispatch-x86-darwin.S \
 	m_dispatch/dispatch-amd64-darwin.S \
+	m_dispatch/dispatch-x86-solaris.S \
+	m_dispatch/dispatch-amd64-solaris.S \
 	m_gdbserver/inferiors.c \
 	m_gdbserver/m_gdbserver.c \
 	m_gdbserver/regcache.c \
@@ -368,16 +393,17 @@
 	m_gdbserver/version.c \
 	m_initimg/initimg-linux.c \
 	m_initimg/initimg-darwin.c \
+	m_initimg/initimg-solaris.c \
 	m_initimg/initimg-pathscan.c \
 	m_mach/mach_basics.c \
 	m_mach/mach_msg.c \
 	m_mach/mach_traps-x86-darwin.S \
 	m_mach/mach_traps-amd64-darwin.S \
 	m_replacemalloc/replacemalloc_core.c \
-	m_scheduler/scheduler.c \
-	m_scheduler/sema.c \
 	m_scheduler/sched-lock.c \
 	m_scheduler/sched-lock-generic.c \
+	m_scheduler/scheduler.c \
+	m_scheduler/sema.c \
 	m_sigframe/sigframe-common.c \
 	m_sigframe/sigframe-x86-linux.c \
 	m_sigframe/sigframe-amd64-linux.c \
@@ -391,6 +417,7 @@
 	m_sigframe/sigframe-tilegx-linux.c \
 	m_sigframe/sigframe-x86-darwin.c \
 	m_sigframe/sigframe-amd64-darwin.c \
+	m_sigframe/sigframe-solaris.c \
 	m_syswrap/syscall-x86-linux.S \
 	m_syswrap/syscall-amd64-linux.S \
 	m_syswrap/syscall-ppc32-linux.S \
@@ -404,11 +431,14 @@
 	m_syswrap/syscall-tilegx-linux.S \
 	m_syswrap/syscall-x86-darwin.S \
 	m_syswrap/syscall-amd64-darwin.S \
+	m_syswrap/syscall-x86-solaris.S \
+	m_syswrap/syscall-amd64-solaris.S \
 	m_syswrap/syswrap-main.c \
 	m_syswrap/syswrap-generic.c \
 	m_syswrap/syswrap-linux.c \
 	m_syswrap/syswrap-linux-variants.c \
 	m_syswrap/syswrap-darwin.c \
+	m_syswrap/syswrap-solaris.c \
 	m_syswrap/syswrap-x86-linux.c \
 	m_syswrap/syswrap-amd64-linux.c \
 	m_syswrap/syswrap-ppc32-linux.c \
@@ -422,6 +452,8 @@
 	m_syswrap/syswrap-x86-darwin.c \
 	m_syswrap/syswrap-amd64-darwin.c \
 	m_syswrap/syswrap-xen.c \
+	m_syswrap/syswrap-x86-solaris.c \
+	m_syswrap/syswrap-amd64-solaris.c \
 	m_ume/elf.c \
 	m_ume/macho.c \
 	m_ume/main.c \
@@ -517,6 +549,17 @@
 	$(PRELOAD_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
 endif
 
+if VGCONF_OS_IS_SOLARIS
+# Give the vgpreload_core library a proper soname so it can be easily
+# recognized during reading of debug information.
+vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_LDFLAGS += \
+	-Wl,-soname -Wl,vgpreload_core.so.0
+if VGCONF_HAVE_PLATFORM_SEC
+vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_LDFLAGS += \
+	-Wl,-soname -Wl,vgpreload_core.so.0
+endif
+endif
+
 #----------------------------------------------------------------------------
 # gdbserver xml target descriptions
 #----------------------------------------------------------------------------
diff --git a/coregrind/fixup_macho_loadcmds.c b/coregrind/fixup_macho_loadcmds.c
index d66ad20..9db6f46 100644
--- a/coregrind/fixup_macho_loadcmds.c
+++ b/coregrind/fixup_macho_loadcmds.c
@@ -121,7 +121,8 @@
 #include "config.h"
 #if DARWIN_VERS != DARWIN_10_5 && DARWIN_VERS != DARWIN_10_6 \
     && DARWIN_VERS != DARWIN_10_7 && DARWIN_VERS != DARWIN_10_8 \
-    && DARWIN_VERS != DARWIN_10_9 && DARWIN_VERS != DARWIN_10_10
+    && DARWIN_VERS != DARWIN_10_9 && DARWIN_VERS != DARWIN_10_10 \
+    && DARWIN_VERS != DARWIN_10_11
 #  error "Unknown DARWIN_VERS value.  This file only compiles on Darwin."
 #endif
 
@@ -555,7 +556,7 @@
 
   maybe_mash_pagezero:
    /* Deal with Problem (2) as documented above. */
-#  if DARWIN_VERS == DARWIN_10_10
+#  if DARWIN_VERS >= DARWIN_10_10
    assert(size == 64);
    if (!seg__pagezero) {
       fail("Can't find __PAGEZERO to modify; can't continue.");
diff --git a/coregrind/launcher-darwin.c b/coregrind/launcher-darwin.c
index 2b14697..8d429e1 100644
--- a/coregrind/launcher-darwin.c
+++ b/coregrind/launcher-darwin.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/launcher-linux.c b/coregrind/launcher-linux.c
index a5ebb02..4d018f2 100644
--- a/coregrind/launcher-linux.c
+++ b/coregrind/launcher-linux.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -203,6 +203,14 @@
          const Elf32_Ehdr *ehdr = (Elf32_Ehdr *)header;
 
          if (header[EI_DATA] == ELFDATA2LSB) {
+#           if defined(VGO_solaris)
+            if (ehdr->e_machine == EM_386 &&
+                (ehdr->e_ident[EI_OSABI] == ELFOSABI_SYSV ||
+                 ehdr->e_ident[EI_OSABI] == ELFOSABI_SOLARIS)) {
+               platform = "x86-solaris";
+            }
+            else
+#           endif
             if (ehdr->e_machine == EM_386 &&
                 (ehdr->e_ident[EI_OSABI] == ELFOSABI_SYSV ||
                  ehdr->e_ident[EI_OSABI] == ELFOSABI_LINUX)) {
@@ -239,6 +247,14 @@
          const Elf64_Ehdr *ehdr = (Elf64_Ehdr *)header;
 
          if (header[EI_DATA] == ELFDATA2LSB) {
+#           if defined(VGO_solaris)
+            if (ehdr->e_machine == EM_X86_64 &&
+                (ehdr->e_ident[EI_OSABI] == ELFOSABI_SYSV ||
+                 ehdr->e_ident[EI_OSABI] == ELFOSABI_SOLARIS)) {
+               platform = "amd64-solaris";
+            }
+            else
+#           endif
             if (ehdr->e_machine == EM_X86_64 &&
                 (ehdr->e_ident[EI_OSABI] == ELFOSABI_SYSV ||
                  ehdr->e_ident[EI_OSABI] == ELFOSABI_LINUX)) {
@@ -302,6 +318,7 @@
    const char *platform;
    const char *default_platform;
    const char *cp;
+   const char *linkname;
    char *toolfile;
    const char *launcher_name;
    char* new_line;
@@ -346,6 +363,7 @@
       typically it is the primary build target. Unless the primary build
       target is not built is not built in which case VG_PLATFORM is the
       secondary build target. */
+#  if defined(VGO_linux)
    if ((0==strcmp(VG_PLATFORM,"x86-linux"))    ||
        (0==strcmp(VG_PLATFORM,"amd64-linux"))  ||
        (0==strcmp(VG_PLATFORM,"ppc32-linux"))  ||
@@ -358,6 +376,13 @@
        (0==strcmp(VG_PLATFORM,"mips32-linux")) ||
        (0==strcmp(VG_PLATFORM,"mips64-linux")))
       default_platform = VG_PLATFORM;
+#  elif defined(VGO_solaris)
+   if ((0==strcmp(VG_PLATFORM,"x86-solaris")) ||
+       (0==strcmp(VG_PLATFORM,"amd64-solaris")))
+      default_platform = SOLARIS_LAUNCHER_DEFAULT_PLATFORM;
+#  else
+#    error Unknown OS
+#  endif
    else
       barf("Unknown VG_PLATFORM '%s'", VG_PLATFORM);
 
@@ -380,6 +405,13 @@
    /* Figure out the name of this executable (viz, the launcher), so
       we can tell stage2.  stage2 will use the name for recursive
       invocations of valgrind on child processes. */
+#  if defined(VGO_linux)
+   linkname = "/proc/self/exe";
+#  elif defined(VGO_solaris)
+   linkname = "/proc/self/path/a.out";
+#  else
+#    error Unknown OS
+#  endif
    unsigned bufsiz = 0;
    char *buf = NULL;
 
@@ -388,14 +420,14 @@
       buf = realloc(buf, bufsiz);
       if (buf == NULL)
          barf("realloc of buf failed.");
-      r = readlink("/proc/self/exe", buf, bufsiz);
+      r = readlink(linkname, buf, bufsiz);
       if (r == -1) {
-        /* If /proc/self/exe can't be followed, don't give up.  Instead
-           continue with an empty string for VALGRIND_LAUNCHER.  In the
-           sys_execve wrapper, this is tested, and if found to be empty,
+        /* If /proc/self/exe (/proc/self/path/a.out) can't be followed, don't
+           give up. Instead continue with an empty string for VALGRIND_LAUNCHER.
+           In the sys_execve wrapper, this is tested, and if found to be empty,
            fail the execve. */
         fprintf(stderr, "valgrind: warning (non-fatal): "
-                "readlink(\"/proc/self/exe\") failed.\n");
+                "readlink(\"%s\") failed.\n", linkname);
         fprintf(stderr, "valgrind: continuing, however --trace-children=yes "
                 "will not work.\n");
         launcher_name = "";
diff --git a/coregrind/link_tool_exe_solaris.in b/coregrind/link_tool_exe_solaris.in
new file mode 100644
index 0000000..795220f
--- /dev/null
+++ b/coregrind/link_tool_exe_solaris.in
@@ -0,0 +1,84 @@
+#! @PERL@
+
+# Generic information about a purpose of this script can be found in
+# link_tool_exe_linux.in.
+#
+# Solaris specific notes:
+#
+# - load address has to be specified in the mapfile, there is no command line
+#   option to achieve that
+#
+# - mapfile version 2 is used
+#
+# - information about Solaris linker can be found in its man page
+#   (http://download.oracle.com/docs/cd/E19253-01/816-5165/ld-1/index.html)
+#   and in Oracle's Linker and Libraries Guide
+#   (http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html)
+#
+
+use warnings;
+use strict;
+use File::Temp qw/tempfile unlink0/;
+use Fcntl qw/F_SETFD/;
+
+# expect at least: alt-load-address gcc -o foo bar.o
+die "Not enough arguments"
+    if (($#ARGV + 1) < 5);
+
+my $ala = $ARGV[0];
+
+# check for plausible-ish alt load address
+die "Bogus alt-load address"
+    if (length($ala) < 3 || index($ala, "0x") != 0);
+
+# the cc invokation to do the final link
+my $cc = $ARGV[1];
+
+# and the 'restargs' are argv[2 ..]
+
+# create a temporary mapfile
+(my $fh, my $path) = tempfile();
+
+# reset FD_CLOEXEC flag
+fcntl($fh, F_SETFD, 0)
+    or die "Can't clear close-on-exec flag on temp fh: $!";
+
+# safely unlink the file
+unlink0($fh, $path)
+    or die "Error unlinking file $path safely";
+undef $path;
+
+# fill it with data
+#
+# this is a bit tricky, the problem is that the following condition has to be
+# true for both PT_LOAD segments:
+# (phdr->p_vaddr & PAGEOFFSET) == (phdr->p_offset & PAGEOFFSET)
+# if it doesn't hold then the kernel maps a segment as an anon mapping instead
+# of a file mapping (which, for example, breaks reading debug information)
+print $fh <<"END";
+\$mapfile_version 2
+LOAD_SEGMENT text { VADDR = $ala; ROUND = 0x1000 };
+LOAD_SEGMENT data { ROUND = 0x1000 };
+END
+
+# build up the complete command here:
+# 'cc' -Wl,-Mtmpfile 'restargs'
+
+my $cmd="$cc -Wl,-M/proc/$$/fd/" . fileno($fh);
+
+# add the rest of the parameters
+foreach my $n (2 .. $#ARGV) {
+    $cmd = "$cmd $ARGV[$n]";
+}
+
+#print "link_tool_exe_solaris: $cmd\n";
+
+
+# execute the command:
+my $r = system("$cmd");
+
+if ($r == 0) {
+    exit 0;
+} else {
+    exit 1;
+}
diff --git a/coregrind/m_addrinfo.c b/coregrind/m_addrinfo.c
index e6f58ee..8c39b47 100644
--- a/coregrind/m_addrinfo.c
+++ b/coregrind/m_addrinfo.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -100,7 +100,7 @@
 
    (void) VG_(get_data_description)( ai->Addr.Variable.descr1,
                                      ai->Addr.Variable.descr2, a );
-   /* If there's nothing in descr1/2, free them.  Why is it safe to to
+   /* If there's nothing in descr1/2, free them.  Why is it safe to
       VG_(indexXA) at zero here?  Because VG_(get_data_description)
       guarantees to zero terminate descr1/2 regardless of the outcome
       of the call.  So there's always at least one element in each XA
@@ -265,7 +265,11 @@
 
       /* Special case to detect the brk data segment. */
       if (seg != NULL
+#if defined(VGO_solaris)
+          && (seg->kind == SkAnonC || seg->kind == SkFileC)
+#else
           && seg->kind == SkAnonC
+#endif /* VGO_solaris */
           && VG_(brk_limit) >= seg->start
           && VG_(brk_limit) <= seg->end+1) {
          /* Address a is in a Anon Client segment which contains
@@ -416,22 +420,21 @@
 
       case Addr_Unknown:
          if (maybe_gcc) {
-            VG_(emit)( "%sAddress 0x%llx is just below the stack ptr.  "
+            VG_(emit)( "%sAddress 0x%lx is just below the stack ptr.  "
                        "To suppress, use: --workaround-gcc296-bugs=yes%s\n",
-                       xpre, (ULong)a, xpost );
+                       xpre, a, xpost );
 	 } else {
-            VG_(emit)( "%sAddress 0x%llx "
+            VG_(emit)( "%sAddress 0x%lx "
                        "is not stack'd, malloc'd or %s%s\n",
-                       xpre, 
-                       (ULong)a, 
+                       xpre, a,
                        mc ? "(recently) free'd" : "on a free list",
                        xpost );
          }
          break;
 
       case Addr_Stack: 
-         VG_(emit)( "%sAddress 0x%llx is on thread %s%d's stack%s\n", 
-                    xpre, (ULong)a, 
+         VG_(emit)( "%sAddress 0x%lx is on thread %s%u's stack%s\n", 
+                    xpre, a, 
                     opt_tnr_prefix (ai->Addr.Stack.tinfo), 
                     tnr_else_tid (ai->Addr.Stack.tinfo), 
                     xpost );
@@ -455,7 +458,7 @@
 
             HChar strlinenum[16] = "";   // large enough
             if (hasfile && haslinenum)
-               VG_(sprintf)(strlinenum, "%d", linenum);
+               VG_(sprintf)(strlinenum, "%u", linenum);
 
             hasfn = VG_(get_fnname)(ai->Addr.Stack.IP, &fn);
 
@@ -559,7 +562,7 @@
          }
          if (ai->Addr.Block.alloc_tinfo.tnr || ai->Addr.Block.alloc_tinfo.tid)
             VG_(emit)(
-               "%sBlock was alloc'd by thread %s%d%s\n",
+               "%sBlock was alloc'd by thread %s%u%s\n",
                xpre,
                opt_tnr_prefix (ai->Addr.Block.alloc_tinfo),
                tnr_else_tid (ai->Addr.Block.alloc_tinfo),
@@ -569,10 +572,9 @@
       }
 
       case Addr_DataSym:
-         VG_(emit)( "%sAddress 0x%llx is %llu bytes "
+         VG_(emit)( "%sAddress 0x%lx is %llu bytes "
                     "inside data symbol \"%pS\"%s\n",
-                    xpre,
-                    (ULong)a,
+                    xpre, a,
                     (ULong)ai->Addr.DataSym.offset,
                     ai->Addr.DataSym.name,
                     xpost );
@@ -593,9 +595,8 @@
          break;
 
       case Addr_SectKind:
-         VG_(emit)( "%sAddress 0x%llx is in the %pS segment of %pS%s\n",
-                    xpre,
-                    (ULong)a,
+         VG_(emit)( "%sAddress 0x%lx is in the %pS segment of %pS%s\n",
+                    xpre, a,
                     VG_(pp_SectKind)(ai->Addr.SectKind.kind),
                     ai->Addr.SectKind.objname,
                     xpost );
@@ -608,29 +609,27 @@
 
       case Addr_BrkSegment:
          if (a < ai->Addr.BrkSegment.brk_limit)
-            VG_(emit)( "%sAddress 0x%llx is in the brk data segment"
-                       " 0x%llx-0x%llx%s\n",
-                       xpre,
-                       (ULong)a,
-                       (ULong)VG_(brk_base),
-                       (ULong)ai->Addr.BrkSegment.brk_limit - 1,
+            VG_(emit)( "%sAddress 0x%lx is in the brk data segment"
+                       " 0x%lx-0x%lx%s\n",
+                       xpre, a,
+                       VG_(brk_base),
+                       ai->Addr.BrkSegment.brk_limit - 1,
                        xpost );
          else
-            VG_(emit)( "%sAddress 0x%llx is %lu bytes after "
+            VG_(emit)( "%sAddress 0x%lx is %lu bytes after "
                        "the brk data segment limit"
-                       " 0x%llx%s\n",
-                       xpre,
-                       (ULong)a,
+                       " 0x%lx%s\n",
+                       xpre, a,
                        a - ai->Addr.BrkSegment.brk_limit,
-                       (ULong)ai->Addr.BrkSegment.brk_limit,
+                       ai->Addr.BrkSegment.brk_limit,
                        xpost );
          break;
 
       case Addr_SegmentKind:
-         VG_(emit)( "%sAddress 0x%llx is in "
+         VG_(emit)( "%sAddress 0x%lx is in "
                     "a %s%s%s %s%s%pS segment%s\n",
                     xpre,
-                    (ULong)a,
+                    a,
                     ai->Addr.SegmentKind.hasR ? "r" : "-",
                     ai->Addr.SegmentKind.hasW ? "w" : "-",
                     ai->Addr.SegmentKind.hasX ? "x" : "-",
diff --git a/coregrind/m_aspacehl.c b/coregrind/m_aspacehl.c
index 17eccce..ea68bdf 100644
--- a/coregrind/m_aspacehl.c
+++ b/coregrind/m_aspacehl.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 Julian Seward
+   Copyright (C) 2006-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_aspacemgr/aspacemgr-common.c b/coregrind/m_aspacemgr/aspacemgr-common.c
index a235875..205e052 100644
--- a/coregrind/m_aspacemgr/aspacemgr-common.c
+++ b/coregrind/m_aspacemgr/aspacemgr-common.c
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -174,6 +174,18 @@
    }
    res = VG_(do_syscall6)(__NR_mmap, (UWord)start, length,
                           prot, flags, (UInt)fd, offset);
+#  elif defined(VGP_x86_solaris)
+   /* MAP_ANON with fd==0 is EINVAL. */
+   if (fd == 0 && (flags & VKI_MAP_ANONYMOUS))
+      fd = -1;
+   res = VG_(do_syscall7)(__NR_mmap64, (UWord)start, length, prot, flags,
+                          (UInt)fd, offset & 0xffffffff, offset >> 32);
+#  elif defined(VGP_amd64_solaris)
+   /* MAP_ANON with fd==0 is EINVAL. */
+   if (fd == 0 && (flags & VKI_MAP_ANONYMOUS))
+      fd = -1;
+   res = VG_(do_syscall6)(__NR_mmap, (UWord)start, length, prot, flags,
+                          (UInt)fd, offset);
 #  else
 #    error Unknown platform
 #  endif
@@ -249,8 +261,13 @@
 #  elif defined(VGP_tilegx_linux)
    SysRes res = VG_(do_syscall4)(__NR_openat, VKI_AT_FDCWD, (UWord)pathname,
                                  flags, mode);
-#  else
+#  elif defined(VGO_linux) || defined(VGO_darwin)
    SysRes res = VG_(do_syscall3)(__NR_open, (UWord)pathname, flags, mode);
+#  elif defined(VGO_solaris)
+   SysRes res = VG_(do_syscall4)(__NR_openat, VKI_AT_FDCWD, (UWord)pathname,
+                                 flags, mode);
+#  else
+#    error Unknown OS
 #  endif
    return res;
 }
@@ -275,15 +292,20 @@
 #  elif defined(VGP_tilegx_linux)
    res = VG_(do_syscall4)(__NR_readlinkat, VKI_AT_FDCWD, (UWord)path,
                           (UWord)buf, bufsiz);
-#  else
+#  elif defined(VGO_linux) || defined(VGO_darwin)
    res = VG_(do_syscall3)(__NR_readlink, (UWord)path, (UWord)buf, bufsiz);
+#  elif defined(VGO_solaris)
+   res = VG_(do_syscall4)(__NR_readlinkat, VKI_AT_FDCWD, (UWord)path,
+                          (UWord)buf, bufsiz);
+#  else
+#    error Unknown OS
 #  endif
    return sr_isError(res) ? -1 : sr_Res(res);
 }
 
 Int ML_(am_fcntl) ( Int fd, Int cmd, Addr arg )
 {
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    SysRes res = VG_(do_syscall3)(__NR_fcntl, fd, cmd, arg);
 #  elif defined(VGO_darwin)
    SysRes res = VG_(do_syscall3)(__NR_fcntl_nocancel, fd, cmd, arg);
@@ -299,6 +321,7 @@
                            /*OUT*/ULong* dev, 
                            /*OUT*/ULong* ino, /*OUT*/UInt* mode )
 {
+#  if defined(VGO_linux) || defined(VGO_darwin)
    SysRes          res;
    struct vki_stat buf;
 #  if defined(VGO_linux) && defined(__NR_fstat64)
@@ -322,6 +345,26 @@
       return True;
    }
    return False;
+#  elif defined(VGO_solaris)
+#  if defined(VGP_x86_solaris)
+   struct vki_stat64 buf64;
+   SysRes res = VG_(do_syscall4)(__NR_fstatat64, fd, 0, (UWord)&buf64, 0);
+#  elif defined(VGP_amd64_solaris)
+   struct vki_stat buf64;
+   SysRes res = VG_(do_syscall4)(__NR_fstatat, fd, 0, (UWord)&buf64, 0);
+#  else
+#    error "Unknown platform"
+#  endif
+   if (!sr_isError(res)) {
+      *dev  = (ULong)buf64.st_dev;
+      *ino  = (ULong)buf64.st_ino;
+      *mode = (UInt) buf64.st_mode;
+      return True;
+   }
+   return False;
+#  else
+#    error Unknown OS
+#  endif
 }
 
 Bool ML_(am_resolve_filename) ( Int fd, /*OUT*/HChar* buf, Int nbuf )
@@ -347,6 +390,16 @@
    }
    return False;
 
+#elif defined(VGO_solaris)
+   Int i;
+   HChar tmp[64];
+   for (i = 0; i < nbuf; i++) buf[i] = 0;
+   ML_(am_sprintf)(tmp, "/proc/self/path/%d", fd);
+   if (ML_(am_readlink)(tmp, buf, nbuf) > 0 && buf[0] == '/')
+      return True;
+   else
+      return False;
+
 #  else
 #     error Unknown OS
 #  endif
diff --git a/coregrind/m_aspacemgr/aspacemgr-linux.c b/coregrind/m_aspacemgr/aspacemgr-linux.c
index ace28d6..7ce3c99 100644
--- a/coregrind/m_aspacemgr/aspacemgr-linux.c
+++ b/coregrind/m_aspacemgr/aspacemgr-linux.c
@@ -4,14 +4,14 @@
 /*--- The address space manager: segment initialisation and        ---*/
 /*--- tracking, stack operations                                   ---*/
 /*---                                                              ---*/
-/*--- Implementation for Linux (and Darwin!)   m_aspacemgr-linux.c ---*/
+/*--- Implementation for Linux (and Darwin!)     aspacemgr-linux.c ---*/
 /*--------------------------------------------------------------------*/
 
 /*
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
-#if defined(VGO_linux) || defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /* *************************************************************
    DO NOT INCLUDE ANY OTHER FILES HERE.
@@ -100,6 +100,15 @@
      clustered towards the start of available space, and Valgrind ones
      in the middle.
 
+     On Solaris, searches for client space start at (aspacem_vStart - 1)
+     and for Valgrind space start at (aspacem_maxAddr - 1) and go backwards.
+     This simulates what kernel does - brk limit grows from bottom and mmap'ed
+     objects from top. It is in contrary with Linux where data segment
+     and mmap'ed objects grow from bottom (leading to early data segment
+     exhaustion for tools which do not use m_replacemalloc). While Linux glibc
+     can cope with this problem by employing mmap, Solaris libc treats inability
+     to grow brk limit as a hard failure.
+
      The available space is delimited by aspacem_minAddr and
      aspacem_maxAddr.  aspacem is flexible and can operate with these
      at any (sane) setting.  For 32-bit Linux, aspacem_minAddr is set
@@ -297,14 +306,17 @@
 
 
 Addr VG_(clo_aspacem_minAddr)
-#if defined(VGO_darwin)
+#if defined(VGO_linux)
+   = (Addr) 0x04000000; // 64M
+#elif defined(VGO_darwin)
 # if VG_WORDSIZE == 4
    = (Addr) 0x00001000;
 # else
    = (Addr) 0x100000000;  // 4GB page zero
 # endif
+#elif defined(VGO_solaris)
+   = (Addr) 0x00100000; // 1MB
 #else
-   = (Addr) 0x04000000; // 64M
 #endif
 
 
@@ -430,10 +442,10 @@
 
    VG_(debugLog)(
       logLevel, "aspacem",
-      "%3d: %s %010llx-%010llx %s %c%c%c%c%c %s "
-      "d=0x%03llx i=%-7lld o=%-7lld (%d,%d) %s\n",
+      "%3d: %s %010lx-%010lx %s %c%c%c%c%c %s "
+      "d=0x%03llx i=%-7llu o=%-7lld (%d,%d) %s\n",
       segNo, show_SegKind(seg->kind),
-      (ULong)seg->start, (ULong)seg->end, len_buf,
+      seg->start, seg->end, len_buf,
       seg->hasR ? 'r' : '-', seg->hasW ? 'w' : '-', 
       seg->hasX ? 'x' : '-', seg->hasT ? 'T' : '-',
       seg->isCH ? 'H' : '-',
@@ -457,18 +469,18 @@
       case SkFree:
          VG_(debugLog)(
             logLevel, "aspacem",
-            "%3d: %s %010llx-%010llx %s\n",
+            "%3d: %s %010lx-%010lx %s\n",
             segNo, show_SegKind(seg->kind),
-            (ULong)seg->start, (ULong)seg->end, len_buf
+            seg->start, seg->end, len_buf
          );
          break;
 
       case SkAnonC: case SkAnonV: case SkShmC:
          VG_(debugLog)(
             logLevel, "aspacem",
-            "%3d: %s %010llx-%010llx %s %c%c%c%c%c\n",
+            "%3d: %s %010lx-%010lx %s %c%c%c%c%c\n",
             segNo, show_SegKind(seg->kind),
-            (ULong)seg->start, (ULong)seg->end, len_buf,
+            seg->start, seg->end, len_buf,
             seg->hasR ? 'r' : '-', seg->hasW ? 'w' : '-', 
             seg->hasX ? 'x' : '-', seg->hasT ? 'T' : '-',
             seg->isCH ? 'H' : '-'
@@ -478,10 +490,10 @@
       case SkFileC: case SkFileV:
          VG_(debugLog)(
             logLevel, "aspacem",
-            "%3d: %s %010llx-%010llx %s %c%c%c%c%c d=0x%03llx "
-            "i=%-7lld o=%-7lld (%d,%d)\n",
+            "%3d: %s %010lx-%010lx %s %c%c%c%c%c d=0x%03llx "
+            "i=%-7llu o=%-7lld (%d,%d)\n",
             segNo, show_SegKind(seg->kind),
-            (ULong)seg->start, (ULong)seg->end, len_buf,
+            seg->start, seg->end, len_buf,
             seg->hasR ? 'r' : '-', seg->hasW ? 'w' : '-', 
             seg->hasX ? 'x' : '-', seg->hasT ? 'T' : '-', 
             seg->isCH ? 'H' : '-',
@@ -493,9 +505,9 @@
       case SkResvn:
          VG_(debugLog)(
             logLevel, "aspacem",
-            "%3d: %s %010llx-%010llx %s %c%c%c%c%c %s\n",
+            "%3d: %s %010lx-%010lx %s %c%c%c%c%c %s\n",
             segNo, show_SegKind(seg->kind),
-            (ULong)seg->start, (ULong)seg->end, len_buf,
+            seg->start, seg->end, len_buf,
             seg->hasR ? 'r' : '-', seg->hasW ? 'w' : '-', 
             seg->hasX ? 'x' : '-', seg->hasT ? 'T' : '-', 
             seg->isCH ? 'H' : '-',
@@ -903,9 +915,9 @@
               "segment mismatch: V's seg 1st, kernel's 2nd:\n");
          show_nsegment_full( 0, i, &nsegments[i] );
          VG_(debugLog)(0,"aspacem", 
-            "...: .... %010llx-%010llx %s %c%c%c.. ....... "
-            "d=0x%03llx i=%-7lld o=%-7lld (.) m=. %s\n",
-            (ULong)start, (ULong)end, len_buf,
+            "...: .... %010lx-%010lx %s %c%c%c.. ....... "
+            "d=0x%03llx i=%-7llu o=%-7lld (.) m=. %s\n",
+            start, end, len_buf,
             prot & VKI_PROT_READ  ? 'r' : '-',
             prot & VKI_PROT_WRITE ? 'w' : '-',
             prot & VKI_PROT_EXEC  ? 'x' : '-',
@@ -970,8 +982,8 @@
               "segment mismatch: V's gap 1st, kernel's 2nd:\n");
          show_nsegment_full( 0, i, &nsegments[i] );
          VG_(debugLog)(0,"aspacem", 
-            "   : .... %010llx-%010llx %s\n",
-            (ULong)start, (ULong)end, len_buf);
+            "   : .... %010lx-%010lx %s\n",
+            start, end, len_buf);
          return;
       }
    }
@@ -1122,6 +1134,18 @@
       return &nsegments[i];
 }
 
+/* Finds an anonymous segment containing 'a'. Returned pointer is read only. */
+NSegment const *VG_(am_find_anon_segment) ( Addr a )
+{
+   Int i = find_nsegment_idx(a);
+   aspacem_assert(i >= 0 && i < nsegments_used);
+   aspacem_assert(nsegments[i].start <= a);
+   aspacem_assert(a <= nsegments[i].end);
+   if (nsegments[i].kind == SkAnonC || nsegments[i].kind == SkAnonV)
+      return &nsegments[i];
+   else
+      return NULL;
+}
 
 /* Map segment pointer to segment index. */
 static Int segAddr_to_index ( const NSegment* seg )
@@ -1241,6 +1265,15 @@
    return is_valid_for(kinds, start, len, prot);
 }
 
+/* Checks if a piece of memory consists of either free or reservation
+   segments. */
+Bool VG_(am_is_free_or_resvn)( Addr start, SizeT len )
+{
+   const UInt kinds = SkFree | SkResvn;
+
+   return is_valid_for(kinds, start, len, 0);
+}
+
 
 Bool VG_(am_is_valid_for_valgrind) ( Addr start, SizeT len, UInt prot )
 {
@@ -1288,7 +1321,7 @@
 
    case SkResvn: {
       if (seg->smode != SmUpper) return False;
-      /* If the the abutting segment towards higher addresses is an SkAnonC
+      /* If the abutting segment towards higher addresses is an SkAnonC
          segment, then ADDR is a future stack pointer. */
       const NSegment *next = VG_(am_next_nsegment)(seg, /*forward*/ True);
       if (next == NULL || next->kind != SkAnonC) return False;
@@ -1486,12 +1519,11 @@
    seg.hasX   = toBool(prot & VKI_PROT_EXEC);
    seg.hasT   = False;
 
-   /* Don't use the presence of a filename to decide if a segment in
-      the initial /proc/self/maps to decide if the segment is an AnonV
-      or FileV segment as some systems don't report the filename. Use
-      the device and inode numbers instead. Fixes bug #124528. */
+   /* A segment in the initial /proc/self/maps is considered a FileV
+      segment if either it has a file name associated with it or both its
+      device and inode numbers are != 0. See bug #124528. */
    seg.kind = SkAnonV;
-   if (dev != 0 && ino != 0) 
+   if (filename || (dev != 0 && ino != 0)) 
       seg.kind = SkFileV;
 
 #  if defined(VGO_darwin)
@@ -1593,14 +1625,103 @@
 
    suggested_clstack_end = -1; // ignored; Mach-O specifies its stack
 
-#else /* !defined(VGO_darwin) */
+#elif defined(VGO_solaris)
+#  if VG_WORDSIZE == 4
+   /*
+      Intended address space partitioning:
+
+      ,--------------------------------, 0x00000000
+      |                                |
+      |--------------------------------|
+      | initial stack given to V by OS |
+      |--------------------------------| 0x08000000
+      |          client text           |
+      |--------------------------------|
+      |                                |
+      |                                |
+      |--------------------------------|
+      |          client stack          |
+      |--------------------------------| 0x38000000
+      |            V's text            |
+      |--------------------------------|
+      |                                |
+      |                                |
+      |--------------------------------|
+      |     dynamic shared objects     |
+      '--------------------------------' 0xffffffff
+
+      */
+
+   /* Anonymous pages need to fit under user limit (USERLIMIT32)
+      which is 4KB + 16MB below the top of the 32-bit range. */
+#    ifdef ENABLE_INNER
+     aspacem_maxAddr = (Addr)0x4fffffff; // 1.25GB
+     aspacem_vStart  = (Addr)0x40000000; // 1GB
+#    else
+     aspacem_maxAddr = (Addr)0xfefff000 - 1; // 4GB - 16MB - 4KB
+     aspacem_vStart  = (Addr)0x50000000; // 1.25GB
+#    endif
+#  elif VG_WORDSIZE == 8
+   /*
+      Intended address space partitioning:
+
+      ,--------------------------------, 0x00000000_00000000
+      |                                |
+      |--------------------------------| 0x00000000_00400000
+      |          client text           |
+      |--------------------------------|
+      |                                |
+      |                                |
+      |--------------------------------|
+      |          client stack          |
+      |--------------------------------| 0x00000000_38000000
+      |            V's text            |
+      |--------------------------------|
+      |                                |
+      |--------------------------------|
+      |     dynamic shared objects     |
+      |--------------------------------| 0x0000000f_ffffffff
+      |                                |
+      |                                |
+      |--------------------------------|
+      | initial stack given to V by OS |
+      '--------------------------------' 0xffffffff_ffffffff
+
+      */
+
+   /* Kernel likes to place objects at the end of the address space.
+      However accessing memory beyond 64GB makes memcheck slow
+      (see memcheck/mc_main.c, internal representation). Therefore:
+      - mmapobj() syscall is emulated so that libraries are subject to
+        Valgrind's aspacemgr control
+      - Kernel shared pages (such as schedctl and hrt) are left as they are
+        because kernel cannot be told where they should be put */
+#    ifdef ENABLE_INNER
+     aspacem_maxAddr = (Addr) 0x00000007ffffffff; // 32GB
+     aspacem_vStart  = (Addr) 0x0000000400000000; // 16GB
+#    else
+     aspacem_maxAddr = (Addr) 0x0000000fffffffff; // 64GB
+     aspacem_vStart  = (Addr) 0x0000000800000000; // 32GB
+#    endif
+#  else
+#    error "Unknown word size"
+#  endif
+
+   aspacem_cStart = aspacem_minAddr;
+#  ifdef ENABLE_INNER
+   suggested_clstack_end = (Addr) 0x27ff0000 - 1; // 64kB below V's text
+#  else
+   suggested_clstack_end = (Addr) 0x37ff0000 - 1; // 64kB below V's text
+#  endif
+
+#else
 
    /* Establish address limits and block out unusable parts
       accordingly. */
 
    VG_(debugLog)(2, "aspacem", 
-                    "        sp_at_startup = 0x%010llx (supplied)\n", 
-                    (ULong)sp_at_startup );
+                    "        sp_at_startup = 0x%010lx (supplied)\n", 
+                    sp_at_startup );
 
 #  if VG_WORDSIZE == 8
      aspacem_maxAddr = (Addr)0x1000000000ULL - 1; // 64G
@@ -1624,7 +1745,7 @@
    suggested_clstack_end = aspacem_maxAddr - 16*1024*1024ULL
                                            + VKI_PAGE_SIZE;
 
-#endif /* #else of 'defined(VGO_darwin)' */
+#endif
 
    aspacem_assert(VG_IS_PAGE_ALIGNED(aspacem_minAddr));
    aspacem_assert(VG_IS_PAGE_ALIGNED(aspacem_maxAddr + 1));
@@ -1633,20 +1754,20 @@
    aspacem_assert(VG_IS_PAGE_ALIGNED(suggested_clstack_end + 1));
 
    VG_(debugLog)(2, "aspacem", 
-                    "              minAddr = 0x%010llx (computed)\n", 
-                    (ULong)aspacem_minAddr);
+                    "              minAddr = 0x%010lx (computed)\n", 
+                    aspacem_minAddr);
    VG_(debugLog)(2, "aspacem", 
-                    "              maxAddr = 0x%010llx (computed)\n", 
-                    (ULong)aspacem_maxAddr);
+                    "              maxAddr = 0x%010lx (computed)\n", 
+                    aspacem_maxAddr);
    VG_(debugLog)(2, "aspacem", 
-                    "               cStart = 0x%010llx (computed)\n", 
-                    (ULong)aspacem_cStart);
+                    "               cStart = 0x%010lx (computed)\n", 
+                    aspacem_cStart);
    VG_(debugLog)(2, "aspacem", 
-                    "               vStart = 0x%010llx (computed)\n", 
-                    (ULong)aspacem_vStart);
+                    "               vStart = 0x%010lx (computed)\n", 
+                    aspacem_vStart);
    VG_(debugLog)(2, "aspacem", 
-                    "suggested_clstack_end = 0x%010llx (computed)\n", 
-                    (ULong)suggested_clstack_end);
+                    "suggested_clstack_end = 0x%010lx (computed)\n", 
+                    suggested_clstack_end);
 
    if (aspacem_cStart > Addr_MIN) {
       init_resvn(&seg, Addr_MIN, aspacem_cStart-1);
@@ -1749,9 +1870,13 @@
    Addr holeStart, holeEnd, holeLen;
    Bool fixed_not_required;
 
+#if defined(VGO_solaris)
+   Addr startPoint = forClient ? aspacem_vStart - 1 : aspacem_maxAddr - 1;
+#else
    Addr startPoint = forClient ? aspacem_cStart : aspacem_vStart;
+#endif /* VGO_solaris */
 
-   Addr reqStart = req->rkind==MAny ? 0 : req->start;
+   Addr reqStart = req->rkind==MFixed || req->rkind==MHint ? req->start : 0;
    Addr reqEnd   = reqStart + req->len - 1;
    Addr reqLen   = req->len;
 
@@ -1764,8 +1889,8 @@
 
    if (0) {
       VG_(am_show_nsegments)(0,"getAdvisory");
-      VG_(debugLog)(0,"aspacem", "getAdvisory 0x%llx %lld\n", 
-                      (ULong)req->start, (ULong)req->len);
+      VG_(debugLog)(0,"aspacem", "getAdvisory 0x%lx %lu\n",
+                    req->start, req->len);
    }
 
    /* Reject zero-length requests */
@@ -1775,8 +1900,7 @@
    }
 
    /* Reject wraparounds */
-   if ((req->rkind==MFixed || req->rkind==MHint)
-       && req->start + req->len < req->start) {
+   if (req->start + req->len < req->start) {
       *ok = False;
       return 0;
    }
@@ -1835,18 +1959,39 @@
    /* ------ Implement the Default Policy ------ */
 
    /* Don't waste time looking for a fixed match if not requested to. */
-   fixed_not_required = req->rkind == MAny;
+   fixed_not_required = req->rkind == MAny || req->rkind == MAlign;
 
    i = find_nsegment_idx(startPoint);
 
+#if defined(VGO_solaris)
+#  define UPDATE_INDEX(index)                               \
+      (index)--;                                            \
+      if ((index) <= 0)                                     \
+         (index) = nsegments_used - 1;
+#  define ADVISE_ADDRESS(segment)                           \
+       VG_PGROUNDDN((segment)->end + 1 - reqLen)
+#  define ADVISE_ADDRESS_ALIGNED(segment)                   \
+        VG_ROUNDDN((segment)->end + 1 - reqLen, req->start)
+
+#else
+
+#  define UPDATE_INDEX(index)                               \
+      (index)++;                                            \
+      if ((index) >= nsegments_used)                        \
+         (index) = 0;
+#  define ADVISE_ADDRESS(segment)                           \
+      (segment)->start
+#  define ADVISE_ADDRESS_ALIGNED(segment)                   \
+      VG_ROUNDUP((segment)->start, req->start)
+#endif /* VGO_solaris */
+
    /* Examine holes from index i back round to i-1.  Record the
       index first fixed hole and the first floating hole which would
       satisfy the request. */
    for (j = 0; j < nsegments_used; j++) {
 
       if (nsegments[i].kind != SkFree) {
-         i++;
-         if (i >= nsegments_used) i = 0;
+         UPDATE_INDEX(i);
          continue;
       }
 
@@ -1858,6 +2003,15 @@
       aspacem_assert(aspacem_minAddr <= holeStart);
       aspacem_assert(holeEnd <= aspacem_maxAddr);
 
+      if (req->rkind == MAlign) {
+         holeStart = VG_ROUNDUP(holeStart, req->start);
+         if (holeStart >= holeEnd) {
+            /* This hole can't be used. */
+            UPDATE_INDEX(i);
+            continue;
+         }
+      }
+
       /* See if it's any use to us. */
       holeLen = holeEnd - holeStart + 1;
 
@@ -1871,8 +2025,7 @@
       if ((fixed_not_required || fixedIdx >= 0) && floatIdx >= 0)
          break;
 
-      i++;
-      if (i >= nsegments_used) i = 0;
+      UPDATE_INDEX(i);
    }
 
    aspacem_assert(fixedIdx >= -1 && fixedIdx < nsegments_used);
@@ -1903,14 +2056,21 @@
          }
          if (floatIdx >= 0) {
             *ok = True;
-            return nsegments[floatIdx].start;
+            return ADVISE_ADDRESS(&nsegments[floatIdx]);
          }
          *ok = False;
          return 0;
       case MAny:
          if (floatIdx >= 0) {
             *ok = True;
-            return nsegments[floatIdx].start;
+            return ADVISE_ADDRESS(&nsegments[floatIdx]);
+         }
+         *ok = False;
+         return 0;
+      case MAlign:
+         if (floatIdx >= 0) {
+            *ok = True;
+            return ADVISE_ADDRESS_ALIGNED(&nsegments[floatIdx]);
          }
          *ok = False;
          return 0;
@@ -1922,6 +2082,10 @@
    ML_(am_barf)("getAdvisory: unknown request kind");
    *ok = False;
    return 0;
+
+#undef UPDATE_INDEX
+#undef ADVISE_ADDRESS
+#undef ADVISE_ADDRESS_ALIGNED
 }
 
 /* Convenience wrapper for VG_(am_get_advisory) for client floating or
@@ -2159,12 +2323,30 @@
 SysRes VG_(am_mmap_file_fixed_client)
      ( Addr start, SizeT length, UInt prot, Int fd, Off64T offset )
 {
-   return VG_(am_mmap_named_file_fixed_client)(start, length, prot, fd, offset, NULL);
+   UInt flags = VKI_MAP_FIXED | VKI_MAP_PRIVATE;
+   return VG_(am_mmap_named_file_fixed_client_flags)(start, length, prot, flags,
+                                                     fd, offset, NULL);
+}
+
+SysRes VG_(am_mmap_file_fixed_client_flags)
+     ( Addr start, SizeT length, UInt prot, UInt flags, Int fd, Off64T offset )
+{
+   return VG_(am_mmap_named_file_fixed_client_flags)(start, length, prot, flags,
+                                                     fd, offset, NULL);
 }
 
 SysRes VG_(am_mmap_named_file_fixed_client)
      ( Addr start, SizeT length, UInt prot, Int fd, Off64T offset, const HChar *name )
 {
+   UInt flags = VKI_MAP_FIXED | VKI_MAP_PRIVATE;
+   return VG_(am_mmap_named_file_fixed_client_flags)(start, length, prot, flags,
+                                                     fd, offset, name);
+}
+
+SysRes VG_(am_mmap_named_file_fixed_client_flags)
+     ( Addr start, SizeT length, UInt prot, UInt flags,
+       Int fd, Off64T offset, const HChar *name )
+{
    SysRes     sres;
    NSegment   seg;
    Addr       advised;
@@ -2193,8 +2375,7 @@
       any resulting failure immediately. */
    // DDD: #warning GrP fixme MAP_FIXED can clobber memory!
    sres = VG_(am_do_mmap_NO_NOTIFY)( 
-             start, length, prot, 
-             VKI_MAP_FIXED|VKI_MAP_PRIVATE, 
+             start, length, prot, flags,
              fd, offset 
           );
    if (sr_isError(sres))
@@ -3604,7 +3785,274 @@
 
 /*------END-procmaps-parser-for-Darwin---------------------------*/
 
-#endif // defined(VGO_linux) || defined(VGO_darwin)
+/*------BEGIN-procmaps-parser-for-Solaris------------------------*/
+
+#if defined(VGO_solaris)
+
+/* Note: /proc/self/xmap contains extended information about already
+   materialized mappings whereas /proc/self/rmap contains information about
+   all mappings including reserved but yet-to-materialize mappings (mmap'ed
+   with MAP_NORESERVE flag, such as thread stacks). But /proc/self/rmap does
+   not contain extended information found in /proc/self/xmap. Therefore
+   information from both sources need to be combined.
+ */
+
+typedef struct
+{
+   Addr   addr;
+   SizeT  size;
+   UInt   prot;
+   ULong  dev;
+   ULong  ino;
+   Off64T foffset;
+   HChar  filename[VKI_PATH_MAX];
+} Mapping;
+
+static SizeT read_proc_file(const HChar *filename, HChar *buf,
+                            SizeT buf_size, const HChar *buf_size_name,
+                            SizeT entry_size)
+{
+   SysRes res = ML_(am_open)(filename, VKI_O_RDONLY, 0);
+   if (sr_isError(res)) {
+      HChar message[100];
+      ML_(am_sprintf)(message, "Cannot open %s.", filename);
+      ML_(am_barf)(message);
+   }
+   Int fd = sr_Res(res);
+
+   Int r = ML_(am_read)(fd, buf, buf_size);
+   ML_(am_close)(fd);
+   if (r < 0) {
+      HChar message[100];
+      ML_(am_sprintf)(message, "I/O error on %s.", filename);
+      ML_(am_barf)(message);
+   }
+
+   if (r >= buf_size)
+      ML_(am_barf_toolow)(buf_size_name);
+
+   if (r % entry_size != 0) {
+      HChar message[100];
+      ML_(am_sprintf)(message, "Bogus values read from %s.", filename);
+      ML_(am_barf)(message);
+   }
+
+   return r / entry_size;
+}
+
+static Mapping *next_xmap(const HChar *buffer, SizeT entries, SizeT *idx,
+                          Mapping *mapping)
+{
+   aspacem_assert(idx);
+   aspacem_assert(mapping);
+
+   if (*idx >= entries)
+      return NULL; /* No more entries */
+
+   const vki_prxmap_t *map = (const vki_prxmap_t *)buffer + *idx;
+
+   mapping->addr = map->pr_vaddr;
+   mapping->size = map->pr_size;
+
+   mapping->prot = 0;
+   if (map->pr_mflags & VKI_MA_READ)
+      mapping->prot |= VKI_PROT_READ;
+   if (map->pr_mflags & VKI_MA_WRITE)
+      mapping->prot |= VKI_PROT_WRITE;
+   if (map->pr_mflags & VKI_MA_EXEC)
+      mapping->prot |= VKI_PROT_EXEC;
+
+   if (map->pr_dev != VKI_PRNODEV) {
+      mapping->dev = map->pr_dev;
+      mapping->ino = map->pr_ino;
+      mapping->foffset = map->pr_offset;
+   }
+   else {
+      mapping->dev = 0;
+      mapping->ino = 0;
+      mapping->foffset = 0;
+   }
+
+   /* Try to get the filename. */
+   mapping->filename[0] = '\0';
+   if (map->pr_mapname[0] != '\0') {
+      ML_(am_sprintf)(mapping->filename, "/proc/self/path/%s",
+                      map->pr_mapname);
+      Int r = ML_(am_readlink)(mapping->filename, mapping->filename,
+                               sizeof(mapping->filename) - 1);
+      if (r == -1) {
+         /* If Valgrind is executed in a non-global zone and the link in
+            /proc/self/path/ represents a file that is available through lofs
+            from a global zone then the kernel may not be able to resolve the
+            link.
+
+            In such a case, return a corresponding /proc/self/object/ file to
+            allow Valgrind to read the file if it is necessary.
+
+            This can create some discrepancy for the sanity check. For
+            instance, if a client program mmaps some file then the address
+            space manager will have a correct zone-local name of that file,
+            but the sanity check will receive a different file name from this
+            code. This currently does not represent a problem because the
+            sanity check ignores the file names (it uses device and inode
+            numbers for the comparison).
+          */
+         ML_(am_sprintf)(mapping->filename, "/proc/self/object/%s",
+                         map->pr_mapname);
+      }
+      else {
+         aspacem_assert(r >= 0);
+         mapping->filename[r] = '\0';
+      }
+   }
+
+   *idx += 1;
+   return mapping;
+}
+
+static Mapping *next_rmap(const HChar *buffer, SizeT entries, SizeT *idx,
+                          Mapping *mapping)
+{
+   aspacem_assert(idx);
+   aspacem_assert(mapping);
+
+   if (*idx >= entries)
+      return NULL; /* No more entries */
+
+   const vki_prmap_t *map = (const vki_prmap_t *)buffer + *idx;
+
+   mapping->addr = map->pr_vaddr;
+   mapping->size = map->pr_size;
+
+   mapping->prot = 0;
+   if (map->pr_mflags & VKI_MA_READ)
+      mapping->prot |= VKI_PROT_READ;
+   if (map->pr_mflags & VKI_MA_WRITE)
+      mapping->prot |= VKI_PROT_WRITE;
+   if (map->pr_mflags & VKI_MA_EXEC)
+      mapping->prot |= VKI_PROT_EXEC;
+
+   mapping->dev = 0;
+   mapping->ino = 0;
+   mapping->foffset = 0;
+   mapping->filename[0] = '\0';
+
+   *idx += 1;
+   return mapping;
+}
+
+/* Used for two purposes:
+   1. Establish initial mappings upon the process startup
+   2. Check mappings during aspacemgr sanity check
+ */
+static void parse_procselfmaps (
+      void (*record_mapping)( Addr addr, SizeT len, UInt prot,
+                              ULong dev, ULong ino, Off64T offset,
+                              const HChar *filename ),
+      void (*record_gap)( Addr addr, SizeT len )
+   )
+{
+   Addr start = Addr_MIN;
+   Addr gap_start = Addr_MIN;
+
+#define M_XMAP_BUF (VG_N_SEGMENTS * sizeof(vki_prxmap_t))
+   /* Static to keep it out of stack frame... */
+   static HChar xmap_buf[M_XMAP_BUF];
+   const Mapping *xmap = NULL;
+   SizeT xmap_index = 0; /* Current entry */
+   SizeT xmap_entries;
+   Mapping xmap_mapping;
+   Bool advance_xmap;
+
+#define M_RMAP_BUF (VG_N_SEGMENTS * sizeof(vki_prmap_t))
+   static HChar rmap_buf[M_RMAP_BUF];
+   const Mapping *rmap = NULL;
+   SizeT rmap_index = 0; /* Current entry */
+   SizeT rmap_entries;
+   Mapping rmap_mapping;
+   Bool advance_rmap;
+
+   /* Read fully /proc/self/xmap and /proc/self/rmap. */
+   xmap_entries = read_proc_file("/proc/self/xmap", xmap_buf, M_XMAP_BUF,
+                                 "M_XMAP_BUF", sizeof(vki_prxmap_t));
+
+   rmap_entries = read_proc_file("/proc/self/rmap", rmap_buf, M_RMAP_BUF,
+                                 "M_RMAP_BUF", sizeof(vki_prmap_t));
+
+   /* Get the first xmap and rmap. */
+   advance_xmap = True;
+   advance_rmap = True;
+
+   while (1) {
+      /* Get next xmap or rmap if necessary. */
+      if (advance_xmap) {
+         xmap = next_xmap(xmap_buf, xmap_entries, &xmap_index, &xmap_mapping);
+         advance_xmap = False;
+      }
+      if (advance_rmap) {
+         rmap = next_rmap(rmap_buf, rmap_entries, &rmap_index, &rmap_mapping);
+         advance_rmap = False;
+      }
+
+      /* Check if the end has been reached. */
+      if (rmap == NULL)
+         break;
+
+      /* Invariants */
+      if (xmap != NULL) {
+         aspacem_assert(start <= xmap->addr);
+         aspacem_assert(rmap->addr <= xmap->addr);
+      }
+
+      if (xmap != NULL && start == xmap->addr) {
+         /* xmap mapping reached. */
+         aspacem_assert(xmap->addr >= rmap->addr &&
+                        xmap->addr + xmap->size <= rmap->addr + rmap->size);
+         aspacem_assert(xmap->prot == rmap->prot);
+
+         if (record_mapping != NULL)
+            (*record_mapping)(xmap->addr, xmap->size, xmap->prot, xmap->dev,
+                              xmap->ino, xmap->foffset,
+                              (xmap->filename[0] != '\0') ?
+                               xmap->filename : NULL);
+
+         start = xmap->addr + xmap->size;
+         advance_xmap = True;
+      }
+      else if (start >= rmap->addr) {
+         /* Reserved-only part. */
+         /* First calculate size until the end of this reserved mapping... */
+         SizeT size = rmap->addr + rmap->size - start;
+         /* ... but shrink it if some xmap is in a way. */
+         if (xmap != NULL && size > xmap->addr - start)
+            size = xmap->addr - start;
+
+         if (record_mapping != NULL)
+            (*record_mapping)(start, size, rmap->prot, 0, 0, 0, NULL);
+         start += size;
+      }
+      else {
+         /* Gap. */
+         if (record_gap != NULL && gap_start < start)
+            (*record_gap)(gap_start, start - gap_start);
+         start = rmap->addr;
+      }
+
+      if (rmap->addr + rmap->size <= start)
+         advance_rmap = True;
+
+      gap_start = start;
+   }
+
+   if (record_gap != NULL && gap_start < Addr_MAX)
+      (*record_gap)(gap_start, Addr_MAX - gap_start + 1);
+}
+
+#endif // defined(VGO_solaris)
+
+/*------END-procmaps-parser-for-Solaris--------------------------*/
+
+#endif // defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_aspacemgr/aspacemgr-segnames.c b/coregrind/m_aspacemgr/aspacemgr-segnames.c
index 7fcacf4..761608d 100644
--- a/coregrind/m_aspacemgr/aspacemgr-segnames.c
+++ b/coregrind/m_aspacemgr/aspacemgr-segnames.c
@@ -92,7 +92,7 @@
 
    Free slots are chained together in a singly linked list. An index of
    zero indicates the end of the chain. Note that zero cannot conflict
-   with an index into the string table as the minumum index is at least
+   with an index into the string table as the minimum index is at least
    four (see above).
 
    The typical way to traverse the segment names is:
@@ -125,10 +125,12 @@
    max_refcount  = 0x7fff,      // 2 bytes - F-bit
    max_slotsize  = 0xffff,      // 2 bytes
    max_slotindex = 0x7fffffff,  // 4 bytes - F-bit
-   fbit_mask = 0x80,
+   fbit_mask_value = 0x80,
    end_of_chain = 0
 };
 
+static const UInt fbit_mask = fbit_mask_value;
+
 /* The old segname implementation allowed for 1000 names on Android and
    6000 names on other platforms. Each name was allowed to be 1000 characters
    long. That was very wasteful. */
diff --git a/coregrind/m_aspacemgr/priv_aspacemgr.h b/coregrind/m_aspacemgr/priv_aspacemgr.h
index 13d3dff..b5fd957 100644
--- a/coregrind/m_aspacemgr/priv_aspacemgr.h
+++ b/coregrind/m_aspacemgr/priv_aspacemgr.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_cache.c b/coregrind/m_cache.c
index 811eb91..63a515f 100644
--- a/coregrind/m_cache.c
+++ b/coregrind/m_cache.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2002-2013 Nicholas Nethercote
+   Copyright (C) 2002-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_clientstate.c b/coregrind/m_clientstate.c
index e1a6040..7cbc7c7 100644
--- a/coregrind/m_clientstate.c
+++ b/coregrind/m_clientstate.c
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -51,9 +51,13 @@
 /* Initial highest address of the stack segment of the main thread. */
 Addr  VG_(clstk_end)   = 0;
 UWord VG_(clstk_id)    = 0;
+/* Maximum size of the main thread's client stack. */
+SizeT VG_(clstk_max_size) = 0;
 
-/* linux only: where is the client auxv ? */
-/* This is set up as part of setup_client_stack in initimg-linux.c. */
+/* Solaris and Linux only, specifies where the client auxv is.
+
+   This is set up as part of setup_client_stack() in
+   initimg-{linux,solaris}.c. */
 UWord* VG_(client_auxv) = NULL;
 
 Addr  VG_(brk_base)    = 0;       /* start of brk */
@@ -68,6 +72,11 @@
 /* A fd which refers to the fake /proc/<pid>/auxv in /tmp. */
 Int VG_(cl_auxv_fd) = -1;
 
+#if defined(VGO_solaris)
+/* A fd which refers to the fake /proc/<pid>/psinfo in /tmp. */
+Int VG_(cl_psinfo_fd) = -1;
+#endif /* VGO_solaris */
+
 // Command line pieces, after they have been extracted from argv in
 // m_main.main().  The payload vectors are allocated in VG_AR_CORE
 // (the default arena).  They are never freed.
@@ -113,6 +122,12 @@
    in nptl/allocatestack.c */
 SizeT* VG_(client__stack_cache_actsize__addr) = 0;
 
+#if defined(VGO_solaris)
+/* Address of variable vg_vfork_fildes in vgpreload_core.so.0
+   (vg_preloaded.c). */
+Int* VG_(vfork_fildes_addr) = 0;
+#endif
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_commandline.c b/coregrind/m_commandline.c
index 7ac4969..67b9277 100644
--- a/coregrind/m_commandline.c
+++ b/coregrind/m_commandline.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_compiler.c b/coregrind/m_compiler.c
index f39a90f..a6f5a32 100644
--- a/coregrind/m_compiler.c
+++ b/coregrind/m_compiler.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Florian Krohm
+   Copyright (C) 2014-2015 Florian Krohm
       florian@eich-krohm.de
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_coredump/coredump-elf.c b/coregrind/m_coredump/coredump-elf.c
index 221bd7d..a9258a1 100644
--- a/coregrind/m_coredump/coredump-elf.c
+++ b/coregrind/m_coredump/coredump-elf.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -182,8 +182,6 @@
 static void fill_prpsinfo(const ThreadState *tst,
                           struct vki_elf_prpsinfo *prpsinfo)
 {
-   const HChar *name;
-
    VG_(memset)(prpsinfo, 0, sizeof(*prpsinfo));
 
    switch(tst->status) {
@@ -209,16 +207,7 @@
    prpsinfo->pr_uid = 0;
    prpsinfo->pr_gid = 0;
    
-   if (VG_(resolve_filename)(VG_(cl_exec_fd), &name)) {
-      const HChar *n = name + VG_(strlen)(name) - 1;
-
-      while (n > name && *n != '/')
-	 n--;
-      if (n != name)
-	 n++;
-
-      VG_(strncpy)(prpsinfo->pr_fname, n, sizeof(prpsinfo->pr_fname));
-   }
+   VG_(client_fname)(prpsinfo->pr_fname, sizeof(prpsinfo->pr_fname), False);
 }
 
 static void fill_prstatus(const ThreadState *tst, 
diff --git a/coregrind/m_coredump/coredump-solaris.c b/coregrind/m_coredump/coredump-solaris.c
new file mode 100644
index 0000000..3a12b78
--- /dev/null
+++ b/coregrind/m_coredump/coredump-solaris.c
@@ -0,0 +1,1110 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Dumping core on Solaris.                  coredump-solaris.c ---*/
+/*--------------------------------------------------------------------*/
+ 
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2013-2015 Ivo Raisr
+      ivosh@ivosh.net
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+#if defined(VGO_solaris)
+
+#include "pub_core_basics.h"
+#include "pub_core_vki.h"
+#include "pub_core_aspacehl.h"
+#include "pub_core_aspacemgr.h"
+#include "pub_core_coredump.h"
+#include "pub_core_debuglog.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcfile.h"
+#include "pub_core_libcprint.h"
+#include "pub_core_libcproc.h"
+#include "pub_core_machine.h"
+#include "pub_core_mallocfree.h"
+#include "pub_core_options.h"
+#include "pub_core_syscall.h"
+#include "pub_core_threadstate.h"
+#include "pub_core_xarray.h"
+#include "pub_core_clientstate.h"
+
+typedef struct __attribute__ ((__packed__)) note {
+   struct note *next;
+   VKI_ESZ(Nhdr) nhdr;
+   HChar name[8];
+   HChar data[0];
+} note_t;
+
+static void add_note(note_t **list, UInt type, const void *data,
+                     UInt datasz);
+
+/* If true, then this Segment may be mentioned in the core */
+static Bool may_dump(const NSegment *seg)
+{
+   if ((seg->kind == SkAnonC) ||
+       (seg->kind == SkShmC) ||
+       ((seg->kind == SkFileC) &&
+        !VKI_S_ISCHR(seg->mode) && !VKI_S_ISBLK(seg->mode)))
+      return True;
+
+   return False;
+}
+
+/* If true, then this Segment's contents will be in the core */
+static Bool should_dump(const NSegment *seg)
+{
+   return may_dump(seg);
+}
+
+#if defined(SOLARIS_PRXREGSET_T)
+static Bool should_dump_xregs(const ThreadState *tst)
+{
+#if defined(VGP_x86_solaris)
+   return False;
+#elif defined(VGP_amd64_solaris)
+   const ThreadArchState *arch = (const ThreadArchState *) &tst->arch;
+
+   /* Dump 256-bit wide %ymm only when their upper half is non-zero. */
+   #define YMM_NON_ZERO(reg) \
+      ((reg[4] != 0) || (reg[5] != 0) || (reg[6] != 0) || (reg[7] != 0))
+   if (YMM_NON_ZERO(arch->vex.guest_YMM0) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM1) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM2) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM3) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM4) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM5) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM6) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM7) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM9) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM0) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM10) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM11) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM12) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM13) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM14) ||
+       YMM_NON_ZERO(arch->vex.guest_YMM15))
+      return True;
+
+   return False;
+
+   #undef YMM_NON_ZERO
+#else
+#  error Unknown ELF platform
+#endif
+}
+#endif /* SOLARIS_PRXREGSET_T */
+
+static void write_part(Int fd, const HChar *filename,
+                       void *buf, SizeT buf_size, const HChar *part)
+{
+   Int ret = VG_(write)(fd, buf, buf_size);
+   if (ret < 0) {
+      VG_(umsg)("Failed to write %s to coredump file %s, it may be "
+                "incomplete.\n", part, filename);
+      VG_(debugLog)(1, "coredump-solaris", "write_part: failed to write "
+                    "%s to file %s. Buffer address=%p, length=%lu. "
+                    "Error=%d.\n", part, filename, buf, buf_size, -ret);
+   }
+}
+
+/*====================================================================*/
+/*=== Miscellaneous getters                                        ===*/
+/*====================================================================*/
+
+static Int get_uid(void)
+{
+   return sr_Res(VG_(do_syscall0)(SYS_getuid));
+}
+
+static Int get_gid(void)
+{
+   return sr_Res(VG_(do_syscall0)(SYS_getgid));
+}
+
+static Int get_dmodel(void)
+{
+#if defined(VGP_x86_solaris)
+   return PR_MODEL_ILP32;
+#elif defined(VGP_amd64_solaris)
+   return PR_MODEL_LP64;
+#else
+#  error "Unknown platform"
+#endif
+}
+
+static vki_zoneid_t get_zoneid(void)
+{
+   SysRes sres = VG_(do_syscall2)(SYS_zone, VKI_ZONE_LOOKUP,
+                                  (UWord) NULL);
+   if (sr_isError(sres))
+       return 0;
+
+   return sr_Res(sres);
+}
+
+static UInt count_auxv(void)
+{
+   UInt count = 1;
+
+   vki_auxv_t *auxv = (vki_auxv_t *) VG_(client_auxv);
+   while (auxv->a_type != VKI_AT_NULL) {
+      count += 1;
+      auxv++;
+   }
+
+   return count;
+}
+
+static Addr compute_stkbase(const ThreadState *tst)
+{
+   return tst->client_stack_highest_byte + 1
+          - tst->client_stack_szB;
+}
+
+static Int get_wstat(const vki_siginfo_t *si)
+{
+   return (si->si_signo & 0xff) | WCOREFLG;
+}
+
+/*====================================================================*/
+/*=== Utility fillers                                              ===*/
+/*====================================================================*/
+
+static void fill_platform(HChar *buf, UInt buf_size)
+{
+   vg_assert(buf != NULL);
+   vg_assert(buf_size >= 1);
+
+   buf[0] = '\0';
+
+   VG_(do_syscall3)(SYS_systeminfo, VKI_SI_PLATFORM,
+                    (UWord) buf, buf_size);
+}
+
+static void fill_zonename(HChar *buf, UInt buf_size)
+{
+   vg_assert(buf != NULL);
+   vg_assert(buf_size >= 1);
+
+   buf[0] = '\0';
+
+   VG_(do_syscall5)(SYS_zone, VKI_ZONE_GETATTR, get_zoneid(),
+                    VKI_ZONE_ATTR_NAME, (UWord) buf, buf_size);
+}
+
+static void fill_thread_state(const ThreadState *tst,
+                              HChar *state, HChar *sname)
+{
+   switch (tst->status) {
+   case VgTs_Runnable:
+   case VgTs_Yielding:
+      *state = VKI_SRUN;
+      *sname = 'R';
+      break;
+
+   case VgTs_WaitSys:
+      *state = VKI_SSLEEP;
+      *sname = 'S';
+      break;
+
+   case VgTs_Zombie:
+      *state = VKI_SZOMB;
+      *sname = 'Z';
+      break;
+
+   case VgTs_Empty:
+   case VgTs_Init:
+      *state = 0;
+      *sname = '?';
+      break;
+   }
+}
+
+static void fill_siginfo(const vki_siginfo_t *si, vki_siginfo_t *di,
+                         Short *signo)
+{
+   di->si_signo = si->si_signo;
+   di->si_code  = si->si_code;
+   di->si_errno = 0;
+   di->si_addr = si->si_addr;
+   *signo = si->si_signo;
+}
+
+static void fill_argv(Int *argc, Addr *argv)
+{
+   Addr *ptr = (Addr *) VG_(get_initial_client_SP)();
+   *argc = *ptr++;
+   *argv = (Addr) ptr;
+}
+
+static void fill_scheduling_class(HChar *buf, SizeT buf_size)
+{
+   vg_assert(buf != NULL);
+   vg_assert(buf_size >= 1);
+
+   /* Valgrind currently schedules one thread at time which
+      resembles the default timeshare class. */
+   VG_(strncpy)(buf, "TS", buf_size);
+}
+
+static void fill_regset(vki_prgregset_t *regs, const ThreadState *tst)
+{
+   const ThreadArchState *arch = (const ThreadArchState *) &tst->arch;
+
+#if defined(VGP_x86_solaris)
+   (*regs)[VKI_EIP]        = arch->vex.guest_EIP;
+   (*regs)[VKI_EAX]        = arch->vex.guest_EAX;
+   (*regs)[VKI_EBX]        = arch->vex.guest_EBX;
+   (*regs)[VKI_ECX]        = arch->vex.guest_ECX;
+   (*regs)[VKI_EDX]        = arch->vex.guest_EDX;
+   (*regs)[VKI_ESI]        = arch->vex.guest_ESI;
+   (*regs)[VKI_EDI]        = arch->vex.guest_EDI;
+   (*regs)[VKI_EBP]        = arch->vex.guest_EBP;
+   (*regs)[VKI_UESP]       = arch->vex.guest_ESP;
+   (*regs)[VKI_SS]         = arch->vex.guest_SS;
+   (*regs)[VKI_CS]         = arch->vex.guest_CS;
+   (*regs)[VKI_DS]         = arch->vex.guest_DS;
+   (*regs)[VKI_ES]         = arch->vex.guest_ES;
+   (*regs)[VKI_FS]         = arch->vex.guest_FS;
+   (*regs)[VKI_GS]         = arch->vex.guest_GS;
+   (*regs)[VKI_EFL]        = LibVEX_GuestX86_get_eflags(&arch->vex);
+#elif defined(VGP_amd64_solaris)
+   (*regs)[VKI_REG_RIP]    = arch->vex.guest_RIP;
+   (*regs)[VKI_REG_RAX]    = arch->vex.guest_RAX;
+   (*regs)[VKI_REG_RBX]    = arch->vex.guest_RBX;
+   (*regs)[VKI_REG_RCX]    = arch->vex.guest_RCX;
+   (*regs)[VKI_REG_RDX]    = arch->vex.guest_RDX;
+   (*regs)[VKI_REG_RBP]    = arch->vex.guest_RBP;
+   (*regs)[VKI_REG_RSI]    = arch->vex.guest_RSI;
+   (*regs)[VKI_REG_RDI]    = arch->vex.guest_RDI;
+   (*regs)[VKI_REG_R8]     = arch->vex.guest_R8;
+   (*regs)[VKI_REG_R9]     = arch->vex.guest_R9;
+   (*regs)[VKI_REG_R10]    = arch->vex.guest_R10;
+   (*regs)[VKI_REG_R11]    = arch->vex.guest_R11;
+   (*regs)[VKI_REG_R12]    = arch->vex.guest_R12;
+   (*regs)[VKI_REG_R13]    = arch->vex.guest_R13;
+   (*regs)[VKI_REG_R14]    = arch->vex.guest_R14;
+   (*regs)[VKI_REG_R15]    = arch->vex.guest_R15;
+   (*regs)[VKI_REG_RSP]    = arch->vex.guest_RSP;
+   (*regs)[VKI_REG_CS]     = VKI_UCS_SEL;
+   (*regs)[VKI_REG_DS]     = 0;
+   (*regs)[VKI_REG_ES]     = 0;
+   (*regs)[VKI_REG_FS]     = 0;
+   (*regs)[VKI_REG_GS]     = 0;
+   (*regs)[VKI_REG_SS]     = VKI_UDS_SEL;
+   (*regs)[VKI_REG_FSBASE] = arch->vex.guest_FS_CONST;
+   (*regs)[VKI_REG_GSBASE] = 0;
+   (*regs)[VKI_REG_RFL]    = LibVEX_GuestAMD64_get_rflags(&arch->vex);
+#else
+#  error "Unknown platform"
+#endif
+}
+
+static void fill_fpregset(vki_fpregset_t *fpu, const ThreadState *tst)
+{
+   const ThreadArchState *arch = (const ThreadArchState *) &tst->arch;
+
+#if defined(VGP_x86_solaris)
+   VG_(memset)(fpu, 0, sizeof(*fpu));
+
+   struct vki_fpchip_state *fs = &fpu->fp_reg_set.fpchip_state;
+   vg_assert(sizeof(fs->state) == 108);
+
+   LibVEX_GuestX86_get_x87(CONST_CAST(VexGuestX86State *, &arch->vex),
+                           (UChar *) &fs->state);
+
+   /* SSE */
+   UInt mxcsr = LibVEX_GuestX86_get_mxcsr(CONST_CAST(VexGuestX86State *,
+                                                     &arch->vex));
+   fs->mxcsr = mxcsr;
+
+   /* XMM registers */
+   #define COPY_OUT_XMM(dest, src) \
+      do {                      \
+         dest._l[0] = src[0];   \
+         dest._l[1] = src[1];   \
+         dest._l[2] = src[2];   \
+         dest._l[3] = src[3];   \
+      } while (0);
+   COPY_OUT_XMM(fs->xmm[0], arch->vex.guest_XMM0);
+   COPY_OUT_XMM(fs->xmm[1], arch->vex.guest_XMM1);
+   COPY_OUT_XMM(fs->xmm[2], arch->vex.guest_XMM2);
+   COPY_OUT_XMM(fs->xmm[3], arch->vex.guest_XMM3);
+   COPY_OUT_XMM(fs->xmm[4], arch->vex.guest_XMM4);
+   COPY_OUT_XMM(fs->xmm[5], arch->vex.guest_XMM5);
+   COPY_OUT_XMM(fs->xmm[6], arch->vex.guest_XMM6);
+   COPY_OUT_XMM(fs->xmm[7], arch->vex.guest_XMM7);
+   #undef COPY_OUT_XMM
+#elif defined(VGP_amd64_solaris)
+   VG_(memset)(fpu, 0, sizeof(*fpu));
+   struct vki_fpchip_state *fs = &fpu->fp_reg_set.fpchip_state;
+
+   /* LibVEX_GuestAMD64_fxsave() requires at least 416 bytes. */
+   vg_assert(sizeof(*fs) >= 416);
+   LibVEX_GuestAMD64_fxsave(CONST_CAST(VexGuestAMD64State *, &arch->vex),
+                            (Addr) fs);
+#else
+#  error Unknown platform
+#endif
+}
+
+/*====================================================================*/
+/*=== Header fillers                                               ===*/
+/*====================================================================*/
+
+static void fill_ehdr(VKI_ESZ(Ehdr) *ehdr, Int num_phdrs)
+{
+   VG_(memset)(ehdr, 0, sizeof(*ehdr));
+
+   VG_(memcpy)(ehdr->e_ident, VKI_ELFMAG, VKI_SELFMAG);
+   ehdr->e_ident[VKI_EI_CLASS]   = VG_ELF_CLASS;
+   ehdr->e_ident[VKI_EI_DATA]    = VG_ELF_DATA2XXX;
+   ehdr->e_ident[VKI_EI_VERSION] = VKI_EV_CURRENT;
+
+   ehdr->e_type = VKI_ET_CORE;
+   ehdr->e_machine = VG_ELF_MACHINE;
+   ehdr->e_version = VKI_EV_CURRENT;
+   ehdr->e_entry = 0;
+   ehdr->e_flags = 0;
+   ehdr->e_ehsize = sizeof(VKI_ESZ(Ehdr));
+
+   ehdr->e_phoff = sizeof(VKI_ESZ(Ehdr));
+   ehdr->e_phentsize = sizeof(VKI_ESZ(Phdr));
+
+   /* If the count of program headers can't fit in the mere 16 bits
+    * shortsightedly allotted to them in the ELF header, we use the
+    * extended formats and put the real values in the section header
+    * at index 0.
+    */
+   if (num_phdrs >= VKI_PN_XNUM) {
+      ehdr->e_phnum = VKI_PN_XNUM;
+      ehdr->e_shnum = 1;
+      ehdr->e_shoff = ehdr->e_phoff + ehdr->e_phentsize * num_phdrs;
+      ehdr->e_shentsize = sizeof(VKI_ESZ(Shdr));
+   } else {
+      ehdr->e_phnum = num_phdrs;
+      ehdr->e_shnum = 0;
+      ehdr->e_shoff = 0;
+      ehdr->e_shentsize = 0;
+   }
+
+   ehdr->e_shstrndx = 0;
+}
+
+static void fill_phdr(VKI_ESZ(Phdr) *phdr, const NSegment *seg, UInt off,
+                      Bool really_write)
+{
+   SizeT len = seg->end - seg->start + 1;
+
+   really_write = really_write && should_dump(seg);
+
+   VG_(memset)(phdr, 0, sizeof(*phdr));
+
+   phdr->p_type = PT_LOAD;
+   phdr->p_offset = off;
+   phdr->p_vaddr = seg->start;
+   phdr->p_paddr = 0;
+   phdr->p_filesz = really_write ? len : 0;
+   phdr->p_memsz = len;
+   phdr->p_flags = 0;
+
+   if (seg->hasR)
+      phdr->p_flags |= PF_R;
+   if (seg->hasW)
+      phdr->p_flags |= PF_W;
+   if (seg->hasX)
+      phdr->p_flags |= PF_X;
+
+   phdr->p_align = VKI_PAGE_SIZE;
+}
+
+/* Fills the section header at index zero when num_phdrs >= PN_XNUM. */
+static void fill_zero_shdr(VKI_ESZ(Shdr) *shdr, UInt num_phdrs)
+{
+   vg_assert(num_phdrs >= VKI_PN_XNUM);
+
+   VG_(memset)(shdr, 0, sizeof(*shdr));
+
+   shdr->sh_name = 0; // STR_NONE
+   shdr->sh_info = num_phdrs;
+}
+
+static void fill_prpsinfo(vki_elf_prpsinfo_t *prpsinfo,
+                          const ThreadState *tst,
+                          const vki_siginfo_t *si)
+{
+   VG_(memset)(prpsinfo, 0, sizeof(*prpsinfo));
+
+   fill_thread_state(tst, &prpsinfo->pr_state, &prpsinfo->pr_sname);
+   prpsinfo->pr_uid = get_uid();
+   prpsinfo->pr_gid = get_gid();
+   prpsinfo->pr_pid = VG_(getpid)();
+   prpsinfo->pr_ppid = VG_(getppid)();
+   prpsinfo->pr_pgrp = VG_(getpgrp)();
+   prpsinfo->pr_sid = VG_(getpgrp)();
+   fill_scheduling_class(prpsinfo->pr_clname, sizeof(prpsinfo->pr_clname));
+   VG_(client_fname)(prpsinfo->pr_fname, sizeof(prpsinfo->pr_fname), True);
+   VG_(client_cmd_and_args)(prpsinfo->pr_psargs,
+                            sizeof(prpsinfo->pr_psargs));
+   fill_argv(&prpsinfo->pr_argc, (Addr *) &prpsinfo->pr_argv);
+   prpsinfo->pr_envp = (char **) VG_(client_envp);
+   prpsinfo->pr_wstat = get_wstat(si);
+   prpsinfo->pr_euid = VG_(geteuid)();
+   prpsinfo->pr_egid = VG_(getegid)();
+   prpsinfo->pr_dmodel = get_dmodel();
+}
+
+static void fill_prstatus(vki_elf_prstatus_t *prs,
+                          const ThreadState *tst,
+			  const vki_siginfo_t *si)
+{
+   VG_(memset)(prs, 0, sizeof(*prs));
+
+   prs->pr_flags = VKI_ELF_OLD_PR_PCINVAL;
+   fill_siginfo(si, &prs->pr_info, &prs->pr_cursig);
+   prs->pr_nlwp = VG_(count_living_threads)();
+   prs->pr_sighold = tst->sig_mask;
+   prs->pr_pid = VG_(getpid)();
+   prs->pr_ppid = VG_(getppid)();
+   prs->pr_pgrp = VG_(getpgrp)();
+   prs->pr_sid = VG_(getpgrp)();
+   fill_scheduling_class(prs->pr_clname, sizeof(prs->pr_clname));
+   prs->pr_who = tst->os_state.lwpid; 
+   prs->pr_brkbase = (vki_caddr_t) VG_(brk_base);
+   prs->pr_brksize = VG_(brk_limit) - VG_(brk_base);
+   prs->pr_stkbase = (vki_caddr_t) compute_stkbase(tst);
+   prs->pr_stksize = tst->client_stack_szB;
+   fill_regset(&prs->pr_reg, tst);
+}
+
+static void fill_psinfo(vki_psinfo_t *psinfo, const ThreadState *tst,
+                        const vki_siginfo_t *si)
+{
+   VG_(memset)(psinfo, 0, sizeof(*psinfo));
+
+   psinfo->pr_nlwp = VG_(count_living_threads)();
+   psinfo->pr_uid = get_uid();
+   psinfo->pr_gid = get_gid();
+   psinfo->pr_pid = VG_(getpid)();
+   psinfo->pr_ppid = VG_(getppid)();
+   psinfo->pr_pgid = VG_(getpgrp)();
+   psinfo->pr_sid = VG_(getpgrp)();
+   psinfo->pr_euid = VG_(geteuid)();
+   psinfo->pr_egid = VG_(getegid)();
+   VG_(client_fname)(psinfo->pr_fname, sizeof(psinfo->pr_fname), True);
+   psinfo->pr_wstat = get_wstat(si);
+   VG_(client_cmd_and_args)(psinfo->pr_psargs,
+                            sizeof(psinfo->pr_psargs));
+   fill_argv(&psinfo->pr_argc, (Addr *) &psinfo->pr_argv);
+   psinfo->pr_envp = (uintptr_t) VG_(client_envp);
+   psinfo->pr_dmodel = get_dmodel();
+   psinfo->pr_zoneid = get_zoneid();
+
+   psinfo->pr_lwp.pr_lwpid = tst->os_state.lwpid;
+   fill_thread_state(tst, &psinfo->pr_lwp.pr_state,
+                     &psinfo->pr_lwp.pr_sname);
+   fill_scheduling_class(psinfo->pr_lwp.pr_clname,
+                         sizeof(psinfo->pr_lwp.pr_clname));
+}
+
+static void fill_pstatus(vki_pstatus_t *pstatus,
+                         const ThreadState *tst,
+                         const vki_siginfo_t *si)
+{
+   VG_(memset)(pstatus, 0, sizeof(*pstatus));
+
+   pstatus->pr_flags = VKI_PR_PCINVAL;
+   pstatus->pr_nlwp = VG_(count_living_threads)();
+   pstatus->pr_pid = VG_(getpid)();
+   pstatus->pr_ppid = VG_(getppid)();
+   pstatus->pr_pgid = VG_(getpgrp)();
+   pstatus->pr_sid = VG_(getpgrp)();
+   pstatus->pr_brkbase = (uintptr_t) VG_(brk_base);
+   pstatus->pr_brksize = VG_(brk_limit) - VG_(brk_base);
+   pstatus->pr_stkbase = (uintptr_t) compute_stkbase(tst);
+   pstatus->pr_stksize = tst->client_stack_szB;
+   pstatus->pr_dmodel = get_dmodel();
+   pstatus->pr_zoneid = get_zoneid();
+
+   pstatus->pr_lwp.pr_flags = VKI_PR_PCINVAL;
+   pstatus->pr_lwp.pr_lwpid = tst->os_state.lwpid;
+   fill_siginfo(si, &pstatus->pr_lwp.pr_info,
+                &pstatus->pr_lwp.pr_cursig);
+   pstatus->pr_lwp.pr_lwphold = tst->sig_mask;
+   fill_scheduling_class(pstatus->pr_lwp.pr_clname,
+                         sizeof(pstatus->pr_lwp.pr_clname));
+   fill_regset(&pstatus->pr_lwp.pr_reg, tst);
+   fill_fpregset(&pstatus->pr_lwp.pr_fpreg, tst);
+}
+
+#if defined(SOLARIS_PRXREGSET_T)
+static void fill_xregs(vki_prxregset_t *xregs, const ThreadState *tst)
+{
+   const ThreadArchState *arch = (const ThreadArchState *) &tst->arch;
+
+#if defined(VGP_x86_solaris)
+   VG_(memset)(xregs, 0, sizeof(*xregs));
+   xregs->pr_xsize = sizeof(xregs->pr_un.pr_xsave);
+
+   /* SSE */
+   UInt mxcsr = LibVEX_GuestX86_get_mxcsr(CONST_CAST(VexGuestX86State *,
+                                                     &arch->vex));
+   xregs->pr_un.pr_xsave.pr_mxcsr = mxcsr;
+
+   /* XMM registers */
+   #define COPY_OUT_XMM(dest, src) \
+      do {                      \
+         dest._l[0] = src[0];   \
+         dest._l[1] = src[1];   \
+         dest._l[2] = src[2];   \
+         dest._l[3] = src[3];   \
+      } while (0);
+   COPY_OUT_XMM(xregs->pr_un.pr_xsave.pr_xmm[0], arch->vex.guest_XMM0);
+   COPY_OUT_XMM(xregs->pr_un.pr_xsave.pr_xmm[1], arch->vex.guest_XMM1);
+   COPY_OUT_XMM(xregs->pr_un.pr_xsave.pr_xmm[2], arch->vex.guest_XMM2);
+   COPY_OUT_XMM(xregs->pr_un.pr_xsave.pr_xmm[3], arch->vex.guest_XMM3);
+   COPY_OUT_XMM(xregs->pr_un.pr_xsave.pr_xmm[4], arch->vex.guest_XMM4);
+   COPY_OUT_XMM(xregs->pr_un.pr_xsave.pr_xmm[5], arch->vex.guest_XMM5);
+   COPY_OUT_XMM(xregs->pr_un.pr_xsave.pr_xmm[6], arch->vex.guest_XMM6);
+   COPY_OUT_XMM(xregs->pr_un.pr_xsave.pr_xmm[7], arch->vex.guest_XMM7);
+   #undef COPY_OUT_XMM
+
+#elif defined(VGP_amd64_solaris)
+   VG_(memset)(xregs, 0, sizeof(*xregs));
+   xregs->pr_xsize = sizeof(xregs->pr_un.pr_xsave);
+
+   /* LibVEX_GuestAMD64_fxsave() requires at least 416 bytes. */
+   vg_assert(sizeof(xregs->pr_un.pr_xsave) >= 416);
+   LibVEX_GuestAMD64_fxsave(CONST_CAST(VexGuestAMD64State *, &arch->vex),
+                            (Addr) &xregs->pr_un.pr_xsave);
+#else
+#  error "Unknown platform"
+#endif
+}
+#endif /* SOLARIS_PRXREGSET_T */
+
+static void fill_utsname(struct vki_utsname *uts)
+{
+   VG_(memset)(uts, 0, sizeof(*uts));
+
+   VG_(do_syscall3)(SYS_systeminfo, VKI_SI_SYSNAME,
+                    (UWord) &uts->sysname, sizeof(uts->sysname));
+   VG_(do_syscall3)(SYS_systeminfo, VKI_SI_HOSTNAME,
+                    (UWord) &uts->nodename, sizeof(uts->nodename));
+   VG_(do_syscall3)(SYS_systeminfo, VKI_SI_RELEASE,
+                    (UWord) &uts->release, sizeof(uts->release));
+   VG_(do_syscall3)(SYS_systeminfo, VKI_SI_VERSION,
+                    (UWord) &uts->version, sizeof(uts->version));
+   VG_(do_syscall3)(SYS_systeminfo, VKI_SI_MACHINE,
+                    (UWord) &uts->machine, sizeof(uts->machine));
+}
+
+static vki_prcred_t *create_prcred(SizeT *size)
+{
+   UInt group_list[VKI_NGROUPS_MAX];
+   Int ngroups = VG_(getgroups)(VKI_NGROUPS_MAX, group_list);
+   if (ngroups == -1)
+      ngroups = 0;
+
+   *size = sizeof(vki_prcred_t) + (ngroups - 1) * sizeof(gid_t);
+   vki_prcred_t *prcred = VG_(malloc)("coredump-elf.cp.1", *size);
+   VG_(memset)(prcred, 0, *size);
+
+   prcred->pr_euid = VG_(geteuid)();
+   prcred->pr_ruid = get_uid();
+   prcred->pr_suid = prcred->pr_euid;
+   prcred->pr_egid = VG_(getegid)();
+   prcred->pr_rgid = get_gid();
+   prcred->pr_sgid = prcred->pr_egid;
+   prcred->pr_ngroups = ngroups;
+
+   UInt i;
+   for (i = 0; i < ngroups; i++)
+      prcred->pr_groups[i] = group_list[i];
+
+   return prcred;
+}
+
+static void fill_core_content(vki_core_content_t *content)
+{
+   *content = VKI_CC_CONTENT_STACK | VKI_CC_CONTENT_HEAP
+              | VKI_CC_CONTENT_SHANON | VKI_CC_CONTENT_TEXT
+              | VKI_CC_CONTENT_DATA | VKI_CC_CONTENT_RODATA
+              | VKI_CC_CONTENT_ANON | VKI_CC_CONTENT_SHM
+              | VKI_CC_CONTENT_ISM | VKI_CC_CONTENT_DISM;
+}
+
+static vki_prpriv_t *create_prpriv(SizeT *size)
+{
+   Int fd = VG_(fd_open)("/proc/self/priv", O_RDONLY, 0);
+   if (fd < 0)
+      return NULL;
+
+   struct vg_stat stats;
+   if (VG_(fstat)(fd, &stats) != 0) {
+      VG_(close)(fd);
+      return NULL;
+   }
+
+   vki_prpriv_t *prpriv = VG_(malloc)("coredump-elf.cp.1", stats.size);
+
+   if (VG_(read)(fd, prpriv, stats.size) != stats.size) {
+      VG_(free)(prpriv);
+      VG_(close)(fd);
+      return NULL;
+   }
+
+   VG_(close)(fd);
+   *size = stats.size;
+   return prpriv;
+}
+
+static vki_priv_impl_info_t *create_priv_info(SizeT *size)
+{
+   /* Size of the returned priv_impl_info_t is apriori unkown. */
+   vki_priv_impl_info_t first_cut[100];
+   SysRes sres = VG_(do_syscall5)(SYS_privsys, VKI_PRIVSYS_GETIMPLINFO,
+                                  0, 0, (UWord) first_cut,
+                                  sizeof(first_cut));
+   if (sr_isError(sres))
+       return NULL;
+
+   SizeT real_size = first_cut[0].priv_headersize
+                     + first_cut[0].priv_globalinfosize;
+   vki_priv_impl_info_t *priv_info = VG_(malloc)("coredump-elf.cpi.1",
+                                                 real_size);
+
+   if (real_size <= sizeof(first_cut)) {
+      /* if the first_cut was large enough */
+      VG_(memcpy)(priv_info, first_cut, real_size);
+   } else {
+      /* otherwise repeat the syscall with buffer large enough */
+      sres = VG_(do_syscall5)(SYS_privsys, VKI_PRIVSYS_GETIMPLINFO,
+                              0, 0, (UWord) priv_info, real_size);
+      if (sr_isError(sres)) {
+          VG_(free)(priv_info);
+          return NULL;
+      }
+   }
+
+   *size = real_size;
+   return priv_info;
+}
+
+static void fill_lwpsinfo(vki_lwpsinfo_t *lwp,
+                          const ThreadState *tst)
+{
+   VG_(memset)(lwp, 0, sizeof(*lwp));
+
+   lwp->pr_lwpid = tst->os_state.lwpid;
+   fill_thread_state(tst, &lwp->pr_state, &lwp->pr_sname);
+   fill_scheduling_class(lwp->pr_clname, sizeof(lwp->pr_clname));
+}
+
+static void fill_lwpstatus(vki_lwpstatus_t *lwp,
+                           const ThreadState *tst,
+			   const vki_siginfo_t *si)
+{
+   VG_(memset)(lwp, 0, sizeof(*lwp));
+
+   lwp->pr_flags = VKI_PR_PCINVAL;
+   lwp->pr_lwpid = tst->os_state.lwpid;
+   fill_siginfo(si, &lwp->pr_info, &lwp->pr_cursig);
+   fill_scheduling_class(lwp->pr_clname, sizeof(lwp->pr_clname));
+   fill_regset(&lwp->pr_reg, tst);
+   fill_fpregset(&lwp->pr_fpreg, tst);
+}
+
+static void fill_old_note_for_thread(note_t **notes,
+                                     const ThreadState *tst,
+                                     const vki_siginfo_t *si)
+{
+   vki_elf_prstatus_t prstatus;
+   fill_prstatus(&prstatus, tst, si);
+   add_note(notes, VKI_NT_PRSTATUS, &prstatus, sizeof(vki_elf_prstatus_t));
+
+   vki_fpregset_t fpu;
+   fill_fpregset(&fpu, tst);
+   add_note(notes, VKI_NT_PRFPREG, &fpu, sizeof(vki_fpregset_t));
+
+#if defined(SOLARIS_PRXREGSET_T)
+   if (should_dump_xregs(tst)) {
+      vki_prxregset_t xregs;
+      fill_xregs(&xregs, tst);
+      add_note(notes, VKI_NT_PRXREG, &xregs, sizeof(vki_prxregset_t));
+   }
+#endif /* SOLARIS_PRXREGSET_T */
+}
+
+static void fill_new_note_for_thread(note_t **notes,
+                                     const ThreadState *tst,
+                                     const vki_siginfo_t *si)
+{
+   vki_lwpsinfo_t lwpsinfo;
+   fill_lwpsinfo(&lwpsinfo, tst);
+   add_note(notes, VKI_NT_LWPSINFO, &lwpsinfo, sizeof(vki_lwpsinfo_t));
+
+   vki_lwpstatus_t lwpstatus;
+   fill_lwpstatus(&lwpstatus, tst, si);
+   add_note(notes, VKI_NT_LWPSTATUS, &lwpstatus, sizeof(vki_lwpstatus_t));
+
+#if defined(SOLARIS_PRXREGSET_T)
+   if (should_dump_xregs(tst)) {
+      vki_prxregset_t xregs;
+      fill_xregs(&xregs, tst);
+      add_note(notes, VKI_NT_PRXREG, &xregs, sizeof(vki_prxregset_t));
+   }
+#endif /* SOLARIS_PRXREGSET_T */
+}
+
+/*====================================================================*/
+/*=== Note utility functions                                       ===*/
+/*====================================================================*/
+
+static void add_note(note_t **list, UInt type, const void *data,
+                     UInt datasz)
+{
+   UInt note_size = sizeof(note_t) + VG_ROUNDUP(datasz, 4);
+
+   note_t *n = VG_(malloc)("coredump-elf.an.1", note_size);
+
+   VG_(memset)(n, 0, note_size);
+   n->nhdr.n_type = type;
+   n->nhdr.n_namesz = 5;
+   n->nhdr.n_descsz = VG_ROUNDUP(datasz, 4);
+   VG_(memcpy)(n->name, "CORE", 4);
+   VG_(memcpy)(n->data, data, datasz);
+
+   if (*list == NULL) {
+      *list = n;
+      return;
+   }
+
+   note_t *tail = *list;
+   while (tail->next != NULL)
+      tail = tail->next;
+   tail->next = n;
+}
+
+static UInt note_size(const note_t *note)
+{
+   return sizeof(note_t) - sizeof(note_t *) + note->nhdr.n_descsz;
+}
+
+static UInt notes_size(const note_t *list)
+{
+   UInt size = 0;
+   const note_t *note;
+
+   for (note = list; note != NULL; note = note->next)
+      size += note_size(note);
+
+   return size;
+}
+
+static void fill_notes_phdr(VKI_ESZ(Phdr) *phdr, UInt offset,
+                            UInt size_of_notes)
+{
+   phdr->p_type = PT_NOTE;
+   phdr->p_offset = offset;
+   phdr->p_vaddr = 0;
+   phdr->p_paddr = 0;
+   phdr->p_filesz = size_of_notes;
+   phdr->p_memsz = 0;
+   phdr->p_flags = PF_R;
+   phdr->p_align = 0;
+}
+
+static void write_notes(Int fd, const HChar *filename,
+                        const note_t *list)
+{
+   const note_t *note;
+
+   for (note = list; note != NULL; note = note->next)
+      write_part(fd, filename, CONST_CAST(void *, &note->nhdr),
+                 note_size(note), "notes");
+}
+
+static void free_notes(note_t *list)
+{
+   while (list != NULL) {
+      note_t *next = list->next;
+      VG_(free)(list);
+      list = next;
+   }
+}
+
+/*====================================================================*/
+/*=== Main coredump function                                       ===*/
+/*====================================================================*/
+
+void VG_(make_coredump)(ThreadId tid, const vki_siginfo_t *si,
+                        ULong max_size)
+{
+   const HChar *basename = "vgcore";
+   const HChar *coreext = "";
+   Int core_fd;
+
+   if (VG_(clo_log_fname_expanded) != NULL) {
+      coreext = ".core";
+      basename = VG_(expand_file_name)("--log-file",
+                                       VG_(clo_log_fname_expanded));
+   }
+
+   vg_assert(coreext != NULL);
+   vg_assert(basename != NULL);
+
+   UInt filename_size = VG_(strlen)(coreext) + VG_(strlen)(basename)
+                        + 100; /* for the two %d's */
+   HChar *filename = VG_(malloc)("coredump-elf.mc.1", filename_size);
+
+   /* Try to come with a non-existent coredump filename. */
+   UInt seq = 0;
+   for (;;) {
+      Int oflags = VKI_O_CREAT|VKI_O_WRONLY|VKI_O_EXCL|VKI_O_TRUNC;
+
+      if (seq == 0)
+	 VG_(snprintf)(filename, filename_size, "%s%s.%d",
+		      basename, coreext, VG_(getpid)());
+      else
+	 VG_(snprintf)(filename, filename_size, "%s%s.%d.%d",
+		      basename, coreext, VG_(getpid)(), seq);
+      seq++;
+
+#ifdef VKI_O_LARGEFILE
+      oflags |= VKI_O_LARGEFILE;
+#endif
+
+      SysRes sres = VG_(open)(filename, oflags,
+                              VKI_S_IRUSR|VKI_S_IWUSR);
+      if (!sr_isError(sres)) {
+         core_fd = sr_Res(sres);
+	 break;
+      }
+
+      if (sr_isError(sres) && sr_Err(sres) != VKI_EEXIST) {
+         VG_(umsg)("Cannot create coredump file %s (%lu)\n",
+                   filename, sr_Err(sres));
+         VG_(free)(filename);
+	 return;
+      }
+   }
+
+   /* Get the client segments. Free seg_starts after use. */
+   Int n_seg_starts;
+   Addr *seg_starts = VG_(get_segment_starts)(SkFileC | SkAnonC | SkShmC,
+                                              &n_seg_starts);
+
+   /* Count how many memory segments to dump. */
+   Int i;
+   UInt num_phdrs = 2;		/* two CORE note sections */
+   for (i = 0; i < n_seg_starts; i++) {
+      if (!may_dump(VG_(am_find_nsegment(seg_starts[i]))))
+	 continue;
+
+      num_phdrs++;
+   }
+
+   VKI_ESZ(Ehdr) ehdr;
+   fill_ehdr(&ehdr, num_phdrs);
+
+   VKI_ESZ(Shdr) shdr;
+   if (ehdr.e_shnum > 0)
+      fill_zero_shdr(&shdr, num_phdrs);
+   UInt phdrs_size = num_phdrs * ehdr.e_phentsize;
+
+   /* Construct the old-style notes. */
+   note_t *old_notes = NULL;
+
+   vki_elf_prpsinfo_t prpsinfo;
+   fill_prpsinfo(&prpsinfo, &VG_(threads)[tid], si);
+   add_note(&old_notes, VKI_NT_PRPSINFO, &prpsinfo,
+            sizeof(vki_elf_prpsinfo_t));
+
+   HChar platform[256 + 1];
+   fill_platform(platform, sizeof(platform));
+   add_note(&old_notes, VKI_NT_PLATFORM, platform,
+            VG_(strlen)(platform) + 1);
+
+   add_note(&old_notes, VKI_NT_AUXV, VG_(client_auxv),
+            count_auxv() * sizeof(auxv_t));
+
+   /* Add detail about the faulting thread as the first note.
+      This is how gdb determines which thread faulted. Note that
+      mdb does not need such aid. */
+   fill_old_note_for_thread(&old_notes, &VG_(threads)[tid], si);
+
+   /* Now add details for all threads except the one that faulted. */
+   ThreadId t_idx;
+   for (t_idx = 1; t_idx < VG_N_THREADS; t_idx++)
+      if ((VG_(threads)[t_idx].status != VgTs_Empty) &&
+            (VG_(threads)[t_idx].status != VgTs_Zombie)) {
+         if (t_idx == tid)
+            continue;
+
+         fill_old_note_for_thread(&old_notes, &VG_(threads)[t_idx], si);
+   }
+
+   /* Construct the new-style notes. */
+   note_t *new_notes = NULL;
+   vki_psinfo_t psinfo;
+   fill_psinfo(&psinfo, &VG_(threads)[tid], si);
+   add_note(&new_notes, VKI_NT_PSINFO, &psinfo, sizeof(vki_psinfo_t));
+
+   vki_pstatus_t pstatus;
+   fill_pstatus(&pstatus, &VG_(threads)[tid], si);
+   add_note(&new_notes, VKI_NT_PSTATUS, &pstatus, sizeof(vki_pstatus_t));
+
+   add_note(&new_notes, VKI_NT_PLATFORM, platform,
+            VG_(strlen)(platform) + 1);
+
+   add_note(&new_notes, VKI_NT_AUXV, VG_(client_auxv),
+            count_auxv() * sizeof(auxv_t));
+
+   struct vki_utsname uts;
+   fill_utsname(&uts);
+   add_note(&new_notes, VKI_NT_UTSNAME, &uts,
+            sizeof(struct vki_utsname));
+
+   SizeT prcred_size;
+   vki_prcred_t *prcred = create_prcred(&prcred_size);
+   if (prcred != NULL) {
+      add_note(&new_notes, VKI_NT_PRCRED, prcred, prcred_size);
+      VG_(free)(prcred);
+   }
+
+   vki_core_content_t core_content;
+   fill_core_content(&core_content);
+   add_note(&new_notes, VKI_NT_CONTENT, &core_content,
+            sizeof(vki_core_content_t));
+
+   SizeT priv_size;
+   vki_prpriv_t *prpriv = create_prpriv(&priv_size);
+   if (prpriv != NULL) {
+      add_note(&new_notes, VKI_NT_PRPRIV, prpriv, priv_size);
+      VG_(free)(prpriv);
+   }
+
+   vki_priv_impl_info_t *priv_info = create_priv_info(&priv_size);
+   if (priv_info != NULL) {
+      add_note(&new_notes, VKI_NT_PRPRIVINFO, priv_info, priv_size);
+      VG_(free)(priv_info);
+   }
+
+   HChar zonename[VKI_ZONENAME_MAX + 1];
+   fill_zonename(zonename, sizeof(zonename));
+   add_note(&new_notes, VKI_NT_ZONENAME, zonename,
+            VG_(strlen)(zonename) + 1);
+
+   /* Add detail about the faulting thread as the first note.
+      This is how gdb determines which thread faulted. Note that
+      mdb does not need such aid. */
+   fill_new_note_for_thread(&new_notes, &VG_(threads)[tid], si);
+
+   /* Now add details for all threads except the one that faulted. */
+   for (t_idx = 1; t_idx < VG_N_THREADS; t_idx++) {
+      if ((VG_(threads)[t_idx].status != VgTs_Empty) &&
+            (VG_(threads)[t_idx].status != VgTs_Zombie)) {
+         if (t_idx == tid)
+            continue;
+
+         fill_new_note_for_thread(&new_notes, &VG_(threads)[t_idx], si);
+      }
+   }
+
+   VKI_ESZ(Phdr) *phdrs = VG_(malloc)("coredump-elf.mc.2", phdrs_size);
+
+   UInt size_of_notes = notes_size(old_notes);
+   UInt offset = ehdr.e_ehsize + phdrs_size +
+                 (ehdr.e_shnum * ehdr.e_shentsize);
+
+   /* fill program header for old notes */
+   fill_notes_phdr(&phdrs[0], offset, size_of_notes);
+   offset += size_of_notes;
+
+   size_of_notes = notes_size(new_notes);
+   /* fill program header for new notes */
+   fill_notes_phdr(&phdrs[1], offset, size_of_notes);
+   offset += size_of_notes;
+
+   /* fill program headers for segments */
+   UInt idx;
+   for (i = 0, idx = 2; i < n_seg_starts; i++) {
+      NSegment const *seg = VG_(am_find_nsegment(seg_starts[i]));
+
+      if (!may_dump(seg))
+	 continue;
+
+      fill_phdr(&phdrs[idx], seg, offset,
+                (seg->end - seg->start + 1 + offset) < max_size);
+      
+      offset += phdrs[idx].p_filesz;
+
+      idx++;
+   }
+
+   /* write everything out */
+   write_part(core_fd, filename, &ehdr, sizeof(ehdr),
+             "elf headers");
+   write_part(core_fd, filename, phdrs, phdrs_size,
+              "program headers");
+   if (ehdr.e_shnum > 0)
+      write_part(core_fd, filename, &shdr, sizeof(shdr),
+                 "section headers");
+   write_notes(core_fd, filename, old_notes);
+   write_notes(core_fd, filename, new_notes);
+
+   VG_(lseek)(core_fd, phdrs[2].p_offset, VKI_SEEK_SET);
+
+   for (i = 0, idx = 2; i < n_seg_starts; i++) {
+      NSegment const *seg = VG_(am_find_nsegment(seg_starts[i]));
+
+      if (!should_dump(seg))
+	 continue;
+
+      if (phdrs[idx].p_filesz > 0) {
+         Off64T off = VG_(lseek)(core_fd, phdrs[idx].p_offset,
+                                 VKI_SEEK_SET);
+         vg_assert(off == phdrs[idx].p_offset);
+         vg_assert(seg->end - seg->start + 1 >= phdrs[idx].p_filesz);
+
+         write_part(core_fd, filename, (void *) seg->start,
+                    phdrs[idx].p_filesz, "program segment");
+      }
+      idx++;
+   }
+
+   VG_(close)(core_fd);
+   VG_(free)(filename);
+   VG_(free)(phdrs);
+   free_notes(old_notes);
+   free_notes(new_notes);
+   VG_(free)(seg_starts);
+}
+
+#endif
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_cpuid.S b/coregrind/m_cpuid.S
index 1473cad..9ba75ec 100644
--- a/coregrind/m_cpuid.S
+++ b/coregrind/m_cpuid.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
 
   This program is free software; you can redistribute it and/or
@@ -151,10 +151,8 @@
         ret
 #endif
 
-#if defined(VGP_x86_linux) || defined(VGP_amd64_linux)
 /* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-#endif
+MARK_STACK_NO_EXEC
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_debugger.c b/coregrind/m_debugger.c
deleted file mode 100644
index 4582db0..0000000
--- a/coregrind/m_debugger.c
+++ /dev/null
@@ -1,559 +0,0 @@
-
-/*--------------------------------------------------------------------*/
-/*--- Attaching a debugger.                           m_debugger.c ---*/
-/*--------------------------------------------------------------------*/
-
-/*
-   This file is part of Valgrind, a dynamic binary instrumentation
-   framework.
-
-   Copyright (C) 2000-2013 Julian Seward 
-      jseward@acm.org
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307, USA.
-
-   The GNU General Public License is contained in the file COPYING.
-*/
-
-#include "pub_core_basics.h"
-#include "pub_core_vki.h"
-#include "pub_core_threadstate.h"
-#include "pub_core_xarray.h"
-#include "pub_core_clientstate.h"
-#include "pub_core_debugger.h"
-#include "pub_core_gdbserver.h"
-#include "pub_core_libcbase.h"
-#include "pub_core_libcprint.h"
-#include "pub_core_libcproc.h"
-#include "pub_core_libcsignal.h"
-#include "pub_core_libcassert.h"
-#include "pub_core_options.h"
-
-
-#define WIFSTOPPED(status) (((status) & 0xff) == 0x7f)
-#define WSTOPSIG(status) (((status) & 0xff00) >> 8)
-
-static Int ptrace_setregs(Int pid, const VexGuestArchState* vex)
-{
-#if defined(VGP_x86_linux)
-   struct vki_user_regs_struct regs;
-   VG_(memset)(&regs, 0, sizeof(regs));
-   regs.cs     = vex->guest_CS;
-   regs.ss     = vex->guest_SS;
-   regs.ds     = vex->guest_DS;
-   regs.es     = vex->guest_ES;
-   regs.fs     = vex->guest_FS;
-   regs.gs     = vex->guest_GS;
-   regs.eax    = vex->guest_EAX;
-   regs.ebx    = vex->guest_EBX;
-   regs.ecx    = vex->guest_ECX;
-   regs.edx    = vex->guest_EDX;
-   regs.esi    = vex->guest_ESI;
-   regs.edi    = vex->guest_EDI;
-   regs.ebp    = vex->guest_EBP;
-   regs.esp    = vex->guest_ESP;
-   regs.eflags = LibVEX_GuestX86_get_eflags(vex);
-   regs.eip    = vex->guest_EIP;
-   return VG_(ptrace)(VKI_PTRACE_SETREGS, pid, NULL, &regs);
-
-#elif defined(VGP_amd64_linux)
-   struct vki_user_regs_struct regs;
-   VG_(memset)(&regs, 0, sizeof(regs));
-   regs.rax    = vex->guest_RAX;
-   regs.rbx    = vex->guest_RBX;
-   regs.rcx    = vex->guest_RCX;
-   regs.rdx    = vex->guest_RDX;
-   regs.rsi    = vex->guest_RSI;
-   regs.rdi    = vex->guest_RDI;
-   regs.rbp    = vex->guest_RBP;
-   regs.rsp    = vex->guest_RSP;
-   regs.r8     = vex->guest_R8;
-   regs.r9     = vex->guest_R9;
-   regs.r10    = vex->guest_R10;
-   regs.r11    = vex->guest_R11;
-   regs.r12    = vex->guest_R12;
-   regs.r13    = vex->guest_R13;
-   regs.r14    = vex->guest_R14;
-   regs.r15    = vex->guest_R15;
-   regs.eflags = LibVEX_GuestAMD64_get_rflags(vex);
-   regs.rip    = vex->guest_RIP;
-   /* Set %{c,d,e,f,s,g}s and %{fs,gs}_base (whatever those are) to
-      values which don't fail the kernel's sanity checks.  I have no
-      idea what these should really be set to.  Anyway, mostly it
-      seems that zero is an allowable value, except for %cs and %ss
-      which have to have their lowest 2 bits be 11.  See putreg() in
-      linux-2.6.23/arch/x86_64/kernel/ptrace.c for the apparently
-      relevant sanity checks.  This fixes #145622. */
-   regs.cs      = 3;
-   regs.ds      = 0;
-   regs.es      = 0;
-   regs.fs      = 0;
-   regs.ss      = 3;
-   regs.gs      = 0;
-   regs.fs_base = 0;
-   regs.gs_base = 0;
-   return VG_(ptrace)(VKI_PTRACE_SETREGS, pid, NULL, &regs);
-
-#elif defined(VGP_ppc32_linux)
-   Int rc = 0;
-   /* apparently the casting to void* is the Right Thing To Do */
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R0  * 4), (void*)vex->guest_GPR0);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R1  * 4), (void*)vex->guest_GPR1);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R2  * 4), (void*)vex->guest_GPR2);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R3  * 4), (void*)vex->guest_GPR3);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R4  * 4), (void*)vex->guest_GPR4);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R5  * 4), (void*)vex->guest_GPR5);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R6  * 4), (void*)vex->guest_GPR6);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R7  * 4), (void*)vex->guest_GPR7);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R8  * 4), (void*)vex->guest_GPR8);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R9  * 4), (void*)vex->guest_GPR9);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R10 * 4), (void*)vex->guest_GPR10);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R11 * 4), (void*)vex->guest_GPR11);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R12 * 4), (void*)vex->guest_GPR12);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R13 * 4), (void*)vex->guest_GPR13);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R14 * 4), (void*)vex->guest_GPR14);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R15 * 4), (void*)vex->guest_GPR15);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R16 * 4), (void*)vex->guest_GPR16);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R17 * 4), (void*)vex->guest_GPR17);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R18 * 4), (void*)vex->guest_GPR18);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R19 * 4), (void*)vex->guest_GPR19);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R20 * 4), (void*)vex->guest_GPR20);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R21 * 4), (void*)vex->guest_GPR21);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R22 * 4), (void*)vex->guest_GPR22);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R23 * 4), (void*)vex->guest_GPR23);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R24 * 4), (void*)vex->guest_GPR24);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R25 * 4), (void*)vex->guest_GPR25);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R26 * 4), (void*)vex->guest_GPR26);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R27 * 4), (void*)vex->guest_GPR27);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R28 * 4), (void*)vex->guest_GPR28);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R29 * 4), (void*)vex->guest_GPR29);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R30 * 4), (void*)vex->guest_GPR30);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R31 * 4), (void*)vex->guest_GPR31);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_NIP * 4), (void*)vex->guest_CIA);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_CCR * 4),
-                     (void*)LibVEX_GuestPPC32_get_CR(vex));
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_LNK * 4), (void*)vex->guest_LR);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_CTR * 4), (void*)vex->guest_CTR);
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_XER * 4),
-                     (void*)LibVEX_GuestPPC32_get_XER(vex));
-   return rc;
-
-#elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
-   Int rc = 0; 
-   /* FRJ: copied nearly verbatim from the ppc32 case. I compared the 
-      vki-ppc64-linux.h with its ppc32 counterpart and saw no 
-      appreciable differences, other than the registers being 8 bytes 
-      instead of 4. No idea why we don't set all of the entries 
-      declared in vki_pt_regs, but ppc32 doesn't so there must be a 
-      reason. 
- 
-      Finally, note that CR and XER are 32 bits even for ppc64 (see 
-      libvex_guest_ppc64.h), but the vki_pt_regs struct still gives 
-      them 64 bits. 
-   */ 
-   /* apparently the casting to void* is the Right Thing To Do */ 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R0  * 8), (void*)vex->guest_GPR0); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R1  * 8), (void*)vex->guest_GPR1); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R2  * 8), (void*)vex->guest_GPR2); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R3  * 8), (void*)vex->guest_GPR3); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R4  * 8), (void*)vex->guest_GPR4); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R5  * 8), (void*)vex->guest_GPR5); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R6  * 8), (void*)vex->guest_GPR6); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R7  * 8), (void*)vex->guest_GPR7); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R8  * 8), (void*)vex->guest_GPR8); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R9  * 8), (void*)vex->guest_GPR9); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R10 * 8), (void*)vex->guest_GPR10); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R11 * 8), (void*)vex->guest_GPR11); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R12 * 8), (void*)vex->guest_GPR12); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R13 * 8), (void*)vex->guest_GPR13); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R14 * 8), (void*)vex->guest_GPR14); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R15 * 8), (void*)vex->guest_GPR15); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R16 * 8), (void*)vex->guest_GPR16); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R17 * 8), (void*)vex->guest_GPR17); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R18 * 8), (void*)vex->guest_GPR18); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R19 * 8), (void*)vex->guest_GPR19); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R20 * 8), (void*)vex->guest_GPR20); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R21 * 8), (void*)vex->guest_GPR21); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R22 * 8), (void*)vex->guest_GPR22); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R23 * 8), (void*)vex->guest_GPR23); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R24 * 8), (void*)vex->guest_GPR24); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R25 * 8), (void*)vex->guest_GPR25); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R26 * 8), (void*)vex->guest_GPR26); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R27 * 8), (void*)vex->guest_GPR27); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R28 * 8), (void*)vex->guest_GPR28); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R29 * 8), (void*)vex->guest_GPR29); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R30 * 8), (void*)vex->guest_GPR30); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_R31 * 8), (void*)vex->guest_GPR31); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_NIP * 8), (void*)vex->guest_CIA); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_CCR * 8), 
-                                              (void*)(long)LibVEX_GuestPPC64_get_CR(vex)); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_LNK * 8), (void*)vex->guest_LR); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_CTR * 8), (void*)vex->guest_CTR); 
-   rc |= VG_(ptrace)(VKI_PTRACE_POKEUSR, pid, (void*)(VKI_PT_XER * 8), 
-                                              (void*)(long)LibVEX_GuestPPC64_get_XER(vex)); 
-   return rc; 
-
-#elif defined(VGP_arm_linux)
-   struct vki_user_regs_struct uregs;
-   VG_(memset)(&uregs, 0, sizeof(uregs));
-   uregs.ARM_r0   = vex->guest_R0; 
-   uregs.ARM_r1   = vex->guest_R1; 
-   uregs.ARM_r2   = vex->guest_R2; 
-   uregs.ARM_r3   = vex->guest_R3; 
-   uregs.ARM_r4   = vex->guest_R4; 
-   uregs.ARM_r5   = vex->guest_R5; 
-   uregs.ARM_r6   = vex->guest_R6; 
-   uregs.ARM_r7   = vex->guest_R7; 
-   uregs.ARM_r8   = vex->guest_R8; 
-   uregs.ARM_r9   = vex->guest_R9; 
-   uregs.ARM_r10  = vex->guest_R10; 
-   uregs.ARM_fp   = vex->guest_R11; 
-   uregs.ARM_ip   = vex->guest_R12; 
-   uregs.ARM_sp   = vex->guest_R13; 
-   uregs.ARM_lr   = vex->guest_R14; 
-   // Remove the T bit from the bottom of R15T.  It will get shipped
-   // over in CPSR.T instead, since LibVEX_GuestARM_get_cpsr copies
-   // it from R15T[0].
-   uregs.ARM_pc   = vex->guest_R15T & 0xFFFFFFFE;
-   uregs.ARM_cpsr = LibVEX_GuestARM_get_cpsr(vex);
-   return VG_(ptrace)(VKI_PTRACE_SETREGS, pid, NULL, &uregs);
-
-#elif defined(VGP_arm64_linux)
-   I_die_here;
-   //ATC
-   struct vki_user_pt_regs uregs;
-   VG_(memset)(&uregs, 0, sizeof(uregs));
-   uregs.regs[0]  = vex->guest_X0;
-   uregs.regs[1]  = vex->guest_X1;
-   uregs.regs[2]  = vex->guest_X2;
-   uregs.regs[3]  = vex->guest_X3;
-   uregs.regs[4]  = vex->guest_X4;
-   uregs.regs[5]  = vex->guest_X5;
-   uregs.regs[6]  = vex->guest_X6;
-   uregs.regs[7]  = vex->guest_X7;
-   uregs.regs[8]  = vex->guest_X8;
-   uregs.regs[9]  = vex->guest_X9;
-   uregs.regs[10] = vex->guest_X10;
-   uregs.regs[11] = vex->guest_X11;
-   uregs.regs[12] = vex->guest_X12;
-   uregs.regs[13] = vex->guest_X13;
-   uregs.regs[14] = vex->guest_X14;
-   uregs.regs[15] = vex->guest_X15;
-   uregs.regs[16] = vex->guest_X16;
-   uregs.regs[17] = vex->guest_X17;
-   uregs.regs[18] = vex->guest_X18;
-   uregs.regs[19] = vex->guest_X19;
-   uregs.regs[20] = vex->guest_X20;
-   uregs.regs[21] = vex->guest_X21;
-   uregs.regs[22] = vex->guest_X22;
-   uregs.regs[23] = vex->guest_X23;
-   uregs.regs[24] = vex->guest_X24;
-   uregs.regs[25] = vex->guest_X25;
-   uregs.regs[26] = vex->guest_X26;
-   uregs.regs[27] = vex->guest_X27;
-   uregs.regs[28] = vex->guest_X28;
-   uregs.regs[29] = vex->guest_X29;
-   uregs.regs[30] = vex->guest_X30;
-   uregs.sp       = vex->guest_XSP;
-   uregs.pc       = vex->guest_PC;
-   uregs.pstate   = LibVEX_GuestARM64_get_nzcv(vex); /* is this correct? */
-   return VG_(ptrace)(VKI_PTRACE_SETREGS, pid, NULL, &uregs);
-
-#elif defined(VGP_x86_darwin)
-   I_die_here;
-
-#elif defined(VGP_amd64_darwin)
-   I_die_here;
-
-#elif defined(VGP_s390x_linux)
-   struct vki_user_regs_struct regs;
-   vki_ptrace_area pa;
-
-   /* We don't set the psw mask and start at offset 8 */
-   pa.vki_len = (unsigned long) &regs.per_info - (unsigned long) &regs.psw.addr;
-   pa.vki_process_addr = (unsigned long) &regs.psw.addr;
-   pa.vki_kernel_addr = 8;
-
-   VG_(memset)(&regs, 0, sizeof(regs));
-   regs.psw.addr = vex->guest_IA;
-
-   /* We don't set the mask */
-   regs.gprs[0] = vex->guest_r0;
-   regs.gprs[1] = vex->guest_r1;
-   regs.gprs[2] = vex->guest_r2;
-   regs.gprs[3] = vex->guest_r3;
-   regs.gprs[4] = vex->guest_r4;
-   regs.gprs[5] = vex->guest_r5;
-   regs.gprs[6] = vex->guest_r6;
-   regs.gprs[7] = vex->guest_r7;
-   regs.gprs[8] = vex->guest_r8;
-   regs.gprs[9] = vex->guest_r9;
-   regs.gprs[10] = vex->guest_r10;
-   regs.gprs[11] = vex->guest_r11;
-   regs.gprs[12] = vex->guest_r12;
-   regs.gprs[13] = vex->guest_r13;
-   regs.gprs[14] = vex->guest_r14;
-   regs.gprs[15] = vex->guest_r15;
-
-   regs.acrs[0] = vex->guest_a0;
-   regs.acrs[1] = vex->guest_a1;
-   regs.acrs[2] = vex->guest_a2;
-   regs.acrs[3] = vex->guest_a3;
-   regs.acrs[4] = vex->guest_a4;
-   regs.acrs[5] = vex->guest_a5;
-   regs.acrs[6] = vex->guest_a6;
-   regs.acrs[7] = vex->guest_a7;
-   regs.acrs[8] = vex->guest_a8;
-   regs.acrs[9] = vex->guest_a9;
-   regs.acrs[10] = vex->guest_a10;
-   regs.acrs[11] = vex->guest_a11;
-   regs.acrs[12] = vex->guest_a12;
-   regs.acrs[13] = vex->guest_a13;
-   regs.acrs[14] = vex->guest_a14;
-   regs.acrs[15] = vex->guest_a15;
-
-   /* only used for system call restart and friends, just use r2 */
-   regs.orig_gpr2 = vex->guest_r2;
-
-   regs.fp_regs.fprs[0].ui = vex->guest_f0;
-   regs.fp_regs.fprs[1].ui = vex->guest_f1;
-   regs.fp_regs.fprs[2].ui = vex->guest_f2;
-   regs.fp_regs.fprs[3].ui = vex->guest_f3;
-   regs.fp_regs.fprs[4].ui = vex->guest_f4;
-   regs.fp_regs.fprs[5].ui = vex->guest_f5;
-   regs.fp_regs.fprs[6].ui = vex->guest_f6;
-   regs.fp_regs.fprs[7].ui = vex->guest_f7;
-   regs.fp_regs.fprs[8].ui = vex->guest_f8;
-   regs.fp_regs.fprs[9].ui = vex->guest_f9;
-   regs.fp_regs.fprs[10].ui = vex->guest_f10;
-   regs.fp_regs.fprs[11].ui = vex->guest_f11;
-   regs.fp_regs.fprs[12].ui = vex->guest_f12;
-   regs.fp_regs.fprs[13].ui = vex->guest_f13;
-   regs.fp_regs.fprs[14].ui = vex->guest_f14;
-   regs.fp_regs.fprs[15].ui = vex->guest_f15;
-   regs.fp_regs.fpc = vex->guest_fpc;
-
-   return VG_(ptrace)(VKI_PTRACE_POKEUSR_AREA, pid,  &pa, NULL);
-
-#elif defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
-   struct vki_user_regs_struct regs;
-   VG_(memset)(&regs, 0, sizeof(regs));
-   regs.MIPS_r0     = vex->guest_r0;
-   regs.MIPS_r1     = vex->guest_r1;
-   regs.MIPS_r2     = vex->guest_r2;
-   regs.MIPS_r3     = vex->guest_r3;
-   regs.MIPS_r4     = vex->guest_r4;
-   regs.MIPS_r5     = vex->guest_r5;
-   regs.MIPS_r6     = vex->guest_r6;
-   regs.MIPS_r7     = vex->guest_r7;
-   regs.MIPS_r8     = vex->guest_r8;
-   regs.MIPS_r9     = vex->guest_r9;
-   regs.MIPS_r10     = vex->guest_r10;
-   regs.MIPS_r11     = vex->guest_r11;
-   regs.MIPS_r12     = vex->guest_r12;
-   regs.MIPS_r13     = vex->guest_r13;
-   regs.MIPS_r14     = vex->guest_r14;
-   regs.MIPS_r15     = vex->guest_r15;
-   regs.MIPS_r16     = vex->guest_r16;
-   regs.MIPS_r17     = vex->guest_r17;
-   regs.MIPS_r18     = vex->guest_r18;
-   regs.MIPS_r19     = vex->guest_r19;
-   regs.MIPS_r20     = vex->guest_r20;
-   regs.MIPS_r21     = vex->guest_r21;
-   regs.MIPS_r22     = vex->guest_r22;
-   regs.MIPS_r23     = vex->guest_r23;
-   regs.MIPS_r24     = vex->guest_r24;
-   regs.MIPS_r25     = vex->guest_r25;
-   regs.MIPS_r26     = vex->guest_r26;
-   regs.MIPS_r27     = vex->guest_r27;
-   regs.MIPS_r28     = vex->guest_r28;
-   regs.MIPS_r29     = vex->guest_r29;
-   regs.MIPS_r30     = vex->guest_r30;
-   regs.MIPS_r31     = vex->guest_r31;
-   return VG_(ptrace)(VKI_PTRACE_SETREGS, pid, NULL, &regs);
-
-#elif defined(VGP_tilegx_linux)
-   struct vki_user_regs_struct regs;
-   VG_(memset)(&regs, 0, sizeof(regs));
-   regs.TILEGX_r0     = vex->guest_r0;
-   regs.TILEGX_r1     = vex->guest_r1;
-   regs.TILEGX_r2     = vex->guest_r2;
-   regs.TILEGX_r3     = vex->guest_r3;
-   regs.TILEGX_r4     = vex->guest_r4;
-   regs.TILEGX_r5     = vex->guest_r5;
-   regs.TILEGX_r6     = vex->guest_r6;
-   regs.TILEGX_r7     = vex->guest_r7;
-   regs.TILEGX_r8     = vex->guest_r8;
-   regs.TILEGX_r9     = vex->guest_r9;
-   regs.TILEGX_r10     = vex->guest_r10;
-   regs.TILEGX_r11     = vex->guest_r11;
-   regs.TILEGX_r12     = vex->guest_r12;
-   regs.TILEGX_r13     = vex->guest_r13;
-   regs.TILEGX_r14     = vex->guest_r14;
-   regs.TILEGX_r15     = vex->guest_r15;
-   regs.TILEGX_r16     = vex->guest_r16;
-   regs.TILEGX_r17     = vex->guest_r17;
-   regs.TILEGX_r18     = vex->guest_r18;
-   regs.TILEGX_r19     = vex->guest_r19;
-   regs.TILEGX_r20     = vex->guest_r20;
-   regs.TILEGX_r21     = vex->guest_r21;
-   regs.TILEGX_r22     = vex->guest_r22;
-   regs.TILEGX_r23     = vex->guest_r23;
-   regs.TILEGX_r24     = vex->guest_r24;
-   regs.TILEGX_r25     = vex->guest_r25;
-   regs.TILEGX_r26     = vex->guest_r26;
-   regs.TILEGX_r27     = vex->guest_r27;
-   regs.TILEGX_r28     = vex->guest_r28;
-   regs.TILEGX_r29     = vex->guest_r29;
-   regs.TILEGX_r30     = vex->guest_r30;
-   regs.TILEGX_r31     = vex->guest_r31;
-   regs.TILEGX_r32     = vex->guest_r32;
-   regs.TILEGX_r33     = vex->guest_r33;
-   regs.TILEGX_r34     = vex->guest_r34;
-   regs.TILEGX_r35     = vex->guest_r35;
-   regs.TILEGX_r36     = vex->guest_r36;
-   regs.TILEGX_r37     = vex->guest_r37;
-   regs.TILEGX_r38     = vex->guest_r38;
-   regs.TILEGX_r39     = vex->guest_r39;
-   regs.TILEGX_r40     = vex->guest_r40;
-   regs.TILEGX_r41     = vex->guest_r41;
-   regs.TILEGX_r42     = vex->guest_r42;
-   regs.TILEGX_r43     = vex->guest_r43;
-   regs.TILEGX_r44     = vex->guest_r44;
-   regs.TILEGX_r45     = vex->guest_r45;
-   regs.TILEGX_r46     = vex->guest_r46;
-   regs.TILEGX_r47     = vex->guest_r47;
-   regs.TILEGX_r48     = vex->guest_r48;
-   regs.TILEGX_r49     = vex->guest_r49;
-   regs.TILEGX_r50     = vex->guest_r50;
-   regs.TILEGX_r51     = vex->guest_r51;
-   regs.TILEGX_r52     = vex->guest_r52;
-   regs.TILEGX_r53     = vex->guest_r53;
-   regs.TILEGX_r54     = vex->guest_r54;
-   regs.TILEGX_r55     = vex->guest_r55;
-   regs.TILEGX_pc     =  vex->guest_pc;
-
-   return VG_(ptrace)(VKI_PTRACE_SETREGS, pid, NULL, &regs);
-
-#else
-#  error Unknown arch
-#endif
-}
-
-/* Start debugger and get it to attach to this process.  Called if the
-   user requests this service after an error has been shown, so she can
-   poke around and look at parameters, memory, etc.  You can't
-   meaningfully get the debugger to continue the program, though; to
-   continue, quit the debugger.  */
-void VG_(start_debugger) ( ThreadId tid )
-{
-#  define N_BUF 4096
-   Int pid, rc;
-
-   pid = VG_(fork)();
-
-   if (pid == 0) {
-      /* child */
-      VG_(set_ptracer)();
-      rc = VG_(ptrace)(VKI_PTRACE_TRACEME, 0, NULL, NULL);
-      vg_assert(rc == 0);
-      rc = VG_(kill)(VG_(getpid)(), VKI_SIGSTOP);
-      vg_assert(rc == 0);
-
-   } else if (pid > 0) {
-      /* parent */
-      Int status;
-      Int res;
-
-      if ((res = VG_(waitpid)(pid, &status, 0)) == pid &&
-          WIFSTOPPED(status) && WSTOPSIG(status) == VKI_SIGSTOP &&
-          ptrace_setregs(pid, &(VG_(threads)[tid].arch.vex)) == 0 &&
-          VG_(kill)(pid, VKI_SIGSTOP) == 0 &&
-          VG_(ptrace)(VKI_PTRACE_DETACH, pid, NULL, 0) == 0)
-      {
-         HChar pidbuf[15];
-         HChar file[50];
-         HChar buf[N_BUF];
-         HChar *bufptr;
-         const HChar *cmdptr;
-         
-         VG_(sprintf)(pidbuf, "%d", pid);
-         VG_(sprintf)(file, "/proc/%d/fd/%d", pid, VG_(cl_exec_fd));
- 
-         bufptr = buf;
-         cmdptr = VG_(clo_db_command);
-         
-         while (*cmdptr) {
-            /* each iteration can advance bufptr by at most the length
-               of file[], so the following assertion is generously
-               over-paranoid. */
-            vg_assert(bufptr - buf < N_BUF-15-50-10/*paranoia*/);
-            switch (*cmdptr) {
-               case '%':
-                  switch (*++cmdptr) {
-                     case 'f':
-                        VG_(memcpy)(bufptr, file, VG_(strlen)(file));
-                        bufptr += VG_(strlen)(file);
-                        cmdptr++;
-                        break;
-                     case 'p':
-                        VG_(memcpy)(bufptr, pidbuf, VG_(strlen)(pidbuf));
-                        bufptr += VG_(strlen)(pidbuf);
-                        cmdptr++;
-                        break;
-                     default:
-                        *bufptr++ = *cmdptr++;
-                        break;
-                  }
-                  break;
-               default:
-                  *bufptr++ = *cmdptr++;
-                  break;
-            }
-            vg_assert(bufptr - buf < N_BUF-15-50-10/*paranoia*/);
-         }
-         
-         *bufptr++ = '\0';
-  
-         VG_(message)(Vg_UserMsg, "starting debugger with cmd: %s\n", buf);
-         res = VG_(system)(buf);
-         if (res == 0) {      
-            VG_(message)(Vg_UserMsg, "\n");
-            VG_(message)(Vg_UserMsg, 
-                         "Debugger has detached.  Valgrind regains control."
-                         "  We continue.\n");
-         } else {
-            VG_(message)(Vg_UserMsg, 
-                         "Warning: Debugger attach failed! (sys_system)\n");
-            VG_(message)(Vg_UserMsg, "\n");
-         }
-      } else {
-         VG_(message)(Vg_UserMsg, 
-                      "Warning: Debugger attach failed! (ptrace problem?)\n");
-         VG_(message)(Vg_UserMsg, "\n");
-      }
-
-      VG_(kill)(pid, VKI_SIGKILL);
-      VG_(waitpid)(pid, &status, 0);
-   }
-#  undef N_BUF
-}
-
-
-
-/*--------------------------------------------------------------------*/
-/*--- end                                                          ---*/
-/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_debuginfo/d3basics.c b/coregrind/m_debuginfo/d3basics.c
index 09d1b12..190ada1 100644
--- a/coregrind/m_debuginfo/d3basics.c
+++ b/coregrind/m_debuginfo/d3basics.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks LLP
+   Copyright (C) 2008-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -400,10 +400,12 @@
 static Bool get_Dwarf_Reg( /*OUT*/Addr* a, Word regno, const RegSummary* regs )
 {
    vg_assert(regs);
-#  if defined(VGP_x86_linux) || defined(VGP_x86_darwin)
+#  if defined(VGP_x86_linux) || defined(VGP_x86_darwin) \
+      || defined(VGP_x86_solaris)
    if (regno == 5/*EBP*/) { *a = regs->fp; return True; }
    if (regno == 4/*ESP*/) { *a = regs->sp; return True; }
-#  elif defined(VGP_amd64_linux) || defined(VGP_amd64_darwin)
+#  elif defined(VGP_amd64_linux) || defined(VGP_amd64_darwin) \
+        || defined(VGP_amd64_solaris)
    if (regno == 6/*RBP*/) { *a = regs->fp; return True; }
    if (regno == 7/*RSP*/) { *a = regs->sp; return True; }
 #  elif defined(VGP_ppc32_linux)
@@ -972,8 +974,8 @@
       aMax   = ML_(read_Addr)(p);   p += sizeof(Addr);
       nbytes = ML_(read_UShort)(p); p += sizeof(UShort);
       nGuards++;
-      if (0) VG_(printf)("           guard %d: %#lx %#lx\n",
-                         (Int)nGuards, aMin,aMax);
+      if (0) VG_(printf)("           guard %lu: %#lx %#lx\n",
+                         nGuards, aMin,aMax);
       if (regs == NULL) {
          vg_assert(aMin == (Addr)0);
          vg_assert(aMax == ~(Addr)0);
diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c
index 31fd369..6f11cd2 100644
--- a/coregrind/m_debuginfo/debuginfo.c
+++ b/coregrind/m_debuginfo/debuginfo.c
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -56,7 +56,7 @@
 #include "priv_tytypes.h"
 #include "priv_storage.h"
 #include "priv_readdwarf.h"
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 # include "priv_readelf.h"
 # include "priv_readdwarf3.h"
 # include "priv_readpdb.h"
@@ -105,7 +105,7 @@
 /*--- fwdses                                               ---*/
 /*------------------------------------------------------------*/
 
-static UInt CF_info_generation = 0;
+static UInt debuginfo_generation = 0;
 static void cfsi_m_cache__invalidate ( void );
 
 
@@ -118,7 +118,7 @@
 static DebugInfo* debugInfo_list = NULL;
 
 
-/* Find 'di' in the debugInfo_list and move it one step closer the the
+/* Find 'di' in the debugInfo_list and move it one step closer to the
    front of the list, so as to make subsequent searches for it
    cheaper.  When used in a controlled way, makes a major improvement
    in some DebugInfo-search-intensive situations, most notably stack
@@ -597,7 +597,7 @@
 /*---                                                        ---*/
 /*--------------------------------------------------------------*/
 
-#if defined(VGO_linux)  ||  defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /* Helper (indirect) for di_notify_ACHIEVE_ACCEPT_STATE */
 static Bool overlaps_DebugInfoMappings ( const DebugInfoMapping* map1,
@@ -621,9 +621,9 @@
    n = VG_(sizeXA)(maps);
    for (i = 0; i < n; i++) {
       const DebugInfoMapping* map = VG_(indexXA)(maps, i);
-      TRACE_SYMTAB("  [%ld]    avma 0x%-16llx    size %-8lu    "
+      TRACE_SYMTAB("  [%ld]    avma 0x%-16lx    size %-8lu    "
                    "foff %-8lld    %s %s %s\n",
-                   i, (ULong)map->avma, map->size, (Long)map->foff,
+                   i, map->avma, map->size, (Long)map->foff,
                    map->rx ? "rx" : "--",
                    map->rw ? "rw" : "--",
                    map->ro ? "ro" : "--");
@@ -745,7 +745,7 @@
    truncate_DebugInfoMapping_overlaps( di, di->fsm.maps );
 
    /* And acquire new info. */
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    ok = ML_(read_elf_debug_info)( di );
 #  elif defined(VGO_darwin)
    ok = ML_(read_macho_debug_info)( di );
@@ -965,6 +965,11 @@
    is_ro_map = seg->hasR && !seg->hasW && !seg->hasX;
 #  endif
 
+#  if defined(VGO_solaris)
+   is_rx_map = seg->hasR && seg->hasX && !seg->hasW;
+   is_rw_map = seg->hasR && seg->hasW;
+#  endif
+
    if (debug)
       VG_(printf)("di_notify_mmap-3: "
                   "is_rx_map %d, is_rw_map %d, is_ro_map %d\n",
@@ -1017,7 +1022,7 @@
    vg_assert(sr_Res(preadres) > 0 && sr_Res(preadres) <= sizeof(buf1k) );
 
    /* We're only interested in mappings of object files. */
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    if (!ML_(is_elf_object_file)( buf1k, (SizeT)sr_Res(preadres), False ))
       return 0;
 #  elif defined(VGO_darwin)
@@ -1038,7 +1043,7 @@
 
    /* Note the details about the mapping. */
    DebugInfoMapping map;
-   map.avma = a;
+   map.avma = seg->start;
    map.size = seg->end + 1 - seg->start;
    map.foff = seg->offset;
    map.rx   = is_rx_map;
@@ -1217,7 +1222,7 @@
       VG_(message)(Vg_UserMsg,
          "LOAD_PDB_DEBUGINFO: clreq:   fd=%d, avma=%#lx, total_size=%lu, "
          "bias=%#lx\n", 
-         fd_obj, avma_obj, total_size, bias_obj
+         fd_obj, avma_obj, total_size, (UWord)bias_obj
       );
    }
 
@@ -1422,7 +1427,7 @@
    if (pdbname) ML_(dinfo_free)(pdbname);
 }
 
-#endif /* defined(VGO_linux) || defined(VGO_darwin) */
+#endif /* defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris) */
 
 
 /*------------------------------------------------------------*/
@@ -1939,6 +1944,8 @@
 #      elif defined(VGO_darwin)
        // See readmacho.c for an explanation of this.
        VG_STREQ("start_according_to_valgrind", name) ||  // Darwin, darling
+#      elif defined(VGO_solaris)
+       VG_STREQ("_start", name) || // main() is called directly from _start
 #      else
 #        error "Unknown OS"
 #      endif
@@ -2295,7 +2302,7 @@
       /* Print in XML format, dumping in as much info as we know.
          Ensure all tags are balanced. */
       APPEND("<frame>");
-      VG_(sprintf)(ibuf,"<ip>0x%llX</ip>", (ULong)eip);
+      VG_(sprintf)(ibuf,"<ip>0x%lX</ip>", eip);
       APPEND(maybe_newline);
       APPEND(ibuf);
       if (know_objname) {
@@ -2323,7 +2330,7 @@
          APPEND("</file>");
          APPEND(maybe_newline);
          APPEND("<line>");
-         VG_(sprintf)(ibuf,"%d",lineno);
+         VG_(sprintf)(ibuf,"%u",lineno);
          APPEND(ibuf);
          APPEND("</line>");
       }
@@ -2343,7 +2350,7 @@
       //   0x80483BF: ??? (a.c:20)
       //   0x80483BF: ???
       //
-      VG_(sprintf)(ibuf,"0x%llX: ", (ULong)eip);
+      VG_(sprintf)(ibuf,"0x%lX: ", eip);
       APPEND(ibuf);
       if (know_fnname) {
          APPEND(buf_fn);
@@ -2381,7 +2388,7 @@
          }
          APPEND(buf_srcloc);
          APPEND(":");
-         VG_(sprintf)(ibuf,"%d",lineno);
+         VG_(sprintf)(ibuf,"%u",lineno);
          APPEND(ibuf);
          APPEND(")");
       } else if (know_objname) {
@@ -2645,12 +2652,12 @@
 
 static void cfsi_m_cache__invalidate ( void ) {
    VG_(memset)(&cfsi_m_cache, 0, sizeof(cfsi_m_cache));
-   CF_info_generation++;
+   debuginfo_generation++;
 }
 
-UInt VG_(CF_info_generation) (void)
+UInt VG_(debuginfo_generation) (void)
 {
-   return CF_info_generation;
+   return debuginfo_generation;
 }
 
 static inline CFSI_m_CacheEnt* cfsi_m_cache__find ( Addr ip )
@@ -2828,6 +2835,37 @@
 #  endif
 }
 
+void VG_(ppUnwindInfo) (Addr from, Addr to)
+{
+   DebugInfo*         di;
+   CFSI_m_CacheEnt*   ce;
+   Addr ce_from;
+   CFSI_m_CacheEnt*   next_ce;
+
+
+   ce = cfsi_m_cache__find(from);
+   ce_from = from;
+   while (from <= to) {
+      from++;
+      next_ce = cfsi_m_cache__find(from);
+      if ((ce == NULL && next_ce != NULL)
+          || (ce != NULL && next_ce == NULL)
+          || (ce != NULL && next_ce != NULL && ce->cfsi_m != next_ce->cfsi_m)
+          || from > to) {
+         if (ce == NULL) {
+            VG_(printf)("[%#lx .. %#lx]: no CFI info\n", ce_from, from-1);
+         } else {
+            di = ce->di;
+            ML_(ppDiCfSI)(di->cfsi_exprs,
+                          ce_from, from - ce_from,
+                          ce->cfsi_m);
+         }
+         ce = next_ce;
+         ce_from = from;
+      }
+   }
+}
+
 
 /* The main function for DWARF2/3 CFI-based stack unwinding.  Given a
    set of registers in UREGS, modify it to hold the register values
@@ -3004,10 +3042,10 @@
          Word j;
          if (0) {
             /* debug printing only */
-            VG_(printf)("look for %#lx  size %ld i %ld\n",
+            VG_(printf)("look for %#lx  size %lu i %ld\n",
                         *ipP, di->fpo_size, i);
             for (j = 0; j < di->fpo_size; j++)
-               VG_(printf)("[%02ld] %#x %d\n", 
+               VG_(printf)("[%02ld] %#x %u\n",
                             j, di->fpo[j].ulOffStart, di->fpo[j].cbProcSize);
          }
          vg_assert(i >= 0 && i < di->fpo_size);
@@ -3086,6 +3124,16 @@
    return True;
 }
 
+Bool VG_(FPO_info_present)(void)
+{
+   const DebugInfo* di;
+   for (di = debugInfo_list; di != NULL; di = di->next) {
+      if (di->fpo != NULL)
+         return True;
+   }
+   return False;
+}
+
 
 /*--------------------------------------------------------------*/
 /*---                                                        ---*/
@@ -3248,19 +3296,19 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside local var \"%pS\",",
+               "Location 0x%lx is %ld byte%s inside local var \"%pS\",",
                data_addr, var_offset, vo_plural, var->name );
          TAGR( dn1 );
          TAGL( dn2 );
          p2XA( dn2,
-               "in frame #%d of thread %d", frameNo, (Int)tid );
+               "in frame #%d of thread %u", frameNo, tid );
          TAGR( dn2 );
       } else {
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside local var \"%s\",",
+               "Location 0x%lx is %ld byte%s inside local var \"%s\",",
                data_addr, var_offset, vo_plural, var->name );
          p2XA( dn2,
-               "in frame #%d of thread %d", frameNo, (Int)tid );
+               "in frame #%d of thread %u", frameNo, tid );
       }
    } 
    else
@@ -3272,14 +3320,14 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside local var \"%pS\"",
+               "Location 0x%lx is %ld byte%s inside local var \"%pS\"",
                data_addr, var_offset, vo_plural, var->name );
          TAGR( dn1 );
          XAGL( dn2 );
          TXTL( dn2 );
          p2XA( dn2,
-               "declared at %pS:%d, in frame #%d of thread %d",
-               fileName, var->lineNo, frameNo, (Int)tid );
+               "declared at %pS:%d, in frame #%d of thread %u",
+               fileName, var->lineNo, frameNo, tid );
          TXTR( dn2 );
          // FIXME: also do <dir>
          p2XA( dn2,
@@ -3288,11 +3336,11 @@
          XAGR( dn2 );
       } else {
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside local var \"%s\"",
+               "Location 0x%lx is %ld byte%s inside local var \"%s\"",
                data_addr, var_offset, vo_plural, var->name );
          p2XA( dn2,
-               "declared at %s:%d, in frame #%d of thread %d",
-               fileName, var->lineNo, frameNo, (Int)tid );
+               "declared at %s:%d, in frame #%d of thread %u",
+               fileName, var->lineNo, frameNo, tid );
       }
    }
    else
@@ -3304,21 +3352,21 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %pS%pS",
+               "Location 0x%lx is %ld byte%s inside %pS%pS",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          TAGR( dn1 );
          TAGL( dn2 );
          p2XA( dn2,
-               "in frame #%d of thread %d", frameNo, (Int)tid );
+               "in frame #%d of thread %u", frameNo, tid );
          TAGR( dn2 );
       } else {
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %s%s",
+               "Location 0x%lx is %ld byte%s inside %s%s",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          p2XA( dn2,
-               "in frame #%d of thread %d", frameNo, (Int)tid );
+               "in frame #%d of thread %u", frameNo, tid );
       }
    } 
    else
@@ -3328,15 +3376,15 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %pS%pS,",
+               "Location 0x%lx is %ld byte%s inside %pS%pS,",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          TAGR( dn1 );
          XAGL( dn2 );
          TXTL( dn2 );
          p2XA( dn2,
-               "declared at %pS:%d, in frame #%d of thread %d",
-               fileName, var->lineNo, frameNo, (Int)tid );
+               "declared at %pS:%d, in frame #%d of thread %u",
+               fileName, var->lineNo, frameNo, tid );
          TXTR( dn2 );
          // FIXME: also do <dir>
          p2XA( dn2,
@@ -3345,12 +3393,12 @@
          XAGR( dn2 );
       } else {
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %s%s,",
+               "Location 0x%lx is %ld byte%s inside %s%s,",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          p2XA( dn2,
-               "declared at %s:%d, in frame #%d of thread %d",
-               fileName, var->lineNo, frameNo, (Int)tid );
+               "declared at %s:%d, in frame #%d of thread %u",
+               fileName, var->lineNo, frameNo, tid );
       }
    }
    else
@@ -3362,12 +3410,12 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside global var \"%pS\"",
+               "Location 0x%lx is %ld byte%s inside global var \"%pS\"",
                data_addr, var_offset, vo_plural, var->name );
          TAGR( dn1 );
       } else {
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside global var \"%s\"",
+               "Location 0x%lx is %ld byte%s inside global var \"%s\"",
                data_addr, var_offset, vo_plural, var->name );
       }
    } 
@@ -3380,7 +3428,7 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside global var \"%pS\"",
+               "Location 0x%lx is %ld byte%s inside global var \"%pS\"",
                data_addr, var_offset, vo_plural, var->name );
          TAGR( dn1 );
          XAGL( dn2 );
@@ -3396,7 +3444,7 @@
          XAGR( dn2 );
       } else {
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside global var \"%s\"",
+               "Location 0x%lx is %ld byte%s inside global var \"%s\"",
                data_addr, var_offset, vo_plural, var->name );
          p2XA( dn2,
                "declared at %s:%d",
@@ -3412,7 +3460,7 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %pS%pS,",
+               "Location 0x%lx is %ld byte%s inside %pS%pS,",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          TAGR( dn1 );
@@ -3422,9 +3470,9 @@
          TAGR( dn2 );
       } else {
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %s%s,",
+               "Location 0x%lx is %ld byte%s inside %s%s,",
                data_addr, residual_offset, ro_plural, var->name,
-               (char*)(VG_(indexXA)(described,0)) );
+               (HChar*)(VG_(indexXA)(described,0)) );
          p2XA( dn2,
                "a global variable");
       }
@@ -3436,7 +3484,7 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %pS%pS,",
+               "Location 0x%lx is %ld byte%s inside %pS%pS,",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          TAGR( dn1 );
@@ -3453,7 +3501,7 @@
          XAGR( dn2 );
       } else {
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %s%s,",
+               "Location 0x%lx is %ld byte%s inside %s%s,",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          p2XA( dn2,
@@ -3618,8 +3666,8 @@
    XArray itself.
 */
 Bool VG_(get_data_description)( 
-        /*MOD*/ void* /* really, XArray* of HChar */ dname1v,
-        /*MOD*/ void* /* really, XArray* of HChar */ dname2v,
+        /*MOD*/ XArray* /* of HChar */ dname1,
+        /*MOD*/ XArray* /* of HChar */ dname2,
         Addr data_addr
      )
 {
@@ -3633,9 +3681,6 @@
    DebugInfo* di;
    Word       j;
 
-   XArray*    dname1 = (XArray*)dname1v;
-   XArray*    dname2 = (XArray*)dname2v;
-
    if (0) VG_(printf)("get_data_description: dataaddr %#lx\n", data_addr);
    /* First, see if data_addr is (or is part of) a global variable.
       Loop over the DebugInfos we have.  Check data_addr against the
@@ -3887,8 +3932,8 @@
          res = ML_(evaluate_GX)( var->gexpr, var->fbGX, &regs, di );
          vg_assert(res.kind == GXR_Addr);
          if (debug)
-         VG_(printf)("   %5ld .. %5ld (sp) %s\n",
-                     res.word, res.word + ((UWord)mul.ul) - 1, var->name);
+         VG_(printf)("   %5lu .. %5llu (sp) %s\n",
+                     res.word, res.word + mul.ul - 1, var->name);
          block.base  = res.word;
          block.szB   = (SizeT)mul.ul;
          block.spRel = True;
@@ -3906,8 +3951,8 @@
          res = ML_(evaluate_GX)( var->gexpr, var->fbGX, &regs, di );
          vg_assert(res.kind == GXR_Addr);
          if (debug)
-         VG_(printf)("   %5ld .. %5ld (FP) %s\n",
-                     res.word, res.word + ((UWord)mul.ul) - 1, var->name);
+         VG_(printf)("   %5lu .. %5llu (FP) %s\n",
+                     res.word, res.word + mul.ul - 1, var->name);
          block.base  = res.word;
          block.szB   = (SizeT)mul.ul;
          block.spRel = False;
@@ -3930,8 +3975,8 @@
    point.  If 'arrays_only' is True, only array-typed blocks are
    returned; otherwise blocks of all types are returned. */
 
-void* /* really, XArray* of StackBlock */
-      VG_(di_get_stack_blocks_at_ip)( Addr ip, Bool arrays_only )
+XArray* /* of StackBlock */
+VG_(di_get_stack_blocks_at_ip)( Addr ip, Bool arrays_only )
 {
    /* This is a derivation of consider_vars_in_frame() above. */
    Word       i;
@@ -4044,9 +4089,8 @@
    array-typed blocks are returned; otherwise blocks of all types are
    returned. */
 
-void* /* really, XArray* of GlobalBlock */
-      VG_(di_get_global_blocks_from_dihandle) ( ULong di_handle,
-                                                Bool  arrays_only )
+XArray* /* of GlobalBlock */
+VG_(di_get_global_blocks_from_dihandle) ( ULong di_handle, Bool  arrays_only )
 {
    /* This is a derivation of consider_vars_in_frame() above. */
 
@@ -4309,8 +4353,8 @@
 
       if (0)
          VG_(printf)(
-            "addr=%#lx di=%p %s got=%#lx,%ld plt=%#lx,%ld "
-            "data=%#lx,%ld bss=%#lx,%ld\n",
+            "addr=%#lx di=%p %s got=%#lx,%lu plt=%#lx,%lu "
+            "data=%#lx,%lu bss=%#lx,%lu\n",
             a, di, di->fsm.filename,
             di->got_avma,  di->got_size,
             di->plt_avma,  di->plt_size,
diff --git a/coregrind/m_debuginfo/image.c b/coregrind/m_debuginfo/image.c
index 819a770..1735ce6 100644
--- a/coregrind/m_debuginfo/image.c
+++ b/coregrind/m_debuginfo/image.c
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 Mozilla Foundation
+   Copyright (C) 2013-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -474,7 +474,7 @@
       UInt delay = now - t_last;
       t_last = now;
       nread += len;
-      VG_(printf)("XXXXXXXX (tot %'lld)  read %'ld  offset %'lld  delay %'u\n", 
+      VG_(printf)("XXXXXXXX (tot %'llu)  read %'lu  offset %'llu  delay %'u\n", 
                   nread, len, off, delay);
    }
 
@@ -798,6 +798,20 @@
    return img->size > 0 && offset + size <= (DiOffT)img->size;
 }
 
+__attribute__((noinline))
+static void ensure_valid_failed (const DiImage* img, DiOffT offset, SizeT size,
+                                 const HChar* caller)
+{
+   VG_(umsg)("Valgrind: debuginfo reader: ensure_valid failed:\n");
+   VG_(umsg)("Valgrind:   during call to %s\n", caller);
+   VG_(umsg)("Valgrind:   request for range [%llu, +%lu) exceeds\n",
+             offset, size);
+   VG_(umsg)("Valgrind:   valid image size of %lu for image:\n",
+             img->size);
+   VG_(umsg)("Valgrind:   \"%s\"\n", img->source.name);
+   give_up__image_overrun();
+}
+
 /* Check the given range is valid, and if not, shut down the system.
    An invalid range would imply that we're trying to read outside the
    image, which normally means the image is corrupted somehow, or the
@@ -808,14 +822,8 @@
 {
    if (LIKELY(ML_(img_valid)(img, offset, size)))
       return;
-   VG_(umsg)("Valgrind: debuginfo reader: ensure_valid failed:\n");
-   VG_(umsg)("Valgrind:   during call to %s\n", caller);
-   VG_(umsg)("Valgrind:   request for range [%llu, +%llu) exceeds\n",
-             (ULong)offset, (ULong)size);
-   VG_(umsg)("Valgrind:   valid image size of %llu for image:\n",
-             (ULong)img->size);
-   VG_(umsg)("Valgrind:   \"%s\"\n", img->source.name);
-   give_up__image_overrun();
+   else
+      ensure_valid_failed(img, offset, size, caller);
 }
 
 
diff --git a/coregrind/m_debuginfo/misc.c b/coregrind/m_debuginfo/misc.c
index 14d3949..03cbf03 100644
--- a/coregrind/m_debuginfo/misc.c
+++ b/coregrind/m_debuginfo/misc.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks LLP
+   Copyright (C) 2008-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_debuginfo/priv_d3basics.h b/coregrind/m_debuginfo/priv_d3basics.h
index 4c06966..b7eec6f 100644
--- a/coregrind/m_debuginfo/priv_d3basics.h
+++ b/coregrind/m_debuginfo/priv_d3basics.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks LLP and others; see below
+   Copyright (C) 2008-2015 OpenWorks LLP and others; see below
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_debuginfo/priv_image.h b/coregrind/m_debuginfo/priv_image.h
index 083ed78..9523f48 100644
--- a/coregrind/m_debuginfo/priv_image.h
+++ b/coregrind/m_debuginfo/priv_image.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 Mozilla Foundation
+   Copyright (C) 2013-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/m_debuginfo/priv_misc.h b/coregrind/m_debuginfo/priv_misc.h
index 40a0e48..d3adb7d 100644
--- a/coregrind/m_debuginfo/priv_misc.h
+++ b/coregrind/m_debuginfo/priv_misc.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks LLP
+   Copyright (C) 2008-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_debuginfo/priv_readdwarf.h b/coregrind/m_debuginfo/priv_readdwarf.h
index fb2e193..6cdf26e 100644
--- a/coregrind/m_debuginfo/priv_readdwarf.h
+++ b/coregrind/m_debuginfo/priv_readdwarf.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_debuginfo/priv_readdwarf3.h b/coregrind/m_debuginfo/priv_readdwarf3.h
index 6361531..3cccc68 100644
--- a/coregrind/m_debuginfo/priv_readdwarf3.h
+++ b/coregrind/m_debuginfo/priv_readdwarf3.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks LLP
+   Copyright (C) 2008-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_debuginfo/priv_readelf.h b/coregrind/m_debuginfo/priv_readelf.h
index 22c58e9..17d3761 100644
--- a/coregrind/m_debuginfo/priv_readelf.h
+++ b/coregrind/m_debuginfo/priv_readelf.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_debuginfo/priv_readexidx.h b/coregrind/m_debuginfo/priv_readexidx.h
index 8b21ffb..49c1d1a 100644
--- a/coregrind/m_debuginfo/priv_readexidx.h
+++ b/coregrind/m_debuginfo/priv_readexidx.h
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Mozilla Foundation
+   Copyright (C) 2014-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/m_debuginfo/priv_readpdb.h b/coregrind/m_debuginfo/priv_readpdb.h
index 117a8c5..a423799 100644
--- a/coregrind/m_debuginfo/priv_readpdb.h
+++ b/coregrind/m_debuginfo/priv_readpdb.h
@@ -11,7 +11,7 @@
       derived from readelf.c and valgrind-20031012-wine/vg_symtab2.c
       derived from wine-1.0/tools/winedump/pdb.c and msc.c
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
-#if defined(VGO_linux) || defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 #ifndef __PRIV_READPDB_H
 #define __PRIV_READPDB_H
@@ -59,7 +59,7 @@
 
 #endif /* ndef __PRIV_READPDB_H */
 
-#endif // defined(VGO_linux) || defined(VGO_darwin)
+#endif // defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_debuginfo/priv_storage.h b/coregrind/m_debuginfo/priv_storage.h
index c7278e2e..aa1d9f9 100644
--- a/coregrind/m_debuginfo/priv_storage.h
+++ b/coregrind/m_debuginfo/priv_storage.h
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_debuginfo/priv_tytypes.h b/coregrind/m_debuginfo/priv_tytypes.h
index 82fd905..eae3701 100644
--- a/coregrind/m_debuginfo/priv_tytypes.h
+++ b/coregrind/m_debuginfo/priv_tytypes.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks LLP
+   Copyright (C) 2008-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c
index 4a0f750..88d49e9 100644
--- a/coregrind/m_debuginfo/readdwarf.c
+++ b/coregrind/m_debuginfo/readdwarf.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
-#if defined(VGO_linux) || defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 #include "pub_core_basics.h"
 #include "pub_core_debuginfo.h"
@@ -269,7 +269,8 @@
    switch (op_code) {
       case DW_LNE_end_sequence:
          if (0) VG_(printf)("1001: si->o %#lx, smr.a %#lx\n",
-                            di->text_debug_bias, state_machine_regs.address );
+                            (UWord)di->text_debug_bias,
+                            state_machine_regs.address );
          /* JRS: added for compliance with spec; is pointless due to
             reset_state_machine below */
          state_machine_regs.end_sequence = 1; 
@@ -454,9 +455,9 @@
 
       It seems to me that the Intel Fortran compiler generates bad
       DWARF2 line info code: It sets "is_stmt" of the state machine in
-      the the line info reader to be always false. Thus, there is
-      never a statement boundary generated and therefore never a
-      instruction range/line number mapping generated for valgrind.
+      the line info reader to be always false. Thus, there is never
+      a statement boundary generated and therefore never an instruction
+      range/line number mapping generated for valgrind.
 
       Please have a look at the DWARF2 specification, Ch. 6.2
       (x86.ddj.com/ftp/manuals/tools/dwarf.pdf).  Perhaps I understand
@@ -464,7 +465,7 @@
 
       I just had a look at the GDB DWARF2 reader...  They completely
       ignore "is_stmt" when recording line info ;-) That's the reason
-      "objdump -S" works on files from the the intel fortran compiler.
+      "objdump -S" works on files from the intel fortran compiler.
 
       Therefore: */
    info.li_default_is_stmt = True; 
@@ -618,10 +619,11 @@
          Int advAddr = adv;
          state_machine_regs.address += adv;
 
-         if (0) VG_(printf)("smr.a += %#lx\n", adv );
+         if (0) VG_(printf)("smr.a += %#lx\n", (UWord)adv );
          adv = (op_code % info.li_line_range) + info.li_line_base;
          if (0) VG_(printf)("1002: di->o %#lx, smr.a %#lx\n",
-                            di->text_debug_bias, state_machine_regs.address );
+                            (UWord)di->text_debug_bias,
+                            state_machine_regs.address );
          state_machine_regs.line += adv;
 
          if (di->ddump_line)
@@ -660,7 +662,8 @@
 
          case DW_LNS_copy:
             if (0) VG_(printf)("1002: di->o %#lx, smr.a %#lx\n",
-                               di->text_debug_bias, state_machine_regs.address );
+                               (UWord)di->text_debug_bias,
+                               state_machine_regs.address );
             if (state_machine_regs.is_stmt) {
                /* only add a statement if there was a previous boundary */
                if (state_machine_regs.last_address) {
@@ -684,11 +687,11 @@
             break;
 
          case DW_LNS_advance_pc: {
-            Word adv = info.li_min_insn_length * step_leb128U(&data);
+            UWord adv = info.li_min_insn_length * step_leb128U(&data);
             state_machine_regs.address += adv;
             if (0) VG_(printf)("smr.a += %#lx\n", adv );
             if (di->ddump_line)
-               VG_(printf)("  Advance PC by %ld to 0x%lx\n", 
+               VG_(printf)("  Advance PC by %lu to 0x%lx\n", 
                            adv, state_machine_regs.address);
             break;
          }
@@ -733,7 +736,7 @@
             Word adv = (((255 - info.li_opcode_base) / info.li_line_range)
                           * info.li_min_insn_length);
             state_machine_regs.address += adv;
-            if (0) VG_(printf)("smr.a += %#lx\n", adv );
+            if (0) VG_(printf)("smr.a += %#lx\n", (UWord)adv );
             if (di->ddump_line)
                VG_(printf)("  Advance PC by constant %ld to 0x%lx\n", 
                            adv, (Addr)state_machine_regs.address);
@@ -741,7 +744,7 @@
          }
          case DW_LNS_fixed_advance_pc: {
             /* XXX: Need something to get 2 bytes */
-            Word adv = ML_(cur_step_UShort)(&data);
+            UWord adv = ML_(cur_step_UShort)(&data);
             state_machine_regs.address += adv;
             if (0) VG_(printf)("smr.a += %#lx\n", adv );
             if (di->ddump_line)
@@ -1131,7 +1134,7 @@
       
       if (0) {
          HChar* str_name = ML_(cur_read_strdup)(ui.name, "di.rdd3.3");
-         VG_(printf)("debug_line_sz %lld, ui.stmt_list %lld  %s\n",
+         VG_(printf)("debug_line_sz %llu, ui.stmt_list %llu  %s\n",
                      escn_debug_line.szB, ui.stmt_list, str_name );
          ML_(dinfo_free)(str_name);
       }
@@ -1437,7 +1440,7 @@
 	 }        
       }  
 
-      /* Move on the the next DIE. */
+      /* Move on the next DIE. */
       die_offset += die_szb;
 
    } /* Looping over DIEs */
@@ -1719,11 +1722,11 @@
 
 /* --------------- Decls --------------- */
 
-#if defined(VGP_x86_linux)
+#if defined(VGP_x86_linux) || defined(VGP_x86_solaris)
 #  define FP_REG         5
 #  define SP_REG         4
 #  define RA_REG_DEFAULT 8
-#elif defined(VGP_amd64_linux)
+#elif defined(VGP_amd64_linux) || defined(VGP_amd64_solaris)
 #  define FP_REG         6
 #  define SP_REG         7
 #  define RA_REG_DEFAULT 16
@@ -1825,6 +1828,7 @@
     DW_CFA_GNU_window_save    = 0x2d, /* GNU extension */
     DW_CFA_GNU_args_size      = 0x2e, /* GNU extension */
     DW_CFA_GNU_negative_offset_extended = 0x2f, /* GNU extension */
+    DW_CFA_ORCL_arg_loc       = 0x30, /* Oracle extension */
     DW_CFA_hi_user            = 0x3f
   };
 
@@ -2023,6 +2027,7 @@
       DiCursor ehframe_image;
       Addr     ehframe_avma;
       Addr     text_bias;
+      Addr     got_avma;
    }
    AddressDecodingInfo;
 
@@ -2650,6 +2655,7 @@
    UChar    encoding      = adi->encoding;
    DiCursor ehframe_image = adi->ehframe_image;
    Addr     ehframe_avma  = adi->ehframe_avma;
+   Addr     got_avma      = adi->got_avma;
 
    vg_assert((encoding & DW_EH_PE_indirect) == 0);
 
@@ -2661,8 +2667,7 @@
          base = ehframe_avma + ML_(cur_minus)(*data, ehframe_image);
          break;
       case DW_EH_PE_datarel:
-         vg_assert(0);
-         base = /* data base address */ 0;
+         base = got_avma;
          break;
       case DW_EH_PE_textrel:
          vg_assert(0);
@@ -3361,6 +3366,11 @@
          }
          break;
 
+      case DW_CFA_ORCL_arg_loc:
+         if (di->ddump_frames)
+            VG_(printf)("  DW_CFA_ORCL_arg_loc\n");
+         break;
+
       default: 
          VG_(message)(Vg_DebugMsg, "DWARF2 CFI reader: unhandled CFI "
                                    "instruction 0:%d\n", (Int)lo6); 
@@ -3439,30 +3449,30 @@
 
       case DW_CFA_advance_loc1:
          delta = (UInt)ML_(cur_step_UChar)(&instr);
-         VG_(printf)("  sci:DW_CFA_advance_loc1(%d)\n", delta); 
+         VG_(printf)("  sci:DW_CFA_advance_loc1(%u)\n", delta); 
          break;
 
       case DW_CFA_advance_loc2:
          delta = (UInt)ML_(cur_step_UShort)(&instr);
-         VG_(printf)("  sci:DW_CFA_advance_loc2(%d)\n", delta); 
+         VG_(printf)("  sci:DW_CFA_advance_loc2(%u)\n", delta); 
          break;
 
       case DW_CFA_advance_loc4:
          delta = (UInt)ML_(cur_step_UInt)(&instr);
-         VG_(printf)("  DW_CFA_advance_loc4(%d)\n", delta); 
+         VG_(printf)("  DW_CFA_advance_loc4(%u)\n", delta); 
          break;
 
       case DW_CFA_def_cfa:
          reg = step_leb128( &instr, 0 );
          off = step_leb128( &instr, 0 );
-         VG_(printf)("  DW_CFA_def_cfa: r%d ofs %d\n", (Int)reg, (Int)off); 
+         VG_(printf)("  DW_CFA_def_cfa: r%d ofs %d\n", reg, off); 
          break;
 
       case DW_CFA_def_cfa_sf:
          reg = step_leb128( &instr, 0 );
          off = step_leb128( &instr, 1 );
          VG_(printf)("  DW_CFA_def_cfa_sf: r%d ofs %d\n", 
-                     (Int)reg, (Int)(off * data_a_f));
+                     reg, off * data_a_f);
          break;
 
       case DW_CFA_register:
@@ -3574,6 +3584,11 @@
          VG_(printf)("  sci:DW_CFA_GNU_window_save\n");
          break;
 
+      case DW_CFA_ORCL_arg_loc:
+         /* :TODO: Print all arguments when implemented in libdwarf. */
+         VG_(printf)("  sci:DW_CFA_ORCL_arg_loc\n");
+         break;
+
       default: 
          VG_(printf)("  sci:0:%d\n", (Int)lo6); 
          break;
@@ -3728,7 +3743,7 @@
 
    if (di->trace_cfi) {
       VG_(printf)("\n-----------------------------------------------\n");
-      VG_(printf)("CFI info: szB %lld, _avma %#lx\n",
+      VG_(printf)("CFI info: szB %llu, _avma %#lx\n",
                   escn_frame.szB, frame_avma );
       VG_(printf)("CFI info: name %s\n", di->fsm.filename );
    }
@@ -3776,11 +3791,11 @@
       ciefde_start = data;
       if (di->trace_cfi) 
          VG_(printf)("\ncie/fde.start   = (frame_image + 0x%llx)\n", 
-                     ML_(cur_minus)(ciefde_start, frame_image));
+                     (ULong)ML_(cur_minus)(ciefde_start, frame_image));
 
       ciefde_len = (ULong)ML_(cur_step_UInt)(&data);
       if (di->trace_cfi) 
-         VG_(printf)("cie/fde.length  = %lld\n", ciefde_len);
+         VG_(printf)("cie/fde.length  = %llu\n", ciefde_len);
 
       /* Apparently, if the .length field is zero, we are at the end
          of the sequence.  This is stated in the Generic Elf
@@ -3789,7 +3804,7 @@
       if (ciefde_len == 0) {
          if (di->ddump_frames)
             VG_(printf)("%08llx ZERO terminator\n\n",
-                        ML_(cur_minus)(ciefde_start, frame_image));
+                        (ULong)ML_(cur_minus)(ciefde_start, frame_image));
          return;
       }
 
@@ -3813,7 +3828,7 @@
       }
 
       if (di->trace_cfi) 
-         VG_(printf)("cie.pointer     = %lld\n", cie_pointer);
+         VG_(printf)("cie.pointer     = %llu\n", cie_pointer);
 
       /* If cie_pointer is zero for .eh_frame or all ones for .debug_frame,
          we've got a CIE; else it's an FDE. */
@@ -4008,6 +4023,7 @@
             adi.ehframe_image = frame_image;
             adi.ehframe_avma  = frame_avma;
             adi.text_bias     = di->text_debug_bias;
+            adi.got_avma      = di->got_avma;
             show_CF_instructions( the_CIEs[this_CIE].instrs, 
                                   the_CIEs[this_CIE].ilen, &adi,
                                   the_CIEs[this_CIE].code_a_f,
@@ -4043,7 +4059,7 @@
             look_for = cie_pointer;
 
          for (cie = 0; cie < n_CIEs; cie++) {
-            if (0) VG_(printf)("look for %lld   %lld\n",
+            if (0) VG_(printf)("look for %llu   %llu\n",
                                look_for, the_CIEs[cie].offset );
             if (the_CIEs[cie].offset == look_for)
                break;
@@ -4058,6 +4074,7 @@
          adi.ehframe_image = frame_image;
          adi.ehframe_avma  = frame_avma;
          adi.text_bias     = di->text_debug_bias;
+         adi.got_avma      = di->got_avma;
          fde_initloc = step_encoded_Addr(&adi, &data);
          if (di->trace_cfi) 
             VG_(printf)("fde.initloc     = %#lx\n", fde_initloc);
@@ -4066,6 +4083,7 @@
          adi.ehframe_image = frame_image;
          adi.ehframe_avma  = frame_avma;
          adi.text_bias     = di->text_debug_bias;
+         adi.got_avma      = di->got_avma;
 
          /* WAS (incorrectly):
             fde_arange = read_encoded_Addr(&nbytes, &adi, data);
@@ -4158,6 +4176,7 @@
          adi.ehframe_image = frame_image;
          adi.ehframe_avma  = frame_avma;
          adi.text_bias     = di->text_debug_bias;
+         adi.got_avma      = di->got_avma;
 
          if (di->trace_cfi)
             show_CF_instructions( fde_instrs, fde_ilen, &adi,
@@ -4214,7 +4233,7 @@
     return;
 }
 
-#endif // defined(VGO_linux) || defined(VGO_darwin)
+#endif // defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c
index 89f247a..cfc9e59 100644
--- a/coregrind/m_debuginfo/readdwarf3.c
+++ b/coregrind/m_debuginfo/readdwarf3.c
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks LLP
+   Copyright (C) 2008-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@
    without prior written permission.
 */
 
-#if defined(VGO_linux) || defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /* REFERENCE (without which this code will not make much sense):
 
@@ -671,7 +671,7 @@
    set_position_of_Cursor( &loc, debug_loc_offset );
 
    TRACE_D3("make_general_GX (.debug_loc_offset = %llu, ioff = %llu) {\n",
-            debug_loc_offset, (ULong)get_DiCursor_from_Cursor(&loc).ioff );
+            debug_loc_offset, get_DiCursor_from_Cursor(&loc).ioff );
 
    /* Who frees this xa?  It is freed before this fn exits. */
    xa = VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.mgGX.1", 
@@ -965,8 +965,8 @@
       VG_(memcpy) (ht_ta, ta, SZ_G_ABBV(ta_nf_n));
       VG_(HT_add_node) ( cc->ht_abbvs, ht_ta );
       if (TD3) {
-         TRACE_D3("  Adding abbv_code %llu TAG  %s [%s] nf %d ",
-                  (ULong) ht_ta->abbv_code, ML_(pp_DW_TAG)(ht_ta->atag),
+         TRACE_D3("  Adding abbv_code %lu TAG  %s [%s] nf %u ",
+                  ht_ta->abbv_code, ML_(pp_DW_TAG)(ht_ta->atag),
                   ML_(pp_DW_children)(ht_ta->has_children),
                   ta_nf_n);
          TRACE_D3("  ");
@@ -1019,7 +1019,7 @@
       = get_Initial_Length( &cc->is_dw64, c, 
            "parse_CU_Header: invalid initial-length field" );
 
-   TRACE_D3("   Length:        %lld\n", cc->unit_length );
+   TRACE_D3("   Length:        %llu\n", cc->unit_length );
 
    /* version */
    cc->version = get_UShort( c );
@@ -1031,7 +1031,7 @@
    debug_abbrev_offset = get_Dwarfish_UWord( c, cc->is_dw64 );
    if (debug_abbrev_offset >= escn_debug_abbv.szB)
       cc->barf( "parse_CU_Header: invalid debug_abbrev_offset" );
-   TRACE_D3("   Abbrev Offset: %lld\n", debug_abbrev_offset );
+   TRACE_D3("   Abbrev Offset: %llu\n", debug_abbrev_offset );
 
    /* address size.  If this isn't equal to the host word size, just
       give up.  This makes it safe to assume elsewhere that
@@ -1167,12 +1167,12 @@
       case DW_FORM_sdata:
          cts->u.val = (ULong)(Long)get_SLEB128(c);
          cts->szB   = 8;
-         TRACE_D3("%lld", (Long)cts->u.val);
+         TRACE_D3("%llu", cts->u.val);
          break;
       case DW_FORM_udata:
          cts->u.val = (ULong)(Long)get_ULEB128(c);
          cts->szB   = 8;
-         TRACE_D3("%llu", (Long)cts->u.val);
+         TRACE_D3("%llu", cts->u.val);
          break;
       case DW_FORM_addr:
          /* note, this is a hack.  DW_FORM_addr is defined as getting
@@ -1444,7 +1444,7 @@
 
       default:
          VG_(printf)(
-            "get_Form_contents: unhandled %d (%s) at <%llx>\n",
+            "get_Form_contents: unhandled %u (%s) at <%llx>\n",
             form, ML_(pp_DW_FORM)(form), get_position_of_Cursor(c));
          c->barf("get_Form_contents: unhandled DW_FORM");
    }
@@ -1526,7 +1526,7 @@
          return sizeof_Dwarfish_UWord(cc->is_dw64);
       default:
          VG_(printf)(
-            "get_Form_szB: unhandled %d (%s)\n",
+            "get_Form_szB: unhandled %u (%s)\n",
             form, ML_(pp_DW_FORM)(form));
          cc->barf("get_Form_contents: unhandled DW_FORM");
    }
@@ -1614,7 +1614,7 @@
          (DW_AT_subprogram), and for those, we also note the GExpr
          derived from its DW_AT_frame_base attribute, if any.
          Consequently it should be possible to find, for any
-         variable's DIE, the GExpr for the the containing function's
+         variable's DIE, the GExpr for the containing function's
          DW_AT_frame_base by scanning back through the stack to find
          the nearest entry associated with a function.  This somewhat
          elaborate scheme is provided so as to make it possible to
@@ -1923,7 +1923,7 @@
       else
          dirname = NULL;
       fndn_ix = ML_(addFnDn)( cc->di, str, dirname);
-      TRACE_D3("  read_filename_table: %ld fndn_ix %d %s %s\n",
+      TRACE_D3("  read_filename_table: %ld fndn_ix %u %s %s\n",
                VG_(sizeXA)(fndn_ix_Table), fndn_ix, 
                dirname, str);
       VG_(addToXA)( fndn_ix_Table, &fndn_ix );
@@ -2318,7 +2318,7 @@
                 && ftabIx < VG_(sizeXA)( parser->fndn_ix_Table )) {
                fndn_ix = *(UInt*)VG_(indexXA)( parser->fndn_ix_Table, ftabIx );
             }
-            if (0) VG_(printf)("XXX filename fndn_ix = %d %s\n", fndn_ix,
+            if (0) VG_(printf)("XXX filename fndn_ix = %u %s\n", fndn_ix,
                                ML_(fndn_ix2filename) (cc->di, fndn_ix));
          }
       }
@@ -2758,7 +2758,7 @@
                caller_fndn_ix = *(UInt*)
                           VG_(indexXA)( parser->fndn_ix_Table, ftabIx );
             }
-            if (0) VG_(printf)("XXX caller_fndn_ix = %d %s\n", caller_fndn_ix,
+            if (0) VG_(printf)("XXX caller_fndn_ix = %u %s\n", caller_fndn_ix,
                                ML_(fndn_ix2filename) (cc->di, caller_fndn_ix));
          }  
          if (attr == DW_AT_call_line && cts.szB > 0) {
@@ -3411,7 +3411,7 @@
       if (is_decl && (!is_spec)) {
          /* It's a DW_AT_declaration.  We require the name but
             nothing else. */
-         /* JRS 2012-06-28: following discussion w/ tromey, if the the
+         /* JRS 2012-06-28: following discussion w/ tromey, if the
             type doesn't have name, just make one up, and accept it.
             It might be referred to by other DIEs, so ignoring it
             doesn't seem like a safe option. */
@@ -4590,8 +4590,9 @@
          cu_offset_now = (cu_start_offset + cc.unit_length
                           + (cc.is_dw64 ? 12 : 4));
 
+         clear_CUConst ( &cc);
+
          if (cu_offset_now >= escn_debug_types.szB) {
-            clear_CUConst ( &cc);
             break;
          }
 
@@ -4769,7 +4770,7 @@
          /* .. vs how big we have found it to be */
          cu_amount_used = cu_offset_now - cc.cu_start_offset;
 
-         if (1) TRACE_D3("offset now %lld, d-i-size %lld\n",
+         if (1) TRACE_D3("offset now %llu, d-i-size %llu\n",
                          cu_offset_now, section_size);
          if (cu_offset_now > section_size)
             barf("toplevel DIEs beyond end of CU");
@@ -4962,7 +4963,7 @@
             } else {
                VG_(printf)("  FrB=none\n");
             }
-            VG_(printf)("  declared at: %d %s:%d\n",
+            VG_(printf)("  declared at: %u %s:%d\n",
                         varp->fndn_ix,
                         ML_(fndn_ix2filename) (di, varp->fndn_ix),
                         varp->fLine );
@@ -5268,7 +5269,7 @@
    TRACE_SYMTAB("\n");
 #endif
 
-#endif // defined(VGO_linux) || defined(VGO_darwin)
+#endif // defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c
index fda4161..9e239b0 100644
--- a/coregrind/m_debuginfo/readelf.c
+++ b/coregrind/m_debuginfo/readelf.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 
 #include "pub_core_basics.h"
 #include "pub_core_vki.h"
@@ -54,6 +54,9 @@
 
 /* --- !!! --- EXTERNAL HEADERS start --- !!! --- */
 #include <elf.h>
+#if defined(VGO_solaris)
+#include <sys/link.h>              /* ElfXX_Dyn, DT_* */
+#endif
 /* --- !!! --- EXTERNAL HEADERS end --- !!! --- */
 
 /*------------------------------------------------------------*/
@@ -754,7 +757,7 @@
       return;
    }
 
-   TRACE_SYMTAB("\n--- Reading (ELF, standard) %s (%lld entries) ---\n",
+   TRACE_SYMTAB("\n--- Reading (ELF, standard) %s (%llu entries) ---\n",
                 tab_name, escn_symtab->szB/sizeof(ElfXX_Sym) );
 
    /* Perhaps should start at i = 1; ELF docs suggest that entry
@@ -884,7 +887,7 @@
       return;
    }
 
-   TRACE_SYMTAB("\n--- Reading (ELF, ppc64be-linux) %s (%lld entries) ---\n",
+   TRACE_SYMTAB("\n--- Reading (ELF, ppc64be-linux) %s (%llu entries) ---\n",
                 tab_name, escn_symtab->szB/sizeof(ElfXX_Sym) );
 
    oset = VG_(OSetGen_Create)( offsetof(TempSym,key), 
@@ -965,21 +968,21 @@
 
             if (modify_size && di->trace_symtab) {
                VG_(printf)("    modify (old sz %4d)    "
-                           " val %#010lx, toc %#010lx, sz %4d  %lld\n",
+                           " val %#010lx, toc %#010lx, sz %4d  %llu\n",
                            old_size,
                            prev->key.addr,
                            prev->tocptr,
-                           (Int)  prev->size, 
-                           (ULong)prev->key.name
+                           prev->size, 
+                           prev->key.name
                );
             }
             if (modify_tocptr && di->trace_symtab) {
                VG_(printf)("    modify (upd tocptr)     "
-                           " val %#010lx, toc %#010lx, sz %4d  %lld\n",
+                           " val %#010lx, toc %#010lx, sz %4d  %llu\n",
                            prev->key.addr,
                            prev->tocptr,
-                           (Int)  prev->size,
-                           (ULong)prev->key.name
+                           prev->size,
+                           prev->key.name
                );
             }
 
@@ -1594,20 +1597,20 @@
    TRACE_SYMTAB("------ Basic facts about the object ------\n");
    TRACE_SYMTAB("object:  n_oimage %llu\n",
                 (ULong)ML_(img_size)(mimg));
-   TRACE_SYMTAB("phdr:    ioff %llu nent %ld ent_szB %ld\n",
+   TRACE_SYMTAB("phdr:    ioff %llu nent %lu ent_szB %lu\n",
                phdr_mioff, phdr_mnent, phdr_ment_szB);
-   TRACE_SYMTAB("shdr:    ioff %llu nent %ld ent_szB %ld\n",
+   TRACE_SYMTAB("shdr:    ioff %llu nent %lu ent_szB %lu\n",
                shdr_mioff, shdr_mnent, shdr_ment_szB);
    for (i = 0; i < VG_(sizeXA)(di->fsm.maps); i++) {
       const DebugInfoMapping* map = VG_(indexXA)(di->fsm.maps, i);
       if (map->rx)
-         TRACE_SYMTAB("rx_map:  avma %#lx   size %lu  foff %lu\n",
+         TRACE_SYMTAB("rx_map:  avma %#lx   size %lu  foff %ld\n",
                       map->avma, map->size, map->foff);
    }
    for (i = 0; i < VG_(sizeXA)(di->fsm.maps); i++) {
       const DebugInfoMapping* map = VG_(indexXA)(di->fsm.maps, i);
       if (map->rw)
-         TRACE_SYMTAB("rw_map:  avma %#lx   size %lu  foff %lu\n",
+         TRACE_SYMTAB("rw_map:  avma %#lx   size %lu  foff %ld\n",
                       map->avma, map->size, map->foff);
    }
 
@@ -1708,7 +1711,7 @@
                         VG_(addToXA)(svma_ranges, &item);
                         TRACE_SYMTAB(
                            "PT_LOAD[%ld]:   acquired as rw, bias 0x%lx\n",
-                           i, item.bias);
+                           i, (UWord)item.bias);
                         loaded = True;
                      }
                      if (map->rx
@@ -1718,7 +1721,7 @@
                         VG_(addToXA)(svma_ranges, &item);
                         TRACE_SYMTAB(
                            "PT_LOAD[%ld]:   acquired as rx, bias 0x%lx\n",
-                           i, item.bias);
+                           i, (UWord)item.bias);
                         loaded = True;
                      }
                   }
@@ -1808,7 +1811,7 @@
    for (i = 0; i < VG_(sizeXA)(di->fsm.maps); i++) {
       const DebugInfoMapping* map = VG_(indexXA)(di->fsm.maps, i);
       if (map->rx)
-         TRACE_SYMTAB("rx: at %#lx are mapped foffsets %ld .. %ld\n",
+         TRACE_SYMTAB("rx: at %#lx are mapped foffsets %ld .. %lu\n",
                       map->avma, map->foff, map->foff + map->size - 1 );
    }
    TRACE_SYMTAB("rx: contains these svma regions:\n");
@@ -1816,12 +1819,12 @@
       const RangeAndBias* reg = VG_(indexXA)(svma_ranges, i);
       if (reg->exec)
          TRACE_SYMTAB("  svmas %#lx .. %#lx with bias %#lx\n",
-                      reg->svma_base, reg->svma_limit - 1, reg->bias );
+                      reg->svma_base, reg->svma_limit - 1, (UWord)reg->bias );
    }
    for (i = 0; i < VG_(sizeXA)(di->fsm.maps); i++) {
       const DebugInfoMapping* map = VG_(indexXA)(di->fsm.maps, i);
       if (map->rw)
-         TRACE_SYMTAB("rw: at %#lx are mapped foffsets %ld .. %ld\n",
+         TRACE_SYMTAB("rw: at %#lx are mapped foffsets %ld .. %lu\n",
                       map->avma, map->foff, map->foff + map->size - 1 );
    }
    TRACE_SYMTAB("rw: contains these svma regions:\n");
@@ -1829,7 +1832,7 @@
       const RangeAndBias* reg = VG_(indexXA)(svma_ranges, i);
       if (!reg->exec)
          TRACE_SYMTAB("  svmas %#lx .. %#lx with bias %#lx\n",
-                      reg->svma_base, reg->svma_limit - 1, reg->bias );
+                      reg->svma_base, reg->svma_limit - 1, (UWord)reg->bias );
    }
 
    /* TOPLEVEL */
@@ -1844,7 +1847,7 @@
       OffT   foff = a_shdr.sh_offset;
       UWord  size = a_shdr.sh_size; /* Do not change this to be signed. */
       UInt   alyn = a_shdr.sh_addralign;
-      Bool   bits = !(a_shdr.sh_type == SHT_NOBITS);
+      Bool   nobits = a_shdr.sh_type == SHT_NOBITS;
       /* Look through our collection of info obtained from the PT_LOAD
          headers, and make 'inrx' and 'inrw' point to the first entry
          in each that intersects 'avma'.  If in each case none is found,
@@ -1864,15 +1867,15 @@
          }
       }
 
-      TRACE_SYMTAB(" [sec %2ld]  %s %s  al%2u  foff %6ld .. %6ld  "
+      TRACE_SYMTAB(" [sec %2ld]  %s %s  al%2u  foff %6ld .. %6lu  "
                    "  svma %p  name \"%s\"\n", 
                    i, inrx ? "rx" : "  ", inrw ? "rw" : "  ", alyn,
                    foff, foff+size-1, (void*)svma, name);
 
       /* Check for sane-sized segments.  SHT_NOBITS sections have zero
-         size in the file. */
-      if ((foff >= ML_(img_size)(mimg)) 
-          || (foff + (bits ? size : 0) > ML_(img_size)(mimg))) {
+         size in the file and their offsets are just conceptual. */
+      if (!nobits &&
+          (foff >= ML_(img_size)(mimg) || foff + size > ML_(img_size)(mimg))) {
          ML_(symerr)(di, True, "ELF Section extends beyond image end");
          goto out;
       }
@@ -1921,7 +1924,7 @@
             TRACE_SYMTAB("acquiring .text avma = %#lx .. %#lx\n",
                          di->text_avma, 
                          di->text_avma + di->text_size - 1);
-            TRACE_SYMTAB("acquiring .text bias = %#lx\n", di->text_bias);
+            TRACE_SYMTAB("acquiring .text bias = %#lx\n", (UWord)di->text_bias);
          } else {
             BAD(".text");
          }
@@ -1943,7 +1946,7 @@
             TRACE_SYMTAB("acquiring .data avma = %#lx .. %#lx\n",
                          di->data_avma,
                          di->data_avma + di->data_size - 1);
-            TRACE_SYMTAB("acquiring .data bias = %#lx\n", di->data_bias);
+            TRACE_SYMTAB("acquiring .data bias = %#lx\n", (UWord)di->data_bias);
          } else {
             BAD(".data");
          }
@@ -1965,7 +1968,8 @@
             TRACE_SYMTAB("acquiring .sdata avma = %#lx .. %#lx\n",
                          di->sdata_avma,
                          di->sdata_avma + di->sdata_size - 1);
-            TRACE_SYMTAB("acquiring .sdata bias = %#lx\n", di->sdata_bias);
+            TRACE_SYMTAB("acquiring .sdata bias = %#lx\n",
+                         (UWord)di->sdata_bias);
          } else {
             BAD(".sdata");
          }
@@ -1988,7 +1992,8 @@
             TRACE_SYMTAB("acquiring .rodata avma = %#lx .. %#lx\n",
                          di->rodata_avma,
                          di->rodata_avma + di->rodata_size - 1);
-            TRACE_SYMTAB("acquiring .rodata bias = %#lx\n", di->rodata_bias);
+            TRACE_SYMTAB("acquiring .rodata bias = %#lx\n",
+                         (UWord)di->rodata_bias);
          } else {
             BAD(".rodata");
          }
@@ -2010,7 +2015,8 @@
             TRACE_SYMTAB("acquiring .dynbss avma = %#lx .. %#lx\n",
                          di->bss_avma,
                          di->bss_avma + di->bss_size - 1);
-            TRACE_SYMTAB("acquiring .dynbss bias = %#lx\n", di->bss_bias);
+            TRACE_SYMTAB("acquiring .dynbss bias = %#lx\n",
+                         (UWord)di->bss_bias);
          }
       }
 
@@ -2025,7 +2031,8 @@
                          svma, svma + size - 1);
             TRACE_SYMTAB("acquiring .bss avma = %#lx .. %#lx\n",
                          svma + inrw->bias, svma + inrw->bias + size - 1);
-            TRACE_SYMTAB("acquiring .bss bias = %#lx\n", di->bss_bias);
+            TRACE_SYMTAB("acquiring .bss bias = %#lx\n",
+                         (UWord)di->bss_bias);
          } else
 
          if (inrw && !di->bss_present) {
@@ -2042,7 +2049,8 @@
             TRACE_SYMTAB("acquiring .bss avma = %#lx .. %#lx\n",
                          di->bss_avma,
                          di->bss_avma + di->bss_size - 1);
-            TRACE_SYMTAB("acquiring .bss bias = %#lx\n", di->bss_bias);
+            TRACE_SYMTAB("acquiring .bss bias = %#lx\n",
+                         (UWord)di->bss_bias);
          } else
 
          /* Now one from the wtf?! department ... */
@@ -2095,7 +2103,8 @@
             TRACE_SYMTAB("acquiring .sdynbss avma = %#lx .. %#lx\n",
                          di->sbss_avma,
                          di->sbss_avma + di->sbss_size - 1);
-            TRACE_SYMTAB("acquiring .sdynbss bias = %#lx\n", di->sbss_bias);
+            TRACE_SYMTAB("acquiring .sdynbss bias = %#lx\n",
+                         (UWord)di->sbss_bias);
          }
       }
 
@@ -2110,7 +2119,7 @@
                          svma, svma + size - 1);
             TRACE_SYMTAB("acquiring .sbss avma = %#lx .. %#lx\n",
                          svma + inrw->bias, svma + inrw->bias + size - 1);
-            TRACE_SYMTAB("acquiring .sbss bias = %#lx\n", di->sbss_bias);
+            TRACE_SYMTAB("acquiring .sbss bias = %#lx\n", (UWord)di->sbss_bias);
          } else
 
          if (inrw && !di->sbss_present) {
@@ -2127,7 +2136,7 @@
             TRACE_SYMTAB("acquiring .sbss avma = %#lx .. %#lx\n",
                          di->sbss_avma,
                          di->sbss_avma + di->sbss_size - 1);
-            TRACE_SYMTAB("acquiring .sbss bias = %#lx\n", di->sbss_bias);
+            TRACE_SYMTAB("acquiring .sbss bias = %#lx\n", (UWord)di->sbss_bias);
          } else {
             BAD(".sbss");
          }
@@ -2161,7 +2170,8 @@
 #     if defined(VGP_x86_linux) || defined(VGP_amd64_linux) \
          || defined(VGP_arm_linux) || defined (VGP_s390x_linux) \
          || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \
-         || defined(VGP_arm64_linux) || defined(VGP_tilegx_linux)
+         || defined(VGP_arm64_linux) || defined(VGP_tilegx_linux) \
+         || defined(VGP_x86_solaris) || defined(VGP_amd64_solaris)
       /* Accept .plt where mapped as rx (code) */
       if (0 == VG_(strcmp)(name, ".plt")) {
          if (inrx && !di->plt_present) {
@@ -2260,7 +2270,8 @@
             TRACE_SYMTAB("acquiring .exidx avma = %#lx .. %#lx\n",
                          di->exidx_avma, 
                          di->exidx_avma + di->exidx_size - 1);
-            TRACE_SYMTAB("acquiring .exidx bias = %#lx\n", di->exidx_bias);
+            TRACE_SYMTAB("acquiring .exidx bias = %#lx\n",
+                         (UWord)di->exidx_bias);
          } else {
             BAD(".ARM.exidx");
          }
@@ -2282,7 +2293,8 @@
             TRACE_SYMTAB("acquiring .extab avma = %#lx .. %#lx\n",
                          di->extab_avma, 
                          di->extab_avma + di->extab_size - 1);
-            TRACE_SYMTAB("acquiring .extab bias = %#lx\n", di->extab_bias);
+            TRACE_SYMTAB("acquiring .extab bias = %#lx\n",
+                         (UWord)di->extab_bias);
          } else {
             BAD(".ARM.extab");
          }
@@ -2295,8 +2307,8 @@
    } /* iterate over the section headers */
 
    /* TOPLEVEL */
-   if (0) VG_(printf)("YYYY text_: avma %#lx  size %ld  bias %#lx\n",
-                      di->text_avma, di->text_size, di->text_bias);
+   if (0) VG_(printf)("YYYY text_: avma %#lx  size %lu  bias %#lx\n",
+                      di->text_avma, di->text_size, (UWord)di->text_bias);
 
    if (VG_(clo_verbosity) > 2 || VG_(clo_trace_redir))
       VG_(message)(Vg_DebugMsg, "   svma %#010lx, avma %#010lx\n",
@@ -2323,6 +2335,9 @@
       DiSlice symtab_escn         = DiSlice_INVALID; // .symtab
       DiSlice dynstr_escn         = DiSlice_INVALID; // .dynstr
       DiSlice dynsym_escn         = DiSlice_INVALID; // .dynsym
+#     if defined(VGO_solaris)
+      DiSlice ldynsym_escn        = DiSlice_INVALID; // .SUNW_ldynsym
+#     endif
       DiSlice debuglink_escn      = DiSlice_INVALID; // .gnu_debuglink
       DiSlice debugaltlink_escn   = DiSlice_INVALID; // .gnu_debugaltlink
       DiSlice debug_line_escn     = DiSlice_INVALID; // .debug_line   (dwarf2)
@@ -2385,8 +2400,8 @@
                              _sec_name, (ULong)_sec_escn.ioff, \
                              ((ULong)_sec_escn.ioff) + _sec_escn.szB - 1); \
                /* SHT_NOBITS sections have zero size in the file. */ \
-               if ( a_shdr.sh_offset \
-                    + (nobits ? 0 : _sec_escn.szB) > ML_(img_size)(mimg) ) { \
+               if (!nobits && \
+                   a_shdr.sh_offset + _sec_escn.szB > ML_(img_size)(mimg) ) { \
                   ML_(symerr)(di, True, \
                               "   section beyond image end?!"); \
                   goto out; \
@@ -2404,6 +2419,9 @@
          FIND(".dynstr",            dynstr_escn)
          FIND(".symtab",            symtab_escn)
          FIND(".strtab",            strtab_escn)
+#        if defined(VGO_solaris)
+         FIND(".SUNW_ldynsym",      ldynsym_escn)
+#        endif
 
          FIND(".gnu_debuglink",     debuglink_escn)
          FIND(".gnu_debugaltlink",  debugaltlink_escn)
@@ -2636,7 +2654,7 @@
                                di->_sec##_debug_svma, \
                                di->_sec##_debug_svma + di->_sec##_size - 1); \
                   TRACE_SYMTAB("acquiring ." #_sec " debug bias = %#lx\n", \
-                               di->_sec##_debug_bias); \
+                               (UWord)di->_sec##_debug_bias);           \
                } \
             } while (0);
 
@@ -2680,8 +2698,8 @@
                                 (ULong)_sec_escn.ioff, \
                                 ((ULong)_sec_escn.ioff) + _sec_escn.szB - 1); \
                   /* SHT_NOBITS sections have zero size in the file. */ \
-                  if (a_shdr.sh_offset \
-                      + (nobits ? 0 : _sec_escn.szB) > ML_(img_size)(dimg)) { \
+                  if (!nobits && a_shdr.sh_offset \
+                      + _sec_escn.szB > ML_(img_size)(dimg)) { \
                      ML_(symerr)(di, True, \
                                  "   section beyond image end?!"); \
                      goto out; \
@@ -2840,6 +2858,9 @@
       /* Check some sizes */
       vg_assert((dynsym_escn.szB % sizeof(ElfXX_Sym)) == 0);
       vg_assert((symtab_escn.szB % sizeof(ElfXX_Sym)) == 0);
+#     if defined(VGO_solaris)
+      vg_assert((ldynsym_escn.szB % sizeof(ElfXX_Sym)) == 0);
+#     endif
 
       /* TOPLEVEL */
       /* Read symbols */
@@ -2859,6 +2880,11 @@
          read_elf_symtab(di, "dynamic symbol table",
                          &dynsym_escn, &dynstr_escn, &opd_escn,
                          False);
+#        if defined(VGO_solaris)
+         read_elf_symtab(di, "local dynamic symbol table",
+                         &ldynsym_escn, &dynstr_escn, &opd_escn,
+                         False);
+#        endif
       }
 
       /* TOPLEVEL */
@@ -2990,7 +3016,7 @@
             }
          }
       }
-      VG_(umsg)("VARINFO: %7lu vars   %7ld text_size   %s\n",
+      VG_(umsg)("VARINFO: %7lu vars   %7lu text_size   %s\n",
                 nVars, di->text_size, di->fsm.filename);
    }
    /* TOPLEVEL */
@@ -3010,7 +3036,7 @@
    /* NOTREACHED */
 }
 
-#endif // defined(VGO_linux)
+#endif // defined(VGO_linux) || defined(VGO_solaris)
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_debuginfo/readexidx.c b/coregrind/m_debuginfo/readexidx.c
index 727deb3..06a9a5f 100644
--- a/coregrind/m_debuginfo/readexidx.c
+++ b/coregrind/m_debuginfo/readexidx.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Mozilla Foundation
+   Copyright (C) 2014-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -205,7 +205,7 @@
 
 
 /* Helper function for fishing bits out of the EXIDX representation. */
-static void* Prel31ToAddr(const void* addr)
+static const void* Prel31ToAddr(const void* addr)
 {
    UInt offset32 = *(const UInt*)addr;
    // sign extend offset32[30:0] to 64 bits -- copy bit 30 to positions
@@ -215,7 +215,7 @@
       offset64 |= 0xFFFFFFFF80000000ULL;
    else
       offset64 &= 0x000000007FFFFFFFULL;
-   return ((UChar*)addr) + (UWord)offset64;
+   return ((const UChar*)addr) + (UWord)offset64;
 }
 
 
@@ -242,9 +242,9 @@
            buf[(*buf_used)++] = (_byte); } while (0)
 
 #  define GET_EX_U32(_lval, _addr, _mr) \
-      do { if (!MemoryRange__covers((_mr), (void*)(_addr), 4)) \
+      do { if (!MemoryRange__covers((_mr), (const void*)(_addr), 4)) \
               return ExInBufOverflow; \
-           (_lval) = *(UInt*)(_addr); } while (0)
+           (_lval) = *(const UInt*)(_addr); } while (0)
 
 #  define GET_EXIDX_U32(_lval, _addr) \
       GET_EX_U32(_lval, _addr, mr_exidx)
@@ -263,7 +263,7 @@
    UInt  pers;          // personality number
    UInt  extra;         // number of extra data words required
    UInt  extra_allowed; // number of extra data words allowed
-   UInt* extbl_data;    // the handler entry, if not inlined
+   const UInt* extbl_data;    // the handler entry, if not inlined
 
    if (data & ARM_EXIDX_COMPACT) {
       // The handler table entry has been inlined into the index table entry.
@@ -283,11 +283,11 @@
       // The index table entry is a pointer to the handler entry.  Note
       // that Prel31ToAddr will read the given address, but we already
       // range-checked above.
-      extbl_data = (UInt*)(Prel31ToAddr(&entry->data));
+      extbl_data = Prel31ToAddr(&entry->data);
       GET_EXTAB_U32(data, extbl_data);
       if (!(data & ARM_EXIDX_COMPACT)) {
          // This denotes a "generic model" handler.  That will involve
-         // executing arbitary machine code, which is something we
+         // executing arbitrary machine code, which is something we
          // can't represent here; hence reject it.
          return ExCantRepresent;
       }
@@ -299,9 +299,9 @@
       extbl_data++;
    }
 
-   // Now look at the the handler table entry.  The first word is
-   // |data| and subsequent words start at |*extbl_data|.  The number
-   // of extra words to use is |extra|, provided that the personality
+   // Now look at the handler table entry.  The first word is |data|
+   // and subsequent words start at |*extbl_data|.  The number of
+   // extra words to use is |extra|, provided that the personality
    // allows extra words.  Even if it does, none may be available --
    // extra_allowed is the maximum number of extra words allowed. */
    if (pers == 0) {
@@ -554,7 +554,7 @@
 
       if (0)
          VG_(printf)("  edata:  cmd %08x  data %08x\n",
-                     (UInt)edata.cmd, (UInt)edata.data);
+                     (UInt)edata.cmd, edata.data);
 
       Int ret = TranslateCmd ( state, &edata );
       if (ret < 0) return ret;
@@ -673,7 +673,7 @@
       default:
          break;
    }
-   VG_(printf)("setCFAfromCFIR: FAIL: how %d off %d\n", (Int)how, (Int)off);
+   VG_(printf)("setCFAfromCFIR: FAIL: how %d off %d\n", how, off);
    vg_assert(0);
    return False;
 }
@@ -941,7 +941,7 @@
       VG_(printf)("BEGIN ML_(read_exidx) exidx_img=[%p, +%lu) "
                   "extab_img=[%p, +%lu) text_last_svma=%lx text_bias=%lx\n",
                   exidx_img, exidx_size, extab_img, extab_size,
-                  text_last_svma, text_bias);
+                  text_last_svma, (UWord)text_bias);
    Bool ok;
    MemoryRange mr_exidx, mr_extab;
    ok =       MemoryRange__init(&mr_exidx, exidx_img, exidx_size);
@@ -970,8 +970,8 @@
       // associated with.
       Addr avma = (Addr)Prel31ToAddr(&entry_img->addr);
       if (di->trace_cfi)
-         VG_(printf)("XXX1 entry: entry->addr 0x%lx, avma 0x%lx\n",
-                     (UWord)entry_img->addr, avma);
+         VG_(printf)("XXX1 entry: entry->addr 0x%x, avma 0x%lx\n",
+                     entry_img->addr, avma);
 
       Addr next_avma;
       if (entry_img < end_img - 1) {
@@ -1006,8 +1006,8 @@
          if (!plausible && avma != text_last_avma + 1) {
             HChar buf[100];
             VG_(snprintf)(buf, sizeof(buf),
-                          "Implausible EXIDX last entry size %u"
-                          "; using 1 instead.", (UInt)(text_last_avma - avma));
+                          "Implausible EXIDX last entry size %lu"
+                          "; using 1 instead.", text_last_avma - avma);
             buf[sizeof(buf)-1] = 0;
             complain(buf);
          }
diff --git a/coregrind/m_debuginfo/readmacho.c b/coregrind/m_debuginfo/readmacho.c
index f359d57..98ab048 100644
--- a/coregrind/m_debuginfo/readmacho.c
+++ b/coregrind/m_debuginfo/readmacho.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Apple Inc.
+   Copyright (C) 2005-2015 Apple Inc.
       Greg Parker gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -392,8 +392,8 @@
    the primary name as a secondary sort key. */
 static Int cmp_DiSym_by_start_then_name ( const void* v1, const void* v2 )
 {
-   const DiSym* s1 = (DiSym*)v1;
-   const DiSym* s2 = (DiSym*)v2;
+   const DiSym* s1 = (const DiSym*)v1;
+   const DiSym* s2 = (const DiSym*)v2;
    if (s1->avmas.main < s2->avmas.main) return -1;
    if (s1->avmas.main > s2->avmas.main) return 1;
    return VG_(strcmp)(s1->pri_name, s2->pri_name);
diff --git a/coregrind/m_debuginfo/readpdb.c b/coregrind/m_debuginfo/readpdb.c
index 3a0d422..8b63e95 100644
--- a/coregrind/m_debuginfo/readpdb.c
+++ b/coregrind/m_debuginfo/readpdb.c
@@ -11,7 +11,7 @@
       derived from readelf.c and valgrind-20031012-wine/vg_symtab2.c
       derived from wine-1.0/tools/winedump/pdb.c and msc.c
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
    Copyright 2006 Eric Pouech (winedump/pdb.c and msc.c)
       GNU Lesser General Public License version 2.1 or later applies.
@@ -35,7 +35,7 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
-#if defined(VGO_linux) || defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 #include "pub_core_basics.h"
 #include "pub_core_debuginfo.h"
@@ -1113,7 +1113,7 @@
 static 
 void pdb_check_root_version_and_timestamp( const HChar* pdbname,
                                            ULong  pdbmtime,
-                                           unsigned  version,
+                                           UInt  version,
                                            UInt TimeDateStamp )
 {
    switch ( version ) {
@@ -1126,7 +1126,7 @@
       default:
          if (VG_(clo_verbosity) > 1)
             VG_(umsg)("LOAD_PDB_DEBUGINFO: "
-                      "Unknown .pdb root block version %d\n", version );
+                      "Unknown .pdb root block version %u\n", version );
    }
    if ( TimeDateStamp != pdbmtime ) {
       if (VG_(clo_verbosity) > 1)
@@ -1238,9 +1238,9 @@
 
       default:
          if (0) {
-            const int *isym = (const int *)sym;
+            const UInt *isym = (const UInt *)sym;
             VG_(printf)("unknown id 0x%x len=0x%x at %p\n",
-                        sym->generic.id, sym->generic.len, sym);
+                        (UInt)sym->generic.id, (UInt)sym->generic.len, sym);
             VG_(printf)("  %8x  %8x  %8x  %8x\n", 
                         isym[1], isym[2], isym[3], isym[4]);
             VG_(printf)("  %8x  %8x  %8x  %8x\n",
@@ -1366,7 +1366,7 @@
          vsym.isText    = True;
          vsym.isIFunc   = False;
          if (debug)
-            VG_(umsg)("  Adding function %s addr=%#lx length=%d\n",
+            VG_(umsg)("  Adding function %s addr=%#lx length=%u\n",
                       symname, vsym.avmas.main, vsym.size );
          ML_(addSym)( di, &vsym );
          n_syms_read++;
@@ -1387,7 +1387,7 @@
          vsym.isText    = True;
          vsym.isIFunc   = False;
          if (debug)
-            VG_(umsg)("  Adding function %s addr=%#lx length=%d\n",
+            VG_(umsg)("  Adding function %s addr=%#lx length=%u\n",
                       symname, vsym.avmas.main, vsym.size );
          ML_(addSym)( di, &vsym );
          n_syms_read++;
@@ -1756,7 +1756,7 @@
 
       for (i = 0; i < lbh->nlines; i++) {
          if (debug)
-            VG_(printf)("%s  offset=%08x line=%d\n",
+            VG_(printf)("%s  offset=%08x line=%u\n",
                         pfx, lbh->l[i].offset, lbh->l[i].lineno ^ 0x80000000);
       }
 
@@ -1767,7 +1767,7 @@
             svma_e = sectp[lbh->seg - 1].VirtualAddress + lbh->start
                      + lbh->l[i+1].offset-1;
             if (debug)
-               VG_(printf)("%s  line %d: %08lx to %08lx\n",
+               VG_(printf)("%s  line %u: %08lx to %08lx\n",
                            pfx, lbh->l[i].lineno ^ 0x80000000, svma_s, svma_e);
             ML_(addLineInfo)( di, 
                               filedirname_ix,
@@ -1781,7 +1781,7 @@
          svma_e = sectp[lbh->seg - 1].VirtualAddress + lbh->start
                   + lbh->size - 1;
          if (debug)
-            VG_(printf)("%s  line %d: %08lx to %08lx\n",
+            VG_(printf)("%s  line %u: %08lx to %08lx\n",
                         pfx, lbh->l[ lbh->nlines-1  ].lineno ^ 0x80000000,
                         svma_s, svma_e);
           ML_(addLineInfo)( di, 
@@ -2099,7 +2099,7 @@
       default:
          if (VG_(clo_verbosity) > 1)
             VG_(umsg)("LOAD_PDB_DEBUGINFO: "
-                      "Unknown .pdb type info version %ld\n", types.version );
+                      "Unknown .pdb type info version %lu\n", types.version );
    }
 
    header_size = 0;
@@ -2113,7 +2113,7 @@
       default:
          if (VG_(clo_verbosity) > 1)
             VG_(umsg)("LOAD_PDB_DEBUGINFO: "
-                      "Unknown .pdb symbol info version %ld\n",
+                      "Unknown .pdb symbol info version %lu\n",
                       symbols.version );
    }
 
@@ -2384,21 +2384,21 @@
          const DebugInfoMapping* map = VG_(indexXA)(di->fsm.maps, i);
          if (map->rx)
             VG_(dmsg)("LOAD_PDB_DEBUGINFO: "
-                      "rx_map: avma %#lx size %7lu foff %llu\n",
-                      map->avma, map->size, (Off64T)map->foff);
+                      "rx_map: avma %#lx size %7lu foff %lld\n",
+                      map->avma, map->size, (Long)map->foff);
       }
       for (i = 0; i < VG_(sizeXA)(di->fsm.maps); i++) {
          const DebugInfoMapping* map = VG_(indexXA)(di->fsm.maps, i);
          if (map->rw)
             VG_(dmsg)("LOAD_PDB_DEBUGINFO: "
-                      "rw_map: avma %#lx size %7lu foff %llu\n",
-                      map->avma, map->size, (Off64T)map->foff);
+                      "rw_map: avma %#lx size %7lu foff %lld\n",
+                      map->avma, map->size, (Long)map->foff);
       }
 
       VG_(dmsg)("LOAD_PDB_DEBUGINFO: "
                 "  text: avma %#lx svma %#lx size %7lu bias %#lx\n",
                 di->text_avma, di->text_svma,
-                di->text_size, di->text_bias);
+                di->text_size, (UWord)di->text_bias);
    }
 
    /*
@@ -2503,8 +2503,8 @@
       sh -c "strings (pename) | egrep '\.pdb$|\.PDB$' > (tmpname)"
    */
    const HChar* sh      = "/bin/sh";
-   const HChar* strings = "/usr/bin/strings";
-   const HChar* egrep   = "/usr/bin/egrep";
+   const HChar* strings = "strings";
+   const HChar* egrep   = "grep -E";
 
    /* (sh) -c "(strings) (pename) | (egrep) 'pdb' > (tmpname) */
    Int cmdlen = VG_(strlen)(strings) + VG_(strlen)(pename)
@@ -2584,7 +2584,7 @@
    return res;
 }
 
-#endif // defined(VGO_linux) || defined(VGO_darwin)
+#endif // defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_debuginfo/storage.c b/coregrind/m_debuginfo/storage.c
index 926a13f..45bc135 100644
--- a/coregrind/m_debuginfo/storage.c
+++ b/coregrind/m_debuginfo/storage.c
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@
 
 /* This file manages the data structures built by the debuginfo
    system.  These are: the top level SegInfo list.  For each SegInfo,
-   there are tables for for address-to-symbol mappings,
+   there are tables for address-to-symbol mappings,
    address-to-src-file/line mappings, and address-to-CFI-info
    mappings.
 */
@@ -98,7 +98,7 @@
    vg_assert(sym->pri_name);
    if (sec_names)
       vg_assert(sec_names);
-   VG_(printf)( "%5d:  %c%c %#8lx .. %#8lx (%d)      %s%s",
+   VG_(printf)( "%5d:  %c%c %#8lx .. %#8lx (%u)      %s%s",
                 idx,
                 sym->isText ? 'T' : '-',
                 sym->isIFunc ? 'I' : '-',
@@ -142,8 +142,11 @@
          }                                       \
       } while (0)
 
-   VG_(printf)("[%#lx .. %#lx]: ", base,
-                                   base + (UWord)len - 1);
+   if (base != 0 || len != 0)
+      VG_(printf)("[%#lx .. %#lx]: ", base, base + len - 1);
+   else
+      VG_(printf)("[]: ");
+
    switch (si_m->cfa_how) {
       case CFIC_IA_SPREL: 
          VG_(printf)("let cfa=oldSP+%d", si_m->cfa_off); 
@@ -534,7 +537,18 @@
        return;
    }
 
-   vg_assert(lineno >= 0);
+   if (lineno < 0) {
+      static Bool complained = False;
+      if (!complained) {
+         complained = True;
+         VG_(message)(Vg_UserMsg, 
+                      "warning: ignoring line info entry with "
+                      "negative line number (%d)\n", lineno);
+         VG_(message)(Vg_UserMsg, 
+                      "(Nb: this message is only shown once)\n");
+      }
+      return;
+   }
    if (lineno > MAX_LINENO) {
       static Bool complained = False;
       if (!complained) {
@@ -654,7 +668,7 @@
    if (0) VG_(message)
              (Vg_DebugMsg, 
               "addInlInfo: fn %s inlined as addr_lo %#lx,addr_hi %#lx,"
-              "caller fndn_ix %d %s:%d\n",
+              "caller fndn_ix %u %s:%d\n",
               inlinedfn, addr_lo, addr_hi, fndn_ix,
               ML_(fndn_ix2filename) (di, fndn_ix), lineno);
 
@@ -1000,7 +1014,7 @@
    while (True) {
       range = VG_(OSetGen_Next)( scope );
       if (!range) break;
-      VG_(printf)("   %#lx .. %#lx: %lu vars\n", range->aMin, range->aMax,
+      VG_(printf)("   %#lx .. %#lx: %ld vars\n", range->aMin, range->aMax,
                   range->vars ? VG_(sizeXA)(range->vars) : 0);
    }
    VG_(printf)("}\n");
@@ -1453,7 +1467,7 @@
    vlena = VG_(strlen)(a_name);
    vlenb = VG_(strlen)(b_name);
 
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
 #    define VERSION_CHAR '@'
 #  elif defined(VGO_darwin)
 #    define VERSION_CHAR '$'
@@ -2015,7 +2029,7 @@
    /* Ensure relevant postconditions hold. */
    for (i = 0; i < ((Word)di->loctab_used)-1; i++) {
       if (0)
-         VG_(printf)("%lu  0x%p  lno:%d sz:%d fndn_ix:%d  i+1 0x%p\n", 
+         VG_(printf)("%ld  0x%p  lno:%d sz:%d fndn_ix:%u  i+1 0x%p\n", 
                      i,
                      (void*)di->loctab[i].addr,
                      di->loctab[i].lineno, 
@@ -2147,9 +2161,9 @@
    }
 
    if (di->trace_cfi)
-      VG_(printf)("canonicaliseCfiSI: %ld entries, %#lx .. %#lx\n",
+      VG_(printf)("canonicaliseCfiSI: %lu entries, %#lx .. %#lx\n",
                   di->cfsi_used,
-	          di->cfsi_minavma, di->cfsi_maxavma);
+                  di->cfsi_minavma, di->cfsi_maxavma);
 
    /* Sort the cfsi_rd array by base address. */
    VG_(ssort)(di->cfsi_rd, di->cfsi_used, sizeof(*di->cfsi_rd), compare_DiCfSI);
diff --git a/coregrind/m_debuginfo/tytypes.c b/coregrind/m_debuginfo/tytypes.c
index 1ee62f9..839e546 100644
--- a/coregrind/m_debuginfo/tytypes.c
+++ b/coregrind/m_debuginfo/tytypes.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks LLP
+   Copyright (C) 2008-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -104,7 +104,7 @@
                         te->Te.Field.typeR, te->Te.Field.pos.offset,
                         te->Te.Field.name ? te->Te.Field.name : "");
          else
-            VG_(printf)("Te_Field(ty=0x%05lx,nLoc=%lu,pos.loc=%p,\"%s\")",
+            VG_(printf)("Te_Field(ty=0x%05lx,nLoc=%ld,pos.loc=%p,\"%s\")",
                         te->Te.Field.typeR, te->Te.Field.nLoc,
                         te->Te.Field.pos.loc,
                         te->Te.Field.name ? te->Te.Field.name : "");
@@ -152,7 +152,7 @@
          break;
       case Te_TyStOrUn:
          if (te->Te.TyStOrUn.complete) {
-            VG_(printf)("Te_TyStOrUn(%ld,%c,%p,\"%s\")",
+            VG_(printf)("Te_TyStOrUn(%lu,%c,%p,\"%s\")",
                         te->Te.TyStOrUn.szB, 
                         te->Te.TyStOrUn.isStruct ? 'S' : 'U',
                         te->Te.TyStOrUn.fieldRs,
diff --git a/coregrind/m_debuglog.c b/coregrind/m_debuglog.c
index 469c694..dc6e26d 100644
--- a/coregrind/m_debuglog.c
+++ b/coregrind/m_debuglog.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -56,6 +56,9 @@
 #include "pub_core_vkiscnums.h"  /* for syscall numbers */
 #include "pub_core_debuglog.h"   /* our own iface */
 #include "pub_core_clreq.h"      /* for RUNNING_ON_VALGRIND */
+#if defined(VGO_solaris)
+#include "pub_core_vki.h"        /* for EINTR and ERESTART */
+#endif
 
 static Bool clo_xml;
 
@@ -556,6 +559,97 @@
   return __res;
 }
 
+#elif defined(VGP_x86_solaris)
+static UInt local_sys_write_stderr ( const HChar* buf, Int n )
+{
+   UInt res, err;
+   Bool restart;
+
+   do {
+      /* The Solaris kernel does not restart syscalls automatically so it is
+         done here. */
+      __asm__ __volatile__ (
+         "movl  %[n], %%eax\n"          /* push n */
+         "pushl %%eax\n"
+         "movl  %[buf], %%eax\n"        /* push buf */
+         "pushl %%eax\n"
+         "movl  $2, %%eax\n"            /* push stderr */
+         "pushl %%eax\n"
+         "movl  $"VG_STRINGIFY(__NR_write)", %%eax\n"
+         "pushl %%eax\n"                /* push fake return address */
+         "int   $0x91\n"                /* write(stderr, buf, n) */
+         "movl  $0, %%edx\n"            /* assume no error */
+         "jnc   1f\n"                   /* jump if no error */
+         "movl  $1, %%edx\n"            /* set error flag */
+         "1: "
+         "addl  $16, %%esp\n"           /* pop x4 */
+         : "=&a" (res), "=d" (err)
+         : [buf] "g" (buf), [n] "g" (n)
+         : "cc");
+      restart = err && (res == VKI_EINTR || res == VKI_ERESTART);
+   } while (restart);
+
+   return res;
+}
+
+static UInt local_sys_getpid ( void )
+{
+   UInt res;
+
+   /* The getpid() syscall never returns EINTR or ERESTART so there is no need
+      for restarting it. */
+   __asm__ __volatile__ (
+      "movl $"VG_STRINGIFY(__NR_getpid)", %%eax\n"
+      "int  $0x91\n"                    /* getpid() */
+      : "=a" (res)
+      :
+      : "edx", "cc");
+
+   return res;
+}
+
+#elif defined(VGP_amd64_solaris)
+static UInt local_sys_write_stderr ( const HChar* buf, Int n )
+{
+   ULong res, err;
+   Bool restart;
+
+   do {
+      /* The Solaris kernel does not restart syscalls automatically so it is
+         done here. */
+      __asm__ __volatile__ (
+         "movq  $2, %%rdi\n"            /* push stderr */
+         "movq  $"VG_STRINGIFY(__NR_write)", %%rax\n"
+         "syscall\n"                    /* write(stderr, buf, n) */
+         "movq  $0, %%rdx\n"            /* assume no error */
+         "jnc   1f\n"                   /* jump if no error */
+         "movq  $1, %%rdx\n"            /* set error flag */
+         "1: "
+         : "=a" (res), "=d" (err)
+         : "S" (buf), "d" (n)
+         : "cc");
+      restart = err && (res == VKI_EINTR || res == VKI_ERESTART);
+   } while (restart);
+
+   return res;
+}
+
+static UInt local_sys_getpid ( void )
+{
+   UInt res;
+
+   /* The getpid() syscall never returns EINTR or ERESTART so there is no need
+      for restarting it. */
+   __asm__ __volatile__ (
+      "movq $"VG_STRINGIFY(__NR_getpid)", %%rax\n"
+      "syscall\n"                       /* getpid() */
+      : "=a" (res)
+      :
+      : "edx", "cc");
+
+   return res;
+}
+
 #else
 # error Unknown platform
 #endif
diff --git a/coregrind/m_deduppoolalloc.c b/coregrind/m_deduppoolalloc.c
index 51a58cb..92016d8 100644
--- a/coregrind/m_deduppoolalloc.c
+++ b/coregrind/m_deduppoolalloc.c
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Philippe Waroquiers philippe.waroquiers@skynet.be
+   Copyright (C) 2014-2015 Philippe Waroquiers philippe.waroquiers@skynet.be
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -201,7 +201,7 @@
 static void print_stats (DedupPoolAlloc *ddpa)
 {
    VG_(message)(Vg_DebugMsg,
-                "dedupPA:%s %ld allocs (%d uniq)"
+                "dedupPA:%s %ld allocs (%u uniq)"
                 " %ld pools (%ld bytes free in last pool)\n",
                 ddpa->cc,
                 (long int) ddpa->nr_alloc_calls,
diff --git a/coregrind/m_demangle/cplus-dem.c b/coregrind/m_demangle/cplus-dem.c
index 7fc2722..46cc3b5 100644
--- a/coregrind/m_demangle/cplus-dem.c
+++ b/coregrind/m_demangle/cplus-dem.c
@@ -2666,7 +2666,7 @@
   /* Iterate over occurrences of __, allowing names and types to have a
      "__" sequence in them.  We must start with the first (not the last)
      occurrence, since "__" most often occur between independent mangled
-     parts, hence starting at the last occurence inside a signature
+     parts, hence starting at the last occurrence inside a signature
      might get us a "successful" demangling of the signature.  */
 
   while (scan[2])
diff --git a/coregrind/m_demangle/demangle.c b/coregrind/m_demangle/demangle.c
index 1054c14..78db073 100644
--- a/coregrind/m_demangle/demangle.c
+++ b/coregrind/m_demangle/demangle.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -282,6 +282,7 @@
          case 'D': EMITSO('$'); break;
          case 'L': EMITSO('('); break;
          case 'R': EMITSO(')'); break;
+         case 'S': EMITSO('/'); break;
          case 'Z': EMITSO('Z'); break;
          default: error = True; goto out;
       }
diff --git a/coregrind/m_demangle/vg_libciface.h b/coregrind/m_demangle/vg_libciface.h
index 5241cbe..8832500 100644
--- a/coregrind/m_demangle/vg_libciface.h
+++ b/coregrind/m_demangle/vg_libciface.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_dispatch/dispatch-amd64-darwin.S b/coregrind/m_dispatch/dispatch-amd64-darwin.S
index 02a8600..dd7f117 100644
--- a/coregrind/m_dispatch/dispatch-amd64-darwin.S
+++ b/coregrind/m_dispatch/dispatch-amd64-darwin.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
 
   This program is free software; you can redistribute it and/or
@@ -29,9 +29,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_amd64_darwin)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_amd64_RIP */
@@ -250,6 +251,9 @@
 
 #endif // defined(VGP_amd64_darwin)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-amd64-linux.S b/coregrind/m_dispatch/dispatch-amd64-linux.S
index 245f693..bb7a037 100644
--- a/coregrind/m_dispatch/dispatch-amd64-linux.S
+++ b/coregrind/m_dispatch/dispatch-amd64-linux.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
 
   This program is free software; you can redistribute it and/or
@@ -29,9 +29,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_amd64_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_amd64_RIP */
@@ -249,11 +250,11 @@
 
 .size VG_(disp_run_translations), .-VG_(disp_run_translations)
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif // defined(VGP_amd64_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-amd64-solaris.S b/coregrind/m_dispatch/dispatch-amd64-solaris.S
new file mode 100644
index 0000000..3750693
--- /dev/null
+++ b/coregrind/m_dispatch/dispatch-amd64-solaris.S
@@ -0,0 +1,260 @@
+
+/*--------------------------------------------------------------------*/
+/*--- The core dispatch loop, for jumping to a code address.       ---*/
+/*---                                     dispatch-amd64-solaris.S ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+  This file is part of Valgrind, a dynamic binary instrumentation
+  framework.
+
+  Copyright (C) 2000-2015 Julian Seward 
+     jseward@acm.org
+
+  This program is free software; you can redistribute it and/or
+  modify it under the terms of the GNU General Public License as
+  published by the Free Software Foundation; either version 2 of the
+  License, or (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+  02111-1307, USA.
+
+  The GNU General Public License is contained in the file COPYING.
+*/
+
+#include "pub_core_basics_asm.h"
+
+#if defined(VGP_amd64_solaris)
+
+#include "pub_core_dispatch_asm.h"
+#include "pub_core_transtab_asm.h"
+#include "libvex_guest_offsets.h"	/* for OFFSET_amd64_RIP */
+
+
+/*------------------------------------------------------------*/
+/*---                                                      ---*/
+/*--- The dispatch loop.  VG_(disp_run_translations) is    ---*/
+/*--- used to run all translations,                        ---*/
+/*--- including no-redir ones.                             ---*/
+/*---                                                      ---*/
+/*------------------------------------------------------------*/
+
+/*----------------------------------------------------*/
+/*--- Entry and preamble (set everything up)       ---*/
+/*----------------------------------------------------*/
+
+/* signature:
+void VG_(disp_run_translations)( UWord* two_words,
+                                 void*  guest_state, 
+                                 Addr   host_addr );
+*/
+.text
+.globl VG_(disp_run_translations)
+.type  VG_(disp_run_translations), @function
+VG_(disp_run_translations):
+        /* %rdi holds two_words    */
+	/* %rsi holds guest_state  */
+	/* %rdx holds host_addr    */
+
+        /* The preamble */
+
+        /* Save integer registers, since this is a pseudo-function. */
+        pushq   %rax
+	pushq	%rbx
+	pushq	%rcx
+        pushq   %rdx
+	pushq	%rsi
+	pushq	%rbp
+	pushq	%r8
+	pushq	%r9
+	pushq	%r10
+	pushq	%r11
+	pushq	%r12
+	pushq	%r13
+	pushq	%r14
+	pushq	%r15
+        /* %rdi must be saved last */
+	pushq	%rdi
+
+        /* Get the host CPU in the state expected by generated code. */
+
+	/* set host FPU control word to the default mode expected 
+           by VEX-generated code.  See comments in libvex.h for
+           more info. */
+	finit
+	pushq	$0x027F
+	fldcw	(%rsp)
+	addq	$8, %rsp
+	
+	/* set host SSE control word to the default mode expected 
+	   by VEX-generated code. */
+	pushq	$0x1F80
+	ldmxcsr	(%rsp)
+	addq	$8, %rsp
+
+	/* set dir flag to known value */
+	cld
+
+	/* Set up the guest state pointer */
+	movq	%rsi, %rbp
+
+        /* and jump into the code cache.  Chained translations in
+           the code cache run, until for whatever reason, they can't
+           continue.  When that happens, the translation in question
+           will jump (or call) to one of the continuation points
+           VG_(cp_...) below. */
+        jmpq    *%rdx
+       	/*NOTREACHED*/	
+
+/*----------------------------------------------------*/
+/*--- Postamble and exit.                          ---*/
+/*----------------------------------------------------*/
+
+postamble:
+        /* At this point, %rax and %rdx contain two
+           words to be returned to the caller.  %rax
+           holds a TRC value, and %rdx optionally may
+           hold another word (for CHAIN_ME exits, the
+           address of the place to patch.) */
+        
+	/* We're leaving.  Check that nobody messed with %mxcsr
+           or %fpucw.  We can't mess with %rax or %rdx here as they
+           hold the tentative return values, but any others are OK. */
+#if !defined(ENABLE_INNER)
+        /* This check fails for self-hosting, so skip in that case */
+	pushq	$0
+	fstcw	(%rsp)
+	cmpl	$0x027F, (%rsp)
+	popq	%r15 /* get rid of the word without trashing %rflags */
+	jnz	invariant_violation
+#endif
+	pushq	$0
+	stmxcsr	(%rsp)
+	andl	$0xFFFFFFC0, (%rsp)  /* mask out status flags */
+	cmpl	$0x1F80, (%rsp)
+	popq	%r15
+	jnz	invariant_violation
+	/* otherwise we're OK */
+	jmp	remove_frame
+invariant_violation:
+	movq	$VG_TRC_INVARIANT_FAILED, %rax
+        movq    $0, %rdx
+
+remove_frame:
+        /* Pop %rdi, stash return values */
+	popq	%rdi
+        movq    %rax, 0(%rdi)
+        movq    %rdx, 8(%rdi)
+        /* Now pop everything else */
+	popq	%r15
+	popq	%r14
+	popq	%r13
+	popq	%r12
+	popq	%r11
+	popq	%r10
+	popq	%r9
+	popq	%r8
+	popq	%rbp
+	popq	%rsi
+	popq	%rdx
+	popq	%rcx
+	popq	%rbx
+	popq	%rax
+	ret	
+        
+/*----------------------------------------------------*/
+/*--- Continuation points                          ---*/
+/*----------------------------------------------------*/
+
+/* ------ Chain me to slow entry point ------ */
+.global VG_(disp_cp_chain_me_to_slowEP)
+VG_(disp_cp_chain_me_to_slowEP):
+        /* We got called.  The return address indicates
+           where the patching needs to happen.  Collect
+           the return address and, exit back to C land,
+           handing the caller the pair (Chain_me_S, RA) */
+        movq    $VG_TRC_CHAIN_ME_TO_SLOW_EP, %rax
+        popq    %rdx
+        /* 10 = movabsq $VG_(disp_chain_me_to_slowEP), %r11;
+           3  = call *%r11 */
+        subq    $10+3, %rdx
+        jmp     postamble
+
+/* ------ Chain me to fast entry point ------ */
+.global VG_(disp_cp_chain_me_to_fastEP)
+VG_(disp_cp_chain_me_to_fastEP):
+        /* We got called.  The return address indicates
+           where the patching needs to happen.  Collect
+           the return address and, exit back to C land,
+           handing the caller the pair (Chain_me_F, RA) */
+        movq    $VG_TRC_CHAIN_ME_TO_FAST_EP, %rax
+        popq    %rdx
+        /* 10 = movabsq $VG_(disp_chain_me_to_fastEP), %r11;
+           3  = call *%r11 */
+        subq    $10+3, %rdx
+        jmp     postamble
+
+/* ------ Indirect but boring jump ------ */
+.global VG_(disp_cp_xindir)
+VG_(disp_cp_xindir):
+	/* Where are we going? */
+	movq	OFFSET_amd64_RIP(%rbp), %rax
+
+        /* stats only */
+        addl    $1, VG_(stats__n_xindirs_32)
+        
+	/* try a fast lookup in the translation cache */
+	movabsq $VG_(tt_fast), %rcx
+	movq	%rax, %rbx		/* next guest addr */
+	andq	$VG_TT_FAST_MASK, %rbx	/* entry# */
+	shlq	$4, %rbx		/* entry# * sizeof(FastCacheEntry) */
+	movq	0(%rcx,%rbx,1), %r10	/* .guest */
+	movq	8(%rcx,%rbx,1), %r11	/* .host */
+	cmpq	%rax, %r10
+	jnz	fast_lookup_failed
+
+        /* Found a match.  Jump to .host. */
+	jmp 	*%r11
+	ud2	/* persuade insn decoders not to speculate past here */
+
+fast_lookup_failed:
+        /* stats only */
+        addl    $1, VG_(stats__n_xindir_misses_32)
+
+	movq	$VG_TRC_INNER_FASTMISS, %rax
+        movq    $0, %rdx
+	jmp	postamble
+
+/* ------ Assisted jump ------ */
+.global VG_(disp_cp_xassisted)
+VG_(disp_cp_xassisted):
+        /* %rbp contains the TRC */
+        movq    %rbp, %rax
+        movq    $0, %rdx
+        jmp     postamble
+
+/* ------ Event check failed ------ */
+.global VG_(disp_cp_evcheck_fail)
+VG_(disp_cp_evcheck_fail):
+       	movq	$VG_TRC_INNER_COUNTERZERO, %rax
+        movq    $0, %rdx
+	jmp	postamble
+
+
+.size VG_(disp_run_translations), .-VG_(disp_run_translations)
+
+#endif // defined(VGP_amd64_solaris)
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-arm-linux.S b/coregrind/m_dispatch/dispatch-arm-linux.S
index 9d5b1fc..c21e5e4 100644
--- a/coregrind/m_dispatch/dispatch-arm-linux.S
+++ b/coregrind/m_dispatch/dispatch-arm-linux.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2008-2013 Evan Geller
+  Copyright (C) 2008-2015 Evan Geller
      gaze@bea.ms
 
   This program is free software; you can redistribute it and/or
@@ -29,10 +29,11 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_arm_linux)
 	.fpu vfp
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_arm_R* */
@@ -206,11 +207,11 @@
 
 .size VG_(disp_run_translations), .-VG_(disp_run_translations)
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",%progbits
-
 #endif // defined(VGP_arm_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                     dispatch-arm-linux.S ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-arm64-linux.S b/coregrind/m_dispatch/dispatch-arm64-linux.S
index 9531275..2e8e0cd 100644
--- a/coregrind/m_dispatch/dispatch-arm64-linux.S
+++ b/coregrind/m_dispatch/dispatch-arm64-linux.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2013-2013 OpenWorks
+  Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
   This program is free software; you can redistribute it and/or
@@ -29,9 +29,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_arm64_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_arm_R* */
@@ -231,11 +232,11 @@
 
 .size VG_(disp_run_translations), .-VG_(disp_run_translations)
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",%progbits
-
 #endif // defined(VGP_arm64_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                   dispatch-arm64-linux.S ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-mips32-linux.S b/coregrind/m_dispatch/dispatch-mips32-linux.S
index a3a158c..22b6b38 100644
--- a/coregrind/m_dispatch/dispatch-mips32-linux.S
+++ b/coregrind/m_dispatch/dispatch-mips32-linux.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 RT-RK
+  Copyright (C) 2000-2015 RT-RK
      mips-valgrind@rt-rk.com 
 
   This program is free software; you can redistribute it and/or
@@ -29,10 +29,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
 
 #if defined(VGP_mips32_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_mips_PC */
@@ -235,11 +235,11 @@
 
 .size VG_(disp_run_translations), .-VG_(disp_run_translations)
 
-
-/* Let the linker know we do not need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif // defined(VGP_mips32_linux)
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-mips64-linux.S b/coregrind/m_dispatch/dispatch-mips64-linux.S
index c2fc69d..5e5afee 100644
--- a/coregrind/m_dispatch/dispatch-mips64-linux.S
+++ b/coregrind/m_dispatch/dispatch-mips64-linux.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 RT-RK
+  Copyright (C) 2000-2015 RT-RK
      mips-valgrind@rt-rk.com 
 
   This program is free software; you can redistribute it and/or
@@ -29,10 +29,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
 
 #if defined(VGP_mips64_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_mips_PC */
@@ -235,11 +235,11 @@
 
 .size VG_(disp_run_translations), .-VG_(disp_run_translations)
 
-
-/* Let the linker know we do not need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif // defined(VGP_mips64_linux)
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-ppc32-linux.S b/coregrind/m_dispatch/dispatch-ppc32-linux.S
index 770a058..2304b85 100644
--- a/coregrind/m_dispatch/dispatch-ppc32-linux.S
+++ b/coregrind/m_dispatch/dispatch-ppc32-linux.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2005-2013 Cerion Armour-Brown <cerion@open-works.co.uk>
+  Copyright (C) 2005-2015 Cerion Armour-Brown <cerion@open-works.co.uk>
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -28,10 +28,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_ppc32_linux)
 
-#include "config.h"
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_ppc32_CIA */
@@ -158,7 +158,7 @@
         li      6,128
         stvx    25,6,1
         li      6,112
-        stvx    25,6,1
+        stvx    24,6,1
         li      6,96
         stvx    23,6,1
         li      6,80
@@ -495,11 +495,11 @@
         
 .size VG_(disp_run_translations), .-VG_(disp_run_translations)
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif // defined(VGP_ppc32_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-ppc64be-linux.S b/coregrind/m_dispatch/dispatch-ppc64be-linux.S
index 945fa29..64e192a 100644
--- a/coregrind/m_dispatch/dispatch-ppc64be-linux.S
+++ b/coregrind/m_dispatch/dispatch-ppc64be-linux.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2005-2013 Cerion Armour-Brown <cerion@open-works.co.uk>
+  Copyright (C) 2005-2015 Cerion Armour-Brown <cerion@open-works.co.uk>
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -28,9 +28,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_ppc64be_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_ppc64_CIA */
@@ -527,11 +528,11 @@
         
 .size .VG_(disp_run_translations), .-.VG_(disp_run_translations)
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif // defined(VGP_ppc64be_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-ppc64le-linux.S b/coregrind/m_dispatch/dispatch-ppc64le-linux.S
index 7e5bc0d..1772283 100644
--- a/coregrind/m_dispatch/dispatch-ppc64le-linux.S
+++ b/coregrind/m_dispatch/dispatch-ppc64le-linux.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2005-2013 Cerion Armour-Brown <cerion@open-works.co.uk>
+  Copyright (C) 2005-2015 Cerion Armour-Brown <cerion@open-works.co.uk>
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -28,9 +28,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if  defined(VGP_ppc64le_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_ppc64_CIA */
@@ -620,11 +621,11 @@
 
 .size .VG_(disp_run_translations), .-.VG_(disp_run_translations)
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif // defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-s390x-linux.S b/coregrind/m_dispatch/dispatch-s390x-linux.S
index d7d05ab..aec65ba 100644
--- a/coregrind/m_dispatch/dispatch-s390x-linux.S
+++ b/coregrind/m_dispatch/dispatch-s390x-linux.S
@@ -8,8 +8,8 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright IBM Corp. 2010-2013
-  Copyright (C) 2011-2013, Florian Krohm (britzel@acm.org)
+  Copyright IBM Corp. 2010-2015
+  Copyright (C) 2011-2015, Florian Krohm (britzel@acm.org)
         
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -267,11 +267,11 @@
 
         .size VG_(disp_run_translations), .-VG_(disp_run_translations)
 
-/* Let the linker know we don't need an executable stack */
-        .section .note.GNU-stack,"",@progbits
-
 #endif /* VGA_s390x */
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                   dispatch-s390x-linux.S ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-tilegx-linux.S b/coregrind/m_dispatch/dispatch-tilegx-linux.S
index 3451fe5..b3114ef 100644
--- a/coregrind/m_dispatch/dispatch-tilegx-linux.S
+++ b/coregrind/m_dispatch/dispatch-tilegx-linux.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013  Tilera Corp.
+  Copyright (C) 2010-2015  Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -29,8 +29,9 @@
 
 /* Contributed by Zhi-Gang Liu <zliu at tilera dot com> */
 
-#if defined(VGP_tilegx_linux)
 #include "pub_core_basics_asm.h"
+
+#if defined(VGP_tilegx_linux)
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"       /* for OFFSET_tilegx_PC */
@@ -297,11 +298,11 @@
 
         .size VG_(disp_run_translations), .-VG_(disp_run_translations)
 
-
-        /* Let the linker know we do not need an executable stack */
-        .section .note.GNU-stack,"",@progbits
-
 #endif /* defined(VGP_tilegx_linux) */
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-x86-darwin.S b/coregrind/m_dispatch/dispatch-x86-darwin.S
index b6647ce..d5edbab 100644
--- a/coregrind/m_dispatch/dispatch-x86-darwin.S
+++ b/coregrind/m_dispatch/dispatch-x86-darwin.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
 
   This program is free software; you can redistribute it and/or
@@ -29,9 +29,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_x86_darwin)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_x86_EIP */
@@ -239,6 +240,9 @@
 
 #endif // defined(VGP_x86_darwin)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-x86-linux.S b/coregrind/m_dispatch/dispatch-x86-linux.S
index 20517da..6845911 100644
--- a/coregrind/m_dispatch/dispatch-x86-linux.S
+++ b/coregrind/m_dispatch/dispatch-x86-linux.S
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
 
   This program is free software; you can redistribute it and/or
@@ -29,9 +29,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_x86_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_dispatch_asm.h"
 #include "pub_core_transtab_asm.h"
 #include "libvex_guest_offsets.h"	/* for OFFSET_x86_EIP */
@@ -240,11 +241,11 @@
 
 .size VG_(disp_run_translations), .-VG_(disp_run_translations)
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif // defined(VGP_x86_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-x86-solaris.S b/coregrind/m_dispatch/dispatch-x86-solaris.S
new file mode 100644
index 0000000..88f796c
--- /dev/null
+++ b/coregrind/m_dispatch/dispatch-x86-solaris.S
@@ -0,0 +1,251 @@
+
+/*--------------------------------------------------------------------*/
+/*--- The core dispatch loop, for jumping to a code address.       ---*/
+/*---                                       dispatch-x86-solaris.S ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+  This file is part of Valgrind, a dynamic binary instrumentation
+  framework.
+
+  Copyright (C) 2000-2012 Julian Seward 
+     jseward@acm.org
+
+  This program is free software; you can redistribute it and/or
+  modify it under the terms of the GNU General Public License as
+  published by the Free Software Foundation; either version 2 of the
+  License, or (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+  02111-1307, USA.
+
+  The GNU General Public License is contained in the file COPYING.
+*/
+
+#include "pub_core_basics_asm.h"
+
+#if defined(VGP_x86_solaris)
+
+#include "pub_core_dispatch_asm.h"
+#include "pub_core_transtab_asm.h"
+#include "libvex_guest_offsets.h"	/* for OFFSET_x86_EIP */
+
+
+/*------------------------------------------------------------*/
+/*---                                                      ---*/
+/*--- The dispatch loop.  VG_(disp_run_translations) is    ---*/
+/*--- used to run all translations,                        ---*/
+/*--- including no-redir ones.                             ---*/
+/*---                                                      ---*/
+/*------------------------------------------------------------*/
+
+/*----------------------------------------------------*/
+/*--- Entry and preamble (set everything up)       ---*/
+/*----------------------------------------------------*/
+
+/* signature:
+void VG_(disp_run_translations)( UWord* two_words,
+                                 void*  guest_state, 
+                                 Addr   host_addr );
+*/
+.text
+.globl VG_(disp_run_translations)
+.type  VG_(disp_run_translations), @function
+VG_(disp_run_translations):
+        /* 0(%esp) holds our return address. */
+	/* 4(%esp) holds two_words */
+	/* 8(%esp) holds guest_state */
+	/* 12(%esp) holds host_addr */
+
+        /* The preamble */
+
+        /* Save integer registers, since this is a pseudo-function. */
+        pushl   %eax
+	pushl	%ebx
+	pushl	%ecx
+	pushl	%edx
+	pushl	%esi
+	pushl	%edi
+	pushl	%ebp
+	
+	/* 28+4(%esp) holds two_words */
+	/* 28+8(%esp) holds guest_state */
+	/* 28+12(%esp) holds host_addr */
+
+        /* Get the host CPU in the state expected by generated code. */
+
+	/* set host FPU control word to the default mode expected 
+           by VEX-generated code.  See comments in libvex.h for
+           more info. */
+	finit
+	pushl	$0x027F
+	fldcw	(%esp)
+	addl	$4, %esp
+	
+	/* set host SSE control word to the default mode expected 
+	   by VEX-generated code. */
+	cmpl	$0, VG_(machine_x86_have_mxcsr)
+	jz	L1
+	pushl	$0x1F80
+	ldmxcsr	(%esp)
+	addl	$4, %esp
+L1:
+	/* set dir flag to known value */
+	cld
+
+	/* Set up the guest state pointer */
+	movl	28+8(%esp), %ebp
+
+        /* and jump into the code cache.  Chained translations in
+           the code cache run, until for whatever reason, they can't
+           continue.  When that happens, the translation in question
+           will jump (or call) to one of the continuation points
+           VG_(cp_...) below. */
+        jmpl    *28+12(%esp)
+	/*NOTREACHED*/
+
+/*----------------------------------------------------*/
+/*--- Postamble and exit.                          ---*/
+/*----------------------------------------------------*/
+
+postamble:
+        /* At this point, %eax and %edx contain two
+           words to be returned to the caller.  %eax
+           holds a TRC value, and %edx optionally may
+           hold another word (for CHAIN_ME exits, the
+           address of the place to patch.) */
+
+	/* We're leaving.  Check that nobody messed with %mxcsr
+           or %fpucw.  We can't mess with %eax or %edx here as they
+	   holds the tentative return value, but any others are OK. */
+#if !defined(ENABLE_INNER)
+        /* This check fails for self-hosting, so skip in that case */
+	pushl	$0
+	fstcw	(%esp)
+	cmpl	$0x027F, (%esp)
+	popl	%esi /* get rid of the word without trashing %eflags */
+	jnz	invariant_violation
+#endif
+#	cmpl	$0, VG_(machine_x86_have_mxcsr)
+	jz	L2
+	pushl	$0
+	stmxcsr	(%esp)
+	andl	$0xFFFFFFC0, (%esp)  /* mask out status flags */
+	cmpl	$0x1F80, (%esp)
+	popl	%esi
+	jnz	invariant_violation
+L2:	/* otherwise we're OK */
+	jmp	remove_frame
+invariant_violation:
+	movl	$VG_TRC_INVARIANT_FAILED, %eax
+        movl    $0, %edx
+
+remove_frame:
+        /* Stash return values */
+        movl    28+4(%esp), %edi        /* two_words */
+        movl    %eax, 0(%edi)
+        movl    %edx, 4(%edi)
+        /* Restore int regs and return. */
+	popl	%ebp
+	popl	%edi
+	popl	%esi
+	popl	%edx
+	popl	%ecx
+	popl	%ebx
+	popl	%eax
+	ret	
+        
+/*----------------------------------------------------*/
+/*--- Continuation points                          ---*/
+/*----------------------------------------------------*/
+
+/* ------ Chain me to slow entry point ------ */
+.global VG_(disp_cp_chain_me_to_slowEP)
+VG_(disp_cp_chain_me_to_slowEP):
+        /* We got called.  The return address indicates
+           where the patching needs to happen.  Collect
+           the return address and, exit back to C land,
+           handing the caller the pair (Chain_me_S, RA) */
+        movl    $VG_TRC_CHAIN_ME_TO_SLOW_EP, %eax
+        popl    %edx
+        /* 5 = movl $VG_(disp_chain_me_to_slowEP), %edx;
+           2 = call *%edx */
+        subl    $5+2, %edx
+        jmp     postamble
+
+/* ------ Chain me to fast entry point ------ */
+.global VG_(disp_cp_chain_me_to_fastEP)
+VG_(disp_cp_chain_me_to_fastEP):
+        /* We got called.  The return address indicates
+           where the patching needs to happen.  Collect
+           the return address and, exit back to C land,
+           handing the caller the pair (Chain_me_F, RA) */
+        movl    $VG_TRC_CHAIN_ME_TO_FAST_EP, %eax
+        popl    %edx
+        /* 5 = movl $VG_(disp_chain_me_to_fastEP), %edx;
+           2 = call *%edx */
+        subl    $5+2, %edx
+        jmp     postamble
+
+/* ------ Indirect but boring jump ------ */
+.global VG_(disp_cp_xindir)
+VG_(disp_cp_xindir):
+	/* Where are we going? */
+	movl	OFFSET_x86_EIP(%ebp), %eax
+
+        /* stats only */
+        addl    $1, VG_(stats__n_xindirs_32)
+        
+        /* try a fast lookup in the translation cache */
+        movl    %eax, %ebx                      /* next guest addr */
+        andl    $VG_TT_FAST_MASK, %ebx          /* entry# */
+        movl    0+VG_(tt_fast)(,%ebx,8), %esi   /* .guest */
+        movl    4+VG_(tt_fast)(,%ebx,8), %edi   /* .host */
+        cmpl    %eax, %esi
+        jnz     fast_lookup_failed
+
+        /* Found a match.  Jump to .host. */
+	jmp 	*%edi
+	ud2	/* persuade insn decoders not to speculate past here */
+
+fast_lookup_failed:
+        /* stats only */
+        addl    $1, VG_(stats__n_xindir_misses_32)
+
+	movl	$VG_TRC_INNER_FASTMISS, %eax
+        movl    $0, %edx
+	jmp	postamble
+
+/* ------ Assisted jump ------ */
+.global VG_(disp_cp_xassisted)
+VG_(disp_cp_xassisted):
+        /* %ebp contains the TRC */
+        movl    %ebp, %eax
+        movl    $0, %edx
+        jmp     postamble
+
+/* ------ Event check failed ------ */
+.global VG_(disp_cp_evcheck_fail)
+VG_(disp_cp_evcheck_fail):
+       	movl	$VG_TRC_INNER_COUNTERZERO, %eax
+        movl    $0, %edx
+	jmp	postamble
+
+
+.size VG_(disp_run_translations), .-VG_(disp_run_translations)
+
+#endif // defined(VGP_x86_solaris)
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_errormgr.c b/coregrind/m_errormgr.c
index 2ea6370..a46c6c3 100644
--- a/coregrind/m_errormgr.c
+++ b/coregrind/m_errormgr.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -31,7 +31,6 @@
 #include "pub_core_basics.h"
 #include "pub_core_vki.h"
 #include "pub_core_threadstate.h"      // For VG_N_THREADS
-#include "pub_core_debugger.h"
 #include "pub_core_debuginfo.h"
 #include "pub_core_debuglog.h"
 #include "pub_core_errormgr.h"
@@ -308,7 +307,7 @@
          } else {
             VG_(printf)("\nUnhandled error type: %u. VG_(needs).tool_errors\n"
                         "probably needs to be set.\n",
-                        e1->ekind);
+                        (UInt)e1->ekind);
             VG_(core_panic)("unhandled error type");
          }
    }
@@ -515,7 +514,7 @@
 
 /* Do text-mode actions on error, that is, immediately after an error
    is printed.  These are:
-   * possibly, attach to a debugger
+   * possibly, call the GDB server
    * possibly, generate a suppression.
    Note this should not be called in XML mode! 
 */
@@ -533,15 +532,6 @@
       VG_(umsg)("Continuing ...\n");
    }
 
-   /* Perhaps we want a debugger attach at this point? */
-   /* GDBTD ??? maybe we should/could remove the below assuming the
-      gdbserver interface is better ??? */
-   if (allow_db_attach &&
-       VG_(is_action_requested)( "Attach to debugger", & VG_(clo_db_attach) ))
-   {   
-      if (0) VG_(printf)("starting debugger\n");
-      VG_(start_debugger)( err->tid );
-   }  
    /* Or maybe we want to generate the error's suppression? */
    if (VG_(clo_gen_suppressions) == 2
        || (VG_(clo_gen_suppressions) == 1
@@ -601,7 +591,7 @@
       /* standard preamble */
       VG_(printf_xml)("<error>\n");
       VG_(printf_xml)("  <unique>0x%x</unique>\n", err->unique);
-      VG_(printf_xml)("  <tid>%d</tid>\n", err->tid);
+      VG_(printf_xml)("  <tid>%u</tid>\n", err->tid);
       ThreadState* tst = VG_(get_ThreadState)(err->tid);
       if (tst->thread_name) {
          VG_(printf_xml)("  <threadname>%s</threadname>\n", tst->thread_name);
@@ -627,9 +617,9 @@
           && err->tid > 0 && err->tid != last_tid_printed) {
          ThreadState* tst = VG_(get_ThreadState)(err->tid);
          if (tst->thread_name) {
-            VG_(umsg)("Thread %d %s:\n", err->tid, tst->thread_name );
+            VG_(umsg)("Thread %u %s:\n", err->tid, tst->thread_name );
          } else {
-            VG_(umsg)("Thread %d:\n", err->tid );
+            VG_(umsg)("Thread %u:\n", err->tid );
          }
          last_tid_printed = err->tid;
       }
@@ -991,7 +981,7 @@
 
    /* We only get here if not printing XML. */
    VG_(umsg)("ERROR SUMMARY: "
-             "%d errors from %d contexts (suppressed: %d from %d)\n",
+             "%u errors from %u contexts (suppressed: %u from %u)\n",
              n_errs_found, n_err_contexts, 
              n_errs_suppressed, n_supp_contexts );
 
@@ -1019,7 +1009,7 @@
       if (p_min == NULL) continue; //VG_(core_panic)("show_all_errors()");
 
       VG_(umsg)("\n");
-      VG_(umsg)("%d errors in context %d of %d:\n",
+      VG_(umsg)("%d errors in context %d of %u:\n",
                 p_min->count, i+1, n_err_contexts);
       pp_Error( p_min, False/*allow_db_attach*/, False /* xml */ );
 
@@ -1051,7 +1041,7 @@
    // reprint this, so users don't have to scroll way up to find
    // the first printing
    VG_(umsg)("ERROR SUMMARY: "
-             "%d errors from %d contexts (suppressed: %d from %d)\n",
+             "%u errors from %u contexts (suppressed: %u from %u)\n",
              n_errs_found, n_err_contexts, n_errs_suppressed,
              n_supp_contexts );
 }
@@ -1901,7 +1891,7 @@
             VG_(printf)(
                "\nUnhandled suppression type: %u.  VG_(needs).tool_errors\n"
                "probably needs to be set.\n",
-               err->ekind);
+               (UInt)err->ekind);
             VG_(core_panic)("unhandled suppression type");
          }
    }
diff --git a/coregrind/m_execontext.c b/coregrind/m_execontext.c
index f738279..c074f61 100644
--- a/coregrind/m_execontext.c
+++ b/coregrind/m_execontext.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_gdbserver/m_gdbserver.c b/coregrind/m_gdbserver/m_gdbserver.c
index 888340a..d5cc8ea 100644
--- a/coregrind/m_gdbserver/m_gdbserver.c
+++ b/coregrind/m_gdbserver/m_gdbserver.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Philippe Waroquiers
+   Copyright (C) 2011-2015 Philippe Waroquiers
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -425,7 +425,7 @@
    vg_assert (kind == access_watchpoint 
               || kind == read_watchpoint 
               || kind == write_watchpoint);
-   dlog(1, "tid %d VG_(is_watched) %s addr %p szB %d\n",
+   dlog(1, "tid %u VG_(is_watched) %s addr %p szB %d\n",
         tid, VG_(ppPointKind) (kind), C2v(addr), szB);
 
    for (i = 0; i < n_elems; i++) {
@@ -542,7 +542,7 @@
    int i;
 
    dlog(1,
-        "clear_gdbserved_addresses: scanning hash table nodes %d\n", 
+        "clear_gdbserved_addresses: scanning hash table nodes %u\n", 
         VG_(HT_count_nodes) (gs_addresses));
    ag = (GS_Address**) VG_(HT_to_array) (gs_addresses, &n_elems);
    for (i = 0; i < n_elems; i++)
@@ -622,7 +622,7 @@
    data from its parent */
 static void gdbserver_cleanup_in_child_after_fork(ThreadId me)
 {
-   dlog(1, "thread %d gdbserver_cleanup_in_child_after_fork pid %d\n",
+   dlog(1, "thread %u gdbserver_cleanup_in_child_after_fork pid %d\n",
         me, VG_(getpid) ());
 
    /* finish connection inheritated from parent */
@@ -663,7 +663,7 @@
    Addr saved_pc;
 
    dlog(1, 
-        "entering call_gdbserver %s ... pid %d tid %d status %s "
+        "entering call_gdbserver %s ... pid %d tid %u status %s "
         "sched_jmpbuf_valid %d\n",
         ppCallReason (reason),
         VG_(getpid) (), tid, VG_(name_of_ThreadStatus)(tst->status),
@@ -754,7 +754,7 @@
       Otherwise we just return to continue executing the
       current block. */
    if (VG_(get_IP) (tid) != saved_pc) {
-      dlog(1, "tid %d %s PC changed from %s to %s\n",
+      dlog(1, "tid %u %s PC changed from %s to %s\n",
            tid, VG_(name_of_ThreadStatus) (tst->status),
            sym(saved_pc, /* is_code */ True),
            sym(VG_(get_IP) (tid), /* is_code */ True));
@@ -773,7 +773,7 @@
 }
 
 /* busy > 0 when gdbserver is currently being called.
-   busy is used to to avoid vgdb invoking gdbserver
+   busy is used to avoid vgdb invoking gdbserver
    while gdbserver by Valgrind. */
 static volatile int busy = 0;
 
@@ -790,7 +790,7 @@
       if (gdbserver_called == 0) {
          dlog(1, "VG_(gdbserver) called to terminate, nothing to terminate\n");
       } else if (gdbserver_exited) {
-         dlog(0, "VG_(gdbserver) called to terminate again %d\n",
+         dlog(1, "VG_(gdbserver) called to terminate again %d\n",
               gdbserver_exited);
       } else {
          gdbserver_terminate();
@@ -828,6 +828,7 @@
 
 static void give_control_back_to_vgdb(void)
 {
+#if !defined(VGO_solaris)
    /* cause a SIGSTOP to be sent to ourself, so that vgdb takes control.
       vgdb will then restore the stack so as to resume the activity
       before the ptrace (typically do_syscall_WRK). */
@@ -840,8 +841,17 @@
       ptrace handling. */
    vg_assert2(0, 
               "vgdb did not took control. Did you kill vgdb ?\n"
-              "busy %d vgdb_interrupted_tid %d\n",
+              "busy %d vgdb_interrupted_tid %u\n",
               busy, vgdb_interrupted_tid);
+#else /* defined(VGO_solaris) */
+   /* On Solaris, this code is run within the context of an agent thread
+      (see vgdb-invoker-solaris.c and "PCAGENT" control message in
+      proc(4)). Exit the agent thread now.
+    */
+   SysRes sres = VG_(do_syscall0)(SYS_lwp_exit);
+   if (sr_isError(sres))
+      vg_assert2(0, "The agent thread could not be exited\n");
+#endif /* !defined(VGO_solaris) */
 }
 
 /* Using ptrace calls, vgdb will force an invocation of gdbserver.
@@ -902,12 +912,12 @@
       From here onwards, function calls are ok: it is
       safe to call valgrind core functions: all threads are blocked in
       a system call or are yielding or ... */
-   dlog(1, "invoke_gdbserver running_tid %d vgdb_interrupted_tid %d\n",
+   dlog(1, "invoke_gdbserver running_tid %u vgdb_interrupted_tid %u\n",
         VG_(running_tid), vgdb_interrupted_tid);
    call_gdbserver (vgdb_interrupted_tid, vgdb_reason);
    vgdb_interrupted_tid = 0;
    dlog(1,
-        "exit invoke_gdbserver running_tid %d\n", VG_(running_tid));
+        "exit invoke_gdbserver running_tid %u\n", VG_(running_tid));
    give_control_back_to_vgdb();
 
    vg_assert2(0, "end of invoke_gdbserver reached");
@@ -938,7 +948,7 @@
                          ThreadId tid)
 {
    dlog(1, "VG core calling %s "
-        "vki_nr %d %s gdb_nr %d %s tid %d\n", 
+        "vki_nr %d %s gdb_nr %u %s tid %u\n", 
         who,
         info->si_signo, VG_(signame)(info->si_signo),
         target_signal_from_host (info->si_signo),
@@ -1004,7 +1014,7 @@
 
 void VG_(gdbserver_exit) (ThreadId tid, VgSchedReturnCode tids_schedretcode)
 {
-   dlog(1, "VG core calling VG_(gdbserver_exit) tid %d will exit\n", tid);
+   dlog(1, "VG core calling VG_(gdbserver_exit) tid %u will exit\n", tid);
    if (remote_connected()) {
       /* Make sure vgdb knows we are about to die and why. */
       switch(tids_schedretcode) {
@@ -1495,7 +1505,7 @@
    VG_(umsg)
       ("nr of calls to gdbserver: %d\n"
        "single stepping %d\n"
-       "interrupts intr_tid %d gs_non_busy %d gs_busy %d tid_non_intr %d\n"
+       "interrupts intr_tid %u gs_non_busy %d gs_busy %d tid_non_intr %d\n"
        "gdbserved addresses %d (-1 = not initialized)\n"
        "watchpoints %d (-1 = not initialized)\n"
        "vgdb-error %d\n"
diff --git a/coregrind/m_gdbserver/remote-utils.c b/coregrind/m_gdbserver/remote-utils.c
index 978e07c..f6f3d0b 100644
--- a/coregrind/m_gdbserver/remote-utils.c
+++ b/coregrind/m_gdbserver/remote-utils.c
@@ -53,7 +53,7 @@
       VG_(dmsg)("current sigmask value { ");
       for (i = 1; i <= _VKI_NSIG; i++) {
          if (VG_(sigismember)(&cursigset, i))
-            VG_(dmsg)("%u ", i);
+            VG_(dmsg)("%d ", i);
       }
       VG_(dmsg)("}\n");
    }
@@ -310,17 +310,20 @@
 {
    const HChar *user, *host;
    int len;
-   VgdbShared vgdbinit = 
+   VgdbShared vgdbinit;
+   const int pid = VG_(getpid)();
+   Addr addr_shared;
+   SysRes o;
+   int shared_mem_fd = INVALID_DESCRIPTOR;
+
+   VG_(memset) (&vgdbinit, 0, sizeof (VgdbShared));
+   vgdbinit = (VgdbShared) 
       {0, 0, (Addr) VG_(invoke_gdbserver),
        (Addr) VG_(threads), VG_N_THREADS, sizeof(ThreadState), 
        offsetof(ThreadState, status),
        offsetof(ThreadState, os_state) + offsetof(ThreadOSstate, lwpid),
        0};
-   const int pid = VG_(getpid)();
-   Addr addr_shared;
-   SysRes o;
-   int shared_mem_fd = INVALID_DESCRIPTOR;
-   
+
    user = VG_(getenv)("LOGNAME");
    if (user == NULL) user = VG_(getenv)("USER");
    if (user == NULL) user = "???";
@@ -598,7 +601,7 @@
    else if (a >= 'a' && a <= 'f')
       return a - 'a' + 10;
    else
-      error ("Reply contains invalid hex digit 0x%x\n", a);
+     error ("Reply contains invalid hex digit 0x%x\n", (unsigned)a);
    return 0;
 }
 
@@ -878,7 +881,7 @@
 
       cc = readchar (1);
       if (cc > 0)
-         dlog(3, "[received '%c' (0x%x)]\n", cc, cc);
+         dlog(3, "[received '%c' (0x%x)]\n", cc, (unsigned)cc);
 
       if (cc <= 0) {
          if (cc == 0)
@@ -1038,7 +1041,7 @@
          break;
 
       dlog (0, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
-            (c1 << 4) + c2, csum, buf);
+            (unsigned)(c1 << 4) + c2, (unsigned)csum, buf);
       if (!ensure_write_remote_desc()) {
          dlog(1, "getpkt(write nack) no write_remote_desc");
       }
@@ -1164,7 +1167,7 @@
             ((struct inferior_list_entry *)current_inferior)->id;
          gdb_id_from_wait = thread_to_gdb_id (current_inferior);
          
-         dlog(1, "Writing resume reply for %ld\n", thread_from_wait);
+         dlog(1, "Writing resume reply for %lu\n", thread_from_wait);
          /* This if (1) ought to be unnecessary.  But remote_wait in GDB
             will claim this event belongs to inferior_ptid if we do not
             specify a thread, and there's no way for gdbserver to know
diff --git a/coregrind/m_gdbserver/server.c b/coregrind/m_gdbserver/server.c
index 6361c5a..23a43e0 100644
--- a/coregrind/m_gdbserver/server.c
+++ b/coregrind/m_gdbserver/server.c
@@ -244,10 +244,11 @@
 "  v.do   expensive_sanity_check_general : do an expensive sanity check now\n"
 "  v.info gdbserver_status : show gdbserver status\n"
 "  v.info memory [aspacemgr] : show valgrind heap memory stats\n"
-"     (with aspacemgr arg, also shows valgrind segments on log ouput)\n"
+"     (with aspacemgr arg, also shows valgrind segments on log output)\n"
 "  v.info exectxt          : show stacktraces and stats of all execontexts\n"
 "  v.info scheduler        : show valgrind thread state and stacktrace\n"
 "  v.info stats            : show various valgrind and tool stats\n"
+"  v.info unwind <addr> [<len>] : show unwind debug info for <addr> .. <addr+len>\n"
 "  v.set debuglog <level>  : set valgrind debug log level to <level>\n"
 "  v.set hostvisibility [yes*|no] : (en/dis)ables access by gdb/gdbserver to\n"
 "    Valgrind internal host status/memory\n"
@@ -364,7 +365,7 @@
       wcmd = strtok_r (NULL, " ", &ssaveptr);
       switch (kwdid = VG_(keyword_id) 
               ("all_errors n_errs_found last_error gdbserver_status memory"
-               " scheduler stats open_fds exectxt location",
+               " scheduler stats open_fds exectxt location unwind",
                wcmd, kwd_report_all)) {
       case -2:
       case -1: 
@@ -374,7 +375,7 @@
          VG_(show_all_errors)(/* verbosity */ 2, /* xml */ False);
          break;
       case  1: // n_errs_found
-         VG_(printf) ("n_errs_found %d n_errs_shown %d (vgdb-error %d) %s\n",
+         VG_(printf) ("n_errs_found %u n_errs_shown %u (vgdb-error %d) %s\n",
                       VG_(get_n_errs_found) (),
                       VG_(get_n_errs_shown) (),
                       VG_(dyn_vgdb_error),
@@ -456,6 +457,17 @@
          ret = 1;
          break;
       }
+      case 10: { /* unwind */
+         Addr address;
+         SizeT sz = 1;
+         if (VG_(strtok_get_address_and_size) (&address, 
+                                               &sz, &ssaveptr)) {
+            VG_(ppUnwindInfo) (address, address + sz - 1);
+         }
+         ret = 1;
+         break;
+      }
+
       default:
          vg_assert(0);
       }
@@ -751,12 +763,12 @@
             len = (PBUFSIZ + POVERHSIZ) / 2;
          char status[len];
          if (tst->thread_name) {
-            VG_(snprintf) (status, sizeof(status), "tid %d %s %s",
+            VG_(snprintf) (status, sizeof(status), "tid %u %s %s",
                            tst->tid, 
                            VG_(name_of_ThreadStatus)(tst->status),
                            tst->thread_name);
          } else {
-            VG_(snprintf) (status, sizeof(status), "tid %d %s",
+            VG_(snprintf) (status, sizeof(status), "tid %u %s",
                            tst->tid, 
                            VG_(name_of_ThreadStatus)(tst->status));
          }
@@ -888,7 +900,7 @@
          UWord *client_auxv = VG_(client_auxv);
          unsigned int client_auxv_len = 0;
          while (*client_auxv != 0) {
-            dlog(4, "auxv %lld %llx\n",
+            dlog(4, "auxv %llu %llx\n",
                  (ULong)*client_auxv,
                  (ULong)*(client_auxv+1));
             client_auxv++;
@@ -896,7 +908,7 @@
             client_auxv_len += 2 * sizeof(UWord);
          }
          client_auxv_len += 2 * sizeof(UWord);
-         dlog(4, "auxv len %d\n", client_auxv_len);
+         dlog(4, "auxv len %u\n", client_auxv_len);
 
          if (ofs >= client_auxv_len)
             n = -1;
@@ -1018,7 +1030,7 @@
    /* Protocol features query.  */
    if (strncmp ("qSupported", arg_own_buf, 10) == 0
        && (arg_own_buf[10] == ':' || arg_own_buf[10] == '\0')) {
-      VG_(sprintf) (arg_own_buf, "PacketSize=%x", PBUFSIZ - 1);
+      VG_(sprintf) (arg_own_buf, "PacketSize=%x", (UInt)PBUFSIZ - 1);
       /* Note: max packet size including frame and checksum, but without
          trailing null byte, which is not sent/received. */
 
@@ -1402,7 +1414,7 @@
          VG_(umsg) ("\nChild exited with status %d\n", zignal);
       if (status == 'X')
          VG_(umsg) ("\nChild terminated with signal = 0x%x (%s)\n",
-                    target_signal_to_host (zignal),
+                    (UInt)target_signal_to_host (zignal),
                     target_signal_to_name (zignal));
       if (status == 'W' || status == 'X') {
          VG_(umsg) ("Process exiting\n");
diff --git a/coregrind/m_gdbserver/signals.c b/coregrind/m_gdbserver/signals.c
index 69aa9b1..a9128a6 100644
--- a/coregrind/m_gdbserver/signals.c
+++ b/coregrind/m_gdbserver/signals.c
@@ -741,7 +741,7 @@
       }
 #endif
       error ("Valgrind GDBSERVER bug: (do_target_signal_to_host):"
-             " unrecognized target signal %d\n", oursig);
+             " unrecognized target signal %u\n", oursig);
       *oursig_ok = 0;
       return 0;
    }
diff --git a/coregrind/m_gdbserver/target.c b/coregrind/m_gdbserver/target.c
index 64ce5a3..3d54b75 100644
--- a/coregrind/m_gdbserver/target.c
+++ b/coregrind/m_gdbserver/target.c
@@ -44,7 +44,7 @@
 char *image_ptid(unsigned long ptid)
 {
   static char result[50];    // large enough
-  VG_(sprintf) (result, "id %ld", ptid);
+  VG_(sprintf) (result, "id %lu", ptid);
   return result;
 }
 #define get_thread(inf) ((struct thread_info *)(inf))
@@ -74,7 +74,7 @@
   /* call add_thread for all valgrind threads not known in gdb all_threads */
   for (tid = 1; tid < VG_N_THREADS; tid++) {
 
-#define LOCAL_THREAD_TRACE " ti* %p vgtid %d status %s as gdb ptid %s lwpid %d\n", \
+#define LOCAL_THREAD_TRACE " ti* %p vgtid %u status %s as gdb ptid %s lwpid %d\n", \
         ti, tid, VG_(name_of_ThreadStatus) (ts->status), \
         image_ptid (ptid), ts->os_state.lwpid
 
@@ -293,7 +293,7 @@
       if (*ourstatus == 'X') {
          sig = target_signal_from_host(exit_code_to_report);
          exit_code_to_report = 0;
-         dlog(1, "exit valgrind_wait status X signal %d\n", sig);
+         dlog(1, "exit valgrind_wait status X signal %u\n", sig);
          return sig;
       }
    }
@@ -320,7 +320,7 @@
    stop_pc = (*the_low_target.get_pc) ();
    
    dlog(1,
-        "exit valgrind_wait status T ptid %s stop_pc %s signal %d\n", 
+        "exit valgrind_wait status T ptid %s stop_pc %s signal %u\n", 
         image_ptid (wptid), sym (stop_pc), sig);
    return sig;
 }
@@ -351,7 +351,7 @@
       if (mod && VG_(debugLog_getLevel)() > 1) {
          char bufimage [2*size + 1];
          heximage (bufimage, buf, size);
-         dlog(3, "fetched register %d size %d name %s value %s tid %d status %s\n", 
+         dlog(3, "fetched register %d size %d name %s value %s tid %u status %s\n", 
               regno, size, the_low_target.reg_defs[regno].name, bufimage, 
               tid, VG_(name_of_ThreadStatus) (tst->status));
       }
@@ -419,7 +419,7 @@
             heximage (bufimage, buf, size);
             dlog(2, 
                  "stored register %d size %d name %s value %s "
-                 "tid %d status %s\n", 
+                 "tid %u status %s\n", 
                  regno, size, the_low_target.reg_defs[regno].name, bufimage, 
                  tid, VG_(name_of_ThreadStatus) (tst->status));
          }
@@ -681,7 +681,7 @@
 
    // Check we can read at least 2 address at the beginning of dtv.
    CHECK_DEREF(dtv, 2*sizeof(CORE_ADDR), "dtv 2 first entries");
-   dlog (2, "tid %d dtv %p\n", tst->tid, (void*)dtv);
+   dlog (2, "tid %u dtv %p\n", tst->tid, (void*)dtv);
 
    // Check we can read the modid
    CHECK_DEREF(lm+lm_modid_offset, sizeof(unsigned long int), "link_map modid");
@@ -766,7 +766,7 @@
   {
      ThreadState *tst = (ThreadState *) inferior_target_data (current_inferior);
      ThreadId tid = tst->tid;
-     dlog(1, "set_desired_inferior use_general %d found %p tid %d lwpid %d\n",
+     dlog(1, "set_desired_inferior use_general %d found %p tid %u lwpid %d\n",
           use_general, found, tid, tst->os_state.lwpid);
   }
 }
diff --git a/coregrind/m_gdbserver/target.h b/coregrind/m_gdbserver/target.h
index 1cacc1e..2ea8de9 100644
--- a/coregrind/m_gdbserver/target.h
+++ b/coregrind/m_gdbserver/target.h
@@ -211,7 +211,7 @@
    Returns True if the address of the variable could be found.
       *tls_addr is then set to this address.
    Returns False if tls support is not available for this arch, or
-   if an error occured. *tls_addr is set to NULL. */
+   if an error occurred. *tls_addr is set to NULL. */
 extern Bool valgrind_get_tls_addr (ThreadState *tst,
                                    CORE_ADDR offset,
                                    CORE_ADDR lm,
diff --git a/coregrind/m_gdbserver/utils.c b/coregrind/m_gdbserver/utils.c
index 511b1e6..83295a1 100644
--- a/coregrind/m_gdbserver/utils.c
+++ b/coregrind/m_gdbserver/utils.c
@@ -30,7 +30,7 @@
 {
    va_list args;
    if (sr_isError (sr))
-      VG_(umsg) ("error %ld %s\n", sr_Err(sr), VG_(strerror) (sr_Err(sr)));
+      VG_(umsg) ("error %lu %s\n", sr_Err(sr), VG_(strerror) (sr_Err(sr)));
    else
       VG_(umsg) ("sr_perror called with no error!!!\n");
    va_start (args, string);
diff --git a/coregrind/m_gdbserver/valgrind-low-tilegx.c b/coregrind/m_gdbserver/valgrind-low-tilegx.c
index 81ccafe..5d58850 100644
--- a/coregrind/m_gdbserver/valgrind-low-tilegx.c
+++ b/coregrind/m_gdbserver/valgrind-low-tilegx.c
@@ -225,11 +225,13 @@
 static
 const char* target_xml ( Bool shadow_mode )
 {
-  if (shadow_mode) {
+  return NULL;
+#if 0
+  if (shadow_mode)
     return "tilegx-linux-valgrind.xml";
-  } else {
+  else
     return "tilegx-linux.xml";
-  }
+#endif
 }
 
 static CORE_ADDR** target_get_dtv (ThreadState *tst)
diff --git a/coregrind/m_hashtable.c b/coregrind/m_hashtable.c
index bebcaab..fd6bb42 100644
--- a/coregrind/m_hashtable.c
+++ b/coregrind/m_hashtable.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -82,7 +82,7 @@
    return table;
 }
 
-Int VG_(HT_count_nodes) ( const VgHashTable *table )
+UInt VG_(HT_count_nodes) ( const VgHashTable *table )
 {
    return table->n_elements;
 }
@@ -308,7 +308,7 @@
           || key_occurences[i] > 0 
           || cno_occurences[i] > 0)
          VG_(message)(Vg_DebugMsg,
-                      "%s=%2d : nr chain %6d, nr keys %6d, nr elts %6d\n",
+                      "%s=%2u : nr chain %6u, nr keys %6u, nr elts %6u\n",
                       i == MAXOCCUR ? ">" : "N", i,
                       cno_occurences[i], key_occurences[i], elt_occurences[i]);
       nkey += key_occurences[i];
@@ -316,7 +316,7 @@
       ncno += cno_occurences[i];
    }
    VG_(message)(Vg_DebugMsg, 
-                "total nr of unique   slots: %6d, keys %6d, elts %6d."
+                "total nr of unique   slots: %6u, keys %6u, elts %6u."
                 " Avg chain len %3.1f\n",
                 ncno, nkey, nelt,
                 (Double)nelt/(Double)(ncno == cno_occurences[0] ?
diff --git a/coregrind/m_initimg/initimg-darwin.c b/coregrind/m_initimg/initimg-darwin.c
index cd6e2ff..5bec6db 100644
--- a/coregrind/m_initimg/initimg-darwin.c
+++ b/coregrind/m_initimg/initimg-darwin.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c
index 140eb78..1911e2b 100644
--- a/coregrind/m_initimg/initimg-linux.c
+++ b/coregrind/m_initimg/initimg-linux.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -478,7 +478,7 @@
       auxsize +                               /* auxv */
       VG_ROUNDUP(stringsize, sizeof(Word));   /* strings (aligned) */
 
-   if (0) VG_(printf)("stacksize = %d\n", stacksize);
+   if (0) VG_(printf)("stacksize = %u\n", stacksize);
 
    /* client_SP is the client's stack pointer */
    client_SP = clstack_end - stacksize;
@@ -494,10 +494,10 @@
    clstack_max_size = VG_PGROUNDUP(clstack_max_size);
 
    if (0)
-      VG_(printf)("stringsize=%d auxsize=%d stacksize=%d maxsize=0x%x\n"
+      VG_(printf)("stringsize=%u auxsize=%u stacksize=%u maxsize=0x%lx\n"
                   "clstack_start %p\n"
                   "clstack_end   %p\n",
-	          stringsize, auxsize, stacksize, (Int)clstack_max_size,
+                  stringsize, auxsize, stacksize, clstack_max_size,
                   (void*)clstack_start, (void*)clstack_end);
 
    /* ==================== allocate space ==================== */
@@ -698,6 +698,12 @@
                  in syswrap-arm-linux.c rather than to base this on
                  conditional compilation. */
             }
+#           elif defined(VGP_s390x_linux)
+            {
+               /* Advertise hardware features "below" TE only.  TE and VXRS
+                  (and anything above) are not supported by Valgrind. */
+               auxv->u.a_val &= VKI_HWCAP_S390_TE - 1;
+            }
 #           endif
             break;
 #        if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
@@ -812,7 +818,7 @@
          default:
             /* stomp out anything we don't know about */
             VG_(debugLog)(2, "initimg",
-                             "stomping auxv entry %lld\n", 
+                             "stomping auxv entry %llu\n", 
                              (ULong)auxv->a_type);
             auxv->a_type = AT_IGNORE;
             break;
@@ -957,7 +963,7 @@
       if (szB < m1) szB = m1;
       szB = VG_PGROUNDUP(szB);
       VG_(debugLog)(1, "initimg",
-                       "Setup client stack: size will be %ld\n", szB);
+                       "Setup client stack: size will be %lu\n", szB);
 
       iifii.clstack_max_size = szB;
 
@@ -977,9 +983,9 @@
                        (void*)VG_(brk_base) );
       VG_(debugLog)(2, "initimg",
                        "Client info: "
-                       "initial_SP=%p max_stack_size=%ld\n",
+                       "initial_SP=%p max_stack_size=%lu\n",
                        (void*)(iifii.initial_client_SP),
-                       (SizeT)iifii.clstack_max_size );
+                       iifii.clstack_max_size );
    }
 
    //--------------------------------------------------------------
diff --git a/coregrind/m_initimg/initimg-pathscan.c b/coregrind/m_initimg/initimg-pathscan.c
index 17da98c..5b218fb 100644
--- a/coregrind/m_initimg/initimg-pathscan.c
+++ b/coregrind/m_initimg/initimg-pathscan.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_initimg/initimg-solaris.c b/coregrind/m_initimg/initimg-solaris.c
new file mode 100644
index 0000000..ee4f155
--- /dev/null
+++ b/coregrind/m_initimg/initimg-solaris.c
@@ -0,0 +1,1038 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Startup: create initial process image on Solaris             ---*/
+/*---                                            initimg-solaris.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2011-2015 Petr Pavlu
+      setup@dagobah.cz
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Copyright 2013-2015, Ivo Raisr <ivosh@ivosh.net>. */
+
+#if defined(VGO_solaris)
+
+/* Note: This file is based on initimg-linux.c. */
+
+#include "pub_core_basics.h"
+#include "pub_core_vki.h"
+#include "pub_core_debuglog.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcfile.h"
+#include "pub_core_libcproc.h"
+#include "pub_core_libcprint.h"
+#include "pub_core_xarray.h"
+#include "pub_core_clientstate.h"
+#include "pub_core_aspacemgr.h"
+#include "pub_core_mallocfree.h"
+#include "pub_core_machine.h"
+#include "pub_core_ume.h"
+#include "pub_core_options.h"
+#include "pub_core_syswrap.h"
+#include "pub_core_tooliface.h"       /* VG_TRACK */
+#include "pub_core_threadstate.h"     /* ThreadArchState */
+#include "priv_initimg_pathscan.h"
+#include "pub_core_initimg.h"         /* self */
+
+
+/*====================================================================*/
+/*=== Loading the client                                           ===*/
+/*====================================================================*/
+
+/* Load the client whose name is VG_(argv_the_exename). */
+static void load_client(/*OUT*/ExeInfo *info,
+                        /*OUT*/HChar *out_exe_name, SizeT out_exe_name_size)
+{
+   const HChar *exe_name;
+   Int ret;
+   SysRes res;
+
+   vg_assert(VG_(args_the_exename));
+   exe_name = ML_(find_executable)(VG_(args_the_exename));
+
+   if (!exe_name) {
+      VG_(printf)("valgrind: %s: command not found\n", VG_(args_the_exename));
+      /* Return POSIX's NOTFOUND. */
+      VG_(exit)(127);
+      /*NOTREACHED*/
+   }
+
+   VG_(memset)(info, 0, sizeof(*info));
+   ret = VG_(do_exec)(exe_name, info);
+   if (ret < 0) {
+      VG_(printf)("valgrind: could not execute '%s'\n", exe_name);
+      VG_(exit)(1);
+      /*NOTREACHED*/
+   }
+
+   /* The client was successfully loaded!  Continue. */
+
+   /* Save resolved exename. */
+   if (VG_(strlen)(exe_name) + 1 > out_exe_name_size) {
+      /* This should not really happen. */
+      VG_(printf)("valgrind: execname %s is too long\n", exe_name);
+      VG_(exit)(1);
+      /*NOTREACHED*/
+   }
+   VG_(strcpy)(out_exe_name, exe_name);
+
+   /* Get hold of a file descriptor which refers to the client executable.
+      This is needed for attaching to GDB. */
+   res = VG_(open)(exe_name, VKI_O_RDONLY, VKI_S_IRUSR);
+   if (!sr_isError(res))
+      VG_(cl_exec_fd) = sr_Res(res);
+
+   /* Set initial brk values. */
+   if (info->ldsoexec) {
+      VG_(brk_base) = VG_(brk_limit) = -1;
+   } else {
+      VG_(brk_base) = VG_(brk_limit) = info->brkbase;
+   }
+}
+
+
+/*====================================================================*/
+/*=== Setting up the client's environment                          ===*/
+/*====================================================================*/
+
+/* Prepare the client's environment.  This is basically a copy of our
+   environment, except:
+
+     LD_PRELOAD=$VALGRIND_LIB/vgpreload_core-PLATFORM.so:
+                ($VALGRIND_LIB/vgpreload_TOOL-PLATFORM.so:)?
+                $LD_PRELOAD
+
+   If this is missing, then it is added.
+
+   Also, remove any binding for VALGRIND_LAUNCHER=.  The client should not be
+   able to see this.
+
+   If this needs to handle any more variables it should be hacked into
+   something table driven.  The copy is VG_(malloc)'d space.
+*/
+static HChar **setup_client_env(HChar **origenv, const HChar *toolname)
+{
+   const HChar *ld_preload = "LD_PRELOAD=";
+   SizeT ld_preload_len = VG_(strlen)(ld_preload);
+   Bool ld_preload_done = False;
+   SizeT vglib_len = VG_(strlen)(VG_(libdir));
+
+   HChar **cpp;
+   HChar **ret;
+   HChar *preload_tool_path;
+   SizeT envc, i;
+
+   /* Alloc space for the
+        <path>/vgpreload_core-<platform>.so and
+        <path>/vgpreload_<tool>-<platform>.so
+      paths.  We might not need the space for the tool path, but it doesn't
+      hurt to over-allocate briefly.  */
+   SizeT preload_core_path_size = vglib_len + sizeof("/vgpreload_core-") - 1
+                                            + sizeof(VG_PLATFORM) - 1
+                                            + sizeof(".so");
+   SizeT preload_tool_path_size = vglib_len + sizeof("/vgpreload_") - 1
+                                            + VG_(strlen)(toolname) + 1 /*-*/
+                                            + sizeof(VG_PLATFORM) - 1
+                                            + sizeof(".so");
+   SizeT preload_string_size = preload_core_path_size
+                               + preload_tool_path_size;
+   HChar *preload_string = VG_(malloc)("initimg-solaris.sce.1",
+                                       preload_string_size);
+
+   /* Check that the parameters are sane. */
+   vg_assert(origenv);
+   vg_assert(toolname);
+
+   /* Determine if there's a vgpreload_<tool>-<platform>.so file, and setup
+      preload_string. */
+   preload_tool_path = VG_(malloc)("initimg-solaris.sce.2",
+                                   preload_tool_path_size);
+   VG_(sprintf)(preload_tool_path, "%s/vgpreload_%s-%s.so", VG_(libdir),
+                toolname, VG_PLATFORM);
+   if (!VG_(access)(preload_tool_path, True/*r*/, False/*w*/, False/*x*/)) {
+      /* The tool's .so exists, put it into LD_PRELOAD with the core's so. */
+      VG_(sprintf)(preload_string, "%s/vgpreload_core-%s.so:%s", VG_(libdir),
+                   VG_PLATFORM, preload_tool_path);
+   }
+   else {
+      /* The tool's .so doesn't exist, put only the core's .so into
+         LD_PRELOAD. */
+      VG_(sprintf)(preload_string, "%s/vgpreload_core-%s.so", VG_(libdir),
+                   VG_PLATFORM);
+   }
+   VG_(free)(preload_tool_path);
+
+   VG_(debugLog)(2, "initimg", "preload_string:\n");
+   VG_(debugLog)(2, "initimg", "  \"%s\"\n", preload_string);
+
+   /* Count the original size of the env. */
+   envc = 0;
+   for (cpp = origenv; *cpp; cpp++)
+      envc++;
+
+   /* Allocate a new space, envc + 1 new entry + NULL. */
+   ret = VG_(malloc)("initimg-solaris.sce.3", sizeof(HChar*) * (envc + 1 + 1));
+
+   /* Copy it over. */
+   for (cpp = ret; *origenv; )
+      *cpp++ = *origenv++;
+   *cpp = NULL;
+
+   vg_assert(envc == cpp - ret);
+
+   /* Walk over the new environment, mashing as we go. */
+   for (cpp = ret; *cpp; cpp++) {
+      if (VG_(memcmp)(*cpp, ld_preload, ld_preload_len))
+         continue;
+
+      /* LD_PRELOAD entry found, smash it. */
+      SizeT size = VG_(strlen)(*cpp) + 1 /*:*/
+                                     + preload_string_size;
+      HChar *cp = VG_(malloc)("initimg-solaris.sce.4", size);
+
+      VG_(sprintf)(cp, "%s%s:%s", ld_preload, preload_string,
+                   (*cpp) + ld_preload_len);
+      *cpp = cp;
+
+      ld_preload_done = True;
+   }
+
+   /* Add the missing bits. */
+   if (!ld_preload_done) {
+      SizeT size = ld_preload_len + preload_string_size;
+      HChar *cp = VG_(malloc)("initimg-solaris.sce.5", size);
+
+      VG_(sprintf)(cp, "%s%s", ld_preload, preload_string);
+      ret[envc++] = cp;
+   }
+
+   /* We've got ret[0 .. envc-1] live now. */
+
+   /* Find and remove a binding for VALGRIND_LAUNCHER. */
+   {
+      const HChar *v_launcher = VALGRIND_LAUNCHER "=";
+      SizeT v_launcher_len = VG_(strlen)(v_launcher);
+
+      for (i = 0; i < envc; i++)
+         if (!VG_(memcmp(ret[i], v_launcher, v_launcher_len))) {
+            /* VALGRIND_LAUNCHER was found. */
+            break;
+         }
+
+      if (i < envc) {
+         /* VALGRIND_LAUNCHER was found, remove it. */
+         for (; i < envc - 1; i++)
+            ret[i] = ret[i + 1];
+         envc--;
+      }
+   }
+
+   VG_(free)(preload_string);
+   ret[envc] = NULL;
+
+   return ret;
+}
+
+
+/*====================================================================*/
+/*=== Setting up the client's stack                                ===*/
+/*====================================================================*/
+
+/* Add a string onto the string table, and return its address. */
+static HChar *copy_str(HChar **tab, const HChar *str)
+{
+   HChar *cp = *tab;
+   HChar *orig = cp;
+
+   while (*str)
+      *cp++ = *str++;
+   *cp++ = '\0';
+
+   *tab = cp;
+
+   return orig;
+}
+
+#if defined(SOLARIS_RESERVE_SYSSTAT_ADDR) || \
+    defined(SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR)
+#define ORIG_AUXV_PRESENT 1
+#endif
+
+#if defined(ORIG_AUXV_PRESENT)
+/* The auxiliary vector might not be present. So we cross-check pointers from
+   argv and envp pointing to the string table. */ 
+static vki_auxv_t *find_original_auxv(Addr init_sp)
+{
+   HChar **sp = (HChar **) init_sp;
+   HChar *lowest_str_ptr = (HChar *) UINTPTR_MAX; // lowest ptr to string table
+
+   sp++; // skip argc
+
+   while (*sp != NULL) { // skip argv
+      if (*sp < lowest_str_ptr)
+         lowest_str_ptr = *sp;
+      sp++;
+   }
+   sp++;
+
+   while (*sp != 0) { // skip env
+      if (*sp < lowest_str_ptr)
+         lowest_str_ptr = *sp;
+      sp++;
+   }
+   sp++;
+
+   if ((Addr) sp < (Addr) lowest_str_ptr) {
+      return (vki_auxv_t *) sp;
+   } else {
+      return NULL;
+   }
+}
+
+static void copy_auxv_entry(const vki_auxv_t *orig_auxv, Int type,
+                            const HChar *type_name, vki_auxv_t *auxv)
+{
+   vg_assert(auxv != NULL);
+
+   if (orig_auxv == NULL) {
+      VG_(printf)("valgrind: Cannot locate auxiliary vector.\n");
+      VG_(printf)("valgrind: Cannot continue. Sorry.\n\n");
+      VG_(exit)(1);
+   }
+
+   for ( ; orig_auxv->a_type != VKI_AT_NULL; orig_auxv++) {
+      if (orig_auxv->a_type == type) {
+         auxv->a_type = type;
+         auxv->a_un.a_val = orig_auxv->a_un.a_val;
+         return;
+      }
+   }
+
+   VG_(printf)("valgrind: Cannot locate %s in the aux\n", type_name);
+   VG_(printf)("valgrind: vector. Cannot continue. Sorry.\n\n");
+   VG_(exit)(1);
+}
+#endif /* ORIG_AUXV_PRESENT */
+
+/* This sets up the client's initial stack, containing the args,
+   environment and aux vector.
+
+   The format of the stack is:
+
+   higher address +-----------------+ <- clstack_end
+                  |                 |
+                  : string table    :
+                  |                 |
+                  +-----------------+
+                  | AT_NULL         |
+                  -                 -
+                  | auxv            |
+                  +-----------------+
+                  | NULL            |
+                  -                 -
+                  | envp            |
+                  +-----------------+
+                  | NULL            |
+                  -                 -
+                  | argv            |
+                  +-----------------+
+                  | argc            |
+   lower address  +-----------------+ <- sp
+                  | undefined       |
+                  :                 :
+
+   Allocate and create the initial client stack.  It is allocated down from
+   clstack_end, which was previously determined by the address space manager.
+   The returned value is the SP value for the client.
+
+   Note that auxiliary vector is *not* created by kernel on illumos and
+   Solaris 11 if the program is statically linked (which is our case).
+   Although we now taught Solaris 12 to create the auxiliary vector, we still
+   have to build auxv from scratch, to make the code consistent. */
+
+static Addr setup_client_stack(Addr init_sp,
+                               HChar **orig_envp,
+                               const ExeInfo *info,
+                               Addr clstack_end,
+                               SizeT clstack_max_size,
+                               const HChar *resolved_exe_name)
+{
+   SysRes res;
+   HChar **cpp;
+   HChar *strtab;       /* string table */
+   HChar *stringbase;
+   Addr *ptr;
+   vki_auxv_t *auxv;
+   SizeT stringsize;    /* total size of strings in bytes */
+   SizeT auxsize;       /* total size of auxv in bytes */
+   Int argc;            /* total argc */
+   Int envc;            /* total number of env vars */
+   SizeT stacksize;     /* total client stack size */
+   Addr client_SP;      /* client stack base (initial SP) */
+   Addr clstack_start;
+   Int i;
+
+   vg_assert(VG_IS_PAGE_ALIGNED(clstack_end + 1));
+   vg_assert(VG_(args_the_exename));
+   vg_assert(VG_(args_for_client));
+
+#  if defined(ORIG_AUXV_PRESENT)
+   /* Get the original auxv (if any). */
+   vki_auxv_t *orig_auxv = find_original_auxv(init_sp);
+#  endif /* ORIG_AUXV_PRESENT */
+
+   /* ==================== compute sizes ==================== */
+
+   /* First of all, work out how big the client stack will be. */
+   stringsize = 0;
+
+   /* Paste on the extra args if the loader needs them (i.e. the #!
+      interpreter and its argument). */
+   argc = 0;
+   if (info->interp_name) {
+      argc++;
+      stringsize += VG_(strlen)(info->interp_name) + 1;
+   }
+   if (info->interp_args) {
+      argc++;
+      stringsize += VG_(strlen)(info->interp_args) + 1;
+   }
+
+   /* Now scan the args we're given... */
+   argc++;
+   stringsize += VG_(strlen)(VG_(args_the_exename)) + 1;
+   for (i = 0; i < VG_(sizeXA)(VG_(args_for_client)); i++) {
+      argc++;
+      stringsize += VG_(strlen)(*(HChar**)
+                                  VG_(indexXA)(VG_(args_for_client), i)) + 1;
+   }
+
+   /* ...and the environment. */
+   envc = 0;
+   for (cpp = orig_envp; *cpp; cpp++) {
+      envc++;
+      stringsize += VG_(strlen)(*cpp) + 1;
+   }
+
+   /* Now, how big is the auxv?
+
+      AT_SUN_PLATFORM
+      AT_SUN_EXECNAME
+      AT_PHDR            (not for elfs with no PT_PHDR, such as ld.so.1)
+      AT_BASE
+      AT_FLAGS
+      AT_PAGESZ
+      AT_SUN_AUXFLAFGS
+      AT_SUN_HWCAP
+      AT_SUN_SYSSTAT_ADDR      (if supported)
+      AT_SUN_SYSSTAT_ZONE_ADDR (if supported)
+      AT_NULL
+
+      It would be possible to also add AT_PHENT, AT_PHNUM, AT_ENTRY,
+      AT_SUN_LDDATA, but they don't seem to be so important. */
+   auxsize = 9 * sizeof(*auxv);
+#  if defined(SOLARIS_RESERVE_SYSSTAT_ADDR)
+   auxsize += sizeof(*auxv);
+#  endif
+#  if defined(SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR)
+   auxsize += sizeof(*auxv);
+#  endif
+
+#  if defined(VGA_x86) || defined(VGA_amd64)
+   /* AT_SUN_PLATFORM string. */
+   stringsize += VG_(strlen)("i86pc") + 1;
+#  else
+#    error "Unknown architecture"
+#  endif
+   /* AT_SUN_EXECNAME string. */
+   stringsize += VG_(strlen)(resolved_exe_name) + 1;
+
+   /* Calculate how big the client stack is. */
+   stacksize =
+      sizeof(Word) +                            /* argc */
+      sizeof(HChar**) +                         /* argc[0] == exename */
+      sizeof(HChar**) * argc +                  /* argv */
+      sizeof(HChar**) +                         /* terminal NULL */
+      sizeof(HChar**) * envc +                  /* envp */
+      sizeof(HChar**) +                         /* terminal NULL */
+      auxsize +                                 /* auxv */
+      VG_ROUNDUP(stringsize, sizeof(Word));     /* strings (aligned) */
+
+   /* The variable client_SP is the client's stack pointer. */
+   client_SP = clstack_end - stacksize;
+   client_SP = VG_ROUNDDN(client_SP, 16); /* Make stack 16 byte aligned. */
+
+   /* Calculate base of the string table (aligned). */
+   stringbase = (HChar*)clstack_end - VG_ROUNDUP(stringsize, sizeof(Int));
+   strtab = stringbase;
+
+   clstack_start = VG_PGROUNDDN(client_SP);
+
+   /* Calculate the max stack size. */
+   clstack_max_size = VG_PGROUNDUP(clstack_max_size);
+
+   /* Record stack extent -- needed for stack-change code. */
+   VG_(clstk_start_base) = clstack_start;
+   VG_(clstk_end) = clstack_end;
+   VG_(clstk_max_size) = clstack_max_size;
+
+   if (0)
+      VG_(printf)("stringsize=%lu, auxsize=%lu, stacksize=%lu, maxsize=%#lx\n"
+                  "clstack_start %#lx\n"
+                  "clstack_end   %#lx\n",
+                  stringsize, auxsize, stacksize, clstack_max_size,
+                  clstack_start, clstack_end);
+
+   /* ==================== allocate space ==================== */
+
+   {
+      SizeT anon_size = clstack_end - clstack_start + 1;
+      SizeT resvn_size = clstack_max_size - anon_size;
+      Addr anon_start = clstack_start;
+      Addr resvn_start = anon_start - resvn_size;
+      SizeT inner_HACK = 0;
+      Bool ok;
+
+      /* So far we've only accounted for space requirements down to the stack
+         pointer.  If this target's ABI requires a redzone below the stack
+         pointer, we need to allocate an extra page, to handle the worst case
+         in which the stack pointer is almost at the bottom of a page, and so
+         there is insufficient room left over to put the redzone in.  In this
+         case the simple thing to do is allocate an extra page, by shrinking
+         the reservation by one page and growing the anonymous area by a
+         corresponding page. */
+      vg_assert(VG_STACK_REDZONE_SZB >= 0);
+      vg_assert(VG_STACK_REDZONE_SZB < VKI_PAGE_SIZE);
+      if (VG_STACK_REDZONE_SZB > 0) {
+         vg_assert(resvn_size > VKI_PAGE_SIZE);
+         resvn_size -= VKI_PAGE_SIZE;
+         anon_start -= VKI_PAGE_SIZE;
+         anon_size += VKI_PAGE_SIZE;
+      }
+
+      vg_assert(VG_IS_PAGE_ALIGNED(anon_size));
+      vg_assert(VG_IS_PAGE_ALIGNED(resvn_size));
+      vg_assert(VG_IS_PAGE_ALIGNED(anon_start));
+      vg_assert(VG_IS_PAGE_ALIGNED(resvn_start));
+      vg_assert(resvn_start == clstack_end + 1 - clstack_max_size);
+
+#     ifdef ENABLE_INNER
+      /* Create 1M non-fault-extending stack. */
+      inner_HACK = 1024 * 1024;
+#     endif
+
+      if (0)
+         VG_(printf)("resvn_start=%#lx, resvn_size=%#lx\n"
+                     "anon_start=%#lx, anon_size=%#lx\n",
+                     resvn_start, resvn_size, anon_start, anon_size);
+
+      /* Create a shrinkable reservation followed by an anonymous segment.
+         Together these constitute a growdown stack. */
+      ok = VG_(am_create_reservation)(resvn_start,
+                                      resvn_size - inner_HACK,
+                                      SmUpper,
+                                      anon_size + inner_HACK);
+      if (ok) {
+         /* Allocate a stack - mmap enough space for the stack. */
+         res = VG_(am_mmap_anon_fixed_client)(anon_start - inner_HACK,
+                                              anon_size + inner_HACK,
+                                              info->stack_prot);
+      }
+      if (!ok || sr_isError(res)) {
+         /* Allocation of the stack failed.  We have to stop. */
+         VG_(printf)("valgrind: "
+                     "I failed to allocate space for the application's stack.\n");
+         VG_(printf)("valgrind: "
+                     "This may be the result of a very large --main-stacksize=\n");
+         VG_(printf)("valgrind: setting.  Cannot continue.  Sorry.\n\n");
+         VG_(exit)(1);
+         /*NOTREACHED*/
+      }
+   }
+
+   /* ==================== create client stack ==================== */
+
+   ptr = (Addr*)client_SP;
+
+   /* Copy-out client argc. */
+   *ptr++ = argc;
+
+   /* Copy-out client argv. */
+   if (info->interp_name) {
+      *ptr++ = (Addr)copy_str(&strtab, info->interp_name);
+      VG_(free)(info->interp_name);
+   }
+   if (info->interp_args) {
+      *ptr++ = (Addr)copy_str(&strtab, info->interp_args);
+      VG_(free)(info->interp_args);
+   }
+
+   *ptr++ = (Addr)copy_str(&strtab, VG_(args_the_exename));
+   for (i = 0; i < VG_(sizeXA)(VG_(args_for_client)); i++)
+      *ptr++ = (Addr)copy_str(
+                  &strtab, *(HChar**) VG_(indexXA)(VG_(args_for_client), i));
+   *ptr++ = 0;
+
+   /* Copy-out envp. */
+   VG_(client_envp) = (HChar**)ptr;
+   for (cpp = orig_envp; *cpp; ptr++, cpp++)
+      *ptr = (Addr)copy_str(&strtab, *cpp);
+   *ptr++ = 0;
+
+   /* Create aux vector. */
+   auxv = (auxv_t*)ptr;
+   VG_(client_auxv) = (UWord*)ptr;
+
+   /* AT_SUN_PLATFORM */
+   auxv->a_type = VKI_AT_SUN_PLATFORM;
+#  if defined(VGA_x86) || defined(VGA_amd64)
+   auxv->a_un.a_ptr = copy_str(&strtab, "i86pc");
+#  else
+#    error "Unknown architecture"
+#  endif
+   auxv++;
+
+   /* AT_SUN_EXECNAME */
+   auxv->a_type = VKI_AT_SUN_EXECNAME;
+   auxv->a_un.a_ptr = copy_str(&strtab, resolved_exe_name);
+   auxv++;
+
+   /* AT_PHDR */
+   if ((info->real_phdr_present) && (info->phdr != 0)) {
+      auxv->a_type = VKI_AT_PHDR;
+      auxv->a_un.a_val = info->phdr;
+      auxv++;
+   }
+
+   /* AT_BASE */
+   auxv->a_type = VKI_AT_BASE;
+   auxv->a_un.a_val = info->interp_offset;
+   auxv++;
+
+   /* AT_FLAGS */
+   auxv->a_type = VKI_AT_FLAGS;
+#  if defined(VGA_x86) || defined(VGA_amd64)
+   auxv->a_un.a_val = 0; /* 0 on i86pc */
+#  else
+#    error "Unknown architecture"
+#  endif
+   auxv++;
+
+   /* AT_PAGESZ */
+   auxv->a_type = VKI_AT_PAGESZ;
+   auxv->a_un.a_val = VKI_PAGE_SIZE;
+   auxv++;
+
+   /* AT_SUN_AUXFLAFGS */
+   auxv->a_type = VKI_AT_SUN_AUXFLAGS;
+   /* XXX Handle AF_SUN_SETUGID? */
+   auxv->a_un.a_val = VKI_AF_SUN_HWCAPVERIFY;
+   auxv++;
+
+   /* AT_SUN_HWCAP */
+   {
+      VexArch vex_arch;
+      VexArchInfo vex_archinfo;
+      UInt hwcaps;
+
+      VG_(machine_get_VexArchInfo)(&vex_arch, &vex_archinfo);
+
+#     if defined(VGA_x86)
+      vg_assert(vex_arch == VexArchX86);
+
+      /* Set default hwcaps. */
+      hwcaps =
+           VKI_AV_386_FPU       /* x87-style floating point */
+         | VKI_AV_386_TSC       /* rdtsc insn */
+         | VKI_AV_386_CX8       /* cmpxchg8b insn */
+         | VKI_AV_386_SEP       /* sysenter and sysexit */
+         | VKI_AV_386_AMD_SYSC  /* AMD's syscall and sysret */
+         | VKI_AV_386_CMOV      /* conditional move insns */
+         | VKI_AV_386_MMX       /* MMX insn */
+         | VKI_AV_386_AHF;      /* lahf/sahf insns */
+
+      /* Handle additional hwcaps. */
+      if (vex_archinfo.hwcaps & VEX_HWCAPS_X86_SSE1)
+         hwcaps |=
+              VKI_AV_386_FXSR   /* fxsave and fxrstor */
+            | VKI_AV_386_SSE;   /* SSE insns and regs  */
+      if (vex_archinfo.hwcaps & VEX_HWCAPS_X86_SSE2) {
+         vg_assert(vex_archinfo.hwcaps & VEX_HWCAPS_X86_SSE1);
+         hwcaps |=
+              VKI_AV_386_SSE2;  /* SSE2 insns and regs */
+      }
+      if (vex_archinfo.hwcaps & VEX_HWCAPS_X86_SSE3) {
+         vg_assert(vex_archinfo.hwcaps & VEX_HWCAPS_X86_SSE2);
+         hwcaps |=
+              VKI_AV_386_SSE3   /* SSE3 insns and regs */
+            | VKI_AV_386_SSSE3; /* Intel SSSE3 insns */
+      }
+      if (vex_archinfo.hwcaps & VEX_HWCAPS_X86_LZCNT)
+         hwcaps |=
+              VKI_AV_386_AMD_LZCNT; /* AMD's LZCNT insn */
+
+      /* No support for:
+         AV_386_AMD_MMX         AMD's MMX insns
+         AV_386_AMD_3DNow       AMD's 3Dnow! insns
+         AV_386_AMD_3DNowx      AMD's 3Dnow! extended insns
+         AV_386_CX16            cmpxchg16b insn
+         AV_386_TSCP            rdtscp instruction
+         AV_386_AMD_SSE4A       AMD's SSE4A insns
+         AV_386_POPCNT          POPCNT insn
+         AV_386_SSE4_1          Intel SSE4.1 insns
+         AV_386_SSE4_2          Intel SSE4.2 insns
+         AV_386_MOVBE           Intel MOVBE insns
+         AV_386_AES             Intel AES insns
+         AV_386_PCLMULQDQ       Intel PCLMULQDQ insn
+         AV_386_XSAVE           Intel XSAVE/XRSTOR insns
+         AV_386_AVX             Intel AVX insns
+         illumos only:
+            AV_386_VMX          Intel VMX support
+            AV_386_AMD_SVM      AMD SVM support
+         solaris only:
+            AV_386_AMD_XOP      AMD XOP insns
+            AV_386_AMD_FMA4     AMD FMA4 insns */
+
+#     elif defined(VGA_amd64)
+      vg_assert(vex_arch == VexArchAMD64);
+
+      /* Set default hwcaps. */
+      hwcaps =
+           VKI_AV_386_FPU       /* x87-style floating point */
+         | VKI_AV_386_TSC       /* rdtsc insn */
+         | VKI_AV_386_CX8       /* cmpxchg8b insn */
+         | VKI_AV_386_AMD_SYSC  /* AMD's syscall and sysret */
+         | VKI_AV_386_CMOV      /* conditional move insns */
+         | VKI_AV_386_MMX       /* MMX insn */
+         | VKI_AV_386_AHF       /* lahf/sahf insns */
+         | VKI_AV_386_FXSR      /* fxsave and fxrstor */
+         | VKI_AV_386_SSE       /* SSE insns and regs  */
+         | VKI_AV_386_SSE2;     /* SSE2 insns and regs */
+
+      /* Handle additional hwcaps. */
+      if (vex_archinfo.hwcaps & VEX_HWCAPS_AMD64_SSE3)
+         hwcaps |=
+              VKI_AV_386_SSE3   /* SSE3 insns and regs */
+            | VKI_AV_386_SSSE3; /* Intel SSSE3 insns */
+      if (vex_archinfo.hwcaps & VEX_HWCAPS_AMD64_CX16)
+         hwcaps |=
+              VKI_AV_386_CX16;  /* cmpxchg16b insn */
+      if (vex_archinfo.hwcaps & VEX_HWCAPS_AMD64_LZCNT)
+         hwcaps |=
+              VKI_AV_386_AMD_LZCNT; /* AMD's LZCNT insn */
+      if (vex_archinfo.hwcaps & VEX_HWCAPS_AMD64_RDTSCP)
+         hwcaps |=
+              VKI_AV_386_TSCP;  /* rdtscp instruction */
+      if ((vex_archinfo.hwcaps & VEX_HWCAPS_AMD64_SSE3) &&
+          (vex_archinfo.hwcaps & VEX_HWCAPS_AMD64_CX16)) {
+         /* The CPUID simulation provided by VEX claims to have POPCNT, AES
+            and SSE4 (SSE4.1/SSE4.2) in the SSE3+CX16 configuration. */
+         hwcaps |=
+              VKI_AV_386_POPCNT /* POPCNT insn */
+            | VKI_AV_386_AES    /* Intel AES insns */
+            | VKI_AV_386_SSE4_1 /* Intel SSE4.1 insns */
+            | VKI_AV_386_SSE4_2; /* Intel SSE4.2 insns */
+      }
+      if ((vex_archinfo.hwcaps & VEX_HWCAPS_AMD64_SSE3) &&
+          (vex_archinfo.hwcaps & VEX_HWCAPS_AMD64_CX16) &&
+          (vex_archinfo.hwcaps & VEX_HWCAPS_AMD64_AVX)) {
+         /* The CPUID simulation provided by VEX claims to have PCLMULQDQ and
+            XSAVE in the SSE3+CX16+AVX configuration. */
+         hwcaps |=
+              VKI_AV_386_PCLMULQDQ /* Intel PCLMULQDQ insn */
+            | VKI_AV_386_XSAVE; /* Intel XSAVE/XRSTOR insns */
+      }
+      /* No support for:
+         AV_386_SEP             sysenter and sysexit
+         AV_386_AMD_MMX         AMD's MMX insns
+         AV_386_AMD_3DNow       AMD's 3Dnow! insns
+         AV_386_AMD_3DNowx      AMD's 3Dnow! extended insns
+         AV_386_AMD_SSE4A       AMD's SSE4A insns
+         AV_386_MOVBE           Intel MOVBE insns
+         AV_386_AVX             Intel AVX insns
+         illumos only:
+            AV_386_VMX          Intel VMX support
+            AV_386_AMD_SVM      AMD SVM support
+         solaris only:
+            AV_386_AMD_XOP      AMD XOP insns
+            AV_386_AMD_FMA4     AMD FMA4 insns
+
+         TODO VEX supports AVX, BMI and AVX2. Investigate if they can be
+         enabled on Solaris/illumos.
+       */
+
+#     else
+#       error "Unknown architecture"
+#     endif
+
+      auxv->a_type = VKI_AT_SUN_HWCAP;
+      auxv->a_un.a_val = hwcaps;
+      auxv++;
+   }
+
+   /* AT_SUN_HWCAP2 */
+   {
+      /* No support for:
+         illumos only:
+            AV_386_2_F16C       F16C half percision extensions
+            AV_386_2_RDRAND     RDRAND insn
+         solaris only:
+            AV2_386_RDRAND      Intel RDRAND insns
+            AV2_386_FMA         Intel FMA insn
+            AV2_386_F16C        IEEE half precn(float) insn
+            AV2_386_AMD_TBM     AMD TBM insn
+            AV2_386_BMI1        Intel BMI1 insn
+            AV2_386_FSGSBASE    Intel RD/WR FS/GSBASE insn
+            AV2_386_AVX2        Intel AVX2 insns
+            AV2_386_BMI2        Intel BMI2 insns
+            AV2_386_HLE         Intel HLE insns
+            AV2_386_RTM         Intel RTM insns
+            AV2_386_EFS         Intel Enhanced Fast String
+            AV2_386_RDSEED      Intel RDSEED insn
+            AV2_386_ADX         Intel ADX insns
+            AV2_386_PRFCHW      Intel PREFETCHW hint
+       */
+   }
+
+#  if defined(SOLARIS_RESERVE_SYSSTAT_ADDR)
+   /* AT_SUN_SYSSTAT_ADDR */
+   copy_auxv_entry(orig_auxv, VKI_AT_SUN_SYSSTAT_ADDR,
+                   "AT_SUN_SYSSTAT_ADDR", auxv);
+   VG_(change_mapping_ownership)(auxv->a_un.a_val, True);
+   auxv++;
+#  endif
+
+#  if defined(SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR)
+   /* AT_SUN_SYSSTAT_ZONE_ADDR */
+   copy_auxv_entry(orig_auxv, VKI_AT_SUN_SYSSTAT_ZONE_ADDR,
+                   "AT_SUN_SYSSTAT_ZONE_ADDR", auxv);
+   VG_(change_mapping_ownership)(auxv->a_un.a_val, True);
+   auxv++;
+#  endif
+
+   /* AT_NULL */
+   auxv->a_type = VKI_AT_NULL;
+   auxv->a_un.a_val = 0;
+
+   vg_assert(strtab - stringbase == stringsize);
+
+   /* The variable client_SP is now pointing at client's argc/argv. */
+
+   if (0)
+      VG_(printf)("startup SP = %#lx\n", client_SP);
+   return client_SP;
+}
+
+/*====================================================================*/
+/*=== TOP-LEVEL: VG_(setup_client_initial_image)                   ===*/
+/*====================================================================*/
+
+/* Create the client's initial memory image. */
+IIFinaliseImageInfo VG_(ii_create_image)(IICreateImageInfo iicii,
+                                         const VexArchInfo *vex_archinfo)
+{
+   ExeInfo info;
+   HChar **env = NULL;
+   HChar resolved_exe_name[VKI_PATH_MAX];
+
+   IIFinaliseImageInfo iifii;
+   VG_(memset)(&iifii, 0, sizeof(iifii));
+
+   //--------------------------------------------------------------
+   // Load client executable, finding in $PATH if necessary
+   //   p: early_process_cmd_line_options()  [for 'exec', 'need_help']
+   //   p: layout_remaining_space            [so there's space]
+   //--------------------------------------------------------------
+   VG_(debugLog)(1, "initimg", "Loading client\n");
+
+   if (!VG_(args_the_exename)) {
+      VG_(err_missing_prog)();
+      /*NOTREACHED*/
+   }
+
+   load_client(&info, resolved_exe_name, sizeof(resolved_exe_name));
+   iifii.initial_client_IP = info.init_ip;
+   /* Note: TOC isn't available on Solaris. */
+   iifii.initial_client_TOC = info.init_toc;
+   iifii.initial_client_TP = info.init_thrptr;
+   /* Note that iifii.client_auxv is never set on Solaris, because it isn't
+      necessary to have this value in VG_(ii_finalise_image). */
+
+   //--------------------------------------------------------------
+   // Set up client's environment
+   //   p: set-libdir                       [for VG_(libdir)]
+   //   p: early_process_cmd_line_options() [for toolname]
+   //--------------------------------------------------------------
+   VG_(debugLog)(1, "initimg", "Setup client env\n");
+   env = setup_client_env(iicii.envp, iicii.toolname);
+
+   //--------------------------------------------------------------
+   // Setup client stack and EIP
+   //   p: load_client()     [for 'info']
+   //   p: fix_environment() [for 'env']
+   //--------------------------------------------------------------
+   {
+      /* When allocating space for the client stack, take notice of the
+         --main-stacksize value.  This makes it possible to run programs with
+         very large (primary) stack requirements simply by specifying
+         --main-stacksize. */
+      /* Logic is as follows:
+         - By default, use the client's current stack rlimit.
+         - If that exceeds 16M, clamp to 16M.
+         - If a larger --main-stacksize value is specified, use that instead.
+         - In all situations, the minimum allowed stack size is 1M.
+      */
+      Addr init_sp = (Addr) (iicii.argv - 1);
+      SizeT m1  = 1024 * 1024;
+      SizeT m16 = 16 * m1;
+      SizeT szB = (SizeT)VG_(client_rlimit_stack).rlim_cur;
+      if (szB < m1)
+         szB = m1;
+      if (szB > m16)
+         szB = m16;
+
+      if (VG_(clo_main_stacksize) > 0)
+         szB = VG_(clo_main_stacksize);
+      if (szB < m1)
+         szB = m1;
+
+      szB = VG_PGROUNDUP(szB);
+      VG_(debugLog)(1, "initimg",
+                       "Setup client stack: size will be %ld\n", szB);
+
+      iifii.clstack_max_size = szB;
+      iifii.initial_client_SP = setup_client_stack(init_sp, env, &info,
+                                                   iicii.clstack_end,
+                                                   iifii.clstack_max_size,
+                                                   resolved_exe_name);
+      VG_(free)(env);
+
+      VG_(debugLog)(2, "initimg", "Client info: "
+                       "initial_IP=%#lx, initial_TOC=%#lx, brk_base=%#lx\n",
+                       iifii.initial_client_IP, iifii.initial_client_TOC,
+                       VG_(brk_base));
+      VG_(debugLog)(2, "initimg", "Client info: "
+                       "initial_SP=%#lx, max_stack_size=%lu\n",
+                       iifii.initial_client_SP,
+                       iifii.clstack_max_size);
+   }
+
+   if (info.ldsoexec) {
+      /* We are executing the runtime linker itself.
+         Initial data (brk) segment is setup on demand, after the target dynamic
+         executable has been loaded or when a first brk() syscall is made.
+         It cannot be established now because it would conflict with a temporary
+         stack which ld.so.1 (when executed directly) uses for loading the
+         target dynamic executable. See PRE(sys_brk) in syswrap-solaris.c. */
+   } else {
+      if (!VG_(setup_client_dataseg)()) {
+         VG_(printf)("valgrind: cannot initialize data segment (brk).\n");
+         VG_(exit)(1);
+      }
+   }
+
+   return iifii;
+}
+
+
+/*====================================================================*/
+/*=== TOP-LEVEL: VG_(finalise_image)                               ===*/
+/*====================================================================*/
+
+/* Just before starting the client, we may need to make final adjustments to
+   its initial image.  Also we need to set up the VEX guest state for thread 1
+   (the root thread) and copy in essential starting values.  This is handed
+   the IIFinaliseImageInfo created by VG_(ii_create_image).
+*/
+void VG_(ii_finalise_image)(IIFinaliseImageInfo iifii)
+{
+   ThreadArchState *arch = &VG_(threads)[1].arch;
+
+#  if defined(VGA_x86)
+   vg_assert(0 == sizeof(VexGuestX86State) % LibVEX_GUEST_STATE_ALIGN);
+
+   /* Zero out the initial state, and set up the simulated FPU in a sane
+      way. */
+   LibVEX_GuestX86_initialise(&arch->vex);
+
+   /* Zero out the shadow areas. */
+   VG_(memset)(&arch->vex_shadow1, 0, sizeof(VexGuestX86State));
+   VG_(memset)(&arch->vex_shadow2, 0, sizeof(VexGuestX86State));
+
+   /* Put essential stuff into the new state. */
+   arch->vex.guest_ESP = iifii.initial_client_SP;
+   arch->vex.guest_EIP = iifii.initial_client_IP;
+   LibVEX_GuestX86_put_eflags(VKI_PSL_USER, &arch->vex);
+
+   /* Set %cs, %ds, %ss and %es to default values. */
+   __asm__ __volatile__ ("movw %%cs, %[cs]" : [cs] "=m" (arch->vex.guest_CS));
+   __asm__ __volatile__ ("movw %%ds, %[ds]" : [ds] "=m" (arch->vex.guest_DS));
+   __asm__ __volatile__ ("movw %%ss, %[ss]" : [ss] "=m" (arch->vex.guest_SS));
+   __asm__ __volatile__ ("movw %%es, %[es]" : [es] "=m" (arch->vex.guest_ES));
+
+   {
+      /* Initial thread pointer value will be saved in GDT when the thread is
+         started in the syswrap module and a thread's GDT is allocated. */
+      ThreadOSstate *os = &VG_(threads)[1].os_state;
+      os->thrptr = iifii.initial_client_TP;
+   }
+
+#  elif defined(VGA_amd64)
+   vg_assert(0 == sizeof(VexGuestAMD64State) % LibVEX_GUEST_STATE_ALIGN);
+
+   /* Zero out the initial state, and set up the simulated FPU in a sane
+      way. */
+   LibVEX_GuestAMD64_initialise(&arch->vex);
+
+   /* Zero out the shadow areas. */
+   VG_(memset)(&arch->vex_shadow1, 0, sizeof(VexGuestAMD64State));
+   VG_(memset)(&arch->vex_shadow2, 0, sizeof(VexGuestAMD64State));
+
+   /* Put essential stuff into the new state. */
+   arch->vex.guest_RSP = iifii.initial_client_SP;
+   arch->vex.guest_RIP = iifii.initial_client_IP;
+   arch->vex.guest_FS_CONST = iifii.initial_client_TP;
+   LibVEX_GuestAMD64_put_rflags(VKI_PSL_USER, &arch->vex);
+
+#  else
+#    error "Unknown platform"
+#  endif
+
+   /* Tell the tool that we just wrote to the registers. */
+   VG_TRACK(post_reg_write, Vg_CoreStartup, 1/*tid*/, 0/*offset*/,
+            sizeof(VexGuestArchState));
+
+   if (VG_(brk_base) != -1 ) {
+      /* Make inaccessible/unaddressable the end of the client data segment.
+         See PRE(sys_brk) in syswrap-solaris.c for details. */
+      VG_(track_client_dataseg)(1 /* tid */);
+   }
+}
+
+#endif // defined(VGO_solaris)
+
+/*--------------------------------------------------------------------*/
+/*---                                                              ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_initimg/priv_initimg_pathscan.h b/coregrind/m_initimg/priv_initimg_pathscan.h
index 9b4d2b9..e743836 100644
--- a/coregrind/m_initimg/priv_initimg_pathscan.h
+++ b/coregrind/m_initimg/priv_initimg_pathscan.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_libcassert.c b/coregrind/m_libcassert.c
index 566dd84..c393d7b 100644
--- a/coregrind/m_libcassert.c
+++ b/coregrind/m_libcassert.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -49,7 +49,8 @@
    Assertery.
    ------------------------------------------------------------------ */
 
-#if defined(VGP_x86_linux) || defined(VGP_x86_darwin)
+#if defined(VGP_x86_linux) || defined(VGP_x86_darwin) \
+    || defined(VGP_x86_solaris)
 #  define GET_STARTREGS(srP)                              \
       { UInt eip, esp, ebp;                               \
         __asm__ __volatile__(                             \
@@ -65,7 +66,8 @@
         (srP)->r_sp = (ULong)esp;                         \
         (srP)->misc.X86.r_ebp = ebp;                      \
       }
-#elif defined(VGP_amd64_linux) || defined(VGP_amd64_darwin)
+#elif defined(VGP_amd64_linux) || defined(VGP_amd64_darwin) \
+      || defined(VGP_amd64_solaris)
 #  define GET_STARTREGS(srP)                              \
       { ULong rip, rsp, rbp;                              \
         __asm__ __volatile__(                             \
@@ -85,8 +87,8 @@
       { UInt cia, r1, lr;                                 \
         __asm__ __volatile__(                             \
            "mflr 0;"                   /* r0 = lr */      \
-           "bl m_libcassert_get_ip;"   /* lr = pc */      \
-           "m_libcassert_get_ip:\n"                       \
+           "bl 0f;"                    /* lr = pc */      \
+           "0:\n"                                         \
            "mflr %0;"                  /* %0 = pc */      \
            "mtlr 0;"                   /* restore lr */   \
            "mr %1,1;"                  /* %1 = r1 */      \
@@ -104,8 +106,8 @@
       { ULong cia, r1, lr;                                \
         __asm__ __volatile__(                             \
            "mflr 0;"                   /* r0 = lr */      \
-           "bl .m_libcassert_get_ip;"  /* lr = pc */      \
-           ".m_libcassert_get_ip:\n"                      \
+           "bl 0f;"                    /* lr = pc */      \
+           "0:\n"                                         \
            "mflr %0;"                  /* %0 = pc */      \
            "mtlr 0;"                   /* restore lr */   \
            "mr %1,1;"                  /* %1 = r1 */      \
@@ -178,8 +180,8 @@
 #  define GET_STARTREGS(srP)                              \
       { UInt pc, sp, fp, ra, gp;                          \
       asm("move $8, $31;"             /* t0 = ra */       \
-          "bal m_libcassert_get_ip;"  /* ra = pc */       \
-          "m_libcassert_get_ip:\n"                        \
+          "bal 0f;"                   /* ra = pc */       \
+          "0:\n"                                          \
           "move %0, $31;"                                 \
           "move $31, $8;"             /* restore lr */    \
           "move %1, $29;"                                 \
@@ -201,10 +203,10 @@
       }
 #elif defined(VGP_mips64_linux)
 #  define GET_STARTREGS(srP)                              \
-      { ULong pc, sp, fp, ra, gp;                          \
+      { ULong pc, sp, fp, ra, gp;                         \
       asm("move $8, $31;"             /* t0 = ra */       \
-          "bal m_libcassert_get_ip;"  /* ra = pc */       \
-          "m_libcassert_get_ip:\n"                        \
+          "bal 0f;"                   /* ra = pc */       \
+          "0:\n"                                          \
           "move %0, $31;"                                 \
           "move $31, $8;"             /* restore lr */    \
           "move %1, $29;"                                 \
@@ -291,7 +293,7 @@
 {
 #if defined(VGO_linux)
    (void)VG_(do_syscall1)(__NR_exit_group, status );
-#elif defined(VGO_darwin)
+#elif defined(VGO_darwin) || defined(VGO_solaris)
    (void)VG_(do_syscall1)(__NR_exit, status );
 #else
 #  error Unknown OS
@@ -360,7 +362,7 @@
    }
 
    VG_(printf)("\nsched status:\n"); 
-   VG_(printf)("  running_tid=%d\n", VG_(get_running_tid)());
+   VG_(printf)("  running_tid=%u\n", VG_(get_running_tid)());
    for (i = 1; i < VG_N_THREADS; i++) {
       VgStack* stack 
          = (VgStack*)VG_(threads)[i].os_state.valgrind_stack_base;
@@ -387,7 +389,7 @@
             VG_(printf)("client stack range: ???????\n");
       }
       if (stack_usage && stack != 0)
-          VG_(printf)("valgrind stack top usage: %ld of %ld\n",
+          VG_(printf)("valgrind stack top usage: %lu of %lu\n",
                       VG_(clo_valgrind_stacksize)
                         - VG_(am_get_VgStack_unused_szB)
                                (stack, VG_(clo_valgrind_stacksize)),
@@ -505,8 +507,15 @@
 }
 
 /* Print some helpful-ish text about unimplemented things, and give up. */
-void VG_(unimplemented) ( const HChar* msg )
+void VG_(unimplemented) ( const HChar* format, ... )
 {
+   va_list vargs;
+   HChar msg[256];
+
+   va_start(vargs, format);
+   VG_(vsnprintf)(msg, sizeof(msg), format, vargs);
+   va_end(vargs);
+
    if (VG_(clo_xml))
       VG_(printf_xml)("</valgrindoutput>\n");
    VG_(umsg)("\n");
diff --git a/coregrind/m_libcbase.c b/coregrind/m_libcbase.c
index 60cad36..0d715fa 100644
--- a/coregrind/m_libcbase.c
+++ b/coregrind/m_libcbase.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -653,7 +653,7 @@
    }
 
    /* If we're unlucky, the alignment constraints for the fast case
-      above won't apply, and we'll have to to it all here.  Hence the
+      above won't apply, and we'll have to do it all here.  Hence the
       unrolling. */
    while (sz >= 4) {
       d[0] = s[0];
diff --git a/coregrind/m_libcfile.c b/coregrind/m_libcfile.c
index ce442ec..68fc434 100644
--- a/coregrind/m_libcfile.c
+++ b/coregrind/m_libcfile.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -78,7 +78,7 @@
    cannot be deduced. */
 Bool VG_(resolve_filename) ( Int fd, const HChar** result )
 {
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    static HChar *buf = NULL;
    static SizeT  bufsiz = 0;
 
@@ -88,7 +88,13 @@
    }
 
    HChar tmp[64];   // large enough
-   VG_(sprintf)(tmp, "/proc/self/fd/%d", fd);
+   {
+#     if defined(VGO_linux)
+      VG_(sprintf)(tmp, "/proc/self/fd/%d", fd);
+#     elif defined(VGO_solaris)
+      VG_(sprintf)(tmp, "/proc/self/path/%d", fd);
+#     endif
+   }
 
    while (42) {
       SSizeT res = VG_(readlink)(tmp, buf, bufsiz);
@@ -139,6 +145,9 @@
 #  elif defined(VGO_linux) || defined(VGO_darwin)
    SysRes res = VG_(do_syscall3)(__NR_mknod,
                                  (UWord)pathname, mode, dev);
+#  elif defined(VGO_solaris)
+   SysRes res = VG_(do_syscall4)(__NR_mknodat,
+                                 VKI_AT_FDCWD, (UWord)pathname, mode, dev);
 #  else
 #    error Unknown OS
 #  endif
@@ -157,6 +166,9 @@
 #  elif defined(VGO_darwin)
    SysRes res = VG_(do_syscall3)(__NR_open_nocancel,
                                  (UWord)pathname, flags, mode);
+#  elif defined(VGO_solaris)
+   SysRes res = VG_(do_syscall4)(__NR_openat,
+                                 VKI_AT_FDCWD, (UWord)pathname, flags, mode);
 #  else
 #    error Unknown OS
 #  endif
@@ -176,7 +188,7 @@
 void VG_(close) ( Int fd )
 {
    /* Hmm.  Return value is not checked.  That's uncool. */
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    (void)VG_(do_syscall1)(__NR_close, fd);
 #  elif defined(VGO_darwin)
    (void)VG_(do_syscall1)(__NR_close_nocancel, fd);
@@ -188,7 +200,7 @@
 Int VG_(read) ( Int fd, void* buf, Int count)
 {
    Int    ret;
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    SysRes res = VG_(do_syscall3)(__NR_read, fd, (UWord)buf, count);
 #  elif defined(VGO_darwin)
    SysRes res = VG_(do_syscall3)(__NR_read_nocancel, fd, (UWord)buf, count);
@@ -208,7 +220,7 @@
 Int VG_(write) ( Int fd, const void* buf, Int count)
 {
    Int    ret;
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    SysRes res = VG_(do_syscall3)(__NR_write, fd, (UWord)buf, count);
 #  elif defined(VGO_darwin)
    SysRes res = VG_(do_syscall3)(__NR_write_nocancel, fd, (UWord)buf, count);
@@ -252,6 +264,18 @@
       fd[1] = (Int)sr_ResHI(res);
    }
    return sr_isError(res) ? -1 : 0;
+#  elif defined(VGO_solaris)
+#  if defined(SOLARIS_NEW_PIPE_SYSCALL)
+   SysRes res = VG_(do_syscall2)(__NR_pipe, (UWord)fd, 0);
+   return sr_isError(res) ? -1 : 0;
+#  else
+   SysRes res = VG_(do_syscall0)(__NR_pipe);
+   if (!sr_isError(res)) {
+      fd[0] = (Int)sr_Res(res);
+      fd[1] = (Int)sr_ResHI(res);
+   }
+   return sr_isError(res) ? -1 : 0;
+#  endif
 #  else
 #    error "Unknown OS"
 #  endif
@@ -275,6 +299,14 @@
    SysRes res = VG_(do_syscall4)(__NR_lseek, fd, 
                                  offset & 0xffffffff, offset >> 32, whence);
    return sr_isError(res) ? (-1) : sr_Res(res);
+#  elif defined(VGP_x86_solaris)
+   SysRes res = VG_(do_syscall4)(__NR_llseek, fd,
+                                 offset & 0xffffffff, offset >> 32, whence);
+   return sr_isError(res) ? (-1) : ((ULong)sr_ResHI(res) << 32 | sr_Res(res));
+#  elif defined(VGP_amd64_solaris)
+   SysRes res = VG_(do_syscall3)(__NR_lseek, fd, offset, whence);
+   vg_assert(sizeof(Off64T) == sizeof(Word));
+   return sr_isError(res) ? (-1) : sr_Res(res);
 #  else
 #    error "Unknown plat"
 #  endif
@@ -338,7 +370,23 @@
         TRANSLATE_TO_vg_stat(vgbuf, &buf);
      return res;
    }
-
+#  elif defined(VGO_solaris)
+   {
+#     if defined(VGP_x86_solaris)
+      struct vki_stat64 buf64;
+      res = VG_(do_syscall4)(__NR_fstatat64, VKI_AT_FDCWD, (UWord)file_name,
+                             (UWord)&buf64, 0);
+#     elif defined(VGP_amd64_solaris)
+      struct vki_stat buf64;
+      res = VG_(do_syscall4)(__NR_fstatat, VKI_AT_FDCWD, (UWord)file_name,
+                             (UWord)&buf64, 0);
+#     else
+#        error "Unknown platform"
+#     endif
+      if (!sr_isError(res))
+         TRANSLATE_TO_vg_stat(vgbuf, &buf64);
+      return res;
+   }
 #  else
 #    error Unknown OS
 #  endif
@@ -349,7 +397,7 @@
    SysRes res;
    VG_(memset)(vgbuf, 0, sizeof(*vgbuf));
 
-#  if defined(VGO_linux)  ||  defined(VGO_darwin)
+#  if defined(VGO_linux) || defined(VGO_darwin)
    /* First try with fstat64.  If that doesn't work out, fall back to
       the vanilla version. */
 #  if defined(__NR_fstat64)
@@ -369,7 +417,21 @@
         TRANSLATE_TO_vg_stat(vgbuf, &buf);
      return sr_isError(res) ? (-1) : 0;
    }
-
+#  elif defined(VGO_solaris)
+   { 
+#     if defined(VGP_x86_solaris)
+      struct vki_stat64 buf64;
+      res = VG_(do_syscall4)(__NR_fstatat64, (UWord)fd, 0, (UWord)&buf64, 0);
+#     elif defined(VGP_amd64_solaris)
+      struct vki_stat buf64;
+      res = VG_(do_syscall4)(__NR_fstatat, (UWord)fd, 0, (UWord)&buf64, 0);
+#     else
+#        error "Unknown platform"
+#     endif
+      if (!sr_isError(res))
+         TRANSLATE_TO_vg_stat(vgbuf, &buf64);
+      return sr_isError(res) ? (-1) : 0;
+   }
 #  else
 #    error Unknown OS
 #  endif
@@ -407,13 +469,21 @@
 
 SysRes VG_(dup) ( Int oldfd )
 {
+#  if defined(VGO_linux) || defined(VGO_darwin)
    return VG_(do_syscall1)(__NR_dup, oldfd);
+#  elif defined(VGO_solaris)
+   return VG_(do_syscall3)(__NR_fcntl, oldfd, F_DUPFD, 0);
+#  else
+#    error Unknown OS
+#  endif
 }
 
 SysRes VG_(dup2) ( Int oldfd, Int newfd )
 {
 #  if defined(VGO_linux) || defined(VGO_darwin)
    return VG_(do_syscall2)(__NR_dup2, oldfd, newfd);
+#  elif defined(VGO_solaris)
+   return VG_(do_syscall3)(__NR_fcntl, oldfd, F_DUP2FD, newfd);
 #  else
 #    error Unknown OS
 #  endif
@@ -422,7 +492,7 @@
 /* Returns -1 on error. */
 Int VG_(fcntl) ( Int fd, Int cmd, Addr arg )
 {
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    SysRes res = VG_(do_syscall3)(__NR_fcntl, fd, cmd, arg);
 #  elif defined(VGO_darwin)
    SysRes res = VG_(do_syscall3)(__NR_fcntl_nocancel, fd, cmd, arg);
@@ -437,8 +507,13 @@
 #  if defined(VGP_tilegx_linux)
    SysRes res = VG_(do_syscall3)(__NR_renameat, VKI_AT_FDCWD,
                                  (UWord)old_name, (UWord)new_name);
-#  else
+#  elif defined(VGO_linux) || defined(VGO_darwin)
    SysRes res = VG_(do_syscall2)(__NR_rename, (UWord)old_name, (UWord)new_name);
+#  elif defined(VGO_solaris)
+   SysRes res = VG_(do_syscall4)(__NR_renameat, VKI_AT_FDCWD, (UWord)old_name,
+                                 VKI_AT_FDCWD, (UWord)new_name);
+#  else
+#    error "Unknown OS"
 #  endif
    return sr_isError(res) ? (-1) : 0;
 }
@@ -448,8 +523,13 @@
 #  if defined(VGP_arm64_linux) || defined(VGP_tilegx_linux)
    SysRes res = VG_(do_syscall2)(__NR_unlinkat, VKI_AT_FDCWD,
                                                 (UWord)file_name);
-#  else
+#  elif defined(VGO_linux) || defined(VGO_darwin)
    SysRes res = VG_(do_syscall1)(__NR_unlink, (UWord)file_name);
+#  elif defined(VGO_solaris)
+   SysRes res = VG_(do_syscall3)(__NR_unlinkat, VKI_AT_FDCWD,
+                                 (UWord)file_name, 0);
+#  else
+#    error "Unknown OS"
 #  endif
    return sr_isError(res) ? (-1) : 0;
 }
@@ -469,8 +549,7 @@
 Bool VG_(record_startup_wd) ( void )
 {
    vg_assert(!startup_wd_acquired);
-
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    /* Simple: just ask the kernel */
    SysRes res;
    SizeT szB = 0;
@@ -535,6 +614,19 @@
    res = VG_(do_syscall3)(__NR_poll, (UWord)fds, nfds, timeout);
 #  elif defined(VGO_darwin)
    res = VG_(do_syscall3)(__NR_poll_nocancel, (UWord)fds, nfds, timeout);
+#  elif defined(VGO_solaris)
+   struct vki_timespec ts;
+   struct vki_timespec *tsp;
+
+   if (timeout < 0)
+      tsp = NULL;
+   else {  
+      ts.tv_sec = timeout / 1000;
+      ts.tv_nsec = (timeout % 1000) * 1000000;
+      tsp = &ts;
+   }
+
+   res = VG_(do_syscall4)(__NR_pollsys, (UWord)fds, nfds, (UWord)tsp, 0);
 #  else
 #    error "Unknown OS"
 #  endif
@@ -553,18 +645,29 @@
 #  if defined(VGP_arm64_linux) || defined(VGP_tilegx_linux)
    res = VG_(do_syscall4)(__NR_readlinkat, VKI_AT_FDCWD,
                                            (UWord)path, (UWord)buf, bufsiz);
-#  else
+#  elif defined(VGO_linux) || defined(VGO_darwin)
    res = VG_(do_syscall3)(__NR_readlink, (UWord)path, (UWord)buf, bufsiz);
+#  elif defined(VGO_solaris)
+   res = VG_(do_syscall4)(__NR_readlinkat, VKI_AT_FDCWD, (UWord)path,
+                          (UWord)buf, bufsiz);
+#  else
+#    error "Unknown OS"
 #  endif
    return sr_isError(res) ? -1 : sr_Res(res);
 }
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 Int VG_(getdents64) (Int fd, struct vki_dirent64 *dirp, UInt count)
 {
    SysRes res;
    /* res = getdents( fd, dirp, count ); */
+#  if defined(VGP_amd64_solaris)
+   /* This silently assumes that dirent64 and dirent on amd64 are same, which
+      they should always be. */
+   res = VG_(do_syscall3)(__NR_getdents, fd, (UWord)dirp, count);
+#  else
    res = VG_(do_syscall3)(__NR_getdents64, fd, (UWord)dirp, count);
+#  endif
    return sr_isError(res) ? -1 : sr_Res(res);
 }
 #endif
@@ -588,8 +691,13 @@
              | (ixusr ? VKI_X_OK : 0);
 #  if defined(VGP_arm64_linux) || defined(VGP_tilegx_linux)
    SysRes res = VG_(do_syscall3)(__NR_faccessat, VKI_AT_FDCWD, (UWord)path, w);
-#  else
+#  elif defined(VGO_linux) || defined(VGO_darwin)
    SysRes res = VG_(do_syscall2)(__NR_access, (UWord)path, w);
+#  elif defined(VGO_solaris)
+   SysRes res = VG_(do_syscall4)(__NR_faccessat, VKI_AT_FDCWD, (UWord)path,
+                                 w, 0);
+#  else
+#    error "Unknown OS"
 #  endif
    return sr_isError(res) ? 1 : 0;   
 
@@ -738,6 +846,14 @@
    res = VG_(do_syscall5)(__NR_pread_nocancel, fd, (UWord)buf, count, 
                           offset & 0xffffffff, offset >> 32);
    return res;
+#  elif defined(VGP_x86_solaris)
+   vg_assert(sizeof(OffT) == 4);
+   res = VG_(do_syscall4)(__NR_pread, fd, (UWord)buf, count, offset);
+   return res;
+#  elif defined(VGP_amd64_solaris)
+   vg_assert(sizeof(OffT) == 8);
+   res = VG_(do_syscall4)(__NR_pread, fd, (UWord)buf, count, offset);
+   return res;
 #  else
 #    error "Unknown platform"
 #  endif
@@ -872,7 +988,7 @@
 */
 Int VG_(connect_via_socket)( const HChar* str )
 {
-#  if defined(VGO_linux) || defined(VGO_darwin)
+#  if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
    Int sd, res;
    struct vki_sockaddr_in servAddr;
    UInt   ip   = 0;
@@ -992,6 +1108,20 @@
    }
    return sr_isError(res) ? -1 : sr_Res(res);
 
+#  elif defined(VGO_solaris)
+   /* XXX There doesn't seem to be an easy way to convince the send syscall to
+      only return EPIPE instead of raising SIGPIPE. EPIPE is only returned if
+      SM_KERNEL is set on the socket. Without serious hackery it looks we
+      can't set this flag.
+
+      Should we wrap the send syscall below into sigprocmask calls to block
+      SIGPIPE?
+    */
+   SysRes res;
+   res = VG_(do_syscall5)(__NR_so_socket, domain, type, protocol,
+                          0 /*devpath*/, VKI_SOV_DEFAULT /*version*/);
+   return sr_isError(res) ? -1 : sr_Res(res);
+
 #  else
 #    error "Unknown arch"
 #  endif
@@ -1025,6 +1155,12 @@
                           sockfd, (UWord)serv_addr, addrlen);
    return sr_isError(res) ? -1 : sr_Res(res);
 
+#  elif defined(VGO_solaris)
+   SysRes res;
+   res = VG_(do_syscall4)(__NR_connect, sockfd, (UWord)serv_addr, addrlen,
+                          VKI_SOV_DEFAULT /*version*/);
+   return sr_isError(res) ? -1 : sr_Res(res);
+
 #  else
 #    error "Unknown arch"
 #  endif
@@ -1066,6 +1202,11 @@
    res = VG_(do_syscall3)(__NR_write_nocancel, sd, (UWord)msg, count);
    return sr_isError(res) ? -1 : sr_Res(res);
 
+#  elif defined(VGO_solaris)
+   SysRes res;
+   res = VG_(do_syscall4)(__NR_send, sd, (UWord)msg, count, 0 /*flags*/);
+   return sr_isError(res) ? -1 : sr_Res(res);
+
 #  else
 #    error "Unknown platform"
 #  endif
@@ -1099,6 +1240,12 @@
                            (UWord)sd, (UWord)name, (UWord)namelen );
    return sr_isError(res) ? -1 : sr_Res(res);
 
+#  elif defined(VGO_solaris)
+   SysRes res;
+   res = VG_(do_syscall4)(__NR_getsockname, sd, (UWord)name, (UWord)namelen,
+                          VKI_SOV_DEFAULT /*version*/);
+   return sr_isError(res) ? -1 : sr_Res(res);
+
 #  else
 #    error "Unknown platform"
 #  endif
@@ -1132,6 +1279,12 @@
                            (UWord)sd, (UWord)name, (UWord)namelen );
    return sr_isError(res) ? -1 : sr_Res(res);
 
+#  elif defined(VGO_solaris)
+   SysRes res;
+   res = VG_(do_syscall4)(__NR_getpeername, sd, (UWord)name, (UWord)namelen,
+                          VKI_SOV_DEFAULT /*version*/);
+   return sr_isError(res) ? -1 : sr_Res(res);
+
 #  else
 #    error "Unknown platform"
 #  endif
@@ -1169,6 +1322,12 @@
                            (UWord)optval, (UWord)optlen );
    return sr_isError(res) ? -1 : sr_Res(res);
 
+#  elif defined(VGO_solaris)
+   SysRes res;
+   res = VG_(do_syscall6)(__NR_getsockopt, sd, level, optname, (UWord)optval,
+                          (UWord)optlen, VKI_SOV_DEFAULT /*version*/);
+   return sr_isError(res) ? -1 : sr_Res(res);
+
 #  else
 #    error "Unknown platform"
 #  endif
@@ -1207,6 +1366,14 @@
                            (UWord)optval, (UWord)optlen );
    return sr_isError(res) ? -1 : sr_Res(res);
 
+#  elif defined(VGO_solaris)
+   SysRes res;
+   res = VG_(do_syscall6)( __NR_setsockopt,
+                           (UWord)sd, (UWord)level, (UWord)optname,
+                           (UWord)optval, (UWord)optlen,
+                           VKI_SOV_DEFAULT /*version*/ );
+   return sr_isError(res) ? -1 : sr_Res(res);
+
 #  else
 #    error "Unknown platform"
 #  endif
diff --git a/coregrind/m_libcprint.c b/coregrind/m_libcprint.c
index 114467f..1283de5 100644
--- a/coregrind/m_libcprint.c
+++ b/coregrind/m_libcprint.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -660,7 +660,7 @@
    return buf;
 }
 
-#elif defined(VGO_darwin)
+#elif defined(VGO_darwin) || (VGO_solaris)
 
 const HChar *VG_(sr_as_string) ( SysRes sr )
 {
diff --git a/coregrind/m_libcproc.c b/coregrind/m_libcproc.c
index f25320a..f314b55 100644
--- a/coregrind/m_libcproc.c
+++ b/coregrind/m_libcproc.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -34,6 +34,7 @@
 #include "pub_core_vkiscnums.h"
 #include "pub_core_libcbase.h"
 #include "pub_core_libcassert.h"
+#include "pub_core_libcfile.h"
 #include "pub_core_libcprint.h"
 #include "pub_core_libcproc.h"
 #include "pub_core_libcsignal.h"
@@ -66,7 +67,7 @@
 const HChar *VG_(libdir) = VG_LIBDIR;
 
 const HChar *VG_(LD_PRELOAD_var_name) =
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
    "LD_PRELOAD";
 #elif defined(VGO_darwin)
    "DYLD_INSERT_LIBRARIES";
@@ -90,7 +91,9 @@
    return NULL;
 }
 
-void  VG_(env_unsetenv) ( HChar **env, const HChar *varname )
+/* If free_fn is not NULL, it is called on "unset" environment variable. */
+void  VG_(env_unsetenv) ( HChar **env, const HChar *varname,
+                          void (*free_fn) (void *) )
 {
    HChar **from, **to;
    vg_assert(env);
@@ -102,6 +105,8 @@
       if (!(VG_(strncmp)(varname, *from, len) == 0 && (*from)[len] == '=')) {
 	 *to = *from;
 	 to++;
+      } else if (free_fn != NULL) {
+         free_fn(*from);
       }
    }
    *to = *from;
@@ -216,18 +221,15 @@
 }
 
 
-// Removes all the Valgrind-added stuff from the passed environment.  Used
-// when starting child processes, so they don't see that added stuff.
-void VG_(env_remove_valgrind_env_stuff)(HChar** envp)
+/* Removes all the Valgrind-added stuff from the passed environment.  Used
+   when starting child processes, so they don't see that added stuff.
+   If the ro_strings option is set to True then all strings referenced by envp
+   are considered read-only, which means they will be duplicated before they
+   are modified.
+   If free_fn is not NULL, it is called on "unset" environment variables. */
+void VG_(env_remove_valgrind_env_stuff)(HChar** envp, Bool ro_strings,
+                                        void (*free_fn) (void *) )
 {
-
-#if defined(VGO_darwin)
-
-   // Environment cleanup is also handled during parent launch 
-   // in vg_preloaded.c:vg_cleanup_env().
-
-#endif
-
    Int i;
    HChar* ld_preload_str = NULL;
    HChar* ld_library_path_str = NULL;
@@ -241,15 +243,18 @@
    // - DYLD_INSERT_LIBRARIES and DYLD_SHARED_REGION are Darwin-only
    for (i = 0; envp[i] != NULL; i++) {
       if (VG_(strncmp)(envp[i], "LD_PRELOAD=", 11) == 0) {
-         envp[i] = VG_(strdup)("libcproc.erves.1", envp[i]);
+         if (ro_strings)
+            envp[i] = VG_(strdup)("libcproc.erves.1", envp[i]);
          ld_preload_str = &envp[i][11];
       }
       if (VG_(strncmp)(envp[i], "LD_LIBRARY_PATH=", 16) == 0) {
-         envp[i] = VG_(strdup)("libcproc.erves.2", envp[i]);
+         if (ro_strings)
+            envp[i] = VG_(strdup)("libcproc.erves.2", envp[i]);
          ld_library_path_str = &envp[i][16];
       }
       if (VG_(strncmp)(envp[i], "DYLD_INSERT_LIBRARIES=", 22) == 0) {
-         envp[i] = VG_(strdup)("libcproc.erves.3", envp[i]);
+         if (ro_strings)
+            envp[i] = VG_(strdup)("libcproc.erves.3", envp[i]);
          dyld_insert_libraries_str = &envp[i][22];
       }
    }
@@ -264,16 +269,79 @@
    mash_colon_env(ld_library_path_str, buf);
 
    // Remove VALGRIND_LAUNCHER variable.
-   VG_(env_unsetenv)(envp, VALGRIND_LAUNCHER);
+   VG_(env_unsetenv)(envp, VALGRIND_LAUNCHER, free_fn);
 
    // Remove DYLD_SHARED_REGION variable.
-   VG_(env_unsetenv)(envp, "DYLD_SHARED_REGION");
+   VG_(env_unsetenv)(envp, "DYLD_SHARED_REGION", free_fn);
 
    // XXX if variable becomes empty, remove it completely?
 
    VG_(free)(buf);
 }
 
+/* Resolves filename of VG_(cl_exec_fd) and copies it to the buffer.
+   Buffer must not be NULL and buf_size must be at least 1.
+   If buffer is not large enough it is terminated with '\0' only
+   when 'terminate_with_NUL == True'. */
+void VG_(client_fname)(HChar *buffer, SizeT buf_size, Bool terminate_with_NUL)
+{
+   vg_assert(buffer != NULL);
+   vg_assert(buf_size >= 1);
+
+   const HChar *name;
+   if (VG_(resolve_filename)(VG_(cl_exec_fd), &name)) {
+      const HChar *n = name + VG_(strlen)(name) - 1;
+
+      while (n > name && *n != '/')
+         n--;
+      if (n != name)
+         n++;
+
+      VG_(strncpy)(buffer, n, buf_size);
+      if (terminate_with_NUL)
+         buffer[buf_size - 1] = '\0';
+   } else {
+      buffer[0] = '\0';
+   }
+}
+
+static Bool add_string(HChar *buffer, SizeT *buf_size, const HChar *string)
+{
+   SizeT len = VG_(strlen)(string);
+   VG_(strncat)(buffer, string, *buf_size);
+   if (len >= *buf_size - 1) {
+      *buf_size = 0;
+      return False;
+   } else {
+      *buf_size -= len;
+      return True;
+   }
+}
+
+/* Concatenates client exename and command line arguments into
+   the buffer. Buffer must not be NULL and buf_size must be
+   at least 1. Buffer is always terminated with '\0'. */
+void VG_(client_cmd_and_args)(HChar *buffer, SizeT buf_size)
+{
+   vg_assert(buffer != NULL);
+   vg_assert(buf_size >= 1);
+
+   buffer[0] = '\0';
+
+   if (add_string(buffer, &buf_size, VG_(args_the_exename)) == False)
+      return;
+
+   Int i;
+   for (i = 0; i < VG_(sizeXA)(VG_(args_for_client)); i++) {
+      if (add_string(buffer, &buf_size, " ") == False)
+         return;
+
+      HChar *arg = *(HChar **) VG_(indexXA)(VG_(args_for_client), i);
+      if (add_string(buffer, &buf_size, arg) == False)
+         return;
+   }
+}
+
 /* ---------------------------------------------------------------------
    Various important syscall wrappers
    ------------------------------------------------------------------ */
@@ -288,6 +356,63 @@
    SysRes res = VG_(do_syscall4)(__NR_wait4_nocancel,
                                  pid, (UWord)status, options, 0);
    return sr_isError(res) ? -1 : sr_Res(res);
+#  elif defined(VGO_solaris)
+   SysRes res;
+   vki_idtype_t idtype;
+   vki_id_t id;
+   vki_siginfo_t info;
+
+   /* We need to do a lot of work here. */
+
+   if (pid > 0) {
+      idtype = VKI_P_PID;
+      id = pid;
+   }
+   else if (pid < -1) {
+      idtype = VKI_P_PGID;
+      id = -pid;
+   }
+   else if (pid == -1) {
+      idtype = VKI_P_ALL;
+      id = 0;
+   }
+   else {
+      idtype = VKI_P_PGID;
+      res = VG_(do_syscall0)(__NR_getpid);
+      id = sr_ResHI(res);
+   }
+
+   options |= VKI_WEXITED | VKI_WTRAPPED;
+
+   res = VG_(do_syscall4)(__NR_waitsys, idtype, id, (UWord)&info, options);
+   if (sr_isError(res))
+      return -1;
+
+   if (status) {
+      Int s = info.si_status & 0xff;
+
+      switch (info.si_code) {
+         case VKI_CLD_EXITED:
+            s <<= 8;
+            break;
+         case VKI_CLD_DUMPED:
+            s |= VKI_WCOREFLG;
+            break;
+         case VKI_CLD_KILLED:
+            break;
+         case VKI_CLD_TRAPPED:
+         case VKI_CLD_STOPPED:
+            s <<= 8;
+            s |= VKI_WSTOPFLG;
+            break;
+         case VKI_CLD_CONTINUED:
+            s = VKI_WCONTFLG;
+            break;
+      }
+      *status = s;
+   }
+
+   return info.si_pid;
 #  else
 #    error Unknown OS
 #  endif
@@ -320,7 +445,7 @@
    return newenv;
 }
 
-void VG_(execv) ( const HChar* filename, HChar** argv )
+void VG_(execv) ( const HChar* filename, const HChar** argv )
 {
    HChar** envp;
    SysRes res;
@@ -329,7 +454,7 @@
    VG_(setrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data));
 
    envp = VG_(env_clone)(VG_(client_envp));
-   VG_(env_remove_valgrind_env_stuff)( envp );
+   VG_(env_remove_valgrind_env_stuff)( envp, True /*ro_strings*/, NULL );
 
    res = VG_(do_syscall3)(__NR_execve,
                           (UWord)filename, (UWord)argv, (UWord)envp);
@@ -337,6 +462,93 @@
    VG_(printf)("EXEC failed, errno = %lld\n", (Long)sr_Err(res));
 }
 
+/* Spawns a new child. Uses either spawn syscall or fork+execv combo. */
+Int VG_(spawn) ( const HChar *filename, const HChar **argv )
+{
+   vg_assert(filename != NULL);
+   vg_assert(argv != NULL);
+
+#  if defined(VGO_solaris) && defined(SOLARIS_SPAWN_SYSCALL)
+   HChar **envp = VG_(env_clone)(VG_(client_envp));
+   for (HChar **p = envp; *p != NULL; p++) {
+      *p = VG_(strdup)("libcproc.s.1", *p);
+   }
+   VG_(env_remove_valgrind_env_stuff)(envp, /* ro_strings */ False, VG_(free));
+
+   /* Now combine argv and argp into argenv. */
+   SizeT argenv_size = 1 + 1;
+   for (const HChar **p = argv; *p != NULL; p++) {
+      argenv_size += VG_(strlen)(*p) + 2;
+   }
+   for (HChar **p = envp; *p != NULL; p++) {
+      argenv_size += VG_(strlen)(*p) + 2;
+   }
+
+   HChar *argenv = VG_(malloc)("libcproc.s.2", argenv_size);
+   HChar *current = argenv;
+#  define COPY_CHAR_TO_ARGENV(dst, character)  \
+      do {                                     \
+         *(dst) = character;                   \
+         (dst) += 1;                           \
+      } while (0)
+#  define COPY_STRING_TO_ARGENV(dst, src)        \
+      do {                                       \
+         COPY_CHAR_TO_ARGENV(dst, '\1');         \
+         SizeT src_len = VG_(strlen)((src)) + 1; \
+         VG_(memcpy)((dst), (src), src_len);     \
+         (dst) += src_len;                       \
+      } while (0)
+
+   for (const HChar **p = argv; *p != NULL; p++) {
+      COPY_STRING_TO_ARGENV(current, *p);
+   }
+   COPY_CHAR_TO_ARGENV(current, '\0');
+   for (HChar **p = envp; *p != NULL; p++) {
+      COPY_STRING_TO_ARGENV(current, *p);
+   }
+   COPY_CHAR_TO_ARGENV(current, '\0');
+   vg_assert(current == argenv + argenv_size);
+#  undef COPY_CHAR_TO_ARGENV
+#  undef COPY_STRING_TOARGENV
+
+   /* HACK: Temporarily restore the DATA rlimit for spawned child. */
+   VG_(setrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data));
+
+   SysRes res = VG_(do_syscall5)(__NR_spawn, (UWord) filename, (UWord) NULL, 0,
+                                 (UWord) argenv, argenv_size);
+
+   /* Restore DATA rlimit back to its previous value set in m_main.c. */
+   struct vki_rlimit zero = { 0, 0 };
+   zero.rlim_max = VG_(client_rlimit_data).rlim_max;
+   VG_(setrlimit)(VKI_RLIMIT_DATA, &zero);
+
+   VG_(free)(argenv);
+   for (HChar **p = envp; *p != NULL; p++) {
+      VG_(free)(*p);
+   }
+   VG_(free)(envp);
+
+   if (sr_isError(res))
+      return -1;
+   return sr_Res(res);
+
+#  else
+
+   Int pid = VG_(fork)();
+   if (pid < 0)
+      return -1;
+   if (pid == 0) {
+      /* child */
+      VG_(execv)(argv[0], argv);
+
+      /* If we're still alive here, execv failed. */
+      VG_(exit)(1);
+   } else {
+      return pid;
+   }
+#  endif /* VGO_solaris && SOLARIS_SPAWN_SYSCALL */
+}
+
 /* Return -1 if error, else 0.  NOTE does not indicate return code of
    child! */
 Int VG_(system) ( const HChar* cmd )
@@ -344,47 +556,42 @@
    Int pid;
    if (cmd == NULL)
       return 1;
-   pid = VG_(fork)();
+
+   const HChar *argv[4] = { "/bin/sh", "-c", cmd, 0 };
+   pid = VG_(spawn)(argv[0], argv);
    if (pid < 0)
       return -1;
-   if (pid == 0) {
-      /* child */
-      const HChar* argv[4] = { "/bin/sh", "-c", cmd, 0 };
-      VG_(execv)(argv[0], CONST_CAST(HChar **,argv));
 
-      /* If we're still alive here, execv failed. */
-      VG_(exit)(1);
-   } else {
-      /* parent */
-      /* We have to set SIGCHLD to its default behaviour in order that
-         VG_(waitpid) works (at least on AIX).  According to the Linux
-         man page for waitpid:
+   vg_assert(pid > 0);
+   /* parent */
+   /* We have to set SIGCHLD to its default behaviour in order that
+      VG_(waitpid) works (at least on AIX).  According to the Linux
+      man page for waitpid:
 
-         POSIX.1-2001 specifies that if the disposition of SIGCHLD is
-         set to SIG_IGN or the SA_NOCLDWAIT flag is set for SIGCHLD
-         (see sigaction(2)), then children that terminate do not
-         become zombies and a call to wait() or waitpid() will block
-         until all children have terminated, and then fail with errno
-         set to ECHILD.  (The original POSIX standard left the
-         behaviour of setting SIGCHLD to SIG_IGN unspecified.)
-      */
-      Int ir, zzz;
-      vki_sigaction_toK_t sa, sa2;
-      vki_sigaction_fromK_t saved_sa;
-      VG_(memset)( &sa, 0, sizeof(sa) );
-      VG_(sigemptyset)(&sa.sa_mask);
-      sa.ksa_handler = VKI_SIG_DFL;
-      sa.sa_flags    = 0;
-      ir = VG_(sigaction)(VKI_SIGCHLD, &sa, &saved_sa);
-      vg_assert(ir == 0);
+      POSIX.1-2001 specifies that if the disposition of SIGCHLD is
+      set to SIG_IGN or the SA_NOCLDWAIT flag is set for SIGCHLD
+      (see sigaction(2)), then children that terminate do not
+      become zombies and a call to wait() or waitpid() will block
+      until all children have terminated, and then fail with errno
+      set to ECHILD.  (The original POSIX standard left the
+      behaviour of setting SIGCHLD to SIG_IGN unspecified.)
+   */
+   Int ir, zzz;
+   vki_sigaction_toK_t sa, sa2;
+   vki_sigaction_fromK_t saved_sa;
+   VG_(memset)( &sa, 0, sizeof(sa) );
+   VG_(sigemptyset)(&sa.sa_mask);
+   sa.ksa_handler = VKI_SIG_DFL;
+   sa.sa_flags    = 0;
+   ir = VG_(sigaction)(VKI_SIGCHLD, &sa, &saved_sa);
+   vg_assert(ir == 0);
 
-      zzz = VG_(waitpid)(pid, NULL, 0);
+   zzz = VG_(waitpid)(pid, NULL, 0);
 
-      VG_(convert_sigaction_fromK_to_toK)( &saved_sa, &sa2 );
-      ir = VG_(sigaction)(VKI_SIGCHLD, &sa2, NULL);
-      vg_assert(ir == 0);
-      return zzz == -1 ? -1 : 0;
-   }
+   VG_(convert_sigaction_fromK_to_toK)( &saved_sa, &sa2 );
+   ir = VG_(sigaction)(VKI_SIGCHLD, &sa2, NULL);
+   vg_assert(ir == 0);
+   return zzz == -1 ? -1 : 0;
 }
 
 Int VG_(sysctl)(Int *name, UInt namelen, void *oldp, SizeT *oldlenp, void *newp, SizeT newlen)
@@ -392,7 +599,7 @@
    SysRes res;
 #  if defined(VGO_darwin)
    res = VG_(do_syscall6)(__NR___sysctl,
-                           name, namelen, oldp, oldlenp, newp, newlen);
+                           (UWord)name, namelen, (UWord)oldp, (UWord)oldlenp, (UWord)newp, newlen);
 #  else
    res = VG_(mk_SysRes_Error)(VKI_ENOSYS);
 #  endif
@@ -493,6 +700,10 @@
    // Use Mach thread ports for lwpid instead.
    return mach_thread_self();
 
+#  elif defined(VGO_solaris)
+   SysRes res = VG_(do_syscall0)(__NR_lwp_self);
+   return sr_Res(res);
+
 #  else
 #    error "Unknown OS"
 #  endif
@@ -508,36 +719,69 @@
 Int VG_(getpgrp) ( void )
 {
    /* ASSUMES SYSCALL ALWAYS SUCCEEDS */
+#  if defined(VGO_linux) || defined(VGO_darwin)
    return sr_Res( VG_(do_syscall0)(__NR_getpgrp) );
+#  elif defined(VGO_solaris)
+   /* Uses the shared pgrpsys syscall, 0 for the getpgrp variant. */
+   return sr_Res( VG_(do_syscall1)(__NR_pgrpsys, 0) );
+#  else
+#    error Unknown OS
+#  endif
 }
 
 Int VG_(getppid) ( void )
 {
    /* ASSUMES SYSCALL ALWAYS SUCCEEDS */
+#  if defined(VGO_linux) || defined(VGO_darwin)
    return sr_Res( VG_(do_syscall0)(__NR_getppid) );
+#  elif defined(VGO_solaris)
+   /* Uses the shared getpid/getppid syscall, val2 contains a parent pid. */
+   return sr_ResHI( VG_(do_syscall0)(__NR_getpid) );
+#  else
+#    error Unknown OS
+#  endif
 }
 
 Int VG_(geteuid) ( void )
 {
    /* ASSUMES SYSCALL ALWAYS SUCCEEDS */
-#  if defined(__NR_geteuid32)
-   // We use the 32-bit version if it's supported.  Otherwise, IDs greater
-   // than 65536 cause problems, as bug #151209 showed.
-   return sr_Res( VG_(do_syscall0)(__NR_geteuid32) );
+#  if defined(VGO_linux) || defined(VGO_darwin)
+   {
+#     if defined(__NR_geteuid32)
+      // We use the 32-bit version if it's supported.  Otherwise, IDs greater
+      // than 65536 cause problems, as bug #151209 showed.
+      return sr_Res( VG_(do_syscall0)(__NR_geteuid32) );
+#     else
+      return sr_Res( VG_(do_syscall0)(__NR_geteuid) );
+#     endif
+   }
+#  elif defined(VGO_solaris)
+   /* Uses the shared getuid/geteuid syscall, val2 contains the effective
+      uid. */
+   return sr_ResHI( VG_(do_syscall0)(__NR_getuid) );
 #  else
-   return sr_Res( VG_(do_syscall0)(__NR_geteuid) );
+#    error Unknown OS
 #  endif
 }
 
 Int VG_(getegid) ( void )
 {
+#  if defined(VGO_linux) || defined(VGO_darwin)
    /* ASSUMES SYSCALL ALWAYS SUCCEEDS */
-#  if defined(__NR_getegid32)
+#    if defined(__NR_getegid32)
    // We use the 32-bit version if it's supported.  Otherwise, IDs greater
    // than 65536 cause problems, as bug #151209 showed.
    return sr_Res( VG_(do_syscall0)(__NR_getegid32) );
-#  else
+#    else
    return sr_Res( VG_(do_syscall0)(__NR_getegid) );
+#    endif
+
+#  elif defined(VGO_solaris)
+   /* Uses the shared getgid/getegid syscall, val2 contains the effective
+      gid. */
+   return sr_ResHI( VG_(do_syscall0)(__NR_getgid) );
+#  else
+#    error Unknown OS
 #  endif
 }
 
@@ -568,7 +812,8 @@
 #  elif defined(VGP_amd64_linux) || defined(VGP_arm_linux) \
         || defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)  \
         || defined(VGO_darwin) || defined(VGP_s390x_linux)    \
-        || defined(VGP_mips32_linux) || defined(VGP_arm64_linux)
+        || defined(VGP_mips32_linux) || defined(VGP_arm64_linux) \
+        || defined(VGO_solaris)
    SysRes sres;
    sres = VG_(do_syscall2)(__NR_getgroups, size, (Addr)list);
    if (sr_isError(sres))
@@ -587,7 +832,17 @@
 Int VG_(ptrace) ( Int request, Int pid, void *addr, void *data )
 {
    SysRes res;
+#  if defined(VGO_linux) || defined(VGO_darwin)
    res = VG_(do_syscall4)(__NR_ptrace, request, pid, (UWord)addr, (UWord)data);
+#  elif defined(VGO_solaris)
+   /* There is no ptrace syscall on Solaris.  Such requests has to be
+      implemented using the /proc interface.  Callers of VG_(ptrace) should
+      ensure that this function is not reached on Solaris, i.e. they must
+      provide a special code for Solaris for whatever feature they provide. */
+   I_die_here;
+#  else
+#    error Unknown OS
+#  endif
    if (sr_isError(res))
       return -1;
    return sr_Res(res);
@@ -625,6 +880,24 @@
    }
    return sr_Res(res);
 
+#  elif defined(VGO_solaris)
+   /* Using fork() on Solaris is not really the best thing to do. Solaris
+      does not do memory overcommitment so fork() can fail if there is not
+      enough memory to copy the current process into a new one.
+      Prefer to use VG_(spawn)() over VG_(fork)() + VG_(execv)(). */
+   SysRes res;
+   res = VG_(do_syscall2)(__NR_forksys, 0 /*subcode (fork)*/, 0 /*flags*/);
+   if (sr_isError(res))
+      return -1;
+   /* On success:
+        val = a pid of the child in the parent, a pid of the parent in the
+              child,
+        val2 = 0 in the parent process, 1 in the child process. */
+   if (sr_ResHI(res) != 0) {
+      return 0;
+   }
+   return sr_Res(res);
+
 #  else
 #    error "Unknown OS"
 #  endif
@@ -640,7 +913,7 @@
    static ULong base = 0;
    ULong  now;
 
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    { SysRes res;
      struct vki_timespec ts_now;
      res = VG_(do_syscall2)(__NR_clock_gettime, VKI_CLOCK_MONOTONIC,
@@ -649,6 +922,8 @@
         now = ts_now.tv_sec * 1000000ULL + ts_now.tv_nsec / 1000;
      } else {
        struct vki_timeval tv_now;
+       /* Note: On Solaris, this syscall takes only one parameter but the
+          extra dummy one does not cause any harm. */
        res = VG_(do_syscall2)(__NR_gettimeofday, (UWord)&tv_now, (UWord)NULL);
        vg_assert(! sr_isError(res));
        now = tv_now.tv_sec * 1000000ULL + tv_now.tv_usec;
@@ -918,7 +1193,7 @@
 #  elif defined(VGA_mips32) || defined(VGA_mips64)
    SysRes sres = VG_(do_syscall3)(__NR_cacheflush, (UWord) ptr,
                                  (UWord) nbytes, (UWord) 3);
-   vg_assert( sres._isError == 0 );
+   vg_assert( !sr_isError(sres) );
 
 #  elif defined(VGA_tilegx)
    const HChar *start, *end;
diff --git a/coregrind/m_libcsetjmp.c b/coregrind/m_libcsetjmp.c
index df56e3b..81a1a53 100644
--- a/coregrind/m_libcsetjmp.c
+++ b/coregrind/m_libcsetjmp.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 Mozilla Inc
+   Copyright (C) 2010-2015 Mozilla Inc
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/m_libcsignal.c b/coregrind/m_libcsignal.c
index a380f05..557e219 100644
--- a/coregrind/m_libcsignal.c
+++ b/coregrind/m_libcsignal.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -37,6 +37,11 @@
 #include "pub_core_syscall.h"
 #include "pub_core_libcsignal.h"    /* self */
 
+#if !defined(VGO_solaris)
+#   define _VKI_MAXSIG (_VKI_NSIG - 1)
+#endif
+STATIC_ASSERT((_VKI_MAXSIG % _VKI_NSIG_BPW) != 0);
+
 /* IMPORTANT: on Darwin it is essential to use the _nocancel versions
    of syscalls rather than the vanilla version, if a _nocancel version
    is available.  See docs/internals/Darwin-notes.txt for the reason
@@ -49,6 +54,13 @@
    64-bits.  And which they are it doesn't necessarily follow from the
    host word size. */
 
+/* Functions VG_(isemptysigset) and VG_(isfullsigset) check only bits that
+   represent valid signals (i.e. signals <= _VKI_MAXSIG).  The same applies
+   for the comparison in VG_(iseqsigset).  This is important because when
+   a signal set is received from an operating system then bits which represent
+   signals > _VKI_MAXSIG can have unexpected values for Valgrind. This is
+   mainly specific to the Solaris kernel which clears these bits. */
+
 Int VG_(sigfillset)( vki_sigset_t* set )
 {
    Int i;
@@ -73,8 +85,18 @@
 {
    Int i;
    vg_assert(set != NULL);
-   for (i = 0; i < _VKI_NSIG_WORDS; i++)
-      if (set->sig[i] != 0) return False;
+   for (i = 0; i < _VKI_NSIG_WORDS; i++) {
+      if (_VKI_NSIG_BPW * (i + 1) <= (_VKI_MAXSIG + 1)) {
+         /* Full word check. */
+         if (set->sig[i] != 0) return False;
+      }
+      else {
+         /* Partial word check. */
+         ULong mask = (1UL << (_VKI_MAXSIG % _VKI_NSIG_BPW)) - 1;
+         if ((set->sig[i] & mask) != 0) return False;
+         break;
+      }
+   }
    return True;
 }
 
@@ -82,8 +104,18 @@
 {
    Int i;
    vg_assert(set != NULL);
-   for (i = 0; i < _VKI_NSIG_WORDS; i++)
-      if (set->sig[i] != ~0) return False;
+   for (i = 0; i < _VKI_NSIG_WORDS; i++) {
+      if (_VKI_NSIG_BPW * (i + 1) <= (_VKI_MAXSIG + 1)) {
+         /* Full word check. */
+         if (set->sig[i] != ~0) return False;
+      }
+      else {
+         /* Partial word check. */
+         ULong mask = (1UL << (_VKI_MAXSIG % _VKI_NSIG_BPW)) - 1;
+         if ((set->sig[i] & mask) != mask) return False;
+         break;
+      }
+   }
    return True;
 }
 
@@ -91,8 +123,18 @@
 {
    Int i;
    vg_assert(set1 != NULL && set2 != NULL);
-   for (i = 0; i < _VKI_NSIG_WORDS; i++)
-      if (set1->sig[i] != set2->sig[i]) return False;
+   for (i = 0; i < _VKI_NSIG_WORDS; i++) {
+      if (_VKI_NSIG_BPW * (i + 1) <= (_VKI_MAXSIG + 1)) {
+         /* Full word comparison. */
+         if (set1->sig[i] != set2->sig[i]) return False;
+      }
+      else {
+         /* Partial word comparison. */
+         ULong mask = (1UL << (_VKI_MAXSIG % _VKI_NSIG_BPW)) - 1;
+         if ((set1->sig[i] & mask) != (set2->sig[i] & mask)) return False;
+         break;
+      }
+   }
    return True;
 }
 
@@ -174,7 +216,7 @@
 */
 Int VG_(sigprocmask)( Int how, const vki_sigset_t* set, vki_sigset_t* oldset)
 {
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
 #  if defined(__NR_rt_sigprocmask)
    SysRes res = VG_(do_syscall4)(__NR_rt_sigprocmask, 
                                  how, (UWord)set, (UWord)oldset, 
@@ -272,6 +314,12 @@
    }
    return sr_isError(res) ? -1 : 0;
 
+#  elif defined(VGO_solaris)
+   /* vki_sigaction_toK_t and vki_sigaction_fromK_t are identical types. */
+   SysRes res = VG_(do_syscall3)(__NR_sigaction,
+                                 signum, (UWord)act, (UWord)oldact);
+   return sr_isError(res) ? -1 : 0;
+
 #  else
 #    error "Unsupported OS"
 #  endif
@@ -283,7 +331,7 @@
 VG_(convert_sigaction_fromK_to_toK)( const vki_sigaction_fromK_t* fromK,
                                      /*OUT*/vki_sigaction_toK_t* toK )
 {
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    *toK = *fromK;
 #  elif defined(VGO_darwin)
    toK->ksa_handler = fromK->ksa_handler;
@@ -298,7 +346,7 @@
 
 Int VG_(kill)( Int pid, Int signo )
 {
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    SysRes res = VG_(do_syscall2)(__NR_kill, pid, signo);
 #  elif defined(VGO_darwin)
    SysRes res = VG_(do_syscall3)(__NR_kill,
@@ -324,6 +372,21 @@
    res = VG_(do_syscall2)(__NR___pthread_kill, lwpid, signo);
    return sr_isError(res) ? -1 : 0;
 
+#  elif defined(VGO_solaris)
+   SysRes res;
+#     if defined(SOLARIS_LWP_SIGQUEUE_SYSCALL)
+#        if defined(SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID)
+            res = VG_(do_syscall6)(__NR_lwp_sigqueue, 0, lwpid, signo,
+                                   0, VKI_SI_LWP, 0);
+#        else
+            res = VG_(do_syscall5)(__NR_lwp_sigqueue, lwpid, signo,
+                                   0, VKI_SI_LWP, 0);
+#        endif
+#     else
+         res = VG_(do_syscall2)(__NR_lwp_kill, lwpid, signo);
+#     endif
+   return sr_isError(res) ? -1 : 0;
+
 #  else
 #    error "Unsupported plat"
 #  endif
@@ -415,7 +478,7 @@
 
   /* don't try for signals not in 'set' */
   /* pending = pending `intersect` set */
-  VG_(sigintersectset)(&pending, (vki_sigset_t*)set);
+  VG_(sigintersectset)(&pending, (const vki_sigset_t*)set);
 
   /* don't try for signals not blocked at the moment */
   ir = VG_(sigprocmask)(VKI_SIG_SETMASK, NULL, &blocked);
@@ -477,6 +540,16 @@
   return i;
 }
 
+#elif defined(VGO_solaris)
+Int VG_(sigtimedwait_zero)( const vki_sigset_t *set, vki_siginfo_t *info )
+{
+   /* Trivial as on Linux. */
+   static const struct vki_timespec zero = { 0, 0 };
+   SysRes res = VG_(do_syscall3)(__NR_sigtimedwait, (UWord)set, (UWord)info,
+                                 (UWord)&zero);
+   return sr_isError(res) ? -1 : sr_Res(res);
+}
+
 #else
 #  error "Unknown OS"
 #endif
diff --git a/coregrind/m_mach/mach_basics.c b/coregrind/m_mach/mach_basics.c
index 33fab90..034511c 100644
--- a/coregrind/m_mach/mach_basics.c
+++ b/coregrind/m_mach/mach_basics.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Apple Inc.
+   Copyright (C) 2005-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_mach/mach_traps-amd64-darwin.S b/coregrind/m_mach/mach_traps-amd64-darwin.S
index be189a0..e5b393c 100644
--- a/coregrind/m_mach/mach_traps-amd64-darwin.S
+++ b/coregrind/m_mach/mach_traps-amd64-darwin.S
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2007-2013 Apple Inc.
+   Copyright (C) 2007-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -27,6 +27,8 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_amd64_darwin)
 
 #include "vki/vki-scnums-darwin.h"
@@ -134,6 +136,9 @@
 
 #endif // defined(VGP_amd64_darwin)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_mach/mach_traps-x86-darwin.S b/coregrind/m_mach/mach_traps-x86-darwin.S
index b9bf99b..5564060 100644
--- a/coregrind/m_mach/mach_traps-x86-darwin.S
+++ b/coregrind/m_mach/mach_traps-x86-darwin.S
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 Apple Inc.
+   Copyright (C) 2006-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -27,6 +27,8 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_x86_darwin)
 
 // DDD: should use __NR_ constants in here instead of the trap numbers
@@ -124,6 +126,9 @@
 
 #endif // defined(VGP_x86_darwin)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c
index 99afb7d..6110c93 100644
--- a/coregrind/m_machine.c
+++ b/coregrind/m_machine.c
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -191,7 +191,7 @@
                                                         const HChar*, Addr))
 {
    VexGuestArchState* vex = &(VG_(get_ThreadState)(tid)->arch.vex);
-   VG_(debugLog)(2, "machine", "apply_to_GPs_of_tid %d\n", tid);
+   VG_(debugLog)(2, "machine", "apply_to_GPs_of_tid %u\n", tid);
 #if defined(VGA_x86)
    (*f)(tid, "EAX", vex->guest_EAX);
    (*f)(tid, "ECX", vex->guest_ECX);
@@ -526,7 +526,7 @@
 
 
 /* Helper function for VG_(machine_get_hwcaps), assumes the SIGILL/etc
- * handlers are installed.  Determines the the sizes affected by dcbz
+ * handlers are installed.  Determines the sizes affected by dcbz
  * and dcbzl instructions and updates the given VexArchInfo structure
  * accordingly.
  *
@@ -878,6 +878,7 @@
      Bool have_lzcnt, have_avx, have_bmi, have_avx2;
      Bool have_rdtscp;
      UInt eax, ebx, ecx, edx, max_basic, max_extended;
+     ULong xgetbv_0 = 0;
      HChar vstr[13];
      vstr[0] = 0;
 
@@ -910,26 +911,41 @@
      // sse41   is ecx:19
      // sse42   is ecx:20
 
+     // xsave   is ecx:26
      // osxsave is ecx:27
      // avx     is ecx:28
      // fma     is ecx:12
      have_avx = False;
      /* have_fma = False; */
-     if ( (ecx & ((1<<27)|(1<<28))) == ((1<<27)|(1<<28)) ) {
-        /* processor supports AVX instructions and XGETBV is enabled
-           by OS */
+     if ( (ecx & ((1<<28)|(1<<27)|(1<<26))) == ((1<<28)|(1<<27)|(1<<26)) ) {
+        /* Processor supports AVX instructions and XGETBV is enabled
+           by OS and AVX instructions are enabled by the OS. */
         ULong w;
         __asm__ __volatile__("movq $0,%%rcx ; "
                              ".byte 0x0F,0x01,0xD0 ; " /* xgetbv */
                              "movq %%rax,%0"
                              :/*OUT*/"=r"(w) :/*IN*/
-                             :/*TRASH*/"rdx","rcx");
-        if ((w & 6) == 6) {
-           /* OS has enabled both XMM and YMM state support */
-           have_avx = True;
+                             :/*TRASH*/"rdx","rcx","rax");
+        xgetbv_0 = w;
+        if ((xgetbv_0 & 7) == 7) {
+           /* Only say we have AVX if the XSAVE-allowable
+              bitfield-mask allows x87, SSE and AVX state.  We could
+              actually run with a more restrictive XGETBV(0) value,
+              but VEX's implementation of XSAVE and XRSTOR assumes
+              that all 3 bits are enabled.
+
+              Also, the VEX implementation of XSAVE/XRSTOR assumes that
+              state component [2] (the YMM high halves) are located in
+              the XSAVE image at offsets 576 .. 831.  So we have to
+              check that here before declaring AVX to be supported. */
+           UInt eax2, ebx2, ecx2, edx2;
+           VG_(cpuid)(0xD, 2, &eax2, &ebx2, &ecx2, &edx2);
+           if (ebx2 == 576 && eax2 == 256) {
+              have_avx = True;
+           }
            /* have_fma = (ecx & (1<<12)) != 0; */
            /* have_fma: Probably correct, but gcc complains due to
-              unusedness. &*/
+              unusedness. */
         }
      }
 
@@ -957,12 +973,12 @@
         have_rdtscp = (edx & (1<<27)) != 0; /* True => have RDTSVCP */
      }
 
-     /* Check for BMI1 and AVX2. If we have AVX1 (plus OS support). */
-     have_bmi = False;
+     /* Check for BMI1 and AVX2.  If we have AVX1 (plus OS support). */
+     have_bmi  = False;
      have_avx2 = False;
      if (have_avx && max_basic >= 7) {
         VG_(cpuid)(7, 0, &eax, &ebx, &ecx, &edx);
-        have_bmi = (ebx & (1<<3)) != 0; /* True => have BMI1 */
+        have_bmi  = (ebx & (1<<3)) != 0; /* True => have BMI1 */
         have_avx2 = (ebx & (1<<5)) != 0; /* True => have AVX2 */
      }
 
@@ -1411,7 +1427,7 @@
      HChar *p = fac_str;
      p += VG_(sprintf)(p, "machine %4d  ", model);
      for (i=0; i < sizeof fac_hwcaps / sizeof fac_hwcaps[0]; ++i) {
-        p += VG_(sprintf)(p, " %s %1d", fac_hwcaps[i].name,
+        p += VG_(sprintf)(p, " %s %1u", fac_hwcaps[i].name,
                           fac_hwcaps[i].installed);
      }
      *p++ = '\0';
@@ -1840,7 +1856,8 @@
       || defined(VGP_ppc32_linux) || defined(VGP_ppc64le_linux) \
       || defined(VGP_s390x_linux) || defined(VGP_mips32_linux) \
       || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) \
-      || defined(VGP_tilegx_linux)
+      || defined(VGP_tilegx_linux) || defined(VGP_x86_solaris) \
+      || defined(VGP_amd64_solaris)
    return f;
 #  elif defined(VGP_ppc64be_linux)
    /* ppc64-linux uses the AIX scheme, in which f is a pointer to a
diff --git a/coregrind/m_main.c b/coregrind/m_main.c
index 9f98e11..1821c94 100644
--- a/coregrind/m_main.c
+++ b/coregrind/m_main.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -133,11 +133,8 @@
 "                              load default suppressions [yes]\n"
 "    --suppressions=<filename> suppress errors described in <filename>\n"
 "    --gen-suppressions=no|yes|all    print suppressions for errors? [no]\n"
-"    --db-attach=no|yes        start debugger when errors detected? [no]\n"
-"                              Note: deprecated feature\n"
-"    --db-command=<command>    command to start debugger [%s -nw %%f %%p]\n"
 "    --input-fd=<number>       file descriptor for input [0=stdin]\n"
-"    --dsymutil=no|yes         run dsymutil on Mac OS X when helpful? [no]\n"
+"    --dsymutil=no|yes         run dsymutil on Mac OS X when helpful? [yes]\n"
 "    --max-stackframe=<number> assume stack switch for SP changes larger\n"
 "                              than <number> bytes [2000000]\n"
 "    --main-stacksize=<number> set size of main thread's stack (in bytes)\n"
@@ -163,13 +160,13 @@
 "    --allow-mismatched-debuginfo=no|yes  [no]\n"
 "                              for the above two flags only, accept debuginfo\n"
 "                              objects that don't \"match\" the main object\n"
-"    --smc-check=none|stack|all|all-non-file [stack]\n"
+"    --smc-check=none|stack|all|all-non-file [all-non-file]\n"
 "                              checks for self-modifying code: none, only for\n"
 "                              code found in stacks, for all code, or for all\n"
 "                              code except that from file-backed mappings\n"
 "    --read-inline-info=yes|no read debug info about inlined function calls\n"
 "                              and use it to do better stack traces.  [yes]\n"
-"                              on Linux/Android for Memcheck/Helgrind/DRD\n"
+"                              on Linux/Android/Solaris for Memcheck/Helgrind/DRD\n"
 "                              only.  [no] for all other tools and platforms.\n"
 "    --read-var-info=yes|no    read debug info on stack and global variables\n"
 "                              and use it to print better error messages in\n"
@@ -181,7 +178,7 @@
 "    --run-libc-freeres=no|yes free up glibc memory at exit on Linux? [yes]\n"
 "    --sim-hints=hint1,hint2,...  activate unusual sim behaviours [none] \n"
 "         where hint is one of:\n"
-"           lax-ioctls fuse-compatible enable-outer\n"
+"           lax-ioctls lax-doors fuse-compatible enable-outer\n"
 "           no-inner-prefix no-nptl-pthread-stackcache none\n"
 "    --fair-sched=no|yes|try   schedule threads fairly on multicore systems [no]\n"
 "    --kernel-variant=variant1,variant2,...\n"
@@ -295,13 +292,12 @@
 "  Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc\n"
 "\n"
 "  %s is %s\n"
-"  Valgrind is Copyright (C) 2000-2013, and GNU GPL'd, by Julian Seward et al.\n"
-"  LibVEX is Copyright (C) 2004-2013, and GNU GPL'd, by OpenWorks LLP et al.\n"
+"  Valgrind is Copyright (C) 2000-2015, and GNU GPL'd, by Julian Seward et al.\n"
+"  LibVEX is Copyright (C) 2004-2015, and GNU GPL'd, by OpenWorks LLP et al.\n"
 "\n"
 "  Bug reports, feedback, admiration, abuse, etc, to: %s.\n"
 "\n";
 
-   const HChar* gdb_path = GDB_PATH;
    HChar default_alignment[30];      // large enough
    HChar default_redzone_size[30];   // large enough
 
@@ -319,7 +315,6 @@
    /* 'usage1' a type as described after each arg. */
    VG_(printf)(usage1, 
                VG_(clo_vgdb_error)        /* int */,
-               gdb_path                   /* char* */,
                default_alignment          /* char* */,
                default_redzone_size       /* char* */,
                VG_(clo_vgdb_poll)         /* int */,
@@ -410,7 +405,7 @@
       // running in an outer, to have "no-inner-prefix" enabled
       // as early as possible.
       else if VG_USETX_CLO (str, "--sim-hints",
-                            "lax-ioctls,fuse-compatible,"
+                            "lax-ioctls,lax-doors,fuse-compatible,"
                             "enable-outer,no-inner-prefix,"
                             "no-nptl-pthread-stackcache",
                             VG_(clo_sim_hints)) {}
@@ -617,7 +612,6 @@
       }
       else if VG_BOOL_CLO(arg, "--vgdb-shadow-registers",
                             VG_(clo_vgdb_shadow_registers)) {}
-      else if VG_BOOL_CLO(arg, "--db-attach",      VG_(clo_db_attach)) {}
       else if VG_BOOL_CLO(arg, "--demangle",       VG_(clo_demangle)) {}
       else if VG_STR_CLO (arg, "--soname-synonyms",VG_(clo_soname_synonyms)) {}
       else if VG_BOOL_CLO(arg, "--error-limit",    VG_(clo_error_limit)) {}
@@ -682,7 +676,6 @@
 
       else if VG_BOOL_CLO(arg, "--trace-syscalls",   VG_(clo_trace_syscalls)) {}
       else if VG_BOOL_CLO(arg, "--wait-for-gdb",     VG_(clo_wait_for_gdb)) {}
-      else if VG_STR_CLO (arg, "--db-command",       VG_(clo_db_command)) {}
       else if VG_BOOL_CLO(arg, "--sym-offsets",      VG_(clo_sym_offsets)) {}
       else if VG_BOOL_CLO(arg, "--read-inline-info", VG_(clo_read_inline_info)) {}
       else if VG_BOOL_CLO(arg, "--read-var-info",    VG_(clo_read_var_info)) {}
@@ -902,11 +895,7 @@
 
    /* END command-line processing loop */
 
-   /* Notify about deprecated features */
-   if (VG_(clo_db_attach))
-      VG_(umsg)
-         ("\nWarning: --db-attach is a deprecated feature which will be\n"
-          "   removed in the next release. Use --vgdb-error=1 instead\n\n");
+   /* Notify about deprecated features here. */
 
    /* Determine the path prefix for vgdb */
    if (VG_(clo_vgdb_prefix) == NULL)
@@ -998,16 +987,6 @@
             "--gen-suppressions=yes.\n");
       }
 
-      /* We can't allow DB attaching (or we maybe could, but results
-         could be chaotic ..) since it requires user input.  Hence
-         disallow. */
-      if (VG_(clo_db_attach)) {
-         VG_(fmsg_bad_option)(
-            "--xml=yes together with --db-attach=yes",
-            "--db-attach=yes is not allowed with --xml=yes\n"
-            "because it would require user input.\n");
-      }
-
       /* Disallow dump_error in XML mode; sounds like a recipe for
          chaos.  No big deal; dump_error is a flag for debugging V
          itself. */
@@ -1443,7 +1422,7 @@
       VG_(umsg)("\n");
 
    if (VG_(clo_verbosity) > 1) {
-# if !defined(VGO_darwin)
+# if defined(VGO_linux)
       SysRes fd;
 # endif
       VexArch vex_arch;
@@ -1457,7 +1436,7 @@
                      * (HChar**) VG_(indexXA)( VG_(args_for_valgrind), i ));
       }
 
-# if !defined(VGO_darwin)
+# if defined(VGO_linux)
       VG_(message)(Vg_DebugMsg, "Contents of /proc/version:\n");
       fd = VG_(open) ( "/proc/version", VKI_O_RDONLY, 0 );
       if (sr_isError(fd)) {
@@ -1479,7 +1458,7 @@
          VG_(message)(Vg_DebugMsg, "\n");
          VG_(close)(fdno);
       }
-# else
+# elif defined(VGO_darwin)
       VG_(message)(Vg_DebugMsg, "Output from sysctl({CTL_KERN,KERN_VERSION}):\n");
       /* Note: preferable to use sysctlbyname("kern.version", kernelVersion, &len, NULL, 0)
          however that syscall is OS X 10.10+ only. */
@@ -1490,6 +1469,20 @@
       VG_(sysctl)(mib, sizeof(mib)/sizeof(Int), kernelVersion, &len, NULL, 0);
       VG_(message)(Vg_DebugMsg, "  %s\n", kernelVersion);
       VG_(free)( kernelVersion );
+# elif defined(VGO_solaris)
+      /* There is no /proc/version file on Solaris so we try to get some
+         system information using the uname(2) syscall. */
+      {
+         struct vki_utsname uts;
+
+         VG_(message)(Vg_DebugMsg, "System information:\n");
+         SysRes res = VG_(do_syscall1)(__NR_uname, (UWord)&uts);
+         if (sr_isError(res))
+            VG_(message)(Vg_DebugMsg, "  uname() failed\n");
+         else
+            VG_(message)(Vg_DebugMsg, "  %s %s %s %s\n",
+                         uts.sysname, uts.release, uts.version, uts.machine);
+      }
 # endif
 
       VG_(machine_get_VexArchInfo)( &vex_arch, &vex_archinfo );
@@ -1539,8 +1532,8 @@
 #  endif
 
    if (show)
-      VG_(printf)("fd limits: host, before: cur %lu max %lu\n", 
-                  (UWord)rl.rlim_cur, (UWord)rl.rlim_max);
+      VG_(printf)("fd limits: host, before: cur %llu max %llu\n", 
+                  (ULong)rl.rlim_cur, (ULong)rl.rlim_max);
 
    /* Work out where to move the soft limit to. */
    if (rl.rlim_cur + N_RESERVED_FDS <= rl.rlim_max) {
@@ -1559,7 +1552,7 @@
    if (show) {
       VG_(printf)("fd limits: host,  after: cur %lu max %lu\n",
                   (UWord)rl.rlim_cur, (UWord)rl.rlim_max);
-      VG_(printf)("fd limits: guest       : cur %u max %u\n",
+      VG_(printf)("fd limits: guest       : cur %d max %d\n",
                   VG_(fd_soft_limit), VG_(fd_hard_limit));
    }
 
@@ -1945,7 +1938,7 @@
    if (!need_help) {
       VG_(debugLog)(1, "main", "Create initial image\n");
 
-#     if defined(VGO_linux) || defined(VGO_darwin)
+#     if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
       the_iicii.argv              = argv;
       the_iicii.envp              = envp;
       the_iicii.toolname          = toolname;
@@ -1978,16 +1971,21 @@
    //   p: setup file descriptors
    //   p: ii_create_image for VG_(client_auxv) setup.
    //--------------------------------------------------------------
-#if !defined(VGO_linux)
-   // client shouldn't be using /proc!
    VG_(cl_cmdline_fd) = -1;
    VG_(cl_auxv_fd) = -1;
-#else
+#if defined(VGO_solaris)
+   VG_(cl_psinfo_fd) = -1;
+#endif
+
+#if defined(VGO_linux) || defined(VGO_solaris)
    if (!need_help) {
       HChar  buf[50];   // large enough
       HChar  buf2[VG_(mkstemp_fullname_bufsz)(sizeof buf - 1)];
-      HChar  nul[1];
       Int    fd, r;
+
+#if defined(VGO_linux) || defined(SOLARIS_PROC_CMDLINE)
+      /* Fake /proc/<pid>/cmdline only on Linux and Solaris if supported. */
+      HChar  nul[1];
       const HChar* exename;
 
       VG_(debugLog)(1, "main", "Create fake /proc/<pid>/cmdline\n");
@@ -2009,8 +2007,8 @@
       }
 
       /* Don't bother to seek the file back to the start; instead do
-	 it every time a copy of it is given out (by PRE(sys_open)). 
-	 That is probably more robust across fork() etc. */
+	 it every time a copy of it is given out (by PRE(sys_open) or
+	 PRE(sys_openat)). That is probably more robust across fork() etc. */
 
       /* Now delete it, but hang on to the fd. */
       r = VG_(unlink)( buf2 );
@@ -2018,7 +2016,9 @@
          VG_(err_config_error)("Can't delete client cmdline file in %s\n", buf2);
 
       VG_(cl_cmdline_fd) = fd;
+#endif // defined(VGO_linux) || defined(SOLARIS_PROC_CMDLINE)
 
+      /* Fake /proc/<pid>/auxv on both Linux and Solaris. */
       VG_(debugLog)(1, "main", "Create fake /proc/<pid>/auxv\n");
 
       VG_(sprintf)(buf, "proc_%d_auxv", VG_(getpid)());
@@ -2047,6 +2047,24 @@
          VG_(err_config_error)("Can't delete client auxv file in %s\n", buf2);
 
       VG_(cl_auxv_fd) = fd;
+
+#if defined(VGO_solaris)
+      /* Fake /proc/<pid>/psinfo on Solaris.
+       * Contents will be fetched and partially faked later on the fly. */
+      VG_(debugLog)(1, "main", "Create fake /proc/<pid>/psinfo\n");
+
+      VG_(sprintf)(buf, "proc_%d_psinfo", VG_(getpid)());
+      fd = VG_(mkstemp)( buf, buf2 );
+      if (fd == -1)
+         VG_(err_config_error)("Can't create client psinfo file in %s\n", buf2);
+
+      /* Now delete it, but hang on to the fd. */
+      r = VG_(unlink)( buf2 );
+      if (r)
+         VG_(err_config_error)("Can't delete client psinfo file in %s\n", buf2);
+
+      VG_(cl_psinfo_fd) = fd;
+#endif /* VGO_solaris */
    }
 #endif
 
@@ -2165,6 +2183,8 @@
       iters = 10;
 #     elif defined(VGO_darwin)
       iters = 3;
+#     elif defined(VGO_solaris)
+      iters = 10;
 #     else
 #       error "Unknown plat"
 #     endif
@@ -2183,6 +2203,10 @@
       VG_(init_preopened_fds)();
    }
 
+#if defined(VGO_solaris)
+   VG_(syswrap_init)();
+#endif
+
    //--------------------------------------------------------------
    // Load debug info for the existing segments.
    //   p: setup_code_redirect_table [so that redirs can be recorded]
@@ -2207,7 +2231,7 @@
    addr2dihandle = VG_(newXA)( VG_(malloc), "main.vm.2",
                                VG_(free), sizeof(Addr_n_ULong) );
 
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    { Addr* seg_starts;
      Int   n_seg_starts;
      Addr_n_ULong anu;
@@ -2445,7 +2469,19 @@
    //      VG_(ii_create_image)   [for 'the_iicii' initial info]
    //--------------------------------------------------------------
    VG_(debugLog)(1, "main", "Finalise initial image\n");
-   VG_(ii_finalise_image)( the_iifii );
+   { /* Mark the main thread as running while we tell the tool about
+        the client memory which could be tracked during initial image
+        finalisation. So the tool can associate that memory with the
+        main thread. */
+     vg_assert(VG_(running_tid) == VG_INVALID_THREADID);
+     VG_(running_tid) = tid_main;
+
+     VG_(ii_finalise_image)( the_iifii );
+
+     /* Clear the running thread indicator */
+     VG_(running_tid) = VG_INVALID_THREADID;
+     vg_assert(VG_(running_tid) == VG_INVALID_THREADID);
+   }
 
    //--------------------------------------------------------------
    // Initialise the signal handling subsystem
@@ -2662,10 +2698,10 @@
       sys_exit, do likewise; if the (last) thread stopped due to a fatal
       signal, terminate the entire system with that same fatal signal. */
    VG_(debugLog)(1, "core_os", 
-                    "VG_(terminate_NORETURN)(tid=%lld)\n", (ULong)tid);
+                    "VG_(terminate_NORETURN)(tid=%u)\n", tid);
 
    switch (tids_schedretcode) {
-   case VgSrc_ExitThread:  /* the normal way out (Linux) */
+   case VgSrc_ExitThread:  /* the normal way out (Linux, Solaris) */
    case VgSrc_ExitProcess: /* the normal way out (Darwin) */
       /* Change the application return code to user's return code,
          if an error was found */
@@ -3431,13 +3467,92 @@
    VG_(exit)(r);
 }
 
+/*====================================================================*/
+/*=== Getting to main() alive: Solaris                             ===*/
+/*====================================================================*/
+#elif defined(VGO_solaris)
+#if defined(VGP_x86_solaris)
+/* The kernel hands control to _start, which extracts the initial stack
+   pointer and calls onwards to _start_in_C_solaris.  This also switches to
+   the new stack. */
+asm("\n"
+    "\t.text\n"
+    "\t.globl _start\n"
+    "\t.type _start, @function\n"
+    "_start:\n"
+    /* Set up the new stack in %eax. */
+    "\tmovl  $vgPlain_interim_stack, %eax\n"
+    "\taddl  $"VG_STRINGIFY(VG_STACK_GUARD_SZB)", %eax\n"
+    "\taddl  $"VG_STRINGIFY(VG_DEFAULT_STACK_ACTIVE_SZB)", %eax\n"
+    "\tandl  $~15, %eax\n"
+    /* Install it, and collect the original one. */
+    "\txchgl %eax, %esp\n"
+    "\tsubl  $12, %esp\n"  /* Keep stack 16-byte aligned. */
+    /* Call _start_in_C_solaris, passing it the startup %esp. */
+    "\tpushl %eax\n"
+    "\tcall  _start_in_C_solaris\n"
+    /* NOTREACHED */
+    "\thlt\n"
+    "\t.previous\n"
+);
+#elif defined(VGP_amd64_solaris)
+asm("\n"
+    ".text\n"
+    "\t.globl _start\n"
+    "\t.type _start, @function\n"
+    "_start:\n"
+    /* Set up the new stack in %rdi. */
+    "\tmovq  $vgPlain_interim_stack, %rdi\n"
+    "\taddq  $"VG_STRINGIFY(VG_STACK_GUARD_SZB)", %rdi\n"
+    "\taddq  $"VG_STRINGIFY(VG_DEFAULT_STACK_ACTIVE_SZB)", %rdi\n"
+    "\tandq  $~15, %rdi\n"
+    /* Install it, and collect the original one. */
+    "\txchgq %rdi, %rsp\n"
+    /* Call _start_in_C_solaris, passing it the startup %rsp. */
+    "\tcall  _start_in_C_solaris\n"
+    /* NOTREACHED */
+    "\thlt\n"
+    ".previous\n"
+);
+#else
+#  error "Unknown Solaris platform"
+#endif
+
+void *memcpy(void *dest, const void *src, size_t n);
+void *memcpy(void *dest, const void *src, size_t n) {
+   return VG_(memcpy)(dest, src, n);
+}
+
+__attribute__ ((used))
+void _start_in_C_solaris ( UWord* pArgc );
+__attribute__ ((used))
+void _start_in_C_solaris ( UWord* pArgc )
+{
+   Int     r;
+   Word    argc = pArgc[0];
+   HChar** argv = (HChar**)&pArgc[1];
+   HChar** envp = (HChar**)&pArgc[1 + argc + 1];
+
+   VG_(memset)( &the_iicii, 0, sizeof(the_iicii) );
+   VG_(memset)( &the_iifii, 0, sizeof(the_iifii) );
+
+   the_iicii.sp_at_startup = (Addr)pArgc;
+
+   r = valgrind_main((Int)argc, argv, envp);
+   /* NOTREACHED */
+   VG_(exit)(r);
+}
 
 #else
-
 #  error "Unknown OS"
 #endif
 
 
+Addr VG_(get_initial_client_SP)( void )
+{
+   return the_iifii.initial_client_SP;
+}
+
 /*====================================================================*/
 /*=== {u,}{div,mod}di3 replacements                                ===*/
 /*====================================================================*/
@@ -3864,9 +3979,9 @@
 /*=== Dummy _voucher_mach_msg_set for OSX 10.10                    ===*/
 /*====================================================================*/
 
-#if defined(VGO_darwin) && DARWIN_VERS == DARWIN_10_10
+#if defined(VGO_darwin) && DARWIN_VERS >= DARWIN_10_10
 
-/* Builds on MacOSX 10.10 seem to need this for some reason. */
+/* Builds on MacOSX 10.10+ seem to need this for some reason. */
 /* extern boolean_t voucher_mach_msg_set(mach_msg_header_t *msg) 
                     __attribute__((weak_import));
    I haven't a clue what the return value means, so just return 0.
diff --git a/coregrind/m_mallocfree.c b/coregrind/m_mallocfree.c
index 1c4ac50..e522754 100644
--- a/coregrind/m_mallocfree.c
+++ b/coregrind/m_mallocfree.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -877,7 +877,7 @@
    if (a->stats__bytes_mmaped > a->stats__bytes_mmaped_max)
       a->stats__bytes_mmaped_max = a->stats__bytes_mmaped;
    VG_(debugLog)(1, "mallocfree",
-                    "newSuperblock at %p (pszB %7ld) %s owner %s/%s\n", 
+                    "newSuperblock at %p (pszB %7lu) %s owner %s/%s\n", 
                     sb, sb->n_payload_bytes,
                     (unsplittable ? "unsplittable" : ""),
                     a->clientmem ? "CLIENT" : "VALGRIND", a->name );
@@ -895,7 +895,7 @@
    UInt   i, j;
 
    VG_(debugLog)(1, "mallocfree",
-                    "reclaimSuperblock at %p (pszB %7ld) %s owner %s/%s\n", 
+                    "reclaimSuperblock at %p (pszB %7lu) %s owner %s/%s\n", 
                     sb, sb->n_payload_bytes,
                     (sb->unsplittable ? "unsplittable" : ""),
                     a->clientmem ? "CLIENT" : "VALGRIND", a->name );
@@ -1220,13 +1220,13 @@
       Superblock * sb = a->sblocks[j];
 
       VG_(printf)( "\n" );
-      VG_(printf)( "superblock %d at %p %s, sb->n_pl_bs = %lu\n",
+      VG_(printf)( "superblock %u at %p %s, sb->n_pl_bs = %lu\n",
                    blockno++, sb, (sb->unsplittable ? "unsplittable" : ""),
                    sb->n_payload_bytes);
       for (i = 0; i < sb->n_payload_bytes; i += b_bszB) {
          Block* b = (Block*)&sb->payload_bytes[i];
          b_bszB   = get_bszB(b);
-         VG_(printf)( "   block at %d, bszB %lu: ", i, b_bszB );
+         VG_(printf)( "   block at %u, bszB %lu: ", i, b_bszB );
          VG_(printf)( "%s, ", is_inuse_block(b) ? "inuse" : "free");
          VG_(printf)( "%s\n", blockSane(a, b) ? "ok" : "BAD" );
       }
@@ -1276,13 +1276,13 @@
          b     = (Block*)&sb->payload_bytes[i];
          b_bszB = get_bszB_as_is(b);
          if (!blockSane(a, b)) {
-            VG_(printf)("sanity_check_malloc_arena: sb %p, block %d "
+            VG_(printf)("sanity_check_malloc_arena: sb %p, block %u "
                         "(bszB %lu):  BAD\n", sb, i, b_bszB );
             BOMB;
          }
          thisFree = !is_inuse_block(b);
          if (thisFree && lastWasFree) {
-            VG_(printf)("sanity_check_malloc_arena: sb %p, block %d "
+            VG_(printf)("sanity_check_malloc_arena: sb %p, block %u "
                         "(bszB %lu): UNMERGED FREES\n", sb, i, b_bszB );
             BOMB;
          }
@@ -1323,7 +1323,7 @@
          b_prev = b;
          b = get_next_b(b);
          if (get_prev_b(b) != b_prev) {
-            VG_(printf)( "sanity_check_malloc_arena: list %d at %p: "
+            VG_(printf)( "sanity_check_malloc_arena: list %u at %p: "
                          "BAD LINKAGE\n",
                          listno, b );
             BOMB;
@@ -1331,7 +1331,7 @@
          b_pszB = get_pszB(a, b);
          if (b_pszB < list_min_pszB || b_pszB > list_max_pszB) {
             VG_(printf)(
-               "sanity_check_malloc_arena: list %d at %p: "
+               "sanity_check_malloc_arena: list %u at %p: "
                "WRONG CHAIN SIZE %luB (%luB, %luB)\n",
                listno, b, b_pszB, list_min_pszB, list_max_pszB );
             BOMB;
@@ -1353,8 +1353,8 @@
 
    if (VG_(clo_verbosity) > 2) 
       VG_(message)(Vg_DebugMsg,
-                   "%-8s: %2d sbs, %5d bs, %2d/%-2d free bs, "
-                   "%7ld mmap, %7ld loan\n",
+                   "%-8s: %2u sbs, %5u bs, %2u/%-2u free bs, "
+                   "%7lu mmap, %7lu loan\n",
                    a->name,
                    superblockctr,
                    blockctr_sb, blockctr_sb_free, blockctr_li, 
@@ -1764,7 +1764,7 @@
       a->sblocks_size *= 2;
       a->sblocks = array;
       VG_(debugLog)(1, "mallocfree", 
-                       "sblock array for arena `%s' resized to %ld\n", 
+                       "sblock array for arena `%s' resized to %lu\n", 
                        a->name, a->sblocks_size);
    }
 
@@ -1892,7 +1892,7 @@
                     a->clientmem ? "CLIENT" : "VALGRIND", a->name );
    } else
       VG_(debugLog)(1, "mallocfree",
-                    "deferred_reclaimSuperblock at %p (pszB %7ld) %s "
+                    "deferred_reclaimSuperblock at %p (pszB %7lu) %s "
                     "(prev %p) owner %s/%s\n",
                     sb, sb->n_payload_bytes,
                     (sb->unsplittable ? "unsplittable" : ""),
@@ -2113,8 +2113,8 @@
 
 /*
    The idea for malloc_aligned() is to allocate a big block, base, and
-   then split it into two parts: frag, which is returned to the the
-   free pool, and align, which is the bit we're really after.  Here's
+   then split it into two parts: frag, which is returned to the free
+   pool, and align, which is the bit we're really after.  Here's
    a picture.  L and H denote the block lower and upper overheads, in
    bytes.  The details are gruesome.  Note it is slightly complicated
    because the initial request to generate base may return a bigger
@@ -2457,8 +2457,8 @@
 
          sb->n_payload_bytes -= frag_bszB;
          VG_(debugLog)(1, "mallocfree",
-                       "shrink superblock %p to (pszB %7ld) "
-                       "owner %s/%s (munmap-ing %p %7ld)\n",
+                       "shrink superblock %p to (pszB %7lu) "
+                       "owner %s/%s (munmap-ing %p %7lu)\n",
                        sb, sb->n_payload_bytes,
                        a->clientmem ? "CLIENT" : "VALGRIND", a->name,
                        (void*) frag, frag_bszB);
diff --git a/coregrind/m_options.c b/coregrind/m_options.c
index 24938aa..7e920e0 100644
--- a/coregrind/m_options.c
+++ b/coregrind/m_options.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -67,8 +67,6 @@
 const HChar *VG_(arg_vgdb_prefix)    = NULL;
 Bool   VG_(clo_vgdb_shadow_registers) = False;
 
-Bool   VG_(clo_db_attach)      = False;
-const HChar*  VG_(clo_db_command)     = GDB_PATH " -nw %f %p";
 Int    VG_(clo_gen_suppressions) = 0;
 Int    VG_(clo_sanity_level)   = 1;
 Int    VG_(clo_verbosity)      = 1;
@@ -131,13 +129,26 @@
 Word   VG_(clo_main_stacksize) = 0; /* use client's rlimit.stack */
 Word   VG_(clo_valgrind_stacksize) = VG_DEFAULT_STACK_ACTIVE_SZB;
 Bool   VG_(clo_wait_for_gdb)   = False;
-VgSmc  VG_(clo_smc_check)      = Vg_SmcStack;
 UInt   VG_(clo_kernel_variant) = 0;
-Bool   VG_(clo_dsymutil)       = False;
+Bool   VG_(clo_dsymutil)       = True;
 Bool   VG_(clo_sigill_diag)    = True;
 UInt   VG_(clo_unw_stack_scan_thresh) = 0; /* disabled by default */
 UInt   VG_(clo_unw_stack_scan_frames) = 5;
 
+// Set clo_smc_check so that it provides transparent self modifying
+// code support for "correct" programs at the smallest achievable
+// expense for this arch.
+#if defined(VGA_x86) || defined(VGA_amd64) || defined(VGA_s390x)
+VgSmc VG_(clo_smc_check) = Vg_SmcAllNonFile;
+#elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le) \
+      || defined(VGA_arm) || defined(VGA_arm64) \
+      || defined(VGA_mips32) || defined(VGA_mips64) \
+      || defined(VGA_tilegx)
+VgSmc VG_(clo_smc_check) = Vg_SmcStack;
+#else
+#  error "Unknown arch"
+#endif
+
 #if defined(VGO_darwin)
 UInt VG_(clo_resync_filter) = 1; /* enabled, but quiet */
 #else
@@ -300,7 +311,7 @@
    return c;
 }
 
-/* Should we trace into this child executable (across execve etc) ?
+/* Should we trace into this child executable (across execve, spawn etc) ?
    This involves considering --trace-children=,
    --trace-children-skip=, --trace-children-skip-by-arg=, and the name
    of the executable.  'child_argv' must not include the name of the
diff --git a/coregrind/m_oset.c b/coregrind/m_oset.c
index d1b1729..3fd214f 100644
--- a/coregrind/m_oset.c
+++ b/coregrind/m_oset.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -117,7 +117,7 @@
    OSetFree_t  free_fn;    // deallocator
    PoolAlloc*  node_pa;    // (optional) pool allocator for nodes.
    SizeT       maxEltSize; // for node_pa, must be > 0. Otherwise unused.
-   Word        nElems;     // number of elements in the tree
+   UInt        nElems;     // number of elements in the tree
    AvlNode*    root;       // root node
 
    AvlNode*    nodeStack[STACK_MAX];   // Iterator node stack
@@ -383,7 +383,7 @@
    if (!has_node_pa || VG_(releasePA)(t->node_pa) > 0) {
       AvlNode* n = NULL;
       Int i = 0;
-      Word sz = 0;
+      UWord sz = 0;
    
       stackClear(t);
       if (t->root)
@@ -912,7 +912,7 @@
 /*--- Miscellaneous operations                                     ---*/
 /*--------------------------------------------------------------------*/
 
-Word VG_(OSetGen_Size)(const AvlTree* t)
+UInt VG_(OSetGen_Size)(const AvlTree* t)
 {
    vg_assert(t);
    return t->nElems;
diff --git a/coregrind/m_poolalloc.c b/coregrind/m_poolalloc.c
index ef2f214..ed203ce 100644
--- a/coregrind/m_poolalloc.c
+++ b/coregrind/m_poolalloc.c
@@ -5,7 +5,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 OpenWorks LLP info@open-works.co.uk,
+   Copyright (C) 2011-2015 OpenWorks LLP info@open-works.co.uk,
                            Philippe Waroquiers philippe.waroquiers@skynet.be
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_rangemap.c b/coregrind/m_rangemap.c
index daed001..b085d29 100644
--- a/coregrind/m_rangemap.c
+++ b/coregrind/m_rangemap.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Mozilla Foundation
+   Copyright (C) 2014-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -123,10 +123,12 @@
    *val     = rng->val;
 }
 
-Word VG_(sizeRangeMap) ( const RangeMap* rm )
+UInt VG_(sizeRangeMap) ( const RangeMap* rm )
 {
    vg_assert(rm && rm->ranges);
-   return VG_(sizeXA)(rm->ranges);
+   Word size = VG_(sizeXA)(rm->ranges);
+   vg_assert(size >= 0);
+   return size;
 }
 
 void VG_(indexRangeMap) ( /*OUT*/UWord* key_min, /*OUT*/UWord* key_max,
diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c
index 09e6a9f..7e4df8d 100644
--- a/coregrind/m_redir.c
+++ b/coregrind/m_redir.c
@@ -7,9 +7,9 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
-   Copyright (C) 2003-2013 Jeremy Fitzhardinge
+   Copyright (C) 2003-2015 Jeremy Fitzhardinge
       jeremy@goop.org
 
    This program is free software; you can redistribute it and/or
@@ -406,6 +406,11 @@
    const HChar* const pthread_soname = "libpthread.so.0";
    const HChar* const pthread_stack_cache_actsize_varname
       = "stack_cache_actsize";
+#if defined(VGO_solaris)
+   Bool         vg_vfork_fildes_var_search = False;
+   const HChar* const vg_preload_core_soname = "vgpreload_core.so.0";
+   const HChar* const vg_vfork_fildes_varname = "vg_vfork_fildes";
+#endif
 
 #  if defined(VG_PLAT_USES_PPCTOC)
    check_ppcTOCs = True;
@@ -504,6 +509,11 @@
       SimHintiS(SimHint_no_nptl_pthread_stackcache, VG_(clo_sim_hints))
       && 0 == VG_(strcmp)(newdi_soname, pthread_soname);
 
+#if defined(VGO_solaris)
+   vg_vfork_fildes_var_search =
+      0 == VG_(strcmp)(newdi_soname, vg_preload_core_soname);
+#endif
+
    nsyms = VG_(DebugInfo_syms_howmany)( newdi );
    for (i = 0; i < nsyms; i++) {
       VG_(DebugInfo_syms_getidx)( newdi, i, &sym_avmas,
@@ -534,6 +544,18 @@
                VG_(client__stack_cache_actsize__addr) = (SizeT*) sym_avmas.main;
                dehacktivate_pthread_stack_cache_var_search = False;
             }
+#if defined(VGO_solaris)
+            if (vg_vfork_fildes_var_search
+                && 0 == VG_(strcmp)(*names, vg_vfork_fildes_varname)) {
+               if ( VG_(clo_verbosity) > 1 ) {
+                  VG_(message)( Vg_DebugMsg,
+                                "vfork kludge: found symbol %s at addr %p\n",
+                                *names, (void*) sym_avmas.main);
+               }
+               VG_(vfork_fildes_addr) = (Int*) sym_avmas.main;
+               vg_vfork_fildes_var_search = False;
+            }
+#endif
             continue;
          }
          if (!ok) {
@@ -617,6 +639,15 @@
       VG_(message)(Vg_DebugMsg,
                    "=> pthread stack cache cannot be disabled!\n");
    }
+#if defined(VGO_solaris)
+   if (vg_vfork_fildes_var_search) {
+      VG_(message)(Vg_DebugMsg,
+                   "WARNING: could not find symbol for var %s in %s\n",
+                   vg_vfork_fildes_varname, vg_preload_core_soname);
+      VG_(message)(Vg_DebugMsg,
+                   "=> posix_spawn() will not work correctly!\n");
+   }
+#endif
 
    if (check_ppcTOCs) {
       for (i = 0; i < nsyms; i++) {
@@ -1500,6 +1531,40 @@
       );
    }
 
+#  elif defined(VGP_x86_solaris)
+   /* If we're using memcheck, use these intercepts right from
+      the start, otherwise ld.so makes a lot of noise. */
+   if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
+      add_hardwired_spec("/lib/ld.so.1", "strcmp",
+                         (Addr)&VG_(x86_solaris_REDIR_FOR_strcmp), NULL);
+   }
+   if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
+      add_hardwired_spec("/lib/ld.so.1", "strlen",
+                         (Addr)&VG_(x86_solaris_REDIR_FOR_strlen), NULL);
+   }
+
+#  elif defined(VGP_amd64_solaris)
+   if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
+      add_hardwired_spec("/lib/amd64/ld.so.1", "strcpy",
+                         (Addr)&VG_(amd64_solaris_REDIR_FOR_strcpy), NULL);
+   }
+   if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
+      add_hardwired_spec("/lib/amd64/ld.so.1", "strncpy",
+                         (Addr)&VG_(amd64_solaris_REDIR_FOR_strncpy), NULL);
+   }
+   if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
+      add_hardwired_spec("/lib/amd64/ld.so.1", "strcmp",
+                         (Addr)&VG_(amd64_solaris_REDIR_FOR_strcmp), NULL);
+   }
+   if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
+      add_hardwired_spec("/lib/amd64/ld.so.1", "strcat",
+                         (Addr)&VG_(amd64_solaris_REDIR_FOR_strcat), NULL);
+   }
+   if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
+      add_hardwired_spec("/lib/amd64/ld.so.1", "strlen",
+                         (Addr)&VG_(amd64_solaris_REDIR_FOR_strlen), NULL);
+   }
+
 #  else
 #    error Unknown platform
 #  endif
diff --git a/coregrind/m_replacemalloc/replacemalloc_core.c b/coregrind/m_replacemalloc/replacemalloc_core.c
index 9bf40db..c31add0 100644
--- a/coregrind/m_replacemalloc/replacemalloc_core.c
+++ b/coregrind/m_replacemalloc/replacemalloc_core.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_replacemalloc/vg_replace_malloc.c b/coregrind/m_replacemalloc/vg_replace_malloc.c
index 060cb15..ccac130 100644
--- a/coregrind/m_replacemalloc/vg_replace_malloc.c
+++ b/coregrind/m_replacemalloc/vg_replace_malloc.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -305,6 +305,12 @@
  ZONEALLOC_or_NULL(VG_Z_LIBC_SONAME,  malloc_zone_malloc, malloc);
  ZONEALLOC_or_NULL(SO_SYN_MALLOC,     malloc_zone_malloc, malloc);
 
+#elif defined(VGO_solaris)
+ ALLOC_or_NULL(VG_Z_LIBSTDCXX_SONAME, malloc,      malloc);
+ ALLOC_or_NULL(VG_Z_LIBC_SONAME,      malloc,      malloc);
+ ALLOC_or_NULL(VG_Z_LIBUMEM_SO_1,     malloc,      malloc);
+ ALLOC_or_NULL(SO_SYN_MALLOC,         malloc,      malloc);
+
 #endif
 
 
@@ -341,6 +347,18 @@
   //ALLOC_or_BOMB(VG_Z_LIBC_SONAME,      _Znwm,          __builtin_new);
  #endif
 
+#elif defined(VGO_solaris)
+ // operator new(unsigned int), GNU mangling
+ #if VG_WORDSIZE == 4
+  ALLOC_or_BOMB(VG_Z_LIBSTDCXX_SONAME, _Znwj,          __builtin_new);
+  ALLOC_or_BOMB(SO_SYN_MALLOC,         _Znwj,          __builtin_new);
+ #endif
+ // operator new(unsigned long), GNU mangling
+ #if VG_WORDSIZE == 8
+  ALLOC_or_BOMB(VG_Z_LIBSTDCXX_SONAME, _Znwm,          __builtin_new);
+  ALLOC_or_BOMB(SO_SYN_MALLOC,         _Znwm,          __builtin_new);
+ #endif
+
 #endif
 
 
@@ -372,6 +390,18 @@
   //ALLOC_or_NULL(VG_Z_LIBC_SONAME,      _ZnwmRKSt9nothrow_t,  __builtin_new);
  #endif
 
+#elif defined(VGO_solaris)
+ // operator new(unsigned, std::nothrow_t const&), GNU mangling
+ #if VG_WORDSIZE == 4
+  ALLOC_or_NULL(VG_Z_LIBSTDCXX_SONAME, _ZnwjRKSt9nothrow_t,  __builtin_new);
+  ALLOC_or_NULL(SO_SYN_MALLOC,         _ZnwjRKSt9nothrow_t,  __builtin_new);
+ #endif
+ // operator new(unsigned long, std::nothrow_t const&), GNU mangling
+ #if VG_WORDSIZE == 8
+  ALLOC_or_NULL(VG_Z_LIBSTDCXX_SONAME, _ZnwmRKSt9nothrow_t,  __builtin_new);
+  ALLOC_or_NULL(SO_SYN_MALLOC,         _ZnwmRKSt9nothrow_t,  __builtin_new);
+ #endif
+
 #endif
 
 
@@ -406,6 +436,18 @@
   //ALLOC_or_BOMB(VG_Z_LIBC_SONAME,      _Znam,             __builtin_vec_new );
  #endif
 
+#elif defined(VGO_solaris)
+ // operator new[](unsigned int), GNU mangling
+ #if VG_WORDSIZE == 4
+  ALLOC_or_BOMB(VG_Z_LIBSTDCXX_SONAME, _Znaj,             __builtin_vec_new );
+  ALLOC_or_BOMB(SO_SYN_MALLOC,         _Znaj,             __builtin_vec_new );
+ #endif
+ // operator new[](unsigned long), GNU mangling
+ #if VG_WORDSIZE == 8
+  ALLOC_or_BOMB(VG_Z_LIBSTDCXX_SONAME, _Znam,             __builtin_vec_new );
+  ALLOC_or_BOMB(SO_SYN_MALLOC,         _Znam,             __builtin_vec_new );
+ #endif
+
 #endif
 
 
@@ -437,6 +479,18 @@
   //ALLOC_or_NULL(VG_Z_LIBC_SONAME,      _ZnamRKSt9nothrow_t, __builtin_vec_new );
  #endif
 
+#elif defined(VGO_solaris)
+ // operator new[](unsigned, std::nothrow_t const&), GNU mangling
+ #if VG_WORDSIZE == 4
+  ALLOC_or_NULL(VG_Z_LIBSTDCXX_SONAME, _ZnajRKSt9nothrow_t, __builtin_vec_new );
+  ALLOC_or_NULL(SO_SYN_MALLOC,         _ZnajRKSt9nothrow_t, __builtin_vec_new );
+ #endif
+ // operator new[](unsigned long, std::nothrow_t const&), GNU mangling
+ #if VG_WORDSIZE == 8
+  ALLOC_or_NULL(VG_Z_LIBSTDCXX_SONAME, _ZnamRKSt9nothrow_t, __builtin_vec_new );
+  ALLOC_or_NULL(SO_SYN_MALLOC,         _ZnamRKSt9nothrow_t, __builtin_vec_new );
+ #endif
+
 #endif
 
 
@@ -482,6 +536,11 @@
  ZONEFREE(VG_Z_LIBC_SONAME,   malloc_zone_free,     free );
  ZONEFREE(SO_SYN_MALLOC,      malloc_zone_free,     free );
 
+#elif defined(VGO_solaris)
+ FREE(VG_Z_LIBC_SONAME,       free,                 free );
+ FREE(VG_Z_LIBUMEM_SO_1,      free,                 free );
+ FREE(SO_SYN_MALLOC,          free,                 free );
+
 #endif
 
 
@@ -497,6 +556,12 @@
  //FREE(VG_Z_LIBSTDCXX_SONAME,  cfree,                free );
  //FREE(VG_Z_LIBC_SONAME,       cfree,                free );
 
+#elif defined(VGO_solaris)
+ FREE(VG_Z_LIBC_SONAME,       cfree,                free );
+ /* libumem does not implement cfree(). */
+ //FREE(VG_Z_LIBUMEM_SO_1,      cfree,                free );
+ FREE(SO_SYN_MALLOC,          cfree,                free );
+
 #endif
 
 
@@ -516,6 +581,11 @@
  //FREE(VG_Z_LIBSTDCXX_SONAME,  _ZdlPv,               __builtin_delete );
  //FREE(VG_Z_LIBC_SONAME,       _ZdlPv,               __builtin_delete );
 
+#elif defined(VGO_solaris)
+ // operator delete(void*), GNU mangling
+ FREE(VG_Z_LIBSTDCXX_SONAME,  _ZdlPv,               __builtin_delete );
+ FREE(SO_SYN_MALLOC,          _ZdlPv,               __builtin_delete );
+
 #endif
 
 
@@ -532,6 +602,11 @@
  //FREE(VG_Z_LIBSTDCXX_SONAME, _ZdlPvRKSt9nothrow_t,  __builtin_delete );
  //FREE(VG_Z_LIBC_SONAME,      _ZdlPvRKSt9nothrow_t,  __builtin_delete );
 
+#elif defined(VGO_solaris)
+ // operator delete(void*, std::nothrow_t const&), GNU mangling
+ FREE(VG_Z_LIBSTDCXX_SONAME, _ZdlPvRKSt9nothrow_t,  __builtin_delete );
+ FREE(SO_SYN_MALLOC,         _ZdlPvRKSt9nothrow_t,  __builtin_delete );
+
 #endif
 
 
@@ -554,6 +629,11 @@
  //FREE(VG_Z_LIBSTDCXX_SONAME,  _ZdaPv,               __builtin_vec_delete );
  //FREE(VG_Z_LIBC_SONAME,       _ZdaPv,               __builtin_vec_delete );
 
+#elif defined(VGO_solaris)
+ // operator delete[](void*), GNU mangling
+ FREE(VG_Z_LIBSTDCXX_SONAME,  _ZdaPv,               __builtin_vec_delete );
+ FREE(SO_SYN_MALLOC,          _ZdaPv,               __builtin_vec_delete );
+
 #endif
 
 
@@ -570,6 +650,11 @@
  //FREE(VG_Z_LIBSTDCXX_SONAME,  _ZdaPvRKSt9nothrow_t, __builtin_vec_delete );
  //FREE(VG_Z_LIBC_SONAME,       _ZdaPvRKSt9nothrow_t, __builtin_vec_delete );
 
+#elif defined(VGO_solaris)
+ // operator delete[](void*, std::nothrow_t const&), GNU mangling
+ FREE(VG_Z_LIBSTDCXX_SONAME,  _ZdaPvRKSt9nothrow_t, __builtin_vec_delete );
+ FREE(SO_SYN_MALLOC,          _ZdaPvRKSt9nothrow_t, __builtin_vec_delete );
+
 #endif
 
 
@@ -632,6 +717,11 @@
  ZONECALLOC(VG_Z_LIBC_SONAME, malloc_zone_calloc);
  ZONECALLOC(SO_SYN_MALLOC,    malloc_zone_calloc);
 
+#elif defined(VGO_solaris)
+ CALLOC(VG_Z_LIBC_SONAME,      calloc);
+ CALLOC(VG_Z_LIBUMEM_SO_1,     calloc);
+ CALLOC(SO_SYN_MALLOC,         calloc);
+
 #endif
 
 
@@ -701,6 +791,11 @@
  ZONEREALLOC(VG_Z_LIBC_SONAME, malloc_zone_realloc);
  ZONEREALLOC(SO_SYN_MALLOC,    malloc_zone_realloc);
 
+#elif defined(VGO_solaris)
+ REALLOC(VG_Z_LIBC_SONAME,      realloc);
+ REALLOC(VG_Z_LIBUMEM_SO_1,     realloc);
+ REALLOC(SO_SYN_MALLOC,         realloc);
+
 #endif
 
 
@@ -769,6 +864,11 @@
  ZONEMEMALIGN(VG_Z_LIBC_SONAME, malloc_zone_memalign);
  ZONEMEMALIGN(SO_SYN_MALLOC,    malloc_zone_memalign);
 
+#elif defined(VGO_solaris)
+ MEMALIGN(VG_Z_LIBC_SONAME,      memalign);
+ MEMALIGN(VG_Z_LIBUMEM_SO_1,     memalign);
+ MEMALIGN(SO_SYN_MALLOC,         memalign);
+
 #endif
 
 
@@ -811,6 +911,11 @@
  ZONEVALLOC(VG_Z_LIBC_SONAME, malloc_zone_valloc);
  ZONEVALLOC(SO_SYN_MALLOC,    malloc_zone_valloc);
 
+#elif defined(VGO_solaris)
+ VALLOC(VG_Z_LIBC_SONAME,      valloc);
+ VALLOC(VG_Z_LIBUMEM_SO_1,     valloc);
+ VALLOC(SO_SYN_MALLOC,         valloc);
+
 #endif
 
 
@@ -919,6 +1024,10 @@
 #elif defined(VGO_darwin)
  //POSIX_MEMALIGN(VG_Z_LIBC_SONAME, posix_memalign);
 
+#elif defined(VGO_solaris)
+ POSIX_MEMALIGN(VG_Z_LIBC_SONAME, posix_memalign);
+ POSIX_MEMALIGN(SO_SYN_MALLOC,    posix_memalign);
+
 #endif
 
 
@@ -965,11 +1074,11 @@
 
 /* Bomb out if we get any of these. */
 
+static void panic(const char *str) __attribute__((unused));
 static void panic(const char *str)
 {
    VALGRIND_PRINTF_BACKTRACE("Program aborting because of call to %s\n", str);
-   my_exit(99);
-   *(volatile int *)0 = 'x';
+   my_exit(1);
 }
 
 #define PANIC(soname, fnname) \
@@ -1055,7 +1164,7 @@
 }
 
 /* Note that the (void*) casts below are a kludge which stops
-   compilers complaining about the fact that the the replacement
+   compilers complaining about the fact that the replacement
    functions aren't really of the right type. */
 static vki_malloc_zone_t vg_default_zone = {
     NULL, // reserved1
@@ -1072,7 +1181,7 @@
     NULL, // batch_free
     NULL, // GrP fixme: introspect
     2,  // version (GrP fixme 3?)
-    NULL, /* memalign */   // DDD: this field exists in Mac OS 10.6, but not 10.5.
+    (void*)VG_REPLACE_FUNCTION_EZU(10100,VG_Z_LIBC_SONAME,malloc_zone_memalign), // DDD: this field exists in Mac OS 10.6+
     NULL, /* free_definite_size */
     NULL, /* pressure_relief */
 };
@@ -1167,15 +1276,15 @@
 
 #define ZONE_GET_NAME(soname, fnname) \
    \
-   char* VG_REPLACE_FUNCTION_EZU(10280,soname,fnname)(void* zone); \
-   char* VG_REPLACE_FUNCTION_EZU(10280,soname,fnname)(void* zone)  \
+   const char* VG_REPLACE_FUNCTION_EZU(10280,soname,fnname)(void* zone); \
+   const char* VG_REPLACE_FUNCTION_EZU(10280,soname,fnname)(void* zone)  \
    { \
       TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(zone); \
       return vg_default_zone.zone_name; \
    }
 
-ZONE_SET_NAME(VG_Z_LIBC_SONAME, malloc_get_zone_name);
-ZONE_SET_NAME(SO_SYN_MALLOC,    malloc_get_zone_name);
+ZONE_GET_NAME(VG_Z_LIBC_SONAME, malloc_get_zone_name);
+ZONE_GET_NAME(SO_SYN_MALLOC,    malloc_get_zone_name);
 
 #endif /* defined(VGO_darwin) */
 
diff --git a/coregrind/m_sbprofile.c b/coregrind/m_sbprofile.c
index f64260f..25683f6 100644
--- a/coregrind/m_sbprofile.c
+++ b/coregrind/m_sbprofile.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2012-2013 Mozilla Foundation
+   Copyright (C) 2012-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -72,7 +72,7 @@
    VG_(printf)("<<<\n");
    VG_(printf)("\n");
 
-   VG_(printf)("Total score = %'lld\n\n", score_total);
+   VG_(printf)("Total score = %'llu\n\n", score_total);
 
    /* Print an initial per-block summary. */
    VG_(printf)("rank  ---cumulative---      -----self-----\n");
@@ -96,7 +96,7 @@
       Double percent_here =
          score_total == 0 ? 100.0 : score_here * 100.0 / score_total;
         
-      VG_(printf)("%3d: (%9lld %5.2f%%)   %9lld %5.2f%%      0x%lx %s\n",
+      VG_(printf)("%3d: (%9llu %5.2f%%)   %9llu %5.2f%%      0x%lx %s\n",
                   r,
                   score_cumul, percent_cumul,
                   score_here,  percent_here, tops[r].addr, name);
@@ -138,7 +138,7 @@
          VG_(printf)("\n");
          VG_(printf)("=-=-=-=-=-=-=-=-=-=-=-=-=-= begin SB rank %d "
                      "=-=-=-=-=-=-=-=-=-=-=-=-=-=\n\n", r);
-         VG_(printf)("%3d: (%9lld %5.2f%%)   %9lld %5.2f%%      0x%lx %s\n",
+         VG_(printf)("%3d: (%9llu %5.2f%%)   %9llu %5.2f%%      0x%lx %s\n",
                      r,
                      score_cumul, percent_cumul,
                      score_here,  percent_here, tops[r].addr, name );
@@ -170,7 +170,7 @@
          Double percent_here =
            score_total == 0 ? 100.0 : score_here * 100.0 / score_total;
 
-         VG_(printf)("%3d: (%9lld %5.2f%%)   %9lld %5.2f%%      0x%lx %s\n",
+         VG_(printf)("%3d: (%9llu %5.2f%%)   %9llu %5.2f%%      0x%lx %s\n",
                      r,
                      score_cumul, percent_cumul,
                      score_here,  percent_here, tops[r].addr, name );
diff --git a/coregrind/m_scheduler/priv_sched-lock-impl.h b/coregrind/m_scheduler/priv_sched-lock-impl.h
index 58e2ea3..ae291b1 100644
--- a/coregrind/m_scheduler/priv_sched-lock-impl.h
+++ b/coregrind/m_scheduler/priv_sched-lock-impl.h
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Bart Van Assche <bvanassche@acm.org>.
+   Copyright (C) 2011-2015 Bart Van Assche <bvanassche@acm.org>.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/m_scheduler/priv_sched-lock.h b/coregrind/m_scheduler/priv_sched-lock.h
index 9a951ca..aa2b78c 100644
--- a/coregrind/m_scheduler/priv_sched-lock.h
+++ b/coregrind/m_scheduler/priv_sched-lock.h
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Bart Van Assche <bvanassche@acm.org>.
+   Copyright (C) 2011-2015 Bart Van Assche <bvanassche@acm.org>.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/m_scheduler/priv_sema.h b/coregrind/m_scheduler/priv_sema.h
index bef7b4f..49ea813 100644
--- a/coregrind/m_scheduler/priv_sema.h
+++ b/coregrind/m_scheduler/priv_sema.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_scheduler/sched-lock-generic.c b/coregrind/m_scheduler/sched-lock-generic.c
index 939bc4f..e9de6f9 100644
--- a/coregrind/m_scheduler/sched-lock-generic.c
+++ b/coregrind/m_scheduler/sched-lock-generic.c
@@ -11,7 +11,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Bart Van Assche <bvanassche@acm.org>.
+   Copyright (C) 2011-2015 Bart Van Assche <bvanassche@acm.org>.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/m_scheduler/sched-lock.c b/coregrind/m_scheduler/sched-lock.c
index dd25321..0afdae0 100644
--- a/coregrind/m_scheduler/sched-lock.c
+++ b/coregrind/m_scheduler/sched-lock.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Bart Van Assche <bvanassche@acm.org>.
+   Copyright (C) 2011-2015 Bart Van Assche <bvanassche@acm.org>.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/m_scheduler/scheduler.c b/coregrind/m_scheduler/scheduler.c
index 80fdf6a..1234d56 100644
--- a/coregrind/m_scheduler/scheduler.c
+++ b/coregrind/m_scheduler/scheduler.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -158,7 +158,7 @@
       "scheduler: %'llu/%'llu major/minor sched events.\n",
       n_scheduling_events_MAJOR, n_scheduling_events_MINOR);
    VG_(message)(Vg_DebugMsg, 
-                "   sanity: %d cheap, %d expensive checks.\n",
+                "   sanity: %u cheap, %u expensive checks.\n",
                 sanity_fast_count, sanity_slow_count );
 }
 
@@ -175,7 +175,7 @@
 static
 void print_sched_event ( ThreadId tid, const HChar* what )
 {
-   VG_(message)(Vg_DebugMsg, "  SCHED[%d]: %s\n", tid, what );
+   VG_(message)(Vg_DebugMsg, "  SCHED[%u]: %s\n", tid, what );
 }
 
 /* For showing SB profiles, if the user asks to see them. */
@@ -218,6 +218,8 @@
       case VEX_TRC_JMP_SYS_INT128:     return "INT128";
       case VEX_TRC_JMP_SYS_INT129:     return "INT129";
       case VEX_TRC_JMP_SYS_INT130:     return "INT130";
+      case VEX_TRC_JMP_SYS_INT145:     return "INT145";
+      case VEX_TRC_JMP_SYS_INT210:     return "INT210";
       case VEX_TRC_JMP_SYS_SYSENTER:   return "SYSENTER";
       case VEX_TRC_JMP_BORING:         return "VEX_BORING";
 
@@ -284,7 +286,7 @@
    tst->status = VgTs_Runnable;
 
    if (VG_(running_tid) != VG_INVALID_THREADID)
-      VG_(printf)("tid %d found %d running\n", tid, VG_(running_tid));
+      VG_(printf)("tid %u found %u running\n", tid, VG_(running_tid));
    vg_assert(VG_(running_tid) == VG_INVALID_THREADID);
    VG_(running_tid) = tid;
 
@@ -399,7 +401,7 @@
    if (VG_(threads)[tid].status == VgTs_WaitSys) {
       if (VG_(clo_trace_signals)) {
 	 VG_(message)(Vg_DebugMsg, 
-                      "get_thread_out_of_syscall zaps tid %d lwp %d\n",
+                      "get_thread_out_of_syscall zaps tid %u lwp %d\n",
 		      tid, VG_(threads)[tid].os_state.lwpid);
       }
 #     if defined(VGO_darwin)
@@ -448,7 +450,13 @@
    /* 
       Tell the kernel we're yielding.
     */
+#  if defined(VGO_linux) || defined(VGO_darwin)
    VG_(do_syscall0)(__NR_sched_yield);
+#  elif defined(VGO_solaris)
+   VG_(do_syscall0)(__NR_yield);
+#  else
+#    error Unknown OS
+#  endif
 
    VG_(acquire_BigLock)(tid, "VG_(vg_yield)");
 }
@@ -492,6 +500,17 @@
    tst->os_state.remote_port       = 0;
    tst->os_state.msgh_id           = 0;
    VG_(memset)(&tst->os_state.mach_args, 0, sizeof(tst->os_state.mach_args));
+#  elif defined(VGO_solaris)
+#  if defined(VGP_x86_solaris)
+   tst->os_state.thrptr = 0;
+#  endif
+   tst->os_state.stk_id = (UWord)-1;
+   tst->os_state.ustack = NULL;
+   tst->os_state.in_door_return = False;
+   tst->os_state.door_return_procedure = 0;
+   tst->os_state.oldcontext = NULL;
+   tst->os_state.schedctl_data = 0;
+   tst->os_state.daemon_thread = False;
 #  else
 #    error "Unknown OS"
 #  endif
@@ -645,8 +664,8 @@
                                   Addr     clstack_end, 
                                   SizeT    clstack_size )
 {
-   VG_(debugLog)(1,"sched","sched_init_phase2: tid_main=%d, "
-                   "cls_end=0x%lx, cls_sz=%ld\n",
+   VG_(debugLog)(1,"sched","sched_init_phase2: tid_main=%u, "
+                   "cls_end=0x%lx, cls_sz=%lu\n",
                    tid_main, clstack_end, clstack_size);
 
    vg_assert(VG_IS_PAGE_ALIGNED(clstack_end+1));
@@ -678,7 +697,7 @@
 	 _qq_tst->sched_jmpbuf_valid = True;				\
 	 stmt;								\
       }	else if (VG_(clo_trace_sched))					\
-	 VG_(printf)("SCHEDSETJMP(line %d) tid %d, jumped=%ld\n",       \
+	 VG_(printf)("SCHEDSETJMP(line %d) tid %u, jumped=%lu\n",       \
                      __LINE__, tid, jumped);                            \
       vg_assert(_qq_tst->sched_jmpbuf_valid);				\
       _qq_tst->sched_jmpbuf_valid = False;				\
@@ -704,8 +723,8 @@
    UInt sz_spill  = (UInt) sizeof tst->arch.vex_spill;
 
    if (0)
-   VG_(printf)("gst %p %d, sh1 %p %d, "
-               "sh2 %p %d, spill %p %d\n",
+   VG_(printf)("gst %p %u, sh1 %p %u, "
+               "sh2 %p %u, spill %p %u\n",
                (void*)a_vex, sz_vex,
                (void*)a_vexsh1, sz_vexsh1,
                (void*)a_vexsh2, sz_vexsh2,
@@ -910,7 +929,7 @@
       vki_sigset_t m;
       Int i, err = VG_(sigprocmask)(VKI_SIG_SETMASK, NULL, &m);
       vg_assert(err == 0);
-      VG_(printf)("tid %d: entering code with unblocked signals: ", tid);
+      VG_(printf)("tid %u: entering code with unblocked signals: ", tid);
       for (i = 1; i <= _VKI_NSIG; i++)
          if (!VG_(sigismember)(&m, i))
             VG_(printf)("%d ", i);
@@ -1091,7 +1110,7 @@
 
    if (VG_(clo_sanity_level) >= 3) {
       HChar buf[50];    // large enough
-      VG_(sprintf)(buf, "(BEFORE SYSCALL, tid %d)", tid);
+      VG_(sprintf)(buf, "(BEFORE SYSCALL, tid %u)", tid);
       Bool ok = VG_(am_do_sync_check)(buf, __FILE__, __LINE__);
       vg_assert(ok);
    }
@@ -1100,13 +1119,13 @@
 
    if (VG_(clo_sanity_level) >= 3) {
       HChar buf[50];    // large enough
-      VG_(sprintf)(buf, "(AFTER SYSCALL, tid %d)", tid);
+      VG_(sprintf)(buf, "(AFTER SYSCALL, tid %u)", tid);
       Bool ok = VG_(am_do_sync_check)(buf, __FILE__, __LINE__);
       vg_assert(ok);
    }
 
    if (!VG_(is_running_thread)(tid))
-      VG_(printf)("tid %d not running; VG_(running_tid)=%d, tid %d status %d\n",
+      VG_(printf)("tid %u not running; VG_(running_tid)=%u, tid %u status %u\n",
 		  tid, VG_(running_tid), tid, tst->status);
    vg_assert(VG_(is_running_thread)(tid));
    
@@ -1310,7 +1329,7 @@
       n_scheduling_events_MINOR++;
 
       if (0)
-         VG_(message)(Vg_DebugMsg, "thread %d: running for %d bbs\n", 
+         VG_(message)(Vg_DebugMsg, "thread %u: running for %d bbs\n", 
                                    tid, dispatch_ctr - 1 );
 
       HWord trc[2]; /* "two_words" */
@@ -1409,7 +1428,10 @@
       case VEX_TRC_JMP_SYS_INT128:  /* x86-linux */
       case VEX_TRC_JMP_SYS_INT129:  /* x86-darwin */
       case VEX_TRC_JMP_SYS_INT130:  /* x86-darwin */
-      case VEX_TRC_JMP_SYS_SYSCALL: /* amd64-linux, ppc32-linux, amd64-darwin */
+      case VEX_TRC_JMP_SYS_INT145:  /* x86-solaris */
+      case VEX_TRC_JMP_SYS_INT210:  /* x86-solaris */
+      /* amd64-linux, ppc32-linux, amd64-darwin, amd64-solaris */
+      case VEX_TRC_JMP_SYS_SYSCALL:
 	 handle_syscall(tid, trc[0]);
 	 if (VG_(clo_sanity_level) > 2)
 	    VG_(sanity_check_general)(True); /* sanity-check every syscall */
@@ -1599,7 +1621,7 @@
 #        if defined(VGP_x86_linux)
          vg_assert2(0, "VG_(scheduler), phase 3: "
                        "sysenter_x86 on x86-linux is not supported");
-#        elif defined(VGP_x86_darwin)
+#        elif defined(VGP_x86_darwin) || defined(VGP_x86_solaris)
          /* return address in client edx */
          VG_(threads)[tid].arch.vex.guest_EIP
             = VG_(threads)[tid].arch.vex.guest_EDX;
@@ -1648,7 +1670,7 @@
          continue;
       if (0)
          VG_(printf)(
-            "VG_(nuke_all_threads_except): nuking tid %d\n", tid);
+            "VG_(nuke_all_threads_except): nuking tid %u\n", tid);
 
       VG_(threads)[tid].exitreason = src;
       if (src == VgSrc_FatalSig)
@@ -1791,7 +1813,10 @@
       *q = '\0';
 
       VG_(printf_xml)( "<clientmsg>\n" );
-      VG_(printf_xml)( "  <tid>%d</tid>\n", tid );
+      VG_(printf_xml)( "  <tid>%u</tid>\n", tid );
+      const ThreadState *tst = VG_(get_ThreadState)(tid);
+      if (tst->thread_name)
+         VG_(printf_xml)("  <threadname>%s</threadname>\n", tst->thread_name);
       VG_(printf_xml)( "  <text>" );
       count = VG_(vprintf_xml)( xml_format, *vargsp );
       VG_(printf_xml)( "  </text>\n" );
@@ -1821,7 +1846,7 @@
    UWord req_no = arg[0];
 
    if (0)
-      VG_(printf)("req no = 0x%llx, arg = %p\n", (ULong)req_no, arg);
+      VG_(printf)("req no = 0x%lx, arg = %p\n", req_no, arg);
    switch (req_no) {
 
       case VG_USERREQ__CLIENT_CALL0: {
@@ -2136,22 +2161,22 @@
 
    if (!VG_(is_running_thread)(tid)) {
       VG_(message)(Vg_DebugMsg,
-		   "Thread %d is supposed to be running, "
-                   "but doesn't own the_BigLock (owned by %d)\n", 
+		   "Thread %u is supposed to be running, "
+                   "but doesn't own the_BigLock (owned by %u)\n", 
 		   tid, VG_(running_tid));
       bad = True;
    }
 
    if (lwpid != VG_(threads)[tid].os_state.lwpid) {
       VG_(message)(Vg_DebugMsg,
-                   "Thread %d supposed to be in LWP %d, but we're actually %d\n",
+                   "Thread %u supposed to be in LWP %d, but we're actually %d\n",
                    tid, VG_(threads)[tid].os_state.lwpid, VG_(gettid)());
       bad = True;
    }
 
    if (lwpid != ML_(get_sched_lock_owner)(the_BigLock)) {
       VG_(message)(Vg_DebugMsg,
-                   "Thread (LWPID) %d doesn't own the_BigLock\n",
+                   "Thread (LWPID) %u doesn't own the_BigLock\n",
                    tid);
       bad = True;
    }
@@ -2209,7 +2234,7 @@
         || (VG_(clo_sanity_level) == 1 
             && sanity_fast_count == next_slow_check_at)) {
 
-      if (0) VG_(printf)("SLOW at %d\n", sanity_fast_count-1);
+      if (0) VG_(printf)("SLOW at %u\n", sanity_fast_count-1);
 
       next_slow_check_at = sanity_fast_count - 1 + slow_check_interval;
       slow_check_interval++;
@@ -2237,7 +2262,7 @@
             = VG_(am_get_VgStack_unused_szB)(stack, limit);
 	 if (remains < limit)
 	    VG_(message)(Vg_DebugMsg, 
-                         "WARNING: Thread %d is within %ld bytes "
+                         "WARNING: Thread %u is within %lu bytes "
                          "of running out of valgrind stack!\n"
                          "Valgrind stack size can be increased "
                          "using --valgrind-stacksize=....\n",
diff --git a/coregrind/m_scheduler/sema.c b/coregrind/m_scheduler/sema.c
index 44f27f2..b563768 100644
--- a/coregrind/m_scheduler/sema.c
+++ b/coregrind/m_scheduler/sema.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_scheduler/ticket-lock-linux.c b/coregrind/m_scheduler/ticket-lock-linux.c
index e94a6d4..4590481 100644
--- a/coregrind/m_scheduler/ticket-lock-linux.c
+++ b/coregrind/m_scheduler/ticket-lock-linux.c
@@ -14,7 +14,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Bart Van Assche <bvanassche@acm.org>.
+   Copyright (C) 2011-2015 Bart Van Assche <bvanassche@acm.org>.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -120,7 +120,7 @@
    ticket = __sync_fetch_and_add(&p->tail, 1);
    futex = &p->futex[ticket & TL_FUTEX_MASK];
    if (s_debug)
-      VG_(printf)("[%d/%d] acquire: ticket %d\n", VG_(getpid)(),
+      VG_(printf)("[%d/%d] acquire: ticket %u\n", VG_(getpid)(),
                   VG_(gettid)(), ticket);
    for (;;) {
       futex_value = *futex;
@@ -128,15 +128,15 @@
       if (ticket == p->head)
          break;
       if (s_debug)
-         VG_(printf)("[%d/%d] acquire: ticket %d - waiting until"
-                     " futex[%ld] != %d\n", VG_(getpid)(),
+         VG_(printf)("[%d/%d] acquire: ticket %u - waiting until"
+                     " futex[%ld] != %u\n", VG_(getpid)(),
                      VG_(gettid)(), ticket, (long)(futex - p->futex),
                      futex_value);
       sres = VG_(do_syscall3)(__NR_futex, (UWord)futex,
                               VKI_FUTEX_WAIT | VKI_FUTEX_PRIVATE_FLAG,
                               futex_value);
-      if (sr_isError(sres) && sres._val != VKI_EAGAIN) {
-         VG_(printf)("futex_wait() returned error code %ld\n", sres._val);
+      if (sr_isError(sres) && sr_Err(sres) != VKI_EAGAIN) {
+         VG_(printf)("futex_wait() returned error code %lu\n", sr_Err(sres));
          vg_assert(False);
       }
    }
@@ -169,7 +169,7 @@
       futex = &p->futex[wakeup_ticket & TL_FUTEX_MASK];
       futex_value = __sync_fetch_and_add(futex, 1);
       if (s_debug)
-         VG_(printf)("[%d/%d] release: waking up ticket %d (futex[%ld] = %d)"
+         VG_(printf)("[%d/%d] release: waking up ticket %u (futex[%ld] = %u)"
                      "\n", VG_(getpid)(), VG_(gettid)(), wakeup_ticket,
                      (long)(futex - p->futex), futex_value);
       sres = VG_(do_syscall3)(__NR_futex, (UWord)futex,
@@ -178,7 +178,7 @@
       vg_assert(!sr_isError(sres));
    } else {
       if (s_debug)
-         VG_(printf)("[%d/%d] release: no thread is waiting for ticket %d\n",
+         VG_(printf)("[%d/%d] release: no thread is waiting for ticket %u\n",
                      VG_(getpid)(), VG_(gettid)(), wakeup_ticket);
    }
 }
diff --git a/coregrind/m_seqmatch.c b/coregrind/m_seqmatch.c
index 57ca3b0..668e999 100644
--- a/coregrind/m_seqmatch.c
+++ b/coregrind/m_seqmatch.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_sigframe/sigframe-amd64-darwin.c b/coregrind/m_sigframe/sigframe-amd64-darwin.c
index 20402bf..281d719 100644
--- a/coregrind/m_sigframe/sigframe-amd64-darwin.c
+++ b/coregrind/m_sigframe/sigframe-amd64-darwin.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 OpenWorks Ltd
+   Copyright (C) 2006-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -45,19 +45,15 @@
 #include "pub_core_tooliface.h"
 #include "pub_core_trampoline.h"
 #include "pub_core_sigframe.h"      /* self */
+#include "priv_sigframe.h"
 
 
-/* Cheap-ass hack copied from ppc32-aix5 code, just to get started.
-   Produce a frame with layout entirely of our own choosing. */
+/* Originally copied from ppc32-aix5 code.
+   Produce a frame with layout entirely of our own choosing.
 
-/* This module creates and removes signal frames for signal deliveries
-   on amd64-darwin.  Kludgey; the machine state ought to be saved in a
-   ucontext and retrieved from it later, so the handler can modify it
-   and return.  However .. for now .. just stick the vex guest state
-   in the frame and snarf it again later.
-
-   Also, don't bother with creating siginfo and ucontext in the
-   handler, although do point them somewhere non-faulting.
+   This module creates and removes signal frames for signal deliveries
+   on amd64-darwin.  The machine state is saved in a ucontext and retrieved
+   from it later, so the handler can modify it and return.
 
    Frame should have a 16-aligned size, just in case that turns out to
    be important for Darwin.  (be conservative)
@@ -66,20 +62,82 @@
    /* first word looks like a call to a 3-arg amd64-ELF function */
    ULong               returnAddr;
    UChar               lower_guardzone[512];  // put nothing here
-   VexGuestAMD64State  gst;
-   VexGuestAMD64State  gshadow1;
-   VexGuestAMD64State  gshadow2;
+   VexGuestAMD64State  vex;
+   VexGuestAMD64State  vex_shadow1;
+   VexGuestAMD64State  vex_shadow2;
    vki_siginfo_t       fake_siginfo;
    struct vki_ucontext fake_ucontext;
    UInt                magicPI;
    UInt                sigNo_private;
    vki_sigset_t        mask; // saved sigmask; restore when hdlr returns
-   UInt                __pad[2];
    UChar               upper_guardzone[512]; // put nothing here
    // and don't zero it, since that might overwrite the client's
    // stack redzone, at least on archs which have one
 };
 
+/* Create a plausible-looking sigcontext from the thread's
+   Vex guest state.  NOTE: does not fill in the FP or SSE
+   bits of sigcontext at the moment.
+ */
+static void synthesize_ucontext(ThreadState *tst,
+				struct vki_ucontext *uc,
+				const struct vki_ucontext *siguc)
+{
+   VG_(memset)(uc, 0, sizeof(*uc));
+
+   if (siguc) uc->uc_sigmask = siguc->uc_sigmask;
+   uc->uc_stack = tst->altstack;
+   uc->uc_mcontext = &uc->__mcontext_data;
+
+#  define SC2(reg,REG)  uc->__mcontext_data.__ss.reg = tst->arch.vex.guest_##REG
+   SC2(__r8,R8);
+   SC2(__r9,R9);
+   SC2(__r10,R10);
+   SC2(__r11,R11);
+   SC2(__r12,R12);
+   SC2(__r13,R13);
+   SC2(__r14,R14);
+   SC2(__r15,R15);
+   SC2(__rdi,RDI);
+   SC2(__rsi,RSI);
+   SC2(__rbp,RBP);
+   SC2(__rbx,RBX);
+   SC2(__rdx,RDX);
+   SC2(__rax,RAX);
+   SC2(__rcx,RCX);
+   SC2(__rsp,RSP);
+   SC2(__rip,RIP);
+   uc->__mcontext_data.__ss.__rflags = LibVEX_GuestAMD64_get_rflags(&tst->arch.vex);
+
+   if (siguc)
+      uc->__mcontext_data.__es = siguc->__mcontext_data.__es;
+#  undef SC2
+}
+
+static void restore_from_ucontext(ThreadState *tst,
+				  const struct vki_ucontext *uc)
+{
+#  define SC2(REG,reg)  tst->arch.vex.guest_##REG = uc->__mcontext_data.__ss.reg
+   SC2(R8,__r8);
+   SC2(R9,__r9);
+   SC2(R10,__r10);
+   SC2(R11,__r11);
+   SC2(R12,__r12);
+   SC2(R13,__r13);
+   SC2(R14,__r14);
+   SC2(R15,__r15);
+   SC2(RDI,__rdi);
+   SC2(RSI,__rsi);
+   SC2(RBP,__rbp);
+   SC2(RBX,__rbx);
+   SC2(RDX,__rdx);
+   SC2(RAX,__rax);
+   SC2(RCX,__rcx);
+   SC2(RSP,__rsp);
+   SC2(RIP,__rip);
+   /* There doesn't seem to be an easy way to restore rflags */
+#  undef SC2
+}
 
 /* Create a signal frame for thread 'tid'.  Make a 3-arg frame
    regardless of whether the client originally requested a 1-arg
@@ -87,6 +145,7 @@
    former case, the amd64 calling conventions will simply cause the
    extra 2 args to be ignored (inside the handler).  (We hope!) */
 void VG_(sigframe_create) ( ThreadId tid,
+                            Bool on_altstack,
                             Addr sp_top_of_frame,
                             const vki_siginfo_t *siginfo,
                             const struct vki_ucontext *siguc,
@@ -115,26 +174,25 @@
 
    frame = (struct hacky_sigframe *) rsp;
 
-   /* clear it (very conservatively) (why so conservatively??) */
+   /* clear it (very conservatively) */
    VG_(memset)(&frame->lower_guardzone, 0, sizeof frame->lower_guardzone);
-   VG_(memset)(&frame->gst,      0, sizeof(VexGuestAMD64State));
-   VG_(memset)(&frame->gshadow1, 0, sizeof(VexGuestAMD64State));
-   VG_(memset)(&frame->gshadow2, 0, sizeof(VexGuestAMD64State));
+   VG_(memset)(&frame->vex,      0, sizeof(VexGuestAMD64State));
+   VG_(memset)(&frame->vex_shadow1, 0, sizeof(VexGuestAMD64State));
+   VG_(memset)(&frame->vex_shadow2, 0, sizeof(VexGuestAMD64State));
    VG_(memset)(&frame->fake_siginfo,  0, sizeof(frame->fake_siginfo));
    VG_(memset)(&frame->fake_ucontext, 0, sizeof(frame->fake_ucontext));
 
    /* save stuff in frame */
-   frame->gst           = tst->arch.vex;
-   frame->gshadow1      = tst->arch.vex_shadow1;
-   frame->gshadow2      = tst->arch.vex_shadow2;
+   frame->vex           = tst->arch.vex;
+   frame->vex_shadow1   = tst->arch.vex_shadow1;
+   frame->vex_shadow2   = tst->arch.vex_shadow2;
    frame->sigNo_private = sigNo;
    frame->mask          = tst->sig_mask;
    frame->magicPI       = 0x31415927;
 
-   /* Minimally fill in the siginfo and ucontext.  Note, utter
-      lameness prevails.  Be underwhelmed, be very underwhelmed. */
-   frame->fake_siginfo.si_signo = sigNo;
-   frame->fake_siginfo.si_code  = siginfo->si_code;
+   /* Fill in the siginfo and ucontext.  */
+   synthesize_ucontext(tst, &frame->fake_ucontext, siguc);
+   frame->fake_siginfo = *siginfo;
 
    /* Set up stack pointer */
    vg_assert(rsp == (Addr)&frame->returnAddr);
@@ -152,8 +210,8 @@
 
    /* XXX should tell the tool that these regs got written */
    tst->arch.vex.guest_RDI = (ULong) sigNo;
-   tst->arch.vex.guest_RSI = (Addr)  &frame->fake_siginfo;/* oh well */
-   tst->arch.vex.guest_RDX = (Addr)  &frame->fake_ucontext; /* oh well */
+   tst->arch.vex.guest_RSI = (Addr)  &frame->fake_siginfo;
+   tst->arch.vex.guest_RDX = (Addr)  &frame->fake_ucontext;
 
    VG_TRACK( post_mem_write, Vg_CoreSignal, tid,
              (Addr)frame, 1*sizeof(ULong) );
@@ -164,8 +222,8 @@
 
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
-                   "sigframe_create (thread %d): "
-                   "next EIP=%#lx, next ESP=%#lx\n",
+                   "sigframe_create (thread %u): "
+                   "next RIP=%#lx, next RSP=%#lx\n",
                    tid, (Addr)handler, (Addr)frame );
 }
 
@@ -195,15 +253,15 @@
       in VG_(sigframe_create) just above. */
    vg_assert(VG_IS_16_ALIGNED((Addr)frame + 8));
 
-   /* restore the entire guest state, and shadows, from the
-      frame.  Note, as per comments above, this is a kludge - should
-      restore it from saved ucontext.  Oh well. */
-   tst->arch.vex = frame->gst;
-   tst->arch.vex_shadow1 = frame->gshadow1;
-   tst->arch.vex_shadow2 = frame->gshadow2;
-   tst->sig_mask = frame->mask;
-   tst->tmp_sig_mask = frame->mask;
-   sigNo = frame->sigNo_private;
+   /* restore the entire guest state, and shadows, from the frame. */
+   tst->arch.vex            = frame->vex;
+   tst->arch.vex_shadow1    = frame->vex_shadow1;
+   tst->arch.vex_shadow2    = frame->vex_shadow2;
+   restore_from_ucontext(tst, &frame->fake_ucontext);
+
+   tst->sig_mask            = frame->mask;
+   tst->tmp_sig_mask        = frame->mask;
+   sigNo                    = frame->sigNo_private;
 
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
diff --git a/coregrind/m_sigframe/sigframe-amd64-linux.c b/coregrind/m_sigframe/sigframe-amd64-linux.c
index 0c1c7b4..fa34624 100644
--- a/coregrind/m_sigframe/sigframe-amd64-linux.c
+++ b/coregrind/m_sigframe/sigframe-amd64-linux.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -451,6 +451,7 @@
 
 
 void VG_(sigframe_create)( ThreadId tid, 
+                            Bool on_altstack,
                             Addr rsp_top_of_frame,
                             const vki_siginfo_t *siginfo,
                             const struct vki_ucontext *siguc,
@@ -493,7 +494,7 @@
    if (0)
       VG_(printf)("pushed signal frame; %%RSP now = %#lx, "
                   "next %%RIP = %#llx, status=%d\n",
-		  rsp, tst->arch.vex.guest_RIP, tst->status);
+		  rsp, tst->arch.vex.guest_RIP, (Int)tst->status);
 }
 
 
@@ -509,7 +510,7 @@
 {
    if (frame->magicPI != 0x31415927 ||
        frame->magicE  != 0x27182818) {
-      VG_(message)(Vg_UserMsg, "Thread %d return signal frame "
+      VG_(message)(Vg_UserMsg, "Thread %u return signal frame "
                                "corrupted.  Killing process.\n",
 		   tst->tid);
       VG_(set_default_handler)(VKI_SIGSEGV);
@@ -593,7 +594,7 @@
    if (VG_(clo_trace_signals))
       VG_(message)(
          Vg_DebugMsg, 
-         "VG_(signal_return) (thread %d): isRT=%d valid magic; RIP=%#llx\n",
+         "VG_(signal_return) (thread %u): isRT=%d valid magic; RIP=%#llx\n",
          tid, isRT, tst->arch.vex.guest_RIP);
 
    /* tell the tools */
diff --git a/coregrind/m_sigframe/sigframe-arm-linux.c b/coregrind/m_sigframe/sigframe-arm-linux.c
index b374257..185367c 100644
--- a/coregrind/m_sigframe/sigframe-arm-linux.c
+++ b/coregrind/m_sigframe/sigframe-arm-linux.c
@@ -8,11 +8,11 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2004-2013 Paul Mackerras
+   Copyright (C) 2004-2015 Paul Mackerras
       paulus@samba.org
-   Copyright (C) 2008-2013 Evan Geller
+   Copyright (C) 2008-2015 Evan Geller
       gaze@bea.ms
 
    This program is free software; you can redistribute it and/or
@@ -161,6 +161,7 @@
 
 /* EXPORTED */
 void VG_(sigframe_create)( ThreadId tid, 
+                           Bool on_altstack,
                            Addr sp_top_of_frame,
                            const vki_siginfo_t *siginfo,
                            const struct vki_ucontext *siguc,
@@ -231,7 +232,7 @@
 
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
-                   "VG_(sigframe_create): continuing in handler with PC=%#x\n",
+                   "VG_(sigframe_create): continuing in handler with PC=%#lx\n",
                    (Addr)handler);
 }
 
@@ -247,7 +248,6 @@
    struct vg_sig_private *priv;
    Addr sp;
    UInt frame_size;
-   struct vki_sigcontext *mc;
    Int sigNo;
    Bool has_siginfo = isRT;
 
@@ -258,14 +258,12 @@
    if (has_siginfo) {
       struct rt_sigframe *frame = (struct rt_sigframe *)sp;
       frame_size = sizeof(*frame);
-      mc = &frame->sig.uc.uc_mcontext;
       priv = &frame->sig.vp;
       vg_assert(priv->magicPI == 0x31415927);
       tst->sig_mask = frame->sig.uc.uc_sigmask;
    } else {
       struct sigframe *frame = (struct sigframe *)sp;
       frame_size = sizeof(*frame);
-      mc = &frame->uc.uc_mcontext;
       priv = &frame->vp;
       vg_assert(priv->magicPI == 0x31415927);
       tst->sig_mask = frame->uc.uc_sigmask;
@@ -278,25 +276,25 @@
 
    sigNo = priv->sigNo_private;
 
-    //XXX: restore regs
-#  define REST(reg,REG)  tst->arch.vex.guest_##REG = mc->arm_##reg;
-   REST(r0,R0);
-   REST(r1,R1);
-   REST(r2,R2);
-   REST(r3,R3);
-   REST(r4,R4);
-   REST(r5,R5);
-   REST(r6,R6);
-   REST(r7,R7);
-   REST(r8,R8);
-   REST(r9,R9);
-   REST(r10,R10);
-   REST(fp,R11);
-   REST(ip,R12);
-   REST(sp,R13);
-   REST(lr,R14);
-   REST(pc,R15T);
-#  undef REST
+//ZZ     //XXX: restore regs
+//ZZ #  define REST(reg,REG)  tst->arch.vex.guest_##REG = mc->arm_##reg;
+//ZZ    REST(r0,R0);
+//ZZ    REST(r1,R1);
+//ZZ    REST(r2,R2);
+//ZZ    REST(r3,R3);
+//ZZ    REST(r4,R4);
+//ZZ    REST(r5,R5);
+//ZZ    REST(r6,R6);
+//ZZ    REST(r7,R7);
+//ZZ    REST(r8,R8);
+//ZZ    REST(r9,R9);
+//ZZ    REST(r10,R10);
+//ZZ    REST(fp,R11);
+//ZZ    REST(ip,R12);
+//ZZ    REST(sp,R13);
+//ZZ    REST(lr,R14);
+//ZZ    REST(pc,R15T);
+//ZZ #  undef REST
 
    /* Uh, the next line makes all the REST() above pointless. */
    tst->arch.vex         = priv->vex;
@@ -309,7 +307,7 @@
              
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
-                   "vg_pop_signal_frame (thread %d): "
+                   "vg_pop_signal_frame (thread %u): "
                    "isRT=%d valid magic; PC=%#x\n",
                    tid, has_siginfo, tst->arch.vex.guest_R15T);
 
diff --git a/coregrind/m_sigframe/sigframe-arm64-linux.c b/coregrind/m_sigframe/sigframe-arm64-linux.c
index 6e80659..a0134e4 100644
--- a/coregrind/m_sigframe/sigframe-arm64-linux.c
+++ b/coregrind/m_sigframe/sigframe-arm64-linux.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -152,6 +152,7 @@
 
 /* EXPORTED */
 void VG_(sigframe_create)( ThreadId tid, 
+                           Bool on_altstack,
                            Addr sp_top_of_frame,
                            const vki_siginfo_t *siginfo,
                            const struct vki_ucontext *siguc,
@@ -282,7 +283,7 @@
              
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
-                   "vg_pop_signal_frame (thread %d): "
+                   "vg_pop_signal_frame (thread %u): "
                    "isRT=%d valid magic; PC=%#llx\n",
                    tid, has_siginfo, tst->arch.vex.guest_PC);
 
diff --git a/coregrind/m_sigframe/sigframe-common.c b/coregrind/m_sigframe/sigframe-common.c
index 48bd247..8c513ff 100644
--- a/coregrind/m_sigframe/sigframe-common.c
+++ b/coregrind/m_sigframe/sigframe-common.c
@@ -10,9 +10,9 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2006-2013 OpenWorks Ltd
+   Copyright (C) 2006-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -49,7 +49,7 @@
    VG_TRACK( new_mem_stack_signal, addr - VG_STACK_REDZONE_SZB, size, tid );
 }
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 
 /* Extend the stack segment downwards if needed so as to ensure the
    new signal frames are mapped to something.  Return a Bool
@@ -83,7 +83,7 @@
 
    if (stackseg == NULL || !stackseg->hasR || !stackseg->hasW) {
       VG_(umsg)("Can't extend stack to %#lx during signal delivery for "
-                "thread %d:\n", addr, tid);
+                "thread %u:\n", addr, tid);
       if (stackseg == NULL)
          VG_(umsg)("  no stack segment\n");
       else
diff --git a/coregrind/m_sigframe/sigframe-mips32-linux.c b/coregrind/m_sigframe/sigframe-mips32-linux.c
index 4b23dc7..a95a661 100644
--- a/coregrind/m_sigframe/sigframe-mips32-linux.c
+++ b/coregrind/m_sigframe/sigframe-mips32-linux.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
@@ -121,6 +121,7 @@
 
 /* EXPORTED */
 void VG_(sigframe_create)( ThreadId tid, 
+                           Bool on_altstack,
                            Addr sp_top_of_frame,
                            const vki_siginfo_t *siginfo,
                            const struct vki_ucontext *siguc,
@@ -338,7 +339,7 @@
   VG_TRACK(die_mem_stack_signal, sp, frame_size);
   if (VG_(clo_trace_signals))
     VG_(message)( Vg_DebugMsg, 
-         "VG_(signal_return) (thread %d): isRT=%d valid magic; EIP=%#x\n",
+         "VG_(signal_return) (thread %u): isRT=%d valid magic; EIP=%#x\n",
          tid, isRT, tst->arch.vex.guest_PC);
   /* tell the tools */
   VG_TRACK( post_deliver_signal, tid, sigNo );
diff --git a/coregrind/m_sigframe/sigframe-mips64-linux.c b/coregrind/m_sigframe/sigframe-mips64-linux.c
index 5e0f44a..f21e2c7 100644
--- a/coregrind/m_sigframe/sigframe-mips64-linux.c
+++ b/coregrind/m_sigframe/sigframe-mips64-linux.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK 
+   Copyright (C) 2010-2015 RT-RK 
       mips-valgrind@rt-rk.com 
 
    This program is free software; you can redistribute it and/or
@@ -116,6 +116,7 @@
 
 /* EXPORTED */
 void VG_(sigframe_create) ( ThreadId tid,
+                            Bool on_altstack,
                             Addr sp_top_of_frame,
                             const vki_siginfo_t *siginfo,
                             const struct vki_ucontext *siguc,
@@ -265,7 +266,7 @@
    VG_TRACK(die_mem_stack_signal, sp, frame_size);
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
-         "VG_(signal_return) (thread %d): isRT=%d valid magic; EIP=%#llx\n",
+         "VG_(signal_return) (thread %u): isRT=%d valid magic; EIP=%#llx\n",
          tid, isRT, tst->arch.vex.guest_PC);
    /* tell the tools */
    VG_TRACK( post_deliver_signal, tid, sigNo );
diff --git a/coregrind/m_sigframe/sigframe-ppc32-linux.c b/coregrind/m_sigframe/sigframe-ppc32-linux.c
index 8047f27..2a496fe 100644
--- a/coregrind/m_sigframe/sigframe-ppc32-linux.c
+++ b/coregrind/m_sigframe/sigframe-ppc32-linux.c
@@ -8,9 +8,9 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2004-2013 Paul Mackerras
+   Copyright (C) 2004-2015 Paul Mackerras
       paulus@samba.org
 
    This program is free software; you can redistribute it and/or
@@ -624,6 +624,7 @@
 
 /* EXPORTED */
 void VG_(sigframe_create)( ThreadId tid, 
+                           Bool on_altstack,
                            Addr sp_top_of_frame,
                            const vki_siginfo_t *siginfo,
                            const struct vki_ucontext *siguc,
@@ -751,7 +752,7 @@
    if (0)
       VG_(printf)("pushed signal frame; %%R1 now = %#lx, "
                   "next %%CIA = %#x, status=%d\n",
-		  sp, tst->arch.vex.guest_CIA, tst->status);
+		  sp, tst->arch.vex.guest_CIA, (Int)tst->status);
 }
 
 
@@ -900,7 +901,7 @@
 
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
-                   "vg_pop_signal_frame (thread %d): "
+                   "vg_pop_signal_frame (thread %u): "
                    "isRT=%d valid magic; EIP=%#x\n",
                    tid, has_siginfo, tst->arch.vex.guest_CIA);
 
@@ -927,7 +928,7 @@
 //..    if (VG_(clo_trace_signals))
 //..       VG_(message)(
 //..          Vg_DebugMsg, 
-//..          "VG_(signal_return) (thread %d): isRT=%d valid magic; EIP=%p", 
+//..          "VG_(signal_return) (thread %u): isRT=%d valid magic; EIP=%p", 
 //..          tid, isRT, tst->arch.vex.guest_EIP);
 //.. 
 //..    /* tell the tools */
diff --git a/coregrind/m_sigframe/sigframe-ppc64-linux.c b/coregrind/m_sigframe/sigframe-ppc64-linux.c
index ec4d883..c5f5301 100644
--- a/coregrind/m_sigframe/sigframe-ppc64-linux.c
+++ b/coregrind/m_sigframe/sigframe-ppc64-linux.c
@@ -8,9 +8,9 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2004-2013 Paul Mackerras
+   Copyright (C) 2004-2015 Paul Mackerras
       paulus@samba.org
 
    This program is free software; you can redistribute it and/or
@@ -134,6 +134,7 @@
 
 /* EXPORTED */
 void VG_(sigframe_create)( ThreadId tid, 
+                           Bool on_altstack,
                            Addr sp_top_of_frame,
                            const vki_siginfo_t *siginfo,
                            const struct vki_ucontext *siguc,
@@ -278,7 +279,7 @@
    if (0)
       VG_(printf)("pushed signal frame; %%R1 now = %#lx, "
                   "next %%CIA = %#llx, status=%d\n",
-		  sp, tst->arch.vex.guest_CIA, tst->status);
+		  sp, tst->arch.vex.guest_CIA, (Int)tst->status);
 }
 
 
@@ -344,7 +345,7 @@
 
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
-                   "vg_pop_signal_frame (thread %d): isRT=%d "
+                   "vg_pop_signal_frame (thread %u): isRT=%d "
                    "valid magic; EIP=%#llx\n",
                    tid, has_siginfo, tst->arch.vex.guest_CIA);
 
diff --git a/coregrind/m_sigframe/sigframe-s390x-linux.c b/coregrind/m_sigframe/sigframe-s390x-linux.c
index fb70c76..3f106f9 100644
--- a/coregrind/m_sigframe/sigframe-s390x-linux.c
+++ b/coregrind/m_sigframe/sigframe-s390x-linux.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -403,6 +403,7 @@
 
 /* EXPORTED */
 void VG_(sigframe_create)( ThreadId tid,
+			   Bool on_altstack,
 			   Addr sp_top_of_frame,
 			   const vki_siginfo_t *siginfo,
 			   const struct vki_ucontext *siguc,
@@ -448,7 +449,7 @@
 {
    if (frame->magicPI != 0x31415927 ||
        frame->magicE  != 0x27182818) {
-      VG_(message)(Vg_UserMsg, "Thread %d return signal frame "
+      VG_(message)(Vg_UserMsg, "Thread %u return signal frame "
 			       "corrupted.  Killing process.\n",
 		   tst->tid);
       VG_(set_default_handler)(VKI_SIGSEGV);
@@ -494,7 +495,7 @@
    Addr          sp;
    ThreadState*  tst;
    SizeT         size;
-   Int            sigNo;
+   Int           sigNo;
 
    tst = VG_(get_ThreadState)(tid);
 
@@ -514,7 +515,7 @@
    if (VG_(clo_trace_signals))
       VG_(message)(
          Vg_DebugMsg,
-         "VG_(sigframe_destroy) (thread %d): isRT=%d valid magic; IP=%#llx\n",
+         "VG_(sigframe_destroy) (thread %u): isRT=%d valid magic; IP=%#llx\n",
          tid, isRT, tst->arch.vex.guest_IA);
 
    /* tell the tools */
diff --git a/coregrind/m_sigframe/sigframe-solaris.c b/coregrind/m_sigframe/sigframe-solaris.c
new file mode 100644
index 0000000..c19fb1f
--- /dev/null
+++ b/coregrind/m_sigframe/sigframe-solaris.c
@@ -0,0 +1,270 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Create/destroy signal delivery frames.                       ---*/
+/*---                                           sigframe-solaris.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2011-2015 Petr Pavlu
+      setup@dagobah.cz
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+#if defined(VGP_x86_solaris) || defined(VGP_amd64_solaris)
+
+#include "pub_core_basics.h"
+#include "pub_core_vki.h"
+#include "pub_core_threadstate.h"
+#include "pub_core_aspacemgr.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcprint.h"
+#include "pub_core_machine.h"
+#include "pub_core_options.h"
+#include "pub_core_signals.h"
+#include "pub_core_tooliface.h"
+#include "pub_core_sigframe.h"      /* Self */
+#include "pub_core_syswrap.h"
+#include "priv_sigframe.h"
+
+/* This module creates and removes signal frames for signal deliveries
+   on x86/amd64-solaris. */
+
+/* Create a signal frame for thread 'tid'.  Make a 3-arg frame regardless of
+   whether the client originally requested a 1-arg version (no SA_SIGINFO) or
+   a 3-arg one (SA_SIGINFO) since in the former case, the x86/amd64 calling
+   conventions will simply cause the extra 2 args to be ignored (inside the
+   handler). */
+void VG_(sigframe_create)(ThreadId tid, Bool on_altstack,
+                          Addr sp_top_of_frame, const vki_siginfo_t *siginfo,
+                          const struct vki_ucontext *siguc,
+                          void *handler, UInt flags, const vki_sigset_t *mask,
+                          void *restorer)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   Addr esp;
+   vki_sigframe_t *frame;
+   Int signo = siginfo->si_signo;
+
+   /* Calculate new stack pointer. */
+   esp = sp_top_of_frame - sizeof(vki_sigframe_t);
+   esp = VG_ROUNDDN(esp, 16) - sizeof(UWord);
+
+   if (!ML_(sf_maybe_extend_stack)(tst, esp, sp_top_of_frame - esp, flags))
+      return;
+
+   /* Fill in the frame. */
+   frame = (vki_sigframe_t*)esp;
+
+   /* Set a bogus return address.  This return address should be never used
+      because to return from a signal handler a program has to call
+      setcontext() explicitly. */
+   frame->return_addr = (void*)~0UL;
+
+   /* Save current context.  (This has to be done before the thread state is
+      modified in any way.) */
+   VG_(save_context)(tid, &frame->ucontext, Vg_CoreSignal);
+
+   /* Fill in the siginfo. */
+   frame->siginfo = *siginfo;
+   /* Set expected si_addr value.
+
+      Manual page siginfo.h(3HEAD) describes that some signals define si_addr
+      to be an address of the faulting instruction (SIGILL). Then it is needed
+      to change the real CPU address to the VCPU address. Some signals define
+      si_addr to be an address of the faulting memory reference (SIGSEGV,
+      SIGBUS). Then the address should be passed unmodified.
+
+      However documentation contained in the manpage does not reflect the
+      reality found in the Solaris kernel - uts/<arch>/os/trap.c. Here one can
+      observe that in some cases si_addr is set to address provided by the
+      underlying subsystem. In some cases si_addr is set to the current
+      program counter. Other signals are missing documentation altogether.
+      It is almost impossible to determine what value is stored in si_addr
+      based on the information provided by kernel to the signal handler.
+
+      POSIX.1-2008 says about si_addr:
+      SIGILL, SIGFPE ... Address of faulting instruction.
+      SIGSEGV, SIGBUS ... Address of faulting memory reference.
+      For some implementations, the value of si_addr may be inaccurate.
+
+      See tests none/tests/faultstatus and none/tests/x86/badseg for examples.
+      The code below simply follows the POSIX standard, but propagates any
+      possibly incorrect values from the kernel to the user.
+    */
+   switch (signo) {
+   case VKI_SIGSEGV:
+      switch (siginfo->si_code) {
+      case VKI_SEGV_ACCERR:
+      case VKI_SEGV_MAPERR:
+      default:
+         break;
+      case VKI_SEGV_MADE_UP_GPF:
+         /* Translate si_code synthesized by Valgrind to SEGV_MAPPER. */
+         frame->siginfo.si_code = VKI_SEGV_MAPERR;
+         break;
+      }
+      break;
+   case VKI_SIGBUS:
+      break;
+   case VKI_SIGFPE:
+   case VKI_SIGILL:
+   case VKI_SIGTRAP:
+      frame->siginfo.si_addr = (void*)VG_(get_IP)(tid);
+      break;
+   case VKI_SIGPROF:
+      frame->siginfo.si_faddr = (void*)VG_(get_IP)(tid);
+      break;
+   default:
+      break;
+   }
+   VG_TRACK(post_mem_write, Vg_CoreSignal, tid, (Addr)&frame->siginfo,
+            sizeof(frame->siginfo));
+
+   /* Save the signal number in an unused slot.  Later, when a return from the
+      signal is made, this value is used to inform the tool that the
+      processing for the given signal has ended. */
+   VKI_UC_SIGNO(&frame->ucontext) = signo | ((~(UWord)signo & 0xFFFF) << 16);
+   /* Old context has to point to the saved ucontext. */
+   tst->os_state.oldcontext = &frame->ucontext;
+   /* Save ERR and TRAPNO if siguc is present. */
+   if (siguc) {
+      frame->ucontext.uc_mcontext.gregs[VKI_REG_ERR]
+         = siguc->uc_mcontext.gregs[VKI_REG_ERR];
+      VG_TRACK(post_mem_write, Vg_CoreSignal, tid,
+               (Addr)&frame->ucontext.uc_mcontext.gregs[VKI_REG_ERR],
+               sizeof(UWord));
+      frame->ucontext.uc_mcontext.gregs[VKI_REG_TRAPNO]
+         = siguc->uc_mcontext.gregs[VKI_REG_TRAPNO];
+      VG_TRACK(post_mem_write, Vg_CoreSignal, tid,
+               (Addr)&frame->ucontext.uc_mcontext.gregs[VKI_REG_TRAPNO],
+               sizeof(UWord));
+   }
+
+   /* Prepare parameters for a signal handler. */
+   frame->a1_signo = signo;
+   /* The first parameter has to be 16-byte aligned, resembling function
+      calls. */
+   {
+      /* Using
+         vg_assert(VG_IS_16_ALIGNED(&frame->a1_signo));
+         seems to get miscompiled on amd64 with GCC 4.7.2. */
+      Addr signo_addr = (Addr)&frame->a1_signo;
+      vg_assert(VG_IS_16_ALIGNED(signo_addr));
+   }
+   frame->a2_siginfo = &frame->siginfo;
+   VG_TRACK(post_mem_write, Vg_CoreSignal, tid, (Addr)&frame->a1_signo,
+            sizeof(frame->a1_signo) + sizeof(frame->a2_siginfo));
+#if defined(VGP_x86_solaris)
+   frame->a3_ucontext = &frame->ucontext;
+   VG_TRACK(post_mem_write, Vg_CoreSignal, tid, (Addr)&frame->a3_ucontext,
+            sizeof(frame->a3_ucontext));
+#elif defined(VGP_amd64_solaris)
+   tst->arch.vex.guest_RDI = signo;
+   VG_TRACK(post_reg_write, Vg_CoreSignal, tid, offsetof(VexGuestAMD64State,
+            guest_RDI), sizeof(ULong));
+   tst->arch.vex.guest_RSI = (Addr)&frame->siginfo;
+   VG_TRACK(post_reg_write, Vg_CoreSignal, tid, offsetof(VexGuestAMD64State,
+            guest_RSI), sizeof(ULong));
+   tst->arch.vex.guest_RDX = (Addr)&frame->ucontext;
+   VG_TRACK(post_reg_write, Vg_CoreSignal, tid, offsetof(VexGuestAMD64State,
+            guest_RDX), sizeof(ULong));
+#endif
+
+   /* Set up the stack pointer. */
+   vg_assert(esp == (Addr)&frame->return_addr);
+   VG_(set_SP)(tid, esp);
+   VG_TRACK(post_reg_write, Vg_CoreSignal, tid, VG_O_STACK_PTR, sizeof(Addr));
+
+   /* Set up the program counter. Note that we don't inform a tool about IP
+      write because IP is always defined. */
+   VG_(set_IP)(tid, (Addr)handler);
+
+   /* If the signal is delivered on the alternate stack, copy it out to
+      ustack.  This has to be done after setting a new IP so the SS_ONSTACK
+      flag is set by VG_(do_sys_sigaltstack)(). */
+   if (on_altstack && tst->os_state.ustack
+       && VG_(am_is_valid_for_client)((Addr)tst->os_state.ustack,
+                                      sizeof(*tst->os_state.ustack),
+                                      VKI_PROT_WRITE)) {
+      SysRes res;
+      vki_stack_t altstack;
+
+      /* Get information about alternate stack. */
+      res = VG_(do_sys_sigaltstack)(tid, NULL, &altstack);
+      vg_assert(!sr_isError(res));
+
+      /* Copy it to ustack. */
+      *tst->os_state.ustack = altstack;
+      VG_TRACK(post_mem_write, Vg_CoreSignal, tid, (Addr)tst->os_state.ustack,
+               sizeof(*tst->os_state.ustack));
+   }
+
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg,
+                   "sigframe_create (thread %u): next IP=%#lx, "
+                   "next SP=%#lx\n",
+                   tid, (Addr)handler, (Addr)frame);
+}
+
+void VG_(sigframe_destroy)(ThreadId tid, Bool isRT)
+{
+   /* Not used on Solaris. */
+   vg_assert(0);
+}
+
+void VG_(sigframe_return)(ThreadId tid, const vki_ucontext_t *uc)
+{
+   Int signo;
+
+   /* Check if a signal number was saved in the restored context. */
+   signo = VKI_UC_SIGNO_CONST(uc) & 0xFFFF;
+   if (!signo || signo != ((~VKI_UC_SIGNO_CONST(uc) >> 16) & 0xFFFF))
+      return;
+
+   /* Note: The active tool should be informed here about the dead stack area.
+      However, this was already done when the original context was restored (in
+      VG_(restore_context)()) so it is not necessary to do it here again.
+
+      There is a small nuance though, VG_(restore_context)() triggers the
+      die_mem_stack event while in this case, it should really trigger the
+      die_mem_stack_signal event.  This is not currently a problem because all
+      official tools handle these two events in the same way.
+
+      If a return from an alternate stack is made then no die_mem_stack event
+      is currently triggered. */
+
+   /* Returning from a signal handler. */
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg,
+                   "sigframe_return (thread %u): IP=%#lx\n",
+                   tid, VG_(get_IP)(tid));
+
+   /* Tell the tool. */
+   VG_TRACK(post_deliver_signal, tid, signo);
+}
+
+#endif // defined(VGP_x86_solaris) || defined(VGP_amd64_solaris)
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_sigframe/sigframe-tilegx-linux.c b/coregrind/m_sigframe/sigframe-tilegx-linux.c
index 3448ff8..52cbf4b 100644
--- a/coregrind/m_sigframe/sigframe-tilegx-linux.c
+++ b/coregrind/m_sigframe/sigframe-tilegx-linux.c
@@ -8,7 +8,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013 Tilera Corp.
+  Copyright (C) 2010-2015 Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -239,7 +239,7 @@
   if (0)
     VG_(printf)("pushed signal frame; sp now = %lx, "
                 "next %pc = %lx, status=%d\n",
-                (Addr)frame, tst->arch.vex.guest_pc, tst->status);
+                (Addr)frame, tst->arch.vex.guest_pc, (Int)tst->status);
 }
 
 /* EXPORTED */
@@ -262,9 +262,9 @@
     struct vki_ucontext *ucp = &frame->rs_uc;
 
     if (0)
-      VG_(printf)("destory signal frame; sp = %lx, "
+      VG_(printf)("destroy signal frame; sp = %lx, "
                   " %pc = %lx, status=%d\n",
-                  (Addr)frame, tst->arch.vex.guest_pc, tst->status);
+                  (Addr)frame, tst->arch.vex.guest_pc, (Int)tst->status);
 
     frame_size = sizeof(*frame);
     mc = &ucp->uc_mcontext;
@@ -339,7 +339,7 @@
   VG_TRACK(die_mem_stack_signal, sp, frame_size);
   if (VG_(clo_trace_signals))
     VG_(message)( Vg_DebugMsg,
-                  "VG_(signal_return) (thread %d): isRT=%d valid magic; EIP=%#x\n",
+                  "VG_(signal_return) (thread %u): isRT=%d valid magic; EIP=%#x\n",
                   tid, isRT, tst->arch.vex.guest_pc);
   /* tell the tools */
   VG_TRACK( post_deliver_signal, tid, sigNo );
diff --git a/coregrind/m_sigframe/sigframe-x86-darwin.c b/coregrind/m_sigframe/sigframe-x86-darwin.c
index 01f87da..2e6492f 100644
--- a/coregrind/m_sigframe/sigframe-x86-darwin.c
+++ b/coregrind/m_sigframe/sigframe-x86-darwin.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 OpenWorks Ltd
+   Copyright (C) 2006-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -45,19 +45,15 @@
 #include "pub_core_tooliface.h"
 #include "pub_core_trampoline.h"
 #include "pub_core_sigframe.h"      /* self */
+#include "priv_sigframe.h"
 
 
-/* Cheap-ass hack copied from ppc32-aix5 code, just to get started.
-   Produce a frame with layout entirely of our own choosing. */
+/* Originally copied from ppc32-aix5 code.
+   Produce a frame with layout entirely of our own choosing.
 
-/* This module creates and removes signal frames for signal deliveries
-   on x86-darwin.  Kludgey; the machine state ought to be saved in a
-   ucontext and retrieved from it later, so the handler can modify it
-   and return.  However .. for now .. just stick the vex guest state
-   in the frame and snarf it again later.
-
-   Also, don't bother with creating siginfo and ucontext in the
-   handler, although do point them somewhere non-faulting.
+   This module creates and removes signal frames for signal deliveries
+   on x86-darwin.  The machine state is saved in a ucontext and retrieved
+   from it later, so the handler can modify it and return.
 
    Frame should have a 16-aligned size, just in case that turns out to
    be important for Darwin.  (be conservative)
@@ -69,20 +65,67 @@
    UInt             a2_siginfo;
    UInt             a3_ucontext;
    UChar            lower_guardzone[512];  // put nothing here
-   VexGuestX86State gst;
-   VexGuestX86State gshadow1;
-   VexGuestX86State gshadow2;
+   VexGuestX86State vex;
+   VexGuestX86State vex_shadow1;
+   VexGuestX86State vex_shadow2;
    vki_siginfo_t    fake_siginfo;
    struct vki_ucontext fake_ucontext;
    UInt             magicPI;
    UInt             sigNo_private;
    vki_sigset_t     mask; // saved sigmask; restore when hdlr returns
-   UInt             __pad[1];
+   UInt             __pad[3];
    UChar            upper_guardzone[512]; // put nothing here
    // and don't zero it, since that might overwrite the client's
    // stack redzone, at least on archs which have one
 };
 
+/* Create a plausible-looking sigcontext from the thread's
+   Vex guest state.  NOTE: does not fill in the FP or SSE
+   bits of sigcontext at the moment.
+ */
+static void synthesize_ucontext(ThreadState *tst,
+				struct vki_ucontext *uc,
+				const struct vki_ucontext *siguc)
+{
+   VG_(memset)(uc, 0, sizeof(*uc));
+
+   if (siguc) uc->uc_sigmask = siguc->uc_sigmask;
+   uc->uc_stack = tst->altstack;
+   uc->uc_mcontext = &uc->__mcontext_data;
+
+#  define SC2(reg,REG)  uc->__mcontext_data.__ss.reg = tst->arch.vex.guest_##REG
+   SC2(__edi,EDI);
+   SC2(__esi,ESI);
+   SC2(__ebp,EBP);
+   SC2(__ebx,EBX);
+   SC2(__edx,EDX);
+   SC2(__eax,EAX);
+   SC2(__ecx,ECX);
+   SC2(__esp,ESP);
+   SC2(__eip,EIP);
+   uc->__mcontext_data.__ss.__eflags = LibVEX_GuestX86_get_eflags(&tst->arch.vex);
+
+   if (siguc)
+      uc->__mcontext_data.__es = siguc->__mcontext_data.__es;
+#  undef SC2
+}
+
+static void restore_from_ucontext(ThreadState *tst,
+				  const struct vki_ucontext *uc)
+{
+#  define SC2(REG,reg)  tst->arch.vex.guest_##REG = uc->__mcontext_data.__ss.reg
+   SC2(EDI,__edi);
+   SC2(ESI,__esi);
+   SC2(EBP,__ebp);
+   SC2(EBX,__ebx);
+   SC2(EDX,__edx);
+   SC2(EAX,__eax);
+   SC2(ECX,__ecx);
+   SC2(ESP,__esp);
+   SC2(EIP,__eip);
+   /* There doesn't seem to be an easy way to restore eflags */
+#  undef SC2
+}
 
 /* Create a signal frame for thread 'tid'.  Make a 3-arg frame
    regardless of whether the client originally requested a 1-arg
@@ -90,6 +133,7 @@
    former case, the x86 calling conventions will simply cause the
    extra 2 args to be ignored (inside the handler). */
 void VG_(sigframe_create) ( ThreadId tid,
+                            Bool on_altstack,
                             Addr sp_top_of_frame,
                             const vki_siginfo_t *siginfo,
                             const struct vki_ucontext *siguc,
@@ -118,26 +162,25 @@
 
    frame = (struct hacky_sigframe *) esp;
 
-   /* clear it (very conservatively) (why so conservatively??) */
+   /* clear it (very conservatively) */
    VG_(memset)(&frame->lower_guardzone, 0, sizeof frame->lower_guardzone);
-   VG_(memset)(&frame->gst,      0, sizeof(VexGuestX86State));
-   VG_(memset)(&frame->gshadow1, 0, sizeof(VexGuestX86State));
-   VG_(memset)(&frame->gshadow2, 0, sizeof(VexGuestX86State));
+   VG_(memset)(&frame->vex,      0, sizeof(VexGuestX86State));
+   VG_(memset)(&frame->vex_shadow1, 0, sizeof(VexGuestX86State));
+   VG_(memset)(&frame->vex_shadow2, 0, sizeof(VexGuestX86State));
    VG_(memset)(&frame->fake_siginfo,  0, sizeof(frame->fake_siginfo));
    VG_(memset)(&frame->fake_ucontext, 0, sizeof(frame->fake_ucontext));
 
    /* save stuff in frame */
-   frame->gst           = tst->arch.vex;
-   frame->gshadow1      = tst->arch.vex_shadow1;
-   frame->gshadow2      = tst->arch.vex_shadow2;
+   frame->vex           = tst->arch.vex;
+   frame->vex_shadow1   = tst->arch.vex_shadow1;
+   frame->vex_shadow2   = tst->arch.vex_shadow2;
    frame->sigNo_private = sigNo;
    frame->mask          = tst->sig_mask;
    frame->magicPI       = 0x31415927;
 
-   /* Minimally fill in the siginfo and ucontext.  Note, utter
-      lameness prevails.  Be underwhelmed, be very underwhelmed. */
-   frame->fake_siginfo.si_signo = sigNo;
-   frame->fake_siginfo.si_code  = siginfo->si_code;
+   /* Fill in the siginfo and ucontext.  */
+   synthesize_ucontext(tst, &frame->fake_ucontext, siguc);
+   frame->fake_siginfo = *siginfo;
 
    /* Set up stack pointer */
    vg_assert(esp == (Addr)&frame->returnAddr);
@@ -152,9 +195,11 @@
    VG_TRACK( pre_mem_write, Vg_CoreSignal, tid, "signal handler frame",
              (Addr)frame, 4*sizeof(UInt) );
    frame->returnAddr  = (UInt)&VG_(x86_darwin_SUBST_FOR_sigreturn);
-   frame->a1_signo    = sigNo;
-   frame->a2_siginfo  = (UInt)&frame->fake_siginfo;  /* oh well */
-   frame->a3_ucontext = (UInt)&frame->fake_ucontext; /* oh well */
+
+   frame->a1_signo    =         sigNo;
+   frame->a2_siginfo  = (UInt)  &frame->fake_siginfo;
+   frame->a3_ucontext = (UInt)  &frame->fake_ucontext;
+
    VG_TRACK( post_mem_write, Vg_CoreSignal, tid,
              (Addr)frame, 4*sizeof(UInt) );
    VG_TRACK( post_mem_write, Vg_CoreSignal, tid,
@@ -164,7 +209,7 @@
 
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
-                   "sigframe_create (thread %d): "
+                   "sigframe_create (thread %u): "
                    "next EIP=%#lx, next ESP=%#lx\n",
                    tid, (Addr)handler, (Addr)frame );
 }
@@ -191,23 +236,23 @@
    frame = (struct hacky_sigframe*)(esp - 4);
    vg_assert(frame->magicPI == 0x31415927);
 
-   /* This +8 is because of the -4 referred to in the ELF ABI comment
+   /* This +4 is because of the -4 referred to in the ELF ABI comment
       in VG_(sigframe_create) just above. */
    vg_assert(VG_IS_16_ALIGNED((Addr)frame + 4));
 
-   /* restore the entire guest state, and shadows, from the
-      frame.  Note, as per comments above, this is a kludge - should
-      restore it from saved ucontext.  Oh well. */
-   tst->arch.vex = frame->gst;
-   tst->arch.vex_shadow1 = frame->gshadow1;
-   tst->arch.vex_shadow2 = frame->gshadow2;
-   tst->sig_mask = frame->mask;
-   tst->tmp_sig_mask = frame->mask;
-   sigNo = frame->sigNo_private;
+   /* restore the entire guest state, and shadows, from the frame. */
+   tst->arch.vex            = frame->vex;
+   tst->arch.vex_shadow1    = frame->vex_shadow1;
+   tst->arch.vex_shadow2    = frame->vex_shadow2;
+   restore_from_ucontext(tst, &frame->fake_ucontext);
+
+   tst->sig_mask            = frame->mask;
+   tst->tmp_sig_mask        = frame->mask;
+   sigNo                    = frame->sigNo_private;
 
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
-                   "sigframe_destroy (thread %d): "
+                   "sigframe_destroy (thread %u): "
                    "valid magic; next EIP=%#x\n",
                    tid, tst->arch.vex.guest_EIP);
 
diff --git a/coregrind/m_sigframe/sigframe-x86-linux.c b/coregrind/m_sigframe/sigframe-x86-linux.c
index 3db2251..3a46bfd 100644
--- a/coregrind/m_sigframe/sigframe-x86-linux.c
+++ b/coregrind/m_sigframe/sigframe-x86-linux.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -535,6 +535,7 @@
 
 /* EXPORTED */
 void VG_(sigframe_create)( ThreadId tid, 
+                           Bool on_altstack,
                            Addr esp_top_of_frame,
                            const vki_siginfo_t *siginfo,
                            const struct vki_ucontext *siguc,
@@ -566,7 +567,7 @@
    if (0)
       VG_(printf)("pushed signal frame; %%ESP now = %#lx, "
                   "next %%EIP = %#x, status=%d\n",
-		  esp, tst->arch.vex.guest_EIP, tst->status);
+		  esp, tst->arch.vex.guest_EIP, (Int)tst->status);
 }
 
 
@@ -582,7 +583,7 @@
 {
    if (frame->magicPI != 0x31415927 ||
        frame->magicE  != 0x27182818) {
-      VG_(message)(Vg_UserMsg, "Thread %d return signal frame "
+      VG_(message)(Vg_UserMsg, "Thread %u return signal frame "
                                "corrupted.  Killing process.\n",
 		   tst->tid);
       VG_(set_default_handler)(VKI_SIGSEGV);
@@ -672,7 +673,7 @@
    if (VG_(clo_trace_signals))
       VG_(message)(
          Vg_DebugMsg, 
-         "VG_(signal_return) (thread %d): isRT=%d valid magic; EIP=%#x\n",
+         "VG_(signal_return) (thread %u): isRT=%d valid magic; EIP=%#x\n",
          tid, isRT, tst->arch.vex.guest_EIP);
 
    /* tell the tools */
diff --git a/coregrind/m_signals.c b/coregrind/m_signals.c
index 78e2a6d..db756cb 100644
--- a/coregrind/m_signals.c
+++ b/coregrind/m_signals.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -160,7 +160,7 @@
    So what we have to do, when doing any syscall which SfMayBlock, is to
    quickly switch in the SCSS-specified signal mask just before the
    syscall, and switch it back just afterwards, and hope that we don't
-   get caught up in some wierd race condition.  This is the primary
+   get caught up in some weird race condition.  This is the primary
    purpose of the ultra-magical pieces of assembly code in
    coregrind/m_syswrap/syscall-<plat>.S
 
@@ -207,7 +207,6 @@
 #include "pub_core_xarray.h"
 #include "pub_core_clientstate.h"
 #include "pub_core_aspacemgr.h"
-#include "pub_core_debugger.h"      // For VG_(start_debugger)
 #include "pub_core_errormgr.h"
 #include "pub_core_gdbserver.h"
 #include "pub_core_libcbase.h"
@@ -566,6 +565,7 @@
         (srP)->misc.MIPS64.r31 = (uc)->uc_mcontext.sc_regs[31]; \
         (srP)->misc.MIPS64.r28 = (uc)->uc_mcontext.sc_regs[28]; \
       }
+
 #elif defined(VGP_tilegx_linux)
 #  define VG_UCONTEXT_INSTR_PTR(uc)       ((uc)->uc_mcontext.pc)
 #  define VG_UCONTEXT_STACK_PTR(uc)       ((uc)->uc_mcontext.sp)
@@ -580,6 +580,34 @@
         (srP)->misc.TILEGX.r52 = (uc)->uc_mcontext.gregs[52];  \
         (srP)->misc.TILEGX.r55 = (uc)->uc_mcontext.lr;         \
       }
+
+#elif defined(VGP_x86_solaris)
+#  define VG_UCONTEXT_INSTR_PTR(uc)       ((Addr)(uc)->uc_mcontext.gregs[VKI_EIP])
+#  define VG_UCONTEXT_STACK_PTR(uc)       ((Addr)(uc)->uc_mcontext.gregs[VKI_UESP])
+#  define VG_UCONTEXT_SYSCALL_SYSRES(uc)                               \
+      VG_(mk_SysRes_x86_solaris)((uc)->uc_mcontext.gregs[VKI_EFL] & 1, \
+                                 (uc)->uc_mcontext.gregs[VKI_EAX],     \
+                                 (uc)->uc_mcontext.gregs[VKI_EFL] & 1  \
+                                 ? 0 : (uc)->uc_mcontext.gregs[VKI_EDX])
+#  define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc)                      \
+      { (srP)->r_pc = (ULong)(uc)->uc_mcontext.gregs[VKI_EIP];         \
+        (srP)->r_sp = (ULong)(uc)->uc_mcontext.gregs[VKI_UESP];        \
+        (srP)->misc.X86.r_ebp = (uc)->uc_mcontext.gregs[VKI_EBP];      \
+      }
+
+#elif defined(VGP_amd64_solaris)
+#  define VG_UCONTEXT_INSTR_PTR(uc)       ((Addr)(uc)->uc_mcontext.gregs[VKI_REG_RIP])
+#  define VG_UCONTEXT_STACK_PTR(uc)       ((Addr)(uc)->uc_mcontext.gregs[VKI_REG_RSP])
+#  define VG_UCONTEXT_SYSCALL_SYSRES(uc)                                     \
+      VG_(mk_SysRes_amd64_solaris)((uc)->uc_mcontext.gregs[VKI_REG_RFL] & 1, \
+                                   (uc)->uc_mcontext.gregs[VKI_REG_RAX],     \
+                                   (uc)->uc_mcontext.gregs[VKI_REG_RFL] & 1  \
+                                   ? 0 : (uc)->uc_mcontext.gregs[VKI_REG_RDX])
+#  define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc)                            \
+      { (srP)->r_pc = (uc)->uc_mcontext.gregs[VKI_REG_RIP];                  \
+        (srP)->r_sp = (uc)->uc_mcontext.gregs[VKI_REG_RSP];                  \
+        (srP)->misc.AMD64.r_rbp = (uc)->uc_mcontext.gregs[VKI_REG_RBP];      \
+      }
 #else
 #  error Unknown platform
 #endif
@@ -592,7 +620,7 @@
 #if defined(VGO_linux)
 #  define VKI_SIGINFO_si_addr  _sifields._sigfault._addr
 #  define VKI_SIGINFO_si_pid   _sifields._kill._pid
-#elif defined(VGO_darwin)
+#elif defined(VGO_darwin) || defined(VGO_solaris)
 #  define VKI_SIGINFO_si_addr  si_addr
 #  define VKI_SIGINFO_si_pid   si_pid
 #else
@@ -667,6 +695,7 @@
      SA_NOCLDSTOP -- passed to kernel
      SA_ONESHOT or SA_RESETHAND -- pass through
      SA_RESTART -- we observe this but set our handlers to always restart
+                   (this doesn't apply to the Solaris port)
      SA_NOMASK or SA_NODEFER -- we observe this, but our handlers block everything
      SA_ONSTACK -- pass through
      SA_NOCLDWAIT -- pass through
@@ -796,12 +825,20 @@
 
       /* SA_ONESHOT: ignore client setting */
       
+#     if !defined(VGO_solaris)
       /* SA_RESTART: ignore client setting and always set it for us.
 	 Though we never rely on the kernel to restart a
 	 syscall, we observe whether it wanted to restart the syscall
 	 or not, which is needed by 
          VG_(fixup_guest_state_after_syscall_interrupted) */
       skss_flags |= VKI_SA_RESTART;
+#else
+      /* The above does not apply to the Solaris port, where the kernel does
+         not directly restart syscalls, but instead it checks SA_RESTART flag
+         and if it is set then it returns ERESTART to libc and the library
+         actually restarts the syscall. */
+      skss_flags |= scss_flags & VKI_SA_RESTART;
+#     endif
 
       /* SA_NOMASK: ignore it */
 
@@ -922,16 +959,16 @@
    ".text\n" \
    ".globl my_sigreturn\n" \
    "my_sigreturn:\n" \
-   "movl $" VG_STRINGIFY(__NR_DARWIN_FAKE_SIGRETURN) ",%eax\n" \
-   "int $0x80"
+   "    movl $" VG_STRINGIFY(__NR_DARWIN_FAKE_SIGRETURN) ",%eax\n" \
+   "    int $0x80\n"
 
 #elif defined(VGP_amd64_darwin)
-   // DDD: todo
 #  define _MY_SIGRETURN(name) \
    ".text\n" \
    ".globl my_sigreturn\n" \
    "my_sigreturn:\n" \
-   "ud2\n"
+   "    movq $" VG_STRINGIFY(__NR_DARWIN_FAKE_SIGRETURN) ",%rax\n" \
+   "    syscall\n"
 
 #elif defined(VGP_s390x_linux)
 #  define _MY_SIGRETURN(name) \
@@ -965,6 +1002,15 @@
    " swint1\n" \
    ".previous\n"
 
+#elif defined(VGP_x86_solaris) || defined(VGP_amd64_solaris)
+/* Not used on Solaris. */
+#  define _MY_SIGRETURN(name) \
+   ".text\n" \
+   ".globl my_sigreturn\n" \
+   "my_sigreturn:\n" \
+   "ud2\n" \
+   ".previous\n"
+
 #else
 #  error Unknown platform
 #endif
@@ -1008,7 +1054,7 @@
       ksa.sa_flags    = skss.skss_per_sig[sig].skss_flags;
 #     if !defined(VGP_ppc32_linux) && \
          !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \
-         !defined(VGP_mips32_linux)
+         !defined(VGP_mips32_linux) && !defined(VGO_solaris)
       ksa.sa_restorer = my_sigreturn;
 #     endif
       /* Re above ifdef (also the assertion below), PaulM says:
@@ -1038,11 +1084,24 @@
       if (!force_update) {
          vg_assert(ksa_old.ksa_handler 
                    == skss_old.skss_per_sig[sig].skss_handler);
+#        if defined(VGO_solaris)
+         if (ksa_old.ksa_handler == VKI_SIG_DFL
+               || ksa_old.ksa_handler == VKI_SIG_IGN) {
+            /* The Solaris kernel ignores signal flags (except SA_NOCLDWAIT
+               and SA_NOCLDSTOP) and a signal mask if a handler is set to
+               SIG_DFL or SIG_IGN. */
+            skss_old.skss_per_sig[sig].skss_flags
+               &= (VKI_SA_NOCLDWAIT | VKI_SA_NOCLDSTOP);
+            vg_assert(VG_(isemptysigset)( &ksa_old.sa_mask ));
+            VG_(sigfillset)( &ksa_old.sa_mask );
+         }
+#        endif
          vg_assert(ksa_old.sa_flags 
                    == skss_old.skss_per_sig[sig].skss_flags);
 #        if !defined(VGP_ppc32_linux) && \
             !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \
-            !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux)
+            !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux) && \
+            !defined(VGO_solaris)
          vg_assert(ksa_old.sa_restorer == my_sigreturn);
 #        endif
          VG_(sigaddset)( &ksa_old.sa_mask, VKI_SIGKILL );
@@ -1086,7 +1145,7 @@
    m_SP  = VG_(get_SP)(tid);
 
    if (VG_(clo_trace_signals))
-      VG_(dmsg)("sys_sigaltstack: tid %d, "
+      VG_(dmsg)("sys_sigaltstack: tid %u, "
                 "ss %p{%p,sz=%llu,flags=0x%llx}, oss %p (current SP %p)\n",
                 tid, (void*)ss, 
                 ss ? ss->ss_sp : 0,
@@ -1162,7 +1221,8 @@
       old_act->ksa_handler = scss.scss_per_sig[signo].scss_handler;
       old_act->sa_flags    = scss.scss_per_sig[signo].scss_flags;
       old_act->sa_mask     = scss.scss_per_sig[signo].scss_mask;
-#     if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin)
+#     if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \
+         !defined(VGO_solaris)
       old_act->sa_restorer = scss.scss_per_sig[signo].scss_restorer;
 #     endif
    }
@@ -1174,7 +1234,8 @@
       scss.scss_per_sig[signo].scss_mask     = new_act->sa_mask;
 
       scss.scss_per_sig[signo].scss_restorer = NULL;
-#     if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin)
+#     if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \
+         !defined(VGO_solaris)
       scss.scss_per_sig[signo].scss_restorer = new_act->sa_restorer;
 #     endif
 
@@ -1278,7 +1339,7 @@
 		  vki_sigset_t* oldset )
 {
    if (VG_(clo_trace_signals))
-      VG_(dmsg)("do_setmask: tid = %d how = %d (%s), newset = %p (%s)\n", 
+      VG_(dmsg)("do_setmask: tid = %u how = %d (%s), newset = %p (%s)\n", 
                 tid, how,
                 how==VKI_SIG_BLOCK ? "SIG_BLOCK" : (
                    how==VKI_SIG_UNBLOCK ? "SIG_UNBLOCK" : (
@@ -1369,6 +1430,7 @@
 void push_signal_frame ( ThreadId tid, const vki_siginfo_t *siginfo,
                                        const struct vki_ucontext *uc )
 {
+   Bool         on_altstack;
    Addr         esp_top_of_frame;
    ThreadState* tst;
    Int		sigNo = siginfo->si_signo;
@@ -1378,7 +1440,7 @@
    tst = & VG_(threads)[tid];
 
    if (VG_(clo_trace_signals)) {
-      VG_(dmsg)("push_signal_frame (thread %d): signal %d\n", tid, sigNo);
+      VG_(dmsg)("push_signal_frame (thread %u): signal %d\n", tid, sigNo);
       VG_(get_and_pp_StackTrace)(tid, 10);
    }
 
@@ -1389,32 +1451,30 @@
              arch/i386/kernel/signal.c. */
           sas_ss_flags(tid, VG_(get_SP)(tid)) == 0
       ) {
+      on_altstack = True;
       esp_top_of_frame 
          = (Addr)(tst->altstack.ss_sp) + tst->altstack.ss_size;
       if (VG_(clo_trace_signals))
-         VG_(dmsg)("delivering signal %d (%s) to thread %d: "
+         VG_(dmsg)("delivering signal %d (%s) to thread %u: "
                    "on ALT STACK (%p-%p; %ld bytes)\n",
                    sigNo, VG_(signame)(sigNo), tid, tst->altstack.ss_sp,
                    (UChar *)tst->altstack.ss_sp + tst->altstack.ss_size,
                    (Word)tst->altstack.ss_size );
-
-      /* Signal delivery to tools */
-      VG_TRACK( pre_deliver_signal, tid, sigNo, /*alt_stack*/True );
-      
    } else {
+      on_altstack = False;
       esp_top_of_frame = VG_(get_SP)(tid) - VG_STACK_REDZONE_SZB;
-
-      /* Signal delivery to tools */
-      VG_TRACK( pre_deliver_signal, tid, sigNo, /*alt_stack*/False );
    }
 
+   /* Signal delivery to tools */
+   VG_TRACK( pre_deliver_signal, tid, sigNo, on_altstack );
+
    vg_assert(scss.scss_per_sig[sigNo].scss_handler != VKI_SIG_IGN);
    vg_assert(scss.scss_per_sig[sigNo].scss_handler != VKI_SIG_DFL);
 
    /* This may fail if the client stack is busted; if that happens,
       the whole process will exit rather than simply calling the
       signal handler. */
-   VG_(sigframe_create) (tid, esp_top_of_frame, siginfo, uc,
+   VG_(sigframe_create) (tid, on_altstack, esp_top_of_frame, siginfo, uc,
                          scss.scss_per_sig[sigNo].scss_handler,
                          scss.scss_per_sig[sigNo].scss_flags,
                          &tst->sig_mask,
@@ -1439,6 +1499,7 @@
       case VKI_SIGUSR1:   return "SIGUSR1";
       case VKI_SIGUSR2:   return "SIGUSR2";
       case VKI_SIGSEGV:   return "SIGSEGV";
+      case VKI_SIGSYS:    return "SIGSYS";
       case VKI_SIGPIPE:   return "SIGPIPE";
       case VKI_SIGALRM:   return "SIGALRM";
       case VKI_SIGTERM:   return "SIGTERM";
@@ -1461,10 +1522,42 @@
 #     if defined(VKI_SIGPWR)
       case VKI_SIGPWR:    return "SIGPWR";
 #     endif
-#     if defined(VKI_SIGUNUSED)
+#     if defined(VKI_SIGUNUSED) && (VKI_SIGUNUSED != VKI_SIGSYS)
       case VKI_SIGUNUSED: return "SIGUNUSED";
 #     endif
 
+      /* Solaris-specific signals. */
+#     if defined(VKI_SIGEMT)
+      case VKI_SIGEMT:    return "SIGEMT";
+#     endif
+#     if defined(VKI_SIGWAITING)
+      case VKI_SIGWAITING: return "SIGWAITING";
+#     endif
+#     if defined(VKI_SIGLWP)
+      case VKI_SIGLWP:    return "SIGLWP";
+#     endif
+#     if defined(VKI_SIGFREEZE)
+      case VKI_SIGFREEZE: return "SIGFREEZE";
+#     endif
+#     if defined(VKI_SIGTHAW)
+      case VKI_SIGTHAW:   return "SIGTHAW";
+#     endif
+#     if defined(VKI_SIGCANCEL)
+      case VKI_SIGCANCEL: return "SIGCANCEL";
+#     endif
+#     if defined(VKI_SIGLOST)
+      case VKI_SIGLOST:   return "SIGLOST";
+#     endif
+#     if defined(VKI_SIGXRES)
+      case VKI_SIGXRES:   return "SIGXRES";
+#     endif
+#     if defined(VKI_SIGJVM1)
+      case VKI_SIGJVM1:   return "SIGJVM1";
+#     endif
+#     if defined(VKI_SIGJVM2)
+      case VKI_SIGJVM2:   return "SIGJVM2";
+#     endif
+
 #  if defined(VKI_SIGRTMIN) && defined(VKI_SIGRTMAX)
    case VKI_SIGRTMIN ... VKI_SIGRTMAX:
       VG_(sprintf)(buf, "SIGRT%d", sigNo-VKI_SIGRTMIN);
@@ -1487,7 +1580,8 @@
 
    sa.ksa_handler = VKI_SIG_DFL;
    sa.sa_flags = 0;
-#  if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin)
+#  if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \
+      !defined(VGO_solaris)
    sa.sa_restorer = 0;
 #  endif
    VG_(sigemptyset)(&sa.sa_mask);
@@ -1499,7 +1593,7 @@
    VG_(sigprocmask)(VKI_SIG_UNBLOCK, &mask, &origmask);
 
    r = VG_(kill)(VG_(getpid)(), sigNo);
-#  if defined(VGO_linux)
+#  if !defined(VGO_darwin)
    /* This sometimes fails with EPERM on Darwin.  I don't know why. */
    vg_assert(r == 0);
 #  endif
@@ -1517,7 +1611,7 @@
 // pass in some other details that can help when si_code is unreliable.
 static Bool is_signal_from_kernel(ThreadId tid, int signum, int si_code)
 {
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    // On Linux, SI_USER is zero, negative values are from the user, positive
    // values are from the kernel.  There are SI_FROMUSER and SI_FROMKERNEL
    // macros but we don't use them here because other platforms don't have
@@ -1558,11 +1652,6 @@
 #  endif
 }
 
-// This is an arbitrary si_code that we only use internally.  It corresponds
-// to the value SI_KERNEL on Linux, but that's not really of any significance
-// as far as I can determine.
-#define VKI_SEGV_MADE_UP_GPF    0x80
-
 /* 
    Perform the default action of a signal.  If the signal is fatal, it
    marks all threads as needing to exit, but it doesn't actually kill
@@ -1589,8 +1678,15 @@
       case VKI_SIGSEGV:	/* core */
       case VKI_SIGBUS:	/* core */
       case VKI_SIGTRAP:	/* core */
+      case VKI_SIGSYS:	/* core */
       case VKI_SIGXCPU:	/* core */
       case VKI_SIGXFSZ:	/* core */
+
+      /* Solaris-specific signals. */
+#     if defined(VKI_SIGEMT)
+      case VKI_SIGEMT:	/* core */
+#     endif
+
          terminate = True;
          core = True;
          break;
@@ -1607,12 +1703,17 @@
 #     if defined(VKI_SIGPWR)
       case VKI_SIGPWR:	/* term */
 #     endif
-      case VKI_SIGSYS:	/* term */
       case VKI_SIGPROF:	/* term */
       case VKI_SIGVTALRM:	/* term */
 #     if defined(VKI_SIGRTMIN) && defined(VKI_SIGRTMAX)
       case VKI_SIGRTMIN ... VKI_SIGRTMAX: /* term */
 #     endif
+
+      /* Solaris-specific signals. */
+#     if defined(VKI_SIGLOST)
+      case VKI_SIGLOST:	/* term */
+#     endif
+
          terminate = True;
          break;
    }
@@ -1702,6 +1803,11 @@
 	    case VKI_FPE_FLTRES: event = "FP inexact"; break;
 	    case VKI_FPE_FLTINV: event = "FP invalid operation"; break;
 	    case VKI_FPE_FLTSUB: event = "FP subscript out of range"; break;
+
+            /* Solaris-specific codes. */
+#           if defined(VKI_FPE_FLTDEN)
+	    case VKI_FPE_FLTDEN: event = "FP denormalize"; break;
+#           endif
 	    }
 	    break;
 
@@ -1727,7 +1833,7 @@
          likely cause a segfault. */
       if (VG_(is_valid_tid)(tid)) {
          Word first_ip_delta = 0;
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
          /* Make sure that the address stored in the stack pointer is 
             located in a mapped page. That is not necessarily so. E.g.
             consider the scenario where the stack pointer was decreased
@@ -1792,10 +1898,6 @@
       VG_(gdbserver_report_fatal_signal) (info, tid);
    }
 
-   if (VG_(is_action_requested)( "Attach to debugger", & VG_(clo_db_attach) )) {
-      VG_(start_debugger)( tid );
-   }
-
    if (core) {
       static const struct vki_rlimit zero = { 0, 0 };
 
@@ -1833,7 +1935,7 @@
    ThreadState		*tst = VG_(get_ThreadState)(tid);
 
    if (VG_(clo_trace_signals))
-      VG_(dmsg)("delivering signal %d (%s):%d to thread %d\n", 
+      VG_(dmsg)("delivering signal %d (%s):%d to thread %u\n", 
                 sigNo, VG_(signame)(sigNo), info->si_code, tid );
 
    if (sigNo == VG_SIGVGKILL) {
@@ -2027,6 +2129,9 @@
    uc.uc_mcontext = &mc;
    uc.uc_mcontext->__es.__trapno = 3;
    uc.uc_mcontext->__es.__err = 0;
+#  elif defined(VGP_x86_solaris)
+   uc.uc_mcontext.gregs[VKI_ERR] = 0;
+   uc.uc_mcontext.gregs[VKI_TRAPNO] = VKI_T_BPTFLT;
 #  endif
 
    /* fixs390: do we need to do anything here for s390 ? */
@@ -2090,7 +2195,7 @@
    sq = tst->sig_queue;
 
    if (VG_(clo_trace_signals))
-      VG_(dmsg)("Queueing signal %d (idx %d) to thread %d\n",
+      VG_(dmsg)("Queueing signal %d (idx %d) to thread %u\n",
                 si->si_signo, sq->next, tid);
 
    /* Add signal to the queue.  If the queue gets overrun, then old
@@ -2100,7 +2205,7 @@
       least a non-siginfo signal gets deliviered.
    */
    if (sq->sigs[sq->next].si_signo != 0)
-      VG_(umsg)("Signal %d being dropped from thread %d's queue\n",
+      VG_(umsg)("Signal %d being dropped from thread %u's queue\n",
                 sq->sigs[sq->next].si_signo, tid);
 
    sq->sigs[sq->next] = *si;
@@ -2138,7 +2243,7 @@
       if (sq->sigs[idx].si_signo != 0 
           && VG_(sigismember)(set, sq->sigs[idx].si_signo)) {
 	 if (VG_(clo_trace_signals))
-            VG_(dmsg)("Returning queued signal %d (idx %d) for thread %d\n",
+            VG_(dmsg)("Returning queued signal %d (idx %d) for thread %u\n",
                       sq->sigs[idx].si_signo, idx, tid);
 	 ret = &sq->sigs[idx];
 	 goto out;
@@ -2162,13 +2267,117 @@
       mask them off) sign extends them when exporting to user space so
       we do the same thing here. */
    return (Short)si_code;
-#elif defined(VGO_darwin)
+#elif defined(VGO_darwin) || defined(VGO_solaris)
    return si_code;
 #else
 #  error Unknown OS
 #endif
 }
 
+#if defined(VGO_solaris)
+/* Following function is used to switch Valgrind from a client stack back onto
+   a Valgrind stack.  It is used only when the door_return call was invoked by
+   the client because this is the only syscall which is executed directly on
+   the client stack (see syscall-{x86,amd64}-solaris.S).  The switch onto the
+   Valgrind stack has to be made as soon as possible because there is no
+   guarantee that there is enough space on the client stack to run the
+   complete signal machinery.  Also, Valgrind has to be switched back onto its
+   stack before a simulated signal frame is created because that will
+   overwrite the real sigframe built by the kernel. */
+static void async_signalhandler_solaris_preprocess(ThreadId tid, Int *signo,
+                                                   vki_siginfo_t *info,
+                                                   struct vki_ucontext *uc)
+{
+#  define RECURSION_BIT 0x1000
+   Addr sp;
+   vki_sigframe_t *frame;
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   Int rec_signo;
+
+   /* If not doing door_return then return instantly. */
+   if (!tst->os_state.in_door_return)
+      return;
+
+   /* Check for the recursion:
+      v ...
+      | async_signalhandler - executed on the client stack
+      v async_signalhandler_solaris_preprocess - first call switches the
+      |   stacks and sets the RECURSION_BIT flag
+      v async_signalhandler - executed on the Valgrind stack
+      | async_signalhandler_solaris_preprocess - the RECURSION_BIT flag is
+      v   set, clear it and return
+    */
+   if (*signo & RECURSION_BIT) {
+      *signo &= ~RECURSION_BIT;
+      return;
+   }
+
+   rec_signo = *signo | RECURSION_BIT;
+
+#  if defined(VGP_x86_solaris)
+   /* Register %ebx/%rbx points to the top of the original V stack. */
+   sp = uc->uc_mcontext.gregs[VKI_EBX];
+#  elif defined(VGP_amd64_solaris)
+   sp = uc->uc_mcontext.gregs[VKI_REG_RBX];
+#  else
+#    error "Unknown platform"
+#  endif
+
+   /* Build a fake signal frame, similarly as in sigframe-solaris.c. */
+   /* Calculate a new stack pointer. */
+   sp -= sizeof(vki_sigframe_t);
+   sp = VG_ROUNDDN(sp, 16) - sizeof(UWord);
+
+   /* Fill in the frame. */
+   frame = (vki_sigframe_t*)sp;
+   /* Set a bogus return address. */
+   frame->return_addr = (void*)~0UL;
+   frame->a1_signo = rec_signo;
+   /* The first parameter has to be 16-byte aligned, resembling a function
+      call. */
+   {
+      /* Using
+         vg_assert(VG_IS_16_ALIGNED(&frame->a1_signo));
+         seems to get miscompiled on amd64 with GCC 4.7.2. */
+      Addr signo_addr = (Addr)&frame->a1_signo;
+      vg_assert(VG_IS_16_ALIGNED(signo_addr));
+   }
+   frame->a2_siginfo = &frame->siginfo;
+   frame->siginfo = *info;
+   frame->ucontext = *uc;
+
+#  if defined(VGP_x86_solaris)
+   frame->a3_ucontext = &frame->ucontext;
+
+   /* Switch onto the V stack and restart the signal processing. */
+   __asm__ __volatile__(
+      "xorl %%ebp, %%ebp\n"
+      "movl %[sp], %%esp\n"
+      "jmp async_signalhandler\n"
+      :
+      : [sp] "a" (sp)
+      : /*"ebp"*/);
+
+#  elif defined(VGP_amd64_solaris)
+   __asm__ __volatile__(
+      "xorq %%rbp, %%rbp\n"
+      "movq %[sp], %%rsp\n"
+      "jmp async_signalhandler\n"
+      :
+      : [sp] "a" (sp), "D" (rec_signo), "S" (&frame->siginfo),
+        "d" (&frame->ucontext)
+      : /*"rbp"*/);
+#  else
+#    error "Unknown platform"
+#  endif
+
+   /* We should never get here. */
+   vg_assert(0);
+
+#  undef RECURSION_BIT
+}
+#endif
+
 /* 
    Receive an async signal from the kernel.
 
@@ -2183,14 +2392,19 @@
    ThreadState* tst = VG_(get_ThreadState)(tid);
    SysRes       sres;
 
-   /* The thread isn't currently running, make it so before going on */
    vg_assert(tst->status == VgTs_WaitSys);
+
+#  if defined(VGO_solaris)
+   async_signalhandler_solaris_preprocess(tid, &sigNo, info, uc);
+#  endif
+
+   /* The thread isn't currently running, make it so before going on */
    VG_(acquire_BigLock)(tid, "async_signalhandler");
 
    info->si_code = sanitize_si_code(info->si_code);
 
    if (VG_(clo_trace_signals))
-      VG_(dmsg)("async signal handler: signal=%d, tid=%d, si_code=%d\n",
+      VG_(dmsg)("async signal handler: signal=%d, tid=%u, si_code=%d\n",
                 sigNo, tid, info->si_code);
 
    /* Update thread state properly.  The signal can only have been
@@ -2234,7 +2448,8 @@
       tid, 
       VG_UCONTEXT_INSTR_PTR(uc), 
       sres,  
-      !!(scss.scss_per_sig[sigNo].scss_flags & VKI_SA_RESTART)
+      !!(scss.scss_per_sig[sigNo].scss_flags & VKI_SA_RESTART),
+      uc
    );
 
    /* (2) */
@@ -2298,17 +2513,17 @@
    udelta = VG_PGROUNDUP(seg_next->start - addr);
 
    VG_(debugLog)(1, "signals", 
-                    "extending a stack base 0x%llx down by %lld\n",
-                    (ULong)seg_next->start, (ULong)udelta);
+                    "extending a stack base 0x%lx down by %lu\n",
+                    seg_next->start, udelta);
    Bool overflow;
    if (! VG_(am_extend_into_adjacent_reservation_client)
        ( seg_next->start, -(SSizeT)udelta, &overflow )) {
       Addr new_stack_base = seg_next->start - udelta;
       if (overflow)
-         VG_(umsg)("Stack overflow in thread #%d: can't grow stack to %#lx\n",
+         VG_(umsg)("Stack overflow in thread #%u: can't grow stack to %#lx\n",
                    tid, new_stack_base);
       else
-         VG_(umsg)("Cannot map memory to grow the stack for thread #%d "
+         VG_(umsg)("Cannot map memory to grow the stack for thread #%u "
                    "to %#lx\n", tid, new_stack_base);
       return False;
    }
@@ -2323,16 +2538,13 @@
    return True;
 }
 
-static void (*fault_catcher)(Int sig, Addr addr) = NULL;
+static fault_catcher_t fault_catcher = NULL;
 
-void VG_(set_fault_catcher)(void (*catcher)(Int, Addr))
+fault_catcher_t VG_(set_fault_catcher)(fault_catcher_t catcher)
 {
-   if (0)
-      VG_(debugLog)(0, "signals", "set fault catcher to %p\n", catcher);
-   vg_assert2(NULL == catcher || NULL == fault_catcher,
-              "Fault catcher is already registered");
-
+   fault_catcher_t prev_catcher = fault_catcher;
    fault_catcher = catcher;
+   return prev_catcher;
 }
 
 static
@@ -2345,7 +2557,13 @@
       of a faulting instruction), then how we treat it depends on when it
       arrives... */
 
-   if (VG_(threads)[tid].status == VgTs_WaitSys) {
+   if (VG_(threads)[tid].status == VgTs_WaitSys
+#     if defined(VGO_solaris)
+      /* Check if the signal was really received while doing a blocking
+         syscall.  Only then the async_signalhandler() path can be used. */
+       && VG_(is_ip_in_blocking_syscall)(tid, VG_UCONTEXT_INSTR_PTR(uc))
+#     endif
+         ) {
       /* Signal arrived while we're blocked in a syscall.  This means that
          the client's signal mask was applied.  In other words, so we can't
          get here unless the client wants this signal right now.  This means
@@ -2443,11 +2661,11 @@
 
    if (VG_(clo_trace_signals)) {
       if (seg == NULL)
-         VG_(dmsg)("SIGSEGV: si_code=%d faultaddr=%#lx tid=%d ESP=%#lx "
+         VG_(dmsg)("SIGSEGV: si_code=%d faultaddr=%#lx tid=%u ESP=%#lx "
                    "seg=NULL\n",
                    info->si_code, fault, tid, esp);
       else
-         VG_(dmsg)("SIGSEGV: si_code=%d faultaddr=%#lx tid=%d ESP=%#lx "
+         VG_(dmsg)("SIGSEGV: si_code=%d faultaddr=%#lx tid=%u ESP=%#lx "
                    "seg=%#lx-%#lx\n",
                    info->si_code, fault, tid, esp, seg->start, seg->end);
    }
@@ -2531,7 +2749,7 @@
                 "a signal %d (%s) - exiting\n",
                 sigNo, VG_(signame)(sigNo));
 
-      VG_(dmsg)("si_code=%x;  Faulting address: %p;  sp: %#lx\n",
+      VG_(dmsg)("si_code=%d;  Faulting address: %p;  sp: %#lx\n",
                 info->si_code, info->VKI_SIGINFO_si_addr,
                 VG_UCONTEXT_STACK_PTR(uc));
 
@@ -2605,6 +2823,11 @@
    } else {
       sync_signalhandler_from_kernel(tid, sigNo, info, uc);
    }
+
+#  if defined(VGO_solaris)
+   /* On Solaris we have to return from signal handler manually. */
+   VG_(do_syscall2)(__NR_context, VKI_SETCONTEXT, (UWord)uc);
+#  endif
 }
 
 
@@ -2620,7 +2843,7 @@
    ThreadStatus at_signal = VG_(threads)[tid].status;
 
    if (VG_(clo_trace_signals))
-      VG_(dmsg)("sigvgkill for lwp %d tid %d\n", VG_(gettid)(), tid);
+      VG_(dmsg)("sigvgkill for lwp %d tid %u\n", VG_(gettid)(), tid);
 
    VG_(acquire_BigLock)(tid, "sigvgkill_handler");
 
@@ -2653,7 +2876,8 @@
    VG_(printf)("pp_ksigaction: handler %p, flags 0x%x, restorer %p\n", 
                sa->ksa_handler, 
                (UInt)sa->sa_flags, 
-#              if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin)
+#              if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \
+                  !defined(VGO_solaris)
                   sa->sa_restorer
 #              else
                   (void*)0
@@ -2675,7 +2899,8 @@
 
    sa.ksa_handler = VKI_SIG_DFL;
    sa.sa_flags = 0;
-#  if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin)
+#  if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \
+      !defined(VGO_solaris)
    sa.sa_restorer = 0;
 #  endif
    VG_(sigemptyset)(&sa.sa_mask);
@@ -2708,7 +2933,7 @@
    /* If there was nothing queued, ask the kernel for a pending signal */
    if (sip == NULL && VG_(sigtimedwait_zero)(&pollset, &si) > 0) {
       if (VG_(clo_trace_signals))
-         VG_(dmsg)("poll_signals: got signal %d for thread %d\n",
+         VG_(dmsg)("poll_signals: got signal %d for thread %u\n",
                    si.si_signo, tid);
       sip = &si;
    }
@@ -2716,7 +2941,7 @@
    if (sip != NULL) {
       /* OK, something to do; deliver it */
       if (VG_(clo_trace_signals))
-         VG_(dmsg)("Polling found signal %d for tid %d\n", sip->si_signo, tid);
+         VG_(dmsg)("Polling found signal %d for tid %u\n", sip->si_signo, tid);
       if (!is_sig_ign(sip, tid))
 	 deliver_signal(tid, sip, NULL);
       else if (VG_(clo_trace_signals))
@@ -2777,7 +3002,8 @@
 
 	 tsa.ksa_handler = (void *)sync_signalhandler;
 	 tsa.sa_flags = VKI_SA_SIGINFO;
-#        if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin)
+#        if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \
+            !defined(VGO_solaris)
 	 tsa.sa_restorer = 0;
 #        endif
 	 VG_(sigfillset)(&tsa.sa_mask);
@@ -2804,7 +3030,8 @@
       scss.scss_per_sig[i].scss_mask     = sa.sa_mask;
 
       scss.scss_per_sig[i].scss_restorer = NULL;
-#     if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin)
+#     if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \
+         !defined(VGO_solaris)
       scss.scss_per_sig[i].scss_restorer = sa.sa_restorer;
 #     endif
 
diff --git a/coregrind/m_sparsewa.c b/coregrind/m_sparsewa.c
index 3f111c4..a8a845d 100644
--- a/coregrind/m_sparsewa.c
+++ b/coregrind/m_sparsewa.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_stacks.c b/coregrind/m_stacks.c
index 3a2e3d0..aac5ebf 100644
--- a/coregrind/m_stacks.c
+++ b/coregrind/m_stacks.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -103,7 +103,7 @@
  */
 static Stack *current_stack;
 
-/* Find 'st' in the stacks_list and move it one step closer the the
+/* Find 'st' in the stacks_list and move it one step closer to the
    front of the list, so as to make subsequent searches for it
    cheaper. */
 static void move_Stack_one_step_forward ( Stack* st )
@@ -411,8 +411,9 @@
                 (void *) current_stack->end,                            \
                 current_stack->id);                                     \
          return;                                                        \
-      } else                                                            \
+      } else {                                                          \
          EDEBUG("new current_stack not found\n");                       \
+      }                                                                 \
    }
 
 #define IF_BIG_DELTA_complaints_AND_RETURN                              \
diff --git a/coregrind/m_stacktrace.c b/coregrind/m_stacktrace.c
index b2d1886..8c1e9a4 100644
--- a/coregrind/m_stacktrace.c
+++ b/coregrind/m_stacktrace.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -40,6 +40,7 @@
 #include "pub_core_options.h"
 #include "pub_core_stacks.h"        // VG_(stack_limits)
 #include "pub_core_stacktrace.h"
+#include "pub_core_syswrap.h"       // VG_(is_in_syscall)
 #include "pub_core_xarray.h"
 #include "pub_core_clientstate.h"   // VG_(client__dl_sysinfo_int80)
 #include "pub_core_trampoline.h"
@@ -65,20 +66,35 @@
    of up to _nframes.  The merge is done during stack unwinding
    (i.e. in platform specific unwinders) to collect as many
    "interesting" stack traces as possible. */
-#define RECURSIVE_MERGE(_nframes,_ips,_i){                      \
-   Int dist;                                                    \
-   for (dist = 1; dist <= _nframes && dist < (Int)_i; dist++) { \
-      if (_ips[_i-1] == _ips[_i-1-dist]) {                      \
-         _i = _i - dist;                                        \
-         break;                                                 \
-      }                                                         \
-   }                                                            \
-}
+#define RECURSIVE_MERGE(_nframes,_ips,_i) if (UNLIKELY(_nframes > 0)) \
+do {                                                                  \
+   Int dist;                                                          \
+   for (dist = 1; dist <= _nframes && dist < (Int)_i; dist++) {       \
+      if (_ips[_i-1] == _ips[_i-1-dist]) {                            \
+         _i = _i - dist;                                              \
+         break;                                                       \
+      }                                                               \
+   }                                                                  \
+} while (0)
 
-
+/* Note about calculation of fp_min : fp_min is the lowest address
+   which can be accessed during unwinding. This is SP - VG_STACK_REDZONE_SZB.
+   On most platforms, this will be equal to SP (as VG_STACK_REDZONE_SZB
+   is 0). However, on some platforms (e.g. amd64), there is an accessible
+   redzone below the SP. Some CFI unwind info are generated, taking this
+   into account. As an example, the following is a CFI unwind info on
+   amd64 found for a 'retq' instruction:
+[0x400f7e .. 0x400f7e]: let cfa=oldSP+8 in RA=*(cfa+-8) SP=cfa+0 BP=*(cfa+-16)
+  0x400f7e: retq
+  As you can see, the previous BP is found 16 bytes below the cfa, which
+  is the oldSP+8. So, effectively, the BP is found 8 bytes below the SP.
+  The fp_min must take this into account, otherwise, VG_(use_CF_info) will
+  not unwind the BP. */
+   
 /* ------------------------ x86 ------------------------- */
 
-#if defined(VGP_x86_linux) || defined(VGP_x86_darwin)
+#if defined(VGP_x86_linux) || defined(VGP_x86_darwin) \
+    || defined(VGP_x86_solaris)
 
 #define N_FP_CF_VERIF 1021
 // prime number so that size of fp_CF_verif is just below 4K or 8K
@@ -129,11 +145,16 @@
    then they will not land in the same cache bucket.
 */
 
+/* cached result of VG_(FPO_info_present)(). Refreshed each time
+   the fp_CF_verif_generation is different of the current debuginfo
+   generation. */
+static Bool FPO_info_present = False;
+
 static UInt fp_CF_verif_generation = 0;
 // Our cache has to be maintained in sync with the CFI cache.
-// Each time the CFI cache is changed, its generation will be incremented.
+// Each time the debuginfo is changed, its generation will be incremented.
 // We will clear our cache when our saved generation differs from
-// the CFI cache generation.
+// the debuginfo generation.
 
 UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
                                /*OUT*/Addr* ips, UInt max_n_ips,
@@ -191,7 +212,7 @@
    uregs.xip = (Addr)startRegs->r_pc;
    uregs.xsp = (Addr)startRegs->r_sp;
    uregs.xbp = startRegs->misc.X86.r_ebp;
-   Addr fp_min = uregs.xsp;
+   Addr fp_min = uregs.xsp - VG_STACK_REDZONE_SZB;
 
    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
       stopping when the trail goes cold, which we guess to be
@@ -205,7 +226,7 @@
       fp_max -= sizeof(Addr);
 
    if (debug)
-      VG_(printf)("max_n_ips=%d fp_min=0x%08lx fp_max_orig=0x08%lx, "
+      VG_(printf)("max_n_ips=%u fp_min=0x%08lx fp_max_orig=0x08%lx, "
                   "fp_max=0x%08lx ip=0x%08lx fp=0x%08lx\n",
                   max_n_ips, fp_min, fp_max_orig, fp_max,
                   uregs.xip, uregs.xbp);
@@ -215,10 +236,18 @@
    /* vg_assert(fp_min <= fp_max);*/
    // On Darwin, this kicks in for pthread-related stack traces, so they're
    // only 1 entry long which is wrong.
-#  if !defined(VGO_darwin)
+#  if defined(VGO_linux)
    if (fp_min + 512 >= fp_max) {
       /* If the stack limits look bogus, don't poke around ... but
          don't bomb out either. */
+#  elif defined(VGO_solaris)
+   if (fp_max == 0) {
+      /* VG_(get_StackTrace)() can be called by tools very early when
+         various tracing options are enabled. Don't proceed further
+         if the stack limits look bogus.
+       */
+#  endif
+#  if defined(VGO_linux) || defined(VGO_solaris)
       if (sps) sps[0] = uregs.xsp;
       if (fps) fps[0] = uregs.xbp;
       ips[0] = uregs.xip;
@@ -226,9 +255,10 @@
    } 
 #  endif
 
-   if (UNLIKELY (fp_CF_verif_generation != VG_(CF_info_generation)())) {
-      fp_CF_verif_generation = VG_(CF_info_generation)();
+   if (UNLIKELY (fp_CF_verif_generation != VG_(debuginfo_generation)())) {
+      fp_CF_verif_generation = VG_(debuginfo_generation)();
       VG_(memset)(&fp_CF_verif_cache, 0, sizeof(fp_CF_verif_cache));
+      FPO_info_present = VG_(FPO_info_present)();
    }
 
 
@@ -317,7 +347,8 @@
       /* This deals with frames resulting from functions which begin "pushl%
          ebp ; movl %esp, %ebp" which is the ABI-mandated preamble. */
       if (fp_min <= uregs.xbp &&
-          uregs.xbp <= fp_max - 1 * sizeof(UWord)/*see comment below*/)
+          uregs.xbp <= fp_max - 1 * sizeof(UWord)/*see comment below*/ &&
+          VG_IS_4_ALIGNED(uregs.xbp))
       {
          /* fp looks sane, so use it. */
          uregs.xip = (((UWord*)uregs.xbp)[1]);
@@ -398,8 +429,9 @@
       }
 
       /* And, similarly, try for MSVC FPO unwind info. */
-      if ( VG_(use_FPO_info)( &uregs.xip, &uregs.xsp, &uregs.xbp,
-                              fp_min, fp_max ) ) {
+      if (FPO_info_present
+          && VG_(use_FPO_info)( &uregs.xip, &uregs.xsp, &uregs.xbp,
+                                fp_min, fp_max ) ) {
          if (debug) unwind_case = "MS";
          if (do_stats) stats.MS++;
          goto unwind_done;
@@ -420,7 +452,7 @@
          VG_(printf)("     ips%s[%d]=0x%08lx\n", unwind_case, i-1, ips[i-1]);
       uregs.xip = uregs.xip - 1;
       /* as per comment at the head of this loop */
-      if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+      RECURSIVE_MERGE(cmrf,ips,i);
    }
 
    if (do_stats) stats.nf += i;
@@ -451,7 +483,8 @@
 
 /* ----------------------- amd64 ------------------------ */
 
-#if defined(VGP_amd64_linux) || defined(VGP_amd64_darwin)
+#if defined(VGP_amd64_linux) || defined(VGP_amd64_darwin) \
+    || defined(VGP_amd64_solaris)
 
 UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
                                /*OUT*/Addr* ips, UInt max_n_ips,
@@ -459,7 +492,7 @@
                                const UnwindStartRegs* startRegs,
                                Addr fp_max_orig )
 {
-   Bool  debug = False;
+   const Bool  debug = False;
    Int   i;
    Addr  fp_max;
    UInt  n_found = 0;
@@ -472,7 +505,7 @@
    uregs.xip = startRegs->r_pc;
    uregs.xsp = startRegs->r_sp;
    uregs.xbp = startRegs->misc.AMD64.r_rbp;
-   Addr fp_min = uregs.xsp;
+   Addr fp_min = uregs.xsp - VG_STACK_REDZONE_SZB;
 
    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
       stopping when the trail goes cold, which we guess to be
@@ -486,7 +519,7 @@
       fp_max -= sizeof(Addr);
 
    if (debug)
-      VG_(printf)("max_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
+      VG_(printf)("max_n_ips=%u fp_min=0x%lx fp_max_orig=0x%lx, "
                   "fp_max=0x%lx ip=0x%lx fp=0x%lx\n",
                   max_n_ips, fp_min, fp_max_orig, fp_max,
                   uregs.xip, uregs.xbp);
@@ -496,10 +529,19 @@
    /* vg_assert(fp_min <= fp_max);*/
    // On Darwin, this kicks in for pthread-related stack traces, so they're
    // only 1 entry long which is wrong.
-#  if !defined(VGO_darwin)
+#  if defined(VGO_linux)
    if (fp_min + 256 >= fp_max) {
       /* If the stack limits look bogus, don't poke around ... but
          don't bomb out either. */
+#  elif defined(VGO_solaris)
+   if (fp_max == 0) {
+      /* VG_(get_StackTrace)() can be called by tools very early when
+         various tracing options are enabled. Don't proceed further
+         if the stack limits look bogus.
+       */
+#  endif
+#  if defined(VGO_linux) || defined(VGO_solaris)
+
       if (sps) sps[0] = uregs.xsp;
       if (fps) fps[0] = uregs.xbp;
       ips[0] = uregs.xip;
@@ -513,6 +555,9 @@
    if (sps) sps[0] = uregs.xsp;
    if (fps) fps[0] = uregs.xbp;
    i = 1;
+   if (debug)
+      VG_(printf)("     ipsS[%d]=%#08lx rbp %#08lx rsp %#08lx\n",
+                  i-1, ips[i-1], uregs.xbp, uregs.xsp);
 
 #  if defined(VGO_darwin)
    if (VG_(is_valid_tid)(tid_if_known) &&
@@ -561,9 +606,10 @@
          if (fps) fps[i] = uregs.xbp;
          ips[i++] = uregs.xip - 1; /* -1: refer to calling insn, not the RA */
          if (debug)
-            VG_(printf)("     ipsC[%d]=%#08lx\n", i-1, ips[i-1]);
+            VG_(printf)("     ipsC[%d]=%#08lx rbp %#08lx rsp %#08lx\n",
+                        i-1, ips[i-1], uregs.xbp, uregs.xsp);
          uregs.xip = uregs.xip - 1; /* as per comment at the head of this loop */
-         if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+         RECURSIVE_MERGE(cmrf,ips,i);
          continue;
       }
 
@@ -590,9 +636,10 @@
          if (fps) fps[i] = uregs.xbp;
          ips[i++] = uregs.xip - 1; /* -1: refer to calling insn, not the RA */
          if (debug)
-            VG_(printf)("     ipsF[%d]=%#08lx\n", i-1, ips[i-1]);
+            VG_(printf)("     ipsF[%d]=%#08lx rbp %#08lx rsp %#08lx\n",
+                        i-1, ips[i-1], uregs.xbp, uregs.xsp);
          uregs.xip = uregs.xip - 1; /* as per comment at the head of this loop */
-         if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+         RECURSIVE_MERGE(cmrf,ips,i);
          continue;
       }
 
@@ -622,7 +669,7 @@
             VG_(printf)("     ipsH[%d]=%#08lx\n", i-1, ips[i-1]);
          uregs.xip = uregs.xip - 1; /* as per comment at the head of this loop */
          uregs.xsp += 8;
-         if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+         RECURSIVE_MERGE(cmrf,ips,i);
          continue;
       }
 
@@ -670,7 +717,7 @@
 #  elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
    Addr lr = startRegs->misc.PPC64.r_lr;
 #  endif
-   Addr fp_min = sp;
+   Addr fp_min = sp - VG_STACK_REDZONE_SZB;
 
    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
       stopping when the trail goes cold, which we guess to be
@@ -684,7 +731,7 @@
       fp_max -= sizeof(Addr);
 
    if (debug)
-      VG_(printf)("max_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
+      VG_(printf)("max_n_ips=%u fp_min=0x%lx fp_max_orig=0x%lx, "
                   "fp_max=0x%lx ip=0x%lx fp=0x%lx\n",
 		  max_n_ips, fp_min, fp_max_orig, fp_max, ip, fp);
 
@@ -812,7 +859,7 @@
             ip = ip - 1; /* ip is probably dead at this point, but
                             play safe, a la x86/amd64 above.  See
                             extensive comments above. */
-            if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+            RECURSIVE_MERGE(cmrf,ips,i);
             continue;
          }
 
@@ -935,7 +982,7 @@
    uregs.r12 = startRegs->misc.ARM.r12;
    uregs.r11 = startRegs->misc.ARM.r11;
    uregs.r7  = startRegs->misc.ARM.r7;
-   Addr fp_min = uregs.r13;
+   Addr fp_min = uregs.r13 - VG_STACK_REDZONE_SZB;
 
    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
       stopping when the trail goes cold, which we guess to be
@@ -949,7 +996,7 @@
       fp_max -= sizeof(Addr);
 
    if (debug)
-      VG_(printf)("\nmax_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
+      VG_(printf)("\nmax_n_ips=%u fp_min=0x%lx fp_max_orig=0x%lx, "
                   "fp_max=0x%lx r15=0x%lx r13=0x%lx\n",
                   max_n_ips, fp_min, fp_max_orig, fp_max,
                   uregs.r15, uregs.r13);
@@ -996,7 +1043,7 @@
             VG_(printf)("USING CFI: r15: 0x%lx, r13: 0x%lx\n",
                         uregs.r15, uregs.r13);
          uregs.r15 = (uregs.r15 & 0xFFFFFFFE) - 1;
-         if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+         RECURSIVE_MERGE(cmrf,ips,i);
          continue;
       }
 
@@ -1024,7 +1071,7 @@
             if (sps) sps[i] = 0;
             if (fps) fps[i] = 0;
             ips[i++] = cand;
-            if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+            RECURSIVE_MERGE(cmrf,ips,i);
             nByStackScan++;
          }
       }
@@ -1041,7 +1088,7 @@
                if (sps) sps[i] = 0;
                if (fps) fps[i] = 0;
                ips[i++] = cand;
-               if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+               RECURSIVE_MERGE(cmrf,ips,i);
                if (++nByStackScan >= VG_(clo_unw_stack_scan_frames)) break;
             }
          }
@@ -1079,7 +1126,7 @@
    uregs.sp = startRegs->r_sp;
    uregs.x30 = startRegs->misc.ARM64.x30;
    uregs.x29 = startRegs->misc.ARM64.x29;
-   Addr fp_min = uregs.sp;
+   Addr fp_min = uregs.sp - VG_STACK_REDZONE_SZB;
 
    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
       stopping when the trail goes cold, which we guess to be
@@ -1093,7 +1140,7 @@
       fp_max -= sizeof(Addr);
 
    if (debug)
-      VG_(printf)("\nmax_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
+      VG_(printf)("\nmax_n_ips=%u fp_min=0x%lx fp_max_orig=0x%lx, "
                   "fp_max=0x%lx PC=0x%lx SP=0x%lx\n",
                   max_n_ips, fp_min, fp_max_orig, fp_max,
                   uregs.pc, uregs.sp);
@@ -1137,7 +1184,7 @@
             VG_(printf)("USING CFI: pc: 0x%lx, sp: 0x%lx\n",
                         uregs.pc, uregs.sp);
          uregs.pc = uregs.pc - 1;
-         if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+         RECURSIVE_MERGE(cmrf,ips,i);
          continue;
       }
 
@@ -1173,7 +1220,7 @@
    D3UnwindRegs uregs;
    uregs.ia = startRegs->r_pc;
    uregs.sp = startRegs->r_sp;
-   Addr fp_min = uregs.sp;
+   Addr fp_min = uregs.sp - VG_STACK_REDZONE_SZB;
    uregs.fp = startRegs->misc.S390X.r_fp;
    uregs.lr = startRegs->misc.S390X.r_lr;
 
@@ -1182,7 +1229,7 @@
       fp_max -= sizeof(Addr);
 
    if (debug)
-      VG_(printf)("max_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
+      VG_(printf)("max_n_ips=%u fp_min=0x%lx fp_max_orig=0x%lx, "
                   "fp_max=0x%lx IA=0x%lx SP=0x%lx FP=0x%lx\n",
                   max_n_ips, fp_min, fp_max_orig, fp_max,
                   uregs.ia, uregs.sp,uregs.fp);
@@ -1205,7 +1252,7 @@
          if (fps) fps[i] = uregs.fp;
          ips[i++] = uregs.ia - 1;
          uregs.ia = uregs.ia - 1;
-         if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+         RECURSIVE_MERGE(cmrf,ips,i);
          continue;
       }
       /* A problem on the first frame? Lets assume it was a bad jump.
@@ -1222,7 +1269,7 @@
          }
          uregs.ia = uregs.lr - 1;
          ips[i++] = uregs.lr - 1;
-         if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+         RECURSIVE_MERGE(cmrf,ips,i);
          continue;
       }
 
@@ -1256,7 +1303,7 @@
    D3UnwindRegs uregs;
    uregs.pc = startRegs->r_pc;
    uregs.sp = startRegs->r_sp;
-   Addr fp_min = uregs.sp;
+   Addr fp_min = uregs.sp - VG_STACK_REDZONE_SZB;
 
 #if defined(VGP_mips32_linux)
    uregs.fp = startRegs->misc.MIPS32.r30;
@@ -1275,7 +1322,7 @@
       fp_max -= sizeof(Addr);
 
    if (debug)
-      VG_(printf)("max_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
+      VG_(printf)("max_n_ips=%u fp_min=0x%lx fp_max_orig=0x%lx, "
                   "fp_max=0x%lx pc=0x%lx sp=0x%lx fp=0x%lx\n",
                   max_n_ips, fp_min, fp_max_orig, fp_max,
                   uregs.pc, uregs.sp, uregs.fp);
@@ -1305,7 +1352,7 @@
             if (fps) fps[i] = uregs.fp;
             ips[i++] = uregs.pc - 4;
             uregs.pc = uregs.pc - 4;
-            if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+            RECURSIVE_MERGE(cmrf,ips,i);
             continue;
          } else
             uregs = uregs_copy;
@@ -1362,7 +1409,7 @@
          if (0 == uregs.ra || 1 == uregs.ra) break;
          uregs.pc = uregs.ra - 8;
          ips[i++] = uregs.ra - 8;
-         if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+         RECURSIVE_MERGE(cmrf,ips,i);
          continue;
       }
 
@@ -1378,7 +1425,7 @@
          if (0 == uregs.ra || 1 == uregs.ra) break;
          uregs.pc = uregs.ra - 8;
          ips[i++] = uregs.ra - 8;
-         if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+         RECURSIVE_MERGE(cmrf,ips,i);
          continue;
       }
       /* No luck.  We have to give up. */
@@ -1411,7 +1458,7 @@
    D3UnwindRegs uregs;
    uregs.pc = startRegs->r_pc;
    uregs.sp = startRegs->r_sp;
-   Addr fp_min = uregs.sp;
+   Addr fp_min = uregs.sp - VG_STACK_REDZONE_SZB;
 
    uregs.fp = startRegs->misc.TILEGX.r52;
    uregs.lr = startRegs->misc.TILEGX.r55;
@@ -1421,7 +1468,7 @@
       fp_max -= sizeof(Addr);
 
    if (debug)
-      VG_(printf)("max_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
+      VG_(printf)("max_n_ips=%u fp_min=0x%lx fp_max_orig=0x%lx, "
                   "fp_max=0x%lx pc=0x%lx sp=0x%lx fp=0x%lx\n",
                   max_n_ips, fp_min, fp_max_orig, fp_max,
                   uregs.pc, uregs.sp, uregs.fp);
@@ -1452,7 +1499,7 @@
            if (uregs.pc != uregs_copy.pc && uregs.sp != uregs_copy.sp)
               ips[i++] = uregs.pc - 8;
            uregs.pc = uregs.pc - 8;
-           if (UNLIKELY(cmrf > 0)) { RECURSIVE_MERGE(cmrf,ips,i); };
+           RECURSIVE_MERGE(cmrf,ips,i);
            continue;
         } else
            uregs = uregs_copy;
@@ -1552,7 +1599,7 @@
 
            ips[i++] = uregs.pc;
 
-           if (UNLIKELY(cmrf > 0)) { RECURSIVE_MERGE(cmrf,ips,i); };
+           RECURSIVE_MERGE(cmrf,ips,i);
         }
         continue;
      }
@@ -1574,7 +1621,7 @@
 
         uregs.pc = uregs.lr - 8;
         ips[i++] = uregs.lr - 8;
-        if (UNLIKELY(cmrf > 0)) { RECURSIVE_MERGE(cmrf,ips,i); };
+        RECURSIVE_MERGE(cmrf,ips,i);
         continue;
      }
      /* No luck.  We have to give up. */
@@ -1659,9 +1706,9 @@
    startRegs.r_pc += (Long)(Word)first_ip_delta;
 
    if (0)
-      VG_(printf)("tid %d: stack_highest=0x%08lx ip=0x%010llx "
+      VG_(printf)("tid %u: stack_highest=0x%08lx ip=0x%010llx "
                   "sp=0x%010llx\n",
-		  tid, stack_highest_byte,
+                  tid, stack_highest_byte,
                   startRegs.r_pc, startRegs.r_sp);
 
    return VG_(get_StackTrace_wrk)(tid, ips, max_n_ips, 
diff --git a/coregrind/m_syscall.c b/coregrind/m_syscall.c
index f152b72..308fcfe 100644
--- a/coregrind/m_syscall.c
+++ b/coregrind/m_syscall.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -38,11 +38,59 @@
    Building syscall return values.
    ------------------------------------------------------------------ */
 
-#if defined(VGO_linux)
-
 /* Make a SysRes value from a syscall return value.  This is
-   Linux-specific.
+   platform specific. */
 
+#if defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
+
+SysRes VG_(mk_SysRes_mips32_linux) ( UWord v0, UWord v1, UWord a3 ) {
+   /* MIPS uses a3 != 0 to flag an error */
+   SysRes res;
+   res._isError = (a3 != (UWord)0);
+   res._val     = v0;
+   res._valEx   = v1;
+   return res;
+}
+
+SysRes VG_(mk_SysRes_mips64_linux) ( ULong v0, ULong v1, ULong a3 ) {
+   /* MIPS uses a3 != 0 to flag an error */
+   SysRes res;
+   res._isError = (a3 != (ULong)0);
+   res._val     = v0;
+   res._valEx   = v1;
+   return res;
+}
+
+/* Generic constructors. */
+SysRes VG_(mk_SysRes_Error) ( UWord err ) {
+   SysRes r;
+   r._isError = True;
+   r._val     = err;
+   r._valEx   = 0;
+   return r;
+}
+
+SysRes VG_(mk_SysRes_Success) ( UWord res ) {
+   SysRes r;
+   r._isError = False;
+   r._val     = res;
+   r._valEx   = 0;
+   return r;
+}
+
+SysRes VG_(mk_SysRes_SuccessEx) ( UWord res, UWord resEx ) {
+   SysRes r;
+   r._isError = False;
+   r._val     = res;
+   r._valEx   = resEx;
+   return r;
+}
+
+
+#elif defined(VGO_linux) \
+      && !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux)
+
+/*
    From:
    http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/unix/sysv/
    linux/i386/sysdep.h?
@@ -144,32 +192,9 @@
    return res;
 }
 
-#if defined(VGA_mips64) || defined(VGA_mips32)
-/* MIPS uses a3 != 0 to flag an error */
-SysRes VG_(mk_SysRes_mips32_linux) ( UWord v0, UWord v1, UWord a3 ) {
-   SysRes res;
-   res._isError = (a3 != (UWord)0);
-   res._val     = v0;
-   res._valEx   = v1;
-   return res;
-}
-
-/* MIPS uses a3 != 0 to flag an error */
-SysRes VG_(mk_SysRes_mips64_linux) ( ULong v0, ULong v1, ULong a3 ) {
-   SysRes res;
-   res._isError = (a3 != (ULong)0);
-   res._val     = v0;
-   res._valEx   = v1;
-   return res;
-}
-#endif
-
 /* Generic constructors. */
 SysRes VG_(mk_SysRes_Error) ( UWord err ) {
    SysRes r;
-#if defined(VGA_mips64) || defined(VGA_mips32)
-   r._valEx   = 0;
-#endif
    r._isError = True;
    r._val     = err;
    return r;
@@ -177,9 +202,6 @@
 
 SysRes VG_(mk_SysRes_Success) ( UWord res ) {
    SysRes r;
-#if defined(VGA_mips64) || defined(VGA_mips32)
-   r._valEx   = 0;
-#endif
    r._isError = False;
    r._val     = res;
    return r;
@@ -275,6 +297,51 @@
 }
 
 
+#elif defined(VGO_solaris)
+
+/* Generic constructors. */
+SysRes VG_(mk_SysRes_Error) ( UWord err ) {
+   SysRes r;
+   r._val     = err;
+   r._val2    = 0;
+   r._isError = True;
+   return r;
+}
+
+SysRes VG_(mk_SysRes_Success) ( UWord res ) {
+   SysRes r;
+   r._val     = res;
+   r._val2    = 0;
+   r._isError = False;
+   return r;
+}
+
+SysRes VG_(mk_SysRes_x86_solaris) ( Bool isErr, UInt val, UInt val2 )
+{
+   SysRes res;
+
+   // stay sane
+   vg_assert(isErr == True || isErr == False);
+
+   res._val  = val;
+   res._val2 = val2;
+   res._isError = isErr;
+   return res;
+}
+
+SysRes VG_(mk_SysRes_amd64_solaris) ( Bool isErr, ULong val, ULong val2 )
+{
+   SysRes res;
+
+   // stay sane
+   vg_assert(isErr == True || isErr == False);
+
+   res._val  = val;
+   res._val2 = val2;
+   res._isError = isErr;
+   return res;
+}
+
 #else
 #  error "Unknown OS"
 #endif
@@ -782,6 +849,93 @@
     ".previous\n"
     );
 
+#elif defined(VGP_x86_solaris)
+
+extern ULong
+do_syscall_WRK(UWord a1, UWord a2, UWord a3,    /* 4(esp)..12(esp) */
+               UWord a4, UWord a5, UWord a6,    /* 16(esp)..24(esp) */
+               UWord a7, UWord a8,              /* 28(esp)..32(esp) */
+               UWord syscall_no,                /* 36(esp) */
+               /*OUT*/UInt *errflag);           /* 40(esp) */
+/* Classic unix syscall.. parameters on the stack, an unused (by the kernel)
+   return address at 0(esp), a sysno in eax, a result in edx:eax, the carry
+   flag set on error. */
+__asm__ (
+".text\n"
+".globl do_syscall_WRK\n"
+"do_syscall_WRK:\n"
+"       movl    40(%esp), %ecx\n"       /* assume syscall success */
+"       movl    $0, (%ecx)\n"
+"       movl    36(%esp), %eax\n"
+"       int     $0x91\n"
+"       jnc     1f\n"                   /* jump if success */
+"       movl    40(%esp), %ecx\n"       /* syscall failed - set *errflag */
+"       movl    $1, (%ecx)\n"
+"1:     ret\n"
+".previous\n"
+);
+
+extern ULong
+do_syscall_fast_WRK(UWord syscall_no);          /* 4(esp) */
+/* Fasttrap syscall.. no parameters, a sysno in eax, a result in edx:eax,
+   never fails (if the sysno is valid). */
+__asm__ (
+".text\n"
+".globl do_syscall_fast_WRK\n"
+"do_syscall_fast_WRK:\n"
+"       movl    4(%esp), %eax\n"
+"       int     $0xD2\n"
+"       ret\n"
+".previous\n"
+);
+
+#elif defined(VGP_amd64_solaris)
+
+extern ULong
+do_syscall_WRK(UWord a1, UWord a2, UWord a3,    /* rdi, rsi, rdx */
+               UWord a4, UWord a5, UWord a6,    /* rcx, r8, r9 */
+               UWord a7, UWord a8,              /* 8(rsp), 16(rsp) */
+               UWord syscall_no,                /* 24(rsp) */
+               /*OUT*/ULong *errflag,           /* 32(rsp) */
+               /*OUT*/ULong *res2);             /* 40(rsp) */
+/* First 6 parameters in registers rdi, rsi, rdx, r10, r8, r9, next
+   2 parameters on the stack, an unused (by the kernel) return address at
+   0(rsp), a sysno in rax, a result in rdx:rax, the carry flag set on
+   error. */
+__asm__ (
+".text\n"
+".globl do_syscall_WRK\n"
+"do_syscall_WRK:\n"
+"       movq    %rcx, %r10\n"           /* pass rcx in r10 instead */
+"       movq    32(%rsp), %rcx\n"       /* assume syscall success */
+"       movq    $0, (%rcx)\n"
+"       movq    24(%rsp), %rax\n"
+"       syscall\n"
+"       jnc     1f\n"                   /* jump if success */
+"       movq    32(%rsp), %rcx\n"       /* syscall failed - set *errflag */
+"       movq    $1, (%rcx)\n"
+"1:     movq    40(%rsp), %rcx\n"       /* save 2nd result word */
+"       movq    %rdx, (%rcx)\n"
+"       ret\n"
+".previous\n"
+);
+
+extern ULong
+do_syscall_fast_WRK(UWord syscall_no,           /* rdi */
+                    /*OUT*/ULong *res2);        /* rsi */
+/* Fasttrap syscall.. no parameters, a sysno in rax, a result in rdx:rax,
+   never fails (if the sysno is valid). */
+__asm__ (
+".text\n"
+".globl do_syscall_fast_WRK\n"
+"do_syscall_fast_WRK:\n"
+"       movq    %rdi, %rax\n"
+"       int     $0xD2\n"
+"       movq    %rdx, (%rsi)\n"         /* save 2nd result word */
+"       ret\n"
+".previous\n"
+);
+
 #else
 #  error Unknown platform
 #endif
@@ -915,6 +1069,62 @@
 
    return VG_(mk_SysRes_tilegx_linux)( val );
 
+#  elif defined(VGP_x86_solaris)
+   UInt val, val2, err = False;
+   Bool restart;
+   ULong u64;
+   UChar ssclass = VG_SOLARIS_SYSNO_CLASS(sysno);
+
+   switch (ssclass) {
+      case VG_SOLARIS_SYSCALL_CLASS_CLASSIC:
+         /* The Solaris kernel does not restart syscalls automatically so it
+            is done here. */
+         do {
+            u64 = do_syscall_WRK(a1,a2,a3,a4,a5,a6,a7,a8,
+                                 VG_SOLARIS_SYSNO_INDEX(sysno), &err);
+            val = (UInt)u64;
+            restart = err && (val == VKI_EINTR || val == VKI_ERESTART);
+         } while (restart);
+         break;
+      case VG_SOLARIS_SYSCALL_CLASS_FASTTRAP:
+         u64 = do_syscall_fast_WRK(VG_SOLARIS_SYSNO_INDEX(sysno));
+         break;
+      default:
+         vg_assert(0);
+         break;
+   }
+
+   val = (UInt)u64;
+   val2 = (UInt)(u64 >> 32);
+   return VG_(mk_SysRes_x86_solaris)(err ? True : False, val,
+                                     err ? 0 : val2);
+
+#  elif defined(VGP_amd64_solaris)
+   ULong val, val2, err = False;
+   Bool restart;
+   UChar ssclass = VG_SOLARIS_SYSNO_CLASS(sysno);
+
+   switch (ssclass) {
+      case VG_SOLARIS_SYSCALL_CLASS_CLASSIC:
+         /* The Solaris kernel does not restart syscalls automatically so it
+            is done here. */
+         do {
+            val = do_syscall_WRK(a1,a2,a3,a4,a5,a6,a7,a8,
+                                 VG_SOLARIS_SYSNO_INDEX(sysno), &err, &val2);
+            restart = err && (val == VKI_EINTR || val == VKI_ERESTART);
+         } while (restart);
+         break;
+      case VG_SOLARIS_SYSCALL_CLASS_FASTTRAP:
+         val = do_syscall_fast_WRK(VG_SOLARIS_SYSNO_INDEX(sysno), &val2);
+         break;
+      default:
+         vg_assert(0);
+         break;
+   }
+
+   return VG_(mk_SysRes_amd64_solaris)(err ? True : False, val,
+                                       err ? 0 : val2);
+
 #else
 #  error Unknown platform
 #endif
diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h
index b68af42..62784e9 100644
--- a/coregrind/m_syswrap/priv_syswrap-darwin.h
+++ b/coregrind/m_syswrap/priv_syswrap-darwin.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Apple Inc.
+   Copyright (C) 2005-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -335,7 +335,7 @@
 
 #if DARWIN_VERS < DARWIN_10_10
 // NYI sem_getvalue 274
-#elif DARWIN_VERS == DARWIN_10_10
+#elif DARWIN_VERS >= DARWIN_10_10
 DECL_TEMPLATE(darwin, sysctlbyname);            // 274
 #endif
 
@@ -350,7 +350,7 @@
 DECL_TEMPLATE(darwin, fchmod_extended);         // 283
 DECL_TEMPLATE(darwin, access_extended);         // 284
 DECL_TEMPLATE(darwin, settid);                  // 285
-#if DARWIN_VERS >= DARWIN_10_7
+#if DARWIN_VERS >= DARWIN_10_6
 DECL_TEMPLATE(darwin, gettid);                  // 286
 #endif
 // NYI setsgroups 287
@@ -362,23 +362,44 @@
 // NYI identitysvc 293
 // NYI shared_region_check_np 294
 // NYI shared_region_map_np 295
+#if DARWIN_VERS >= DARWIN_10_6
+// NYI vm_pressure_monitor 296
+// NYI psynch_rw_longrdlock 297
+// NYI psynch_rw_yieldwrlock 298
+// NYI psynch_rw_downgrade 299
+// NYI psynch_rw_upgrade 300
+DECL_TEMPLATE(darwin, psynch_mutexwait);       // 301
+DECL_TEMPLATE(darwin, psynch_mutexdrop);       // 302
+DECL_TEMPLATE(darwin, psynch_cvbroad);         // 303
+DECL_TEMPLATE(darwin, psynch_cvsignal);        // 304
+DECL_TEMPLATE(darwin, psynch_cvwait);          // 305
+DECL_TEMPLATE(darwin, psynch_rw_rdlock);       // 306
+DECL_TEMPLATE(darwin, psynch_rw_wrlock);       // 307
+DECL_TEMPLATE(darwin, psynch_rw_unlock);       // 308
+// NYI psynch_rw_unlock2 309
+#else
 // old load_shared_file
 // old reset_shared_file
 // old new_system_shared_regions
 // old shared_region_map_file_np
 // old shared_region_make_private_np
-DECL_TEMPLATE(darwin, psynch_mutexwait);       // 301 // new in 10.7 ?
-DECL_TEMPLATE(darwin, psynch_mutexdrop);       // 302 // new in 10.7 ?
-DECL_TEMPLATE(darwin, psynch_cvbroad);         // 303 // new in 10.7 ?
-DECL_TEMPLATE(darwin, psynch_cvsignal);        // 304 // new in 10.7 ?
-DECL_TEMPLATE(darwin, psynch_cvwait);          // 305 // new in 10.7 ?
-DECL_TEMPLATE(darwin, psynch_rw_rdlock);       // 306 // new in 10.7 ?
-DECL_TEMPLATE(darwin, psynch_rw_wrlock);       // 307 // new in 10.7 ?
-DECL_TEMPLATE(darwin, psynch_rw_unlock);       // 308 // new in 10.7 ?
+// NYI __pthread_mutex_destroy 301
+// NYI __pthread_mutex_init 302
+// NYI __pthread_mutex_lock 303
+// NYI __pthread_mutex_trylock 304
+// NYI __pthread_mutex_unlock 305
+// NYI __pthread_cond_init 306
+// NYI __pthread_cond_destroy 307
+// NYI __pthread_cond_broadcast 308
 // NYI __pthread_cond_signal 309
+#endif
 // NYI getsid 310
 // NYI settid_with_pid 311
-DECL_TEMPLATE(darwin, psynch_cvclrprepost);    // 312 // new in 10.7 ?
+#if DARWIN_VERS >= DARWIN_10_7
+DECL_TEMPLATE(darwin, psynch_cvclrprepost);    // 312
+#else
+// NYI __pthread_cond_timedwait 312
+#endif
 // NYI aio_fsync 313
 DECL_TEMPLATE(darwin, aio_return);             // 314
 DECL_TEMPLATE(darwin, aio_suspend);            // 315
@@ -402,9 +423,7 @@
 DECL_TEMPLATE(darwin, __pthread_canceled);      // 333
 DECL_TEMPLATE(darwin, __semwait_signal);        // 334
 // old utrace
-#if DARWIN_VERS >= DARWIN_10_6
 DECL_TEMPLATE(darwin, proc_info);               // 336
-#endif
 DECL_TEMPLATE(darwin, sendfile);                // 337
 DECL_TEMPLATE(darwin, stat64);                  // 338
 DECL_TEMPLATE(darwin, fstat64);                 // 339
@@ -425,9 +444,7 @@
 // NYI setauid 354
 // NYI getaudit 355
 // NYI setaudit 356
-#if DARWIN_VERS >= DARWIN_10_7
 DECL_TEMPLATE(darwin, getaudit_addr)            // 357
-#endif
 // NYI setaudit_addr 358
 // NYI auditctl 359
 DECL_TEMPLATE(darwin, bsdthread_create);        // 360
@@ -442,7 +459,9 @@
 DECL_TEMPLATE(darwin, kevent64);                // 369
 // 370
 // 371
+#if DARWIN_VERS >= DARWIN_10_6
 DECL_TEMPLATE(darwin, __thread_selfid);         // 372
+#endif
 // 373
 // 374
 // 375
@@ -506,10 +525,10 @@
 // NYI audit_session_port 432
 // NYI pid_suspend 433
 // NYI pid_resume 434
-#if DARWIN_VERS == DARWIN_10_10
+#if DARWIN_VERS >= DARWIN_10_10
 // NYI pid_hibernate 435
 // NYI pid_shutdown_sockets 436
-#endif /* DARWIN_VERS == DARWIN_10_10 */
+#endif /* DARWIN_VERS >= DARWIN_10_10 */
 // old old shared_region_slide_np 437
 // NYI shared_region_map_and_slide_np            // 438
 // NYI kas_info                                  // 439
@@ -529,7 +548,7 @@
 // NYI memorystatus_get_level // 453
 // NYI system_override // 454
 // NYI vfs_purge // 455
-#if DARWIN_VERS == DARWIN_10_10
+#if DARWIN_VERS >= DARWIN_10_10
 // NYI sfi_ctl         // 456
 // NYI sfi_pidctl      // 457
 // NYI coalition       // 458
@@ -564,7 +583,7 @@
 DECL_TEMPLATE(darwin, guarded_writev_np);           // 487
 // NYI rename_ext      // 488
 // NYI mremap_encrypted  // 489
-#endif /* DARWIN_VERS == DARWIN_10_10 */
+#endif /* DARWIN_VERS >= DARWIN_10_10 */
 
 // Mach message helpers
 DECL_TEMPLATE(darwin, mach_port_set_context);
@@ -573,6 +592,8 @@
 DECL_TEMPLATE(darwin, host_get_io_master);
 DECL_TEMPLATE(darwin, host_get_clock_service);
 DECL_TEMPLATE(darwin, host_request_notification);
+DECL_TEMPLATE(darwin, host_create_mach_voucher);
+DECL_TEMPLATE(darwin, host_get_special_port);
 DECL_TEMPLATE(darwin, mach_port_type);
 DECL_TEMPLATE(darwin, mach_port_extract_member);
 DECL_TEMPLATE(darwin, mach_port_allocate);
@@ -589,6 +610,7 @@
 DECL_TEMPLATE(darwin, mach_port_set_attributes);
 DECL_TEMPLATE(darwin, mach_port_insert_member);
 DECL_TEMPLATE(darwin, task_get_special_port);
+DECL_TEMPLATE(darwin, task_set_special_port);
 DECL_TEMPLATE(darwin, task_get_exception_ports);
 DECL_TEMPLATE(darwin, semaphore_create);
 DECL_TEMPLATE(darwin, semaphore_destroy);
@@ -596,6 +618,7 @@
 DECL_TEMPLATE(darwin, mach_ports_register);
 DECL_TEMPLATE(darwin, mach_ports_lookup);
 DECL_TEMPLATE(darwin, task_info);
+DECL_TEMPLATE(darwin, task_set_info);
 DECL_TEMPLATE(darwin, task_threads);
 DECL_TEMPLATE(darwin, task_suspend);
 DECL_TEMPLATE(darwin, task_resume);
diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h
index f014914..029260f 100644
--- a/coregrind/m_syswrap/priv_syswrap-generic.h
+++ b/coregrind/m_syswrap/priv_syswrap-generic.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -51,7 +51,7 @@
 /* Handy small function to help stop wrappers from segfaulting when
    presented with bogus client addresses.  Is not used for generating
    user-visible errors. */
-extern Bool ML_(safe_to_deref) ( void* start, SizeT size );
+extern Bool ML_(safe_to_deref) ( const void *start, SizeT size );
 
 // Returns True if the signal is OK for the client to use.
 extern Bool ML_(client_signal_OK)(Int sigNo);
@@ -61,11 +61,18 @@
 Bool ML_(fd_allowed)(Int fd, const HChar *syscallname, ThreadId tid,
                      Bool isNewFD);
 
+extern void ML_(record_fd_close)               (Int fd);
 extern void ML_(record_fd_open_named)          (ThreadId tid, Int fd);
 extern void ML_(record_fd_open_nameless)       (ThreadId tid, Int fd);
 extern void ML_(record_fd_open_with_given_name)(ThreadId tid, Int fd,
                                                 const HChar *pathname);
 
+// Return true if a given file descriptor is already recorded.
+extern Bool ML_(fd_recorded)(Int fd);
+// Returns a pathname representing a recorded fd.
+// Returned string must not be modified nor free'd.
+extern const HChar *ML_(find_fd_recorded_by_fd)(Int fd);
+
 // Used when killing threads -- we must not kill a thread if it's the thread
 // that would do Valgrind's final cleanup and output.
 extern
@@ -94,6 +101,12 @@
 extern 
 void ML_(POST_unknown_ioctl)(ThreadId tid, UInt res, UWord request, UWord arg);
 
+extern
+void ML_(pre_argv_envp)(Addr a, ThreadId tid, const HChar *s1, const HChar *s2);
+
+extern Bool
+ML_(handle_auxv_open)(SyscallStatus *status, const HChar *filename,
+                      int flags);
 
 DECL_TEMPLATE(generic, sys_ni_syscall);            // * P -- unimplemented
 DECL_TEMPLATE(generic, sys_exit);
diff --git a/coregrind/m_syswrap/priv_syswrap-linux-variants.h b/coregrind/m_syswrap/priv_syswrap-linux-variants.h
index 07b745f..66cdaa6 100644
--- a/coregrind/m_syswrap/priv_syswrap-linux-variants.h
+++ b/coregrind/m_syswrap/priv_syswrap-linux-variants.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h
index 6552dca..03fcd11 100644
--- a/coregrind/m_syswrap/priv_syswrap-linux.h
+++ b/coregrind/m_syswrap/priv_syswrap-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_syswrap/priv_syswrap-main.h b/coregrind/m_syswrap/priv_syswrap-main.h
index 4105f96..cabad7c 100644
--- a/coregrind/m_syswrap/priv_syswrap-main.h
+++ b/coregrind/m_syswrap/priv_syswrap-main.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_syswrap/priv_syswrap-solaris.h b/coregrind/m_syswrap/priv_syswrap-solaris.h
new file mode 100644
index 0000000..3c30e49
--- /dev/null
+++ b/coregrind/m_syswrap/priv_syswrap-solaris.h
@@ -0,0 +1,92 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Solaris-specific syscalls stuff.      priv_syswrap-solaris.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2011-2015 Petr Pavlu
+      setup@dagobah.cz
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PRIV_SYSWRAP_SOLARIS_H
+#define __PRIV_SYSWRAP_SOLARIS_H
+
+#include "pub_core_basics.h"        // VG_ macro
+#include "priv_types_n_macros.h"    // DECL_TEMPLATE
+#include "pub_core_tooliface.h"     // CorePart
+
+/* Macro to join a syscall name with a syscall variant. */
+#define SC2(name, subname) \
+   name "_" subname
+
+/* Macro to join a syscall name with its variant and sub-variant. */
+#define SC3(name, subname, subsubname) \
+   name "_" subname "_" subsubname
+
+extern void ML_(call_on_new_stack_0_1)(Addr stack, Addr retaddr,
+                                       void (*f)(Word), Word arg1);
+extern Word ML_(start_thread_NORETURN)(void *arg);
+extern Addr ML_(allocstack)           (ThreadId tid);
+extern void ML_(setup_start_thread_context)(ThreadId tid, vki_ucontext_t *uc);
+
+extern UInt ML_(fletcher32)(UShort *buf, SizeT blocks);
+extern ULong ML_(fletcher64)(UInt *buf, SizeT blocks);
+extern void ML_(save_machine_context)(ThreadId tid, vki_ucontext_t *uc,
+                                      CorePart part);
+extern void ML_(restore_machine_context)(ThreadId tid, vki_ucontext_t *uc,
+                                         CorePart part, Bool esp_is_thrptr);
+
+#if defined(VGP_x86_solaris)
+
+extern void ML_(setup_gdt)(VexGuestX86State *vex);
+extern void ML_(cleanup_gdt)(VexGuestX86State *vex);
+extern void ML_(update_gdt_lwpgs)(ThreadId tid);
+
+/* prototypes */
+DECL_TEMPLATE(x86_solaris, sys_fstatat64);
+DECL_TEMPLATE(x86_solaris, sys_openat64);
+DECL_TEMPLATE(x86_solaris, sys_llseek32);
+DECL_TEMPLATE(x86_solaris, sys_mmap64);
+DECL_TEMPLATE(x86_solaris, sys_stat64);
+DECL_TEMPLATE(x86_solaris, sys_lstat64);
+DECL_TEMPLATE(x86_solaris, sys_fstat64);
+DECL_TEMPLATE(x86_solaris, sys_statvfs64);
+DECL_TEMPLATE(x86_solaris, sys_fstatvfs64);
+DECL_TEMPLATE(x86_solaris, sys_setrlimit64);
+DECL_TEMPLATE(x86_solaris, sys_getrlimit64);
+DECL_TEMPLATE(x86_solaris, sys_pread64);
+DECL_TEMPLATE(x86_solaris, sys_pwrite64);
+DECL_TEMPLATE(x86_solaris, sys_open64);
+
+#elif defined(VGP_amd64_solaris)
+/* Nothing yet. */
+
+#else
+#  error "Unknown platform"
+#endif
+
+#endif   // __PRIV_SYSWRAP_SOLARIS_H
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/priv_syswrap-xen.h b/coregrind/m_syswrap/priv_syswrap-xen.h
index ae6bf60..696dda5 100644
--- a/coregrind/m_syswrap/priv_syswrap-xen.h
+++ b/coregrind/m_syswrap/priv_syswrap-xen.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2012 Citrix Systems
+   Copyright (C) 2012-2015 Citrix Systems
       ian.campbell@citrix.com
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_syswrap/priv_types_n_macros.h b/coregrind/m_syswrap/priv_types_n_macros.h
index 26a82f7..0eacfc7 100644
--- a/coregrind/m_syswrap/priv_types_n_macros.h
+++ b/coregrind/m_syswrap/priv_types_n_macros.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -112,7 +112,7 @@
       Int s_arg6;
       Int uu_arg7;
       Int uu_arg8;
-#     elif defined(VGP_x86_darwin)
+#     elif defined(VGP_x86_darwin) || defined(VGP_x86_solaris)
       Int s_arg1;
       Int s_arg2;
       Int s_arg3;
@@ -121,7 +121,7 @@
       Int s_arg6;
       Int s_arg7;
       Int s_arg8;
-#     elif defined(VGP_amd64_darwin)
+#     elif defined(VGP_amd64_darwin) || defined(VGP_amd64_solaris)
       Int o_arg1;
       Int o_arg2;
       Int o_arg3;
@@ -203,6 +203,10 @@
 extern const SyscallTableEntry ML_(syscall_table)[];
 extern const UInt ML_(syscall_table_size);
 
+#elif defined(VGO_solaris)
+extern
+SyscallTableEntry* ML_(get_solaris_syscall_entry)( UInt sysno );
+
 #else
 #  error Unknown OS
 #endif   
@@ -281,7 +285,7 @@
     vgSysWrap_##auxstr##_##name##_after
 
 /* Add a generic wrapper to a syscall table. */
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 #  define GENX_(sysno, name)  WRAPPER_ENTRY_X_(generic, sysno, name)
 #  define GENXY(sysno, name)  WRAPPER_ENTRY_XY(generic, sysno, name)
 #elif defined(VGO_darwin)
@@ -316,6 +320,16 @@
 #define ARG7   (arrghs->arg7)
 #define ARG8   (arrghs->arg8)
 
+/* Provide signed versions of the argument values */
+#define SARG1  ((Word)ARG1)
+#define SARG2  ((Word)ARG2)
+#define SARG3  ((Word)ARG3)
+#define SARG4  ((Word)ARG4)
+#define SARG5  ((Word)ARG5)
+#define SARG6  ((Word)ARG6)
+#define SARG7  ((Word)ARG7)
+#define SARG8  ((Word)ARG8)
+
 /* Reference to the syscall's current result status/value.  General
    paranoia all round. */
 #define SUCCESS       (status->what == SsComplete && !sr_isError(status->sres))
@@ -331,7 +345,7 @@
    return sr_Res(st->sres);
 }
 
-#if defined(VGO_darwin)
+#if defined(VGO_darwin) || defined(VGO_solaris)
 static inline UWord getRESHI ( SyscallStatus* st ) {
    vg_assert(st->what == SsComplete);
    vg_assert(!sr_isError(st->sres));
@@ -403,7 +417,7 @@
 #  define PRA5(s,t,a) PRRAn(5,s,t,a)
 #  define PRA6(s,t,a) PRRAn(6,s,t,a)
 
-#elif defined(VGP_x86_darwin)
+#elif defined(VGP_x86_darwin) || defined(VGP_x86_solaris)
    /* Up to 8 parameters, all on the stack. */
 #  define PRA1(s,t,a) PSRAn(1,s,t,a)
 #  define PRA2(s,t,a) PSRAn(2,s,t,a)
@@ -414,7 +428,7 @@
 #  define PRA7(s,t,a) PSRAn(7,s,t,a)
 #  define PRA8(s,t,a) PSRAn(8,s,t,a)
 
-#elif defined(VGP_amd64_darwin)
+#elif defined(VGP_amd64_darwin) || defined(VGP_amd64_solaris)
    /* Up to 8 parameters, 6 in registers, 2 on the stack. */
 #  define PRA1(s,t,a) PRRAn(1,s,t,a)
 #  define PRA2(s,t,a) PRRAn(2,s,t,a)
diff --git a/coregrind/m_syswrap/syscall-amd64-darwin.S b/coregrind/m_syswrap/syscall-amd64-darwin.S
index c593730..6f1652b 100644
--- a/coregrind/m_syswrap/syscall-amd64-darwin.S
+++ b/coregrind/m_syswrap/syscall-amd64-darwin.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
 
   This program is free software; you can redistribute it and/or
@@ -28,9 +28,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_amd64_darwin)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 
@@ -251,6 +252,9 @@
 
 #endif // defined(VGP_amd64_darwin)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-amd64-linux.S b/coregrind/m_syswrap/syscall-amd64-linux.S
index a6d7469..80cc75c 100644
--- a/coregrind/m_syswrap/syscall-amd64-linux.S
+++ b/coregrind/m_syswrap/syscall-amd64-linux.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
 
   This program is free software; you can redistribute it and/or
@@ -28,9 +28,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_amd64_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 
@@ -244,11 +245,11 @@
 ML_(blksys_finished):	.quad 5b
 .previous
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif // defined(VGP_amd64_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-amd64-solaris.S b/coregrind/m_syswrap/syscall-amd64-solaris.S
new file mode 100644
index 0000000..e04503e
--- /dev/null
+++ b/coregrind/m_syswrap/syscall-amd64-solaris.S
@@ -0,0 +1,282 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Support for doing system calls.      syscall-amd64-solaris.S ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+  This file is part of Valgrind, a dynamic binary instrumentation
+  framework.
+
+  Copyright (C) 2014-2015 Petr Pavlu
+     setup@dagobah.cz
+
+  This program is free software; you can redistribute it and/or
+  modify it under the terms of the GNU General Public License as
+  published by the Free Software Foundation; either version 2 of the
+  License, or (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+  02111-1307, USA.
+
+  The GNU General Public License is contained in the file COPYING.
+*/
+
+#include "pub_core_basics_asm.h"
+
+#if defined(VGP_amd64_solaris)
+
+#include "pub_core_vkiscnums_asm.h"
+#include "libvex_guest_offsets.h"
+
+/* From vki-solaris.h, checked at startup by m_vki.c. */
+#define VKI_SIG_SETMASK 3
+
+/* Prototype:
+   Int ML_(do_syscall_for_client_WRK)(
+      Int syscallno,			// %rdi = %rbp-48
+      void *guest_state,		// %rsi = %rbp-40
+      const vki_sigset_t *sysmask,	// %rdx = %rbp-32
+      const vki_sigset_t *postmask,	// %rcx = %rbp-24
+      UChar *cflag)			// %r8 = %rbp-16
+*/
+
+.macro ESTABLISH_STACKFRAME
+	/* Establish stack frame. */
+	pushq	%rbp
+	movq	%rsp, %rbp
+	pushq	%rbx				/* save %rbx */
+
+	/* We'll use %rbx instead of %rbp to address the stack frame after the
+	   door syscall is finished because %rbp is cleared by the syscall. */
+	movq	%rsp, %rbx			/* %rbx = %rbp - 8 */
+
+	/* Push the parameters on the stack. */
+	pushq	%r8				/* store %r8 at %rbp-16 */
+	pushq	%rcx				/* store %rcx at %rbp-24 */
+	pushq	%rdx				/* store %rdx at %rbp-32 */
+	pushq	%rsi				/* store %rsi at %rbp-40 */
+	pushq	%rdi				/* store %rdi at %rbp-48 */
+.endm
+
+.macro UNBLOCK_SIGNALS
+	/* Set the signal mask which should be current during the syscall. */
+	/* Set up for sigprocmask(SIG_SETMASK, sysmask, postmask). */
+	movq	-24(%rbp), %rdx
+	movq	-32(%rbp), %rsi
+	movq	$VKI_SIG_SETMASK, %rdi
+	movq	$__NR_sigprocmask, %rax
+	syscall
+	jc	sigprocmask_failed		/* sigprocmask failed */
+.endm
+
+.macro REBLOCK_SIGNALS
+	/* Set up for sigprocmask(SIG_SETMASK, postmask, NULL). */
+	movq	$0, %rdx
+	movq	-24(%rbp), %rsi
+	movq	$VKI_SIG_SETMASK, %rdi
+	movq	$__NR_sigprocmask, %rax
+	syscall
+	/* The syscall above changes the carry flag.  This means that if the
+	   syscall fails and we receive an interrupt after it then we've got
+	   an invalid carry flag value in the fixup code.  We don't care about
+	   it because this syscall should never fail and if it does then we're
+	   going to stop Valgrind anyway. */
+	jc	sigprocmask_failed		/* sigprocmask failed */
+.endm
+
+.macro SIMPLE_RETURN
+	xorq	%rax, %rax			/* SUCCESS */
+	movq	-8(%rbp), %rbx			/* restore %rbx */
+	movq	%rbp, %rsp
+	popq	%rbp
+	ret
+.endm
+
+sigprocmask_failed:
+	/* Failure: return 0x8000 | error code. */
+	andq	$0x7FFF, %rax
+	orq	$0x8000, %rax
+	movq	-8(%rbp), %rbx			/* restore %rbx */
+	movq	%rbp, %rsp
+	popq	%rbp
+	ret
+
+.globl ML_(do_syscall_for_client_WRK)
+ML_(do_syscall_for_client_WRK):
+	ESTABLISH_STACKFRAME
+
+1:	/* Even though we can't take a signal until the sigprocmask completes,
+	   start the range early.  If %rip is in the range [1, 2), the syscall
+	   hasn't been started yet. */
+	UNBLOCK_SIGNALS
+
+	/* Copy syscall parameters. */
+	/* do_syscall8 */
+	/* 6 register parameters. */
+	movq	-40(%rbp), %rax
+	movq	OFFSET_amd64_RDI(%rax), %rdi
+	movq	OFFSET_amd64_RSI(%rax), %rsi
+	movq	OFFSET_amd64_RDX(%rax), %rdx
+	movq	OFFSET_amd64_R10(%rax), %r10
+	movq	OFFSET_amd64_R8(%rax), %r8
+	movq	OFFSET_amd64_R9(%rax), %r9
+	/* 2 stack parameters. */
+	movq	OFFSET_amd64_RSP(%rax), %rax
+	movq	16(%rax), %r11
+	pushq	%r11
+	movq	8(%rax), %r11
+	pushq	%r11
+	/* Return address. */
+	movq	0(%rax), %r11
+	pushq	%r11
+
+	/* Put syscall number in %rax. */
+	movq	-48(%rbp), %rax
+
+	/* Do the syscall.  Note that the Solaris kernel doesn't directly
+	   restart syscalls! */
+	syscall
+
+2:	/* In the range [2, 3), the syscall result is in %rax and %rdx and C,
+	   but hasn't been committed to the thread state.  If we get
+	   interrupted in this section then we'll just use values saved in the
+	   ucontext structure.
+
+	   Important note for this and the following section: Don't add here
+	   any code that alters the carry flag or worse, call any function.
+	   That would completely break the fixup after an interrupt. */
+	movq	-40(%rbp), %rcx
+	movq	%rax, OFFSET_amd64_RAX(%rcx)	/* save %rax to VEX */
+	movq	%rdx, OFFSET_amd64_RDX(%rcx)	/* save %rdx to VEX */
+	movq	-16(%rbp), %rcx
+	setc	0(%rcx)				/* save returned carry flag */
+
+3:	/* Re-block signals. If %rip is in [3, 4), then the syscall is
+	   complete and we do not need to worry about it.  We have to only
+	   correctly save the carry flag.  If we get interrupted in this
+	   section then we just have to propagate the carry flag from the
+	   ucontext structure to the thread state, %rax and %rdx values are
+	   already saved. */
+	REBLOCK_SIGNALS
+
+4:	/* Now safe from signals. */
+	SIMPLE_RETURN
+
+.section .rodata
+/* Export the ranges so that
+   VG_(fixup_guest_state_after_syscall_interrupted) can do the right thing. */
+
+.globl ML_(blksys_setup)
+.globl ML_(blksys_complete)
+.globl ML_(blksys_committed)
+.globl ML_(blksys_finished)
+ML_(blksys_setup):	.quad 1b
+ML_(blksys_complete):	.quad 2b
+ML_(blksys_committed):	.quad 3b
+ML_(blksys_finished):	.quad 4b
+.previous
+
+/* Prototype:
+   Int ML_(do_syscall_for_client_dret_WRK)(
+      Int syscallno,			// %rdi = %rbp-48 = %rbx-48+8
+      void *guest_state,		// %rsi = %rbp-40 = %rbx-40+8
+      const vki_sigset_t *sysmask,	// %rdx = %rbp-32 = %rbx-32+8
+      const vki_sigset_t *postmask,	// %rcx = %rbp-24 = %rbx-24+8
+      UChar *cflag)			// %r8 = %rbp-16 = %rbx-16+8
+*/
+
+/* Door_return is a very special call because the data are stored by the
+   kernel directly on the stack and the stack pointer is appropriately
+   modified by the kernel.  Therefore we switch to the client stack before
+   doing the syscall, this is relatively trivial but an extra care has to be
+   taken when we get interrupted at some point. */
+
+.globl ML_(do_syscall_for_client_dret_WRK)
+ML_(do_syscall_for_client_dret_WRK):
+	ESTABLISH_STACKFRAME
+
+1:	/* Even though we can't take a signal until the sigprocmask completes,
+	   start the range early.  If %rip is in the range [1, 2), the syscall
+	   hasn't been started yet. */
+	UNBLOCK_SIGNALS
+
+	/* Prepare 6 register parameters. */
+	movq	-40(%rbp), %rax
+	movq	OFFSET_amd64_RDI(%rax), %rdi
+	movq	OFFSET_amd64_RSI(%rax), %rsi
+	movq	OFFSET_amd64_RDX(%rax), %rdx
+	movq	OFFSET_amd64_R10(%rax), %r10
+	movq	OFFSET_amd64_R8(%rax), %r8
+	movq	OFFSET_amd64_R9(%rax), %r9
+
+	/* Switch to the client stack. */
+	movq	OFFSET_amd64_RSP(%rax), %rsp	/* %rsp = simulated RSP */
+	/* Change %rbp to a client value. It will always get committed by
+	   the fixup code for range [2, 3) so it needs to be set to what the
+	   client expects. */
+	movq	OFFSET_amd64_RBP(%rax), %rbp	/* %rbp = simulated RBP */
+
+	/* Put syscall number in %rax. */
+	movq	-48+8(%rbx), %rax
+
+	/* Do the syscall.  Note that the Solaris kernel doesn't directly
+	   restart syscalls! */
+	syscall
+
+2:	/* In the range [2, 3), the syscall result is in %rax, %rdx, %rsp and
+	   %rbp and C, but hasn't been committed to the thread state.  If we
+	   get interrupted in this section then we'll just use values saved in
+	   the ucontext structure.
+
+	   Important note for this and the following section: Don't add here
+	   any code that alters the carry flag or worse, call any function.
+	   That would completely break the fixup after an interrupt. */
+	movq	-40+8(%rbx), %rcx
+	movq	%rax, OFFSET_amd64_RAX(%rcx)	/* save %rax to VEX */
+	movq	%rdx, OFFSET_amd64_RDX(%rcx)	/* save %rdx to VEX */
+	movq	%rsp, OFFSET_amd64_RSP(%rcx)	/* save %rsp to VEX */
+	movq	%rbp, OFFSET_amd64_RBP(%rcx)	/* save %rbp to VEX */
+	movq	-16+8(%rbx), %rcx
+	setc	0(%rcx)				/* save returned carry flag */
+
+	movq	%rbx, %rsp			/* switch to V stack */
+
+3:	/* Re-block signals. If %rip is in [3, 4), then the syscall is
+	   complete and we do not need worry about it.  We have to only
+	   correctly save the carry flag.  If we get interrupted in this
+	   section then we just have to propagate the carry flag from the
+	   ucontext structure to the thread state, %rax, %rdx, %rsp and %rbp
+	   values are already saved. */
+	movq	%rbx, %rbp
+	addq	$8, %rbp
+	REBLOCK_SIGNALS
+
+4:	/* Now safe from signals. */
+	SIMPLE_RETURN
+
+.section .rodata
+.globl ML_(blksys_setup_DRET)
+.globl ML_(blksys_complete_DRET)
+.globl ML_(blksys_committed_DRET)
+.globl ML_(blksys_finished_DRET)
+ML_(blksys_setup_DRET):		.quad 1b
+ML_(blksys_complete_DRET):	.quad 2b
+ML_(blksys_committed_DRET):	.quad 3b
+ML_(blksys_finished_DRET):	.quad 4b
+.previous
+
+#endif // defined(VGP_amd64_solaris)
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-arm-linux.S b/coregrind/m_syswrap/syscall-arm-linux.S
index 3839299..9e020f9 100644
--- a/coregrind/m_syswrap/syscall-arm-linux.S
+++ b/coregrind/m_syswrap/syscall-arm-linux.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2008-2013 Evan Geller (gaze@bea.ms)
+  Copyright (C) 2008-2015 Evan Geller (gaze@bea.ms)
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -27,9 +27,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_arm_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
       
@@ -141,12 +142,10 @@
 ML_(blksys_committed):  .long 4b
 ML_(blksys_finished):   .long 5b
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",%progbits
-
-.previous
-
 #endif // defined(VGP_arm_linux)
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
    
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_syswrap/syscall-arm64-linux.S b/coregrind/m_syswrap/syscall-arm64-linux.S
index 8b0e4b3..2306ade 100644
--- a/coregrind/m_syswrap/syscall-arm64-linux.S
+++ b/coregrind/m_syswrap/syscall-arm64-linux.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2013-2013 OpenWorks
+  Copyright (C) 2013-2015 OpenWorks
      info@open-works.net
 
   This program is free software; you can redistribute it and/or
@@ -28,9 +28,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_arm64_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
       
@@ -169,12 +170,10 @@
 ML_(blksys_committed):  .quad 4b
 ML_(blksys_finished):   .quad 5b
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",%progbits
-
-.previous
-
 #endif // defined(VGP_arm_linux)
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
    
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_syswrap/syscall-mips32-linux.S b/coregrind/m_syswrap/syscall-mips32-linux.S
index 4a764a2..8545976 100644
--- a/coregrind/m_syswrap/syscall-mips32-linux.S
+++ b/coregrind/m_syswrap/syscall-mips32-linux.S
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
@@ -28,9 +28,10 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_mips32_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 
@@ -202,14 +203,12 @@
 ML_(blksys_complete):   .long 3b
 ML_(blksys_committed):  .long 4b
 ML_(blksys_finished):   .long 5b
-.previous
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",%progbits
-
-
 
 #endif // defined(VGP_mips32_linux)
-   
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-mips64-linux.S b/coregrind/m_syswrap/syscall-mips64-linux.S
index 330ab1d..6600878 100644
--- a/coregrind/m_syswrap/syscall-mips64-linux.S
+++ b/coregrind/m_syswrap/syscall-mips64-linux.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
@@ -28,9 +28,10 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_mips64_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 
@@ -144,12 +145,12 @@
 ML_(blksys_complete):   .quad 3b
 ML_(blksys_committed):  .quad 4b
 ML_(blksys_finished):   .quad 5b
-.previous
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",%progbits
 
 #endif // defined(VGP_mips64_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-ppc32-linux.S b/coregrind/m_syswrap/syscall-ppc32-linux.S
index 9cd2aaa..6213922 100644
--- a/coregrind/m_syswrap/syscall-ppc32-linux.S
+++ b/coregrind/m_syswrap/syscall-ppc32-linux.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2005-2013 Paul Mackerras (paulus@samba.org)
+  Copyright (C) 2005-2015 Paul Mackerras (paulus@samba.org)
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -27,9 +27,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_ppc32_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 		
@@ -153,13 +154,11 @@
 ML_(blksys_committed): .long 4b
 ML_(blksys_finished):  .long 5b
 
-.previous
-		
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif // defined(VGP_ppc32_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-ppc64be-linux.S b/coregrind/m_syswrap/syscall-ppc64be-linux.S
index a301612..9c42f3e 100644
--- a/coregrind/m_syswrap/syscall-ppc64be-linux.S
+++ b/coregrind/m_syswrap/syscall-ppc64be-linux.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2005-2013 Paul Mackerras <paulus@samba.org>
+  Copyright (C) 2005-2015 Paul Mackerras <paulus@samba.org>
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -27,9 +27,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_ppc64be_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 		
@@ -161,11 +162,10 @@
 ML_(blksys_committed): .quad 4b
 ML_(blksys_finished):  .quad 5b
 
+#endif // defined(VGP_ppc64be_linux)
 
 /* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
-#endif // defined(VGP_ppc64be_linux)
+MARK_STACK_NO_EXEC
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_syswrap/syscall-ppc64le-linux.S b/coregrind/m_syswrap/syscall-ppc64le-linux.S
index 4ea1f8f..b469cc4 100644
--- a/coregrind/m_syswrap/syscall-ppc64le-linux.S
+++ b/coregrind/m_syswrap/syscall-ppc64le-linux.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2005-2013 Paul Mackerras <paulus@samba.org>
+  Copyright (C) 2005-2015 Paul Mackerras <paulus@samba.org>
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -27,9 +27,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_ppc64le_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 		
@@ -178,11 +179,10 @@
 ML_(blksys_committed): .quad 4b
 ML_(blksys_finished):  .quad 5b
 
+#endif // defined(VGP_ppc64le_linux)
 
 /* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
-#endif // defined(VGP_ppc64le_linux)
+MARK_STACK_NO_EXEC
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_syswrap/syscall-s390x-linux.S b/coregrind/m_syswrap/syscall-s390x-linux.S
index 6b21eac..b8a9381 100644
--- a/coregrind/m_syswrap/syscall-s390x-linux.S
+++ b/coregrind/m_syswrap/syscall-s390x-linux.S
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -162,11 +162,11 @@
 ML_(blksys_finished):  .quad 5b
 .previous
 
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-
 #endif /* VGA_s390x */
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-tilegx-linux.S b/coregrind/m_syswrap/syscall-tilegx-linux.S
index 0bd3756..7be2f6a 100644
--- a/coregrind/m_syswrap/syscall-tilegx-linux.S
+++ b/coregrind/m_syswrap/syscall-tilegx-linux.S
@@ -28,9 +28,10 @@
 
 /* Contributed by Zhi-Gang Liu <zliu at tilera dot com> */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_tilegx_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 
@@ -180,11 +181,12 @@
     ML_(blksys_committed):  .quad 4b
     ML_(blksys_finished):   .quad 5b
     .previous
-    /* Let the linker know we don't need an executable stack */
-    .section .note.GNU-stack,"",%progbits
 
 #endif /* defined(VGP_tilegx_linux) */
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-x86-darwin.S b/coregrind/m_syswrap/syscall-x86-darwin.S
index 288520d..823c9b4 100644
--- a/coregrind/m_syswrap/syscall-x86-darwin.S
+++ b/coregrind/m_syswrap/syscall-x86-darwin.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
 
   This program is free software; you can redistribute it and/or
@@ -28,9 +28,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_x86_darwin)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 		
@@ -89,9 +90,9 @@
 	
 L_$0_1:	/* Even though we can't take a signal until the
            __pthread_sigmask completes, start the range early.
-	   If eip is in the range [1,2), the syscall hasn't been started yet */
+           If eip is in the range [1,2), the syscall hasn't been started yet */
 
-	/* Set the signal mask which should be current during the syscall. */
+        /* Set the signal mask which should be current during the syscall. */
         /* Set up for __pthread_sigmask(SIG_SETMASK, sysmask, postmask) */
         pushl   20(%ebp)
         pushl   16(%ebp)
@@ -248,7 +249,10 @@
 ML_(blksys_finished_UNIX):	.long MK_L_SCCLASS_N(UNIX,5)
 
 #endif // defined(VGP_x86_darwin)
- 
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-x86-linux.S b/coregrind/m_syswrap/syscall-x86-linux.S
index d32d537..e4c6a0a 100644
--- a/coregrind/m_syswrap/syscall-x86-linux.S
+++ b/coregrind/m_syswrap/syscall-x86-linux.S
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
 
   This program is free software; you can redistribute it and/or
@@ -28,9 +28,10 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+#include "pub_core_basics_asm.h"
+
 #if defined(VGP_x86_linux)
 
-#include "pub_core_basics_asm.h"
 #include "pub_core_vkiscnums_asm.h"
 #include "libvex_guest_offsets.h"
 		
@@ -183,12 +184,12 @@
 ML_(blksys_committed):	.long 4b
 ML_(blksys_finished):	.long 5b
 .previous
-	
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
 
 #endif // defined(VGP_x86_linux)
 
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-x86-solaris.S b/coregrind/m_syswrap/syscall-x86-solaris.S
new file mode 100644
index 0000000..c0df3d8
--- /dev/null
+++ b/coregrind/m_syswrap/syscall-x86-solaris.S
@@ -0,0 +1,279 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Support for doing system calls.        syscall-x86-solaris.S ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+  This file is part of Valgrind, a dynamic binary instrumentation
+  framework.
+
+  Copyright (C) 2011-2015 Petr Pavlu
+     setup@dagobah.cz
+
+  This program is free software; you can redistribute it and/or
+  modify it under the terms of the GNU General Public License as
+  published by the Free Software Foundation; either version 2 of the
+  License, or (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+  02111-1307, USA.
+
+  The GNU General Public License is contained in the file COPYING.
+*/
+
+#include "pub_core_basics_asm.h"
+
+#if defined(VGP_x86_solaris)
+
+#include "pub_core_vkiscnums_asm.h"
+#include "libvex_guest_offsets.h"
+
+/* From vki-solaris.h, checked at startup by m_vki.c. */
+#define VKI_SIG_SETMASK 3
+
+/* Prototype:
+   Int ML_(do_syscall_for_client_WRK)(
+      Int syscallno,			// %ebp+8
+      void *guest_state,		// %ebp+12
+      const vki_sigset_t *sysmask,	// %ebp+16
+      const vki_sigset_t *postmask,	// %ebp+20
+      UChar *cflag)			// %ebp+24
+*/
+
+.macro ESTABLISH_STACKFRAME
+	/* Establish stack frame. */
+	pushl	%ebp
+	movl	%esp, %ebp
+	pushl	%ebx				/* save %ebx */
+
+	/* We'll use %ebx instead of %ebp to address the stack frame after the
+	   door syscall is finished because %ebp is cleared by the syscall. */
+	movl	%esp, %ebx			/* %ebx = %ebp - 4 */
+.endm
+
+.macro UNBLOCK_SIGNALS
+	/* Set the signal mask which should be current during the syscall. */
+	/* Set up for sigprocmask(SIG_SETMASK, sysmask, postmask). */
+	pushl	20(%ebp)
+	pushl	16(%ebp)
+	pushl	$VKI_SIG_SETMASK
+	pushl	$0xcafebabe			/* totally fake return address */
+	movl	$__NR_sigprocmask, %eax
+	int	$0x91
+	jc	sigprocmask_failed		/* sigprocmask failed */
+	addl	$16, %esp
+.endm
+
+.macro REBLOCK_SIGNALS
+	/* Set up for sigprocmask(SIG_SETMASK, postmask, NULL). */
+	pushl	$0
+	pushl	20(%ebp)
+	pushl	$VKI_SIG_SETMASK
+	pushl	$0xcafef00d			/* totally fake return address */
+	movl	$__NR_sigprocmask, %eax
+	int	$0x91
+	/* The syscall above changes the carry flag.  This means that if the
+	   syscall fails and we receive an interrupt after it then we've got
+	   an invalid carry flag value in the fixup code.  We don't care about
+	   it because this syscall should never fail and if it does then we're
+	   going to stop Valgrind anyway. */
+	jc	sigprocmask_failed		/* sigprocmask failed */
+	addl	$16, %esp
+.endm
+
+.macro SIMPLE_RETURN
+	xorl	%eax, %eax			/* SUCCESS */
+	movl	-4(%ebp), %ebx			/* restore %ebx */
+	movl	%ebp, %esp
+	popl	%ebp
+	ret
+.endm
+
+sigprocmask_failed:
+	/* Failure: return 0x8000 | error code. */
+	/* Note that we enter here with %esp being 16 too low (4 extra words
+	   on the stack).  But because we're nuking the stack frame now, that
+	   doesn't matter. */
+	andl	$0x7FFF, %eax
+	orl	$0x8000, %eax
+	movl	-4(%ebp), %ebx			/* restore %ebx */
+	movl	%ebp, %esp
+	popl	%ebp
+	ret
+
+.globl ML_(do_syscall_for_client_WRK)
+ML_(do_syscall_for_client_WRK):
+	ESTABLISH_STACKFRAME
+
+1:	/* Even though we can't take a signal until the sigprocmask completes,
+	   start the range early.  If %eip is in the range [1, 2), the syscall
+	   hasn't been started yet. */
+	UNBLOCK_SIGNALS
+
+	/* Copy syscall parameters to the stack - assume no more than 8 plus
+	   the return address. */
+	/* do_syscall8 */
+	movl	12(%ebp), %edx
+	movl	OFFSET_x86_ESP(%edx), %edx	/* %edx = simulated ESP */
+	movl	28+4(%edx), %eax
+	pushl	%eax
+	movl	24+4(%edx), %eax
+	pushl	%eax
+	movl	20+4(%edx), %eax
+	pushl	%eax
+	movl	16+4(%edx), %eax
+	pushl	%eax
+	movl	12+4(%edx), %eax
+	pushl	%eax
+	movl	8+4(%edx), %eax
+	pushl	%eax
+	movl	4+4(%edx), %eax
+	pushl	%eax
+	movl	0+4(%edx), %eax
+	pushl	%eax
+	/* Return address. */
+	movl	0(%edx), %eax
+	pushl	%eax
+
+	/* Put syscall number in %eax. */
+	movl	8(%ebp), %eax
+
+	/* Do the syscall.  Note that the Solaris kernel doesn't directly
+	   restart syscalls! */
+	int	$0x91
+
+2:	/* In the range [2, 3), the syscall result is in %eax and %edx and C,
+	   but hasn't been committed to the thread state.  If we get
+	   interrupted in this section then we'll just use values saved in the
+	   ucontext structure.
+
+	   Important note for this and the following section: Don't add here
+	   any code that alters the carry flag or worse, call any function.
+	   That would completely break the fixup after an interrupt. */
+	movl	12(%ebp), %ecx
+	movl	%eax, OFFSET_x86_EAX(%ecx)	/* save %eax to VEX */
+	movl	%edx, OFFSET_x86_EDX(%ecx)	/* save %edx to VEX */
+	movl	24(%ebp), %ecx
+	setc	0(%ecx)				/* save returned carry flag */
+
+3:	/* Re-block signals. If %eip is in [3, 4), then the syscall is
+	   complete and we do not need to worry about it.  We have to only
+	   correctly save the carry flag.  If we get interrupted in this
+	   section then we just have to propagate the carry flag from the
+	   ucontext structure to the thread state, %eax and %edx values are
+	   already saved. */
+	REBLOCK_SIGNALS
+
+4:	/* Now safe from signals. */
+	SIMPLE_RETURN
+
+.section .rodata
+/* Export the ranges so that
+   VG_(fixup_guest_state_after_syscall_interrupted) can do the right thing. */
+
+.globl ML_(blksys_setup)
+.globl ML_(blksys_complete)
+.globl ML_(blksys_committed)
+.globl ML_(blksys_finished)
+ML_(blksys_setup):	.long 1b
+ML_(blksys_complete):	.long 2b
+ML_(blksys_committed):	.long 3b
+ML_(blksys_finished):	.long 4b
+.previous
+
+/* Prototype:
+   Int ML_(do_syscall_for_client_dret_WRK)(
+      Int syscallno,			// %ebp+8 = %ebx+8+4
+      void *guest_state,		// %ebp+12 = %ebx+12+4
+      const vki_sigset_t *sysmask,	// %ebp+16 = %ebx+16+4
+      const vki_sigset_t *postmask,	// %ebp+20 = %ebx+20+4
+      UChar *cflag)			// %ebp+24 = %ebx+24+4
+*/
+
+/* Door_return is a very special call because the data are stored by the
+   kernel directly on the stack and the stack pointer is appropriately
+   modified by the kernel.  Therefore we switch to the client stack before
+   doing the syscall, this is relatively trivial but an extra care has to be
+   taken when we get interrupted at some point. */
+
+.globl ML_(do_syscall_for_client_dret_WRK)
+ML_(do_syscall_for_client_dret_WRK):
+	ESTABLISH_STACKFRAME
+
+1:	/* Even though we can't take a signal until the sigprocmask completes,
+	   start the range early.  If %eip is in the range [1, 2), the syscall
+	   hasn't been started yet. */
+	UNBLOCK_SIGNALS
+
+	/* Switch to the client stack. */
+	movl	12(%ebp), %edx
+	movl	OFFSET_x86_ESP(%edx), %esp	/* %esp = simulated ESP */
+	/* Change %ebp to a client value. It will always get committed by
+	   the fixup code for range [2, 3) so it needs to be set to what the
+	   client expects. */
+	movl	OFFSET_x86_EBP(%edx), %ebp	/* %ebp = simulated EBP */
+
+	/* Put syscall number in %eax. */
+	movl	8+4(%ebx), %eax
+
+	/* Do the syscall.  Note that the Solaris kernel doesn't directly
+	   restart syscalls! */
+	int	$0x91
+
+2:	/* In the range [2, 3), the syscall result is in %eax, %edx, %esp and
+	   %ebp and C, but hasn't been committed to the thread state.  If we
+	   get interrupted in this section then we'll just use values saved in
+	   the ucontext structure.
+
+	   Important note for this and the following section: Don't add here
+	   any code that alters the carry flag or worse, call any function.
+	   That would completely break the fixup after an interrupt. */
+	movl	12+4(%ebx), %ecx
+	movl	%eax, OFFSET_x86_EAX(%ecx)	/* save %eax to VEX */
+	movl	%edx, OFFSET_x86_EDX(%ecx)	/* save %edx to VEX */
+	movl	%esp, OFFSET_x86_ESP(%ecx)	/* save %esp to VEX */
+	movl	%ebp, OFFSET_x86_EBP(%ecx)	/* save %ebp to VEX */
+	movl	24+4(%ebx), %ecx
+	setc	0(%ecx)				/* save returned carry flag */
+
+	movl	%ebx, %esp			/* switch to V stack */
+
+3:	/* Re-block signals. If %eip is in [3, 4), then the syscall is
+	   complete and we do not need worry about it.  We have to only
+	   correctly save the carry flag.  If we get interrupted in this
+	   section then we just have to propagate the carry flag from the
+	   ucontext structure to the thread state, %eax, %edx, %esp and %ebp
+	   values are already saved. */
+	movl	%ebx, %ebp
+	addl	$4, %ebp
+	REBLOCK_SIGNALS
+
+4:	/* Now safe from signals. */
+	SIMPLE_RETURN
+
+.section .rodata
+.globl ML_(blksys_setup_DRET)
+.globl ML_(blksys_complete_DRET)
+.globl ML_(blksys_committed_DRET)
+.globl ML_(blksys_finished_DRET)
+ML_(blksys_setup_DRET):		.long 1b
+ML_(blksys_complete_DRET):	.long 2b
+ML_(blksys_committed_DRET):	.long 3b
+ML_(blksys_finished_DRET):	.long 4b
+.previous
+
+#endif // defined(VGP_x86_solaris)
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syswrap-amd64-darwin.c b/coregrind/m_syswrap/syswrap-amd64-darwin.c
index 979fe36..8f13e71 100644
--- a/coregrind/m_syswrap/syswrap-amd64-darwin.c
+++ b/coregrind/m_syswrap/syswrap-amd64-darwin.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Apple Inc.
+   Copyright (C) 2005-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -451,7 +451,7 @@
    if (0) VG_(printf)(
              "wqthread_hijack: self %#lx, kport %#lx, "
 	     "stackaddr %#lx, workitem %#lx, reuse/flags %x, sp %#lx\n", 
-	     self, kport, stackaddr, workitem, reuse, sp);
+	     self, kport, stackaddr, workitem, (UInt)reuse, sp);
 
    /* Start the thread with all signals blocked.  VG_(scheduler) will
       set the mask correctly when we finally get there. */
@@ -464,7 +464,7 @@
       out just the relevant parts.  Hence: */
 #  if DARWIN_VERS <= DARWIN_10_7
    Bool is_reuse = reuse != 0;
-#  elif DARWIN_VERS == DARWIN_10_8 || DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
+#  elif DARWIN_VERS > DARWIN_10_7
    Bool is_reuse = (reuse & 0x20000 /* == WQ_FLAG_THREAD_REUSE */) != 0;
 #  else
 #    error "Unsupported Darwin version"
@@ -481,6 +481,8 @@
        UWord magic_delta = 0x60;
 #      elif DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
        UWord magic_delta = 0xE0;
+#      elif DARWIN_VERS == DARWIN_10_11
+       UWord magic_delta = 0x100;
 #      else
 #        error "magic_delta: to be computed on new OS version"
          // magic_delta = tst->os_state.pthread - self
@@ -496,10 +498,10 @@
 
        tst = VG_(get_ThreadState)(tid);
 
-       if (0) VG_(printf)("wqthread_hijack reuse %s: tid %d, tst %p, "
-                          "tst->os_state.pthread %#lx\n",
+       if (0) VG_(printf)("wqthread_hijack reuse %s: tid %u, tst %p, "
+                          "tst->os_state.pthread %#lx, self %#lx\n",
                           tst->os_state.pthread == self ? "SAME" : "DIFF",
-                          tid, tst, tst->os_state.pthread);
+                          tid, (void *)tst, tst->os_state.pthread, self);
 
        vex = &tst->arch.vex;
        vg_assert(tst->os_state.pthread - magic_delta == self);
diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c
index de3288e..7c88bc2 100644
--- a/coregrind/m_syswrap/syswrap-amd64-linux.c
+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -188,7 +188,7 @@
 
 /* 
    When a client clones, we need to keep track of the new thread.  This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
 
    2. initialize the thread's new VCPU state
 
@@ -489,7 +489,7 @@
 PRE(sys_arch_prctl)
 {
    ThreadState* tst;
-   PRINT( "arch_prctl ( %ld, %lx )", ARG1, ARG2 );
+   PRINT( "arch_prctl ( %ld, %lx )", SARG1, ARG2 );
 
    vg_assert(VG_(is_valid_tid)(tid));
    vg_assert(tid >= 1 && tid < VG_N_THREADS);
@@ -540,7 +540,7 @@
 // space, and we should therefore not check anything it points to.
 PRE(sys_ptrace)
 {
-   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "ptrace", 
                  long, request, long, pid, long, addr, long, data);
    switch (ARG1) {
@@ -619,7 +619,7 @@
 
 PRE(sys_fadvise64)
 {
-   PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )", SARG1, SARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "fadvise64",
                  int, fd, vki_loff_t, offset, vki_size_t, len, int, advice);
 }
@@ -628,12 +628,11 @@
 {
    SysRes r;
 
-   PRINT("sys_mmap ( %#lx, %llu, %ld, %ld, %d, %ld )",
-         ARG1, (ULong)ARG2, ARG3, ARG4, (Int)ARG5, ARG6 );
+   PRINT("sys_mmap ( %#lx, %lu, %ld, %ld, %ld, %ld )",
+         ARG1, ARG2, SARG3, SARG4, SARG5, SARG6 );
    PRE_REG_READ6(long, "mmap",
                  unsigned long, start, unsigned long, length,
-                 unsigned long, prot,  unsigned long, flags,
-                 unsigned long, fd,    unsigned long, offset);
+                 int, prot, int, flags, int, fd, vki_off_t, offset);
 
    r = ML_(generic_PRE_sys_mmap)( tid, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
    SET_STATUS_from_SysRes(r);
diff --git a/coregrind/m_syswrap/syswrap-amd64-solaris.c b/coregrind/m_syswrap/syswrap-amd64-solaris.c
new file mode 100644
index 0000000..4fd78ec
--- /dev/null
+++ b/coregrind/m_syswrap/syswrap-amd64-solaris.c
@@ -0,0 +1,564 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Platform-specific syscalls stuff.    syswrap-amd64-solaris.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2014-2015 Petr Pavlu
+      setup@dagobah.cz
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+#if defined(VGP_amd64_solaris)
+
+#include "libvex_guest_offsets.h"
+#include "pub_core_basics.h"
+#include "pub_core_debuglog.h"
+#include "pub_core_vki.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcprint.h"
+#include "pub_core_libcsignal.h"
+#include "pub_core_tooliface.h"
+#include "pub_core_syswrap.h"
+
+#include "priv_types_n_macros.h"
+#include "priv_syswrap-generic.h"
+#include "priv_syswrap-solaris.h"
+
+
+/* Call f(arg1), but first switch stacks, using 'stack' as the new stack, and
+   use 'retaddr' as f's return-to address.  Also, clear all the integer
+   registers before entering f. */
+__attribute__((noreturn))
+void ML_(call_on_new_stack_0_1)(Addr stack,             /* %rdi */
+                                Addr retaddr,           /* %rsi */
+                                void (*f)(Word),        /* %rdx */
+                                Word arg1);             /* %rcx */
+__asm__ (
+".text\n"
+".globl vgModuleLocal_call_on_new_stack_0_1\n"
+"vgModuleLocal_call_on_new_stack_0_1:\n"
+"   movq  %rdi, %rsp\n"         /* set stack */
+"   movq  %rcx, %rdi\n"         /* set arg1 */
+"   pushq %rsi\n"               /* retaddr to stack */
+"   pushq %rdx\n"               /* f to stack */
+"   movq  $0, %rax\n"           /* zero all GP regs (except %rdi) */
+"   movq  $0, %rbx\n"
+"   movq  $0, %rcx\n"
+"   movq  $0, %rdx\n"
+"   movq  $0, %rsi\n"
+"   movq  $0, %rbp\n"
+"   movq  $0, %r8\n"
+"   movq  $0, %r9\n"
+"   movq  $0, %r10\n"
+"   movq  $0, %r11\n"
+"   movq  $0, %r12\n"
+"   movq  $0, %r13\n"
+"   movq  $0, %r14\n"
+"   movq  $0, %r15\n"
+"   ret\n"                      /* jump to f */
+"   ud2\n"                      /* should never get here */
+".previous\n"
+);
+
+/* This function is called to setup a context of a new Valgrind thread (which
+   will run the client code). */
+void ML_(setup_start_thread_context)(ThreadId tid, vki_ucontext_t *uc)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   UWord *stack = (UWord*)tst->os_state.valgrind_stack_init_SP;
+
+   VG_(memset)(uc, 0, sizeof(*uc));
+   uc->uc_flags = VKI_UC_CPU | VKI_UC_SIGMASK;
+
+   /* Start the thread with everything blocked. */
+   VG_(sigfillset)(&uc->uc_sigmask);
+
+   /* Set up the stack, it should be always 16-byte aligned before doing
+      a function call, i.e. the first parameter is also 16-byte aligned. */
+   vg_assert(VG_IS_16_ALIGNED(stack));
+   stack -= 1;
+   stack[0] = 0; /* bogus return value */
+
+   /* Set up the registers. */
+   uc->uc_mcontext.gregs[VKI_REG_RDI] = (UWord)tst; /* the parameter */
+   uc->uc_mcontext.gregs[VKI_REG_RIP] = (UWord)ML_(start_thread_NORETURN);
+   uc->uc_mcontext.gregs[VKI_REG_RSP] = (UWord)stack;
+}
+
+/* Architecture-specific part of VG_(save_context). */
+void ML_(save_machine_context)(ThreadId tid, vki_ucontext_t *uc,
+                               CorePart part)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   struct vki_fpchip_state *fs
+      = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state;
+   SizeT i;
+
+   /* CPU */
+   /* Common registers */
+   uc->uc_mcontext.gregs[VKI_REG_RIP] = tst->arch.vex.guest_RIP;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_RIP,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_RIP], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_RAX] = tst->arch.vex.guest_RAX;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_RAX,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_RAX], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_RBX] = tst->arch.vex.guest_RBX;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_RBX,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_RBX], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_RCX] = tst->arch.vex.guest_RCX;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_RCX,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_RCX], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_RDX] = tst->arch.vex.guest_RDX;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_RDX,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_RDX], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_RBP] = tst->arch.vex.guest_RBP;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_RBP,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_RBP], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_RSI] = tst->arch.vex.guest_RSI;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_RSI,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_RSI], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_RDI] = tst->arch.vex.guest_RDI;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_RDI,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_RDI], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_R8] = tst->arch.vex.guest_R8;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_R8,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_R8], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_R9] = tst->arch.vex.guest_R9;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_R9,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_R9], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_R10] = tst->arch.vex.guest_R10;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_R10,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_R10], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_R11] = tst->arch.vex.guest_R11;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_R11,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_R11], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_R12] = tst->arch.vex.guest_R12;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_R12,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_R12], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_R13] = tst->arch.vex.guest_R13;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_R13,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_R13], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_R14] = tst->arch.vex.guest_R14;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_R14,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_R14], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_R15] = tst->arch.vex.guest_R15;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_R15,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_R15], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_RSP] = tst->arch.vex.guest_RSP;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_amd64_RSP,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_RSP], sizeof(UWord));
+
+   /* ERR and TRAPNO */
+   uc->uc_mcontext.gregs[VKI_REG_ERR] = 0;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_ERR], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_TRAPNO] = 0;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_TRAPNO], sizeof(UWord));
+
+   /* Segment registers */
+   /* Valgrind does not support moves from/to segment registers on AMD64.  The
+      values returned below are the ones that are set by the kernel when
+      a program is started. */
+   uc->uc_mcontext.gregs[VKI_REG_CS] = VKI_UCS_SEL;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_CS], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_DS] = 0;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_DS], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_SS] = VKI_UDS_SEL;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_SS], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_ES] = 0;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_ES], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_FS] = 0;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_FS], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_GS] = 0;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_GS], sizeof(UWord));
+
+   /* Segment bases */
+   uc->uc_mcontext.gregs[VKI_REG_FSBASE] = tst->arch.vex.guest_FS_CONST;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_FSBASE], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_REG_GSBASE] = 0;
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)&uc->uc_mcontext.gregs[VKI_REG_GSBASE], sizeof(UWord));
+
+   /* Handle rflags.  Refer to the x86-solaris variant of this code for
+      a detailed description. */
+   uc->uc_mcontext.gregs[VKI_REG_RFL] =
+      LibVEX_GuestAMD64_get_rflags(&tst->arch.vex);
+   VG_TRACK(post_mem_write, part, tid,
+         (Addr)&uc->uc_mcontext.gregs[VKI_REG_RFL], sizeof(UWord));
+   VKI_UC_GUEST_CC_OP(uc) = tst->arch.vex.guest_CC_OP;
+   VKI_UC_GUEST_CC_NDEP(uc) = tst->arch.vex.guest_CC_NDEP;
+   VKI_UC_GUEST_CC_DEP1(uc) = tst->arch.vex.guest_CC_DEP1;
+   VG_TRACK(copy_reg_to_mem, part, tid,
+            offsetof(VexGuestAMD64State, guest_CC_DEP1),
+            (Addr)&VKI_UC_GUEST_CC_DEP1(uc), sizeof(UWord));
+   VKI_UC_GUEST_CC_DEP2(uc) = tst->arch.vex.guest_CC_DEP2;
+   VG_TRACK(copy_reg_to_mem, part, tid,
+            offsetof(VexGuestAMD64State, guest_CC_DEP2),
+            (Addr)&VKI_UC_GUEST_CC_DEP2(uc), sizeof(UWord));
+   VKI_UC_GUEST_RFLAGS_NEG(uc) = ~uc->uc_mcontext.gregs[VKI_REG_RFL];
+   /* Calculate a checksum. */
+   {
+      ULong buf[5];
+      ULong checksum;
+
+      buf[0] = VKI_UC_GUEST_CC_OP(uc);
+      buf[1] = VKI_UC_GUEST_CC_NDEP(uc);
+      buf[2] = VKI_UC_GUEST_CC_DEP1(uc);
+      buf[3] = VKI_UC_GUEST_CC_DEP2(uc);
+      buf[4] = uc->uc_mcontext.gregs[VKI_REG_RFL];
+      checksum = ML_(fletcher64)((UInt*)&buf, sizeof(buf) / sizeof(UInt));
+      VKI_UC_GUEST_RFLAGS_CHECKSUM(uc) = checksum;
+   }
+
+   /* FPU */
+   /* The fpregset_t structure on amd64 follows the layout that is used by the
+      FXSAVE instruction, therefore it is only necessary to call a VEX
+      function that simulates this instruction. */
+   LibVEX_GuestAMD64_fxsave(&tst->arch.vex, (HWord)fs);
+
+   /* Control word */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->cw, sizeof(fs->cw));
+   /* Status word */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->sw, sizeof(fs->sw));
+   /* Compressed tag word */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->fctw, sizeof(fs->fctw));
+   /* Unused */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->__fx_rsvd,
+            sizeof(fs->__fx_rsvd));
+   vg_assert(fs->__fx_rsvd == 0);
+   /* Last x87 opcode */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->fop, sizeof(fs->fop));
+   vg_assert(fs->fop == 0);
+   /* Last x87 instruction pointer */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->rip, sizeof(fs->rip));
+   vg_assert(fs->rip == 0);
+   /* Last x87 data pointer */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->rdp, sizeof(fs->rdp));
+   vg_assert(fs->rdp == 0);
+   /* Media-instruction control and status register */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->mxcsr, sizeof(fs->mxcsr));
+   /* Supported features in MXCSR */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->mxcsr_mask,
+            sizeof(fs->mxcsr_mask));
+
+   /* ST registers */
+   for (i = 0; i < 8; i++) {
+      Addr addr = (Addr)&fs->st[i];
+      /* x87 uses 80b FP registers but VEX uses only 64b registers, thus we
+         have to lie here. :< */
+      VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+               guest_FPREG[i]), addr, sizeof(ULong));
+      VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+               guest_FPREG[i]), addr + 8, sizeof(UShort));
+   }
+
+   /* XMM registers */
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+            guest_YMM0), (Addr)&fs->xmm[0], sizeof(U128));
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+            guest_YMM1), (Addr)&fs->xmm[1], sizeof(U128));
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+            guest_YMM2), (Addr)&fs->xmm[2], sizeof(U128));
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+            guest_YMM3), (Addr)&fs->xmm[3], sizeof(U128));
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+            guest_YMM4), (Addr)&fs->xmm[4], sizeof(U128));
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+            guest_YMM5), (Addr)&fs->xmm[5], sizeof(U128));
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+            guest_YMM6), (Addr)&fs->xmm[6], sizeof(U128));
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestAMD64State,
+            guest_YMM7), (Addr)&fs->xmm[7], sizeof(U128));
+
+   /* Status word (sw) at exception */
+   fs->status = 0;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->status, sizeof(fs->status));
+
+   /* MXCSR at exception */
+   fs->xstatus = 0;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->xstatus,
+            sizeof(fs->xstatus));
+}
+
+/* Architecture-specific part of VG_(restore_context). */
+void ML_(restore_machine_context)(ThreadId tid, vki_ucontext_t *uc,
+                                  CorePart part, Bool esp_is_thrptr)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   struct vki_fpchip_state *fs
+      = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state;
+
+   /* CPU */
+   if (uc->uc_flags & VKI_UC_CPU) {
+      /* Common registers */
+      tst->arch.vex.guest_RIP = uc->uc_mcontext.gregs[VKI_REG_RIP];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_RIP], OFFSET_amd64_RIP,
+               sizeof(UWord));
+      tst->arch.vex.guest_RAX = uc->uc_mcontext.gregs[VKI_REG_RAX];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_RAX], OFFSET_amd64_RAX,
+               sizeof(UWord));
+      tst->arch.vex.guest_RBX = uc->uc_mcontext.gregs[VKI_REG_RBX];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_RBX], OFFSET_amd64_RBX,
+               sizeof(UWord));
+      tst->arch.vex.guest_RCX = uc->uc_mcontext.gregs[VKI_REG_RCX];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_RCX], OFFSET_amd64_RCX,
+               sizeof(UWord));
+      tst->arch.vex.guest_RDX = uc->uc_mcontext.gregs[VKI_REG_RDX];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_RDX], OFFSET_amd64_RDX,
+               sizeof(UWord));
+      tst->arch.vex.guest_RBP = uc->uc_mcontext.gregs[VKI_REG_RBP];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_RBP], OFFSET_amd64_RBP,
+               sizeof(UWord));
+      tst->arch.vex.guest_RSI = uc->uc_mcontext.gregs[VKI_REG_RSI];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_RSI], OFFSET_amd64_RSI,
+               sizeof(UWord));
+      tst->arch.vex.guest_RDI = uc->uc_mcontext.gregs[VKI_REG_RDI];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_RDI], OFFSET_amd64_RDI,
+               sizeof(UWord));
+      tst->arch.vex.guest_R8 = uc->uc_mcontext.gregs[VKI_REG_R8];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_R8], OFFSET_amd64_R8,
+               sizeof(UWord));
+      tst->arch.vex.guest_R9 = uc->uc_mcontext.gregs[VKI_REG_R9];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_R9], OFFSET_amd64_R9,
+               sizeof(UWord));
+      tst->arch.vex.guest_R10 = uc->uc_mcontext.gregs[VKI_REG_R10];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_R10], OFFSET_amd64_R10,
+               sizeof(UWord));
+      tst->arch.vex.guest_R11 = uc->uc_mcontext.gregs[VKI_REG_R11];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_R11], OFFSET_amd64_R11,
+               sizeof(UWord));
+      tst->arch.vex.guest_R12 = uc->uc_mcontext.gregs[VKI_REG_R12];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_R12], OFFSET_amd64_R12,
+               sizeof(UWord));
+      tst->arch.vex.guest_R13 = uc->uc_mcontext.gregs[VKI_REG_R13];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_R13], OFFSET_amd64_R13,
+               sizeof(UWord));
+      tst->arch.vex.guest_R14 = uc->uc_mcontext.gregs[VKI_REG_R14];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_R14], OFFSET_amd64_R14,
+               sizeof(UWord));
+      tst->arch.vex.guest_R15 = uc->uc_mcontext.gregs[VKI_REG_R15];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_R15], OFFSET_amd64_R15,
+               sizeof(UWord));
+      tst->arch.vex.guest_RSP = uc->uc_mcontext.gregs[VKI_REG_RSP];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_RSP], OFFSET_amd64_RSP,
+               sizeof(UWord));
+
+      /* Ignore ERR and TRAPNO. */
+
+      /* Ignore segment registers. */
+
+      /* Segment bases */
+      tst->arch.vex.guest_FS_CONST = uc->uc_mcontext.gregs[VKI_REG_FSBASE];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_REG_FSBASE],
+               offsetof(VexGuestAMD64State, guest_FS_CONST), sizeof(UWord));
+
+      /* Rflags.  Refer to the x86-solaris variant of this code for a detailed
+         description. */
+      {
+         ULong rflags;
+         ULong orig_rflags;
+         ULong new_rflags;
+         Bool ok_restore = False;
+
+         VG_TRACK(pre_mem_read, part, tid,
+                  "restore_machine_context(uc->uc_mcontext.gregs[VKI_REG_RFL])",
+                  (Addr)&uc->uc_mcontext.gregs[VKI_REG_RFL], sizeof(UWord));
+         rflags = uc->uc_mcontext.gregs[VKI_REG_RFL];
+         orig_rflags = LibVEX_GuestAMD64_get_rflags(&tst->arch.vex);
+         new_rflags = rflags;
+         /* The kernel disallows the ID flag to be changed via the setcontext
+            call, thus do the same. */
+         if (orig_rflags & VKI_RFLAGS_ID_BIT)
+            new_rflags |= VKI_RFLAGS_ID_BIT;
+         else
+            new_rflags &= ~VKI_RFLAGS_ID_BIT;
+         LibVEX_GuestAMD64_put_rflags(new_rflags, &tst->arch.vex);
+         VG_TRACK(post_reg_write, part, tid,
+                  offsetof(VexGuestAMD64State, guest_CC_DEP1), sizeof(UWord));
+         VG_TRACK(post_reg_write, part, tid,
+                  offsetof(VexGuestAMD64State, guest_CC_DEP2), sizeof(UWord));
+
+         if (rflags != ~VKI_UC_GUEST_RFLAGS_NEG(uc)) {
+            VG_(debugLog)(1, "syswrap-solaris",
+                             "The rflags value was restored from an "
+                             "explicitly set value in thread %u.\n", tid);
+            ok_restore = True;
+         }
+         else {
+            ULong buf[5];
+            ULong checksum;
+
+            buf[0] = VKI_UC_GUEST_CC_OP(uc);
+            buf[1] = VKI_UC_GUEST_CC_NDEP(uc);
+            buf[2] = VKI_UC_GUEST_CC_DEP1(uc);
+            buf[3] = VKI_UC_GUEST_CC_DEP2(uc);
+            buf[4] = rflags;
+            checksum = ML_(fletcher64)((UInt*)&buf,
+                                       sizeof(buf) / sizeof(UInt));
+            if (checksum == VKI_UC_GUEST_RFLAGS_CHECKSUM(uc)) {
+               /* Check ok, the full restoration is possible. */
+               VG_(debugLog)(1, "syswrap-solaris",
+                                "The CC_* guest state values were fully "
+                                "restored in thread %u.\n", tid);
+               ok_restore = True;
+
+               tst->arch.vex.guest_CC_OP = VKI_UC_GUEST_CC_OP(uc);
+               tst->arch.vex.guest_CC_NDEP = VKI_UC_GUEST_CC_NDEP(uc);
+               tst->arch.vex.guest_CC_DEP1 = VKI_UC_GUEST_CC_DEP1(uc);
+               VG_TRACK(copy_mem_to_reg, part, tid,
+                        (Addr)&VKI_UC_GUEST_CC_DEP1(uc),
+                        offsetof(VexGuestAMD64State, guest_CC_DEP1),
+                        sizeof(UWord));
+               tst->arch.vex.guest_CC_DEP2 = VKI_UC_GUEST_CC_DEP2(uc);
+               VG_TRACK(copy_mem_to_reg, part, tid,
+                        (Addr)&VKI_UC_GUEST_CC_DEP2(uc),
+                        offsetof(VexGuestAMD64State, guest_CC_DEP2),
+                        sizeof(UWord));
+            }
+         }
+
+         if (!ok_restore)
+            VG_(debugLog)(1, "syswrap-solaris",
+                             "Cannot fully restore the CC_* guest state "
+                             "values, using approximate rflags in thread "
+                             "%u.\n", tid);
+      }
+   }
+
+   if (uc->uc_flags & VKI_UC_FPU) {
+      /* FPU */
+      VexEmNote note;
+      SizeT i;
+
+      /* x87 */
+      /* Control word */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..cw)",
+               (Addr)&fs->cw, sizeof(fs->cw));
+      /* Status word */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..sw)",
+               (Addr)&fs->sw, sizeof(fs->sw));
+      /* Compressed tag word */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..fctw)",
+               (Addr)&fs->fctw, sizeof(fs->fctw));
+      /* Last x87 opcode */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..fop)",
+               (Addr)&fs->fop, sizeof(fs->fop));
+      /* Last x87 instruction pointer */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..rip)",
+               (Addr)&fs->rip, sizeof(fs->rip));
+      /* Last x87 data pointer */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..rdp)",
+               (Addr)&fs->rdp, sizeof(fs->rdp));
+      /* Media-instruction control and status register */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..mxcsr)",
+               (Addr)&fs->mxcsr, sizeof(fs->mxcsr));
+      /* Supported features in MXCSR */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..mxcsr_mask)",
+               (Addr)&fs->mxcsr_mask, sizeof(fs->mxcsr_mask));
+
+      /* ST registers */
+      for (i = 0; i < 8; i++) {
+         Addr addr = (Addr)&fs->st[i];
+         VG_TRACK(copy_mem_to_reg, part, tid, addr,
+                  offsetof(VexGuestAMD64State, guest_FPREG[i]), sizeof(ULong));
+      }
+
+      /* XMM registers */
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[0],
+               offsetof(VexGuestAMD64State, guest_YMM0), sizeof(U128));
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[1],
+               offsetof(VexGuestAMD64State, guest_YMM1), sizeof(U128));
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[2],
+               offsetof(VexGuestAMD64State, guest_YMM2), sizeof(U128));
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[3],
+               offsetof(VexGuestAMD64State, guest_YMM3), sizeof(U128));
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[4],
+               offsetof(VexGuestAMD64State, guest_YMM4), sizeof(U128));
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[5],
+               offsetof(VexGuestAMD64State, guest_YMM5), sizeof(U128));
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[6],
+               offsetof(VexGuestAMD64State, guest_YMM6), sizeof(U128));
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[7],
+               offsetof(VexGuestAMD64State, guest_YMM7), sizeof(U128));
+
+      note = LibVEX_GuestAMD64_fxrstor((HWord)fs, &tst->arch.vex);
+      if (note != EmNote_NONE)
+         VG_(message)(Vg_UserMsg,
+                      "Error restoring FP state in thread %u: %s.\n",
+                      tid, LibVEX_EmNote_string(note));
+   }
+}
+
+
+/* ---------------------------------------------------------------------
+   PRE/POST wrappers for AMD64/Solaris-specific syscalls
+   ------------------------------------------------------------------ */
+
+#define PRE(name)       DEFN_PRE_TEMPLATE(amd64_solaris, name)
+#define POST(name)      DEFN_POST_TEMPLATE(amd64_solaris, name)
+
+/* implementation */
+
+#undef PRE
+#undef POST
+
+#endif // defined(VGP_amd64_solaris)
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c
index f8f56f5..3ccad12 100644
--- a/coregrind/m_syswrap/syswrap-arm-linux.c
+++ b/coregrind/m_syswrap/syswrap-arm-linux.c
@@ -7,9 +7,9 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2008-2013 Evan Geller
+   Copyright (C) 2008-2015 Evan Geller
       gaze@bea.ms
 
    This program is free software; you can redistribute it and/or
@@ -154,7 +154,7 @@
             
 /* 
    When a client clones, we need to keep track of the new thread.  This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
 
    2. initialize the thread's new VCPU state
 
@@ -352,8 +352,8 @@
    // pagesize or 4K-size units in offset?  For ppc32/64-linux, this is
    // 4K-sized.  Assert that the page size is 4K here for safety.
    vg_assert(VKI_PAGE_SIZE == 4096);
-   PRINT("sys_mmap2 ( %#lx, %llu, %ld, %ld, %ld, %ld )",
-         ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
+   PRINT("sys_mmap2 ( %#lx, %lu, %lu, %lu, %lu, %lu )",
+         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
    PRE_REG_READ6(long, "mmap2",
                  unsigned long, start, unsigned long, length,
                  unsigned long, prot,  unsigned long, flags,
@@ -370,7 +370,7 @@
 // things, eventually, I think.  --njn
 PRE(sys_lstat64)
 {
-   PRINT("sys_lstat64 ( %#lx(%s), %#lx )",ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_lstat64 ( %#lx(%s), %#lx )", ARG1, (HChar*)ARG1, ARG2);
    PRE_REG_READ2(long, "lstat64", char *, file_name, struct stat64 *, buf);
    PRE_MEM_RASCIIZ( "lstat64(file_name)", ARG1 );
    PRE_MEM_WRITE( "lstat64(buf)", ARG2, sizeof(struct vki_stat64) );
@@ -386,7 +386,7 @@
 
 PRE(sys_stat64)
 {
-   PRINT("sys_stat64 ( %#lx(%s), %#lx )",ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_stat64 ( %#lx(%s), %#lx )", ARG1, (HChar*)ARG1, ARG2);
    PRE_REG_READ2(long, "stat64", char *, file_name, struct stat64 *, buf);
    PRE_MEM_RASCIIZ( "stat64(file_name)", ARG1 );
    PRE_MEM_WRITE( "stat64(buf)", ARG2, sizeof(struct vki_stat64) );
@@ -399,7 +399,8 @@
 
 PRE(sys_fstatat64)
 {
-   PRINT("sys_fstatat64 ( %ld, %#lx(%s), %#lx )",ARG1,ARG2,(char*)ARG2,ARG3);
+   PRINT("sys_fstatat64 ( %ld, %#lx(%s), %#lx )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3);
    PRE_REG_READ3(long, "fstatat64",
                  int, dfd, char *, file_name, struct stat64 *, buf);
    PRE_MEM_RASCIIZ( "fstatat64(file_name)", ARG2 );
@@ -413,7 +414,7 @@
 
 PRE(sys_fstat64)
 {
-   PRINT("sys_fstat64 ( %ld, %#lx )",ARG1,ARG2);
+   PRINT("sys_fstat64 ( %lu, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(long, "fstat64", unsigned long, fd, struct stat64 *, buf);
    PRE_MEM_WRITE( "fstat64(buf)", ARG2, sizeof(struct vki_stat64) );
 }
@@ -577,7 +578,7 @@
       that takes a pointer to the signal mask so supports more signals.
     */
    *flags |= SfMayBlock;
-   PRINT("sys_sigsuspend ( %ld, %ld, %ld )", ARG1,ARG2,ARG3 );
+   PRINT("sys_sigsuspend ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3 );
    PRE_REG_READ3(int, "sigsuspend",
                  int, history0, int, history1,
                  vki_old_sigset_t, mask);
@@ -609,7 +610,7 @@
 // space, and we should therefore not check anything it points to.
 PRE(sys_ptrace)
 {
-   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "ptrace", 
                  long, request, long, pid, long, addr, long, data);
    switch (ARG1) {
@@ -1214,6 +1215,10 @@
    LINXY(__NR_clock_adjtime,     sys_clock_adjtime),    // 372
    LINX_(__NR_syncfs,            sys_syncfs),           // 373
    LINXY(__NR_sendmmsg,          sys_sendmmsg),         // 374
+
+   LINXY(__NR_process_vm_readv,  sys_process_vm_readv), // 376
+   LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 377
+
    LINXY(__NR_getrandom,         sys_getrandom),        // 384
    LINXY(__NR_memfd_create,      sys_memfd_create)      // 385
 };
diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c
index 7551e8a..8d3027d 100644
--- a/coregrind/m_syswrap/syswrap-arm64-linux.c
+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -198,7 +198,7 @@
             
 /* 
    When a client clones, we need to keep track of the new thread.  This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
 
    2. initialize the thread's new VCPU state
 
@@ -431,7 +431,7 @@
 // ARM64 FIXME is this correct?
 PRE(sys_fadvise64)
 {
-   PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )", SARG1, SARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "fadvise64",
                  int, fd, vki_loff_t, offset, vki_size_t, len, int, advice);
 }
@@ -441,8 +441,8 @@
 {
    SysRes r;
 
-   PRINT("sys_mmap ( %#lx, %llu, %ld, %ld, %d, %ld )",
-         ARG1, (ULong)ARG2, ARG3, ARG4, (Int)ARG5, ARG6 );
+   PRINT("sys_mmap ( %#lx, %lu, %lu, %#lx, %lu, %lu )",
+         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
    PRE_REG_READ6(long, "mmap",
                  unsigned long, start, unsigned long, length,
                  unsigned long, prot,  unsigned long, flags,
@@ -855,8 +855,18 @@
 // (unknown).
 
 static SyscallTableEntry syscall_main_table[] = {
+   LINX_(__NR_setxattr,          sys_setxattr),          // 5
+   LINX_(__NR_lsetxattr,         sys_lsetxattr),         // 6
+   LINX_(__NR_fsetxattr,         sys_fsetxattr),         // 7
    LINXY(__NR_getxattr,          sys_getxattr),          // 8
    LINXY(__NR_lgetxattr,         sys_lgetxattr),         // 9
+   LINXY(__NR_fgetxattr,         sys_fgetxattr),         // 10
+   LINXY(__NR_listxattr,         sys_listxattr),         // 11
+   LINXY(__NR_llistxattr,        sys_llistxattr),        // 12
+   LINXY(__NR_flistxattr,        sys_flistxattr),        // 13
+   LINX_(__NR_removexattr,       sys_removexattr),       // 14
+   LINX_(__NR_lremovexattr,      sys_lremovexattr),      // 15
+   LINX_(__NR_fremovexattr,      sys_fremovexattr),      // 16
    GENXY(__NR_getcwd,            sys_getcwd),            // 17
    LINXY(__NR_eventfd2,          sys_eventfd2),          // 19
    LINXY(__NR_epoll_create1,     sys_epoll_create1),     // 20
@@ -949,6 +959,7 @@
    LINX_(__NR_rt_sigsuspend,     sys_rt_sigsuspend),     // 133
    LINXY(__NR_rt_sigaction,      sys_rt_sigaction),      // 134
    LINXY(__NR_rt_sigprocmask,    sys_rt_sigprocmask),    // 135
+   LINXY(__NR_rt_sigpending,     sys_rt_sigpending),     // 136
    LINXY(__NR_rt_sigtimedwait,   sys_rt_sigtimedwait),   // 137
    LINXY(__NR_rt_sigqueueinfo,   sys_rt_sigqueueinfo),   // 138
    PLAX_(__NR_rt_sigreturn,      sys_rt_sigreturn),      // 139
@@ -957,8 +968,10 @@
    GENX_(__NR_setregid,          sys_setregid),          // 143
    GENX_(__NR_setgid,            sys_setgid),            // 144
    GENX_(__NR_setreuid,          sys_setreuid),          // 145
+   GENX_(__NR_setuid,            sys_setuid),            // 146
    LINX_(__NR_setresuid,         sys_setresuid),         // 147
    LINXY(__NR_getresuid,         sys_getresuid),         // 148
+   LINX_(__NR_setresgid,         sys_setresgid),         // 149
    LINXY(__NR_getresgid,         sys_getresgid),         // 150
    GENXY(__NR_times,             sys_times),             // 153
    GENX_(__NR_setpgid,           sys_setpgid),           // 154
@@ -1219,7 +1232,6 @@
 //ZZ    LINXY(__NR_prctl,             sys_prctl),          // 172
 //ZZ    LINXY(__NR_rt_sigaction,      sys_rt_sigaction),   // 174
 //ZZ 
-//ZZ    LINXY(__NR_rt_sigpending,     sys_rt_sigpending),  // 176
 //ZZ    LINXY(__NR_rt_sigtimedwait,   sys_rt_sigtimedwait),// 177
 //ZZ 
 //ZZ    LINX_(__NR_chown,             sys_chown16),        // 182
@@ -1265,18 +1277,6 @@
 //ZZ //   GENX_(222,                    sys_ni_syscall),     // 222
 //ZZ //   PLAXY(223,                    sys_syscall223),     // 223 // sys_bproc?
 //ZZ 
-//ZZ    LINX_(__NR_setxattr,          sys_setxattr),       // 226
-//ZZ    LINX_(__NR_lsetxattr,         sys_lsetxattr),      // 227
-//ZZ    LINX_(__NR_fsetxattr,         sys_fsetxattr),      // 228
-//ZZ 
-//ZZ    LINXY(__NR_fgetxattr,         sys_fgetxattr),      // 231
-//ZZ    LINXY(__NR_listxattr,         sys_listxattr),      // 232
-//ZZ    LINXY(__NR_llistxattr,        sys_llistxattr),     // 233
-//ZZ    LINXY(__NR_flistxattr,        sys_flistxattr),     // 234
-//ZZ 
-//ZZ    LINX_(__NR_removexattr,       sys_removexattr),    // 235
-//ZZ    LINX_(__NR_lremovexattr,      sys_lremovexattr),   // 236
-//ZZ    LINX_(__NR_fremovexattr,      sys_fremovexattr),   // 237
 //ZZ    LINXY(__NR_tkill,             sys_tkill),          // 238 */Linux
 //ZZ    LINXY(__NR_sendfile64,        sys_sendfile64),     // 239
 //ZZ 
diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c
index 0bb276e..206d57f 100644
--- a/coregrind/m_syswrap/syswrap-darwin.c
+++ b/coregrind/m_syswrap/syswrap-darwin.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Apple Inc.
+   Copyright (C) 2005-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -91,8 +91,8 @@
    ThreadState* tst = VG_(get_ThreadState)(tid);
 
    VG_(debugLog)(1, "syswrap-darwin", 
-                    "thread_wrapper(tid=%lld): entry\n", 
-                    (ULong)tidW);
+                    "thread_wrapper(tid=%u): entry\n", 
+                    tid);
 
    vg_assert(tst->status == VgTs_Init);
 
@@ -100,8 +100,8 @@
    VG_(acquire_BigLock)(tid, "thread_wrapper");
 
    if (0)
-      VG_(printf)("thread tid %d started: stack = %p\n",
-                  tid, &tid);
+      VG_(printf)("thread tid %u started: stack = %p\n",
+                  tid, (void *)&tid);
 
    /* Make sure error reporting is enabled in the new thread. */
    tst->err_disablement_level = 0;
@@ -122,8 +122,8 @@
    vg_assert(VG_(is_running_thread)(tid));
 
    VG_(debugLog)(1, "syswrap-darwin", 
-                    "thread_wrapper(tid=%lld): done\n", 
-                    (ULong)tidW);
+                    "thread_wrapper(tid=%u): done\n", 
+                    tid);
 
    /* Return to caller, still holding the lock. */
    return ret;
@@ -161,7 +161,7 @@
       }
    }
 
-   VG_(debugLog)( 2, "syswrap-darwin", "stack for tid %d at %p; init_SP=%p\n",
+   VG_(debugLog)( 2, "syswrap-darwin", "stack for tid %u at %p; init_SP=%p\n",
                    tid, 
                    (void*)tst->os_state.valgrind_stack_base, 
                    (void*)tst->os_state.valgrind_stack_init_SP );
@@ -189,8 +189,8 @@
    ThreadState*      tst;
 
    VG_(debugLog)(1, "syswrap-darwin", 
-                    "run_a_thread_NORETURN(tid=%lld): pre-thread_wrapper\n",
-                    (ULong)tidW);
+                    "run_a_thread_NORETURN(tid=%u): pre-thread_wrapper\n",
+                    tid);
 
    tst = VG_(get_ThreadState)(tid);
    vg_assert(tst);
@@ -199,8 +199,8 @@
    src = thread_wrapper(tid);  
 
    VG_(debugLog)(1, "syswrap-darwin", 
-                    "run_a_thread_NORETURN(tid=%lld): post-thread_wrapper\n",
-                    (ULong)tidW);
+                    "run_a_thread_NORETURN(tid=%u): post-thread_wrapper\n",
+                    tid);
 
    c = VG_(count_living_threads)();
    vg_assert(c >= 1); /* stay sane */
@@ -222,9 +222,9 @@
       );
       VG_(debugLog)(
          1, "syswrap-linux", 
-            "run_a_thread_NORETURN(tid=%lld): "
+            "run_a_thread_NORETURN(tid=%u): "
             "WARNING: exiting thread has err_disablement_level = %u\n",
-            (ULong)tidW, tst->err_disablement_level
+            tid, tst->err_disablement_level
       );
    }
    tst->err_disablement_level = 0;
@@ -232,9 +232,9 @@
    if (c == 1) {
 
       VG_(debugLog)(1, "syswrap-darwin", 
-                       "run_a_thread_NORETURN(tid=%lld): "
+                       "run_a_thread_NORETURN(tid=%u): "
                           "last one standing\n",
-                          (ULong)tidW);
+                          tid);
 
       /* We are the last one standing.  Keep hold of the lock and
          carry on to show final tool results, then exit the entire system. 
@@ -246,9 +246,9 @@
       mach_msg_header_t msg;
 
       VG_(debugLog)(1, "syswrap-darwin", 
-                       "run_a_thread_NORETURN(tid=%lld): "
+                       "run_a_thread_NORETURN(tid=%u): "
                           "not last one standing\n",
-                          (ULong)tidW);
+                          tid);
 
       /* OK, thread is dead, but others still exist.  Just exit. */
 
@@ -997,8 +997,8 @@
 
    if (0 || VG_(clo_trace_syscalls)) {
        VG_(debugLog)(0, "syswrap-darwin",
-                     "sync_mappings (%s) (\"%s\", \"%s\", 0x%llx)\n", 
-                     show_CheckHowOften(check), when, where, (ULong)num);
+                     "sync_mappings (%s) (\"%s\", \"%s\", 0x%lx)\n", 
+                     show_CheckHowOften(check), when, where, num);
    }
 
    // 16 is enough for most cases, but small enough that overflow happens
@@ -1106,12 +1106,14 @@
    case VKI_TIOCPTYGRANT:
    case VKI_TIOCPTYUNLK:
    case VKI_DTRACEHIOC_REMOVE: 
-      PRINT("ioctl ( %ld, 0x%lx )",ARG1,ARG2);
+   case VKI_BIOCFLUSH:
+   case VKI_BIOCPROMISC:
+      PRINT("ioctl ( %lu, 0x%lx )", ARG1, ARG2);
       PRE_REG_READ2(long, "ioctl",
                     unsigned int, fd, unsigned int, request);
       return;
    default:
-      PRINT("ioctl ( %ld, 0x%lx, %#lx )",ARG1,ARG2,ARG3);
+      PRINT("ioctl ( %lu, 0x%lx, %#lx )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "ioctl",
                     unsigned int, fd, unsigned int, request, unsigned long, arg);
    }
@@ -1291,6 +1293,71 @@
    case VKI_FIONCLEX:
        break;
 
+       // net/bpf.h
+   case VKI_BIOCSETF:            /* set BPF filter               */
+      /*
+       * struct bpf_program has a 32-bit count of instructions,
+       * followed by a pointer to an array of those instructions.
+       * In 64-bit mode, there's padding between those two elements.
+       *
+       * So that we don't bogusly complain about the padding bytes,
+       * we just report that we read bf_len and and bf_insns.
+       *
+       * We then make sure that what bf_insns points to is valid.
+       */
+      PRE_MEM_READ( "ioctl(BIOCSETF)",
+                     (Addr)&((struct vki_bpf_program *)ARG3)->vki_bf_len,
+                     sizeof(((struct vki_bpf_program *)ARG3)->vki_bf_len) );
+      PRE_MEM_READ( "ioctl(BIOCSETF)",
+                     (Addr)&((struct vki_bpf_program *)ARG3)->vki_bf_insns,
+                     sizeof(((struct vki_bpf_program *)ARG3)->vki_bf_insns) );
+      if ( ARG3 ) {
+         /* bf_len * sizeof (*bf_insns) */
+         struct vki_bpf_program *bp = (struct vki_bpf_program *)ARG3;
+         if ( bp->bf_insns != NULL )
+           PRE_MEM_READ( "ioctl(BIOCSETF) points to a struct bpf_program whose bf_insns member",
+                          (Addr)(bp->vki_bf_insns),
+                          bp->vki_bf_len * sizeof(*bp->vki_bf_insns) );
+      }
+      break;
+   case VKI_BIOCSETIF:           /* set BPF interface            */
+      PRE_MEM_RASCIIZ( "ioctl(BIOCSETIF)",
+                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+      break;
+   case VKI_BIOCSRTIMEOUT:       /* set BPF timeout              */
+      /*
+       * 64-bit struct timeval starts with a 64-bit "seconds since the
+       * Epoch" value, followed by a 32-bit microseconds value.  The
+       * resulting structure is padded to a multiple of 8 bytes, so
+       * there are 4 padding bytes at the end.
+       *
+       * So that we don't bogusly complain about the padding bytes,
+       * we just report that we read tv_sec and tv_usec.
+       */
+      PRE_MEM_READ( "ioctl(BIOCSRTIMEOUT)",
+                     (Addr)&((struct vki_timeval *)ARG3)->vki_tv_sec,
+                     sizeof(((struct vki_timeval *)ARG3)->vki_tv_sec) );
+      PRE_MEM_READ( "ioctl(BIOCSRTIMEOUT)",
+                     (Addr)&((struct vki_timeval *)ARG3)->vki_tv_usec,
+                     sizeof(((struct vki_timeval *)ARG3)->vki_tv_usec) );
+      break;
+   case VKI_BIOCGDLTLIST:        /* get list of BPF DLTs         */
+      PRE_MEM_READ( "ioctl(BIOCGDLTLIST).bfl_len",
+                     (Addr)&((struct vki_bpf_dltlist *)ARG3)->vki_bfl_list,
+                     sizeof(((struct vki_bpf_dltlist *)ARG3)->vki_bfl_list) );
+      if ( ARG3 ) {
+         /* bfl_len * sizeof (*bfl_list) */
+         struct vki_bpf_dltlist *bdl = (struct vki_bpf_dltlist *)ARG3;
+         if ( bdl->bfl_list != NULL )
+           PRE_MEM_READ( "ioctl(BIOCGDLTLIST).bfl_len",
+                          (Addr)&((struct vki_bpf_dltlist *)ARG3)->vki_bfl_len,
+                          sizeof(((struct vki_bpf_dltlist *)ARG3)->vki_bfl_len) );
+           PRE_MEM_WRITE( "ioctl(BIOCGDLTLIST) points to a struct bpf_dltlist whose bfl_list member",
+                          (Addr)(bdl->vki_bfl_list),
+                          bdl->bfl_len * sizeof(*bdl->vki_bfl_list) );
+      }
+      break;
+
    default: 
       ML_(PRE_unknown_ioctl)(tid, ARG2, ARG3);
       break;
@@ -1417,7 +1484,19 @@
    case VKI_TIOCPTYUNLK:
        break;
 
+       // bpf.h
+   case VKI_BIOCGDLTLIST:        /* get list of BPF DLTs         */
+      if (RES == 0 && ARG3 ) {
+         /* bfl_len * sizeof (*bfl_list) */
+         struct vki_bpf_dltlist *bdl = (struct vki_bpf_dltlist *)ARG3;
+         if ( bdl->vki_bfl_list != NULL )
+           POST_MEM_WRITE( (Addr)(bdl->vki_bfl_list),
+                           bdl->bfl_len * sizeof(*bdl->vki_bfl_list) );
+      }
+      break;
+
    default:
+      ML_(POST_unknown_ioctl)(tid, RES, ARG2, ARG3);
       break;
    }
 }
@@ -1450,6 +1529,11 @@
 #     if DARWIN_VERS >= DARWIN_10_9
       F(F_ADDFILESIGS);
 #     endif
+#     if DARWIN_VERS >= DARWIN_10_11
+      F(F_ADDFILESIGS_FOR_DYLD_SIM);
+      F(F_BARRIERFSYNC);
+      F(F_ADDFILESIGS_RETURN);
+#     endif
    default:
       return "UNKNOWN";
    }
@@ -1463,7 +1547,7 @@
    case VKI_F_GETFD:
    case VKI_F_GETFL:
    case VKI_F_GETOWN:
-      PRINT("fcntl ( %ld, %ld )", ARG1,ARG2);
+      PRINT("fcntl ( %lu, %lu )", ARG1,ARG2);
       PRE_REG_READ2(long, "fcntl", unsigned int, fd, unsigned int, cmd);
       break;
 
@@ -1472,7 +1556,7 @@
    case VKI_F_SETFD:
    case VKI_F_SETFL:
    case VKI_F_SETOWN:
-      PRINT("fcntl[ARG3=='arg'] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRINT("fcntl[ARG3=='arg'] ( %lu, %lu, %lu )", ARG1,ARG2,ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd, unsigned long, arg);
       break;
@@ -1481,7 +1565,7 @@
    case VKI_F_GETLK:
    case VKI_F_SETLK:
    case VKI_F_SETLKW:
-      PRINT("fcntl[ARG3=='lock'] ( %ld, %ld, %#lx )", ARG1,ARG2,ARG3);
+      PRINT("fcntl[ARG3=='lock'] ( %lu, %lu, %#lx )", ARG1,ARG2,ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct flock64 *, lock);
@@ -1491,7 +1575,7 @@
       break;
 #  if DARWIN_VERS >= DARWIN_10_10
    case VKI_F_SETLKWTIMEOUT:
-      PRINT("fcntl[ARG3=='locktimeout'] ( %ld, %ld, %#lx )", ARG1,ARG2,ARG3);
+      PRINT("fcntl[ARG3=='locktimeout'] ( %lu, %lu, %#lx )", ARG1,ARG2,ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct flocktimeout *, lock);
@@ -1507,13 +1591,13 @@
    case VKI_F_FREEZE_FS:
    case VKI_F_THAW_FS:
    case VKI_F_GLOBAL_NOCACHE:
-      PRINT("fcntl ( %ld, %s )", ARG1, name_for_fcntl(ARG1));
+      PRINT("fcntl ( %lu, %s, %lu )", ARG1, name_for_fcntl(ARG1), ARG2);
       PRE_REG_READ2(long, "fcntl", unsigned int, fd, unsigned int, cmd);
       break;
 
        // struct fstore
    case VKI_F_PREALLOCATE:
-      PRINT("fcntl ( %ld, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
+      PRINT("fcntl ( %lu, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct fstore *, fstore);
@@ -1534,7 +1618,7 @@
 
        // off_t
    case VKI_F_SETSIZE:
-      PRINT("fcntl ( %ld, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
+      PRINT("fcntl ( %lu, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     vki_off_t *, offset);
@@ -1542,7 +1626,7 @@
 
        // struct radvisory
    case VKI_F_RDADVISE:
-      PRINT("fcntl ( %ld, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
+      PRINT("fcntl ( %lu, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_radvisory *, radvisory);
@@ -1559,7 +1643,7 @@
        // struct fbootstraptransfer
    case VKI_F_READBOOTSTRAP:
    case VKI_F_WRITEBOOTSTRAP:
-      PRINT("fcntl ( %ld, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
+      PRINT("fcntl ( %lu, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct fbootstraptransfer *, bootstrap);
@@ -1570,7 +1654,7 @@
 
        // struct log2phys (out)
    case VKI_F_LOG2PHYS:
-      PRINT("fcntl ( %ld, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
+      PRINT("fcntl ( %lu, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct log2phys *, l2p);
@@ -1580,7 +1664,7 @@
 
        // char[maxpathlen] (out)
    case VKI_F_GETPATH:
-      PRINT("fcntl ( %ld, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
+      PRINT("fcntl ( %lu, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     char *, pathbuf);
@@ -1590,8 +1674,8 @@
 
        // char[maxpathlen] (in)
    case VKI_F_PATHPKG_CHECK:
-      PRINT("fcntl ( %ld, %s, %#lx '%s')", ARG1, name_for_fcntl(ARG2), ARG3,
-          (char *)ARG3);
+      PRINT("fcntl ( %lu, %s, %#lx '%s')", ARG1, name_for_fcntl(ARG2), ARG3,
+            (HChar *)ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     char *, pathbuf);
@@ -1599,7 +1683,7 @@
       break;
 
    case VKI_F_ADDSIGS: /* Add detached signatures (for code signing) */
-      PRINT("fcntl ( %ld, %s )", ARG1, name_for_fcntl(ARG2));
+      PRINT("fcntl ( %lu, %s )", ARG1, name_for_fcntl(ARG2));
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     vki_fsignatures_t *, sigs);
@@ -1618,7 +1702,7 @@
       break;
 
    case VKI_F_ADDFILESIGS: /* Add signature from same file (used by dyld for shared libs) */
-      PRINT("fcntl ( %ld, %s )", ARG1, name_for_fcntl(ARG2));
+      PRINT("fcntl ( %lu, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     vki_fsignatures_t *, sigs);
@@ -1632,9 +1716,25 @@
       }
       break;
 
+#  if DARWIN_VERS >= DARWIN_10_11
+   case VKI_F_ADDFILESIGS_FOR_DYLD_SIM: /* Add signature from same file, only if it is signed
+                                           by Apple used by dyld for simulator */
+      // FIXME: RK
+      break;
+
+   case VKI_F_BARRIERFSYNC: /* fsync + issue barrier to drive */
+      // FIXME: RK
+      break;
+
+   case VKI_F_ADDFILESIGS_RETURN: /* Add signature from same file, return end offset in 
+                                     structure on success */
+      // FIXME: RK
+      break;
+#  endif
+
    default:
-      PRINT("fcntl ( %ld, %ld [??] )", ARG1, ARG2);
-      log_decaying("UNKNOWN fcntl %ld!", ARG2);
+      PRINT("fcntl ( %lu, %lu [??] )", ARG1, ARG2);
+      log_decaying("UNKNOWN fcntl %lu!", ARG2);
       break;
    }
 }
@@ -1695,7 +1795,7 @@
 
 PRE(futimes)
 {
-   PRINT("futimes ( %ld, %#lx )", ARG1,ARG2);
+   PRINT("futimes ( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "futimes", int, fd, struct timeval *, tvp);
    if (!ML_(fd_allowed)(ARG1, "futimes", tid, False)) {
       SET_STATUS_Failure( VKI_EBADF );
@@ -1707,14 +1807,14 @@
 
 PRE(semget)
 {
-   PRINT("semget ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+   PRINT("semget ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
    PRE_REG_READ3(long, "semget", vki_key_t, key, int, nsems, int, semflg);
 }
 
 PRE(semop)
 {
    *flags |= SfMayBlock;
-   PRINT("semop ( %ld, %#lx, %lu )",ARG1,ARG2,ARG3);
+   PRINT("semop ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "semop",
                  int, semid, struct sembuf *, sops, vki_size_t, nsoops);
    ML_(generic_PRE_sys_semop)(tid, ARG1,ARG2,ARG3);
@@ -1725,23 +1825,23 @@
    switch (ARG3) {
    case VKI_IPC_STAT:
    case VKI_IPC_SET:
-      PRINT("semctl ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+      PRINT("semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
       PRE_REG_READ4(long, "semctl",
                     int, semid, int, semnum, int, cmd, struct semid_ds *, arg);
       break;
    case VKI_GETALL:
    case VKI_SETALL:
-      PRINT("semctl ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+      PRINT("semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
       PRE_REG_READ4(long, "semctl",
                     int, semid, int, semnum, int, cmd, unsigned short *, arg);
       break;
    case VKI_SETVAL:
-      PRINT("semctl ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+      PRINT("semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
       PRE_REG_READ4(long, "semctl",
                     int, semid, int, semnum, int, cmd, int, arg);
       break;
    default:
-      PRINT("semctl ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+      PRINT("semctl ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
       PRE_REG_READ3(long, "semctl",
                     int, semid, int, semnum, int, cmd);
       break;
@@ -1757,14 +1857,14 @@
 {
    if (ARG2 & VKI_O_CREAT) {
       // 4-arg version
-      PRINT("sem_open ( %#lx(%s), %ld, %ld, %ld )",
-            ARG1,(char*)ARG1,ARG2,ARG3,ARG4);
+      PRINT("sem_open ( %#lx(%s), %ld, %lu, %lu )",
+            ARG1, (HChar*)ARG1, SARG2, ARG3, ARG4);
       PRE_REG_READ4(vki_sem_t *, "sem_open",
                     const char *, name, int, oflag, vki_mode_t, mode,
                     unsigned int, value);
    } else {
       // 2-arg version
-      PRINT("sem_open ( %#lx(%s), %ld )",ARG1,(char*)ARG1,ARG2);
+      PRINT("sem_open ( %#lx(%s), %ld )", ARG1, (HChar*)ARG1, SARG2);
       PRE_REG_READ2(vki_sem_t *, "sem_open",
                     const char *, name, int, oflag);
    }
@@ -1782,7 +1882,7 @@
 
 PRE(sem_unlink)
 {
-   PRINT("sem_unlink(  %#lx(%s) )", ARG1,(char*)ARG1);
+   PRINT("sem_unlink(  %#lx(%s) )", ARG1, (HChar*)ARG1);
    PRE_REG_READ1(int, "sem_unlink", const char *, name);
    PRE_MEM_RASCIIZ( "sem_unlink(name)", ARG1 );
 }
@@ -1803,7 +1903,7 @@
 
 PRE(sem_init)
 {
-  PRINT("sem_init( %#lx, %ld, %ld )", ARG1, ARG2, ARG3);
+  PRINT("sem_init( %#lx, %ld, %lu )", ARG1, SARG2, ARG3);
   PRE_REG_READ3(int, "sem_init", vki_sem_t *, sem,
                 int, pshared, unsigned int, value);
   PRE_MEM_WRITE("sem_init(sem)", ARG1, sizeof(vki_sem_t));
@@ -1903,7 +2003,7 @@
 PRE(kevent)
 {
    PRINT("kevent( %ld, %#lx, %ld, %#lx, %ld, %#lx )", 
-         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+         SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(int,"kevent", int,kq, 
                  const struct vki_kevent *,changelist, int,nchanges, 
                  struct vki_kevent *,eventlist, int,nevents, 
@@ -1929,7 +2029,7 @@
 PRE(kevent64)
 {
    PRINT("kevent64( %ld, %#lx, %ld, %#lx, %ld, %#lx )",
-         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+         SARG1, ARG2, SARG3, ARG4, SARG5, ARG6);
    PRE_REG_READ6(int,"kevent64", int,kq,
                  const struct vki_kevent64 *,changelist, int,nchanges,
                  struct vki_kevent64 *,eventlist, int,nevents,
@@ -1997,8 +2097,8 @@
 
 PRE(workq_ops)
 {
-   PRINT("workq_ops( %ld(%s), %#lx, %ld )", ARG1, workqop_name(ARG1), ARG2,
-      ARG3);
+   PRINT("workq_ops( %ld(%s), %#lx, %ld )", SARG1, workqop_name(ARG1), ARG2,
+         SARG3);
    PRE_REG_READ3(int,"workq_ops", int,"options", void *,"item", 
                  int,"priority");
 
@@ -2058,7 +2158,7 @@
 PRE(__mac_syscall)
 {
    PRINT("__mac_syscall( %#lx(%s), %ld, %#lx )",
-         ARG1, (HChar*)ARG1, ARG2, ARG3);
+         ARG1, (HChar*)ARG1, SARG2, ARG3);
    PRE_REG_READ3(int,"__mac_syscall", char *,"policy", 
                  int,"call", void *,"arg");
 
@@ -2074,7 +2174,7 @@
    ThreadId     t;
    ThreadState* tst;
 
-   PRINT("darwin exit( %ld )", ARG1);
+   PRINT("darwin exit( %ld )", SARG1);
    PRE_REG_READ1(void, "exit", int, status);
 
    tst = VG_(get_ThreadState)(tid);
@@ -2102,7 +2202,7 @@
 
 PRE(sigaction)
 {
-   PRINT("sigaction ( %ld, %#lx, %#lx )", ARG1,ARG2,ARG3);
+   PRINT("sigaction ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sigaction",
                  int, signum, vki_sigaction_toK_t *, act,
                  vki_sigaction_fromK_t *, oldact);
@@ -2135,18 +2235,52 @@
 
 PRE(__pthread_kill)
 {
-   PRINT("__pthread_kill ( %ld, %ld )", ARG1, ARG2);
+   PRINT("__pthread_kill ( %#lx, %ld )", ARG1, SARG2);
    PRE_REG_READ2(long, "__pthread_kill", vki_pthread_t*, thread, int, sig);
 }
 
 
 PRE(__pthread_sigmask)
 {
-   // GrP fixme
-   // JRS: arguments are identical to sigprocmask 
-   // (how, sigset_t*, sigset_t*).  Perhaps behave identically?
-   log_decaying("UNKNOWN __pthread_sigmask is unsupported.");
-   SET_STATUS_Success( 0 );
+    // arguments are identical to sigprocmask (how, sigset_t*, sigset_t*).
+    UWord arg1;
+    PRINT("__pthread_sigmask ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+    PRE_REG_READ3(long, "__pthread_sigmask",
+                  int, how, vki_sigset_t *, set, vki_sigset_t *, oldset);
+    if (ARG2 != 0)
+        PRE_MEM_READ( "__pthread_sigmask(set)", ARG2, sizeof(vki_sigset_t));
+    if (ARG3 != 0)
+        PRE_MEM_WRITE( "__pthread_sigmask(oldset)", ARG3, sizeof(vki_sigset_t));
+    
+    /* Massage ARG1 ('how').  If ARG2 (the new mask) is NULL then the
+     value of 'how' is irrelevant, and it appears that Darwin's libc
+     passes zero, which is not equal to any of
+     SIG_{BLOCK,UNBLOCK,SETMASK}.  This causes
+     VG_(do_sys_sigprocmask) to complain, since it checks the 'how'
+     value independently of the other args.  Solution: in this case,
+     simply pass a valid (but irrelevant) value for 'how'. */
+    /* Also, in this case the new set is passed to the kernel by
+     reference, not value, as in some other sigmask related Darwin
+     syscalls. */
+    arg1 = ARG1;
+    if (ARG2 == 0  /* the new-set is NULL */
+        && ARG1 != VKI_SIG_BLOCK
+        && ARG1 != VKI_SIG_UNBLOCK && ARG1 != VKI_SIG_SETMASK) {
+        arg1 = VKI_SIG_SETMASK;
+    }
+    SET_STATUS_from_SysRes(
+                           VG_(do_sys_sigprocmask) ( tid, arg1, (vki_sigset_t*)ARG2,
+                                                    (vki_sigset_t*)ARG3 )
+                           );
+    
+    if (SUCCESS)
+        *flags |= SfPollAfter;
+}
+POST(__pthread_sigmask)
+{
+    vg_assert(SUCCESS);
+    if (RES == 0 && ARG3 != 0)
+        POST_MEM_WRITE( ARG3, sizeof(vki_sigset_t));
 }
 
 
@@ -2155,7 +2289,7 @@
    *flags |= SfMayBlock; /* might kill this thread??? */
    /* I don't think so -- I think it just changes the cancellation
       state.  But taking no chances. */
-   PRINT("__pthread_canceled ( %ld )", ARG1);
+   PRINT("__pthread_canceled ( %#lx )", ARG1);
    PRE_REG_READ1(long, "__pthread_canceled", void*, arg1);
 }
 
@@ -2172,7 +2306,7 @@
 PRE(__disable_threadsignal)
 {
    vki_sigset_t set;
-   PRINT("__disable_threadsignal(%ld, %ld, %ld)", ARG1, ARG2, ARG3);
+   PRINT("__disable_threadsignal(%ld, %ld, %ld)", SARG1, SARG2, SARG3);
    /* I don't think this really looks at its arguments.  So don't
       bother to check them. */
 
@@ -2191,7 +2325,7 @@
 
 PRE(__pthread_chdir)
 {
-    PRINT("__pthread_chdir ( %#lx(%s) )", ARG1, (char*)ARG1);
+    PRINT("__pthread_chdir ( %#lx(%s) )", ARG1, (HChar*)ARG1);
     PRE_REG_READ1(long, "__pthread_chdir", const char *, path);
     PRE_MEM_RASCIIZ( "__pthread_chdir(path)", ARG1 );
 }
@@ -2200,7 +2334,7 @@
 
 PRE(__pthread_fchdir)
 {
-    PRINT("__pthread_fchdir ( %ld )", ARG1);
+    PRINT("__pthread_fchdir ( %lu )", ARG1);
     PRE_REG_READ1(long, "__pthread_fchdir", unsigned int, fd);
 }
 
@@ -2208,7 +2342,7 @@
 PRE(kdebug_trace)
 {
    PRINT("kdebug_trace(%ld, %ld, %ld, %ld, %ld, %ld)", 
-         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+         SARG1, SARG2, SARG3, SARG4, SARG5, SARG6);
    /*
      Don't check anything - some clients pass fewer arguments.
    PRE_REG_READ6(long, "kdebug_trace", 
@@ -2220,20 +2354,20 @@
 
 PRE(seteuid)
 {
-    PRINT("seteuid(%ld)", ARG1);
+    PRINT("seteuid(%lu)", ARG1);
     PRE_REG_READ1(long, "seteuid", vki_uid_t, "uid");
 }
 
 
 PRE(setegid)
 {
-    PRINT("setegid(%ld)", ARG1);
+    PRINT("setegid(%lu)", ARG1);
     PRE_REG_READ1(long, "setegid", vki_uid_t, "uid");
 }
 
 PRE(settid)
 {
-    PRINT("settid(%ld, %ld)", ARG1, ARG2);
+    PRINT("settid(%lu, %lu)", ARG1, ARG2);
     PRE_REG_READ2(long, "settid", vki_uid_t, "uid", vki_gid_t, "gid");
 }
 
@@ -2291,7 +2425,7 @@
 PRE(getxattr)
 {
    PRINT("getxattr(%#lx(%s), %#lx(%s), %#lx, %lu, %lu, %ld)",
-         ARG1, (char *)ARG1, ARG2, (char *)ARG2, ARG3, ARG4, ARG5, ARG6);
+         ARG1, (HChar *)ARG1, ARG2, (HChar *)ARG2, ARG3, ARG4, ARG5, SARG6);
 
    PRE_REG_READ6(vki_ssize_t, "getxattr",
                 const char *, path, char *, name, void *, value,
@@ -2312,7 +2446,7 @@
 PRE(fgetxattr)
 {
    PRINT("fgetxattr(%ld, %#lx(%s), %#lx, %lu, %lu, %ld)",
-      ARG1, ARG2, (char *)ARG2, ARG3, ARG4, ARG5, ARG6);
+         SARG1, ARG2, (HChar *)ARG2, ARG3, ARG4, ARG5, SARG6);
 
    PRE_REG_READ6(vki_ssize_t, "fgetxattr",
                  int, fd, char *, name, void *, value,
@@ -2330,7 +2464,7 @@
 PRE(setxattr)
 {
    PRINT("setxattr ( %#lx(%s), %#lx(%s), %#lx, %lu, %lu, %ld )", 
-         ARG1, (char *)ARG1, ARG2, (char*)ARG2, ARG3, ARG4, ARG5, ARG6 );
+         ARG1, (HChar *)ARG1, ARG2, (HChar*)ARG2, ARG3, ARG4, ARG5, SARG6 );
    PRE_REG_READ6(int, "setxattr", 
                  const char *,"path", char *,"name", void *,"value", 
                  vki_size_t,"size", uint32_t,"position", int,"options" );
@@ -2344,7 +2478,7 @@
 PRE(fsetxattr)
 {
    PRINT( "fsetxattr ( %ld, %#lx(%s), %#lx, %lu, %lu, %ld )", 
-          ARG1, ARG2, (char*)ARG2, ARG3, ARG4, ARG5, ARG6 );
+          SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4, ARG5, SARG6 );
    PRE_REG_READ6(int, "fsetxattr", 
                  int,"fd", char *,"name", void *,"value", 
                  vki_size_t,"size", uint32_t,"position", int,"options" );
@@ -2357,7 +2491,7 @@
 PRE(removexattr)
 {
    PRINT( "removexattr ( %#lx(%s), %#lx(%s), %ld )",
-          ARG1, (HChar*)ARG1, ARG2, (HChar*)ARG2, ARG3 );
+          ARG1, (HChar*)ARG1, ARG2, (HChar*)ARG2, SARG3 );
    PRE_REG_READ3(int, "removexattr",
                  const char*, "path", char*, "attrname", int, "options");
    PRE_MEM_RASCIIZ( "removexattr(path)", ARG1 );
@@ -2368,7 +2502,7 @@
 PRE(fremovexattr)
 {
    PRINT( "fremovexattr ( %ld, %#lx(%s), %ld )",
-          ARG1, ARG2, (HChar*)ARG2, ARG3 );
+          SARG1, ARG2, (HChar*)ARG2, SARG3 );
    PRE_REG_READ3(int, "fremovexattr",
                  int, "fd", char*, "attrname", int, "options");
    PRE_MEM_RASCIIZ( "removexattr(attrname)", ARG2 );
@@ -2378,7 +2512,7 @@
 PRE(listxattr)
 {
    PRINT( "listxattr ( %#lx(%s), %#lx, %lu, %ld )", 
-          ARG1, (char *)ARG1, ARG2, ARG3, ARG4 );
+          ARG1, (HChar *)ARG1, ARG2, ARG3, SARG4 );
    PRE_REG_READ4 (long, "listxattr", 
                  const char *,"path", char *,"namebuf", 
                  vki_size_t,"size", int,"options" );
@@ -2398,7 +2532,7 @@
 PRE(flistxattr)
 {
    PRINT( "flistxattr ( %ld, %#lx, %lu, %ld )", 
-          ARG1, ARG2, ARG3, ARG4 );
+          SARG1, ARG2, ARG3, SARG4 );
    PRE_REG_READ4 (long, "flistxattr", 
                   int, "fd", char *,"namebuf", 
                  vki_size_t,"size", int,"options" );
@@ -2416,7 +2550,7 @@
 PRE(shmat)
 {
    UWord arg2tmp;
-   PRINT("shmat ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("shmat ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "shmat",
                  int, shmid, const void *, shmaddr, int, shmflg);
    arg2tmp = ML_(generic_PRE_sys_shmat)(tid, ARG1,ARG2,ARG3);
@@ -2432,7 +2566,7 @@
 
 PRE(shmctl)
 {
-   PRINT("shmctl ( %ld, %ld, %#lx )",ARG1,ARG2,ARG3);
+   PRINT("shmctl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "shmctl",
                  int, shmid, int, cmd, struct vki_shmid_ds *, buf);
    ML_(generic_PRE_sys_shmctl)(tid, ARG1,ARG2,ARG3);
@@ -2456,13 +2590,13 @@
 
 PRE(shmget)
 {
-   PRINT("shmget ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+   PRINT("shmget ( %ld, %lu, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "shmget", vki_key_t, key, vki_size_t, size, int, shmflg);
 }
 
 PRE(shm_open)
 {
-   PRINT("shm_open(%#lx(%s), %ld, %ld)", ARG1, (char *)ARG1, ARG2, ARG3);
+   PRINT("shm_open(%#lx(%s), %ld, %lu)", ARG1, (HChar *)ARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "shm_open",
                  const char *,"name", int,"flags", vki_mode_t,"mode");
 
@@ -2478,14 +2612,14 @@
       SET_STATUS_Failure( VKI_EMFILE );
    } else {
       if (VG_(clo_track_fds))
-         ML_(record_fd_open_with_given_name)(tid, RES, (char*)ARG1);
+         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)ARG1);
    }
 }
 
 PRE(shm_unlink)
 {
    *flags |= SfMayBlock;
-   PRINT("shm_unlink ( %#lx(%s) )", ARG1,(char*)ARG1);
+   PRINT("shm_unlink ( %#lx(%s) )", ARG1, (HChar*)ARG1);
    PRE_REG_READ1(long, "shm_unlink", const char *, pathname);
    PRE_MEM_RASCIIZ( "shm_unlink(pathname)", ARG1 );
 }
@@ -2501,7 +2635,7 @@
 PRE(stat_extended)
 {
    PRINT("stat_extended( %#lx(%s), %#lx, %#lx, %#lx )",
-      ARG1, (char *)ARG1, ARG2, ARG3, ARG4);
+         ARG1, (HChar *)ARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "stat_extended", char *, file_name, struct stat *, buf, 
                  void *, fsacl, vki_size_t *, fsacl_size);
    PRE_MEM_RASCIIZ( "stat_extended(file_name)",  ARG1 );
@@ -2522,7 +2656,7 @@
 PRE(lstat_extended)
 {
    PRINT("lstat_extended( %#lx(%s), %#lx, %#lx, %#lx )",
-      ARG1, (char *)ARG1, ARG2, ARG3, ARG4);
+         ARG1, (HChar *)ARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "lstat_extended", char *, file_name, struct stat *, buf, 
                  void *, fsacl, vki_size_t *, fsacl_size);
    PRE_MEM_RASCIIZ( "lstat_extended(file_name)",  ARG1 );
@@ -2543,7 +2677,7 @@
 PRE(fstat_extended)
 {
    PRINT("fstat_extended( %ld, %#lx, %#lx, %#lx )",
-      ARG1, ARG2, ARG3, ARG4);
+         SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "fstat_extended", int, fd, struct stat *, buf, 
                  void *, fsacl, vki_size_t *, fsacl_size);
    PRE_MEM_WRITE(   "fstat_extended(buf)",        ARG2, sizeof(struct vki_stat) );
@@ -2563,7 +2697,7 @@
 PRE(stat64_extended)
 {
    PRINT("stat64_extended( %#lx(%s), %#lx, %#lx, %#lx )",
-      ARG1, (char *)ARG1, ARG2, ARG3, ARG4);
+         ARG1, (HChar *)ARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "stat64_extended", char *, file_name, struct stat64 *, buf, 
                  void *, fsacl, vki_size_t *, fsacl_size);
    PRE_MEM_RASCIIZ( "stat64_extended(file_name)",  ARG1 );
@@ -2584,7 +2718,7 @@
 PRE(lstat64_extended)
 {
    PRINT("lstat64_extended( %#lx(%s), %#lx, %#lx, %#lx )",
-      ARG1, (char *)ARG1, ARG2, ARG3, ARG4);
+         ARG1, (HChar *)ARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "lstat64_extended", char *, file_name, struct stat64 *, buf, 
                  void *, fsacl, vki_size_t *, fsacl_size);
    PRE_MEM_RASCIIZ( "lstat64_extended(file_name)",  ARG1 );
@@ -2605,7 +2739,7 @@
 PRE(fstat64_extended)
 {
    PRINT("fstat64_extended( %ld, %#lx, %#lx, %#lx )",
-      ARG1, ARG2, ARG3, ARG4);
+         SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "fstat64_extended", int, fd, struct stat64 *, buf, 
                  void *, fsacl, vki_size_t *, fsacl_size);
    PRE_MEM_WRITE(   "fstat64_extended(buf)",        ARG2, sizeof(struct vki_stat64) );
@@ -2626,7 +2760,7 @@
 {
    /* DDD: Note: this is not really correct.  Handling of
       chmod_extended is broken in the same way. */
-   PRINT("fchmod_extended ( %ld, %ld, %ld, %ld, %#lx )",
+   PRINT("fchmod_extended ( %lu, %lu, %lu, %lu, %#lx )",
          ARG1, ARG2, ARG3, ARG4, ARG5);
    PRE_REG_READ5(long, "fchmod_extended", 
                  unsigned int, fildes, 
@@ -2669,9 +2803,9 @@
 {
    /* DDD: Note: this is not really correct.  Handling of
       {,f}chmod_extended is broken in the same way. */
-   PRINT("open_extended ( %#lx(%s), 0x%lx, %ld, %ld, %ld, %#lx )",
+   PRINT("open_extended ( %#lx(%s), %ld, %lu, %lu, %lu, %#lx )",
          ARG1, ARG1 ? (HChar*)ARG1 : "(null)",
-	 ARG2, ARG3, ARG4, ARG5, ARG6);
+	 SARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(long, "open_extended", 
                  char*, path,
                  int,   flags,
@@ -2714,7 +2848,7 @@
 PRE(access_extended)
 {
    PRINT("access_extended( %#lx(%s), %lu, %#lx, %lu )",
-      ARG1, (char *)ARG1, ARG2, ARG3, ARG4);
+         ARG1, (HChar *)ARG1, ARG2, ARG3, ARG4);
    // XXX: the accessx_descriptor struct contains padding, so this can cause
    // unnecessary undefined value errors.  But you arguably shouldn't be
    // passing undefined values to the kernel anyway...
@@ -2774,7 +2908,7 @@
 
 PRE(chflags)
 {
-   PRINT("chflags ( %#lx(%s), %lu )", ARG1, (char *)ARG1, ARG2);
+   PRINT("chflags ( %#lx(%s), %lu )", ARG1, (HChar *)ARG1, ARG2);
    PRE_REG_READ2(int, "chflags", const char *,path, unsigned int,flags);
    PRE_MEM_RASCIIZ("chflags(path)", ARG1);
 
@@ -2783,7 +2917,7 @@
 
 PRE(fchflags)
 {
-   PRINT("fchflags ( %ld, %lu )", ARG1, ARG2);
+   PRINT("fchflags ( %ld, %lu )", SARG1, ARG2);
    PRE_REG_READ2(int, "fchflags", int,fd, unsigned int,flags);
 
    // GrP fixme sanity-check flags value?
@@ -2791,7 +2925,7 @@
 
 PRE(stat64)
 {
-   PRINT("stat64 ( %#lx(%s), %#lx )", ARG1, (char *)ARG1, ARG2);
+   PRINT("stat64 ( %#lx(%s), %#lx )", ARG1, (HChar *)ARG1, ARG2);
    PRE_REG_READ2(long, "stat", const char *,path, struct stat64 *,buf);
    PRE_MEM_RASCIIZ("stat64(path)", ARG1);
    PRE_MEM_WRITE( "stat64(buf)", ARG2, sizeof(struct vki_stat64) );
@@ -2803,7 +2937,7 @@
 
 PRE(lstat64)
 {
-   PRINT("lstat64 ( %#lx(%s), %#lx )", ARG1, (char *)ARG1, ARG2);
+   PRINT("lstat64 ( %#lx(%s), %#lx )", ARG1, (HChar *)ARG1, ARG2);
    PRE_REG_READ2(long, "stat", const char *,path, struct stat64 *,buf);
    PRE_MEM_RASCIIZ("lstat64(path)", ARG1);
    PRE_MEM_WRITE( "lstat64(buf)", ARG2, sizeof(struct vki_stat64) );
@@ -2815,7 +2949,7 @@
 
 PRE(fstat64)
 {
-   PRINT("fstat64 ( %ld, %#lx )", ARG1,ARG2);
+   PRINT("fstat64 ( %lu, %#lx )", ARG1,ARG2);
    PRE_REG_READ2(long, "fstat", unsigned int, fd, struct stat64 *, buf);
    PRE_MEM_WRITE( "fstat64(buf)", ARG2, sizeof(struct vki_stat64) );
 }
@@ -2826,7 +2960,7 @@
 
 PRE(getfsstat)
 {
-   PRINT("getfsstat(%#lx, %ld, %ld)", ARG1, ARG2, ARG3);
+   PRINT("getfsstat(%#lx, %ld, %ld)", ARG1, SARG2, SARG3);
    PRE_REG_READ3(int, "getfsstat",
                  struct vki_statfs *, buf, int, bufsize, int, flags);
    if (ARG1) {
@@ -2844,7 +2978,7 @@
 
 PRE(getfsstat64)
 {
-   PRINT("getfsstat64(%#lx, %ld, %ld)", ARG1, ARG2, ARG3);
+   PRINT("getfsstat64(%#lx, %ld, %ld)", ARG1, SARG2, SARG3);
    PRE_REG_READ3(int, "getfsstat64",
                  struct vki_statfs64 *, buf, int, bufsize, int, flags);
    if (ARG1) {
@@ -2867,7 +3001,7 @@
    // by 'data'.
    *flags |= SfMayBlock;
    PRINT("sys_mount( %#lx(%s), %#lx(%s), %#lx, %#lx )",
-         ARG1,(char*)ARG1, ARG2,(char*)ARG2, ARG3, ARG4);
+         ARG1, (HChar*)ARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "mount",
                  const char *, type, const char *, dir,
                  int, flags, void *, data);
@@ -3057,7 +3191,7 @@
 PRE(getattrlist)
 {
    PRINT("getattrlist(%#lx(%s), %#lx, %#lx, %lu, %lu)", 
-         ARG1, (char *)ARG1, ARG2, ARG3, ARG4, ARG5);
+         ARG1, (HChar *)ARG1, ARG2, ARG3, ARG4, ARG5);
    PRE_REG_READ5(int, "getattrlist", 
                  const char *,path, struct vki_attrlist *,attrList, 
                  void *,attrBuf, vki_size_t,attrBufSize, unsigned int,options);
@@ -3085,7 +3219,7 @@
 PRE(setattrlist)
 {
    PRINT("setattrlist(%#lx(%s), %#lx, %#lx, %lu, %lu)", 
-         ARG1, (char *)ARG1, ARG2, ARG3, ARG4, ARG5);
+         ARG1, (HChar *)ARG1, ARG2, ARG3, ARG4, ARG5);
    PRE_REG_READ5(int, "setattrlist", 
                  const char *,path, struct vki_attrlist *,attrList, 
                  void *,attrBuf, vki_size_t,attrBufSize, unsigned int,options);
@@ -3097,8 +3231,8 @@
 
 PRE(getdirentriesattr)
 {
-   PRINT("getdirentriesattr(%ld, %#lx, %#lx, %ld, %#lx, %#lx, %#lx, %ld)", 
-         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ARG8);
+   PRINT("getdirentriesattr(%ld, %#lx, %#lx, %lu, %#lx, %#lx, %#lx, %lu)", 
+         SARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ARG8);
    PRE_REG_READ8(int, "getdirentriesattr", 
                  int,fd, struct vki_attrlist *,attrList, 
                  void *,attrBuf, size_t,attrBufSize, 
@@ -3137,51 +3271,10 @@
          count, (Addr)p-(Addr)ARG3, ARG4);
 }
 
-
-PRE(fsgetpath)
-{
-#if VG_WORDSIZE == 4
-   PRINT("fsgetpath(%#lx, %ld, %#lx {%u,%u}, %llu)", 
-         ARG1, ARG2, ARG3,
-         ((unsigned int *)ARG3)[0], ((unsigned int *)ARG3)[1],
-         LOHI64(ARG4, ARG5));
-   PRE_REG_READ5(ssize_t, "fsgetpath", 
-                 void*,"buf", size_t,"bufsize", 
-                 fsid_t *,"fsid",
-                 vki_uint32_t, "objid_low32", vki_uint32_t, "objid_high32");
-#else
-   PRINT("fsgetpath(%#lx, %ld, %#lx {%u,%u}, %lu)", 
-         ARG1, ARG2, ARG3,
-         ((unsigned int *)ARG3)[0],
-         ((unsigned int *)ARG3)[1], ARG4);
-   PRE_REG_READ4(ssize_t, "fsgetpath", 
-                 void*,"buf", size_t,"bufsize", 
-                 fsid_t *,"fsid", uint64_t,"objid");
-#endif
-   PRE_MEM_READ("fsgetpath(fsid)", ARG3, sizeof(fsid_t));
-   PRE_MEM_WRITE("fsgetpath(buf)", ARG1, ARG2);
-}
-
-POST(fsgetpath)
-{
-   POST_MEM_WRITE(ARG1, RES);
-}
-
-PRE(audit_session_self)
-{
-  PRINT("audit_session_self()");
-}
-
-POST(audit_session_self)
-{
-  record_named_port(tid, RES, MACH_PORT_RIGHT_SEND, "audit-session-%p");
-  PRINT("audit-session %#lx", RES);
-}
-
 PRE(exchangedata)
 {
    PRINT("exchangedata(%#lx(%s), %#lx(%s), %lu)",
-         ARG1, (char*)ARG1, ARG2, (char*)ARG2, ARG3);
+         ARG1, (HChar*)ARG1, ARG2, (HChar*)ARG2, ARG3);
    PRE_REG_READ3(int, "exchangedata", 
                  char *, path1, char *, path2, unsigned long, options);
    PRE_MEM_RASCIIZ( "exchangedata(path1)", ARG1 );
@@ -3190,8 +3283,8 @@
 
 PRE(fsctl)
 {
-   PRINT("fsctl ( %#lx(%s), %ld, %#lx, %ld )",
-      ARG1, (char *)ARG1, ARG2, ARG3, ARG4);
+   PRINT("fsctl ( %#lx(%s), %lu, %#lx, %lu )",
+         ARG1, (HChar *)ARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4( long, "fsctl", 
                   char *,"path", unsigned int,"request", 
                   void *,"data", unsigned int,"options");
@@ -3249,7 +3342,7 @@
 
 PRE(initgroups)
 {
-    PRINT("initgroups(%s, %#lx, %lu)", (char *)ARG1, ARG2, ARG3);
+    PRINT("initgroups(%s, %#lx, %lu)", (HChar *)ARG1, ARG2, ARG3);
     PRE_REG_READ3(long, "initgroups",
         int, setlen, vki_gid_t *, gidset, vki_uid_t, gmuid);
     PRE_MEM_READ("gidset", ARG2, ARG1 * sizeof(vki_gid_t));
@@ -3417,7 +3510,7 @@
    } else {
       envp = VG_(env_clone)( (HChar**)ARG5 );
       vg_assert(envp);
-      VG_(env_remove_valgrind_env_stuff)( envp );
+      VG_(env_remove_valgrind_env_stuff)( envp, /* ro_strings */ False, NULL);
    }
 
    if (trace_this_child) {
@@ -3507,7 +3600,7 @@
 
 PRE(socket)
 {
-   PRINT("socket ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+   PRINT("socket ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
    PRE_REG_READ3(long, "socket", int, domain, int, type, int, protocol);
 }
 
@@ -3523,7 +3616,7 @@
 PRE(setsockopt)
 {
    PRINT("setsockopt ( %ld, %ld, %ld, %#lx, %ld )",
-      ARG1,ARG2,ARG3,ARG4,ARG5);
+          SARG1, SARG2, SARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "setsockopt",
                  int, s, int, level, int, optname,
                  const void *, optval, vki_socklen_t, optlen);
@@ -3536,7 +3629,7 @@
    Addr optval_p = ARG4;
    Addr optlen_p = ARG5;
    PRINT("getsockopt ( %ld, %ld, %ld, %#lx, %#lx )",
-      ARG1,ARG2,ARG3,ARG4,ARG5);
+          SARG1, SARG2, SARG3, ARG4, ARG5);
    PRE_REG_READ5(long, "getsockopt",
                  int, s, int, level, int, optname,
                  void *, optval, vki_socklen_t *, optlen);
@@ -3569,7 +3662,7 @@
 PRE(connect)
 {
    *flags |= SfMayBlock;
-   PRINT("connect ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("connect ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "connect",
                  int, sockfd, struct sockaddr *, serv_addr, int, addrlen);
    ML_(generic_PRE_sys_connect)(tid, ARG1,ARG2,ARG3);
@@ -3579,9 +3672,9 @@
 PRE(accept)
 {
    *flags |= SfMayBlock;
-   PRINT("accept ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("accept ( %ld, %#lx, %#lx )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "accept",
-                 int, s, struct sockaddr *, addr, int, *addrlen);
+                 int, s, struct sockaddr *, addr, int *, addrlen);
    ML_(generic_PRE_sys_accept)(tid, ARG1,ARG2,ARG3);
 }
 
@@ -3597,7 +3690,7 @@
 PRE(mkfifo)
 {
    *flags |= SfMayBlock;
-   PRINT("mkfifo ( %#lx(%s), %lld )",ARG1,(char *)ARG1,(ULong)ARG2);
+   PRINT("mkfifo ( %#lx(%s), %lx )", ARG1, (HChar *)ARG1, ARG2);
    PRE_REG_READ2(long, "mkfifo", const char *, path, vki_mode_t, mode);
    PRE_MEM_RASCIIZ( "mkfifo(path)", ARG1 );
 }
@@ -3618,7 +3711,7 @@
 {
    *flags |= SfMayBlock;
    PRINT("sendto ( %ld, %s, %ld, %lu, %#lx, %ld )",
-      ARG1,(char *)ARG2,ARG3,ARG4,ARG5,ARG6);
+         SARG1, (HChar *)ARG2, SARG3, ARG4, ARG5, SARG6);
    PRE_REG_READ6(long, "sendto",
                  int, s, const void *, msg, int, len, 
                  unsigned int, flags, 
@@ -3630,7 +3723,7 @@
 {
 #if VG_WORDSIZE == 4
    PRINT("sendfile(%ld, %ld, %llu, %#lx, %#lx, %ld)",
-         ARG1, ARG2, LOHI64(ARG3, ARG4), ARG5, ARG6, ARG7);
+         SARG1, SARG2, LOHI64(ARG3, ARG4), ARG5, ARG6, SARG7);
 
    PRE_REG_READ7(long, "sendfile",
       int, fromfd, int, tofd,
@@ -3639,8 +3732,8 @@
    PRE_MEM_WRITE("sendfile(nwritten)", ARG5, sizeof(vki_uint64_t));
    if (ARG6) PRE_MEM_WRITE("sendfile(sf_header)", ARG6, sizeof(struct sf_hdtr));
 #else
-   PRINT("sendfile(%ld, %ld, %ld, %#lx, %#lx, %ld)",
-      ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+   PRINT("sendfile(%ld, %ld, %lu, %#lx, %#lx, %ld)",
+         SARG1, SARG2, ARG3, ARG4, ARG5, SARG6);
 
    PRE_REG_READ6(long, "sendfile",
       int, fromfd, int, tofd,
@@ -3667,7 +3760,7 @@
 {
    *flags |= SfMayBlock;
    PRINT("recvfrom ( %ld, %#lx, %ld, %lu, %#lx, %#lx )",
-      ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+          SARG1, ARG2, SARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(long, "recvfrom",
                  int, s, void *, buf, int, len, unsigned int, flags,
                  struct sockaddr *, from, int *, fromlen);
@@ -3685,7 +3778,7 @@
 PRE(sendmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("sendmsg ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("sendmsg ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "sendmsg",
                  int, s, const struct msghdr *, msg, int, flags);
    ML_(generic_PRE_sys_sendmsg)(tid, "msg", (struct vki_msghdr *)ARG2);
@@ -3695,7 +3788,7 @@
 PRE(recvmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("recvmsg ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("recvmsg ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "recvmsg", int, s, struct msghdr *, msg, int, flags);
    ML_(generic_PRE_sys_recvmsg)(tid, "msg", (struct vki_msghdr *)ARG2);
 }
@@ -3709,14 +3802,14 @@
 PRE(shutdown)
 {
    *flags |= SfMayBlock;
-   PRINT("shutdown ( %ld, %ld )",ARG1,ARG2);
+   PRINT("shutdown ( %ld, %ld )", SARG1, SARG2);
    PRE_REG_READ2(int, "shutdown", int, s, int, how);
 }
 
 
 PRE(bind)
 {
-   PRINT("bind ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("bind ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "bind",
                  int, sockfd, struct sockaddr *, my_addr, int, addrlen);
    ML_(generic_PRE_sys_bind)(tid, ARG1,ARG2,ARG3);
@@ -3725,14 +3818,14 @@
 
 PRE(listen)
 {
-   PRINT("listen ( %ld, %ld )",ARG1,ARG2);
+   PRINT("listen ( %ld, %ld )", SARG1, SARG2);
    PRE_REG_READ2(long, "listen", int, s, int, backlog);
 }
 
 
 PRE(getsockname)
 {
-   PRINT("getsockname ( %ld, %#lx, %#lx )",ARG1,ARG2,ARG3);
+   PRINT("getsockname ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getsockname",
                  int, s, struct sockaddr *, name, int *, namelen);
    ML_(generic_PRE_sys_getsockname)(tid, ARG1,ARG2,ARG3);
@@ -3748,7 +3841,7 @@
 
 PRE(getpeername)
 {
-   PRINT("getpeername ( %ld, %#lx, %#lx )",ARG1,ARG2,ARG3);
+   PRINT("getpeername ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getpeername",
                  int, s, struct sockaddr *, name, int *, namelen);
    ML_(generic_PRE_sys_getpeername)(tid, ARG1,ARG2,ARG3);
@@ -3764,7 +3857,7 @@
 
 PRE(socketpair)
 {
-   PRINT("socketpair ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+   PRINT("socketpair ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
    PRE_REG_READ4(long, "socketpair",
                  int, d, int, type, int, protocol, int *, sv);
    ML_(generic_PRE_sys_socketpair)(tid, ARG1,ARG2,ARG3,ARG4);
@@ -3827,7 +3920,7 @@
 
 PRE(getlogin)
 {
-   PRINT("getlogin ( %#lx, %ld )", ARG1, ARG2);
+   PRINT("getlogin ( %#lx, %lu )", ARG1, ARG2);
    PRE_REG_READ2(long, "getlogin", 
                  char *,"namebuf", unsigned int,"namelen");
 
@@ -3842,7 +3935,7 @@
 
 PRE(ptrace)
 {
-   PRINT("ptrace ( %ld, %ld, %#lx, %ld )", ARG1, ARG2, ARG3, ARG4);
+   PRINT("ptrace ( %ld, %ld, %#lx, %ld )", SARG1, SARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "ptrace", 
                  int,"request", vki_pid_t,"pid", 
                  vki_caddr_t,"addr", int,"data");
@@ -3874,7 +3967,7 @@
 
 PRE(lseek)
 {
-   PRINT("lseek ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+   PRINT("lseek ( %lu, %ld, %ld )", ARG1, SARG2, SARG3);
    PRE_REG_READ4(vki_off_t, "lseek",
                  unsigned int,fd, int,offset_hi, int,offset_lo, 
                  unsigned int,whence);
@@ -3883,7 +3976,7 @@
 
 PRE(pathconf)
 {
-   PRINT("pathconf(%#lx(%s), %ld)", ARG1,(char *)ARG1,ARG2);
+   PRINT("pathconf(%#lx(%s), %ld)", ARG1, (HChar *)ARG1, SARG2);
    PRE_REG_READ2(long,"pathconf", const char *,"path", int,"name");
    PRE_MEM_RASCIIZ("pathconf(path)", ARG1);
 }
@@ -3891,7 +3984,7 @@
 
 PRE(fpathconf)
 {
-   PRINT("fpathconf(%ld, %ld)", ARG1,ARG2);
+   PRINT("fpathconf(%ld, %ld)",  SARG1, SARG2);
    PRE_REG_READ2(long,"fpathconf", int,"fd", int,"name");
 
    if (!ML_(fd_allowed)(ARG1, "fpathconf", tid, False))
@@ -3901,7 +3994,7 @@
 
 PRE(getdirentries)
 {
-   PRINT("getdirentries(%ld, %#lx, %ld, %#lx)", ARG1, ARG2, ARG3, ARG4);
+   PRINT("getdirentries(%ld, %#lx, %ld, %#lx)", SARG1, ARG2, SARG3, ARG4);
    PRE_REG_READ4(int, "getdirentries", 
                  int, fd, char *, buf, int, nbytes, long *, basep);
    PRE_MEM_WRITE("getdirentries(basep)", ARG4, sizeof(long));
@@ -3918,7 +4011,7 @@
 
 PRE(getdirentries64)
 {
-   PRINT("getdirentries64(%ld, %#lx, %lu, %#lx)", ARG1, ARG2, ARG3, ARG4);
+   PRINT("getdirentries64(%ld, %#lx, %lu, %#lx)", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(vki_ssize_t, "getdirentries", 
                  int,fd, char *,buf, vki_size_t,nbytes, vki_off_t *,basep);
    /* JRS 18-Nov-2014: it appears that sometimes |basep| doesn't point
@@ -3943,7 +4036,7 @@
 
 PRE(statfs64)
 {
-   PRINT("statfs64 ( %#lx(%s), %#lx )",ARG1,(char *)ARG1,ARG2);
+   PRINT("statfs64 ( %#lx(%s), %#lx )", ARG1, (HChar *)ARG1, ARG2);
    PRE_REG_READ2(long, "statfs64", const char *, path, struct statfs64 *, buf);
    PRE_MEM_RASCIIZ( "statfs64(path)", ARG1 );
    PRE_MEM_WRITE( "statfs64(buf)", ARG2, sizeof(struct vki_statfs64) );
@@ -3956,7 +4049,7 @@
 
 PRE(fstatfs64)
 {
-   PRINT("fstatfs64 ( %ld, %#lx )",ARG1,ARG2);
+   PRINT("fstatfs64 ( %lu, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(long, "fstatfs64",
                  unsigned int, fd, struct statfs *, buf);
    PRE_MEM_WRITE( "fstatfs64(buf)", ARG2, sizeof(struct vki_statfs64) );
@@ -3968,7 +4061,7 @@
 
 PRE(csops)
 {
-   PRINT("csops ( %ld, %#lx, %#lx, %lu )", ARG1, ARG2, ARG3, ARG4);
+   PRINT("csops ( %ld, %#lx, %#lx, %lu )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "csops",
                  vki_pid_t, pid, uint32_t, ops,
                  void *, useraddr, vki_size_t, usersize);
@@ -3993,7 +4086,7 @@
 
 PRE(auditon)
 {
-   PRINT("auditon ( %ld, %#lx, %ld )", ARG1, ARG2, ARG3);
+   PRINT("auditon ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(int,"auditon", 
                  int,"cmd", void*,"data", unsigned int,"length");
 
@@ -4107,6 +4200,17 @@
    }    
 }
 
+PRE(getaudit_addr)
+{
+   PRINT("getaudit_addr(%#lx, %ld)", ARG1, SARG2);
+   PRE_REG_READ1(void*, "auditinfo_addr", int, "length");
+   PRE_MEM_WRITE("getaudit_addr(auditinfo_addr)", ARG1, ARG2);
+}
+POST(getaudit_addr)
+{
+   POST_MEM_WRITE(ARG1, ARG2);
+}
+
 
 PRE(mmap)
 {
@@ -4114,8 +4218,8 @@
    if (0) VG_(am_do_sync_check)("(PRE_MMAP)",__FILE__,__LINE__);
 
 #if VG_WORDSIZE == 4
-   PRINT("mmap ( %#lx, %lu, %ld, %ld, %ld, %lld )",
-         ARG1, ARG2, ARG3, ARG4, ARG5, LOHI64(ARG6, ARG7) );
+   PRINT("mmap ( %#lx, %lu, %ld, %ld, %ld, %llu )",
+         ARG1, ARG2, SARG3, SARG4, SARG5, LOHI64(ARG6, ARG7) );
    PRE_REG_READ7(Addr, "mmap",
                  Addr,start, vki_size_t,length, int,prot, int,flags, int,fd, 
                  unsigned long,offset_hi, unsigned long,offset_lo);
@@ -4125,7 +4229,7 @@
    // (Off64T)LOHI64(ARG6, ARG7) );
 #else
    PRINT("mmap ( %#lx, %lu, %ld, %ld, %ld, %ld )",
-         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
+         ARG1, ARG2, SARG3, SARG4, SARG5, SARG6 );
    PRE_REG_READ6(long, "mmap",
                  Addr,start, vki_size_t,length, int,prot, int,flags, int,fd, 
                  Off64T,offset);
@@ -4222,7 +4326,7 @@
    UWord newp    = ARG5;
    UWord newlen  = ARG6;
 
-   PRINT( "__sysctl ( %#lx, %ld, %#lx, %#lx, %#lx, %ld )", 
+   PRINT( "__sysctl ( %#lx, %lu, %#lx, %#lx, %#lx, %#lx )", 
           name, namelen, oldp, oldlenp, newp, newlen );
 
    PRE_REG_READ6(int, "__sysctl", int*, name, unsigned int, namelen, 
@@ -4284,7 +4388,7 @@
 PRE(sigprocmask)
 {
    UWord arg1;
-   PRINT("sigprocmask ( %ld, %#lx, %#lx )", ARG1, ARG2, ARG3);
+   PRINT("sigprocmask ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sigprocmask",
                  int, how, vki_sigset_t *, set, vki_sigset_t *, oldset);
    if (ARG2 != 0)
@@ -4352,7 +4456,6 @@
                  uint32_t flavor, uint64_t arg,
                  user_addr_t buffer, int32_t buffersize)
 */
-#if DARWIN_VERS >= DARWIN_10_6
 PRE(proc_info)
 {
 #if VG_WORDSIZE == 4
@@ -4418,7 +4521,6 @@
 #endif
 }
 
-#endif /* DARWIN_VERS >= DARWIN_10_6 */
 
 /* ---------------------------------------------------------------------
    aio_*
@@ -4841,7 +4943,7 @@
    Reply *reply = (Reply *)ARG1;
 
    if (!reply->RetCode) {
-     PRINT("page size %llu", (ULong)reply->out_page_size);
+      PRINT("page size %llu", (ULong)reply->out_page_size);
    } else {
       PRINT("mig return %d", reply->RetCode);
    }
@@ -4963,6 +5065,154 @@
 }
 
 
+PRE(host_create_mach_voucher)
+{
+#pragma pack(4)
+    typedef struct {
+        mach_msg_header_t Head;
+        NDR_record_t NDR;
+        mach_msg_type_number_t recipesCnt;
+        uint8_t recipes[5120];
+    } Request;
+#pragma pack()
+    
+    Request *req = (Request *)ARG1;
+
+    PRINT("host_create_mach_voucher(count %u)",
+          req->recipesCnt);
+    
+    AFTER = POST_FN(host_create_mach_voucher);
+}
+
+
+POST(host_create_mach_voucher)
+{
+#pragma pack(4)
+    typedef struct {
+        mach_msg_header_t Head;
+        /* start of the kernel processed data */
+        mach_msg_body_t msgh_body;
+        mach_msg_port_descriptor_t voucher;
+        /* end of the kernel processed data */
+    } Reply;
+#pragma pack()
+    
+    Reply *reply = (Reply *)ARG1;
+
+    // RK fixme properly parse this return type
+    PRINT("got voucher %#x ", reply->voucher.name);
+}
+
+
+PRE(host_get_special_port)
+{
+#pragma pack(4)
+    typedef struct {
+        mach_msg_header_t Head;
+        NDR_record_t NDR;
+        int node;
+        int which;
+    } Request;
+#pragma pack()
+    
+    Request *req = (Request *)ARG1;
+
+    PRINT("host_get_special_port(node %d)", req->node);
+    
+    switch (req->which) {
+        case HOST_PORT:
+            PRINT("host_get_special_port(%s, HOST_PORT)",
+                  name_for_port(MACH_REMOTE));
+            break;
+        case HOST_PRIV_PORT:
+            PRINT("host_get_special_port(%s, HOST_PRIV_PORT)",
+                  name_for_port(MACH_REMOTE));
+            break;
+        case HOST_IO_MASTER_PORT:
+            PRINT("host_get_special_port(%s, HOST_IO_MASTER_PORT)",
+                  name_for_port(MACH_REMOTE));
+            break;
+        // Not provided by kernel
+        case HOST_DYNAMIC_PAGER_PORT:
+            PRINT("host_get_special_port(%s, HOST_DYNAMIC_PAGER_PORT)",
+                  name_for_port(MACH_REMOTE));
+            break;
+        case HOST_AUDIT_CONTROL_PORT:
+            PRINT("host_get_special_port(%s, HOST_AUDIT_CONTROL_PORT)",
+                  name_for_port(MACH_REMOTE));
+            break;
+        case HOST_USER_NOTIFICATION_PORT:
+            PRINT("host_get_special_port(%s, HOST_USER_NOTIFICATION_PORT)",
+                  name_for_port(MACH_REMOTE));
+            break;
+        // ...
+
+        default:
+            PRINT("host_get_special_port(%s, %d)",
+                  name_for_port(MACH_REMOTE), req->which);
+            break;
+    }
+    
+    MACH_ARG(host_get_special_port.which) = req->which;
+    
+    AFTER = POST_FN(host_get_special_port);
+}
+
+
+POST(host_get_special_port)
+{
+#pragma pack(4)
+    typedef struct {
+        mach_msg_header_t Head;
+        /* start of the kernel processed data */
+        mach_msg_body_t msgh_body;
+        mach_msg_port_descriptor_t port;
+        /* end of the kernel processed data */
+    } Reply;
+#pragma pack()
+    
+    Reply *reply = (Reply *)ARG1;
+    
+    PRINT("got port %#x ", reply->port.name);
+
+    /* The required entry in the allocated_ports list (mapping) might
+     not exist, due perhaps to broken syscall wrappers (mach__N etc).
+     Create a minimal entry so that assign_port_name below doesn't
+     cause an assertion. */
+    if (!port_exists(reply->port.name)) {
+        port_create_vanilla(reply->port.name);
+    }
+    
+    switch (MACH_ARG(host_get_special_port.which)) {
+        case HOST_PORT:
+            assign_port_name(reply->port.name, "port-%p");
+            break;
+        case HOST_PRIV_PORT:
+            assign_port_name(reply->port.name, "priv-%p");
+            break;
+        case HOST_IO_MASTER_PORT:
+            assign_port_name(reply->port.name, "io-master-%p");
+            break;
+        // Not provided by kernel
+        case HOST_DYNAMIC_PAGER_PORT:
+            assign_port_name(reply->port.name, "dynamic-pager-%p");
+            break;
+        case HOST_AUDIT_CONTROL_PORT:
+            assign_port_name(reply->port.name, "audit-control-%p");
+            break;
+        case HOST_USER_NOTIFICATION_PORT:
+            assign_port_name(reply->port.name, "user-notification-%p");
+            break;
+        // ...
+
+        default:
+            assign_port_name(reply->port.name, "special-%p");
+            break;
+    }
+    
+    PRINT("%s", name_for_port(reply->port.name));
+}
+
 /* ---------------------------------------------------------------------
    mach_msg: messages to a task
    ------------------------------------------------------------------ */
@@ -5703,6 +5953,48 @@
 }
 
 
+PRE(task_set_special_port)
+{
+#pragma pack(4)
+    typedef struct {
+        mach_msg_header_t Head;
+        /* start of the kernel processed data */
+        mach_msg_body_t msgh_body;
+        mach_msg_port_descriptor_t special_port;
+        /* end of the kernel processed data */
+        NDR_record_t NDR;
+        int which_port;
+    } Request;
+#pragma pack()
+    
+    Request *req = (Request *)ARG1;
+
+    PRINT("got port %#x ", req->special_port.name);
+    
+    // MACH_ARG(task_set_special_port.which_port) = req->which_port;
+    PRINT("%s", name_for_port(req->special_port.name));
+    
+    AFTER = POST_FN(task_set_special_port);
+}
+
+POST(task_set_special_port)
+{
+#pragma pack(4)
+    typedef struct {
+        mach_msg_header_t Head;
+        NDR_record_t NDR;
+        kern_return_t RetCode;
+    } Reply;
+#pragma pack()
+    
+    Reply *reply = (Reply *)ARG1;
+    if (!reply->RetCode) {
+    } else {
+        PRINT("mig return %d", reply->RetCode);
+    }
+}
+
+
 PRE(semaphore_create)
 {
 #pragma pack(4)
@@ -5930,6 +6222,42 @@
 }
 
 
+PRE(task_set_info)
+{
+#pragma pack(4)
+    typedef struct {
+        mach_msg_header_t Head;
+        NDR_record_t NDR;
+        task_flavor_t flavor;
+        mach_msg_type_number_t task_info_inCnt;
+        integer_t task_info_in[52];
+    } Request;
+#pragma pack()
+    
+    Request *req = (Request *)ARG1;
+    
+    PRINT("task_set_info(%s) flavor:%d", name_for_port(MACH_REMOTE), req->flavor);
+    
+    AFTER = POST_FN(task_set_info);
+}
+
+POST(task_set_info)
+{
+#pragma pack(4)
+    typedef struct {
+        mach_msg_header_t Head;
+        NDR_record_t NDR;
+        kern_return_t RetCode;
+    } Reply;
+#pragma pack()
+    
+    Reply *reply = (Reply *)ARG1;
+    if (!reply->RetCode) {
+    } else {
+        PRINT("mig return %d", reply->RetCode);
+    }
+}
+
 PRE(task_threads)
 {
 #pragma pack(4)
@@ -6022,7 +6350,7 @@
 
    Request *req = (Request *)ARG1;
 
-   PRINT("vm_allocate (%s, at %#llx, size %lld, flags %#x)", 
+   PRINT("vm_allocate (%s, at %#llx, size %llu, flags %#x)", 
          name_for_port(MACH_REMOTE), 
          (ULong)req->address, (ULong)req->size, req->flags);
 
@@ -6079,7 +6407,7 @@
    
    Request *req = (Request *)ARG1;
    
-   PRINT("vm_deallocate(%s, at %#llx, size %lld)", 
+   PRINT("vm_deallocate(%s, at %#llx, size %llu)", 
          name_for_port(MACH_REMOTE), 
          (ULong)req->address, (ULong)req->size);
    
@@ -6137,7 +6465,7 @@
    
    Request *req = (Request *)ARG1;
    
-   PRINT("vm_protect(%s, at %#llx, size %lld, set_max %d, prot %d)", 
+   PRINT("vm_protect(%s, at %#llx, size %llu, set_max %d, prot %d)", 
          name_for_port(MACH_REMOTE),
          (ULong)req->address, (ULong)req->size, 
          req->set_maximum, req->new_protection);
@@ -6198,7 +6526,7 @@
    
    Request *req = (Request *)ARG1;
    
-   PRINT("vm_inherit(%s, at %#llx, size %lld, value %d)", 
+   PRINT("vm_inherit(%s, at %#llx, size %llu, value %d)", 
          name_for_port(MACH_REMOTE), 
          (ULong)req->address, (ULong)req->size, 
          req->new_inheritance);
@@ -6452,7 +6780,7 @@
    Request *req = (Request *)ARG1;
 
    // GrP fixme check these
-   PRINT("vm_map(in %s, at %#llx, size %lld, from %s ...)", 
+   PRINT("vm_map(in %s, at %#llx, size %llu, from %s ...)", 
          name_for_port(MACH_REMOTE), 
          (ULong)req->address, (ULong)req->size, 
          name_for_port(req->object.name));
@@ -6520,12 +6848,12 @@
       mach_port_name_t source_task = req->src_task.name;
       if (source_task == mach_task_self()) {
          PRINT("vm_remap(mach_task_self(), "
-               "to %#llx size %lld, from mach_task_self() at %#llx, ...)",
+               "to %#llx size %llu, from mach_task_self() at %#llx, ...)",
                (ULong)req->target_address,
                (ULong)req->size, (ULong)req->src_address);
       } else {
          PRINT("vm_remap(mach_task_self(), "
-               "to %#llx size %lld, from task %u at %#llx, ...)",
+               "to %#llx size %llu, from task %u at %#llx, ...)",
                (ULong)req->target_address, (ULong)req->size, 
                source_task, (ULong)req->src_address);
       }
@@ -6676,7 +7004,7 @@
 
    PRINT("mach_vm_purgable_control(%s, 0x%llx, %d, %d)", 
          name_for_port(MACH_REMOTE), 
-         (unsigned long long)req->address, req->control, req->state);
+         (ULong)req->address, req->control, req->state);
 
    // GrP fixme verify address?
 
@@ -6717,7 +7045,7 @@
 
    Request *req = (Request *)ARG1;
 
-   PRINT("mach_vm_allocate (%s, at 0x%llx, size %lld, flags 0x%x)", 
+   PRINT("mach_vm_allocate (%s, at 0x%llx, size %llu, flags 0x%x)", 
          name_for_port(MACH_REMOTE), 
          req->address, req->size, req->flags);
 
@@ -6773,7 +7101,7 @@
    
    Request *req = (Request *)ARG1;
    
-   PRINT("mach_vm_deallocate(%s, at 0x%llx, size %lld)", 
+   PRINT("mach_vm_deallocate(%s, at 0x%llx, size %llu)", 
          name_for_port(MACH_REMOTE), 
          req->address, req->size);
    
@@ -6831,7 +7159,7 @@
    
    Request *req = (Request *)ARG1;
    
-   PRINT("mach_vm_protect(%s, at 0x%llx, size %lld, set_max %d, prot %d)", 
+   PRINT("mach_vm_protect(%s, at 0x%llx, size %llu, set_max %d, prot %d)", 
          name_for_port(MACH_REMOTE), req->address, req->size, 
          req->set_maximum, req->new_protection);
    
@@ -7227,12 +7555,23 @@
       // and SET_STATUS_Success creates a UNIX-class syscall result.
       // Hence we have to laboriously construct the full SysRes "by hand"
       // and use that to set the syscall return status.
+#if defined(VGA_x86)
       SET_STATUS_from_SysRes(
          VG_(mk_SysRes_x86_darwin)(
             VG_DARWIN_SYSCALL_CLASS_MACH,
             False/*success*/, 0, 0
          )
       );
+#elif defined(VGA_amd64)
+       SET_STATUS_from_SysRes(
+         VG_(mk_SysRes_amd64_darwin)(
+            VG_DARWIN_SYSCALL_CLASS_MACH,
+            False/*success*/, 0, 0
+         )
+      );
+#else
+#error unknown architecture
+#endif
       *flags &= ~SfMayBlock;  // clear flag set by PRE(mach_msg)
    } else {
       // Terminating some other thread.
@@ -7739,6 +8078,13 @@
    case 217:
       CALL_PRE(host_request_notification);
       return;
+   case 222:
+      CALL_PRE(host_create_mach_voucher);
+      return;
+           
+   case 412:
+      CALL_PRE(host_get_special_port);
+      return;
 
    default:
       // unknown message to host self
@@ -7818,21 +8164,24 @@
    case 3404:
       CALL_PRE(mach_ports_lookup);
       return;
-
    case 3405:
       CALL_PRE(task_info);
       return;
-
+   case 3406:
+      CALL_PRE(task_set_info);
+      return;
    case 3407:
       CALL_PRE(task_suspend);
       return;
    case 3408:
       CALL_PRE(task_resume);
       return;
-      
    case 3409:
       CALL_PRE(task_get_special_port);
       return;
+   case 3410:
+      CALL_PRE(task_set_special_port);
+      return;
    case 3411:
       CALL_PRE(thread_create);
       return;
@@ -8037,7 +8386,7 @@
       // GrP fixme handle sender-specified message trailer
       // (but is this only for too-secure processes?)
       // JRS 11 Nov 2014: this assertion is OK for <= 10.9 but fails on 10.10
-#     if DARWIN_VERS == DARWIN_10_10
+#     if DARWIN_VERS >= DARWIN_10_10
       if (mh->msgh_bits & MACH_SEND_TRAILER) {
          log_decaying("UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option");
       }
@@ -8322,7 +8671,7 @@
 PRE(syscall_thread_switch)
 {
    PRINT("syscall_thread_switch(%s, %ld, %ld)",
-      name_for_port(ARG1), ARG2, ARG3);
+      name_for_port(ARG1), SARG2, SARG3);
    PRE_REG_READ3(long, "syscall_thread_switch", 
                  mach_port_t,"thread", int,"option", natural_t,"timeout");
 
@@ -8407,7 +8756,7 @@
                  int timeout, int relative,
                  time_t tv_sec, time_t tv_nsec */
    PRINT("__semwait_signal(wait %s, signal %s, %ld, %ld, %lds:%ldns)", 
-         name_for_port(ARG1), name_for_port(ARG2), ARG3, ARG4, ARG5, ARG6);
+         name_for_port(ARG1), name_for_port(ARG2), SARG3, SARG4, SARG5, SARG6);
    PRE_REG_READ6(long, "__semwait_signal", 
                  int,"cond_sem", int,"mutex_sem",
                  int,"timeout", int,"relative", 
@@ -8418,34 +8767,28 @@
 // GrP provided this alternative version for 10.6, but NjN
 // reckons the 10.5 is is still correct for 10.6.  So, retaining
 // Greg's version as a comment just in case we need it later.
-//PRE(__semwait_signal)
+//PRE(__old_semwait_signal)
 //{
 //   /* 10.5 args: int cond_sem, int mutex_sem,
 //                 int timeout, int relative,
 //                 const timespec *ts */
-//   PRINT("__semwait_signal(wait %s, signal %s, %ld, %ld, %#lx)", 
+//   PRINT("__old_semwait_signal(wait %s, signal %s, %ld, %ld, %#lx)",
 //         name_for_port(ARG1), name_for_port(ARG2), ARG3, ARG4, ARG5);
-//   PRE_REG_READ5(int, "__semwait_signal", 
+//   PRE_REG_READ5(int, "__old_semwait_signal", 
 //                 int,cond_sem, int,mutex_sem,
 //                 int,timeout, int,relative, 
 //                 const struct vki_timespec *,ts);
 //   
-//   if (ARG5) PRE_MEM_READ ("__semwait_signal(ts)", 
+//   if (ARG5) PRE_MEM_READ ("__old_semwait_signal(ts)",
 //                           ARG5, sizeof(struct vki_timespec));
 //   
 //   *flags |= SfMayBlock;
 //}
 
 
-PRE(__thread_selfid)
-{
-   PRINT("__thread_selfid ()");
-   PRE_REG_READ0(vki_uint64_t, "__thread_selfid");
-}
-
 PRE(task_for_pid)
 {
-   PRINT("task_for_pid(%s, %ld, %#lx)", name_for_port(ARG1), ARG2, ARG3);
+   PRINT("task_for_pid(%s, %ld, %#lx)", name_for_port(ARG1), SARG2, ARG3);
    PRE_REG_READ3(long, "task_for_pid", 
                  mach_port_t,"target", 
                  vki_pid_t, "pid", mach_port_t *,"task");
@@ -8601,7 +8944,7 @@
 
 PRE(swtch_pri)
 {
-   PRINT("swtch_pri ( %ld )", ARG1);
+   PRINT("swtch_pri ( %ld )", SARG1);
    PRE_REG_READ1(long, "swtch_pri", int,"pri");
 
    *flags |= SfMayBlock;
@@ -8791,21 +9134,10 @@
 
 
 /* ---------------------------------------------------------------------
-   Added for OSX 10.7 (Lion)
+   Added for OSX 10.6 (Snow Leopard)
    ------------------------------------------------------------------ */
 
-#if DARWIN_VERS >= DARWIN_10_7
-
-PRE(getaudit_addr)
-{
-   PRINT("getaudit_addr(%#lx, %lu)", ARG1, ARG2);
-   PRE_REG_READ1(void*, "auditinfo_addr", int, "length");
-   PRE_MEM_WRITE("getaudit_addr(auditinfo_addr)", ARG1, ARG2);
-}
-POST(getaudit_addr)
-{
-   POST_MEM_WRITE(ARG1, ARG2);
-}
+#if DARWIN_VERS >= DARWIN_10_6
 
 PRE(psynch_mutexwait)
 {
@@ -8876,6 +9208,60 @@
 {
 }
 
+PRE(__thread_selfid)
+{
+   PRINT("__thread_selfid ()");
+   PRE_REG_READ0(vki_uint64_t, "__thread_selfid");
+}
+
+PRE(fsgetpath)
+{
+#if VG_WORDSIZE == 4
+   PRINT("fsgetpath(%#lx, %ld, %#lx {%u,%u}, %llu)", 
+         ARG1, ARG2, ARG3,
+         ((unsigned int *)ARG3)[0], ((unsigned int *)ARG3)[1],
+         LOHI64(ARG4, ARG5));
+   PRE_REG_READ5(ssize_t, "fsgetpath", 
+                 void*,"buf", size_t,"bufsize", 
+                 fsid_t *,"fsid",
+                 vki_uint32_t, "objid_low32", vki_uint32_t, "objid_high32");
+#else
+   PRINT("fsgetpath(%#lx, %ld, %#lx {%u,%u}, %lu)", 
+         ARG1, ARG2, ARG3,
+         ((unsigned int *)ARG3)[0],
+         ((unsigned int *)ARG3)[1], ARG4);
+   PRE_REG_READ4(ssize_t, "fsgetpath", 
+                 void*,"buf", size_t,"bufsize", 
+                 fsid_t *,"fsid", uint64_t,"objid");
+#endif
+   PRE_MEM_READ("fsgetpath(fsid)", ARG3, sizeof(fsid_t));
+   PRE_MEM_WRITE("fsgetpath(buf)", ARG1, ARG2);
+}
+
+POST(fsgetpath)
+{
+   POST_MEM_WRITE(ARG1, RES);
+}
+
+PRE(audit_session_self)
+{
+  PRINT("audit_session_self()");
+}
+POST(audit_session_self)
+{
+  record_named_port(tid, RES, MACH_PORT_RIGHT_SEND, "audit-session-%p");
+  PRINT("audit-session %#lx", RES);
+}
+
+#endif /* DARWIN_VERS >= DARWIN_10_6 */
+
+
+/* ---------------------------------------------------------------------
+   Added for OSX 10.7 (Lion)
+   ------------------------------------------------------------------ */
+
+#if DARWIN_VERS >= DARWIN_10_7
+
 PRE(psynch_cvclrprepost)
 {
    PRINT("psynch_cvclrprepost(BOGUS)");
@@ -9221,7 +9607,7 @@
 {
    // int necp_match_policy(uint8_t *parameters, size_t parameters_size,
    //                       struct necp_aggregate_result *returned_result)
-   PRINT("necp_match_policy(FIXME)(%lx,%ld, %lx)", ARG1, ARG2, ARG3);
+   PRINT("necp_match_policy(FIXME)(%lx,%lu, %lx)", ARG1, ARG2, ARG3);
    PRE_REG_READ3(int, "necp_match_policy", uint8_t*, parameters,
                  size_t, parameters_size, struct necp_aggregate_result*,
                  returned_result);
@@ -9239,14 +9625,14 @@
    UWord oldp    = ARG3;
    UWord oldlenp = ARG4;
    UWord newp    = ARG5;
-   UWord newlen  = ARG6;
+   UWord newlen  = ARG6;  // FIXME: or newlenp ??
 
-   PRINT( "sysctlbyname ( %#lx,%ld, %#lx,%#lx, %#lx,%ld )", 
+   PRINT( "sysctlbyname ( %#lx,%lu, %#lx,%#lx, %#lx,%lu )", 
           name, namelen, oldp, oldlenp, newp, newlen );
 
    PRE_REG_READ6(int, "sysctlbyname", char*, name, size_t, namelen,
                  void*, oldp, vki_size_t *, oldlenp, 
-                 void*, newp, vki_size_t *, newlenp);
+                 void*, newp, vki_size_t *, newlenp);  //  <---<<
 
    // reads name[0..namelen-1]
    PRE_MEM_READ("sysctlbyname(name)", name, namelen);
@@ -9290,7 +9676,7 @@
    //                     uint64_t options);
    // Presumably the last arg is value-pair in the 32 bit case.
    PRINT("getattrlistbulk(FIXME)(%ld, %lx, %lx,%lu, %lu)",
-         ARG1, ARG2, ARG3, ARG4, ARG5);
+         SARG1, ARG2, ARG3, ARG4, ARG5);
    PRE_REG_READ5(int, "getattrlistbulk", int, dirfd, void*, list,
                  void*, attributeBuffer, size_t, bufferSize,
                  uint32_t, options_lo32);
@@ -9312,7 +9698,8 @@
 {
     Word  saved = SYSNO;
     
-    PRINT("readlinkat ( %ld, %#lx(%s), %#lx, %llu )", ARG1,ARG2,(char*)ARG2,ARG3,(ULong)ARG4);
+    PRINT("readlinkat ( %ld, %#lx(%s), %#lx, %ld )",
+          SARG1, ARG2, (HChar*)ARG2, ARG3, SARG4);
     PRE_REG_READ4(long, "readlinkat",
                   int, dfd, const char *, path, char *, buf, int, bufsiz);
     PRE_MEM_RASCIIZ( "readlinkat(path)", ARG2 );
@@ -9344,7 +9731,7 @@
     PRINT("guarded_open_dprotected_np("
         "path:%#lx(%s), guard:%#lx, guardflags:%#lx, flags:%#lx, "
         "dpclass:%#lx, dpflags: %#lx) FIXME",
-        ARG1, (char*)ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+        ARG1, (HChar*)ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
 }
 
 PRE(guarded_write_np)
@@ -9715,13 +10102,10 @@
 // _____(__NR_shared_region_map_np), 
 #if DARWIN_VERS >= DARWIN_10_6
 // _____(__NR_vm_pressure_monitor), 
-#else
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(296)),   // old load_shared_file 
-#endif
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(297)),   // old reset_shared_file 
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(298)),   // old new_system_shared_regions 
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(299)),   // old shared_region_map_file_np 
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(300)),   // old shared_region_make_private_np
+// _____(__NR_psynch_rw_longrdlock), 
+// _____(__NR_psynch_rw_yieldwrlock), 
+// _____(__NR_psynch_rw_downgrade), 
+// _____(__NR_psynch_rw_upgrade), 
    MACXY(__NR_psynch_mutexwait, psynch_mutexwait), // 301
    MACXY(__NR_psynch_mutexdrop, psynch_mutexdrop), // 302
    MACXY(__NR_psynch_cvbroad,   psynch_cvbroad),   // 303
@@ -9730,10 +10114,30 @@
    MACXY(__NR_psynch_rw_rdlock, psynch_rw_rdlock), // 306
    MACXY(__NR_psynch_rw_wrlock, psynch_rw_wrlock), // 307
    MACXY(__NR_psynch_rw_unlock, psynch_rw_unlock), // 308
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(309)),   // ???
+// _____(__NR_psynch_rw_unlock2), 
+#else
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(296)),   // old load_shared_file 
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(297)),   // old reset_shared_file 
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(298)),   // old new_system_shared_regions 
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(299)),   // old shared_region_map_file_np 
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(300)),   // old shared_region_make_private_np
+// _____(__NR___pthread_mutex_destroy), 
+// _____(__NR___pthread_mutex_init), 
+// _____(__NR___pthread_mutex_lock), 
+// _____(__NR___pthread_mutex_trylock), 
+// _____(__NR___pthread_mutex_unlock), 
+// _____(__NR___pthread_cond_init), 
+// _____(__NR___pthread_cond_destroy), 
+// _____(__NR___pthread_cond_broadcast), 
+// _____(__NR___pthread_cond_signal), 
+#endif
 // _____(__NR_getsid), 
 // _____(__NR_settid_with_pid), 
+#if DARWIN_VERS >= DARWIN_10_7
    MACXY(__NR_psynch_cvclrprepost, psynch_cvclrprepost), // 312
+#else
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(308)),   // old __pthread_cond_timedwait
+#endif
 // _____(__NR_aio_fsync), 
    MACXY(__NR_aio_return,     aio_return), 
    MACX_(__NR_aio_suspend,    aio_suspend), 
@@ -9763,9 +10167,7 @@
    MACX_(__NR___pthread_canceled,      __pthread_canceled),
    MACX_(__NR___semwait_signal,        __semwait_signal), 
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(335)),   // old utrace
-#if DARWIN_VERS >= DARWIN_10_6
    MACXY(__NR_proc_info,               proc_info),  // 336
-#endif
    MACXY(__NR_sendfile,    sendfile), 
    MACXY(__NR_stat64,      stat64), 
    MACXY(__NR_fstat64,     fstat64), 
@@ -9786,9 +10188,7 @@
 // _____(__NR_setauid), 
 // _____(__NR_getaudit), 
 // _____(__NR_setaudit), 
-#if DARWIN_VERS >= DARWIN_10_7
    MACXY(__NR_getaudit_addr, getaudit_addr),
-#endif
 // _____(__NR_setaudit_addr), 
 // _____(__NR_auditctl), 
    MACXY(__NR_bsdthread_create,     bsdthread_create),   // 360
@@ -9805,8 +10205,8 @@
 #else
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(369)),   // ???
 #endif
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(370)),   // ???
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(371)),   // ???
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(370)),   // old semwait_signal
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(371)),   // old semwait_signal_nocancel
 #if DARWIN_VERS >= DARWIN_10_6
    MACX_(__NR___thread_selfid, __thread_selfid), 
 #else
@@ -9887,10 +10287,12 @@
    MACXY(__NR_getattrlistbulk,     getattrlistbulk),    // 461
    MACX_(__NR_readlinkat,          readlinkat),         // 473
    MACX_(__NR_bsdthread_ctl,       bsdthread_ctl),      // 478
-   MACX_(__NR_guarded_open_dprotected_np, guarded_open_dprotected_np),
-   MACX_(__NR_guarded_write_np, guarded_write_np),
-   MACX_(__NR_guarded_pwrite_np, guarded_pwrite_np),
-   MACX_(__NR_guarded_writev_np, guarded_writev_np),
+   MACX_(__NR_guarded_open_dprotected_np, guarded_open_dprotected_np),  // 484
+   MACX_(__NR_guarded_write_np, guarded_write_np),      // 485
+   MACX_(__NR_guarded_pwrite_np, guarded_pwrite_np),    // 486
+   MACX_(__NR_guarded_writev_np, guarded_writev_np),    // 487
+// _____(__NR___rename_ext),                            // 488
+// _____(__NR___mremap_encrypted),                      // 489
 #endif
 // _____(__NR_MAXSYSCALL)
    MACX_(__NR_DARWIN_FAKE_SIGRETURN, FAKE_SIGRETURN)
@@ -9986,17 +10388,27 @@
    MACX_(__NR_semaphore_timedwait_signal_trap, semaphore_timedwait_signal), 
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(40)),    // -40
 
-#if defined(VGA_x86)
-// _____(__NR_init_process), 
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(42)), 
-// _____(__NR_map_fd), 
-#else
 #  if DARWIN_VERS >= DARWIN_10_9
    MACX_(__NR_kernelrpc_mach_port_guard_trap, kernelrpc_mach_port_guard_trap),
    MACX_(__NR_kernelrpc_mach_port_unguard_trap, kernelrpc_mach_port_unguard_trap),
+#  else
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(41)),
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(42)),
 #  endif
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)), 
-#endif
+
+#  if DARWIN_VERS >= DARWIN_10_10
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)),
+#  else
+#    if DARWIN_VERS == DARWIN_10_9
+// _____(__NR_map_fd),
+#    else
+#      if defined(VGA_x86)
+// _____(__NR_map_fd), 
+#      else
+   _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)),
+#      endif
+#    endif
+#  endif
 
 // _____(__NR_task_name_for_pid), 
    MACXY(__NR_task_for_pid, task_for_pid), 
diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c
index fcf5687..aa60d67 100644
--- a/coregrind/m_syswrap/syswrap-generic.c
+++ b/coregrind/m_syswrap/syswrap-generic.c
@@ -9,7 +9,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
-#if defined(VGO_linux) || defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 #include "pub_core_basics.h"
 #include "pub_core_vki.h"
@@ -87,11 +87,11 @@
       VG_(register_stack)(seg->start, tst->client_stack_highest_byte);
 
       if (debug)
-	 VG_(printf)("tid %d: guessed client stack range [%#lx-%#lx]\n",
+	 VG_(printf)("tid %u: guessed client stack range [%#lx-%#lx]\n",
 		     tst->tid, seg->start, tst->client_stack_highest_byte);
    } else {
       VG_(message)(Vg_UserMsg,
-                   "!? New thread %d starts with SP(%#lx) unmapped\n",
+                   "!? New thread %u starts with SP(%#lx) unmapped\n",
 		   tst->tid, sp);
       tst->client_stack_highest_byte = 0;
       tst->client_stack_szB  = 0;
@@ -145,7 +145,7 @@
    presented with bogus client addresses.  Is not used for generating
    user-visible errors. */
 
-Bool ML_(safe_to_deref) ( void* start, SizeT size )
+Bool ML_(safe_to_deref) ( const void *start, SizeT size )
 {
    return VG_(am_is_valid_for_client)( (Addr)start, size, VKI_PROT_READ );
 }
@@ -285,7 +285,7 @@
    Bool      f_maymove = toBool(flags & VKI_MREMAP_MAYMOVE);
 
    if (0)
-      VG_(printf)("do_remap (old %#lx %ld) (new %#lx %ld) %s %s\n",
+      VG_(printf)("do_remap (old %#lx %lu) (new %#lx %lu) %s %s\n",
                   old_addr,old_len,new_addr,new_len, 
                   flags & VKI_MREMAP_MAYMOVE ? "MAYMOVE" : "",
                   flags & VKI_MREMAP_FIXED ? "FIXED" : "");
@@ -549,8 +549,7 @@
 
 
 /* Note the fact that a file descriptor was just closed. */
-static
-void record_fd_close(Int fd)
+void ML_(record_fd_close)(Int fd)
 {
    OpenFd *i = allocated_fds;
 
@@ -634,6 +633,32 @@
    ML_(record_fd_open_with_given_name)(tid, fd, NULL);
 }
 
+// Return if a given file descriptor is already recorded.
+Bool ML_(fd_recorded)(Int fd)
+{
+   OpenFd *i = allocated_fds;
+   while (i) {
+      if (i->fd == fd)
+         return True;
+      i = i->next;
+   }
+   return False;
+}
+
+/* Returned string must not be modified nor free'd. */
+const HChar *ML_(find_fd_recorded_by_fd)(Int fd)
+{
+   OpenFd *i = allocated_fds;
+
+   while (i) {
+      if (i->fd == fd)
+         return i->pathname;
+      i = i->next;
+   }
+
+   return NULL;
+}
+
 static
 HChar *unix_to_name(struct vki_sockaddr_un *sa, UInt len, HChar *name)
 {
@@ -901,6 +926,44 @@
 #elif defined(VGO_darwin)
    init_preopened_fds_without_proc_self_fd();
 
+#elif defined(VGO_solaris)
+   Int ret;
+   Char buf[VKI_MAXGETDENTS_SIZE];
+   SysRes f;
+
+   f = VG_(open)("/proc/self/fd", VKI_O_RDONLY, 0);
+   if (sr_isError(f)) {
+      init_preopened_fds_without_proc_self_fd();
+      return;
+   }
+
+   while ((ret = VG_(getdents64)(sr_Res(f), (struct vki_dirent64 *) buf,
+                                 sizeof(buf))) > 0) {
+      Int i = 0;
+      while (i < ret) {
+         /* Proceed one entry. */
+         struct vki_dirent64 *d = (struct vki_dirent64 *) (buf + i);
+         if (VG_(strcmp)(d->d_name, ".") && VG_(strcmp)(d->d_name, "..")) {
+            HChar *s;
+            Int fno = VG_(strtoll10)(d->d_name, &s);
+            if (*s == '\0') {
+               if (fno != sr_Res(f))
+                  if (VG_(clo_track_fds))
+                     ML_(record_fd_open_named)(-1, fno);
+            } else {
+               VG_(message)(Vg_DebugMsg,
+                     "Warning: invalid file name in /proc/self/fd: %s\n",
+                     d->d_name);
+            }
+         }
+
+         /* Move on the next entry. */
+         i += d->d_reclen;
+      }
+   }
+
+   VG_(close)(sr_Res(f));
+
 #else
 #  error Unknown OS
 #endif
@@ -1046,7 +1109,7 @@
                              struct vki_sockaddr *sa, UInt salen )
 {
    HChar *outmsg;
-   struct vki_sockaddr_un*  sun  = (struct vki_sockaddr_un *)sa;
+   struct vki_sockaddr_un*  saun = (struct vki_sockaddr_un *)sa;
    struct vki_sockaddr_in*  sin  = (struct vki_sockaddr_in *)sa;
    struct vki_sockaddr_in6* sin6 = (struct vki_sockaddr_in6 *)sa;
 #  ifdef VKI_AF_BLUETOOTH
@@ -1069,7 +1132,7 @@
                   
       case VKI_AF_UNIX:
          VG_(sprintf) ( outmsg, description, "sun_path" );
-         PRE_MEM_RASCIIZ( outmsg, (Addr) sun->sun_path );
+         PRE_MEM_RASCIIZ( outmsg, (Addr) saun->sun_path );
          // GrP fixme max of sun_len-2? what about nul char?
          break;
                      
@@ -1256,10 +1319,10 @@
    if (! VG_(am_extend_into_adjacent_reservation_client)( aseg->start, delta,
                                                           &overflow)) {
       if (overflow)
-         VG_(umsg)("brk segment overflow in thread #%d: can't grow to %#lx\n",
+         VG_(umsg)("brk segment overflow in thread #%u: can't grow to %#lx\n",
                    tid, newbrkP);
       else
-         VG_(umsg)("Cannot map memory to grow brk segment in thread #%d "
+         VG_(umsg)("Cannot map memory to grow brk segment in thread #%u "
                    "to %#lx\n", tid, newbrkP);
       goto bad;
    }
@@ -1717,8 +1780,11 @@
 
    arg.buf = &buf;
 
-#  ifdef __NR_semctl
+#  if defined(__NR_semctl)
    res = VG_(do_syscall4)(__NR_semctl, semid, 0, VKI_IPC_STAT, *(UWord *)&arg);
+#  elif defined(__NR_semsys) /* Solaris */
+   res = VG_(do_syscall5)(__NR_semsys, VKI_SEMCTL, semid, 0, VKI_IPC_STAT,
+                          *(UWord *)&arg);
 #  else
    res = VG_(do_syscall5)(__NR_ipc, 3 /* IPCOP_semctl */, semid, 0,
                           VKI_IPC_STAT, (UWord)&arg);
@@ -1761,6 +1827,11 @@
 #if defined(VKI_SEM_STAT)
    case VKI_SEM_STAT|VKI_IPC_64:
 #endif
+#endif
+#if defined(VKI_IPC_STAT64)
+   case VKI_IPC_STAT64:
+#endif
+#if defined(VKI_IPC_64) || defined(VKI_IPC_STAT64)
       PRE_MEM_WRITE( "semctl(IPC_STAT, arg.buf)",
                      (Addr)arg.buf, sizeof(struct vki_semid64_ds) );
       break;
@@ -1773,6 +1844,11 @@
 
 #if defined(VKI_IPC_64)
    case VKI_IPC_SET|VKI_IPC_64:
+#endif
+#if defined(VKI_IPC_SET64)
+   case VKI_IPC_SET64:
+#endif
+#if defined(VKI_IPC64) || defined(VKI_IPC_SET64)
       PRE_MEM_READ( "semctl(IPC_SET, arg.buf)",
                     (Addr)arg.buf, sizeof(struct vki_semid64_ds) );
       break;
@@ -1826,6 +1902,11 @@
 #if defined(VKI_IPC_64)
    case VKI_IPC_STAT|VKI_IPC_64:
    case VKI_SEM_STAT|VKI_IPC_64:
+#endif
+#if defined(VKI_IPC_STAT64)
+   case VKI_IPC_STAT64:
+#endif
+#if defined(VKI_IPC_64) || defined(VKI_IPC_STAT64)
       POST_MEM_WRITE( (Addr)arg.buf, sizeof(struct vki_semid64_ds) );
       break;
 #endif
@@ -1847,7 +1928,7 @@
 static
 SizeT get_shm_size ( Int shmid )
 {
-#ifdef __NR_shmctl
+#if defined(__NR_shmctl)
 #  ifdef VKI_IPC_64
    struct vki_shmid64_ds buf;
 #    if defined(VGP_amd64_linux) || defined(VGP_arm64_linux)
@@ -1862,6 +1943,10 @@
    struct vki_shmid_ds buf;
    SysRes __res = VG_(do_syscall3)(__NR_shmctl, shmid, VKI_IPC_STAT, (UWord)&buf);
 #  endif /* def VKI_IPC_64 */
+#elif defined(__NR_shmsys) /* Solaris */
+   struct vki_shmid_ds buf;
+   SysRes __res = VG_(do_syscall4)(__NR_shmsys, VKI_SHMCTL, shmid, VKI_IPC_STAT,
+                         (UWord)&buf);
 #else
    struct vki_shmid_ds buf;
    SysRes __res = VG_(do_syscall5)(__NR_ipc, 24 /* IPCOP_shmctl */, shmid,
@@ -2150,15 +2235,6 @@
       return VG_(mk_SysRes_Error)( VKI_EINVAL );
    }
 
-#  if defined(VKI_MAP_32BIT)
-   /* We can't support MAP_32BIT (at least, not without significant
-      complication), and it's royally unportable, so if the client
-      asks for it, just fail it. */
-   if (arg4 & VKI_MAP_32BIT) {
-      return VG_(mk_SysRes_Error)( VKI_ENOMEM );
-   }
-#  endif
-
    /* Figure out what kind of allocation constraints there are
       (fixed/hint/any), and ask aspacem what we should do. */
    mreq.start = arg1;
@@ -2166,6 +2242,16 @@
    if (arg4 & VKI_MAP_FIXED) {
       mreq.rkind = MFixed;
    } else
+#if defined(VKI_MAP_ALIGN) /* Solaris specific */
+   if (arg4 & VKI_MAP_ALIGN) {
+      mreq.rkind = MAlign;
+      if (mreq.start == 0) {
+         mreq.start = VKI_PAGE_SIZE;
+      }
+      /* VKI_MAP_FIXED and VKI_MAP_ALIGN don't like each other. */
+      arg4 &= ~VKI_MAP_ALIGN;
+   } else
+#endif
    if (arg1 != 0) {
       mreq.rkind = MHint;
    } else {
@@ -2179,12 +2265,37 @@
       return VG_(mk_SysRes_Error)( VKI_EINVAL );
    }
 
+#  if defined(VKI_MAP_32BIT)
+   /* MAP_32BIT is royally unportable, so if the client asks for it, try our
+      best to make it work (but without complexifying aspacemgr).
+      If the user requested MAP_32BIT, the mmap-ed space must be in the
+      first 2GB of the address space. So, return ENOMEM if aspacemgr
+      advisory is above the first 2GB. If MAP_FIXED is also requested,
+      MAP_32BIT has to be ignored.
+      Assumption about aspacemgr behaviour: aspacemgr scans the address space
+      from low addresses to find a free segment. No special effort is done
+      to keep the first 2GB 'free' for this MAP_32BIT. So, this will often
+      fail once the program has already allocated significant memory. */
+   if ((arg4 & VKI_MAP_32BIT) && !(arg4 & VKI_MAP_FIXED)) {
+      if (advised + arg2 >= 0x80000000)
+         return VG_(mk_SysRes_Error)( VKI_ENOMEM );
+   }
+#  endif
+
    /* Otherwise we're OK (so far).  Install aspacem's choice of
       address, and let the mmap go through.  */
    sres = VG_(am_do_mmap_NO_NOTIFY)(advised, arg2, arg3,
                                     arg4 | VKI_MAP_FIXED,
                                     arg5, arg6);
 
+#  if defined(VKI_MAP_32BIT)
+   /* No recovery trial if the advisory was not accepted. */
+   if ((arg4 & VKI_MAP_32BIT) && !(arg4 & VKI_MAP_FIXED)
+       && sr_isError(sres)) {
+      return VG_(mk_SysRes_Error)( VKI_ENOMEM );
+   }
+#  endif
+
    /* A refinement: it may be that the kernel refused aspacem's choice
       of address.  If we were originally asked for a hinted mapping,
       there is still a last chance: try again at any address.
@@ -2212,9 +2323,9 @@
       to understand special file system mount options).
       So, let's just redo an mmap, without giving any constraint to
       the kernel. If that succeeds, check with aspacem that the returned
-      address is acceptable (i.e. is free).
+      address is acceptable.
       This will give a similar effect as if the user would have
-      specified a MAP_FIXED at that address.
+      hinted that address.
       The aspacem state will be correctly updated afterwards.
       We however cannot do this last refinement when the user asked
       for a fixed mapping, as the user asked a specific address. */
@@ -2226,8 +2337,18 @@
                                        arg4,
                                        arg5, arg6);
       if (!sr_isError(sres)) {
-         vg_assert(VG_(am_covered_by_single_free_segment)((Addr)sr_Res(sres),
-                                                           arg2));
+         /* The kernel is supposed to know what it is doing, but let's
+            do a last sanity check anyway, as if the chosen address had
+            been initially hinted by the client. The whole point of this
+            last try was to allow mmap of huge pages to succeed without
+            making aspacem understand them, on the other hand the kernel
+            does not know about valgrind reservations, so this mapping
+            can end up in free space and reservations. */
+         mreq.start = (Addr)sr_Res(sres);
+         mreq.len   = arg2;
+         mreq.rkind = MHint;
+         advised = VG_(am_get_advisory)( &mreq, True/*client*/, &mreq_ok );
+         vg_assert(mreq_ok && advised == mreq.start);
       }
    }
 
@@ -2317,7 +2438,7 @@
 {
    ThreadState* tst;
    /* simple; just make this thread exit */
-   PRINT("exit( %ld )", ARG1);
+   PRINT("exit( %ld )", SARG1);
    PRE_REG_READ1(void, "exit", int, status);
    tst = VG_(get_ThreadState)(tid);
    /* Set the thread's status to be exiting, then claim that the
@@ -2337,28 +2458,28 @@
 
 PRE(sys_iopl)
 {
-   PRINT("sys_iopl ( %ld )", ARG1);
+   PRINT("sys_iopl ( %lu )", ARG1);
    PRE_REG_READ1(long, "iopl", unsigned long, level);
 }
 
 PRE(sys_fsync)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fsync ( %ld )", ARG1);
+   PRINT("sys_fsync ( %lu )", ARG1);
    PRE_REG_READ1(long, "fsync", unsigned int, fd);
 }
 
 PRE(sys_fdatasync)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fdatasync ( %ld )", ARG1);
+   PRINT("sys_fdatasync ( %lu )", ARG1);
    PRE_REG_READ1(long, "fdatasync", unsigned int, fd);
 }
 
 PRE(sys_msync)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_msync ( %#lx, %llu, %ld )", ARG1,(ULong)ARG2,ARG3);
+   PRINT("sys_msync ( %#lx, %lu, %#lx )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "msync",
                  unsigned long, start, vki_size_t, length, int, flags);
    PRE_MEM_READ( "msync(start)", ARG1, ARG2 );
@@ -2379,7 +2500,8 @@
    struct vki_pmsg_strbuf *ctrl;
    struct vki_pmsg_strbuf *data;
    *flags |= SfMayBlock;
-   PRINT("sys_getpmsg ( %ld, %#lx, %#lx, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_getpmsg ( %ld, %#lx, %#lx, %#lx, %#lx )", SARG1, ARG2, ARG3,
+         ARG4, ARG5);
    PRE_REG_READ5(int, "getpmsg",
                  int, fd, struct strbuf *, ctrl, struct strbuf *, data, 
                  int *, bandp, int *, flagsp);
@@ -2415,7 +2537,8 @@
    struct vki_pmsg_strbuf *ctrl;
    struct vki_pmsg_strbuf *data;
    *flags |= SfMayBlock;
-   PRINT("sys_putpmsg ( %ld, %#lx, %#lx, %ld, %ld )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_putpmsg ( %ld, %#lx, %#lx, %ld, %ld )", SARG1, ARG2, ARG3,
+         SARG4, SARG5);
    PRE_REG_READ5(int, "putpmsg",
                  int, fd, struct strbuf *, ctrl, struct strbuf *, data, 
                  int, band, int, flags);
@@ -2430,7 +2553,7 @@
 PRE(sys_getitimer)
 {
    struct vki_itimerval *value = (struct vki_itimerval*)ARG2;
-   PRINT("sys_getitimer ( %ld, %#lx )", ARG1, ARG2);
+   PRINT("sys_getitimer ( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "getitimer", int, which, struct itimerval *, value);
 
    PRE_timeval_WRITE( "getitimer(&value->it_interval)", &(value->it_interval));
@@ -2448,7 +2571,7 @@
 
 PRE(sys_setitimer)
 {
-   PRINT("sys_setitimer ( %ld, %#lx, %#lx )", ARG1,ARG2,ARG3);
+   PRINT("sys_setitimer ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setitimer", 
                  int, which,
                  struct itimerval *, value, struct itimerval *, ovalue);
@@ -2487,7 +2610,7 @@
 PRE(sys_madvise)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_madvise ( %#lx, %llu, %ld )", ARG1,(ULong)ARG2,ARG3);
+   PRINT("sys_madvise ( %#lx, %lu, %ld )", ARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "madvise",
                  unsigned long, start, vki_size_t, length, int, advice);
 }
@@ -2498,15 +2621,15 @@
    // Nb: this is different to the glibc version described in the man pages,
    // which lacks the fifth 'new_address' argument.
    if (ARG4 & VKI_MREMAP_FIXED) {
-      PRINT("sys_mremap ( %#lx, %llu, %ld, 0x%lx, %#lx )",
-            ARG1, (ULong)ARG2, ARG3, ARG4, ARG5);
+      PRINT("sys_mremap ( %#lx, %lu, %lu, %#lx, %#lx )",
+            ARG1, ARG2, ARG3, ARG4, ARG5);
       PRE_REG_READ5(unsigned long, "mremap",
                     unsigned long, old_addr, unsigned long, old_size,
                     unsigned long, new_size, unsigned long, flags,
                     unsigned long, new_addr);
    } else {
-      PRINT("sys_mremap ( %#lx, %llu, %ld, 0x%lx )",
-            ARG1, (ULong)ARG2, ARG3, ARG4);
+      PRINT("sys_mremap ( %#lx, %lu, %lu, 0x%lx )",
+            ARG1, ARG2, ARG3, ARG4);
       PRE_REG_READ4(unsigned long, "mremap",
                     unsigned long, old_addr, unsigned long, old_size,
                     unsigned long, new_size, unsigned long, flags);
@@ -2519,21 +2642,21 @@
 
 PRE(sys_nice)
 {
-   PRINT("sys_nice ( %ld )", ARG1);
+   PRINT("sys_nice ( %ld )", SARG1);
    PRE_REG_READ1(long, "nice", int, inc);
 }
 
 PRE(sys_mlock)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mlock ( %#lx, %llu )", ARG1, (ULong)ARG2);
+   PRINT("sys_mlock ( %#lx, %lu )", ARG1, ARG2);
    PRE_REG_READ2(long, "mlock", unsigned long, addr, vki_size_t, len);
 }
 
 PRE(sys_munlock)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_munlock ( %#lx, %llu )", ARG1, (ULong)ARG2);
+   PRINT("sys_munlock ( %#lx, %lu )", ARG1, ARG2);
    PRE_REG_READ2(long, "munlock", unsigned long, addr, vki_size_t, len);
 }
 
@@ -2546,13 +2669,13 @@
 
 PRE(sys_setpriority)
 {
-   PRINT("sys_setpriority ( %ld, %ld, %ld )", ARG1, ARG2, ARG3);
+   PRINT("sys_setpriority ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
    PRE_REG_READ3(long, "setpriority", int, which, int, who, int, prio);
 }
 
 PRE(sys_getpriority)
 {
-   PRINT("sys_getpriority ( %ld, %ld )", ARG1, ARG2);
+   PRINT("sys_getpriority ( %ld, %ld )", SARG1, SARG2);
    PRE_REG_READ2(long, "getpriority", int, which, int, who);
 }
 
@@ -2560,14 +2683,14 @@
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_pwrite64 ( %ld, %#lx, %llu, %lld )",
-         ARG1, ARG2, (ULong)ARG3, MERGE64(ARG4,ARG5));
+   PRINT("sys_pwrite64 ( %lu, %#lx, %lu, %lld )",
+         ARG1, ARG2, ARG3, (Long)MERGE64(ARG4,ARG5));
    PRE_REG_READ5(ssize_t, "pwrite64",
                  unsigned int, fd, const char *, buf, vki_size_t, count,
                  vki_u32, MERGE64_FIRST(offset), vki_u32, MERGE64_SECOND(offset));
 #elif VG_WORDSIZE == 8
-   PRINT("sys_pwrite64 ( %ld, %#lx, %llu, %lld )",
-         ARG1, ARG2, (ULong)ARG3, (Long)ARG4);
+   PRINT("sys_pwrite64 ( %lu, %#lx, %lu, %ld )",
+         ARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(ssize_t, "pwrite64",
                  unsigned int, fd, const char *, buf, vki_size_t, count,
                  Word, offset);
@@ -2587,7 +2710,7 @@
 PRE(sys_fstatfs)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fstatfs ( %ld, %#lx )",ARG1,ARG2);
+   PRINT("sys_fstatfs ( %lu, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(long, "fstatfs",
                  unsigned int, fd, struct statfs *, buf);
    PRE_MEM_WRITE( "fstatfs(buf)", ARG2, sizeof(struct vki_statfs) );
@@ -2601,7 +2724,7 @@
 PRE(sys_fstatfs64)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fstatfs64 ( %ld, %llu, %#lx )",ARG1,(ULong)ARG2,ARG3);
+   PRINT("sys_fstatfs64 ( %lu, %lu, %#lx )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "fstatfs64",
                  unsigned int, fd, vki_size_t, size, struct statfs64 *, buf);
    PRE_MEM_WRITE( "fstatfs64(buf)", ARG3, ARG2 );
@@ -2613,7 +2736,7 @@
 
 PRE(sys_getsid)
 {
-   PRINT("sys_getsid ( %ld )", ARG1);
+   PRINT("sys_getsid ( %ld )", SARG1);
    PRE_REG_READ1(long, "getsid", vki_pid_t, pid);
 }
 
@@ -2621,14 +2744,14 @@
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_pread64 ( %ld, %#lx, %llu, %lld )",
-         ARG1, ARG2, (ULong)ARG3, MERGE64(ARG4,ARG5));
+   PRINT("sys_pread64 ( %lu, %#lx, %lu, %lld )",
+         ARG1, ARG2, ARG3, (Long)MERGE64(ARG4,ARG5));
    PRE_REG_READ5(ssize_t, "pread64",
                  unsigned int, fd, char *, buf, vki_size_t, count,
                  vki_u32, MERGE64_FIRST(offset), vki_u32, MERGE64_SECOND(offset));
 #elif VG_WORDSIZE == 8
-   PRINT("sys_pread64 ( %ld, %#lx, %llu, %lld )",
-         ARG1, ARG2, (ULong)ARG3, (Long)ARG4);
+   PRINT("sys_pread64 ( %lu, %#lx, %lu, %ld )",
+         ARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(ssize_t, "pread64",
                  unsigned int, fd, char *, buf, vki_size_t, count,
                  Word, offset);
@@ -2648,7 +2771,7 @@
 PRE(sys_mknod)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_mknod ( %#lx(%s), 0x%lx, 0x%lx )", ARG1, (char*)ARG1, ARG2, ARG3 );
+   PRINT("sys_mknod ( %#lx(%s), %#lx, %#lx )", ARG1, (HChar*)ARG1, ARG2, ARG3 );
    PRE_REG_READ3(long, "mknod",
                  const char *, pathname, int, mode, unsigned, dev);
    PRE_MEM_RASCIIZ( "mknod(pathname)", ARG1 );
@@ -2657,12 +2780,12 @@
 PRE(sys_flock)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_flock ( %ld, %ld )", ARG1, ARG2 );
+   PRINT("sys_flock ( %lu, %lu )", ARG1, ARG2 );
    PRE_REG_READ2(long, "flock", unsigned int, fd, unsigned int, operation);
 }
 
 // Pre_read a char** argument.
-static void pre_argv_envp(Addr a, ThreadId tid, const HChar* s1, const HChar* s2)
+void ML_(pre_argv_envp)(Addr a, ThreadId tid, const HChar *s1, const HChar *s2)
 {
    while (True) {
       Addr a_deref;
@@ -2713,9 +2836,9 @@
                  char *, filename, char **, argv, char **, envp);
    PRE_MEM_RASCIIZ( "execve(filename)", ARG1 );
    if (ARG2 != 0)
-      pre_argv_envp( ARG2, tid, "execve(argv)", "execve(argv[i])" );
+      ML_(pre_argv_envp)( ARG2, tid, "execve(argv)", "execve(argv[i])" );
    if (ARG3 != 0)
-      pre_argv_envp( ARG3, tid, "execve(envp)", "execve(envp[i])" );
+      ML_(pre_argv_envp)( ARG3, tid, "execve(envp)", "execve(envp[i])" );
 
    vg_assert(VG_(is_valid_tid)(tid));
    tst = VG_(get_ThreadState)(tid);
@@ -2834,7 +2957,7 @@
    } else {
       envp = VG_(env_clone)( (HChar**)ARG3 );
       if (envp == NULL) goto hosed;
-      VG_(env_remove_valgrind_env_stuff)( envp );
+      VG_(env_remove_valgrind_env_stuff)( envp, True /*ro_strings*/, NULL );
    }
 
    if (trace_this_child) {
@@ -2957,8 +3080,8 @@
       too much of a mess to continue, so we have to abort. */
   hosed:
    vg_assert(FAILURE);
-   VG_(message)(Vg_UserMsg, "execve(%#lx(%s), %#lx, %#lx) failed, errno %ld\n",
-                ARG1, (char*)ARG1, ARG2, ARG3, ERR);
+   VG_(message)(Vg_UserMsg, "execve(%#lx(%s), %#lx, %#lx) failed, errno %lu\n",
+                ARG1, (HChar*)ARG1, ARG2, ARG3, ERR);
    VG_(message)(Vg_UserMsg, "EXEC FAILED: I can't recover from "
                             "execve() failing, so I'm dying.\n");
    VG_(message)(Vg_UserMsg, "Add more stringent tests in PRE(sys_execve), "
@@ -2968,14 +3091,14 @@
 
 PRE(sys_access)
 {
-   PRINT("sys_access ( %#lx(%s), %ld )", ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_access ( %#lx(%s), %ld )", ARG1, (HChar*)ARG1, SARG2);
    PRE_REG_READ2(long, "access", const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "access(pathname)", ARG1 );
 }
 
 PRE(sys_alarm)
 {
-   PRINT("sys_alarm ( %ld )", ARG1);
+   PRINT("sys_alarm ( %lu )", ARG1);
    PRE_REG_READ1(unsigned long, "alarm", unsigned int, seconds);
 }
 
@@ -3034,7 +3157,7 @@
 PRE(sys_chmod)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_chmod ( %#lx(%s), %ld )", ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_chmod ( %#lx(%s), %lu )", ARG1, (HChar*)ARG1, ARG2);
    PRE_REG_READ2(long, "chmod", const char *, path, vki_mode_t, mode);
    PRE_MEM_RASCIIZ( "chmod(path)", ARG1 );
 }
@@ -3060,7 +3183,7 @@
 PRE(sys_close)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_close ( %ld )", ARG1);
+   PRINT("sys_close ( %lu )", ARG1);
    PRE_REG_READ1(long, "close", unsigned int, fd);
 
    /* Detect and negate attempts by the client to close Valgrind's log fd */
@@ -3073,12 +3196,12 @@
 
 POST(sys_close)
 {
-   if (VG_(clo_track_fds)) record_fd_close(ARG1);
+   if (VG_(clo_track_fds)) ML_(record_fd_close)(ARG1);
 }
 
 PRE(sys_dup)
 {
-   PRINT("sys_dup ( %ld )", ARG1);
+   PRINT("sys_dup ( %lu )", ARG1);
    PRE_REG_READ1(long, "dup", unsigned int, oldfd);
 }
 
@@ -3096,7 +3219,7 @@
 
 PRE(sys_dup2)
 {
-   PRINT("sys_dup2 ( %ld, %ld )", ARG1,ARG2);
+   PRINT("sys_dup2 ( %lu, %lu )", ARG1, ARG2);
    PRE_REG_READ2(long, "dup2", unsigned int, oldfd, unsigned int, newfd);
    if (!ML_(fd_allowed)(ARG2, "dup2", tid, True))
       SET_STATUS_Failure( VKI_EBADF );
@@ -3112,14 +3235,14 @@
 PRE(sys_fchdir)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fchdir ( %ld )", ARG1);
+   PRINT("sys_fchdir ( %lu )", ARG1);
    PRE_REG_READ1(long, "fchdir", unsigned int, fd);
 }
 
 PRE(sys_fchown)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fchown ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_fchown ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "fchown",
                  unsigned int, fd, vki_uid_t, owner, vki_gid_t, group);
 }
@@ -3127,14 +3250,14 @@
 PRE(sys_fchmod)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fchmod ( %ld, %ld )", ARG1,ARG2);
+   PRINT("sys_fchmod ( %lu, %lu )", ARG1, ARG2);
    PRE_REG_READ2(long, "fchmod", unsigned int, fildes, vki_mode_t, mode);
 }
 
 PRE(sys_newfstat)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_newfstat ( %ld, %#lx )", ARG1,ARG2);
+   PRINT("sys_newfstat ( %lu, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(long, "fstat", unsigned int, fd, struct stat *, buf);
    PRE_MEM_WRITE( "fstat(buf)", ARG2, sizeof(struct vki_stat) );
 }
@@ -3144,6 +3267,7 @@
    POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
 }
 
+#if !defined(VGO_solaris)
 static vki_sigset_t fork_saved_mask;
 
 // In Linux, the sys_fork() function varies across architectures, but we
@@ -3162,6 +3286,8 @@
    VG_(sigfillset)(&mask);
    VG_(sigprocmask)(VKI_SIG_SETMASK, &mask, &fork_saved_mask);
 
+   VG_(do_atfork_pre)(tid);
+
    SET_STATUS_from_SysRes( VG_(do_syscall0)(__NR_fork) );
 
    if (!SUCCESS) return;
@@ -3178,8 +3304,6 @@
 #  error Unknown OS
 #endif
 
-   VG_(do_atfork_pre)(tid);
-
    if (is_child) {
       VG_(do_atfork_child)(tid);
 
@@ -3206,18 +3330,19 @@
       VG_(sigprocmask)(VKI_SIG_SETMASK, &fork_saved_mask, NULL);
    }
 }
+#endif // !defined(VGO_solaris)
 
 PRE(sys_ftruncate)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_ftruncate ( %ld, %ld )", ARG1,ARG2);
+   PRINT("sys_ftruncate ( %lu, %lu )", ARG1, ARG2);
    PRE_REG_READ2(long, "ftruncate", unsigned int, fd, unsigned long, length);
 }
 
 PRE(sys_truncate)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_truncate ( %#lx(%s), %ld )", ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_truncate ( %#lx(%s), %lu )", ARG1, (HChar*)ARG1, ARG2);
    PRE_REG_READ2(long, "truncate", 
                  const char *, path, unsigned long, length);
    PRE_MEM_RASCIIZ( "truncate(path)", ARG1 );
@@ -3227,12 +3352,12 @@
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_ftruncate64 ( %ld, %lld )", ARG1, MERGE64(ARG2,ARG3));
+   PRINT("sys_ftruncate64 ( %lu, %llu )", ARG1, MERGE64(ARG2,ARG3));
    PRE_REG_READ3(long, "ftruncate64",
                  unsigned int, fd,
                  UWord, MERGE64_FIRST(length), UWord, MERGE64_SECOND(length));
 #else
-   PRINT("sys_ftruncate64 ( %ld, %lld )", ARG1, (Long)ARG2);
+   PRINT("sys_ftruncate64 ( %lu, %lu )", ARG1, ARG2);
    PRE_REG_READ2(long, "ftruncate64",
                  unsigned int,fd, UWord,length);
 #endif
@@ -3257,7 +3382,7 @@
 PRE(sys_getdents)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_getdents ( %ld, %#lx, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_getdents ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getdents",
                  unsigned int, fd, struct vki_dirent *, dirp,
                  unsigned int, count);
@@ -3274,7 +3399,7 @@
 PRE(sys_getdents64)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_getdents64 ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("sys_getdents64 ( %lu, %#lx, %lu )",ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getdents64",
                  unsigned int, fd, struct vki_dirent64 *, dirp,
                  unsigned int, count);
@@ -3290,7 +3415,7 @@
 
 PRE(sys_getgroups)
 {
-   PRINT("sys_getgroups ( %ld, %#lx )", ARG1, ARG2);
+   PRINT("sys_getgroups ( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "getgroups", int, size, vki_gid_t *, list);
    if (ARG1 > 0)
       PRE_MEM_WRITE( "getgroups(list)", ARG2, ARG1 * sizeof(vki_gid_t) );
@@ -3349,7 +3474,7 @@
 
 PRE(sys_getpgid)
 {
-   PRINT("sys_getpgid ( %ld )", ARG1);
+   PRINT("sys_getpgid ( %ld )", SARG1);
    PRE_REG_READ1(long, "getpgid", vki_pid_t, pid);
 }
 
@@ -3393,7 +3518,7 @@
 
 PRE(sys_old_getrlimit)
 {
-   PRINT("sys_old_getrlimit ( %ld, %#lx )", ARG1,ARG2);
+   PRINT("sys_old_getrlimit ( %lu, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(long, "old_getrlimit",
                  unsigned int, resource, struct rlimit *, rlim);
    PRE_MEM_WRITE( "old_getrlimit(rlim)", ARG2, sizeof(struct vki_rlimit) );
@@ -3406,7 +3531,7 @@
 
 PRE(sys_getrlimit)
 {
-   PRINT("sys_getrlimit ( %ld, %#lx )", ARG1,ARG2);
+   PRINT("sys_getrlimit ( %lu, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(long, "getrlimit",
                  unsigned int, resource, struct rlimit *, rlim);
    PRE_MEM_WRITE( "getrlimit(rlim)", ARG2, sizeof(struct vki_rlimit) );
@@ -3419,7 +3544,7 @@
 
 PRE(sys_getrusage)
 {
-   PRINT("sys_getrusage ( %ld, %#lx )", ARG1,ARG2);
+   PRINT("sys_getrusage ( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "getrusage", int, who, struct rusage *, usage);
    PRE_MEM_WRITE( "getrusage(usage)", ARG2, sizeof(struct vki_rusage) );
 }
@@ -3483,9 +3608,15 @@
       According to Simon Hausmann, _IOC_READ means the kernel
       writes a value to the ioctl value passed from the user
       space and the other way around with _IOC_WRITE. */
-   
+
+#if defined(VGO_solaris)
+   /* Majority of Solaris ioctl requests does not honour direction hints. */
+   UInt dir  = _VKI_IOC_NONE;
+#else   
    UInt dir  = _VKI_IOC_DIR(request);
+#endif
    UInt size = _VKI_IOC_SIZE(request);
+
    if (SimHintiS(SimHint_lax_ioctls, VG_(clo_sim_hints))) {
       /* 
        * Be very lax about ioctl handling; the only
@@ -3588,7 +3719,7 @@
    if (!VG_(is_exiting)(tid)) {
       if (VG_(clo_trace_signals))
 	 VG_(message)(Vg_DebugMsg,
-                      "Thread %d being killed with SIGKILL\n", 
+                      "Thread %u being killed with SIGKILL\n", 
                       tst->tid);
       
       tst->exitreason = VgSrc_FatalSig;
@@ -3603,8 +3734,8 @@
 
 PRE(sys_kill)
 {
-   PRINT("sys_kill ( %ld, %ld )", ARG1,ARG2);
-   PRE_REG_READ2(long, "kill", int, pid, int, sig);
+   PRINT("sys_kill ( %ld, %ld )", SARG1, SARG2);
+   PRE_REG_READ2(long, "kill", int, pid, int, signal);
    if (!ML_(client_signal_OK)(ARG2)) {
       SET_STATUS_Failure( VKI_EINVAL );
       return;
@@ -3623,7 +3754,7 @@
 
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg, "kill: sent signal %ld to pid %ld\n",
-		   ARG2, ARG1);
+		   SARG2, SARG1);
 
    /* This kill might have given us a pending signal.  Ask for a check once 
       the syscall is done. */
@@ -3656,14 +3787,14 @@
 PRE(sys_mkdir)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mkdir ( %#lx(%s), %ld )", ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_mkdir ( %#lx(%s), %ld )", ARG1, (HChar*)ARG1, SARG2);
    PRE_REG_READ2(long, "mkdir", const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "mkdir(pathname)", ARG1 );
 }
 
 PRE(sys_mprotect)
 {
-   PRINT("sys_mprotect ( %#lx, %llu, %ld )", ARG1,(ULong)ARG2,ARG3);
+   PRINT("sys_mprotect ( %#lx, %lu, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "mprotect",
                  unsigned long, addr, vki_size_t, len, unsigned long, prot);
 
@@ -3783,16 +3914,59 @@
       POST_MEM_WRITE( ARG2, sizeof(struct vki_timespec) );
 }
 
+#if defined(VGO_linux) || defined(VGO_solaris)
+/* Handles the case where the open is of /proc/self/auxv or
+   /proc/<pid>/auxv, and just gives out a copy of the fd for the
+   fake file we cooked up at startup (in m_main).  Also, seeks the
+   cloned fd back to the start.
+   Returns True if auxv open was handled (status is set). */
+Bool ML_(handle_auxv_open)(SyscallStatus *status, const HChar *filename,
+                           int flags)
+{
+   HChar  name[30];   // large enough
+
+   if (!ML_(safe_to_deref)((const void *) filename, 1))
+      return False;
+
+   /* Opening /proc/<pid>/auxv or /proc/self/auxv? */
+   VG_(sprintf)(name, "/proc/%d/auxv", VG_(getpid)());
+   if (!VG_STREQ(filename, name) && !VG_STREQ(filename, "/proc/self/auxv"))
+      return False;
+
+   /* Allow to open the file only for reading. */
+   if (flags & (VKI_O_WRONLY | VKI_O_RDWR)) {
+      SET_STATUS_Failure(VKI_EACCES);
+      return True;
+   }
+
+#  if defined(VGO_solaris)
+   VG_(sprintf)(name, "/proc/self/fd/%d", VG_(cl_auxv_fd));
+   SysRes sres = VG_(open)(name, flags, 0);
+   SET_STATUS_from_SysRes(sres);
+#  else
+   SysRes sres = VG_(dup)(VG_(cl_auxv_fd));
+   SET_STATUS_from_SysRes(sres);
+   if (!sr_isError(sres)) {
+      OffT off = VG_(lseek)(sr_Res(sres), 0, VKI_SEEK_SET);
+      if (off < 0)
+         SET_STATUS_Failure(VKI_EMFILE);
+   }
+#  endif
+
+   return True;
+}
+#endif // defined(VGO_linux) || defined(VGO_solaris)
+
 PRE(sys_open)
 {
    if (ARG2 & VKI_O_CREAT) {
       // 3-arg version
-      PRINT("sys_open ( %#lx(%s), %ld, %ld )",ARG1,(char*)ARG1,ARG2,ARG3);
+      PRINT("sys_open ( %#lx(%s), %ld, %ld )",ARG1, (HChar*)ARG1, SARG2, SARG3);
       PRE_REG_READ3(long, "open",
                     const char *, filename, int, flags, int, mode);
    } else {
       // 2-arg version
-      PRINT("sys_open ( %#lx(%s), %ld )",ARG1,(char*)ARG1,ARG2);
+      PRINT("sys_open ( %#lx(%s), %ld )",ARG1, (HChar*)ARG1, SARG2);
       PRE_REG_READ2(long, "open",
                     const char *, filename, int, flags);
    }
@@ -3824,30 +3998,9 @@
       }
    }
 
-   /* Handle the case where the open is of /proc/self/auxv or
-      /proc/<pid>/auxv, and just give it a copy of the fd for the
-      fake file we cooked up at startup (in m_main).  Also, seek the
-      cloned fd back to the start. */
-   {
-      HChar  name[30];   // large enough
-      HChar* arg1s = (HChar*) ARG1;
-      SysRes sres;
-
-      VG_(sprintf)(name, "/proc/%d/auxv", VG_(getpid)());
-      if (ML_(safe_to_deref)( arg1s, 1 ) &&
-          (VG_STREQ(arg1s, name) || VG_STREQ(arg1s, "/proc/self/auxv"))
-         )
-      {
-         sres = VG_(dup)( VG_(cl_auxv_fd) );
-         SET_STATUS_from_SysRes( sres );
-         if (!sr_isError(sres)) {
-            OffT off = VG_(lseek)( sr_Res(sres), 0, VKI_SEEK_SET );
-            if (off < 0)
-               SET_STATUS_Failure( VKI_EMFILE );
-         }
-         return;
-      }
-   }
+   /* Handle also the case of /proc/self/auxv or /proc/<pid>/auxv. */
+   if (ML_(handle_auxv_open)(status, (const HChar *)ARG1, ARG2))
+      return;
 #endif // defined(VGO_linux)
 
    /* Otherwise handle normally */
@@ -3869,7 +4022,7 @@
 PRE(sys_read)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_read ( %ld, %#lx, %llu )", ARG1, ARG2, (ULong)ARG3);
+   PRINT("sys_read ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "read",
                  unsigned int, fd, char *, buf, vki_size_t, count);
 
@@ -3889,7 +4042,7 @@
 {
    Bool ok;
    *flags |= SfMayBlock;
-   PRINT("sys_write ( %ld, %#lx, %llu )", ARG1, ARG2, (ULong)ARG3);
+   PRINT("sys_write ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "write",
                  unsigned int, fd, const char *, buf, vki_size_t, count);
    /* check to see if it is allowed.  If not, try for an exemption from
@@ -3898,6 +4051,11 @@
    if (!ok && ARG1 == 2/*stderr*/ 
            && SimHintiS(SimHint_enable_outer, VG_(clo_sim_hints)))
       ok = True;
+#if defined(VGO_solaris)
+   if (!ok && VG_(vfork_fildes_addr) != NULL &&
+       *VG_(vfork_fildes_addr) >= 0 && *VG_(vfork_fildes_addr) == ARG1)
+      ok = True;
+#endif
    if (!ok)
       SET_STATUS_Failure( VKI_EBADF );
    else
@@ -3907,7 +4065,7 @@
 PRE(sys_creat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_creat ( %#lx(%s), %ld )", ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_creat ( %#lx(%s), %ld )", ARG1, (HChar*)ARG1, SARG2);
    PRE_REG_READ2(long, "creat", const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "creat(pathname)", ARG1 );
 }
@@ -3936,7 +4094,7 @@
    UInt i;
    struct vki_pollfd* ufds = (struct vki_pollfd *)ARG1;
    *flags |= SfMayBlock;
-   PRINT("sys_poll ( %#lx, %ld, %ld )\n", ARG1,ARG2,ARG3);
+   PRINT("sys_poll ( %#lx, %lu, %ld )\n", ARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "poll",
                  struct vki_pollfd *, ufds, unsigned int, nfds, long, timeout);
 
@@ -3988,7 +4146,21 @@
          SET_STATUS_from_SysRes( VG_(do_syscall3)(saved, (UWord)name, 
                                                          ARG2, ARG3));
       } else
-#endif // defined(VGO_linux)
+#elif defined(VGO_solaris)
+      /* Same for Solaris, but /proc/self/path/a.out and
+         /proc/<pid>/path/a.out. */
+      HChar  name[30];   // large enough
+      HChar* arg1s = (HChar*) ARG1;
+      VG_(sprintf)(name, "/proc/%d/path/a.out", VG_(getpid)());
+      if (ML_(safe_to_deref)(arg1s, 1) &&
+          (VG_STREQ(arg1s, name) || VG_STREQ(arg1s, "/proc/self/path/a.out"))
+         )
+      {
+         VG_(sprintf)(name, "/proc/self/path/%d", VG_(cl_exec_fd));
+         SET_STATUS_from_SysRes( VG_(do_syscall3)(saved, (UWord)name,
+                                                         ARG2, ARG3));
+      } else
+#endif
       {
          /* Normal case */
          SET_STATUS_from_SysRes( VG_(do_syscall3)(saved, ARG1, ARG2, ARG3));
@@ -4004,7 +4176,7 @@
    Int i;
    struct vki_iovec * vec;
    *flags |= SfMayBlock;
-   PRINT("sys_readv ( %ld, %#lx, %llu )",ARG1,ARG2,(ULong)ARG3);
+   PRINT("sys_readv ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "readv",
                  unsigned long, fd, const struct iovec *, vector,
                  unsigned long, count);
@@ -4063,7 +4235,8 @@
 PRE(sys_select)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_select ( %ld, %#lx, %#lx, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_select ( %ld, %#lx, %#lx, %#lx, %#lx )", SARG1, ARG2, ARG3,
+         ARG4, ARG5);
    PRE_REG_READ5(long, "select",
                  int, n, vki_fd_set *, readfds, vki_fd_set *, writefds,
                  vki_fd_set *, exceptfds, struct vki_timeval *, timeout);
@@ -4083,7 +4256,7 @@
 
 PRE(sys_setgid)
 {
-   PRINT("sys_setgid ( %ld )", ARG1);
+   PRINT("sys_setgid ( %lu )", ARG1);
    PRE_REG_READ1(long, "setgid", vki_gid_t, gid);
 }
 
@@ -4103,13 +4276,13 @@
 
 PRE(sys_setpgid)
 {
-   PRINT("setpgid ( %ld, %ld )", ARG1, ARG2);
+   PRINT("setpgid ( %ld, %ld )", SARG1, SARG2);
    PRE_REG_READ2(long, "setpgid", vki_pid_t, pid, vki_pid_t, pgid);
 }
 
 PRE(sys_setregid)
 {
-   PRINT("sys_setregid ( %ld, %ld )", ARG1, ARG2);
+   PRINT("sys_setregid ( %lu, %lu )", ARG1, ARG2);
    PRE_REG_READ2(long, "setregid", vki_gid_t, rgid, vki_gid_t, egid);
 }
 
@@ -4122,7 +4295,7 @@
 PRE(sys_setrlimit)
 {
    UWord arg1 = ARG1;
-   PRINT("sys_setrlimit ( %ld, %#lx )", ARG1,ARG2);
+   PRINT("sys_setrlimit ( %lu, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(long, "setrlimit",
                  unsigned int, resource, struct rlimit *, rlim);
    PRE_MEM_READ( "setrlimit(rlim)", ARG2, sizeof(struct vki_rlimit) );
@@ -4167,7 +4340,15 @@
          SET_STATUS_Failure( VKI_EPERM );
       }
       else {
-         VG_(threads)[tid].client_stack_szB = ((struct vki_rlimit *)ARG2)->rlim_cur;
+         /* Change the value of client_stack_szB to the rlim_cur value but
+            only if it is smaller than the size of the allocated stack for the
+            client.
+            TODO: All platforms should set VG_(clstk_max_size) as part of their
+                  setup_client_stack(). */
+         if ((VG_(clstk_max_size) == 0)
+             || (((struct vki_rlimit *) ARG2)->rlim_cur <= VG_(clstk_max_size)))
+            VG_(threads)[tid].client_stack_szB = ((struct vki_rlimit *)ARG2)->rlim_cur;
+
          VG_(client_rlimit_stack) = *(struct vki_rlimit *)ARG2;
          SET_STATUS_Success( 0 );
       }
@@ -4176,7 +4357,7 @@
 
 PRE(sys_setuid)
 {
-   PRINT("sys_setuid ( %ld )", ARG1);
+   PRINT("sys_setuid ( %lu )", ARG1);
    PRE_REG_READ1(long, "setuid", vki_uid_t, uid);
 }
 
@@ -4264,7 +4445,7 @@
 
 PRE(sys_umask)
 {
-   PRINT("sys_umask ( %ld )", ARG1);
+   PRINT("sys_umask ( %ld )", SARG1);
    PRE_REG_READ1(long, "umask", int, mask);
 }
 
@@ -4293,7 +4474,7 @@
 PRE(sys_waitpid)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_waitpid ( %ld, %#lx, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_waitpid ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "waitpid", 
                  vki_pid_t, pid, unsigned int *, status, int, options);
 
@@ -4310,7 +4491,7 @@
 PRE(sys_wait4)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_wait4 ( %ld, %#lx, %ld, %#lx )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_wait4 ( %ld, %#lx, %ld, %#lx )", SARG1, ARG2, SARG3, ARG4);
 
    PRE_REG_READ4(long, "wait4", 
                  vki_pid_t, pid, unsigned int *, status, int, options,
@@ -4334,7 +4515,7 @@
    Int i;
    struct vki_iovec * vec;
    *flags |= SfMayBlock;
-   PRINT("sys_writev ( %ld, %#lx, %llu )",ARG1,ARG2,(ULong)ARG3);
+   PRINT("sys_writev ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "writev",
                  unsigned long, fd, const struct iovec *, vector,
                  unsigned long, count);
@@ -4395,6 +4576,16 @@
       PRE_MEM_WRITE( "sigaltstack(oss)", ARG2, sizeof(vki_stack_t) );
    }
 
+   /* Be safe. */
+   if (ARG1 && !ML_(safe_to_deref((void*)ARG1, sizeof(vki_stack_t)))) {
+      SET_STATUS_Failure(VKI_EFAULT);
+      return;
+   }
+   if (ARG2 && !ML_(safe_to_deref((void*)ARG2, sizeof(vki_stack_t)))) {
+      SET_STATUS_Failure(VKI_EFAULT);
+      return;
+   }
+
    SET_STATUS_from_SysRes( 
       VG_(do_sys_sigaltstack) (tid, (vki_stack_t*)ARG1, 
                               (vki_stack_t*)ARG2)
@@ -4409,7 +4600,7 @@
 
 PRE(sys_sethostname)
 {
-   PRINT("sys_sethostname ( %#lx, %ld )", ARG1,ARG2);
+   PRINT("sys_sethostname ( %#lx, %ld )", ARG1, SARG2);
    PRE_REG_READ2(long, "sethostname", char *, name, int, len);
    PRE_MEM_READ( "sethostname(name)", ARG1, ARG2 );
 }
@@ -4417,7 +4608,7 @@
 #undef PRE
 #undef POST
 
-#endif // defined(VGO_linux) || defined(VGO_darwin)
+#endif // defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_syswrap/syswrap-linux-variants.c b/coregrind/m_syswrap/syswrap-linux-variants.c
index fe78028..cd27091 100644
--- a/coregrind/m_syswrap/syswrap-linux-variants.c
+++ b/coregrind/m_syswrap/syswrap-linux-variants.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c
index 935d190..f796969 100644
--- a/coregrind/m_syswrap/syswrap-linux.c
+++ b/coregrind/m_syswrap/syswrap-linux.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -73,8 +73,8 @@
    ThreadState* tst = VG_(get_ThreadState)(tid);
 
    VG_(debugLog)(1, "syswrap-linux", 
-                    "thread_wrapper(tid=%lld): entry\n", 
-                    (ULong)tidW);
+                    "thread_wrapper(tid=%u): entry\n", 
+                    tid);
 
    vg_assert(tst->status == VgTs_Init);
 
@@ -82,8 +82,8 @@
    VG_(acquire_BigLock)(tid, "thread_wrapper(starting new thread)");
 
    if (0)
-      VG_(printf)("thread tid %d started: stack = %p\n",
-		  tid, &tid);
+      VG_(printf)("thread tid %u started: stack = %p\n",
+		  tid, (void *)&tid);
 
    /* Make sure error reporting is enabled in the new thread. */
    tst->err_disablement_level = 0;
@@ -107,8 +107,8 @@
    vg_assert(VG_(is_running_thread)(tid));
 
    VG_(debugLog)(1, "syswrap-linux", 
-                    "thread_wrapper(tid=%lld): exit, schedreturncode %s\n", 
-                    (ULong)tidW, VG_(name_of_VgSchedReturnCode)(ret));
+                    "thread_wrapper(tid=%u): exit, schedreturncode %s\n", 
+                    tid, VG_(name_of_VgSchedReturnCode)(ret));
 
    /* Return to caller, still holding the lock. */
    return ret;
@@ -132,8 +132,8 @@
 #endif
 
    VG_(debugLog)(1, "syswrap-linux", 
-                    "run_a_thread_NORETURN(tid=%lld): pre-thread_wrapper\n",
-                    (ULong)tidW);
+                    "run_a_thread_NORETURN(tid=%u): pre-thread_wrapper\n",
+                    tid);
 
    tst = VG_(get_ThreadState)(tid);
    vg_assert(tst);
@@ -155,8 +155,8 @@
    src = thread_wrapper(tid);  
 
    VG_(debugLog)(1, "syswrap-linux", 
-                    "run_a_thread_NORETURN(tid=%lld): post-thread_wrapper\n",
-                    (ULong)tidW);
+                    "run_a_thread_NORETURN(tid=%u): post-thread_wrapper\n",
+                    tid);
 
    c = VG_(count_living_threads)();
    vg_assert(c >= 1); /* stay sane */
@@ -178,9 +178,9 @@
       );
       VG_(debugLog)(
          1, "syswrap-linux", 
-            "run_a_thread_NORETURN(tid=%lld): "
+            "run_a_thread_NORETURN(tid=%u): "
             "WARNING: exiting thread has err_disablement_level = %u\n",
-            (ULong)tidW, tst->err_disablement_level
+            tid, tst->err_disablement_level
       );
    }
    tst->err_disablement_level = 0;
@@ -188,9 +188,9 @@
    if (c == 1) {
 
       VG_(debugLog)(1, "syswrap-linux", 
-                       "run_a_thread_NORETURN(tid=%lld): "
+                       "run_a_thread_NORETURN(tid=%u): "
                           "last one standing\n",
-                          (ULong)tidW);
+                          tid);
 
       /* We are the last one standing.  Keep hold of the lock and
          carry on to show final tool results, then exit the entire system. 
@@ -199,9 +199,9 @@
    } else {
 
       VG_(debugLog)(1, "syswrap-linux", 
-                       "run_a_thread_NORETURN(tid=%lld): "
+                       "run_a_thread_NORETURN(tid=%u): "
                           "not last one standing\n",
-                          (ULong)tidW);
+                          tid);
 
       /* OK, thread is dead, but others still exist.  Just exit. */
 
@@ -356,7 +356,7 @@
    }
 
    if (0)
-      VG_(printf)( "stack for tid %d at %p; init_SP=%p\n",
+      VG_(printf)( "stack for tid %u at %p; init_SP=%p\n",
                    tid, 
                    (void*)tst->os_state.valgrind_stack_base, 
                    (void*)tst->os_state.valgrind_stack_init_SP );
@@ -492,7 +492,7 @@
       VG_(do_atfork_parent)(tid);
 
       if (VG_(clo_trace_syscalls))
-	  VG_(printf)("   clone(fork): process %d created child %ld\n",
+	  VG_(printf)("   clone(fork): process %d created child %lu\n",
                       VG_(getpid)(), sr_Res(res));
 
       /* restore signal mask */
@@ -557,7 +557,7 @@
 
 PRE(sys_umount)
 {
-   PRINT("sys_umount( %#lx, %ld )", ARG1, ARG2);
+   PRINT("sys_umount( %#lx, %ld )", ARG1, SARG2);
    PRE_REG_READ2(long, "umount2", char *, path, int, flags);
    PRE_MEM_RASCIIZ( "umount2(path)", ARG1);
 }
@@ -580,38 +580,38 @@
 
 PRE(sys_setfsuid16)
 {
-   PRINT("sys_setfsuid16 ( %ld )", ARG1);
+   PRINT("sys_setfsuid16 ( %lu )", ARG1);
    PRE_REG_READ1(long, "setfsuid16", vki_old_uid_t, uid);
 }
 
 PRE(sys_setfsuid)
 {
-   PRINT("sys_setfsuid ( %ld )", ARG1);
+   PRINT("sys_setfsuid ( %lu )", ARG1);
    PRE_REG_READ1(long, "setfsuid", vki_uid_t, uid);
 }
 
 PRE(sys_setfsgid16)
 {
-   PRINT("sys_setfsgid16 ( %ld )", ARG1);
+   PRINT("sys_setfsgid16 ( %lu )", ARG1);
    PRE_REG_READ1(long, "setfsgid16", vki_old_gid_t, gid);
 }
 
 PRE(sys_setfsgid)
 {
-   PRINT("sys_setfsgid ( %ld )", ARG1);
+   PRINT("sys_setfsgid ( %lu )", ARG1);
    PRE_REG_READ1(long, "setfsgid", vki_gid_t, gid);
 }
 
 PRE(sys_setresuid16)
 {
-   PRINT("sys_setresuid16 ( %ld, %ld, %ld )", ARG1, ARG2, ARG3);
+   PRINT("sys_setresuid16 ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setresuid16",
                  vki_old_uid_t, ruid, vki_old_uid_t, euid, vki_old_uid_t, suid);
 }
 
 PRE(sys_setresuid)
 {
-   PRINT("sys_setresuid ( %ld, %ld, %ld )", ARG1, ARG2, ARG3);
+   PRINT("sys_setresuid ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setresuid",
                  vki_uid_t, ruid, vki_uid_t, euid, vki_uid_t, suid);
 }
@@ -657,7 +657,7 @@
 
 PRE(sys_setresgid16)
 {
-   PRINT("sys_setresgid16 ( %ld, %ld, %ld )", ARG1, ARG2, ARG3);
+   PRINT("sys_setresgid16 ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setresgid16",
                  vki_old_gid_t, rgid, 
                  vki_old_gid_t, egid, vki_old_gid_t, sgid);
@@ -665,7 +665,7 @@
 
 PRE(sys_setresgid)
 {
-   PRINT("sys_setresgid ( %ld, %ld, %ld )", ARG1, ARG2, ARG3);
+   PRINT("sys_setresgid ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setresgid",
                  vki_gid_t, rgid, vki_gid_t, egid, vki_gid_t, sgid);
 }
@@ -718,7 +718,7 @@
    ThreadId     t;
    ThreadState* tst;
 
-   PRINT("exit_group( %ld )", ARG1);
+   PRINT("exit_group( %ld )", SARG1);
    PRE_REG_READ1(void, "exit_group", int, status);
 
    tst = VG_(get_ThreadState)(tid);
@@ -785,7 +785,7 @@
 
 PRE(sys_llseek)
 {
-   PRINT("sys_llseek ( %ld, 0x%lx, 0x%lx, %#lx, %ld )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_llseek ( %lu, 0x%lx, 0x%lx, %#lx, %lu )", ARG1,ARG2,ARG3,ARG4,ARG5);
    PRE_REG_READ5(long, "llseek",
                  unsigned int, fd, unsigned long, offset_high,
                  unsigned long, offset_low, vki_loff_t *, result,
@@ -839,7 +839,7 @@
 PRE(sys_clock_adjtime)
 {
    struct vki_timex *tx = (struct vki_timex *)ARG2;
-   PRINT("sys_clock_adjtime ( %ld, %#lx )", ARG1,ARG2);
+   PRINT("sys_clock_adjtime ( %ld, %#lx )", SARG1,ARG2);
    PRE_REG_READ2(long, "clock_adjtime", vki_clockid_t, id, struct timex *, buf);
    PRE_MEM_READ( "clock_adjtime(timex->modes)", ARG2, sizeof(tx->modes));
 
@@ -872,7 +872,7 @@
 
 PRE(sys_ioperm)
 {
-   PRINT("sys_ioperm ( %ld, %ld, %ld )", ARG1, ARG2, ARG3 );
+   PRINT("sys_ioperm ( %lu, %lu, %ld )", ARG1, ARG2, SARG3 );
    PRE_REG_READ3(long, "ioperm",
                  unsigned long, from, unsigned long, num, int, turn_on);
 }
@@ -880,7 +880,7 @@
 PRE(sys_syslog)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_syslog (%ld, %#lx, %ld)", ARG1,ARG2,ARG3);
+   PRINT("sys_syslog (%ld, %#lx, %ld)", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "syslog", int, type, char *, bufp, int, len);
    switch (ARG1) {
    // The kernel uses magic numbers here, rather than named constants,
@@ -960,7 +960,7 @@
 PRE(sys_prctl)
 {
    *flags |= SfMayBlock;
-   PRINT( "sys_prctl ( %ld, %ld, %ld, %ld, %ld )", ARG1, ARG2, ARG3, ARG4, ARG5 );
+   PRINT( "sys_prctl ( %ld, %ld, %ld, %ld, %ld )", SARG1, SARG2, SARG3, SARG4, SARG5 );
    switch (ARG1) {
    case VKI_PR_SET_PDEATHSIG:
       PRE_REG_READ2(int, "prctl", int, option, int, signal);
@@ -1089,7 +1089,7 @@
 PRE(sys_sendfile)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_sendfile ( %ld, %ld, %#lx, %lu )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_sendfile ( %ld, %ld, %#lx, %lu )", SARG1,SARG2,ARG3,ARG4);
    PRE_REG_READ4(ssize_t, "sendfile",
                  int, out_fd, int, in_fd, vki_off_t *, offset,
                  vki_size_t, count);
@@ -1106,7 +1106,7 @@
 PRE(sys_sendfile64)
 {
    *flags |= SfMayBlock;
-   PRINT("sendfile64 ( %ld, %ld, %#lx, %lu )",ARG1,ARG2,ARG3,ARG4);
+   PRINT("sendfile64 ( %ld, %ld, %#lx, %lu )",SARG1,SARG2,ARG3,ARG4);
    PRE_REG_READ4(ssize_t, "sendfile64",
                  int, out_fd, int, in_fd, vki_loff_t *, offset,
                  vki_size_t, count);
@@ -1132,7 +1132,7 @@
       ARG5 - u32 *uaddr2			REQUEUE,CMP_REQUEUE
       ARG6 - int val3				CMP_REQUEUE
     */
-   PRINT("sys_futex ( %#lx, %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_futex ( %#lx, %ld, %ld, %#lx, %#lx )", ARG1,SARG2,SARG3,ARG4,ARG5);
    switch(ARG2 & ~(VKI_FUTEX_PRIVATE_FLAG|VKI_FUTEX_CLOCK_REALTIME)) {
    case VKI_FUTEX_CMP_REQUEUE:
    case VKI_FUTEX_WAKE_OP:
@@ -1239,7 +1239,7 @@
 
 PRE(sys_set_robust_list)
 {
-   PRINT("sys_set_robust_list ( %#lx, %ld )", ARG1,ARG2);
+   PRINT("sys_set_robust_list ( %#lx, %lu )", ARG1,ARG2);
    PRE_REG_READ2(long, "set_robust_list", 
                  struct vki_robust_list_head *, head, vki_size_t, len);
 
@@ -1252,7 +1252,7 @@
 
 PRE(sys_get_robust_list)
 {
-   PRINT("sys_get_robust_list ( %ld, %#lx, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_get_robust_list ( %ld, %#lx, %#lx )", SARG1,ARG2,ARG3);
    PRE_REG_READ3(long, "get_robust_list",
                  int, pid,
                  struct vki_robust_list_head **, head_ptr,
@@ -1271,7 +1271,8 @@
 PRE(sys_pselect6)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_pselect6 ( %ld, %#lx, %#lx, %#lx, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+   PRINT("sys_pselect6 ( %ld, %#lx, %#lx, %#lx, %#lx, %#lx )",
+         SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(long, "pselect6",
                  int, n, vki_fd_set *, readfds, vki_fd_set *, writefds,
                  vki_fd_set *, exceptfds, struct vki_timeval *, timeout,
@@ -1297,7 +1298,7 @@
    UInt i;
    struct vki_pollfd* ufds = (struct vki_pollfd *)ARG1;
    *flags |= SfMayBlock;
-   PRINT("sys_ppoll ( %#lx, %ld, %#lx, %#lx, %llu )\n", ARG1,ARG2,ARG3,ARG4,(ULong)ARG5);
+   PRINT("sys_ppoll ( %#lx, %lu, %#lx, %#lx, %lu )\n", ARG1,ARG2,ARG3,ARG4,ARG5);
    PRE_REG_READ5(long, "ppoll",
                  struct vki_pollfd *, ufds, unsigned int, nfds,
                  struct vki_timespec *, tsp, vki_sigset_t *, sigmask,
@@ -1335,7 +1336,7 @@
 
 PRE(sys_epoll_create)
 {
-   PRINT("sys_epoll_create ( %ld )", ARG1);
+   PRINT("sys_epoll_create ( %ld )", SARG1);
    PRE_REG_READ1(long, "epoll_create", int, size);
 }
 POST(sys_epoll_create)
@@ -1352,7 +1353,7 @@
 
 PRE(sys_epoll_create1)
 {
-   PRINT("sys_epoll_create1 ( %ld )", ARG1);
+   PRINT("sys_epoll_create1 ( %ld )", SARG1);
    PRE_REG_READ1(long, "epoll_create1", int, flags);
 }
 POST(sys_epoll_create1)
@@ -1375,7 +1376,7 @@
       "EPOLL_CTL_MOD"
    };
    PRINT("sys_epoll_ctl ( %ld, %s, %ld, %#lx )",
-         ARG1, ( ARG2<3 ? epoll_ctl_s[ARG2] : "?" ), ARG3, ARG4);
+         SARG1, ( ARG2<3 ? epoll_ctl_s[ARG2] : "?" ), SARG3, ARG4);
    PRE_REG_READ4(long, "epoll_ctl",
                  int, epfd, int, op, int, fd, struct vki_epoll_event *, event);
    if (ARG2 != VKI_EPOLL_CTL_DEL)
@@ -1385,7 +1386,7 @@
 PRE(sys_epoll_wait)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_epoll_wait ( %ld, %#lx, %ld, %ld )", ARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_epoll_wait ( %ld, %#lx, %ld, %ld )", SARG1, ARG2, SARG3, SARG4);
    PRE_REG_READ4(long, "epoll_wait",
                  int, epfd, struct vki_epoll_event *, events,
                  int, maxevents, int, timeout);
@@ -1401,7 +1402,8 @@
 PRE(sys_epoll_pwait)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_epoll_pwait ( %ld, %#lx, %ld, %ld, %#lx, %llu )", ARG1,ARG2,ARG3,ARG4,ARG5,(ULong)ARG6);
+   PRINT("sys_epoll_pwait ( %ld, %#lx, %ld, %ld, %#lx, %lu )",
+         SARG1, ARG2, SARG3, SARG4, ARG5, ARG6);
    PRE_REG_READ6(long, "epoll_pwait",
                  int, epfd, struct vki_epoll_event *, events,
                  int, maxevents, int, timeout, vki_sigset_t *, sigmask,
@@ -1435,7 +1437,7 @@
 
 PRE(sys_eventfd2)
 {
-   PRINT("sys_eventfd2 ( %lu, %ld )", ARG1,ARG2);
+   PRINT("sys_eventfd2 ( %lu, %ld )", ARG1, SARG2);
    PRE_REG_READ2(long, "sys_eventfd2", unsigned int, count, int, flags);
 }
 POST(sys_eventfd2)
@@ -1454,14 +1456,14 @@
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
    PRINT("sys_fallocate ( %ld, %ld, %lld, %lld )",
-         ARG1, ARG2, MERGE64(ARG3,ARG4), MERGE64(ARG5,ARG6));
+         SARG1, SARG2, (Long)MERGE64(ARG3,ARG4), (Long)MERGE64(ARG5,ARG6));
    PRE_REG_READ6(long, "fallocate",
                  int, fd, int, mode,
                  unsigned, MERGE64_FIRST(offset), unsigned, MERGE64_SECOND(offset),
                  unsigned, MERGE64_FIRST(len), unsigned, MERGE64_SECOND(len));
 #elif VG_WORDSIZE == 8
-   PRINT("sys_fallocate ( %ld, %ld, %lld, %lld )",
-         ARG1, ARG2, (Long)ARG3, (Long)ARG4);
+   PRINT("sys_fallocate ( %ld, %ld, %ld, %ld )",
+         SARG1, SARG2, SARG3, SARG4);
    PRE_REG_READ4(long, "fallocate",
                  int, fd, int, mode, vki_loff_t, offset, vki_loff_t, len);
 #else
@@ -1473,7 +1475,7 @@
 
 PRE(sys_prlimit64)
 {
-   PRINT("sys_prlimit64 ( %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_prlimit64 ( %ld, %lu, %#lx, %#lx )", SARG1,ARG2,ARG3,ARG4);
    PRE_REG_READ4(long, "prlimit64",
                  vki_pid_t, pid, unsigned int, resource,
                  const struct rlimit64 *, new_rlim,
@@ -1570,7 +1572,7 @@
 
 PRE(sys_tkill)
 {
-   PRINT("sys_tgkill ( %ld, %ld )", ARG1,ARG2);
+   PRINT("sys_tgkill ( %ld, %ld )", SARG1, SARG2);
    PRE_REG_READ2(long, "tkill", int, tid, int, sig);
    if (!ML_(client_signal_OK)(ARG2)) {
       SET_STATUS_Failure( VKI_EINVAL );
@@ -1582,7 +1584,7 @@
 
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg, "tkill: sending signal %ld to pid %ld\n",
-		   ARG2, ARG1);
+		   SARG2, SARG1);
 
    /* If we're sending SIGKILL, check to see if the target is one of
       our threads and handle it specially. */
@@ -1606,12 +1608,12 @@
 {
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg, "tkill: sent signal %ld to pid %ld\n",
-                   ARG2, ARG1);
+                   SARG2, SARG1);
 }
 
 PRE(sys_tgkill)
 {
-   PRINT("sys_tgkill ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_tgkill ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
    PRE_REG_READ3(long, "tgkill", int, tgid, int, tid, int, sig);
    if (!ML_(client_signal_OK)(ARG3)) {
       SET_STATUS_Failure( VKI_EINVAL );
@@ -1624,7 +1626,7 @@
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
                    "tgkill: sending signal %ld to pid %ld/%ld\n",
-		   ARG3, ARG1, ARG2);
+		   SARG3, SARG1, SARG2);
 
    /* If we're sending SIGKILL, check to see if the target is one of
       our threads and handle it specially. */
@@ -1649,7 +1651,7 @@
    if (VG_(clo_trace_signals))
       VG_(message)(Vg_DebugMsg,
                    "tgkill: sent signal %ld to pid %ld/%ld\n",
-                   ARG3, ARG1, ARG2);
+                   SARG3, SARG1, SARG2);
 }
 
 /* ---------------------------------------------------------------------
@@ -1658,8 +1660,8 @@
 
 PRE(sys_fadvise64)
 {
-   PRINT("sys_fadvise64 ( %ld, %lld, %lu, %ld )",
-         ARG1, MERGE64(ARG2,ARG3), ARG4, ARG5);
+   PRINT("sys_fadvise64 ( %ld, %llu, %lu, %ld )",
+         SARG1, MERGE64(ARG2,ARG3), ARG4, SARG5);
    PRE_REG_READ5(long, "fadvise64",
                  int, fd, vki_u32, MERGE64_FIRST(offset), vki_u32, MERGE64_SECOND(offset),
                  vki_size_t, len, int, advice);
@@ -1667,8 +1669,8 @@
 
 PRE(sys_fadvise64_64)
 {
-   PRINT("sys_fadvise64_64 ( %ld, %lld, %lld, %ld )",
-         ARG1, MERGE64(ARG2,ARG3), MERGE64(ARG4,ARG5), ARG6);
+   PRINT("sys_fadvise64_64 ( %ld, %llu, %llu, %ld )",
+         SARG1, MERGE64(ARG2,ARG3), MERGE64(ARG4,ARG5), SARG6);
    PRE_REG_READ6(long, "fadvise64_64",
                  int, fd, vki_u32, MERGE64_FIRST(offset), vki_u32, MERGE64_SECOND(offset),
                  vki_u32, MERGE64_FIRST(len), vki_u32, MERGE64_SECOND(len), int, advice);
@@ -1815,7 +1817,7 @@
 {
    Int i, j;
 
-   PRINT("sys_io_submit ( %llu, %ld, %#lx )", (ULong)ARG1,ARG2,ARG3);
+   PRINT("sys_io_submit ( %lu, %ld, %#lx )", ARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "io_submit",
                  vki_aio_context_t, ctx_id, long, nr,
                  struct iocb **, iocbpp);
@@ -1884,7 +1886,7 @@
 
 PRE(sys_mbind)
 {
-   PRINT("sys_mbind ( %#lx, %lu, %ld, %#lx, %lu, %lu )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+   PRINT("sys_mbind ( %#lx, %lu, %lu, %#lx, %lu, %lu )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
    PRE_REG_READ6(long, "mbind",
                  unsigned long, start, unsigned long, len,
                  unsigned long, policy, unsigned long *, nodemask,
@@ -1896,7 +1898,7 @@
 
 PRE(sys_set_mempolicy)
 {
-   PRINT("sys_set_mempolicy ( %ld, %#lx, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_set_mempolicy ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "set_mempolicy",
                  int, policy, unsigned long *, nodemask,
                  unsigned long, maxnode);
@@ -1906,7 +1908,7 @@
 
 PRE(sys_get_mempolicy)
 {
-   PRINT("sys_get_mempolicy ( %#lx, %#lx, %ld, %#lx, %lx )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_get_mempolicy ( %#lx, %#lx, %lu, %#lx, %lx )", ARG1,ARG2,ARG3,ARG4,ARG5);
    PRE_REG_READ5(long, "get_mempolicy",
                  int *, policy, unsigned long *, nodemask,
                  unsigned long, maxnode, unsigned long, addr,
@@ -1952,7 +1954,7 @@
 {
 #if VG_WORDSIZE == 4
    PRINT( "sys_fanotify_mark ( %ld, %lu, %llu, %ld, %#lx(%s))", 
-          ARG1,ARG2,MERGE64(ARG3,ARG4),ARG5,ARG6,(char *)ARG6);
+          SARG1, ARG2, MERGE64(ARG3,ARG4), SARG5, ARG6, (HChar *)ARG6);
    PRE_REG_READ6(long, "sys_fanotify_mark", 
                  int, fanotify_fd, unsigned int, flags,
                  __vki_u32, mask0, __vki_u32, mask1,
@@ -1960,8 +1962,8 @@
    if (ARG6)
       PRE_MEM_RASCIIZ( "fanotify_mark(path)", ARG6);
 #elif VG_WORDSIZE == 8
-   PRINT( "sys_fanotify_mark ( %ld, %lu, %llu, %ld, %#lx(%s))", 
-           ARG1,ARG2,(ULong)ARG3,ARG4,ARG5,(char *)ARG5);
+   PRINT( "sys_fanotify_mark ( %ld, %lu, %lu, %ld, %#lx(%s))", 
+          SARG1, ARG2, ARG3, SARG4, ARG5, (HChar *)ARG5);
    PRE_REG_READ5(long, "sys_fanotify_mark", 
                  int, fanotify_fd, unsigned int, flags,
                  __vki_u64, mask,
@@ -1996,7 +1998,7 @@
 
 PRE(sys_inotify_init1)
 {
-   PRINT("sys_inotify_init ( %ld )", ARG1);
+   PRINT("sys_inotify_init ( %ld )", SARG1);
    PRE_REG_READ1(long, "inotify_init", int, flag);
 }
 
@@ -2014,14 +2016,14 @@
 
 PRE(sys_inotify_add_watch)
 {
-   PRINT( "sys_inotify_add_watch ( %ld, %#lx, %lx )", ARG1,ARG2,ARG3);
+   PRINT( "sys_inotify_add_watch ( %ld, %#lx, %lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "inotify_add_watch", int, fd, char *, path, int, mask);
    PRE_MEM_RASCIIZ( "inotify_add_watch(path)", ARG2 );
 }
 
 PRE(sys_inotify_rm_watch)
 {
-   PRINT( "sys_inotify_rm_watch ( %ld, %lx )", ARG1,ARG2);
+   PRINT( "sys_inotify_rm_watch ( %ld, %lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "inotify_rm_watch", int, fd, int, wd);
 }
 
@@ -2031,8 +2033,8 @@
 
 PRE(sys_mq_open)
 {
-   PRINT("sys_mq_open( %#lx(%s), %ld, %lld, %#lx )",
-         ARG1,(char*)ARG1,ARG2,(ULong)ARG3,ARG4);
+   PRINT("sys_mq_open( %#lx(%s), %ld, %lu, %#lx )",
+         ARG1, (HChar*)ARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "mq_open",
                  const char *, name, int, oflag, vki_mode_t, mode,
                  struct mq_attr *, attr);
@@ -2067,8 +2069,8 @@
 PRE(sys_mq_timedsend)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mq_timedsend ( %ld, %#lx, %llu, %ld, %#lx )",
-         ARG1,ARG2,(ULong)ARG3,ARG4,ARG5);
+   PRINT("sys_mq_timedsend ( %ld, %#lx, %lu, %lu, %#lx )",
+         SARG1,ARG2,ARG3,ARG4,ARG5);
    PRE_REG_READ5(long, "mq_timedsend",
                  vki_mqd_t, mqdes, const char *, msg_ptr, vki_size_t, msg_len,
                  unsigned int, msg_prio, const struct timespec *, abs_timeout);
@@ -2085,8 +2087,8 @@
 PRE(sys_mq_timedreceive)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mq_timedreceive( %ld, %#lx, %llu, %#lx, %#lx )",
-         ARG1,ARG2,(ULong)ARG3,ARG4,ARG5);
+   PRINT("sys_mq_timedreceive( %ld, %#lx, %lu, %#lx, %#lx )",
+         SARG1,ARG2,ARG3,ARG4,ARG5);
    PRE_REG_READ5(ssize_t, "mq_timedreceive",
                  vki_mqd_t, mqdes, char *, msg_ptr, vki_size_t, msg_len,
                  unsigned int *, msg_prio,
@@ -2112,7 +2114,7 @@
 
 PRE(sys_mq_notify)
 {
-   PRINT("sys_mq_notify( %ld, %#lx )", ARG1,ARG2 );
+   PRINT("sys_mq_notify( %ld, %#lx )", SARG1, ARG2 );
    PRE_REG_READ2(long, "mq_notify",
                  vki_mqd_t, mqdes, const struct sigevent *, notification);
    if (!ML_(fd_allowed)(ARG1, "mq_notify", tid, False))
@@ -2124,7 +2126,7 @@
 
 PRE(sys_mq_getsetattr)
 {
-   PRINT("sys_mq_getsetattr( %ld, %#lx, %#lx )", ARG1,ARG2,ARG3 );
+   PRINT("sys_mq_getsetattr( %ld, %#lx, %#lx )", SARG1,ARG2,ARG3 );
    PRE_REG_READ3(long, "mq_getsetattr",
                  vki_mqd_t, mqdes, const struct mq_attr *, mqstat,
                  struct mq_attr *, omqstat);
@@ -2153,7 +2155,7 @@
 
 PRE(sys_clock_settime)
 {
-   PRINT("sys_clock_settime( %ld, %#lx )", ARG1,ARG2);
+   PRINT("sys_clock_settime( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "clock_settime", 
                  vki_clockid_t, clk_id, const struct timespec *, tp);
    PRE_MEM_READ( "clock_settime(tp)", ARG2, sizeof(struct vki_timespec) );
@@ -2161,7 +2163,7 @@
 
 PRE(sys_clock_gettime)
 {
-   PRINT("sys_clock_gettime( %ld, %#lx )" , ARG1,ARG2);
+   PRINT("sys_clock_gettime( %ld, %#lx )" , SARG1, ARG2);
    PRE_REG_READ2(long, "clock_gettime", 
                  vki_clockid_t, clk_id, struct timespec *, tp);
    PRE_MEM_WRITE( "clock_gettime(tp)", ARG2, sizeof(struct vki_timespec) );
@@ -2173,7 +2175,7 @@
 
 PRE(sys_clock_getres)
 {
-   PRINT("sys_clock_getres( %ld, %#lx )" , ARG1,ARG2);
+   PRINT("sys_clock_getres( %ld, %#lx )" , SARG1, ARG2);
    // Nb: we can't use "RES" as the param name because that's a macro
    // defined above!
    PRE_REG_READ2(long, "clock_getres", 
@@ -2190,7 +2192,8 @@
 PRE(sys_clock_nanosleep)
 {
    *flags |= SfMayBlock|SfPostOnFail;
-   PRINT("sys_clock_nanosleep( %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_clock_nanosleep( %ld, %ld, %#lx, %#lx )",
+         SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(int32_t, "clock_nanosleep",
                  vki_clockid_t, clkid, int, flags,
                  const struct timespec *, rqtp, struct timespec *, rmtp);
@@ -2210,7 +2213,7 @@
 
 PRE(sys_timer_create)
 {
-   PRINT("sys_timer_create( %ld, %#lx, %#lx )", ARG1,ARG2,ARG3);
+   PRINT("sys_timer_create( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "timer_create",
                  vki_clockid_t, clockid, struct sigevent *, evp,
                  vki_timer_t *, timerid);
@@ -2236,7 +2239,7 @@
 
 PRE(sys_timer_settime)
 {
-   PRINT("sys_timer_settime( %lld, %ld, %#lx, %#lx )", (ULong)ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_timer_settime( %ld, %ld, %#lx, %#lx )", SARG1,SARG2,ARG3,ARG4);
    PRE_REG_READ4(long, "timer_settime", 
                  vki_timer_t, timerid, int, flags,
                  const struct itimerspec *, value,
@@ -2255,7 +2258,7 @@
 
 PRE(sys_timer_gettime)
 {
-   PRINT("sys_timer_gettime( %lld, %#lx )", (ULong)ARG1,ARG2);
+   PRINT("sys_timer_gettime( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "timer_gettime", 
                  vki_timer_t, timerid, struct itimerspec *, value);
    PRE_MEM_WRITE( "timer_gettime(value)", ARG2,
@@ -2315,7 +2318,7 @@
 {
    if (linux_kernel_2_6_22()) {
       /* 2.6.22 kernel: timerfd system call. */
-      PRINT("sys_timerfd ( %ld, %ld, %#lx )", ARG1, ARG2, ARG3);
+      PRINT("sys_timerfd ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
       PRE_REG_READ3(long, "sys_timerfd",
                     int, fd, int, clockid, const struct itimerspec *, tmr);
       PRE_MEM_READ("timerfd(tmr)", ARG3,
@@ -2324,7 +2327,7 @@
          SET_STATUS_Failure( VKI_EBADF );
    } else {
       /* 2.6.24 and later kernels: timerfd_create system call. */
-      PRINT("sys_timerfd_create (%ld, %ld )", ARG1, ARG2);
+      PRINT("sys_timerfd_create (%ld, %ld )", SARG1, SARG2);
       PRE_REG_READ2(long, "timerfd_create", int, clockid, int, flags);
    }
 }
@@ -2356,7 +2359,7 @@
 
 PRE(sys_timerfd_gettime)
 {
-   PRINT("sys_timerfd_gettime ( %ld, %#lx )", ARG1, ARG2);
+   PRINT("sys_timerfd_gettime ( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "timerfd_gettime",
                  int, ufd,
                  struct vki_itimerspec*, otmr);
@@ -2374,7 +2377,8 @@
 
 PRE(sys_timerfd_settime)
 {
-   PRINT("sys_timerfd_settime ( %ld, %ld, %#lx, %#lx )", ARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_timerfd_settime ( %ld, %ld, %#lx, %#lx )",
+         SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "timerfd_settime",
                  int, ufd,
                  int, flags,
@@ -2444,7 +2448,7 @@
 
 PRE(sys_setuid16)
 {
-   PRINT("sys_setuid16 ( %ld )", ARG1);
+   PRINT("sys_setuid16 ( %lu )", ARG1);
    PRE_REG_READ1(long, "setuid16", vki_old_uid_t, uid);
 }
 
@@ -2456,7 +2460,7 @@
 
 PRE(sys_setgid16)
 {
-   PRINT("sys_setgid16 ( %ld )", ARG1);
+   PRINT("sys_setgid16 ( %lu )", ARG1);
    PRE_REG_READ1(long, "setgid16", vki_old_gid_t, gid);
 }
 
@@ -2480,13 +2484,13 @@
 
 PRE(sys_setregid16)
 {
-   PRINT("sys_setregid16 ( %ld, %ld )", ARG1, ARG2);
+   PRINT("sys_setregid16 ( %lu, %lu )", ARG1, ARG2);
    PRE_REG_READ2(long, "setregid16", vki_old_gid_t, rgid, vki_old_gid_t, egid);
 }
 
 PRE(sys_getgroups16)
 {
-   PRINT("sys_getgroups16 ( %ld, %#lx )", ARG1, ARG2);
+   PRINT("sys_getgroups16 ( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "getgroups16", int, size, vki_old_gid_t *, list);
    if (ARG1 > 0)
       PRE_MEM_WRITE( "getgroups16(list)", ARG2, ARG1 * sizeof(vki_old_gid_t) );
@@ -2521,7 +2525,7 @@
 
 PRE(sys_fchown16)
 {
-   PRINT("sys_fchown16 ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_fchown16 ( %lu, %lu, %lu )", ARG1,ARG2,ARG3);
    PRE_REG_READ3(long, "fchown16",
                  unsigned int, fd, vki_old_uid_t, owner, vki_old_gid_t, group);
 }
@@ -2533,8 +2537,8 @@
 PRE(sys_setxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_setxattr ( %#lx, %#lx, %#lx, %llu, %ld )",
-         ARG1, ARG2, ARG3, (ULong)ARG4, ARG5);
+   PRINT("sys_setxattr ( %#lx, %#lx, %#lx, %lu, %ld )",
+         ARG1, ARG2, ARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "setxattr",
                  char *, path, char *, name,
                  void *, value, vki_size_t, size, int, flags);
@@ -2546,8 +2550,8 @@
 PRE(sys_lsetxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_lsetxattr ( %#lx, %#lx, %#lx, %llu, %ld )",
-         ARG1, ARG2, ARG3, (ULong)ARG4, ARG5);
+   PRINT("sys_lsetxattr ( %#lx, %#lx, %#lx, %lu, %ld )",
+         ARG1, ARG2, ARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "lsetxattr",
                  char *, path, char *, name,
                  void *, value, vki_size_t, size, int, flags);
@@ -2559,8 +2563,8 @@
 PRE(sys_fsetxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fsetxattr ( %ld, %#lx, %#lx, %llu, %ld )",
-         ARG1, ARG2, ARG3, (ULong)ARG4, ARG5);
+   PRINT("sys_fsetxattr ( %ld, %#lx, %#lx, %lu, %ld )",
+         SARG1, ARG2, ARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "fsetxattr",
                  int, fd, char *, name, void *, value,
                  vki_size_t, size, int, flags);
@@ -2607,7 +2611,7 @@
 PRE(sys_fgetxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fgetxattr ( %ld, %#lx, %#lx, %llu )", ARG1, ARG2, ARG3, (ULong)ARG4);
+   PRINT("sys_fgetxattr ( %ld, %#lx, %#lx, %lu )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(ssize_t, "fgetxattr",
                  int, fd, char *, name, void *, value, vki_size_t, size);
    PRE_MEM_RASCIIZ( "fgetxattr(name)", ARG2 );
@@ -2652,7 +2656,7 @@
 PRE(sys_flistxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_flistxattr ( %ld, %#lx, %llu )", ARG1, ARG2, (ULong)ARG3);
+   PRINT("sys_flistxattr ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "flistxattr",
                  int, fd, char *, list, vki_size_t, size);
    PRE_MEM_WRITE( "flistxattr(list)", ARG2, ARG3 );
@@ -2684,7 +2688,7 @@
 PRE(sys_fremovexattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fremovexattr ( %ld, %#lx )", ARG1, ARG2);
+   PRINT("sys_fremovexattr ( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "fremovexattr", int, fd, char *, name);
    PRE_MEM_RASCIIZ( "fremovexattr(name)", ARG2 );
 }
@@ -2695,7 +2699,7 @@
 
 PRE(sys_sched_setparam)
 {
-   PRINT("sched_setparam ( %ld, %#lx )", ARG1, ARG2 );
+   PRINT("sched_setparam ( %ld, %#lx )", SARG1, ARG2 );
    PRE_REG_READ2(long, "sched_setparam", 
                  vki_pid_t, pid, struct sched_param *, p);
    PRE_MEM_READ( "sched_setparam(p)", ARG2, sizeof(struct vki_sched_param) );
@@ -2707,7 +2711,7 @@
 
 PRE(sys_sched_getparam)
 {
-   PRINT("sched_getparam ( %ld, %#lx )", ARG1, ARG2 );
+   PRINT("sched_getparam ( %ld, %#lx )", SARG1, ARG2 );
    PRE_REG_READ2(long, "sched_getparam", 
                  vki_pid_t, pid, struct sched_param *, p);
    PRE_MEM_WRITE( "sched_getparam(p)", ARG2, sizeof(struct vki_sched_param) );
@@ -2719,13 +2723,13 @@
 
 PRE(sys_sched_getscheduler)
 {
-   PRINT("sys_sched_getscheduler ( %ld )", ARG1);
+   PRINT("sys_sched_getscheduler ( %ld )", SARG1);
    PRE_REG_READ1(long, "sched_getscheduler", vki_pid_t, pid);
 }
 
 PRE(sys_sched_setscheduler)
 {
-   PRINT("sys_sched_setscheduler ( %ld, %ld, %#lx )", ARG1,ARG2,ARG3);
+   PRINT("sys_sched_setscheduler ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "sched_setscheduler", 
                  vki_pid_t, pid, int, policy, struct sched_param *, p);
    if (ARG3 != 0)
@@ -2742,19 +2746,19 @@
 
 PRE(sys_sched_get_priority_max)
 {
-   PRINT("sched_get_priority_max ( %ld )", ARG1);
+   PRINT("sched_get_priority_max ( %ld )", SARG1);
    PRE_REG_READ1(long, "sched_get_priority_max", int, policy);
 }
 
 PRE(sys_sched_get_priority_min)
 {
-   PRINT("sched_get_priority_min ( %ld )", ARG1);
+   PRINT("sched_get_priority_min ( %ld )", SARG1);
    PRE_REG_READ1(long, "sched_get_priority_min", int, policy);
 }
 
 PRE(sys_sched_rr_get_interval)
 {
-   PRINT("sys_sched_rr_get_interval ( %ld, %#lx )", ARG1, ARG2);
+   PRINT("sys_sched_rr_get_interval ( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(int, "sched_rr_get_interval",
                  vki_pid_t, pid,
                  struct vki_timespec *, tp);
@@ -2769,7 +2773,7 @@
 
 PRE(sys_sched_setaffinity)
 {
-   PRINT("sched_setaffinity ( %ld, %ld, %#lx )", ARG1, ARG2, ARG3);
+   PRINT("sched_setaffinity ( %ld, %lu, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sched_setaffinity", 
                  vki_pid_t, pid, unsigned int, len, unsigned long *, mask);
    PRE_MEM_READ( "sched_setaffinity(mask)", ARG3, ARG2);
@@ -2777,7 +2781,7 @@
 
 PRE(sys_sched_getaffinity)
 {
-   PRINT("sched_getaffinity ( %ld, %ld, %#lx )", ARG1, ARG2, ARG3);
+   PRINT("sched_getaffinity ( %ld, %lu, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sched_getaffinity", 
                  vki_pid_t, pid, unsigned int, len, unsigned long *, mask);
    PRE_MEM_WRITE( "sched_getaffinity(mask)", ARG3, ARG2);
@@ -2789,8 +2793,8 @@
 
 PRE(sys_unshare)
 {
-   PRINT("sys_unshare ( %ld )", ARG1);
-   PRE_REG_READ1(int, "unshare", int, flags);
+   PRINT("sys_unshare ( %#lx )", ARG1);
+   PRE_REG_READ1(int, "unshare", unsigned long, flags);
 }
 
 /* ---------------------------------------------------------------------
@@ -2868,7 +2872,7 @@
 
 PRE(sys_dup3)
 {
-   PRINT("sys_dup3 ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_dup3 ( %lu, %lu, %#lx )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "dup3", unsigned int, oldfd, unsigned int, newfd, int, flags);
    if (!ML_(fd_allowed)(ARG2, "dup3", tid, True))
       SET_STATUS_Failure( VKI_EBADF );
@@ -2893,7 +2897,8 @@
 PRE(sys_waitid)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_waitid( %ld, %ld, %#lx, %ld, %#lx )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_waitid( %ld, %ld, %#lx, %ld, %#lx )",
+         SARG1, SARG2, ARG3, SARG4, ARG5);
    PRE_REG_READ5(int32_t, "sys_waitid",
                  int, which, vki_pid_t, pid, struct vki_siginfo *, infop,
                  int, options, struct vki_rusage *, ru);
@@ -2912,16 +2917,16 @@
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_sync_file_range ( %ld, %lld, %lld, %ld )",
-         ARG1,MERGE64(ARG2,ARG3),MERGE64(ARG4,ARG5),ARG6);
+   PRINT("sys_sync_file_range ( %ld, %lld, %lld, %#lx )",
+         SARG1, (Long)MERGE64(ARG2,ARG3), (Long)MERGE64(ARG4,ARG5),ARG6);
    PRE_REG_READ6(long, "sync_file_range",
                  int, fd,
                  unsigned, MERGE64_FIRST(offset), unsigned, MERGE64_SECOND(offset),
                  unsigned, MERGE64_FIRST(nbytes), unsigned, MERGE64_SECOND(nbytes),
                  unsigned int, flags);
 #elif VG_WORDSIZE == 8
-   PRINT("sys_sync_file_range ( %ld, %lld, %lld, %ld )",
-         ARG1,(Long)ARG2,(Long)ARG3,ARG4);
+   PRINT("sys_sync_file_range ( %ld, %ld, %ld, %#lx )",
+         SARG1, SARG2, SARG3, ARG4);
    PRE_REG_READ4(long, "sync_file_range",
                  int, fd, vki_loff_t, offset, vki_loff_t, nbytes,
                  unsigned int, flags);
@@ -2936,15 +2941,15 @@
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_sync_file_range2 ( %ld, %ld, %lld, %lld )",
-         ARG1,ARG2,MERGE64(ARG3,ARG4),MERGE64(ARG5,ARG6));
+   PRINT("sys_sync_file_range2 ( %ld, %lu, %lld, %lld )",
+         SARG1, ARG2, (Long)MERGE64(ARG3,ARG4), (Long)MERGE64(ARG5,ARG6));
    PRE_REG_READ6(long, "sync_file_range2",
                  int, fd, unsigned int, flags,
                  unsigned, MERGE64_FIRST(offset), unsigned, MERGE64_SECOND(offset),
                  unsigned, MERGE64_FIRST(nbytes), unsigned, MERGE64_SECOND(nbytes));
 #elif VG_WORDSIZE == 8
-   PRINT("sys_sync_file_range2 ( %ld, %ld, %lld, %lld )",
-         ARG1,ARG2,(Long)ARG3,(Long)ARG4);
+   PRINT("sys_sync_file_range2 ( %ld, %lu, %ld, %ld )",
+         SARG1, ARG2, SARG3, SARG4);
    PRE_REG_READ4(long, "sync_file_range2",
                  int, fd, unsigned int, flags,
                  vki_loff_t, offset, vki_loff_t, nbytes);
@@ -2965,8 +2970,8 @@
 PRE(sys_perf_event_open)
 {
    struct vki_perf_event_attr *attr;
-   PRINT("sys_perf_event_open ( %#lx, %ld, %ld, %ld, %ld )",
-         ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_perf_event_open ( %#lx, %ld, %ld, %ld, %#lx )",
+         ARG1, SARG2, SARG3, SARG4, ARG5);
    PRE_REG_READ5(long, "perf_event_open",
                  struct vki_perf_event_attr *, attr,
                  vki_pid_t, pid, int, cpu, int, group_fd,
@@ -3015,8 +3020,8 @@
 
 PRE(sys_move_pages)
 {
-   PRINT("sys_move_pages ( %ld, %ld, %#lx, %#lx, %#lx, %lx )",
-         ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+   PRINT("sys_move_pages ( %ld, %lu, %#lx, %#lx, %#lx, %#lx )",
+         SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(int, "move_pages",
                  vki_pid_t, pid, unsigned long, nr_pages, const void **, pages,
                  const int *, nodes, int *, status, int, flags);
@@ -3033,7 +3038,7 @@
 
 PRE(sys_getrandom)
 {
-   PRINT("sys_getrandom ( %#lx, %ld, %ld )" , ARG1,ARG2,ARG3);
+   PRINT("sys_getrandom ( %#lx, %lu, %lu )" , ARG1, ARG2, ARG3);
    PRE_REG_READ3(int, "getrandom",
                  char *, buf, vki_size_t, count, unsigned int, flags);
    PRE_MEM_WRITE( "getrandom(cpu)", ARG1, ARG2 );
@@ -3046,7 +3051,7 @@
 
 PRE(sys_memfd_create)
 {
-   PRINT("sys_memfd_create ( %#lx, %ld )" , ARG1,ARG2);
+   PRINT("sys_memfd_create ( %#lx, %lu )" , ARG1, ARG2);
    PRE_REG_READ2(int, "memfd_create",
                  char *, uname, unsigned int, flags);
    PRE_MEM_RASCIIZ( "memfd_create(uname)", ARG1 );
@@ -3067,7 +3072,7 @@
 PRE(sys_syncfs)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_syncfs ( %ld )", ARG1);
+   PRINT("sys_syncfs ( %lu )", ARG1);
    PRE_REG_READ1(long, "syncfs", unsigned int, fd);
 }
 
@@ -3091,7 +3096,7 @@
 
 PRE(sys_lseek)
 {
-   PRINT("sys_lseek ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_lseek ( %lu, %ld, %lu )", ARG1, SARG2, ARG3);
    PRE_REG_READ3(vki_off_t, "lseek",
                  unsigned int, fd, vki_off_t, offset, unsigned int, whence);
 }
@@ -3104,12 +3109,13 @@
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_readahead ( %ld, %lld, %ld )", ARG1, MERGE64(ARG2,ARG3), ARG4);
+   PRINT("sys_readahead ( %ld, %lld, %lu )",
+         SARG1, (Long)MERGE64(ARG2,ARG3), ARG4);
    PRE_REG_READ4(vki_off_t, "readahead",
                  int, fd, unsigned, MERGE64_FIRST(offset),
                  unsigned, MERGE64_SECOND(offset), vki_size_t, count);
 #elif VG_WORDSIZE == 8
-   PRINT("sys_readahead ( %ld, %lld, %ld )", ARG1, (Long)ARG2, ARG3);
+   PRINT("sys_readahead ( %ld, %ld, %lu )", SARG1, SARG2, ARG3);
    PRE_REG_READ3(vki_off_t, "readahead",
                  int, fd, vki_loff_t, offset, vki_size_t, count);
 #else
@@ -3148,7 +3154,7 @@
    vki_sigset_t bigger_set;
    vki_sigset_t bigger_oldset;
 
-   PRINT("sys_sigprocmask ( %ld, %#lx, %#lx )",ARG1,ARG2,ARG3);
+   PRINT("sys_sigprocmask ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sigprocmask", 
                  int, how, vki_old_sigset_t *, set, vki_old_sigset_t *, oldset);
    if (ARG2 != 0)
@@ -3197,7 +3203,7 @@
    vki_sigaction_toK_t   new, *newp;
    vki_sigaction_fromK_t old, *oldp;
 
-   PRINT("sys_sigaction ( %ld, %#lx, %#lx )", ARG1,ARG2,ARG3);
+   PRINT("sys_sigaction ( %ld, %#lx, %#lx )",  SARG1, ARG2, ARG3);
    PRE_REG_READ3(int, "sigaction",
                  int, signum, const struct old_sigaction *, act,
                  struct old_sigaction *, oldact);
@@ -3270,7 +3276,7 @@
 
 PRE(sys_signalfd4)
 {
-   PRINT("sys_signalfd4 ( %d, %#lx, %llu, %ld )", (Int)ARG1,ARG2,(ULong)ARG3,ARG4);
+   PRINT("sys_signalfd4 ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "sys_signalfd4",
                  int, fd, vki_sigset_t *, sigmask, vki_size_t, sigsetsize, int, flags);
    PRE_MEM_READ( "signalfd(sigmask)", ARG2, sizeof(vki_sigset_t) );
@@ -3295,7 +3301,7 @@
 
 PRE(sys_rt_sigaction)
 {
-   PRINT("sys_rt_sigaction ( %ld, %#lx, %#lx, %ld )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_rt_sigaction ( %ld, %#lx, %#lx, %lu )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "rt_sigaction",
                  int, signum, const struct sigaction *, act,
                  struct sigaction *, oldact, vki_size_t, sigsetsize);
@@ -3329,7 +3335,8 @@
 
 PRE(sys_rt_sigprocmask)
 {
-   PRINT("sys_rt_sigprocmask ( %ld, %#lx, %#lx, %llu )",ARG1,ARG2,ARG3,(ULong)ARG4);
+   PRINT("sys_rt_sigprocmask ( %ld, %#lx, %#lx, %lu )",
+         SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "rt_sigprocmask", 
                  int, how, vki_sigset_t *, set, vki_sigset_t *, oldset,
                  vki_size_t, sigsetsize);
@@ -3374,8 +3381,8 @@
 PRE(sys_rt_sigtimedwait)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_rt_sigtimedwait ( %#lx, %#lx, %#lx, %lld )",
-         ARG1,ARG2,ARG3,(ULong)ARG4);
+   PRINT("sys_rt_sigtimedwait ( %#lx, %#lx, %#lx, %lu )",
+         ARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "rt_sigtimedwait", 
                  const vki_sigset_t *, set, vki_siginfo_t *, info,
                  const struct timespec *, timeout, vki_size_t, sigsetsize);
@@ -3395,7 +3402,7 @@
 
 PRE(sys_rt_sigqueueinfo)
 {
-   PRINT("sys_rt_sigqueueinfo(%ld, %ld, %#lx)", ARG1, ARG2, ARG3);
+   PRINT("sys_rt_sigqueueinfo(%ld, %ld, %#lx)", SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "rt_sigqueueinfo", 
                  int, pid, int, sig, vki_siginfo_t *, uinfo);
    if (ARG2 != 0)
@@ -3409,7 +3416,8 @@
 
 PRE(sys_rt_tgsigqueueinfo)
 {
-   PRINT("sys_rt_tgsigqueueinfo(%ld, %ld, %ld, %#lx)", ARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_rt_tgsigqueueinfo(%ld, %ld, %ld, %#lx)",
+         SARG1, SARG2, SARG3, ARG4);
    PRE_REG_READ4(long, "rt_tgsigqueueinfo",
                  int, tgid, int, pid, int, sig, vki_siginfo_t *, uinfo);
    if (ARG3 != 0)
@@ -3433,7 +3441,7 @@
       return EINVAL if it isn't.
     */
    *flags |= SfMayBlock;
-   PRINT("sys_rt_sigsuspend ( %#lx, %ld )", ARG1,ARG2 );
+   PRINT("sys_rt_sigsuspend ( %#lx, %lu )", ARG1, ARG2 );
    PRE_REG_READ2(int, "rt_sigsuspend", vki_sigset_t *, mask, vki_size_t, size)
    if (ARG1 != (Addr)NULL) {
       PRE_MEM_READ( "rt_sigsuspend(mask)", ARG1, sizeof(vki_sigset_t) );
@@ -3564,8 +3572,8 @@
 
 PRE(sys_ipc)
 {
-   PRINT("sys_ipc ( %ld, %ld, %ld, %ld, %#lx, %ld )",
-         ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+   PRINT("sys_ipc ( %lu, %ld, %ld, %ld, %#lx, %ld )",
+         ARG1, SARG2, SARG3, SARG4, ARG5, SARG6);
 
    switch (ARG1 /* call */) {
    case VKI_SEMOP:
@@ -3677,7 +3685,7 @@
       ML_(generic_PRE_sys_shmctl)( tid, ARG2, ARG3, ARG5 );
       break;
    default:
-      VG_(message)(Vg_DebugMsg, "FATAL: unhandled syscall(ipc) %ld\n", ARG1 );
+      VG_(message)(Vg_DebugMsg, "FATAL: unhandled syscall(ipc) %lu\n", ARG1 );
       VG_(core_panic)("... bye!\n");
       break; /*NOTREACHED*/
    }
@@ -3746,7 +3754,7 @@
       break;
    default:
       VG_(message)(Vg_DebugMsg,
-		   "FATAL: unhandled syscall(ipc) %ld\n",
+		   "FATAL: unhandled syscall(ipc) %lu\n",
 		   ARG1 );
       VG_(core_panic)("... bye!\n");
       break; /*NOTREACHED*/
@@ -3756,14 +3764,14 @@
 
 PRE(sys_semget)
 {
-   PRINT("sys_semget ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+   PRINT("sys_semget ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
    PRE_REG_READ3(long, "semget", vki_key_t, key, int, nsems, int, semflg);
 }
 
 PRE(sys_semop)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_semop ( %ld, %#lx, %lu )",ARG1,ARG2,ARG3);
+   PRINT("sys_semop ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "semop",
                  int, semid, struct sembuf *, sops, unsigned, nsoops);
    ML_(generic_PRE_sys_semop)(tid, ARG1,ARG2,ARG3);
@@ -3774,25 +3782,25 @@
    switch (ARG3 & ~VKI_IPC_64) {
    case VKI_IPC_INFO:
    case VKI_SEM_INFO:
-      PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+      PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
       PRE_REG_READ4(long, "semctl",
                     int, semid, int, semnum, int, cmd, struct seminfo *, arg);
       break;
    case VKI_IPC_STAT:
    case VKI_SEM_STAT:
    case VKI_IPC_SET:
-      PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+      PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
       PRE_REG_READ4(long, "semctl",
                     int, semid, int, semnum, int, cmd, struct semid_ds *, arg);
       break;
    case VKI_GETALL:
    case VKI_SETALL:
-      PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+      PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
       PRE_REG_READ4(long, "semctl",
                     int, semid, int, semnum, int, cmd, unsigned short *, arg);
       break;
    default:
-      PRINT("sys_semctl ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+      PRINT("sys_semctl ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
       PRE_REG_READ3(long, "semctl",
                     int, semid, int, semnum, int, cmd);
       break;
@@ -3816,7 +3824,7 @@
 PRE(sys_semtimedop)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_semtimedop ( %ld, %#lx, %lu, %#lx )",ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_semtimedop ( %ld, %#lx, %lu, %#lx )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "semtimedop",
                  int, semid, struct sembuf *, sops, unsigned, nsoops,
                  struct timespec *, timeout);
@@ -3825,13 +3833,13 @@
 
 PRE(sys_msgget)
 {
-   PRINT("sys_msgget ( %ld, %ld )",ARG1,ARG2);
+   PRINT("sys_msgget ( %ld, %ld )", SARG1, SARG2);
    PRE_REG_READ2(long, "msgget", vki_key_t, key, int, msgflg);
 }
 
 PRE(sys_msgsnd)
 {
-   PRINT("sys_msgsnd ( %ld, %#lx, %ld, %ld )",ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_msgsnd ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "msgsnd",
                  int, msqid, struct msgbuf *, msgp, vki_size_t, msgsz, int, msgflg);
    ML_(linux_PRE_sys_msgsnd)(tid, ARG1,ARG2,ARG3,ARG4);
@@ -3841,7 +3849,8 @@
 
 PRE(sys_msgrcv)
 {
-   PRINT("sys_msgrcv ( %ld, %#lx, %ld, %ld, %ld )",ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_msgrcv ( %ld, %#lx, %lu, %ld, %ld )",
+         SARG1, ARG2, ARG3, SARG4, SARG5);
    PRE_REG_READ5(long, "msgrcv",
                  int, msqid, struct msgbuf *, msgp, vki_size_t, msgsz,
                  long, msgytp, int, msgflg);
@@ -3856,7 +3865,7 @@
 
 PRE(sys_msgctl)
 {
-   PRINT("sys_msgctl ( %ld, %ld, %#lx )",ARG1,ARG2,ARG3);
+   PRINT("sys_msgctl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "msgctl",
                  int, msqid, int, cmd, struct msqid_ds *, buf);
    ML_(linux_PRE_sys_msgctl)(tid, ARG1,ARG2,ARG3);
@@ -3869,7 +3878,7 @@
 
 PRE(sys_shmget)
 {
-   PRINT("sys_shmget ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+   PRINT("sys_shmget ( %ld, %lu, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "shmget", vki_key_t, key, vki_size_t, size, int, shmflg);
    if (ARG3 & VKI_SHM_HUGETLB) {
       static Bool warning_given = False;
@@ -3885,7 +3894,7 @@
 PRE(wrap_sys_shmat)
 {
    UWord arg2tmp;
-   PRINT("wrap_sys_shmat ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("wrap_sys_shmat ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "shmat",
                  int, shmid, const void *, shmaddr, int, shmflg);
 #if defined(VGP_arm_linux)
@@ -3923,7 +3932,7 @@
 
 PRE(sys_shmctl)
 {
-   PRINT("sys_shmctl ( %ld, %ld, %#lx )",ARG1,ARG2,ARG3);
+   PRINT("sys_shmctl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "shmctl",
                  int, shmid, int, cmd, struct shmid_ds *, buf);
 #ifdef VGP_amd64_linux
@@ -3970,7 +3979,7 @@
    }
 
    *flags |= SfMayBlock;
-   PRINT("sys_socketcall ( %ld, %#lx )",ARG1,ARG2);
+   PRINT("sys_socketcall ( %ld, %#lx )", SARG1, ARG2);
    PRE_REG_READ2(long, "socketcall", int, call, unsigned long *, args);
 
    switch (ARG1 /* request */) {
@@ -4240,7 +4249,7 @@
 
 PRE(sys_socket)
 {
-   PRINT("sys_socket ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+   PRINT("sys_socket ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
    PRE_REG_READ3(long, "socket", int, domain, int, type, int, protocol);
 }
 POST(sys_socket)
@@ -4253,16 +4262,18 @@
 
 PRE(sys_setsockopt)
 {
-   PRINT("sys_setsockopt ( %ld, %ld, %ld, %#lx, %ld )",ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_setsockopt ( %ld, %ld, %ld, %#lx, %lu )",
+         SARG1, SARG2, SARG3, ARG4, ARG5);
    PRE_REG_READ5(long, "setsockopt",
                  int, s, int, level, int, optname,
-                 const void *, optval, int, optlen);
+                 const void *, optval, unsigned, optlen); // socklen_t
    ML_(linux_PRE_sys_setsockopt)(tid, ARG1,ARG2,ARG3,ARG4,ARG5);
 }
 
 PRE(sys_getsockopt)
 {
-   PRINT("sys_getsockopt ( %ld, %ld, %ld, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_getsockopt ( %ld, %ld, %ld, %#lx, %ld )",
+         SARG1, SARG2, SARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "getsockopt",
                  int, s, int, level, int, optname,
                  void *, optval, int, *optlen);
@@ -4278,7 +4289,7 @@
 PRE(sys_connect)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_connect ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("sys_connect ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "connect",
                  int, sockfd, struct sockaddr *, serv_addr, int, addrlen);
    ML_(generic_PRE_sys_connect)(tid, ARG1,ARG2,ARG3);
@@ -4287,9 +4298,9 @@
 PRE(sys_accept)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_accept ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("sys_accept ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "accept",
-                 int, s, struct sockaddr *, addr, int, *addrlen);
+                 int, s, struct sockaddr *, addr, int *, addrlen);
    ML_(generic_PRE_sys_accept)(tid, ARG1,ARG2,ARG3);
 }
 POST(sys_accept)
@@ -4304,9 +4315,9 @@
 PRE(sys_accept4)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_accept4 ( %ld, %#lx, %ld, %ld )",ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_accept4 ( %ld, %#lx, %#lx, %ld )", SARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "accept4",
-                 int, s, struct sockaddr *, addr, int, *addrlen, int, flags);
+                 int, s, struct sockaddr *, addr, int *, addrlen, int, flags);
    ML_(generic_PRE_sys_accept)(tid, ARG1,ARG2,ARG3);
 }
 POST(sys_accept4)
@@ -4321,10 +4332,10 @@
 PRE(sys_send)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_send ( %ld, %#lx, %ld, %lu )",ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_send ( %ld, %#lx, %lu, %#lx )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "send",
-                 int, s, const void *, msg, int, len, 
-                 unsigned int, flags);
+                 int, s, const void *, msg, vki_size_t, len, 
+                 int, flags);
 
    ML_(generic_PRE_sys_send)( tid, ARG1, ARG2, ARG3 );
 }
@@ -4332,9 +4343,10 @@
 PRE(sys_sendto)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_sendto ( %ld, %#lx, %ld, %lu, %#lx, %ld )",ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+   PRINT("sys_sendto ( %ld, %#lx, %lu, %lu, %#lx, %ld )",
+         SARG1, ARG2, ARG3, ARG4, ARG5, SARG6);
    PRE_REG_READ6(long, "sendto",
-                 int, s, const void *, msg, int, len, 
+                 int, s, const void *, msg, vki_size_t, len, 
                  unsigned int, flags, 
                  const struct sockaddr *, to, int, tolen);
    ML_(generic_PRE_sys_sendto)(tid, ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
@@ -4343,8 +4355,8 @@
 PRE (sys_recv) 
 {
   *flags |= SfMayBlock;
-  PRINT ("sys_recv ( %ld, %#lx, %ld, %lu )", ARG1, ARG2, ARG3, ARG4);
-  PRE_REG_READ4 (long, "recv", int, s, void *, buf, int, len,
+  PRINT ("sys_recv ( %ld, %#lx, %lu, %lu )", SARG1, ARG2, ARG3, ARG4);
+  PRE_REG_READ4 (long, "recv", int, s, void *, buf, vki_size_t, len,
                  unsigned int, flags);
   ML_ (generic_PRE_sys_recv) (tid, ARG1, ARG2, ARG3);
 } 
@@ -4357,9 +4369,10 @@
 PRE(sys_recvfrom)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_recvfrom ( %ld, %#lx, %ld, %lu, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+   PRINT("sys_recvfrom ( %ld, %#lx, %lu, %lu, %#lx, %#lx )",
+         SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(long, "recvfrom",
-                 int, s, void *, buf, int, len, unsigned int, flags,
+                 int, s, void *, buf, vki_size_t, len, unsigned int, flags,
                  struct sockaddr *, from, int *, fromlen);
    ML_(generic_PRE_sys_recvfrom)(tid, ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
 }
@@ -4373,17 +4386,18 @@
 PRE(sys_sendmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_sendmsg ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("sys_sendmsg ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sendmsg",
-                 int, s, const struct msghdr *, msg, int, flags);
+                 int, s, const struct msghdr *, msg, unsigned int, flags);
    ML_(generic_PRE_sys_sendmsg)(tid, "msg", (struct vki_msghdr *)ARG2);
 }
 
 PRE(sys_recvmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_recvmsg ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
-   PRE_REG_READ3(long, "recvmsg", int, s, struct msghdr *, msg, int, flags);
+   PRINT("sys_recvmsg ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "recvmsg", int, s, struct msghdr *, msg,
+                 unsigned int, flags);
    ML_(generic_PRE_sys_recvmsg)(tid, "msg", (struct vki_msghdr *)ARG2);
 }
 POST(sys_recvmsg)
@@ -4394,13 +4408,13 @@
 PRE(sys_shutdown)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_shutdown ( %ld, %ld )",ARG1,ARG2);
+   PRINT("sys_shutdown ( %ld, %ld )", SARG1, SARG2);
    PRE_REG_READ2(int, "shutdown", int, s, int, how);
 }
 
 PRE(sys_bind)
 {
-   PRINT("sys_bind ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+   PRINT("sys_bind ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "bind",
                  int, sockfd, struct sockaddr *, my_addr, int, addrlen);
    ML_(generic_PRE_sys_bind)(tid, ARG1,ARG2,ARG3);
@@ -4408,13 +4422,13 @@
 
 PRE(sys_listen)
 {
-   PRINT("sys_listen ( %ld, %ld )",ARG1,ARG2);
+   PRINT("sys_listen ( %ld, %ld )", SARG1, SARG2);
    PRE_REG_READ2(long, "listen", int, s, int, backlog);
 }
 
 PRE(sys_getsockname)
 {
-   PRINT("sys_getsockname ( %ld, %#lx, %#lx )",ARG1,ARG2,ARG3);
+   PRINT("sys_getsockname ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getsockname",
                  int, s, struct sockaddr *, name, int *, namelen);
    ML_(generic_PRE_sys_getsockname)(tid, ARG1,ARG2,ARG3);
@@ -4428,7 +4442,7 @@
 
 PRE(sys_getpeername)
 {
-   PRINT("sys_getpeername ( %ld, %#lx, %#lx )",ARG1,ARG2,ARG3);
+   PRINT("sys_getpeername ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getpeername",
                  int, s, struct sockaddr *, name, int *, namelen);
    ML_(generic_PRE_sys_getpeername)(tid, ARG1,ARG2,ARG3);
@@ -4442,7 +4456,7 @@
 
 PRE(sys_socketpair)
 {
-   PRINT("sys_socketpair ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_socketpair ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
    PRE_REG_READ4(long, "socketpair",
                  int, d, int, type, int, protocol, int*, sv);
    ML_(generic_PRE_sys_socketpair)(tid, ARG1,ARG2,ARG3,ARG4);
@@ -4466,12 +4480,14 @@
 
    if (ARG3 & VKI_O_CREAT) {
       // 4-arg version
-      PRINT("sys_openat ( %ld, %#lx(%s), %ld, %ld )",ARG1,ARG2,(char*)ARG2,ARG3,ARG4);
+      PRINT("sys_openat ( %ld, %#lx(%s), %ld, %ld )",
+            SARG1, ARG2, (HChar*)ARG2, SARG3, SARG4);
       PRE_REG_READ4(long, "openat",
                     int, dfd, const char *, filename, int, flags, int, mode);
    } else {
       // 3-arg version
-      PRINT("sys_openat ( %ld, %#lx(%s), %ld )",ARG1,ARG2,(char*)ARG2,ARG3);
+      PRINT("sys_openat ( %ld, %#lx(%s), %ld )",
+            SARG1, ARG2, (HChar*)ARG2, SARG3);
       PRE_REG_READ3(long, "openat",
                     int, dfd, const char *, filename, int, flags);
    }
@@ -4541,7 +4557,8 @@
 PRE(sys_mkdirat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mkdirat ( %ld, %#lx(%s), %ld )", ARG1,ARG2,(char*)ARG2,ARG3);
+   PRINT("sys_mkdirat ( %ld, %#lx(%s), %ld )",
+         SARG1, ARG2, (HChar*)ARG2, SARG3);
    PRE_REG_READ3(long, "mkdirat",
                  int, dfd, const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "mkdirat(pathname)", ARG2 );
@@ -4549,7 +4566,8 @@
 
 PRE(sys_mknodat)
 {
-  PRINT("sys_mknodat ( %ld, %#lx(%s), 0x%lx, 0x%lx )", ARG1,ARG2,(char*)ARG2,ARG3,ARG4 );
+   PRINT("sys_mknodat ( %ld, %#lx(%s), 0x%lx, 0x%lx )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4 );
    PRE_REG_READ4(long, "mknodat",
                  int, dfd, const char *, pathname, int, mode, unsigned, dev);
    PRE_MEM_RASCIIZ( "mknodat(pathname)", ARG2 );
@@ -4557,7 +4575,8 @@
 
 PRE(sys_fchownat)
 {
-   PRINT("sys_fchownat ( %ld, %#lx(%s), 0x%lx, 0x%lx )", ARG1,ARG2,(char*)ARG2,ARG3,ARG4);
+   PRINT("sys_fchownat ( %ld, %#lx(%s), 0x%lx, 0x%lx )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "fchownat",
                  int, dfd, const char *, path,
                  vki_uid_t, owner, vki_gid_t, group);
@@ -4566,7 +4585,8 @@
 
 PRE(sys_futimesat)
 {
-   PRINT("sys_futimesat ( %ld, %#lx(%s), %#lx )", ARG1,ARG2,(char*)ARG2,ARG3);
+   PRINT("sys_futimesat ( %ld, %#lx(%s), %#lx )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3);
    PRE_REG_READ3(long, "futimesat",
                  int, dfd, char *, filename, struct timeval *, tvp);
    if (ARG2 != 0)
@@ -4577,7 +4597,8 @@
 
 PRE(sys_utimensat)
 {
-   PRINT("sys_utimensat ( %ld, %#lx(%s), %#lx, 0x%lx )", ARG1,ARG2,(char*)ARG2,ARG3,ARG4);
+   PRINT("sys_utimensat ( %ld, %#lx(%s), %#lx, 0x%lx )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "utimensat",
                  int, dfd, char *, filename, struct timespec *, utimes, int, flags);
    if (ARG2 != 0)
@@ -4589,7 +4610,8 @@
 PRE(sys_newfstatat)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_newfstatat ( %ld, %#lx(%s), %#lx )", ARG1,ARG2,(char*)ARG2,ARG3);
+   PRINT("sys_newfstatat ( %ld, %#lx(%s), %#lx )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3);
    PRE_REG_READ3(long, "fstatat",
                  int, dfd, char *, file_name, struct stat *, buf);
    PRE_MEM_RASCIIZ( "fstatat(file_name)", ARG2 );
@@ -4604,14 +4626,15 @@
 PRE(sys_unlinkat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_unlinkat ( %ld, %#lx(%s) )", ARG1,ARG2,(char*)ARG2);
+   PRINT("sys_unlinkat ( %ld, %#lx(%s) )", SARG1, ARG2, (HChar*)ARG2);
    PRE_REG_READ2(long, "unlinkat", int, dfd, const char *, pathname);
    PRE_MEM_RASCIIZ( "unlinkat(pathname)", ARG2 );
 }
 
 PRE(sys_renameat)
 {
-   PRINT("sys_renameat ( %ld, %#lx(%s), %ld, %#lx(%s) )", ARG1,ARG2,(char*)ARG2,ARG3,ARG4,(char*)ARG4);
+   PRINT("sys_renameat ( %ld, %#lx(%s), %ld, %#lx(%s) )",
+         SARG1, ARG2, (HChar*)ARG2, SARG3, ARG4, (HChar*)ARG4);
    PRE_REG_READ4(long, "renameat",
                  int, olddfd, const char *, oldpath,
                  int, newdfd, const char *, newpath);
@@ -4622,7 +4645,8 @@
 PRE(sys_linkat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_linkat ( %ld, %#lx(%s), %ld, %#lx(%s), %ld )",ARG1,ARG2,(char*)ARG2,ARG3,ARG4,(char*)ARG4,ARG5);
+   PRINT("sys_linkat ( %ld, %#lx(%s), %ld, %#lx(%s), %ld )",
+         SARG1, ARG2, (HChar*)ARG2, SARG3, ARG4, (HChar*)ARG4, SARG5);
    PRE_REG_READ5(long, "linkat",
                  int, olddfd, const char *, oldpath,
                  int, newdfd, const char *, newpath,
@@ -4634,7 +4658,8 @@
 PRE(sys_symlinkat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_symlinkat ( %#lx(%s), %ld, %#lx(%s) )",ARG1,(char*)ARG1,ARG2,ARG3,(char*)ARG3);
+   PRINT("sys_symlinkat ( %#lx(%s), %ld, %#lx(%s) )",
+         ARG1, (HChar*)ARG1, SARG2, ARG3, (HChar*)ARG3);
    PRE_REG_READ3(long, "symlinkat",
                  const char *, oldpath, int, newdfd, const char *, newpath);
    PRE_MEM_RASCIIZ( "symlinkat(oldpath)", ARG1 );
@@ -4646,9 +4671,10 @@
    HChar name[30];       // large enough
    Word  saved = SYSNO;
 
-   PRINT("sys_readlinkat ( %ld, %#lx(%s), %#lx, %llu )", ARG1,ARG2,(char*)ARG2,ARG3,(ULong)ARG4);
+   PRINT("sys_readlinkat ( %ld, %#lx(%s), %#lx, %lu )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "readlinkat",
-                 int, dfd, const char *, path, char *, buf, int, bufsiz);
+                 int, dfd, const char *, path, char *, buf, vki_size_t, bufsiz);
    PRE_MEM_RASCIIZ( "readlinkat(path)", ARG2 );
    PRE_MEM_WRITE( "readlinkat(buf)", ARG3,ARG4 );
 
@@ -4674,7 +4700,8 @@
 
 PRE(sys_fchmodat)
 {
-   PRINT("sys_fchmodat ( %ld, %#lx(%s), %ld )", ARG1,ARG2,(char*)ARG2,ARG3);
+   PRINT("sys_fchmodat ( %ld, %#lx(%s), %lu )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3);
    PRE_REG_READ3(long, "fchmodat",
                  int, dfd, const char *, path, vki_mode_t, mode);
    PRE_MEM_RASCIIZ( "fchmodat(path)", ARG2 );
@@ -4682,7 +4709,8 @@
 
 PRE(sys_faccessat)
 {
-   PRINT("sys_faccessat ( %ld, %#lx(%s), %ld )", ARG1,ARG2,(char*)ARG2,ARG3);
+   PRINT("sys_faccessat ( %ld, %#lx(%s), %ld )",
+         SARG1, ARG2, (HChar*)ARG2, SARG3);
    PRE_REG_READ3(long, "faccessat",
                  int, dfd, const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "faccessat(pathname)", ARG2 );
@@ -4690,7 +4718,8 @@
 
 PRE(sys_name_to_handle_at)
 {
-   PRINT("sys_name_to_handle_at ( %ld, %#lx(%s), %#lx, %#lx, %ld )", ARG1, ARG2, (char*)ARG2, ARG3, ARG4, ARG5);
+   PRINT("sys_name_to_handle_at ( %ld, %#lx(%s), %#lx, %#lx, %ld )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4, SARG5);
    PRE_REG_READ5(int, "name_to_handle_at",
                  int, dfd, const char *, name,
                  struct vki_file_handle *, handle,
@@ -4714,7 +4743,7 @@
 PRE(sys_open_by_handle_at)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_open_by_handle_at ( %ld, %#lx, %ld )", ARG1, ARG2, ARG3);
+   PRINT("sys_open_by_handle_at ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(int, "open_by_handle_at",
                  int, mountdirfd,
                  struct vki_file_handle *, handle,
@@ -4746,13 +4775,14 @@
 #if VG_WORDSIZE == 4
    /* Note that the offset argument here is in lo+hi order on both
       big and little endian platforms... */
-   PRINT("sys_preadv ( %ld, %#lx, %llu, %lld )",ARG1,ARG2,(ULong)ARG3,LOHI64(ARG4,ARG5));
+   PRINT("sys_preadv ( %lu, %#lx, %lu, %lld )",
+         ARG1, ARG2, ARG3, (Long)LOHI64(ARG4,ARG5));
    PRE_REG_READ5(ssize_t, "preadv",
                  unsigned long, fd, const struct iovec *, vector,
                  unsigned long, count, vki_u32, offset_low,
                  vki_u32, offset_high);
 #elif VG_WORDSIZE == 8
-   PRINT("sys_preadv ( %ld, %#lx, %llu, %lld )",ARG1,ARG2,(ULong)ARG3,(Long)ARG4);
+   PRINT("sys_preadv ( %lu, %#lx, %lu, %ld )", ARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(ssize_t, "preadv",
                  unsigned long, fd, const struct iovec *, vector,
                  unsigned long, count, Word, offset);
@@ -4801,13 +4831,14 @@
 #if VG_WORDSIZE == 4
    /* Note that the offset argument here is in lo+hi order on both
       big and little endian platforms... */
-   PRINT("sys_pwritev ( %ld, %#lx, %llu, %lld )",ARG1,ARG2,(ULong)ARG3,LOHI64(ARG4,ARG5));
+   PRINT("sys_pwritev ( %lu, %#lx, %lu, %lld )",
+         ARG1, ARG2, ARG3, (Long)LOHI64(ARG4,ARG5));
    PRE_REG_READ5(ssize_t, "pwritev",
                  unsigned long, fd, const struct iovec *, vector,
                  unsigned long, count, vki_u32, offset_low,
                  vki_u32, offset_high);
 #elif VG_WORDSIZE == 8
-   PRINT("sys_pwritev ( %ld, %#lx, %llu, %lld )",ARG1,ARG2,(ULong)ARG3,(Long)ARG4);
+   PRINT("sys_pwritev ( %lu, %#lx, %lu, %ld )", ARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(ssize_t, "pwritev",
                  unsigned long, fd, const struct iovec *, vector,
                  unsigned long, count, Word, offset);
@@ -4835,8 +4866,8 @@
 
 PRE(sys_process_vm_readv)
 {
-   PRINT("sys_process_vm_readv ( %lu, %#lx, %lu, %#lx, %lu, %lu )",
-         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+   PRINT("sys_process_vm_readv ( %ld, %#lx, %lu, %#lx, %lu, %lu )",
+         SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(ssize_t, "process_vm_readv",
                  vki_pid_t, pid,
                  const struct iovec *, lvec,
@@ -4873,8 +4904,8 @@
 
 PRE(sys_process_vm_writev)
 {
-   PRINT("sys_process_vm_writev ( %lu, %#lx, %lu, %#lx, %lu, %lu )",
-         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+   PRINT("sys_process_vm_writev ( %ld, %#lx, %lu, %#lx, %lu, %lu )",
+         SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(ssize_t, "process_vm_writev",
                  vki_pid_t, pid,
                  const struct iovec *, lvec,
@@ -4903,7 +4934,7 @@
 PRE(sys_sendmmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_sendmmsg ( %ld, %#lx, %ld, %ld )",ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_sendmmsg ( %ld, %#lx, %ld, %ld )", SARG1, ARG2, SARG3, SARG4);
    PRE_REG_READ4(long, "sendmmsg",
                  int, s, const struct mmsghdr *, mmsg, int, vlen, int, flags);
    ML_(linux_PRE_sys_sendmmsg)(tid, ARG1,ARG2,ARG3,ARG4);
@@ -4917,7 +4948,8 @@
 PRE(sys_recvmmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_recvmmsg ( %ld, %#lx, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_recvmmsg ( %ld, %#lx, %ld, %ld, %#lx )",
+         SARG1, ARG2, SARG3, SARG4, ARG5);
    PRE_REG_READ5(long, "recvmmsg",
                  int, s, struct mmsghdr *, mmsg, int, vlen,
                  int, flags, struct timespec *, timeout);
@@ -4936,7 +4968,7 @@
 PRE(sys_request_key)
 {
    PRINT("sys_request_key ( %#lx(%s), %#lx(%s), %#lx(%s), %ld )",
-         ARG1,(char*)ARG1,ARG2,(char*)ARG2,ARG3,(char*)ARG3,ARG4);
+         ARG1, (HChar*)ARG1, ARG2, (HChar*)ARG2, ARG3, (HChar*)ARG3, SARG4);
    PRE_REG_READ4(long, "request_key",
                  const char *, type, const char *, description, 
                  const char *, callout_info, vki_key_serial_t, keyring);
@@ -4948,8 +4980,8 @@
 
 PRE(sys_add_key)
 {
-   PRINT("sys_add_key ( %#lx(%s), %#lx(%s), %#lx, %ld, %ld )",
-         ARG1,(char*)ARG1,ARG2,(char*)ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_add_key ( %#lx(%s), %#lx(%s), %#lx, %lu, %ld )",
+         ARG1, (HChar*)ARG1, ARG2, (HChar*)ARG2, ARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "add_key",
                  const char *, type, const char *, description,
                  const void *, payload, vki_size_t, plen, 
@@ -4964,7 +4996,7 @@
 {
    switch (ARG1 /* option */) {
    case VKI_KEYCTL_GET_KEYRING_ID:
-      PRINT("sys_keyctl ( KEYCTL_GET_KEYRING_ID, %ld, %ld )", ARG2,ARG3);
+      PRINT("sys_keyctl ( KEYCTL_GET_KEYRING_ID, %ld, %ld )", SARG2, SARG3);
       PRE_REG_READ3(long, "keyctl(KEYCTL_GET_KEYRING_ID)",
                     int, option, vki_key_serial_t, id, int, create);
       break;
@@ -4976,7 +5008,7 @@
          PRE_MEM_RASCIIZ("keyctl(KEYCTL_JOIN_SESSION_KEYRING, name)", ARG2);
       break;
    case VKI_KEYCTL_UPDATE:
-      PRINT("sys_keyctl ( KEYCTL_UPDATE, %ld, %#lx, %ld )", ARG2,ARG3,ARG4);
+      PRINT("sys_keyctl ( KEYCTL_UPDATE, %ld, %#lx, %lu )", SARG2, ARG3, ARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_UPDATE)",
                     int, option, vki_key_serial_t, key,
                     const void *, payload, vki_size_t, plen);
@@ -4984,23 +5016,23 @@
          PRE_MEM_READ("keyctl(KEYCTL_UPDATE, payload)", ARG3, ARG4);
       break;
    case VKI_KEYCTL_REVOKE:
-      PRINT("sys_keyctl ( KEYCTL_REVOKE, %ld )", ARG2);
+      PRINT("sys_keyctl ( KEYCTL_REVOKE, %ld )", SARG2);
       PRE_REG_READ2(long, "keyctl(KEYCTL_REVOKE)",
                     int, option, vki_key_serial_t, id);
       break;
    case VKI_KEYCTL_CHOWN:
-      PRINT("sys_keyctl ( KEYCTL_CHOWN, %ld, %ld, %ld )", ARG2,ARG3,ARG4);
+      PRINT("sys_keyctl ( KEYCTL_CHOWN, %ld, %lu, %lu )", SARG2, ARG3, ARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_CHOWN)",
                     int, option, vki_key_serial_t, id,
                     vki_uid_t, uid, vki_gid_t, gid);
       break;
    case VKI_KEYCTL_SETPERM:
-      PRINT("sys_keyctl ( KEYCTL_SETPERM, %ld, %ld )", ARG2,ARG3);
+      PRINT("sys_keyctl ( KEYCTL_SETPERM, %ld, %lu )", SARG2, ARG3);
       PRE_REG_READ3(long, "keyctl(KEYCTL_SETPERM)",
                     int, option, vki_key_serial_t, id, vki_key_perm_t, perm);
       break;
    case VKI_KEYCTL_DESCRIBE:
-      PRINT("sys_keyctl ( KEYCTL_DESCRIBE, %ld, %#lx, %ld )", ARG2,ARG3,ARG4);
+      PRINT("sys_keyctl ( KEYCTL_DESCRIBE, %ld, %#lx, %lu )", SARG2, ARG3, ARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_DESCRIBE)",
                     int, option, vki_key_serial_t, id,
                     char *, buffer, vki_size_t, buflen);
@@ -5008,23 +5040,23 @@
          PRE_MEM_WRITE("keyctl(KEYCTL_DESCRIBE, buffer)", ARG3, ARG4);
       break;
    case VKI_KEYCTL_CLEAR:
-      PRINT("sys_keyctl ( KEYCTL_CLEAR, %ld )", ARG2);
+      PRINT("sys_keyctl ( KEYCTL_CLEAR, %ld )", SARG2);
       PRE_REG_READ2(long, "keyctl(KEYCTL_CLEAR)",
                     int, option, vki_key_serial_t, keyring);
       break;
    case VKI_KEYCTL_LINK:
-      PRINT("sys_keyctl ( KEYCTL_LINK, %ld, %ld )", ARG2,ARG3);
+      PRINT("sys_keyctl ( KEYCTL_LINK, %ld, %ld )", SARG2, SARG3);
       PRE_REG_READ3(long, "keyctl(KEYCTL_LINK)", int, option,
                     vki_key_serial_t, keyring, vki_key_serial_t, key);
       break;
    case VKI_KEYCTL_UNLINK:
-      PRINT("sys_keyctl ( KEYCTL_UNLINK, %ld, %ld )", ARG2,ARG3);
+      PRINT("sys_keyctl ( KEYCTL_UNLINK, %ld, %ld )", SARG2, SARG3);
       PRE_REG_READ3(long, "keyctl(KEYCTL_UNLINK)", int, option,
                     vki_key_serial_t, keyring, vki_key_serial_t, key);
       break;
    case VKI_KEYCTL_SEARCH:
       PRINT("sys_keyctl ( KEYCTL_SEARCH, %ld, %#lx(%s), %#lx(%s), %ld )",
-            ARG2,ARG3,(char*)ARG3,ARG4,(char*)ARG4,ARG5);
+            SARG2, ARG3, (HChar*)ARG3, ARG4, (HChar*)ARG4, SARG5);
       PRE_REG_READ5(long, "keyctl(KEYCTL_SEARCH)",
                     int, option, vki_key_serial_t, keyring, 
                     const char *, type, const char *, description,
@@ -5033,7 +5065,7 @@
       PRE_MEM_RASCIIZ("sys_keyctl(KEYCTL_SEARCH, description)", ARG4);
       break;
    case VKI_KEYCTL_READ:
-      PRINT("sys_keyctl ( KEYCTL_READ, %ld, %#lx, %ld )", ARG2,ARG3,ARG4);
+      PRINT("sys_keyctl ( KEYCTL_READ, %ld, %#lx, %lu )", SARG2, ARG3, ARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_READ)",
                     int, option, vki_key_serial_t, keyring, 
                     char *, buffer, vki_size_t, buflen);
@@ -5041,8 +5073,8 @@
          PRE_MEM_WRITE("keyctl(KEYCTL_READ, buffer)", ARG3, ARG4);
       break;
    case VKI_KEYCTL_INSTANTIATE:
-      PRINT("sys_keyctl ( KEYCTL_INSTANTIATE, %ld, %#lx, %ld, %ld )",
-            ARG2,ARG3,ARG4,ARG5);
+      PRINT("sys_keyctl ( KEYCTL_INSTANTIATE, %ld, %#lx, %lu, %ld )",
+            SARG2, ARG3, ARG4, SARG5);
       PRE_REG_READ5(long, "keyctl(KEYCTL_INSTANTIATE)",
                     int, option, vki_key_serial_t, key, 
                     char *, payload, vki_size_t, plen,
@@ -5051,28 +5083,28 @@
          PRE_MEM_READ("keyctl(KEYCTL_INSTANTIATE, payload)", ARG3, ARG4);
       break;
    case VKI_KEYCTL_NEGATE:
-      PRINT("sys_keyctl ( KEYCTL_NEGATE, %ld, %lu, %ld )", ARG2,ARG3,ARG4);
+      PRINT("sys_keyctl ( KEYCTL_NEGATE, %ld, %lu, %ld )", SARG2, ARG3, SARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_NEGATE)",
                     int, option, vki_key_serial_t, key, 
                     unsigned, timeout, vki_key_serial_t, keyring);
       break;
    case VKI_KEYCTL_SET_REQKEY_KEYRING:
-      PRINT("sys_keyctl ( KEYCTL_SET_REQKEY_KEYRING, %ld )", ARG2);
+      PRINT("sys_keyctl ( KEYCTL_SET_REQKEY_KEYRING, %ld )", SARG2);
       PRE_REG_READ2(long, "keyctl(KEYCTL_SET_REQKEY_KEYRING)",
                     int, option, int, reqkey_defl);
       break;
    case VKI_KEYCTL_SET_TIMEOUT:
-      PRINT("sys_keyctl ( KEYCTL_SET_TIMEOUT, %ld, %ld )", ARG2,ARG3);
+      PRINT("sys_keyctl ( KEYCTL_SET_TIMEOUT, %ld, %lu )", SARG2, ARG3);
       PRE_REG_READ3(long, "keyctl(KEYCTL_SET_TIMEOUT)",
                     int, option, vki_key_serial_t, key, unsigned, timeout);
       break;
    case VKI_KEYCTL_ASSUME_AUTHORITY:
-      PRINT("sys_keyctl ( KEYCTL_ASSUME_AUTHORITY, %ld )", ARG2);
+      PRINT("sys_keyctl ( KEYCTL_ASSUME_AUTHORITY, %ld )", SARG2);
       PRE_REG_READ2(long, "keyctl(KEYCTL_ASSUME_AUTHORITY)",
                     int, option, vki_key_serial_t, key);
       break;
    default:
-      PRINT("sys_keyctl ( %ld ) ", ARG1);
+      PRINT("sys_keyctl ( %ld ) ", SARG1);
       PRE_REG_READ1(long, "keyctl", int, option);
       break;
    }
@@ -5100,13 +5132,13 @@
 
 PRE(sys_ioprio_set)
 {
-   PRINT("sys_ioprio_set ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_ioprio_set ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
    PRE_REG_READ3(int, "ioprio_set", int, which, int, who, int, ioprio);
 }
 
 PRE(sys_ioprio_get)
 {
-   PRINT("sys_ioprio_get ( %ld, %ld )", ARG1,ARG2);
+   PRINT("sys_ioprio_get ( %ld, %ld )", SARG1, SARG2);
    PRE_REG_READ2(int, "ioprio_get", int, which, int, who);
 }
 
@@ -5117,8 +5149,8 @@
 PRE(sys_init_module)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_init_module ( %#lx, %llu, %#lx(\"%s\") )",
-         ARG1, (ULong)ARG2, ARG3, (char*)ARG3);
+   PRINT("sys_init_module ( %#lx, %lu, %#lx(\"%s\") )",
+         ARG1, ARG2, ARG3, (HChar*)ARG3);
    PRE_REG_READ3(long, "init_module",
                  void *, umod, unsigned long, len, const char *, uargs);
    PRE_MEM_READ( "init_module(umod)", ARG1, ARG2 );
@@ -5128,7 +5160,7 @@
 PRE(sys_delete_module)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_delete_module ( %#lx(\"%s\"), 0x%lx )", ARG1,(char*)ARG1, ARG2);
+   PRINT("sys_delete_module ( %#lx(\"%s\"), 0x%lx )", ARG1, (HChar*)ARG1, ARG2);
    PRE_REG_READ2(long, "delete_module",
                  const char *, name_user, unsigned int, flags);
    PRE_MEM_RASCIIZ("delete_module(name_user)", ARG1);
@@ -5141,8 +5173,8 @@
 PRE(sys_splice)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_splice ( %ld, %#lx, %ld, %#lx, %ld, %ld )",
-         ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+   PRINT("sys_splice ( %ld, %#lx, %ld, %#lx, %lu, %#lx )",
+         SARG1, ARG2, SARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(vki_ssize_t, "splice",
                  int, fd_in, vki_loff_t *, off_in,
                  int, fd_out, vki_loff_t *, off_out,
@@ -5161,7 +5193,7 @@
 PRE(sys_tee)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_tree ( %ld, %ld, %ld, %ld )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_tree ( %ld, %ld, %lu, %#lx )", SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(vki_ssize_t, "tee",
                  int, fd_in, int, fd_out,
                  vki_size_t, len, unsigned int, flags);
@@ -5175,8 +5207,7 @@
 {
    Int fdfl;
    *flags |= SfMayBlock;
-   PRINT("sys_vmsplice ( %ld, %#lx, %ld, %ld )",
-         ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_vmsplice ( %ld, %#lx, %lu, %lu )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(vki_ssize_t, "splice",
                  int, fd, struct vki_iovec *, iov,
                  unsigned long, nr_segs, unsigned int, flags);
@@ -5223,7 +5254,7 @@
 #if defined(VGP_x86_linux)
 PRE(sys_lookup_dcookie)
 {
-   PRINT("sys_lookup_dcookie (0x%llx, %#lx, %ld)",
+   PRINT("sys_lookup_dcookie (0x%llx, %#lx, %lu)",
          MERGE64(ARG1,ARG2), ARG3, ARG4);
    PRE_REG_READ4(long, "lookup_dcookie",
                  vki_u32, MERGE64_FIRST(cookie), vki_u32, MERGE64_SECOND(cookie),
@@ -5243,8 +5274,7 @@
 PRE(sys_lookup_dcookie)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_lookup_dcookie ( %llu, %#lx, %llu )",
-	 (ULong)ARG1, ARG2, (ULong)ARG3);
+   PRINT("sys_lookup_dcookie ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(int, "lookup_dcookie",
                  unsigned long long, cookie, char *, buf, vki_size_t, len);
 
@@ -5273,7 +5303,7 @@
    case VKI_F_GETSIG:
    case VKI_F_GETLEASE:
    case VKI_F_GETPIPE_SZ:
-      PRINT("sys_fcntl ( %ld, %ld )", ARG1,ARG2);
+      PRINT("sys_fcntl ( %lu, %lu )", ARG1, ARG2);
       PRE_REG_READ2(long, "fcntl", unsigned int, fd, unsigned int, cmd);
       break;
 
@@ -5287,7 +5317,7 @@
    case VKI_F_SETOWN:
    case VKI_F_SETSIG:
    case VKI_F_SETPIPE_SZ:
-      PRINT("sys_fcntl[ARG3=='arg'] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRINT("sys_fcntl[ARG3=='arg'] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd, unsigned long, arg);
       break;
@@ -5304,14 +5334,14 @@
    case VKI_F_OFD_GETLK:
    case VKI_F_OFD_SETLK:
    case VKI_F_OFD_SETLKW:
-      PRINT("sys_fcntl[ARG3=='lock'] ( %ld, %ld, %#lx )", ARG1,ARG2,ARG3);
+      PRINT("sys_fcntl[ARG3=='lock'] ( %lu, %lu, %#lx )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct flock64 *, lock);
       break;
 
    case VKI_F_SETOWN_EX:
-      PRINT("sys_fcntl[F_SETOWN_EX] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRINT("sys_fcntl[F_SETOWN_EX] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_f_owner_ex *, arg);
@@ -5319,7 +5349,7 @@
       break;
 
    case VKI_F_GETOWN_EX:
-      PRINT("sys_fcntl[F_GETOWN_EX] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRINT("sys_fcntl[F_GETOWN_EX] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_f_owner_ex *, arg);
@@ -5327,7 +5357,7 @@
       break;
 
    default:
-      PRINT("sys_fcntl[UNKNOWN] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRINT("sys_fcntl[UNKNOWN] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
       I_die_here;
       break;
    }
@@ -5377,7 +5407,7 @@
    case VKI_F_GETSIG:
    case VKI_F_SETSIG:
    case VKI_F_GETLEASE:
-      PRINT("sys_fcntl64 ( %ld, %ld )", ARG1,ARG2);
+      PRINT("sys_fcntl64 ( %lu, %lu )", ARG1, ARG2);
       PRE_REG_READ2(long, "fcntl64", unsigned int, fd, unsigned int, cmd);
       break;
 
@@ -5388,7 +5418,7 @@
    case VKI_F_SETFL:
    case VKI_F_SETLEASE:
    case VKI_F_NOTIFY:
-      PRINT("sys_fcntl64[ARG3=='arg'] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRINT("sys_fcntl64[ARG3=='arg'] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl64",
                     unsigned int, fd, unsigned int, cmd, unsigned long, arg);
       break;
@@ -5405,14 +5435,14 @@
    case VKI_F_OFD_GETLK:
    case VKI_F_OFD_SETLK:
    case VKI_F_OFD_SETLKW:
-      PRINT("sys_fcntl64[ARG3=='lock'] ( %ld, %ld, %#lx )", ARG1,ARG2,ARG3);
+      PRINT("sys_fcntl64[ARG3=='lock'] ( %lu, %lu, %#lx )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl64",
                     unsigned int, fd, unsigned int, cmd,
                     struct flock64 *, lock);
       break;
 
    case VKI_F_SETOWN_EX:
-      PRINT("sys_fcntl[F_SETOWN_EX] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRINT("sys_fcntl[F_SETOWN_EX] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_f_owner_ex *, arg);
@@ -5420,7 +5450,7 @@
       break;
 
    case VKI_F_GETOWN_EX:
-      PRINT("sys_fcntl[F_GETOWN_EX] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRINT("sys_fcntl[F_GETOWN_EX] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_f_owner_ex *, arg);
@@ -5520,15 +5550,22 @@
    /* InfiniBand */
    case VKI_IB_USER_MAD_ENABLE_PKEY:
 
+   /* Lustre */
+   case VKI_LL_IOC_GROUP_LOCK:
+   case VKI_LL_IOC_GROUP_UNLOCK:
+
    /* V4L2 */
    case VKI_V4L2_LOG_STATUS:
-      PRINT("sys_ioctl ( %ld, 0x%lx )",ARG1,ARG2);
+
+   /* DVB */
+   case VKI_DMX_STOP:
+      PRINT("sys_ioctl ( %lu, 0x%lx )", ARG1, ARG2);
       PRE_REG_READ2(long, "ioctl",
                     unsigned int, fd, unsigned int, request);
       return;
 
    default:
-      PRINT("sys_ioctl ( %ld, 0x%lx, 0x%lx )",ARG1,ARG2,ARG3);
+      PRINT("sys_ioctl ( %lu, 0x%lx, 0x%lx )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "ioctl",
                     unsigned int, fd, unsigned int, request, unsigned long, arg);
       break;
@@ -5955,8 +5992,8 @@
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFMAP)",
                      (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIFMAP)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->ifr_map,
-                     sizeof(((struct vki_ifreq *)ARG3)->ifr_map) );
+                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_map,
+                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_map) );
       break;
    case VKI_SIOCSHWTSTAMP:       /* Set hardware time stamping   */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSHWTSTAMP)",
@@ -5969,8 +6006,8 @@
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFTXQLEN)",
                      (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIFTXQLEN)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->ifr_qlen,
-                     sizeof(((struct vki_ifreq *)ARG3)->ifr_qlen) );
+                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_qlen,
+                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_qlen) );
       break;
    case VKI_SIOCSIFADDR:         /* set PA address               */
    case VKI_SIOCSIFDSTADDR:      /* set remote PA address        */
@@ -5979,8 +6016,8 @@
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIF*ADDR)",
                      (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIF*ADDR)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->ifr_addr,
-                     sizeof(((struct vki_ifreq *)ARG3)->ifr_addr) );
+                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_addr,
+                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_addr) );
       break;
    case VKI_SIOCSIFMETRIC:       /* set metric                   */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFMETRIC)",
@@ -6000,8 +6037,8 @@
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFHWADDR)",
                      (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIFHWADDR)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->ifr_hwaddr,
-                     sizeof(((struct vki_ifreq *)ARG3)->ifr_hwaddr) );
+                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_hwaddr,
+                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_hwaddr) );
       break;
    case VKI_SIOCSMIIREG:         /* set hardware entry registers */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSMIIREG)",
@@ -6825,11 +6862,10 @@
             PRE_MEM_READ("ioctl(VKI_I2C_SMBUS).i2c_smbus_ioctl_data.command",
                          (Addr)&vkis->command, sizeof(vkis->command));
             /* i2c_smbus_write_quick hides its value in read_write, so
-               this variable can hava a different meaning */
+               this variable can have a different meaning */
             /* to make matters worse i2c_smbus_write_byte stores its
                value in command */
-            if ( ! (((vkis->size == VKI_I2C_SMBUS_QUICK) 
-                     && (vkis->command == VKI_I2C_SMBUS_QUICK)) ||
+            if ( ! ((vkis->size == VKI_I2C_SMBUS_QUICK) ||
                  ((vkis->size == VKI_I2C_SMBUS_BYTE)
                   && (vkis->read_write == VKI_I2C_SMBUS_WRITE))))  {
                     /* the rest uses the byte array to store the data,
@@ -6847,7 +6883,7 @@
                         case VKI_I2C_SMBUS_I2C_BLOCK_BROKEN:
                         case VKI_I2C_SMBUS_BLOCK_PROC_CALL:
                         case VKI_I2C_SMBUS_I2C_BLOCK_DATA:
-                            size = vkis->data->block[0];
+                            size = 1 + vkis->data->block[0];
                             break;
                         default:
                             size = 0;
@@ -7220,6 +7256,21 @@
    case VKI_KVM_RUN:
       break;
 
+   case VKI_KVM_S390_MEM_OP: {
+      struct vki_kvm_s390_mem_op *args =
+         (struct vki_kvm_s390_mem_op *)(ARG3);
+      PRE_MEM_READ("ioctl(KVM_S390_MEM_OP)", ARG3,
+                   sizeof(struct vki_kvm_s390_mem_op));
+      if (args->flags & VKI_KVM_S390_MEMOP_F_CHECK_ONLY)
+         break;
+      if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_READ)
+         PRE_MEM_WRITE("ioctl(KVM_S390_MEM_OP).buf", (Addr)args->buf, args->size);
+      if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_WRITE)
+         PRE_MEM_READ("ioctl(KVM_S390_MEM_OP).buf", (Addr)args->buf, args->size);
+      }
+      break;
+
+
 #ifdef ENABLE_XEN
    case VKI_XEN_IOCTL_PRIVCMD_HYPERCALL: {
       SyscallArgs harrghs;
@@ -8003,7 +8054,7 @@
    }
    case VKI_V4L2_G_ENC_INDEX: {
       struct vki_v4l2_enc_idx *data = (struct vki_v4l2_enc_idx *)ARG3;
-      PRE_MEM_READ("ioctl(VKI_V4L2_G_ENC_INDEX)", (Addr)data, sizeof(*data));
+      PRE_MEM_WRITE("ioctl(VKI_V4L2_G_ENC_INDEX)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENCODER_CMD: {
@@ -8220,6 +8271,7 @@
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_MBUS_CODE).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_MBUS_CODE).pad", data->pad);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_SUBDEV_ENUM_MBUS_CODE).code", data->code);
+      PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_MBUS_CODE).which", data->which);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_MBUS_CODE).reserved", data->reserved);
       break;
    }
@@ -8228,6 +8280,7 @@
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).pad", data->pad);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).code", data->code);
+      PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).which", data->which);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).reserved", data->reserved);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).min_width", data->min_width);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).min_height", data->min_height);
@@ -8242,6 +8295,7 @@
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL).code", data->code);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL).width", data->width);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL).height", data->height);
+      PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL).which", data->which);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL).reserved", data->reserved);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL).interval", data->interval);
       break;
@@ -8299,6 +8353,18 @@
       break;
    }
 
+   /* Serial */
+   case VKI_TIOCGSERIAL: {
+      struct vki_serial_struct *data = (struct vki_serial_struct *)ARG3;
+      PRE_MEM_WRITE("ioctl(VKI_TIOCGSERIAL)", (Addr)data, sizeof(*data));
+      break;
+   }
+   case VKI_TIOCSSERIAL: {
+      struct vki_serial_struct *data = (struct vki_serial_struct *)ARG3;
+      PRE_MEM_READ("ioctl(VKI_TIOCSSERIAL)", (Addr)data, sizeof(*data));
+      break;
+   }
+
    default:
       /* EVIOC* are variable length and return size written on success */
       switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
@@ -8569,8 +8635,8 @@
                       sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_flags) );
       break;
    case VKI_SIOCGIFHWADDR:       /* Get hardware address         */
-      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->ifr_hwaddr,
-                      sizeof(((struct vki_ifreq *)ARG3)->ifr_hwaddr) );
+      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_hwaddr,
+                      sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_hwaddr) );
       break;
    case VKI_SIOCGIFMTU:          /* get MTU size                 */
       POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_mtu,
@@ -8581,8 +8647,8 @@
    case VKI_SIOCGIFBRDADDR:      /* get broadcast PA address     */
    case VKI_SIOCGIFNETMASK:      /* get network PA mask          */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_ifreq *)ARG3)->ifr_addr,
-                sizeof(((struct vki_ifreq *)ARG3)->ifr_addr) );
+                (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_addr,
+                sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_addr) );
       break;
    case VKI_SIOCGIFMETRIC:       /* get metric                   */
       POST_MEM_WRITE(
@@ -8591,14 +8657,14 @@
       break;
    case VKI_SIOCGIFMAP:          /* Get device parameters        */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_ifreq *)ARG3)->ifr_map,
-                sizeof(((struct vki_ifreq *)ARG3)->ifr_map) );
+                (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_map,
+                sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_map) );
       break;
      break;
    case VKI_SIOCGIFTXQLEN:       /* Get the tx queue length      */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_ifreq *)ARG3)->ifr_qlen,
-                sizeof(((struct vki_ifreq *)ARG3)->ifr_qlen) );
+                (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_qlen,
+                sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_qlen) );
       break;
    case VKI_SIOCGIFNAME:         /* get iface name               */
       POST_MEM_WRITE(
@@ -9321,14 +9387,11 @@
             struct vki_i2c_smbus_ioctl_data *vkis
                = (struct vki_i2c_smbus_ioctl_data *) ARG3;
             /* i2c_smbus_write_quick hides its value in read_write, so
-               this variable can hava a different meaning */
-            /* to make matters worse i2c_smbus_write_byte stores its
-               value in command */
+               this variable can have a different meaning */
             if ((vkis->read_write == VKI_I2C_SMBUS_READ)
                 || (vkis->size == VKI_I2C_SMBUS_PROC_CALL)
                 || (vkis->size == VKI_I2C_SMBUS_BLOCK_PROC_CALL)) {
-                if ( ! ((vkis->size == VKI_I2C_SMBUS_QUICK) 
-                        && (vkis->command == VKI_I2C_SMBUS_QUICK))) {
+                if ( ! (vkis->size == VKI_I2C_SMBUS_QUICK)) {
                     UInt size;
                     switch(vkis->size) {
                         case VKI_I2C_SMBUS_BYTE:
@@ -9343,7 +9406,7 @@
                         case VKI_I2C_SMBUS_I2C_BLOCK_BROKEN:
                         case VKI_I2C_SMBUS_BLOCK_PROC_CALL:
                         case VKI_I2C_SMBUS_I2C_BLOCK_DATA:
-                            size = vkis->data->block[0];
+                            size = 1 + vkis->data->block[0];
                             break;
                         default:
                             size = 0;
@@ -9611,6 +9674,16 @@
    case VKI_KVM_KVMCLOCK_CTRL:
       break;
 
+   case VKI_KVM_S390_MEM_OP: {
+      struct vki_kvm_s390_mem_op *args =
+         (struct vki_kvm_s390_mem_op *)(ARG3);
+      if (args->flags & VKI_KVM_S390_MEMOP_F_CHECK_ONLY)
+         break;
+      if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_READ)
+         POST_MEM_WRITE((Addr)args->buf, args->size);
+      }
+      break;
+
 #ifdef ENABLE_XEN
    case VKI_XEN_IOCTL_PRIVCMD_HYPERCALL: {
        SyscallArgs harrghs;
@@ -9699,7 +9772,6 @@
    case VKI_V4L2_S_JPEGCOMP:
    case VKI_V4L2_S_CROP:
    case VKI_V4L2_S_PRIORITY:
-   case VKI_V4L2_G_ENC_INDEX:
    case VKI_V4L2_S_HW_FREQ_SEEK:
    case VKI_V4L2_S_DV_TIMINGS:
    case VKI_V4L2_SUBSCRIBE_EVENT:
@@ -10015,6 +10087,11 @@
       POST_FIELD_WRITE(data->stepwise);
       break;
    }
+   case VKI_V4L2_G_ENC_INDEX: {
+      struct vki_v4l2_enc_idx *data = (struct vki_v4l2_enc_idx *)ARG3;
+      POST_MEM_WRITE((Addr)data, sizeof(*data));
+      break;
+   }
    case VKI_V4L2_ENCODER_CMD: {
       struct vki_v4l2_encoder_cmd *data = (struct vki_v4l2_encoder_cmd *)ARG3;
       POST_FIELD_WRITE(data->flags);
@@ -10170,6 +10247,15 @@
    case VKI_MEDIA_IOC_SETUP_LINK:
       break;
 
+   /* Serial */
+   case VKI_TIOCGSERIAL: {
+      struct vki_serial_struct *data = (struct vki_serial_struct *)ARG3;
+      POST_MEM_WRITE((Addr)data, sizeof(*data));
+      break;
+   }
+   case VKI_TIOCSSERIAL:
+      break;
+
    default:
       /* EVIOC* are variable length and return size written on success */
       switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
@@ -10428,7 +10514,7 @@
 
 PRE(sys_kcmp)
 {
-   PRINT("kcmp ( %ld, %ld, %ld, %lu, %lu )", ARG1, ARG2, ARG3, ARG4, ARG5);
+   PRINT("kcmp ( %ld, %ld, %ld, %lu, %lu )", SARG1, SARG2, SARG3, ARG4, ARG5);
    switch (ARG3) {
       case VKI_KCMP_VM: case VKI_KCMP_FILES: case VKI_KCMP_FS:
       case VKI_KCMP_SIGHAND: case VKI_KCMP_IO: case VKI_KCMP_SYSVSEM:
diff --git a/coregrind/m_syswrap/syswrap-main.c b/coregrind/m_syswrap/syswrap-main.c
index 4d6d9ba..f4d1fdd 100644
--- a/coregrind/m_syswrap/syswrap-main.c
+++ b/coregrind/m_syswrap/syswrap-main.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -89,6 +89,14 @@
    amd64-darwin.  Apparently 0(%esp) is some kind of return address
    (perhaps for syscalls done with "sysenter"?)  I don't think it is
    relevant for syscalls done with "int $0x80/1/2".
+
+   SOLARIS:
+   x86    eax +4   +8   +12  +16  +20  +24  +28  +32  edx:eax, eflags.c
+   amd64  rax rdi  rsi  rdx  r10  r8   r9   +8   +16  rdx:rax, rflags.c
+
+   "+N" denotes "in memory at N(%esp)". Solaris also supports fasttrap
+   syscalls. Fasttraps do not take any parameters (except of the sysno in eax)
+   and never fail (if the sysno is valid).
 */
 
 /* This is the top level of the system-call handler module.  All
@@ -172,6 +180,11 @@
      s390x:  Success(N) ==>  r2 = N
              Fail(N)    ==>  r2 = -N
 
+     Solaris:
+     x86:    Success(N) ==>  edx:eax = N, cc = 0
+             Fail(N)    ==>      eax = N, cc = 1
+     Same applies for fasttraps except they never fail.
+
    * The post wrapper is called if:
 
      - it exists, and
@@ -297,6 +310,18 @@
                                            const vki_sigset_t *syscall_mask,
                                            const vki_sigset_t *restore_mask,
                                            Word sigsetSzB ); /* unused */
+#elif defined(VGO_solaris)
+extern
+UWord ML_(do_syscall_for_client_WRK)( Word syscallno,
+                                      void* guest_state,
+                                      const vki_sigset_t *syscall_mask,
+                                      const vki_sigset_t *restore_mask,
+                                      UChar *cflag);
+UWord ML_(do_syscall_for_client_dret_WRK)( Word syscallno,
+                                           void* guest_state,
+                                           const vki_sigset_t *syscall_mask,
+                                           const vki_sigset_t *restore_mask,
+                                           UChar *cflag);
 #else
 #  error "Unknown OS"
 #endif
@@ -339,13 +364,42 @@
          /*NOTREACHED*/
          break;
    }
+#  elif defined(VGO_solaris)
+   UChar cflag;
+
+   /* Fasttraps or anything else cannot go through this path. */
+   vg_assert(VG_SOLARIS_SYSNO_CLASS(syscallno)
+             == VG_SOLARIS_SYSCALL_CLASS_CLASSIC);
+
+   /* If the syscall is a door_return call then it has to be handled very
+      differently. */
+   if (tst->os_state.in_door_return)
+      err = ML_(do_syscall_for_client_dret_WRK)(
+                syscallno, &tst->arch.vex,
+                syscall_mask, &saved, &cflag
+            );
+   else
+      err = ML_(do_syscall_for_client_WRK)(
+                syscallno, &tst->arch.vex,
+                syscall_mask, &saved, &cflag
+            );
+
+   /* Save the carry flag. */
+#  if defined(VGP_x86_solaris)
+   LibVEX_GuestX86_put_eflag_c(cflag, &tst->arch.vex);
+#  elif defined(VGP_amd64_solaris)
+   LibVEX_GuestAMD64_put_rflag_c(cflag, &tst->arch.vex);
+#  else
+#    error "Unknown platform"
+#  endif
+
 #  else
 #    error "Unknown OS"
 #  endif
    vg_assert2(
       err == 0,
-      "ML_(do_syscall_for_client_WRK): sigprocmask error %d",
-      (Int)(err & 0xFFF)
+      "ML_(do_syscall_for_client_WRK): sigprocmask error %lu",
+      err & 0xFFF
    );
 }
 
@@ -369,10 +423,10 @@
 }
 
 static
-Bool eq_SyscallStatus ( SyscallStatus* s1, SyscallStatus* s2 )
+Bool eq_SyscallStatus ( UInt sysno, SyscallStatus* s1, SyscallStatus* s2 )
 {
    /* was: return s1->what == s2->what && sr_EQ( s1->sres, s2->sres ); */
-   if (s1->what == s2->what && sr_EQ( s1->sres, s2->sres ))
+   if (s1->what == s2->what && sr_EQ( sysno, s1->sres, s2->sres ))
       return True;
 #  if defined(VGO_darwin)
    /* Darwin-specific debugging guff */
@@ -662,6 +716,69 @@
    canonical->arg7  = 0;
    canonical->arg8  = 0;
 
+#elif defined(VGP_x86_solaris)
+   VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla;
+   UWord *stack = (UWord *)gst->guest_ESP;
+   canonical->sysno = gst->guest_EAX;
+   /* stack[0] is a return address. */
+   canonical->arg1  = stack[1];
+   canonical->arg2  = stack[2];
+   canonical->arg3  = stack[3];
+   canonical->arg4  = stack[4];
+   canonical->arg5  = stack[5];
+   canonical->arg6  = stack[6];
+   canonical->arg7  = stack[7];
+   canonical->arg8  = stack[8];
+
+   switch (trc) {
+   case VEX_TRC_JMP_SYS_INT145:
+   case VEX_TRC_JMP_SYS_SYSENTER:
+   case VEX_TRC_JMP_SYS_SYSCALL:
+   /* These three are not actually valid syscall instructions on Solaris.
+      Pretend for now that we handle them as normal syscalls. */
+   case VEX_TRC_JMP_SYS_INT128:
+   case VEX_TRC_JMP_SYS_INT129:
+   case VEX_TRC_JMP_SYS_INT130:
+      /* int $0x91, sysenter, syscall = normal syscall */
+      break;
+   case VEX_TRC_JMP_SYS_INT210:
+      /* int $0xD2 = fasttrap */
+      canonical->sysno
+         = VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(canonical->sysno);
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+
+#elif defined(VGP_amd64_solaris)
+   VexGuestAMD64State* gst = (VexGuestAMD64State*)gst_vanilla;
+   UWord *stack = (UWord *)gst->guest_RSP;
+   canonical->sysno = gst->guest_RAX;
+   /* stack[0] is a return address. */
+   canonical->arg1 = gst->guest_RDI;
+   canonical->arg2 = gst->guest_RSI;
+   canonical->arg3 = gst->guest_RDX;
+   canonical->arg4 = gst->guest_R10;  /* Not RCX with syscall. */
+   canonical->arg5 = gst->guest_R8;
+   canonical->arg6 = gst->guest_R9;
+   canonical->arg7 = stack[1];
+   canonical->arg8 = stack[2];
+
+   switch (trc) {
+   case VEX_TRC_JMP_SYS_SYSCALL:
+      /* syscall = normal syscall */
+      break;
+   case VEX_TRC_JMP_SYS_INT210:
+      /* int $0xD2 = fasttrap */
+      canonical->sysno
+         = VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(canonical->sysno);
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+
 #else
 #  error "getSyscallArgsFromGuestState: unknown arch"
 #endif
@@ -817,6 +934,42 @@
    gst->guest_r4 = canonical->arg5;
    gst->guest_r5 = canonical->arg6;
 
+#elif defined(VGP_x86_solaris)
+   VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla;
+   UWord *stack = (UWord *)gst->guest_ESP;
+
+   /* Fasttraps or anything else cannot go through this way. */
+   vg_assert(VG_SOLARIS_SYSNO_CLASS(canonical->sysno)
+             == VG_SOLARIS_SYSCALL_CLASS_CLASSIC);
+   gst->guest_EAX = canonical->sysno;
+   /* stack[0] is a return address. */
+   stack[1] = canonical->arg1;
+   stack[2] = canonical->arg2;
+   stack[3] = canonical->arg3;
+   stack[4] = canonical->arg4;
+   stack[5] = canonical->arg5;
+   stack[6] = canonical->arg6;
+   stack[7] = canonical->arg7;
+   stack[8] = canonical->arg8;
+
+#elif defined(VGP_amd64_solaris)
+   VexGuestAMD64State* gst = (VexGuestAMD64State*)gst_vanilla;
+   UWord *stack = (UWord *)gst->guest_RSP;
+
+   /* Fasttraps or anything else cannot go through this way. */
+   vg_assert(VG_SOLARIS_SYSNO_CLASS(canonical->sysno)
+             == VG_SOLARIS_SYSCALL_CLASS_CLASSIC);
+   gst->guest_RAX = canonical->sysno;
+   /* stack[0] is a return address. */
+   gst->guest_RDI = canonical->arg1;
+   gst->guest_RSI = canonical->arg2;
+   gst->guest_RDX = canonical->arg3;
+   gst->guest_R10 = canonical->arg4;
+   gst->guest_R8  = canonical->arg5;
+   gst->guest_R9  = canonical->arg6;
+   stack[1] = canonical->arg7;
+   stack[2] = canonical->arg8;
+
 #else
 #  error "putSyscallArgsIntoGuestState: unknown arch"
 #endif
@@ -950,6 +1103,24 @@
    canonical->sres = VG_(mk_SysRes_tilegx_linux)( gst->guest_r0 );
    canonical->what = SsComplete;
 
+#  elif defined(VGP_x86_solaris)
+   VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla;
+   UInt carry = 1 & LibVEX_GuestX86_get_eflags(gst);
+
+   canonical->sres = VG_(mk_SysRes_x86_solaris)(carry ? True : False,
+                                                gst->guest_EAX,
+                                                carry ? 0 : gst->guest_EDX);
+   canonical->what = SsComplete;
+
+#  elif defined(VGP_amd64_solaris)
+   VexGuestAMD64State* gst = (VexGuestAMD64State*)gst_vanilla;
+   UInt carry = 1 & LibVEX_GuestAMD64_get_rflags(gst);
+
+   canonical->sres = VG_(mk_SysRes_amd64_solaris)(carry ? True : False,
+                                                  gst->guest_RAX,
+                                                  carry ? 0 : gst->guest_RDX);
+   canonical->what = SsComplete;
+
 #  else
 #    error "getSyscallStatusFromGuestState: unknown arch"
 #  endif
@@ -1175,6 +1346,60 @@
       gst->guest_r1 = 0;
    }
 
+#  elif defined(VGP_x86_solaris)
+   VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla;
+   SysRes sres = canonical->sres;
+   vg_assert(canonical->what == SsComplete);
+
+   if (sr_isError(sres)) {
+      gst->guest_EAX = sr_Err(sres);
+      VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, OFFSET_x86_EAX,
+               sizeof(UInt));
+      LibVEX_GuestX86_put_eflag_c(1, gst);
+   }
+   else {
+      gst->guest_EAX = sr_Res(sres);
+      VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, OFFSET_x86_EAX,
+               sizeof(UInt));
+      gst->guest_EDX = sr_ResHI(sres);
+      VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, OFFSET_x86_EDX,
+               sizeof(UInt));
+      LibVEX_GuestX86_put_eflag_c(0, gst);
+   }
+   /* Make CC_DEP1 and CC_DEP2 defined.  This is inaccurate because it makes
+      other eflags defined too (see README.solaris). */
+   VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, offsetof(VexGuestX86State,
+            guest_CC_DEP1), sizeof(UInt));
+   VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, offsetof(VexGuestX86State,
+            guest_CC_DEP2), sizeof(UInt));
+
+#  elif defined(VGP_amd64_solaris)
+   VexGuestAMD64State* gst = (VexGuestAMD64State*)gst_vanilla;
+   SysRes sres = canonical->sres;
+   vg_assert(canonical->what == SsComplete);
+
+   if (sr_isError(sres)) {
+      gst->guest_RAX = sr_Err(sres);
+      VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, OFFSET_amd64_RAX,
+               sizeof(ULong));
+      LibVEX_GuestAMD64_put_rflag_c(1, gst);
+   }
+   else {
+      gst->guest_RAX = sr_Res(sres);
+      VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, OFFSET_amd64_RAX,
+               sizeof(ULong));
+      gst->guest_RDX = sr_ResHI(sres);
+      VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, OFFSET_amd64_RDX,
+               sizeof(ULong));
+      LibVEX_GuestAMD64_put_rflag_c(0, gst);
+   }
+   /* Make CC_DEP1 and CC_DEP2 defined.  This is inaccurate because it makes
+      other eflags defined too (see README.solaris). */
+   VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, offsetof(VexGuestAMD64State,
+            guest_CC_DEP1), sizeof(ULong));
+   VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, offsetof(VexGuestAMD64State,
+            guest_CC_DEP2), sizeof(ULong));
+
 #  else
 #    error "putSyscallStatusIntoGuestState: unknown arch"
 #  endif
@@ -1311,6 +1536,7 @@
    layout->o_arg6   = OFFSET_s390x_r7;
    layout->uu_arg7  = -1; /* impossible value */
    layout->uu_arg8  = -1; /* impossible value */
+
 #elif defined(VGP_tilegx_linux)
    layout->o_sysno  = OFFSET_tilegx_r(10);
    layout->o_arg1   = OFFSET_tilegx_r(0);
@@ -1322,6 +1548,29 @@
    layout->uu_arg7  = -1; /* impossible value */
    layout->uu_arg8  = -1; /* impossible value */
 
+#elif defined(VGP_x86_solaris)
+   layout->o_sysno  = OFFSET_x86_EAX;
+   /* Syscall parameters are on the stack. */
+   layout->s_arg1   = sizeof(UWord) * 1;
+   layout->s_arg2   = sizeof(UWord) * 2;
+   layout->s_arg3   = sizeof(UWord) * 3;
+   layout->s_arg4   = sizeof(UWord) * 4;
+   layout->s_arg5   = sizeof(UWord) * 5;
+   layout->s_arg6   = sizeof(UWord) * 6;
+   layout->s_arg7   = sizeof(UWord) * 7;
+   layout->s_arg8   = sizeof(UWord) * 8;
+
+#elif defined(VGP_amd64_solaris)
+   layout->o_sysno  = OFFSET_amd64_RAX;
+   layout->o_arg1   = OFFSET_amd64_RDI;
+   layout->o_arg2   = OFFSET_amd64_RSI;
+   layout->o_arg3   = OFFSET_amd64_RDX;
+   layout->o_arg4   = OFFSET_amd64_R10;
+   layout->o_arg5   = OFFSET_amd64_R8;
+   layout->o_arg6   = OFFSET_amd64_R9;
+   layout->s_arg7   = sizeof(UWord) * 1;
+   layout->s_arg8   = sizeof(UWord) * 2;
+
 #else
 #  error "getSyscallLayout: unknown arch"
 #endif
@@ -1353,6 +1602,10 @@
    VG_(dmsg)("it at http://valgrind.org/support/bug_reports.html.\n");
 
    SET_STATUS_Failure(VKI_ENOSYS);
+
+#  if defined(VGO_solaris)
+   VG_(exit)(1);
+#  endif
 }
 
 static SyscallTableEntry bad_sys =
@@ -1389,6 +1642,9 @@
       break;
    }
 
+#  elif defined(VGO_solaris)
+   sys = ML_(get_solaris_syscall_entry)(syscallno);
+
 #  else
 #    error Unknown OS
 #  endif
@@ -1626,7 +1882,7 @@
         sci->flags        is zero.
    */
 
-   PRINT("SYSCALL[%d,%d](%s) ",
+   PRINT("SYSCALL[%d,%u](%s) ",
       VG_(getpid)(), tid, VG_SYSNUM_STRING(sysno));
 
    /* Do any pre-syscall actions */
@@ -1731,6 +1987,10 @@
             go through anyway, with SfToBlock set, hence we end up here. */
          putSyscallArgsIntoGuestState( &sci->args, &tst->arch.vex );
 
+         /* SfNoWriteResult flag is invalid for blocking signals because
+            do_syscall_for_client() directly modifies the guest state. */
+         vg_assert(!(sci->flags & SfNoWriteResult));
+
          /* Drop the bigLock */
          VG_(release_BigLock)(tid, VgTs_WaitSys, "VG_(client_syscall)[async]");
          /* Urr.  We're now in a race against other threads trying to
@@ -1767,7 +2027,7 @@
 
          /* Be decorative, if required. */
          if (VG_(clo_trace_syscalls)) {
-            PRINT("SYSCALL[%d,%d](%s) ... [async] --> %s",
+            PRINT("SYSCALL[%d,%u](%s) ... [async] --> %s",
                   VG_(getpid)(), tid, VG_SYSNUM_STRING(sysno),
                   VG_(sr_as_string)(sci->status.sres));
          }
@@ -1858,9 +2118,15 @@
       previously written the result into the guest state. */
    vg_assert(sci->status.what == SsComplete);
 
+   /* Get the system call number.  Because the pre-handler isn't
+      allowed to mess with it, it should be the same for both the
+      original and potentially-modified args. */
+   vg_assert(sci->args.sysno == sci->orig_args.sysno);
+   sysno = sci->args.sysno;
+
    getSyscallStatusFromGuestState( &test_status, &tst->arch.vex );
    if (!(sci->flags & SfNoWriteResult))
-      vg_assert(eq_SyscallStatus( &sci->status, &test_status ));
+      vg_assert(eq_SyscallStatus( sysno, &sci->status, &test_status ));
    /* Failure of the above assertion on Darwin can indicate a problem
       in the syscall wrappers that pre-fail or pre-succeed the
       syscall, by calling SET_STATUS_Success or SET_STATUS_Failure,
@@ -1872,18 +2138,12 @@
       comment is completely irrelevant. */
    /* Ok, looks sane */
 
-   /* Get the system call number.  Because the pre-handler isn't
-      allowed to mess with it, it should be the same for both the
-      original and potentially-modified args. */
-   vg_assert(sci->args.sysno == sci->orig_args.sysno);
-   sysno = sci->args.sysno;
-   ent = get_syscall_entry(sysno);
-
    /* pre: status == Complete (asserted above) */
    /* Consider either success or failure.  Now run the post handler if:
       - it exists, and
       - Success or (Failure and PostOnFail is set)
    */
+   ent = get_syscall_entry(sysno);
    if (ent->after
        && ((!sr_isError(sci->status.sres))
            || (sr_isError(sci->status.sres)
@@ -1985,6 +2245,15 @@
   extern const Addr ML_(blksys_complete_UNIX);
   extern const Addr ML_(blksys_committed_UNIX);
   extern const Addr ML_(blksys_finished_UNIX);
+#elif defined(VGO_solaris)
+  extern const Addr ML_(blksys_setup);
+  extern const Addr ML_(blksys_complete);
+  extern const Addr ML_(blksys_committed);
+  extern const Addr ML_(blksys_finished);
+  extern const Addr ML_(blksys_setup_DRET);
+  extern const Addr ML_(blksys_complete_DRET);
+  extern const Addr ML_(blksys_committed_DRET);
+  extern const Addr ML_(blksys_finished_DRET);
 #else
 # error "Unknown OS"
 #endif
@@ -2046,7 +2315,7 @@
       if (p[0] != 0x44 || p[1] != 0x0 || p[2] != 0x0 || p[3] != 0x02)
          VG_(message)(Vg_DebugMsg,
                       "?! restarting over syscall at %#llx %02x %02x %02x %02x\n",
-                      arch->vex.guest_CIA + 0ULL, p[0], p[1], p[2], p[3]);
+                      (ULong)arch->vex.guest_CIA, p[0], p[1], p[2], p[3]);
 
       vg_assert(p[0] == 0x44 && p[1] == 0x0 && p[2] == 0x0 && p[3] == 0x2);
    }
@@ -2065,7 +2334,7 @@
       if (p[3] != 0x44 || p[2] != 0x0 || p[1] != 0x0 || p[0] != 0x02)
          VG_(message)(Vg_DebugMsg,
                       "?! restarting over syscall at %#llx %02x %02x %02x %02x\n",
-                      arch->vex.guest_CIA + 0ULL, p[3], p[2], p[1], p[0]);
+                      arch->vex.guest_CIA, p[3], p[2], p[1], p[0]);
 
       vg_assert(p[3] == 0x44 && p[2] == 0x0 && p[1] == 0x0 && p[0] == 0x2);
    }
@@ -2081,8 +2350,8 @@
       if (!valid) {
          VG_(message)(Vg_DebugMsg,
                       "?! restarting over (Thumb) syscall that is not syscall "
-                      "at %#llx %02x %02x\n",
-                      arch->vex.guest_R15T - 1ULL, p[0], p[1]);
+                      "at %#x %02x %02x\n",
+                      arch->vex.guest_R15T - 1, p[0], p[1]);
       }
       vg_assert(valid);
       // FIXME: NOTE, this really isn't right.  We need to back up
@@ -2103,8 +2372,8 @@
       if (!valid) {
          VG_(message)(Vg_DebugMsg,
                       "?! restarting over (ARM) syscall that is not syscall "
-                      "at %#llx %02x %02x %02x %02x\n",
-                      arch->vex.guest_R15T + 0ULL, p[0], p[1], p[2], p[3]);
+                      "at %#x %02x %02x %02x %02x\n",
+                      arch->vex.guest_R15T, p[0], p[1], p[2], p[3]);
       }
       vg_assert(valid);
    }
@@ -2124,7 +2393,7 @@
          VG_(message)(
             Vg_DebugMsg,
             "?! restarting over syscall at %#llx %02x %02x %02x %02x\n",
-            arch->vex.guest_PC + 0ULL, p[0], p[1], p[2], p[3]
+            arch->vex.guest_PC, p[0], p[1], p[2], p[3]
           );
 
       vg_assert(p[0] == 0x01 && p[1] == 0x00 && p[2] == 0x00 && p[3] == 0xD4);
@@ -2136,10 +2405,10 @@
    /* Make sure our caller is actually sane, and we're really backing
       back over a syscall.
 
-      int $0x80 == CD 80
-      int $0x81 == CD 81
-      int $0x82 == CD 82
-      sysenter  == 0F 34
+      int $0x80 == CD 80  // Used to communicate with BSD syscalls
+      int $0x81 == CD 81  // Used to communicate with Mach traps
+      int $0x82 == CD 82  // Used to communicate with "thread" ?
+      sysenter  == 0F 34  // Used to communicate with Unix syscalls
    */
    {
        UChar *p = (UChar *)arch->vex.guest_EIP;
@@ -2155,8 +2424,23 @@
    }
    
 #elif defined(VGP_amd64_darwin)
-   // DDD: #warning GrP fixme amd64 restart unimplemented
-   vg_assert(0);
+   arch->vex.guest_RIP = arch->vex.guest_IP_AT_SYSCALL;
+    
+   /* Make sure our caller is actually sane, and we're really backing
+      back over a syscall.
+
+      syscall   == 0F 05
+   */
+   {
+       UChar *p = (UChar *)arch->vex.guest_RIP;
+        
+       Bool  ok = (p[0] == 0x0F && p[1] == 0x05);
+       if (!ok)
+           VG_(message)(Vg_DebugMsg,
+                        "?! restarting over syscall at %#llx %02x %02x\n",
+                        arch->vex.guest_RIP, p[0], p[1]);
+       vg_assert(ok);
+   }
    
 #elif defined(VGP_s390x_linux)
    arch->vex.guest_IA -= 2;             // sizeof(syscall)
@@ -2223,6 +2507,57 @@
       vg_assert(p[0] == 0x286b180051485000ULL);
    }
 
+#elif defined(VGP_x86_solaris)
+   arch->vex.guest_EIP -= 2;   // sizeof(int $0x91) or sizeof(syscall)
+
+   /* Make sure our caller is actually sane, and we're really backing
+      back over a syscall.
+
+      int $0x91 == CD 91
+      syscall   == 0F 05
+      sysenter  == 0F 34
+
+      Handle also other syscall instructions because we also handle them in
+      the scheduler.
+      int $0x80 == CD 80
+      int $0x81 == CD 81
+      int $0x82 == CD 82
+   */
+   {
+      UChar *p = (UChar *)arch->vex.guest_EIP;
+
+      Bool  ok = (p[0] == 0xCD && p[1] == 0x91)
+                  || (p[0] == 0x0F && p[1] == 0x05)
+                  || (p[0] == 0x0F && p[1] == 0x34)
+                  || (p[0] == 0xCD && p[1] == 0x80)
+                  || (p[0] == 0xCD && p[1] == 0x81)
+                  || (p[0] == 0xCD && p[1] == 0x82);
+      if (!ok)
+         VG_(message)(Vg_DebugMsg,
+                      "?! restarting over syscall at %#x %02x %02x\n",
+                      arch->vex.guest_EIP, p[0], p[1]);
+      vg_assert(ok);
+   }
+
+#elif defined(VGP_amd64_solaris)
+   arch->vex.guest_RIP -= 2;   // sizeof(syscall)
+
+   /* Make sure our caller is actually sane, and we're really backing
+      back over a syscall.
+
+      syscall   == 0F 05
+   */
+   {
+      UChar *p = (UChar *)arch->vex.guest_RIP;
+
+      Bool  ok = (p[0] == 0x0F && p[1] == 0x05);
+      if (!ok)
+         VG_(message)(Vg_DebugMsg,
+                      "?! restarting over syscall at %#llx %02x %02x\n",
+                      arch->vex.guest_RIP, p[0], p[1]);
+      vg_assert(ok);
+   }
+
 #else
 #  error "ML_(fixup_guest_state_to_restart_syscall): unknown plat"
 #endif
@@ -2263,7 +2598,8 @@
 VG_(fixup_guest_state_after_syscall_interrupted)( ThreadId tid, 
                                                   Addr     ip, 
                                                   SysRes   sres,
-                                                  Bool     restart)
+                                                  Bool     restart,
+                                                  struct vki_ucontext *uc)
 {
    /* Note that we don't know the syscall number here, since (1) in
       general there's no reliable way to get hold of it short of
@@ -2288,6 +2624,24 @@
         in_complete_to_committed, // [3,4) in the .S files
         in_committed_to_finished; // [4,5) in the .S files
 
+   if (VG_(clo_trace_signals))
+      VG_(message)( Vg_DebugMsg,
+                    "interrupted_syscall: tid=%u, ip=%#lx, "
+                    "restart=%s, sres.isErr=%s, sres.val=%lu\n",
+                    tid,
+                    ip,
+                    restart ? "True" : "False",
+                    sr_isError(sres) ? "True" : "False",
+                    sr_isError(sres) ? sr_Err(sres) : sr_Res(sres));
+
+   vg_assert(VG_(is_valid_tid)(tid));
+   vg_assert(tid >= 1 && tid < VG_N_THREADS);
+   vg_assert(VG_(is_running_thread)(tid));
+
+   tst     = VG_(get_ThreadState)(tid);
+   th_regs = &tst->arch;
+   sci     = & syscallInfo[tid];
+
 #  if defined(VGO_linux)
    outside_range
       = ip < ML_(blksys_setup) || ip >= ML_(blksys_finished);
@@ -2321,28 +2675,36 @@
       || (ip >= ML_(blksys_committed_MDEP) && ip < ML_(blksys_finished_MDEP))
       || (ip >= ML_(blksys_committed_UNIX) && ip < ML_(blksys_finished_UNIX));
    /* Wasn't that just So Much Fun?  Does your head hurt yet?  Mine does. */
+#  elif defined(VGO_solaris)
+   /* The solaris port is never outside the range. */
+   outside_range = False;
+   /* The Solaris kernel never restarts syscalls directly! */
+   at_restart = False;
+   if (tst->os_state.in_door_return) {
+      vg_assert(ip >= ML_(blksys_setup_DRET)
+                && ip < ML_(blksys_finished_DRET));
+
+      in_setup_to_restart
+         = ip >= ML_(blksys_setup_DRET) && ip < ML_(blksys_complete_DRET);
+      in_complete_to_committed
+         = ip >= ML_(blksys_complete_DRET) && ip < ML_(blksys_committed_DRET);
+      in_committed_to_finished
+         = ip >= ML_(blksys_committed_DRET) && ip < ML_(blksys_finished_DRET);
+   }
+   else {
+      vg_assert(ip >= ML_(blksys_setup) && ip < ML_(blksys_finished));
+
+      in_setup_to_restart
+         = ip >= ML_(blksys_setup) && ip < ML_(blksys_complete);
+      in_complete_to_committed
+         = ip >= ML_(blksys_complete) && ip < ML_(blksys_committed);
+      in_committed_to_finished
+         = ip >= ML_(blksys_committed) && ip < ML_(blksys_finished);
+   }
 #  else
 #    error "Unknown OS"
 #  endif
 
-   if (VG_(clo_trace_signals))
-      VG_(message)( Vg_DebugMsg,
-                    "interrupted_syscall: tid=%d, ip=0x%llx, "
-                    "restart=%s, sres.isErr=%s, sres.val=%lld\n", 
-                    (Int)tid,
-                    (ULong)ip, 
-                    restart ? "True" : "False", 
-                    sr_isError(sres) ? "True" : "False",
-                    (Long)(sr_isError(sres) ? sr_Err(sres) : sr_Res(sres)) );
-
-   vg_assert(VG_(is_valid_tid)(tid));
-   vg_assert(tid >= 1 && tid < VG_N_THREADS);
-   vg_assert(VG_(is_running_thread)(tid));
-
-   tst     = VG_(get_ThreadState)(tid);
-   th_regs = &tst->arch;
-   sci     = & syscallInfo[tid];
-
    /* Figure out what the state of the syscall was by examining the
       (real) IP at the time of the signal, and act accordingly. */
    if (outside_range) {
@@ -2372,6 +2734,11 @@
 
    else 
    if (at_restart) {
+#     if defined(VGO_solaris)
+      /* We should never hit this branch on Solaris, see the comment above. */
+      vg_assert(0);
+#     endif
+
       /* We're either about to run the syscall, or it was interrupted
          and the kernel restarted it.  Restart if asked, otherwise
          EINTR it. */
@@ -2401,8 +2768,20 @@
          VG_(message)( Vg_DebugMsg,
                        "  completed, but uncommitted: committing\n");
       canonical = convert_SysRes_to_SyscallStatus( sres );
-      if (!(sci->flags & SfNoWriteResult))
-         putSyscallStatusIntoGuestState( tid, &canonical, &th_regs->vex );
+      vg_assert(!(sci->flags & SfNoWriteResult));
+      putSyscallStatusIntoGuestState( tid, &canonical, &th_regs->vex );
+#     if defined(VGO_solaris)
+      if (tst->os_state.in_door_return) {
+#        if defined(VGP_x86_solaris)
+         /* Registers %esp and %ebp were also modified by the syscall. */
+         tst->arch.vex.guest_ESP = uc->uc_mcontext.gregs[VKI_UESP];
+         tst->arch.vex.guest_EBP = uc->uc_mcontext.gregs[VKI_EBP];
+#        elif defined(VGP_amd64_solaris)
+         tst->arch.vex.guest_RSP = uc->uc_mcontext.gregs[VKI_REG_RSP];
+         tst->arch.vex.guest_RBP = uc->uc_mcontext.gregs[VKI_REG_RBP];
+#        endif
+      }
+#     endif
       sci->status = canonical;
       VG_(post_syscall)(tid);
    } 
@@ -2415,6 +2794,13 @@
       if (VG_(clo_trace_signals))
          VG_(message)( Vg_DebugMsg,
                        "  completed and committed: nothing to do\n");
+#     if defined(VGP_x86_solaris)
+      /* The %eax and %edx values are committed but the carry flag is still
+         uncommitted.  Save it now. */
+      LibVEX_GuestX86_put_eflag_c(sr_isError(sres), &th_regs->vex);
+#     elif defined(VGP_amd64_solaris)
+      LibVEX_GuestAMD64_put_rflag_c(sr_isError(sres), &th_regs->vex);
+#     endif
       getSyscallStatusFromGuestState( &sci->status, &th_regs->vex );
       vg_assert(sci->status.what == SsComplete);
       VG_(post_syscall)(tid);
@@ -2431,6 +2817,21 @@
 }
 
 
+#if defined(VGO_solaris)
+/* Returns True if ip is inside a fixable syscall code in syscall-*-*.S.  This
+   function can be called by a 'non-running' thread! */
+Bool VG_(is_ip_in_blocking_syscall)(ThreadId tid, Addr ip)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+
+   if (tst->os_state.in_door_return)
+      return ip >= ML_(blksys_setup_DRET) && ip < ML_(blksys_finished_DRET);
+   else
+      return ip >= ML_(blksys_setup) && ip < ML_(blksys_finished);
+}
+#endif
+
+
 #if defined(VGO_darwin)
 // Clean up after workq_ops(WQOPS_THREAD_RETURN) jumped to wqthread_hijack. 
 // This is similar to VG_(fixup_guest_state_after_syscall_interrupted).
@@ -2442,7 +2843,7 @@
 
    VG_(acquire_BigLock)(tid, "wqthread_continue_NORETURN");
 
-   PRINT("SYSCALL[%d,%d](%s) workq_ops() starting new workqueue item\n", 
+   PRINT("SYSCALL[%d,%u](%s) workq_ops() starting new workqueue item\n", 
          VG_(getpid)(), tid, VG_SYSNUM_STRING(__NR_workq_ops));
 
    vg_assert(VG_(is_valid_tid)(tid));
diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c
index 7a71576..7a4a857 100644
--- a/coregrind/m_syswrap/syswrap-mips32-linux.c
+++ b/coregrind/m_syswrap/syswrap-mips32-linux.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
@@ -227,7 +227,7 @@
                                  UWord arg4, UWord arg5, Off64T arg6);
 /* 
    When a client clones, we need to keep track of the new thread.  This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
    2. initialize the thread's new VCPU state
    3. create the thread using the same args as the client requested,
    but using the scheduler entrypoint for IP, and a separate stack
@@ -533,8 +533,8 @@
      units rather than bytes, so that it can be used for files bigger than
      2^32 bytes. */
   SysRes r;
-  PRINT("sys_mmap2 ( %#lx, %llu, %ld, %ld, %ld, %ld )", ARG1, (ULong) ARG2,
-                                                        ARG3, ARG4, ARG5, ARG6);
+  PRINT("sys_mmap2 ( %#lx, %lu, %lu, %lu, %lu, %lu )",
+        ARG1, ARG2, SARG3, SARG4, SARG5, SARG6);
   PRE_REG_READ6(long, "mmap2", unsigned long, start, unsigned long, length,
                 unsigned long, prot, unsigned long, flags,
                 unsigned long, fd, unsigned long, offset);
@@ -546,8 +546,8 @@
 PRE(sys_mmap) 
 {
   SysRes r;
-  PRINT("sys_mmap ( %#lx, %llu, %lu, %lu, %lu, %ld )", ARG1, (ULong) ARG2,
-                                                       ARG3, ARG4, ARG5, ARG6);
+  PRINT("sys_mmap ( %#lx, %lu, %ld, %ld, %ld, %lu )",
+        ARG1, ARG2, SARG3, SARG4, SARG5, ARG6);
   PRE_REG_READ6(long, "mmap", unsigned long, start, vki_size_t, length,
                 int, prot, int, flags, int, fd, unsigned long, offset);
   r = mips_PRE_sys_mmap(tid, ARG1, ARG2, ARG3, ARG4, ARG5, (Off64T) ARG6);
@@ -561,7 +561,7 @@
  
 PRE (sys_lstat64) 
 {
-  PRINT ("sys_lstat64 ( %#lx(%s), %#lx )", ARG1, (char *) ARG1, ARG2);
+  PRINT ("sys_lstat64 ( %#lx(%s), %#lx )", ARG1, (HChar *) ARG1, ARG2);
   PRE_REG_READ2 (long, "lstat64", char *, file_name, struct stat64 *, buf);
   PRE_MEM_RASCIIZ ("lstat64(file_name)", ARG1);
   PRE_MEM_WRITE ("lstat64(buf)", ARG2, sizeof (struct vki_stat64));
@@ -578,7 +578,7 @@
 
 PRE (sys_stat64) 
 {
-  PRINT ("sys_stat64 ( %#lx(%s), %#lx )", ARG1, (char *) ARG1, ARG2);
+  PRINT ("sys_stat64 ( %#lx(%s), %#lx )", ARG1, (HChar *) ARG1, ARG2);
   PRE_REG_READ2 (long, "stat64", char *, file_name, struct stat64 *, buf);
   PRE_MEM_RASCIIZ ("stat64(file_name)", ARG1);
   PRE_MEM_WRITE ("stat64(buf)", ARG2, sizeof (struct vki_stat64));
@@ -591,10 +591,12 @@
 
 PRE (sys_fstatat64)
 {
-  PRINT ("sys_fstatat64 ( %ld, %#lx(%s), %#lx )", ARG1, ARG2, (char *) ARG2,
-                                                  ARG3);
-  PRE_REG_READ3 (long, "fstatat64", int, dfd, char *, file_name,
-                 struct stat64 *, buf);
+  // ARG4 =  int flags;  Flags are or'ed together, therefore writing them
+  // as a hex constant is more meaningful.
+  PRINT("sys_fstatat64 ( %ld, %#lx(%s), %#lx, %#lx )",
+        SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
+  PRE_REG_READ4(long, "fstatat64",
+                 int, dfd, char *, file_name, struct stat64 *, buf, int, flags);
   PRE_MEM_RASCIIZ ("fstatat64(file_name)", ARG2);
   PRE_MEM_WRITE ("fstatat64(buf)", ARG3, sizeof (struct vki_stat64));
 }
@@ -606,7 +608,7 @@
 
 PRE (sys_fstat64)
 {
-  PRINT ("sys_fstat64 ( %ld, %#lx )", ARG1, ARG2);
+  PRINT ("sys_fstat64 ( %lu, %#lx )", SARG1, ARG2);
   PRE_REG_READ2 (long, "fstat64", unsigned long, fd, struct stat64 *, buf);
   PRE_MEM_WRITE ("fstat64(buf)", ARG2, sizeof (struct vki_stat64));
 }
@@ -747,7 +749,7 @@
 /* Very much MIPS specific */
 PRE (sys_cacheflush)
 {
-  PRINT ("cacheflush (%lx, %lx, %lx)", ARG1, ARG2, ARG3);
+  PRINT ("cacheflush (%lx, %ld, %ld)", ARG1, SARG2, SARG3);
   PRE_REG_READ3(long, "cacheflush", unsigned long, addr,
                 int, nbytes, int, cache);
   VG_ (discard_translations) ((Addr)ARG1, (ULong) ARG2,
diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c
index 3a5e979..12d147d 100644
--- a/coregrind/m_syswrap/syswrap-mips64-linux.c
+++ b/coregrind/m_syswrap/syswrap-mips64-linux.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
@@ -185,7 +185,7 @@
 static SysRes sys_set_tls ( ThreadId tid, Addr tlsptr);
 
 /* When a client clones, we need to keep track of the new thread. This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
 
    2. initialize the thread's new VCPU state
 
@@ -320,15 +320,15 @@
 
 PRE(sys_tee)
 {
-   PRINT("sys_tee ( %ld, %ld, %ld, %ld )", ARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_tee ( %ld, %ld, %lu, %#lx )", SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "sys_tee", int, fdin, int, fdout, vki_size_t, len,
                  int, flags);
 }
 
 PRE(sys_splice)
 {
-   PRINT("sys_splice ( %ld, %ld, %ld, %ld, %ld, %ld )", ARG1, ARG2, ARG3,
-                                                        ARG4, ARG5, ARG6);
+   PRINT("sys_splice ( %ld, %#lx, %ld, %#lx, %lu, %#lx )",
+         SARG1, ARG2, SARG3, ARG4, ARG5, ARG6);
 
    PRE_REG_READ6(long, "sys_splice", int, fdin, vki_loff_t, sizein, int,
                  fdout, vki_loff_t, sizeout, vki_size_t, len, int, flags);
@@ -336,34 +336,34 @@
 
 PRE(sys_vmsplice)
 {
-   PRINT("sys_vmsplice ( %ld, %ld, %ld, %ld )", ARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_vmsplice ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "sys_vmsplice", int, fdin, struct vki_iovec *, v,
                  vki_size_t, len, int, flags);
 }
 
 PRE(sys_unshare)
 {
-   PRINT("sys_unshare ( %ld )", ARG1);
-   PRE_REG_READ1(long, "sys_unshare", int, flags);
+   PRINT("sys_unshare ( %lu )", ARG1);
+   PRE_REG_READ1(long, "sys_unshare", unsigned long, flags);
 }
 
 PRE(sys_sched_rr_get_interval)
 {
-   PRINT("sys_sched_rr_get_interval ( %ld, %#lx)", ARG1, ARG2);
-   PRE_REG_READ2(long, "sched_rr_get_interval", int, flags,
+   PRINT("sys_sched_rr_get_interval ( %ld, %#lx)", SARG1, ARG2);
+   PRE_REG_READ2(long, "sched_rr_get_interval", vki_pid_t, pid,
                  struct timespec *, timer);
    *flags |= SfMayBlock;
 }
 
 PRE(sys_ustat)
 {
-   PRINT("sys_ustat ( %ld, %#lx)", ARG1, ARG2);
+   PRINT("sys_ustat ( %#lx, %#lx)", ARG1, ARG2);
    PRE_REG_READ2(long, "ustat", int, flags, const void *, path);
 }
 
 PRE(sys_swapon)
 {
-   PRINT("sys_swapon ( %#lx, %ld )", ARG1, ARG2);
+   PRINT("sys_swapon ( %#lx, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(long, "swapon", const void *, path, int, flags);
 }
 
@@ -375,7 +375,7 @@
 
 PRE(sys_sysfs)
 {
-   PRINT("sys_sysfs ( %ld, %ld, %#lx )", ARG1, ARG2, ARG3);
+   PRINT("sys_sysfs ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sysfs", int, flags, int, desc, const void *, path);
 }
 
@@ -384,7 +384,7 @@
 {
    PRINT("cacheflush (%lx, %lx, %lx)", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "cacheflush", unsigned long, addr,
-                 int, nbytes, int, cache);
+                 unsigned long, nbytes, unsigned int, cache);
    VG_ (discard_translations) ((Addr)ARG1, (ULong) ARG2,
                                "PRE(sys_cacheflush)");
    SET_STATUS_Success(0);
@@ -392,28 +392,33 @@
 
 PRE(sys_reboot)
 {
-   PRINT("sys_reboot ( %ld )", ARG1);
-   PRE_REG_READ1(int, "reboot", int, flags);
+   PRINT("sys_reboot ( %ld, %ld, %lu, %#lx )", SARG1, ARG2, ARG3, ARG4);
+   // An approximation. ARG4 is only read conditionally by the kernel
+   PRE_REG_READ4(int, "reboot",
+                 int, magic1, int, magic2, unsigned int, cmd,
+                 void *, arg);
+   
    *flags |= SfMayBlock;
 }
 
 PRE(sys_setdomainname)
 {
-   PRINT ("sys_setdomainname ( %#lx, %ld )", ARG1, ARG2);
+   PRINT ("sys_setdomainname ( %#lx, %ld )", ARG1, SARG2);
    PRE_REG_READ2 (long, "setdomainname", const void *, name, int, len);
 }
 
 PRE(sys_sethostname)
 {
-   PRINT ("sys_sethostname ( %ld, %ld )", ARG1, ARG2);
+   PRINT ("sys_sethostname ( %#lx, %ld )", ARG1, SARG2);
    PRE_REG_READ2 (long, "sethostname", const void *, name, int, len);
 }
 
 PRE(sys_ptrace)
 {
-   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", ARG1, ARG2, ARG3, ARG4);
-   PRE_REG_READ4(int, "ptrace", long, request, long, pid, long, addr,
-                 long, data);
+   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4);
+   PRE_REG_READ4(int, "ptrace",
+                 long, request, long, pid, unsigned long, addr,
+                 unsigned long, data);
    switch (ARG1) {
       case VKI_PTRACE_PEEKTEXT:
       case VKI_PTRACE_PEEKDATA:
@@ -462,8 +467,8 @@
 PRE (sys_mmap)
 {
    SysRes r;
-   PRINT("sys_mmap ( %#lx, %llu, %lu, %lu, %lu, %ld )", ARG1, (ULong)ARG2,
-                                                        ARG3, ARG4, ARG5, ARG6);
+   PRINT("sys_mmap ( %#lx, %lu, %ld, %ld, %ld, %lu )",
+         ARG1, ARG2, SARG3, SARG4, SARG5, ARG6);
    PRE_REG_READ6(long, "mmap", unsigned long, start, vki_size_t, length,
                  int, prot, int, flags, int, fd, unsigned long, offset);
    r = ML_(generic_PRE_sys_mmap)(tid, ARG1, ARG2, ARG3, ARG4, ARG5,
diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c
index 9c9937b..9ceaa15 100644
--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c
+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c
@@ -7,8 +7,8 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote <njn@valgrind.org>
-   Copyright (C) 2005-2013 Cerion Armour-Brown <cerion@open-works.co.uk>
+   Copyright (C) 2005-2015 Nicholas Nethercote <njn@valgrind.org>
+   Copyright (C) 2005-2015 Cerion Armour-Brown <cerion@open-works.co.uk>
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -221,7 +221,7 @@
 
 /* 
    When a client clones, we need to keep track of the new thread.  This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
 
    2. initialize the thread's new VCPU state
 
@@ -404,8 +404,8 @@
 {
    SysRes r;
 
-   PRINT("sys_mmap ( %#lx, %llu, %ld, %ld, %ld, %ld )",
-         ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
+   PRINT("sys_mmap ( %#lx, %lu, %lu, %lu, %lu, %lu )",
+         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
    PRE_REG_READ6(long, "mmap",
                  unsigned long, start, unsigned long, length,
                  unsigned long, prot,  unsigned long, flags,
@@ -423,8 +423,8 @@
    // Exactly like old_mmap() except:
    //  - the file offset is specified in 4K units rather than bytes,
    //    so that it can be used for files bigger than 2^32 bytes.
-   PRINT("sys_mmap2 ( %#lx, %llu, %ld, %ld, %ld, %ld )",
-         ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
+   PRINT("sys_mmap2 ( %#lx, %lu, %lu, %lu, %lu, %lu )",
+         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
    PRE_REG_READ6(long, "mmap2",
                  unsigned long, start, unsigned long, length,
                  unsigned long, prot,  unsigned long, flags,
@@ -454,7 +454,7 @@
 
 PRE(sys_lstat64)
 {
-   PRINT("sys_lstat64 ( %#lx(%s), %#lx )",ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_lstat64 ( %#lx(%s), %#lx )", ARG1, (HChar*)ARG1, ARG2);
    PRE_REG_READ2(long, "lstat64", char *, file_name, struct stat64 *, buf);
    PRE_MEM_RASCIIZ( "lstat64(file_name)", ARG1 );
    PRE_MEM_WRITE( "lstat64(buf)", ARG2, sizeof(struct vki_stat64) );
@@ -470,7 +470,8 @@
 
 PRE(sys_fstatat64)
 {
-  PRINT("sys_fstatat64 ( %ld, %#lx(%s), %#lx )",ARG1,ARG2,(char*)ARG2,ARG3);
+   PRINT("sys_fstatat64 ( %ld, %#lx(%s), %#lx )", SARG1, ARG2, (HChar*)ARG2,
+         ARG3);
    PRE_REG_READ3(long, "fstatat64",
                  int, dfd, char *, file_name, struct stat64 *, buf);
    PRE_MEM_RASCIIZ( "fstatat64(file_name)", ARG2 );
@@ -484,7 +485,7 @@
 
 PRE(sys_fstat64)
 {
-  PRINT("sys_fstat64 ( %ld, %#lx )",ARG1,ARG2);
+  PRINT("sys_fstat64 ( %lu, %#lx )", ARG1, ARG2);
   PRE_REG_READ2(long, "fstat64", unsigned long, fd, struct stat64 *, buf);
   PRE_MEM_WRITE( "fstat64(buf)", ARG2, sizeof(struct vki_stat64) );
 }
@@ -808,7 +809,7 @@
       that takes a pointer to the signal mask so supports more signals.
     */
    *flags |= SfMayBlock;
-   PRINT("sys_sigsuspend ( %ld )", ARG1 );
+   PRINT("sys_sigsuspend ( %lu )", ARG1 );
    PRE_REG_READ1(int, "sigsuspend", vki_old_sigset_t, mask);
 }
 
diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c
index e2432fd..15b8979 100644
--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c
+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c
@@ -7,8 +7,8 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote <njn@valgrind.org>
-   Copyright (C) 2005-2013 Cerion Armour-Brown <cerion@open-works.co.uk>
+   Copyright (C) 2005-2015 Nicholas Nethercote <njn@valgrind.org>
+   Copyright (C) 2005-2015 Cerion Armour-Brown <cerion@open-works.co.uk>
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -371,7 +371,7 @@
 
 /* 
    When a client clones, we need to keep track of the new thread.  This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
 
    2. initialize the thread's new VCPU state
 
@@ -553,8 +553,8 @@
 {
    SysRes r;
 
-   PRINT("sys_mmap ( %#lx, %llu, %ld, %ld, %ld, %ld )",
-         ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
+   PRINT("sys_mmap ( %#lx, %lu, %lu, %lu, %lu, %lu )",
+         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
    PRE_REG_READ6(long, "mmap",
                  unsigned long, start, unsigned long, length,
                  unsigned long, prot,  unsigned long, flags,
@@ -717,7 +717,7 @@
 
 PRE(sys_fadvise64)
 {
-   PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )",  SARG1, SARG2, SARG3, SARG4);
    PRE_REG_READ4(long, "fadvise64",
                  int, fd, vki_loff_t, offset, vki_size_t, len, int, advice);
 }
diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c
index db374f4..e919b8f 100644
--- a/coregrind/m_syswrap/syswrap-s390x-linux.c
+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -194,7 +194,7 @@
 
 /*
    When a client clones, we need to keep track of the new thread.  This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
 
    2. initialize the thread's new VCPU state
 
@@ -331,9 +331,10 @@
 
 PRE(sys_ptrace)
 {
-   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "ptrace",
-                 long, request, long, pid, long, addr, long, data);
+                 long, request, long, pid, unsigned long, addr,
+                 unsigned long, data);
    switch (ARG1) {
    case VKI_PTRACE_PEEKTEXT:
    case VKI_PTRACE_PEEKDATA:
@@ -444,8 +445,8 @@
    a4 = args[4];
    a5 = args[5];
 
-   PRINT("sys_mmap ( %#lx, %llu, %ld, %ld, %ld, %ld )",
-         a0, (ULong)a1, a2, a3, a4, a5 );
+   PRINT("sys_mmap ( %#lx, %lu, %ld, %ld, %ld, %ld )",
+         a0, a1, (Word)a2, (Word)a3, (Word)a4, (Word)a5 );
 
    r = ML_(generic_PRE_sys_mmap)( tid, a0, a1, a2, a3, a4, (Off64T)a5 );
    SET_STATUS_from_SysRes(r);
@@ -605,7 +606,7 @@
 /* we cant use the LINX_ version for 64 bit */
 PRE(sys_fadvise64)
 {
-   PRINT("sys_fadvise64 ( %ld, %ld, %ld, %ld )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_fadvise64 ( %ld, %ld, %ld, %ld )", SARG1, SARG2, SARG3, SARG4);
    PRE_REG_READ4(long, "fadvise64",
                  int, fd, vki_loff_t, offset, vki_loff_t, len, int, advice);
 }
diff --git a/coregrind/m_syswrap/syswrap-solaris.c b/coregrind/m_syswrap/syswrap-solaris.c
new file mode 100644
index 0000000..216e53c
--- /dev/null
+++ b/coregrind/m_syswrap/syswrap-solaris.c
@@ -0,0 +1,10541 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Solaris-specific syscalls, etc.            syswrap-solaris.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2011-2015 Petr Pavlu
+      setup@dagobah.cz
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Copyright 2013-2015, Ivo Raisr <ivosh@ivosh.net>. */
+
+/* Copyright 2015-2015, Tomas Jedlicka <jedlickat@gmail.com>. */
+
+/* Copyright 2013, OmniTI Computer Consulting, Inc. All rights reserved. */
+
+#if defined(VGO_solaris)
+
+#include "libvex_guest_offsets.h"
+#include "pub_core_basics.h"
+#include "pub_core_vki.h"
+#include "pub_core_vkiscnums.h"
+#include "pub_core_threadstate.h"
+#include "pub_core_aspacemgr.h"
+#include "pub_core_debuginfo.h"         // VG_(di_notify_*)
+#include "pub_core_debuglog.h"
+#include "pub_core_clientstate.h"
+#include "pub_core_gdbserver.h"
+#include "pub_core_inner.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcfile.h"
+#include "pub_core_libcprint.h"
+#include "pub_core_libcproc.h"
+#include "pub_core_libcsignal.h"
+#include "pub_core_machine.h"           // VG_(get_SP)
+#include "pub_core_mallocfree.h"
+#include "pub_core_options.h"
+#include "pub_core_tooliface.h"
+#include "pub_core_transtab.h"          // VG_(discard_translations)
+#include "pub_core_scheduler.h"
+#include "pub_core_sigframe.h"
+#include "pub_core_signals.h"
+#include "pub_core_stacks.h"
+#include "pub_core_syscall.h"
+#include "pub_core_syswrap.h"
+#include "pub_core_ume.h"
+#if defined(ENABLE_INNER_CLIENT_REQUEST)
+#include "pub_core_clreq.h"
+#endif
+
+#include "priv_types_n_macros.h"
+#include "priv_syswrap-generic.h"
+#include "priv_syswrap-solaris.h"
+
+/* Return the number of non-dead and daemon threads.
+   count_daemon == True:  count daemon threads
+   count_daemon == False: count non-daemon threads */
+static UInt count_living_daemon_threads(Bool count_daemon)
+{
+   UInt count = 0;
+   for (ThreadId tid = 1; tid < VG_N_THREADS; tid++)
+      if (VG_(threads)[tid].status != VgTs_Empty &&
+         VG_(threads)[tid].status != VgTs_Zombie &&
+         VG_(threads)[tid].os_state.daemon_thread == count_daemon)
+         count++;
+
+   return count;
+}
+
+/* Note: The following functions (thread_wrapper, run_a_thread_NORETURN,
+   ML_(start_thread_NORETURN), ML_(allocstack) and
+   VG_(main_thread_wrapper_NORETURN)) are based on the code in
+   syswrap-linux.c.  Keep them synchronized! */
+
+/* Run a thread from beginning to end and return the thread's
+   scheduler-return-code. */
+static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
+{
+   VgSchedReturnCode ret;
+   ThreadId tid = (ThreadId)tidW;
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+
+   VG_(debugLog)(1, "syswrap-solaris",
+                    "thread_wrapper(tid=%u): entry\n",
+                    tid);
+
+   vg_assert(tst->status == VgTs_Init);
+
+   /* Make sure we get the CPU lock before doing anything significant. */
+   VG_(acquire_BigLock)(tid, "thread_wrapper(starting new thread)");
+
+   if (0)
+     VG_(printf)("thread tid %u started: stack = %p\n", tid, (void *)&tid);
+
+   /* Make sure error reporting is enabled in the new thread. */
+   tst->err_disablement_level = 0;
+
+   if (tid == 1)
+      VG_TRACK(pre_thread_first_insn, tid);
+   else {
+      /* For newly created threads, VG_TRACK(pre_thread_first_insn, tid) is
+         invoked later from PRE(sys_getsetcontext)() when setucontext()
+         called from _thrp_setup() concludes new thread setup. Invoking it
+         here would be way too early - new thread has no stack, yet. */
+   }
+
+   tst->os_state.lwpid = VG_(gettid)();
+   tst->os_state.threadgroup = VG_(getpid)();
+
+   /* Thread created with all signals blocked; scheduler will set the
+      appropriate mask. */
+
+   ret = VG_(scheduler)(tid);
+
+   vg_assert(VG_(is_exiting)(tid));
+
+   vg_assert(tst->status == VgTs_Runnable);
+   vg_assert(VG_(is_running_thread)(tid));
+
+   VG_(debugLog)(1, "syswrap-solaris",
+                    "thread_wrapper(tid=%u): exit, schedreturncode %s\n",
+                    tid, VG_(name_of_VgSchedReturnCode)(ret));
+
+   /* Return to caller, still holding the lock. */
+   return ret;
+}
+
+/* Run a thread all the way to the end, then do appropriate exit actions
+   (this is the last-one-out-turn-off-the-lights bit). */
+static void run_a_thread_NORETURN(Word tidW)
+{
+   ThreadId tid = (ThreadId)tidW;
+   VgSchedReturnCode src;
+   Int c;
+   ThreadState *tst;
+#ifdef ENABLE_INNER_CLIENT_REQUEST
+   Int registered_vgstack_id;
+#endif
+
+   VG_(debugLog)(1, "syswrap-solaris",
+                    "run_a_thread_NORETURN(tid=%u): pre-thread_wrapper\n",
+                    tid);
+
+   tst = VG_(get_ThreadState)(tid);
+   vg_assert(tst);
+
+   /* A thread has two stacks:
+      * the simulated stack (used by the synthetic cpu. Guest process
+        is using this stack).
+      * the valgrind stack (used by the real cpu. Valgrind code is running
+        on this stack).
+      When Valgrind runs as an inner, it must signal that its (real) stack
+      is the stack to use by the outer to e.g. do stacktraces.
+   */
+   INNER_REQUEST
+      (registered_vgstack_id
+       = VALGRIND_STACK_REGISTER(tst->os_state.valgrind_stack_base,
+                                 tst->os_state.valgrind_stack_init_SP));
+
+   /* Run the thread all the way through. */
+   src = thread_wrapper(tid);
+
+   VG_(debugLog)(1, "syswrap-solaris",
+                    "run_a_thread_NORETURN(tid=%u): post-thread_wrapper\n",
+                    tid);
+
+   c = count_living_daemon_threads(False);
+   vg_assert(c >= 1); /* Stay sane. */
+
+   /* Tell the tool that schedctl data belonging to this thread are gone. */
+   Addr a = tst->os_state.schedctl_data;
+   if (a != 0)
+      VG_TRACK(die_mem_munmap, a, sizeof(struct vki_sc_shared));
+
+   /* Deregister thread's stack. */
+   if (tst->os_state.stk_id != (UWord)-1)
+      VG_(deregister_stack)(tst->os_state.stk_id);
+
+   /* Tell the tool this thread is exiting. */
+   VG_TRACK(pre_thread_ll_exit, tid);
+
+   /* If the thread is exiting with errors disabled, complain loudly;
+      doing so is bad (does the user know this has happened?)  Also, in all
+      cases, be paranoid and clear the flag anyway so that the thread slot is
+      safe in this respect if later reallocated.  This should be unnecessary
+      since the flag should be cleared when the slot is reallocated, in
+      thread_wrapper(). */
+   if (tst->err_disablement_level > 0) {
+      VG_(umsg)(
+         "WARNING: exiting thread has error reporting disabled.\n"
+         "WARNING: possibly as a result of some mistake in the use\n"
+         "WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.\n"
+      );
+      VG_(debugLog)(
+         1, "syswrap-solaris",
+            "run_a_thread_NORETURN(tid=%u): "
+            "WARNING: exiting thread has err_disablement_level = %u\n",
+            tid, tst->err_disablement_level
+      );
+   }
+   tst->err_disablement_level = 0;
+
+   if (c == 1) {
+      UInt daemon_threads = count_living_daemon_threads(True);
+      if (daemon_threads == 0)
+         VG_(debugLog)(1, "syswrap-solaris",
+                          "run_a_thread_NORETURN(tid=%u): "
+                          "last one standing\n",
+                          tid);
+      else
+         VG_(debugLog)(1, "syswrap-solaris",
+                          "run_a_thread_NORETURN(tid=%u): "
+                          "last non-daemon thread standing "
+                          "[daemon threads=%u]\n",
+                          tid, daemon_threads);
+
+      /* We are the last non-daemon thread standing. Keep hold of the lock and
+         carry on to show final tool results, then exit the entire system.
+         Use the continuation pointer set at startup in m_main. */
+      if ((src == VgSrc_ExitThread) && (daemon_threads > 0))
+         src = VgSrc_ExitProcess;
+      (*VG_(address_of_m_main_shutdown_actions_NORETURN))(tid, src);
+   }
+   else {
+      VG_(debugLog)(1, "syswrap-solaris",
+                       "run_a_thread_NORETURN(tid=%u): "
+                       "not last one standing\n",
+                       tid);
+
+      /* OK, thread is dead, but others still exist.  Just exit. */
+
+      /* This releases the run lock. */
+      VG_(exit_thread)(tid);
+      vg_assert(tst->status == VgTs_Zombie);
+      vg_assert(sizeof(tst->status) == 4);
+
+      INNER_REQUEST(VALGRIND_STACK_DEREGISTER(registered_vgstack_id));
+
+      /* We have to use this sequence to terminate the thread to
+         prevent a subtle race.  If VG_(exit_thread)() had left the
+         ThreadState as Empty, then it could have been reallocated, reusing
+         the stack while we're doing these last cleanups.  Instead,
+         VG_(exit_thread) leaves it as Zombie to prevent reallocation.  We
+         need to make sure we don't touch the stack between marking it Empty
+         and exiting.  Hence the assembler. */
+#if defined(VGP_x86_solaris)
+      /* Luckily lwp_exit doesn't take any arguments so we don't have to mess
+         with the stack. */
+      __asm__ __volatile__ (
+         "movl  %[EMPTY], %[status]\n"  /* set tst->status = VgTs_Empty */
+         "movl  $"VG_STRINGIFY(__NR_lwp_exit)", %%eax\n"
+         "int   $0x91\n"                /* lwp_exit() */
+         : [status] "=m" (tst->status)
+         : [EMPTY] "n" (VgTs_Empty)
+         : "eax", "edx", "cc", "memory");
+#elif defined(VGP_amd64_solaris)
+      __asm__ __volatile__ (
+         "movl  %[EMPTY], %[status]\n"  /* set tst->status = VgTs_Empty */
+         "movq  $"VG_STRINGIFY(__NR_lwp_exit)", %%rax\n"
+         "syscall\n"                    /* lwp_exit() */
+         : [status] "=m" (tst->status)
+         : [EMPTY] "n" (VgTs_Empty)
+         : "rax", "rdx", "cc", "memory");
+#else
+#  error "Unknown platform"
+#endif
+
+      VG_(core_panic)("Thread exit failed?\n");
+   }
+
+   /*NOTREACHED*/
+   vg_assert(0);
+}
+
+Word ML_(start_thread_NORETURN)(void *arg)
+{
+   ThreadState *tst = (ThreadState*)arg;
+   ThreadId tid = tst->tid;
+
+   run_a_thread_NORETURN((Word)tid);
+   /*NOTREACHED*/
+   vg_assert(0);
+}
+
+/* Allocate a stack for this thread, if it doesn't already have one.
+   They're allocated lazily, and never freed.  Returns the initial stack
+   pointer value to use, or 0 if allocation failed. */
+Addr ML_(allocstack)(ThreadId tid)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   VgStack *stack;
+   Addr initial_SP;
+
+   /* Either the stack_base and stack_init_SP are both zero (in which
+      case a stack hasn't been allocated) or they are both non-zero,
+      in which case it has. */
+
+   if (tst->os_state.valgrind_stack_base == 0)
+      vg_assert(tst->os_state.valgrind_stack_init_SP == 0);
+
+   if (tst->os_state.valgrind_stack_base != 0)
+      vg_assert(tst->os_state.valgrind_stack_init_SP != 0);
+
+   /* If no stack is present, allocate one. */
+
+   if (tst->os_state.valgrind_stack_base == 0) {
+      stack = VG_(am_alloc_VgStack)( &initial_SP );
+      if (stack) {
+         tst->os_state.valgrind_stack_base = (Addr)stack;
+         tst->os_state.valgrind_stack_init_SP = initial_SP;
+      }
+   }
+
+   if (0)
+      VG_(printf)("stack for tid %u at %p; init_SP=%p\n",
+                  tid,
+                  (void*)tst->os_state.valgrind_stack_base,
+                  (void*)tst->os_state.valgrind_stack_init_SP);
+
+   return tst->os_state.valgrind_stack_init_SP;
+}
+
+/* Allocate a stack for the main thread, and run it all the way to the
+   end.  Although we already have a working VgStack (VG_(interim_stack)) it's
+   better to allocate a new one, so that overflow detection works uniformly
+   for all threads.  Also initialize the GDT (for normal threads, this is done
+   in the PRE wrapper of lwp_create). */
+void VG_(main_thread_wrapper_NORETURN)(ThreadId tid)
+{
+   Addr sp;
+
+   VG_(debugLog)(1, "syswrap-solaris",
+                    "entering VG_(main_thread_wrapper_NORETURN)\n");
+
+   sp = ML_(allocstack)(tid);
+#if defined(ENABLE_INNER_CLIENT_REQUEST)
+   {
+      // we must register the main thread stack before the call
+      // to ML_(call_on_new_stack_0_1), otherwise the outer valgrind
+      // reports 'write error' on the non registered stack.
+      ThreadState *tst = VG_(get_ThreadState)(tid);
+      INNER_REQUEST
+         ((void) 
+          VALGRIND_STACK_REGISTER(tst->os_state.valgrind_stack_base,
+                                  tst->os_state.valgrind_stack_init_SP));
+   }
+#endif
+
+#if defined(VGP_x86_solaris)
+   {
+      ThreadState *tst = VG_(get_ThreadState)(tid);
+      ML_(setup_gdt)(&tst->arch.vex);
+      ML_(update_gdt_lwpgs)(tid);
+   }
+#elif defined(VGP_amd64_solaris)
+   /* Nothing to do. */
+#else
+#  error "Unknown platform"
+#endif
+
+   /* If we can't even allocate the first thread's stack, we're hosed.
+      Give up. */
+   vg_assert2(sp != 0, "Cannot allocate main thread's stack.");
+
+   /* Shouldn't be any other threads around yet. */
+   vg_assert(VG_(count_living_threads)() == 1);
+
+   ML_(call_on_new_stack_0_1)(
+      (Addr)sp,               /* stack */
+      0,                      /* bogus return address */
+      run_a_thread_NORETURN,  /* fn to call */
+      (Word)tid               /* arg to give it */
+   );
+
+   /*NOTREACHED*/
+   vg_assert(0);
+}
+
+/* Deallocate the GDT for a thread. */
+void VG_(cleanup_thread)(ThreadArchState *arch)
+{
+#if defined(VGP_x86_solaris)
+   ML_(cleanup_gdt)(&arch->vex);
+#elif defined(VGP_amd64_solaris)
+   /* Nothing to do. */
+#else
+#  error "Unknown platform"
+#endif
+}
+
+/*
+ * Notify core about spring cleaning of schedctl data pages for all threads
+ * in child post-fork handler. Libc will issue new schedctl syscalls for threads
+ * in the child when needs arise.
+ *
+ * See also POST(schedctl) and run_a_thread_NORETURN() when a thread exits.
+ */
+static void clean_schedctl_data(ThreadId tid)
+{
+   UInt i;
+   for (i = 0; i < VG_N_THREADS; i++) {
+      ThreadState *tst = &VG_(threads)[i];
+      if (tst->status != VgTs_Empty) {
+         Addr a = tst->os_state.schedctl_data;
+         if (a != 0) {
+            tst->os_state.schedctl_data = 0;
+            a = VG_PGROUNDDN(a);
+            if (VG_(am_find_anon_segment(a)))
+               VG_(am_notify_munmap)(a, VKI_PAGE_SIZE);
+         }
+      }
+   }
+}
+
+void VG_(syswrap_init)(void)
+{
+   VG_(atfork)(NULL, NULL, clean_schedctl_data);
+}
+
+/* Changes ownership of a memory mapping shared between kernel and the client
+   process. This mapping should have already been pre-arranged during process
+   address space initialization happening in kernel. Valgrind on startup created
+   a segment for this mapping categorized as Valgrind's owned anonymous.
+   Size of this mapping typically varies among Solaris versions but should be
+   page aligned.
+   If 'once_only' is 'True', it is expected this function is called once only
+   and the mapping ownership has not been changed, yet [useful during
+   initialization]. If 'False', this function can be called many times but does
+   change ownership only upon the first invocation [useful in syscall wrappers].
+ */
+void VG_(change_mapping_ownership)(Addr addr, Bool once_only)
+{
+   const NSegment *seg = VG_(am_find_anon_segment)(addr);
+   vg_assert(seg != NULL);
+   vg_assert(seg->start == addr);
+   vg_assert(VG_IS_PAGE_ALIGNED(seg->start));
+   vg_assert(VG_IS_PAGE_ALIGNED(seg->end + 1));
+   SizeT size = seg->end - seg->start + 1;
+   vg_assert(size > 0);
+
+   Bool do_change = False;
+   if (once_only) {
+      vg_assert(VG_(am_is_valid_for_valgrind)(addr, size, VKI_PROT_READ));
+      do_change = True;
+   } else {
+      if (!VG_(am_is_valid_for_client)(addr, size, VKI_PROT_READ))
+         do_change = True;
+   }
+
+   if (do_change) {
+      Bool change_ownership_OK = VG_(am_change_ownership_v_to_c)(addr, size);
+      vg_assert(change_ownership_OK);
+
+      /* Tell the tool about just discovered mapping. */
+      VG_TRACK(new_mem_startup,
+               addr, size,
+               True  /* readable? */,
+               False /* writable? */,
+               False /* executable? */,
+               0     /* di_handle */);
+   }
+}
+
+/* Calculate the Fletcher-32 checksum of a given buffer. */
+UInt ML_(fletcher32)(UShort *buf, SizeT blocks)
+{
+   UInt sum1 = 0;
+   UInt sum2 = 0;
+   SizeT i;
+
+   for (i = 0; i < blocks; i++) {
+      sum1 = (sum1 + buf[i]) % 0xffff;
+      sum2 = (sum2 + sum1) % 0xffff;
+   }
+
+   return (sum2 << 16) | sum1;
+}
+
+/* Calculate the Fletcher-64 checksum of a given buffer. */
+ULong ML_(fletcher64)(UInt *buf, SizeT blocks)
+{
+   ULong sum1 = 0;
+   ULong sum2 = 0;
+   SizeT i;
+
+   for (i = 0; i < blocks; i++) {
+      sum1 = (sum1 + buf[i]) % 0xffffffff;
+      sum2 = (sum2 + sum1) % 0xffffffff;
+   }
+   return (sum2 << 32) | sum1;
+}
+
+/* Save a complete context (VCPU state, sigmask) of a given client thread
+   into the vki_ucontext_t structure.  This structure is supposed to be
+   allocated in the client memory, a caller must make sure that the memory can
+   be dereferenced.  The active tool is informed about the save. */
+void VG_(save_context)(ThreadId tid, vki_ucontext_t *uc, CorePart part)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+
+   VG_TRACK(pre_mem_write, part, tid, "save_context(uc)", (Addr)uc,
+            sizeof(*uc));
+
+   uc->uc_flags = VKI_UC_ALL;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&uc->uc_flags,
+            sizeof(uc->uc_flags));
+
+   /* Old context */
+   uc->uc_link = tst->os_state.oldcontext;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&uc->uc_link,
+            sizeof(uc->uc_link));
+
+   /* Clear uc->vki_uc_signo.  This slot is used by the signal machinery to
+      store a signal number. */
+   VKI_UC_SIGNO(uc) = 0;
+
+   /* Sigmask */
+   uc->uc_sigmask = tst->sig_mask;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&uc->uc_sigmask,
+            sizeof(uc->uc_sigmask));
+
+   /* Stack */
+   {
+      if (tst->os_state.ustack
+          && ML_(safe_to_deref)(tst->os_state.ustack, sizeof(vki_stack_t))
+          && tst->os_state.ustack->ss_size) {
+         /* If ustack points to a valid stack copy it to ucontext. */
+         uc->uc_stack = *tst->os_state.ustack;
+      }
+      else {
+         /* Ustack is not valid.  A correct stack has to be figured out
+            manually. */
+         SysRes res;
+         vki_stack_t altstack;
+
+         /* Get information about alternate stack. */
+         res = VG_(do_sys_sigaltstack)(tid, NULL, &altstack);
+         vg_assert(!sr_isError(res));
+
+         if (altstack.ss_flags == VKI_SS_ONSTACK) {
+            /* If the alternate stack is active copy it to ucontext. */
+            uc->uc_stack = altstack;
+         }
+         else {
+            /* No information about stack is present, save information about
+               current main stack to ucontext.  This branch should be reached
+               only by the main thread. */
+            ThreadState *tst2 = VG_(get_ThreadState)(1);
+            uc->uc_stack.ss_sp = (void*)(tst2->client_stack_highest_byte + 1
+                                         - tst2->client_stack_szB);
+            uc->uc_stack.ss_size = tst2->client_stack_szB;
+            uc->uc_stack.ss_flags = 0;
+         }
+      }
+
+      VG_TRACK(post_mem_write, part, tid, (Addr)&uc->uc_stack,
+               sizeof(uc->uc_stack));
+   }
+
+   /* Save the architecture-specific part of the context. */
+   ML_(save_machine_context)(tid, uc, part);
+}
+
+/* Set a complete context (VCPU state, sigmask) of a given client thread
+   according to values passed in the vki_ucontext_t structure.  This structure
+   is supposed to be allocated in the client memory, a caller must make sure
+   that the memory can be dereferenced.  The active tool is informed about
+   what parts of the structure are read.
+
+   This function is a counterpart to VG_(save_context)(). */
+void VG_(restore_context)(ThreadId tid, vki_ucontext_t *uc, CorePart part,
+                          Bool esp_is_thrptr)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   Addr old_esp = VG_(get_SP)(tid);
+
+   VG_TRACK(pre_mem_read, part, tid, "restore_context(uc->uc_flags)",
+            (Addr)&uc->uc_flags, sizeof(uc->uc_flags));
+
+   /* Old context */
+   VG_TRACK(pre_mem_read, part, tid, "restore_context(uc->uc_link)",
+            (Addr)&uc->uc_link, sizeof(uc->uc_link));
+   tst->os_state.oldcontext = uc->uc_link;
+
+   /* Sigmask */
+   if (uc->uc_flags & VKI_UC_SIGMASK) {
+      SysRes res;
+
+      VG_TRACK(pre_mem_read, part, tid, "restore_context(uc->uc_sigmask)",
+               (Addr)&uc->uc_sigmask, sizeof(uc->uc_sigmask));
+      res = VG_(do_sys_sigprocmask)(tid, VKI_SIG_SETMASK, &uc->uc_sigmask,
+                                    NULL);
+      /* Setting signal mask should never fail. */
+      vg_assert(!sr_isError(res));
+   }
+
+   /* Stack */
+   if (uc->uc_flags & VKI_UC_STACK) {
+      VG_TRACK(pre_mem_read, part, tid, "restore_context(uc->uc_stack)",
+               (Addr)&uc->uc_stack, sizeof(uc->uc_stack));
+
+      if (uc->uc_stack.ss_flags == VKI_SS_ONSTACK) {
+         /* This seems to be a little bit dangerous but it is what the kernel
+            does. */
+         if (VG_(clo_trace_signals))
+            VG_(dmsg)("restore_context, sigaltstack: tid %u, "
+                      "ss %p{%p,sz=%lu,flags=%#x}\n",
+                      tid, &uc->uc_stack, uc->uc_stack.ss_sp,
+                      (SizeT)uc->uc_stack.ss_size, uc->uc_stack.ss_flags);
+
+         tst->altstack.ss_sp = uc->uc_stack.ss_sp;
+         tst->altstack.ss_size = uc->uc_stack.ss_size;
+         /* Do not copy ss_flags, they are calculated dynamically by
+            Valgrind. */
+      }
+
+      /* Copyout the new stack. */
+      if (tst->os_state.ustack
+          && VG_(am_is_valid_for_client)((Addr)tst->os_state.ustack,
+                                         sizeof(*tst->os_state.ustack),
+                                         VKI_PROT_WRITE))
+         *tst->os_state.ustack = uc->uc_stack;
+         VG_TRACK(post_mem_write, part, tid, (Addr)&tst->os_state.ustack,
+                  sizeof(tst->os_state.ustack));
+   }
+
+   /* Restore the architecture-specific part of the context. */
+   ML_(restore_machine_context)(tid, uc, part, esp_is_thrptr);
+
+   /* If the thread stack is already known, kill the deallocated stack area.
+      This is important when returning from a signal handler. */
+   if (tst->client_stack_highest_byte && tst->client_stack_szB) {
+      Addr end = tst->client_stack_highest_byte;
+      Addr start = end + 1 - tst->client_stack_szB;
+      Addr new_esp = VG_(get_SP)(tid);
+
+      /* Make sure that the old and new stack pointer are on the same (active)
+         stack.  Alternate stack is currently never affected by this code. */
+      if (start <= old_esp && old_esp <= end
+          && start <= new_esp && new_esp <= end
+          && new_esp > old_esp)
+         VG_TRACK(die_mem_stack, old_esp - VG_STACK_REDZONE_SZB,
+                  (new_esp - old_esp) + VG_STACK_REDZONE_SZB);
+   }
+}
+
+/* Set a client stack associated with a given thread id according to values
+   passed in the vki_stack_t structure. */
+static void set_stack(ThreadId tid, vki_stack_t *st)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   Addr new_start, new_end;
+   SizeT new_size;
+   Addr cur_start;
+   SizeT cur_size;
+
+   VG_(debugLog)(2, "syswrap-solaris",
+                    "set stack: sp=%#lx, size=%#lx.\n",
+                    (Addr)st->ss_sp, (SizeT)st->ss_size);
+
+   /* Stay sane. */
+   vg_assert(st->ss_flags == 0);
+
+   new_start = (Addr)st->ss_sp;
+   new_end = new_start + st->ss_size - 1;
+   new_size = st->ss_size;
+   cur_start = tst->client_stack_highest_byte + 1
+               - tst->client_stack_szB;
+   cur_size = tst->client_stack_szB;
+
+   if (new_start == cur_start && new_size == cur_size) {
+      /* No change is requested, bail out. */
+      return;
+   }
+
+   if (tid == 1 && (new_size == 0 || new_size > VG_(clstk_max_size))) {
+      /* The main thread requests to use a stack without any size checking, or
+         too big stack.  Fallback to the maximum allocated client stack. */
+
+      /* TODO I think it is possible to give up on setting main stack anyway.
+         Valgrind knows where it is located and it is already registered as
+         VG_(clstk_id). */
+
+      new_size = VG_(clstk_max_size);
+      new_end = tst->client_stack_highest_byte;
+      new_start = new_end + 1 - new_size;
+   }
+
+   if (tst->os_state.stk_id == (UWord)-1) {
+      /* This thread doesn't have a stack set yet. */
+      VG_(debugLog)(2, "syswrap-solaris",
+                       "Stack set to %#lx-%#lx (new) for thread %u.\n",
+                       new_start, new_end, tid);
+      tst->os_state.stk_id = VG_(register_stack)(new_start, new_end);
+   }
+   else {
+      /* Change a thread stack. */
+      VG_(debugLog)(2, "syswrap-solaris",
+                       "Stack set to %#lx-%#lx (change) for thread %u.\n",
+                       new_start, new_end, tid);
+      VG_(change_stack)(tst->os_state.stk_id, new_start, new_end);
+   }
+   tst->client_stack_highest_byte = new_end;
+   tst->client_stack_szB = new_size;
+}
+
+/* ---------------------------------------------------------------------
+   Door tracking. Used mainly for server side where door_return()
+   parameters alone do not contain sufficient information.
+   Also used on client side when new door descriptors are passed via
+   door_call() in desc_ptr. Not used for tracking door descriptors
+   explicitly open()'ed [generic fd tracking is used in that case].
+   ------------------------------------------------------------------ */
+
+/* One of these is allocated for each created door. */
+typedef struct OpenDoor
+{
+   Bool server; /* TRUE = server door, FALSE = client door */
+   Int fd;      /* The file descriptor. */
+   union {
+      /* Server side. */
+      struct {
+         Addr server_procedure;  /* The door server procedure. */
+         HChar *pathname;        /* NULL if unknown. */
+      };
+      /* Client side. */
+      struct {
+         /* Hook called during PRE door_call()
+            to check contents of params->data_ptr. */
+         void (*pre_mem_hook)(ThreadId tid, Int fd,
+                              void *data_ptr, SizeT data_size);
+         /* Hook called during POST door_call()
+            to define contents of params->rbuf. */
+         void (*post_mem_hook)(ThreadId tid, Int fd,
+                               void *rbuf, SizeT rsize);
+      };
+   };
+   struct OpenDoor *next, *prev;
+} OpenDoor;
+
+/* List of allocated door fds. */
+static OpenDoor *doors_recorded = NULL;
+static UInt nr_doors_recorded = 0;
+
+static OpenDoor *door_record_create(void)
+{
+   OpenDoor *d = VG_(malloc)("syswrap.door_record_create.1", sizeof(OpenDoor));
+   d->prev = NULL;
+   d->next = doors_recorded;
+   if (doors_recorded != NULL)
+      doors_recorded->prev = d;
+   doors_recorded = d;
+   nr_doors_recorded += 1;
+
+   return d;
+}
+
+/* Records a server door. */
+static void door_record_server(ThreadId tid, Addr server_procedure, Int fd)
+{
+   OpenDoor *d = doors_recorded;
+
+   while (d != NULL) {
+      if ((d->server == TRUE) && (d->server_procedure == server_procedure)) {
+         if (d->pathname) {
+            VG_(free)(d->pathname);
+         }
+         break;
+      }
+      d = d->next;
+   }
+
+   if (d == NULL)
+      d = door_record_create();
+   vg_assert(d != NULL);
+
+   d->server = TRUE;
+   d->fd = fd;
+   d->server_procedure = server_procedure;
+   d->pathname = NULL;
+}
+
+/* Records a client door. */
+static void door_record_client(ThreadId tid, Int fd,
+   void (*pre_mem_hook)(ThreadId tid, Int fd, void *data_ptr, SizeT data_size),
+   void (*post_mem_hook)(ThreadId tid, Int fd, void *rbuf, SizeT rsize))
+{
+   OpenDoor *d = doors_recorded;
+
+   while (d != NULL) {
+      if ((d->server == FALSE) && (d->fd == fd))
+         break;
+      d = d->next;
+   }
+
+   if (d == NULL)
+      d = door_record_create();
+   vg_assert(d != NULL);
+
+   d->server = FALSE;
+   d->fd = fd;
+   d->pre_mem_hook = pre_mem_hook;
+   d->post_mem_hook = post_mem_hook;
+}
+
+/* Revokes an open door, be it server side or client side. */
+static void door_revoke(ThreadId tid, Int fd)
+{
+   OpenDoor *d = doors_recorded;
+
+   while (d != NULL) {
+      if (d->fd == fd) {
+         if (d->prev != NULL)
+            d->prev->next = d->next;
+         else
+            doors_recorded = d->next;
+         if (d->next != NULL)
+            d->next->prev = d->prev;
+
+         if ((d->server == TRUE) && (d->pathname != NULL))
+            VG_(free)(d->pathname);
+         VG_(free)(d);
+         nr_doors_recorded -= 1;
+         return;
+      }
+      d = d->next;
+   }
+}
+
+/* Attaches a server door to a filename. */
+static void door_server_fattach(Int fd, HChar *pathname)
+{
+   OpenDoor *d = doors_recorded;
+
+   while (d != NULL) {
+      if (d->fd == fd) {
+         vg_assert(d->server == TRUE);
+
+         if (d->pathname != NULL)
+            VG_(free)(d->pathname);
+         d->pathname = VG_(strdup)("syswrap.door_server_fattach.1", pathname);
+         return;
+      }
+      d = d->next;
+   }
+}
+
+/* Finds a server door based on server procedure. */
+static const OpenDoor *door_find_by_proc(Addr server_procedure)
+{
+   OpenDoor *d = doors_recorded;
+
+   while (d != NULL) {
+      if ((d->server) && (d->server_procedure == server_procedure))
+         return d;
+      d = d->next;
+   }
+
+   return NULL;
+}
+
+/* Finds a client door based on fd. */
+static const OpenDoor *door_find_by_fd(Int fd)
+{
+   OpenDoor *d = doors_recorded;
+
+   while (d != NULL) {
+      if ((d->server == FALSE) && (d->fd == fd))
+         return d;
+      d = d->next;
+   }
+
+   return NULL;
+}
+
+/* ---------------------------------------------------------------------
+   PRE/POST wrappers for Solaris-specific syscalls
+   ------------------------------------------------------------------ */
+
+#define PRE(name)       DEFN_PRE_TEMPLATE(solaris, name)
+#define POST(name)      DEFN_POST_TEMPLATE(solaris, name)
+
+/* prototypes */
+DECL_TEMPLATE(solaris, sys_exit);
+#if defined(SOLARIS_SPAWN_SYSCALL)
+DECL_TEMPLATE(solaris, sys_spawn);
+#endif /* SOLARIS_SPAWN_SYSCALL */
+#if defined(SOLARIS_OLD_SYSCALLS)
+DECL_TEMPLATE(solaris, sys_open);
+#endif /* SOLARIS_OLD_SYSCALLS */
+DECL_TEMPLATE(solaris, sys_close);
+DECL_TEMPLATE(solaris, sys_linkat);
+DECL_TEMPLATE(solaris, sys_symlinkat);
+DECL_TEMPLATE(solaris, sys_time);
+DECL_TEMPLATE(solaris, sys_brk);
+DECL_TEMPLATE(solaris, sys_stat);
+DECL_TEMPLATE(solaris, sys_lseek);
+DECL_TEMPLATE(solaris, sys_mount);
+DECL_TEMPLATE(solaris, sys_readlinkat);
+DECL_TEMPLATE(solaris, sys_stime);
+DECL_TEMPLATE(solaris, sys_fstat);
+#if defined(SOLARIS_FREALPATHAT_SYSCALL)
+DECL_TEMPLATE(solaris, sys_frealpathat);
+#endif /* SOLARIS_FREALPATHAT_SYSCALL */
+DECL_TEMPLATE(solaris, sys_stty);
+DECL_TEMPLATE(solaris, sys_gtty);
+DECL_TEMPLATE(solaris, sys_pgrpsys);
+DECL_TEMPLATE(solaris, sys_pipe);
+DECL_TEMPLATE(solaris, sys_faccessat);
+DECL_TEMPLATE(solaris, sys_mknodat);
+DECL_TEMPLATE(solaris, sys_sysi86);
+DECL_TEMPLATE(solaris, sys_shmsys);
+DECL_TEMPLATE(solaris, sys_semsys);
+DECL_TEMPLATE(solaris, sys_ioctl);
+DECL_TEMPLATE(solaris, sys_fchownat);
+DECL_TEMPLATE(solaris, sys_fdsync);
+DECL_TEMPLATE(solaris, sys_execve);
+DECL_TEMPLATE(solaris, sys_fcntl);
+DECL_TEMPLATE(solaris, sys_renameat);
+DECL_TEMPLATE(solaris, sys_unlinkat);
+DECL_TEMPLATE(solaris, sys_fstatat);
+DECL_TEMPLATE(solaris, sys_openat);
+DECL_TEMPLATE(solaris, sys_tasksys);
+DECL_TEMPLATE(solaris, sys_getpagesizes);
+DECL_TEMPLATE(solaris, sys_lwp_park);
+DECL_TEMPLATE(solaris, sys_sendfilev);
+#if defined(SOLARIS_LWP_NAME_SYSCALL)
+DECL_TEMPLATE(solaris, sys_lwp_name);
+#endif /* SOLARIS_LWP_NAME_SYSCALL */
+DECL_TEMPLATE(solaris, sys_privsys);
+DECL_TEMPLATE(solaris, sys_ucredsys);
+DECL_TEMPLATE(solaris, sys_getmsg);
+DECL_TEMPLATE(solaris, sys_putmsg);
+DECL_TEMPLATE(solaris, sys_lstat);
+DECL_TEMPLATE(solaris, sys_sigprocmask);
+DECL_TEMPLATE(solaris, sys_sigaction);
+DECL_TEMPLATE(solaris, sys_sigpending);
+DECL_TEMPLATE(solaris, sys_getsetcontext);
+DECL_TEMPLATE(solaris, sys_fchmodat);
+DECL_TEMPLATE(solaris, sys_mkdirat);
+DECL_TEMPLATE(solaris, sys_statvfs);
+DECL_TEMPLATE(solaris, sys_fstatvfs);
+DECL_TEMPLATE(solaris, sys_nfssys);
+DECL_TEMPLATE(solaris, sys_waitid);
+#if defined(SOLARIS_UTIMESYS_SYSCALL)
+DECL_TEMPLATE(solaris, sys_utimesys);
+#endif /* SOLARIS_UTIMESYS_SYSCALL */
+#if defined(SOLARIS_UTIMENSAT_SYSCALL)
+DECL_TEMPLATE(solaris, sys_utimensat);
+#endif /* SOLARIS_UTIMENSAT_SYSCALL */
+DECL_TEMPLATE(solaris, sys_sigresend);
+DECL_TEMPLATE(solaris, sys_priocntlsys);
+DECL_TEMPLATE(solaris, sys_pathconf);
+DECL_TEMPLATE(solaris, sys_mmap);
+#if defined(SOLARIS_UUIDSYS_SYSCALL)
+DECL_TEMPLATE(solaris, sys_uuidsys);
+#endif /* SOLARIS_UUIDSYS_SYSCALL */
+DECL_TEMPLATE(solaris, sys_mmapobj);
+DECL_TEMPLATE(solaris, sys_memcntl);
+DECL_TEMPLATE(solaris, sys_getpmsg);
+DECL_TEMPLATE(solaris, sys_putpmsg);
+#if defined(SOLARIS_OLD_SYSCALLS)
+DECL_TEMPLATE(solaris, sys_rename);
+#endif /* SOLARIS_OLD_SYSCALLS */
+DECL_TEMPLATE(solaris, sys_uname);
+DECL_TEMPLATE(solaris, sys_setegid);
+DECL_TEMPLATE(solaris, sys_sysconfig);
+DECL_TEMPLATE(solaris, sys_systeminfo);
+DECL_TEMPLATE(solaris, sys_seteuid);
+DECL_TEMPLATE(solaris, sys_forksys);
+DECL_TEMPLATE(solaris, sys_sigtimedwait);
+DECL_TEMPLATE(solaris, sys_yield);
+DECL_TEMPLATE(solaris, sys_lwp_sema_post);
+DECL_TEMPLATE(solaris, sys_lwp_sema_trywait);
+DECL_TEMPLATE(solaris, sys_lwp_detach);
+DECL_TEMPLATE(solaris, sys_fchroot);
+#if defined(SOLARIS_SYSTEM_STATS_SYSCALL)
+DECL_TEMPLATE(solaris, sys_system_stats);
+#endif /* SOLARIS_SYSTEM_STATS_SYSCALL */
+DECL_TEMPLATE(solaris, sys_gettimeofday);
+DECL_TEMPLATE(solaris, sys_lwp_create);
+DECL_TEMPLATE(solaris, sys_lwp_exit);
+DECL_TEMPLATE(solaris, sys_lwp_suspend);
+DECL_TEMPLATE(solaris, sys_lwp_continue);
+#if defined(SOLARIS_LWP_SIGQUEUE_SYSCALL)
+DECL_TEMPLATE(solaris, sys_lwp_sigqueue);
+#else
+DECL_TEMPLATE(solaris, sys_lwp_kill);
+#endif /* SOLARIS_LWP_SIGQUEUE_SYSCALL */
+DECL_TEMPLATE(solaris, sys_lwp_self);
+DECL_TEMPLATE(solaris, sys_lwp_sigmask);
+DECL_TEMPLATE(solaris, sys_lwp_private);
+DECL_TEMPLATE(solaris, sys_lwp_wait);
+DECL_TEMPLATE(solaris, sys_lwp_mutex_wakeup);
+DECL_TEMPLATE(solaris, sys_lwp_cond_wait);
+DECL_TEMPLATE(solaris, sys_lwp_cond_broadcast);
+DECL_TEMPLATE(solaris, sys_pread);
+DECL_TEMPLATE(solaris, sys_pwrite);
+DECL_TEMPLATE(solaris, sys_rusagesys);
+DECL_TEMPLATE(solaris, sys_port);
+DECL_TEMPLATE(solaris, sys_pollsys);
+DECL_TEMPLATE(solaris, sys_labelsys);
+DECL_TEMPLATE(solaris, sys_acl);
+DECL_TEMPLATE(solaris, sys_auditsys);
+DECL_TEMPLATE(solaris, sys_p_online);
+DECL_TEMPLATE(solaris, sys_sigqueue);
+DECL_TEMPLATE(solaris, sys_clock_gettime);
+DECL_TEMPLATE(solaris, sys_clock_settime);
+DECL_TEMPLATE(solaris, sys_clock_getres);
+DECL_TEMPLATE(solaris, sys_timer_create);
+DECL_TEMPLATE(solaris, sys_timer_delete);
+DECL_TEMPLATE(solaris, sys_timer_settime);
+DECL_TEMPLATE(solaris, sys_timer_gettime);
+DECL_TEMPLATE(solaris, sys_timer_getoverrun);
+DECL_TEMPLATE(solaris, sys_facl);
+DECL_TEMPLATE(solaris, sys_door);
+DECL_TEMPLATE(solaris, sys_schedctl);
+DECL_TEMPLATE(solaris, sys_pset);
+DECL_TEMPLATE(solaris, sys_resolvepath);
+DECL_TEMPLATE(solaris, sys_lwp_mutex_timedlock);
+DECL_TEMPLATE(solaris, sys_lwp_rwlock_sys);
+DECL_TEMPLATE(solaris, sys_lwp_sema_timedwait);
+DECL_TEMPLATE(solaris, sys_zone);
+DECL_TEMPLATE(solaris, sys_getcwd);
+DECL_TEMPLATE(solaris, sys_so_socket);
+DECL_TEMPLATE(solaris, sys_so_socketpair);
+DECL_TEMPLATE(solaris, sys_bind);
+DECL_TEMPLATE(solaris, sys_listen);
+DECL_TEMPLATE(solaris, sys_accept);
+DECL_TEMPLATE(solaris, sys_connect);
+DECL_TEMPLATE(solaris, sys_shutdown);
+DECL_TEMPLATE(solaris, sys_recv);
+DECL_TEMPLATE(solaris, sys_recvfrom);
+DECL_TEMPLATE(solaris, sys_recvmsg);
+DECL_TEMPLATE(solaris, sys_send);
+DECL_TEMPLATE(solaris, sys_sendmsg);
+DECL_TEMPLATE(solaris, sys_sendto);
+DECL_TEMPLATE(solaris, sys_getpeername);
+DECL_TEMPLATE(solaris, sys_getsockname);
+DECL_TEMPLATE(solaris, sys_getsockopt);
+DECL_TEMPLATE(solaris, sys_setsockopt);
+DECL_TEMPLATE(solaris, sys_lwp_mutex_register);
+DECL_TEMPLATE(solaris, sys_uucopy);
+DECL_TEMPLATE(solaris, sys_umount2);
+
+DECL_TEMPLATE(solaris, fast_gethrtime);
+DECL_TEMPLATE(solaris, fast_gethrvtime);
+DECL_TEMPLATE(solaris, fast_gethrestime);
+#if defined(SOLARIS_GETHRT_FASTTRAP)
+DECL_TEMPLATE(solaris, fast_gethrt);
+#endif /* SOLARIS_GETHRT_FASTTRAP */
+#if defined(SOLARIS_GETZONEOFFSET_FASTTRAP)
+DECL_TEMPLATE(solaris, fast_getzoneoffset);
+#endif /* SOLARIS_GETZONEOFFSET_FASTTRAP */
+
+/* implementation */
+PRE(sys_exit)
+{
+   /* void exit(int status); */
+   ThreadId t;
+
+   PRINT("sys_exit( %ld )", SARG1);
+   PRE_REG_READ1(void, "exit", int, status);
+
+   for (t = 1; t < VG_N_THREADS; t++) {
+      if (VG_(threads)[t].status == VgTs_Empty)
+         continue;
+
+      VG_(threads)[t].exitreason = VgSrc_ExitProcess;
+      VG_(threads)[t].os_state.exitcode = ARG1;
+
+      /* Unblock it, if blocked. */
+      if (t != tid)
+         VG_(get_thread_out_of_syscall)(t);
+   }
+
+   /* We have to claim the syscall already succeeded. */
+   SET_STATUS_Success(0);
+}
+
+#if defined(SOLARIS_SPAWN_SYSCALL)
+static Bool spawn_pre_check_kfa(ThreadId tid, SyscallStatus *status,
+                                vki_kfile_attr_t *kfa)
+{
+   PRE_FIELD_READ("spawn(attrs->kfa_size)", kfa->kfa_size);
+   PRE_FIELD_READ("spawn(attrs->kfa_type)", kfa->kfa_type);
+
+   if (ML_(safe_to_deref)(kfa, kfa->kfa_size)) {
+      switch (kfa->kfa_type) {
+      case VKI_FA_DUP2:
+         PRE_FIELD_READ("spawn(attrs->kfa_filedes)", kfa->kfa_filedes);
+         PRE_FIELD_READ("spawn(attrs->kfa_newfiledes)", kfa->kfa_newfiledes);
+         if (!ML_(fd_allowed)(kfa->kfa_filedes, "spawn(dup2)", tid, False) ||
+             !ML_(fd_allowed)(kfa->kfa_newfiledes, "spawn(dup2)", tid, False)) {
+            SET_STATUS_Failure(VKI_EBADF);
+            return False;
+         }
+         break;
+      case VKI_FA_CLOSE:
+         PRE_FIELD_READ("spawn(attrs->kfa_filedes)", kfa->kfa_filedes);
+         /* If doing -d style logging (which is to fd = 2 = stderr),
+            don't allow that filedes to be closed. See ML_(fd_allowed)(). */
+         if (!ML_(fd_allowed)(kfa->kfa_filedes, "spawn(close)", tid, False) ||
+             (kfa->kfa_filedes == 2 && VG_(debugLog_getLevel)() > 0)) {
+            SET_STATUS_Failure(VKI_EBADF);
+            return False;
+         }
+         break;
+      case VKI_FA_CLOSEFROM:
+         /* :TODO: All file descriptors greater than or equal to
+            kfa->kfa_filedes would have to be checked. */
+         VG_(unimplemented)("Support for spawn() with file attribute type "
+                            "FA_CLOSEFROM.");
+         break;
+      case VKI_FA_OPEN:
+         PRE_FIELD_READ("spawn(attrs->kfa_filedes)", kfa->kfa_filedes);
+         PRE_FIELD_READ("spawn(attrs->kfa_oflag)", kfa->kfa_oflag);
+         PRE_FIELD_READ("spawn(attrs->kfa_mode)", kfa->kfa_mode);
+         if (!ML_(fd_allowed)(kfa->kfa_filedes, "spawn(open)", tid, False)) {
+            SET_STATUS_Failure(VKI_EBADF);
+            return False;
+         }
+         /* fallthrough */
+      case VKI_FA_CHDIR:
+         PRE_FIELD_READ("spawn(attrs->kfa_pathsize)", kfa->kfa_pathsize);
+         if (kfa->kfa_pathsize != 0) {
+            PRE_MEM_RASCIIZ("spawn(attrs->kfa_data)", (Addr) kfa->kfa_data);
+         }
+         break;
+      default:
+         VG_(unimplemented)("Support for spawn() with file attribute type %u.",
+                            kfa->kfa_type);
+      }
+   }
+
+   return True;
+}
+
+PRE(sys_spawn)
+{
+   /* int spawn(char *path, void *attrs, size_t attrsize,
+                char *argenv, size_t aesize); */
+   PRINT("sys_spawn ( %#lx(%s), %#lx, %lu, %#lx, %lu )",
+         ARG1, (HChar *) ARG1, ARG2, ARG3, ARG4, ARG5);
+   PRE_REG_READ5(long, "spawn", const char *, path, void *, attrs,
+                 size_t, attrsize, char *, argenv, size_t, aesize);
+
+   /* First check input arguments. */
+   PRE_MEM_RASCIIZ("spawn(path)", ARG1);
+   if (ARG3 > 0) {
+      /*  --- vki_kspawn_attr_t --
+          | ksa_version          |
+          | ksa_size             |
+          | ksa_attr_off         |  -----| (only if != 0)
+          | ksa_attr_size        |       |
+          | ksa_path_off         |  =====|====| (only if != 0)
+          | ksa_path_size        |       |    |
+          | ksa_shell_off        |  -----|----|----| (only if != 0)
+          | ksa_shell_size       |       |    |    |
+          | ksa_data[0]          |       |    |    |
+          ------------------------       |    |    |
+          | vki_spawn_attr_t     |  <----|    |    |
+          ------------------------            |    |
+          | path                 |  <---------|    |
+          ------------------------                 |
+          | shell                |  <---------------
+          ------------------------
+          | file actions         |  (not included in ksa_size, only in ARG3)
+          ------------------------
+
+          ksa_size = sizeof(vki_kspawn_attr_t) + ksa_attr_size + ksa_path_size +
+                     ksa_shell_size
+          attrs_size (ARG3) = ksa_size + file actions size */
+
+      vki_kspawn_attr_t *attrs = (vki_kspawn_attr_t *) ARG2;
+      PRE_FIELD_READ("spawn(attrs->ksa_version)", attrs->ksa_version);
+      PRE_FIELD_READ("spawn(attrs->ksa_size)", attrs->ksa_size);
+      PRE_FIELD_READ("spawn(attrs->ksa_attr_off)", attrs->ksa_attr_off);
+      PRE_FIELD_READ("spawn(attrs->ksa_path_off)", attrs->ksa_path_off);
+      PRE_FIELD_READ("spawn(attrs->ksa_shell_off)", attrs->ksa_shell_off);
+
+      if (ML_(safe_to_deref)(attrs, sizeof(vki_kspawn_attr_t))) {
+         if (attrs->ksa_version != VKI_SPAWN_VERSION) {
+            VG_(unimplemented)("Support for spawn() with attributes "
+                               "version %u.", attrs->ksa_version);
+         }
+
+         if (attrs->ksa_attr_off != 0) {
+            PRE_FIELD_READ("spawn(attrs->ksa_attr_size)", attrs->ksa_attr_size);
+            vki_spawn_attr_t *sap =
+                (vki_spawn_attr_t *) ((Addr) attrs + attrs->ksa_attr_off);
+            PRE_MEM_READ("spawn(attrs->ksa_attr)",
+                         (Addr) sap, attrs->ksa_attr_size);
+            if (ML_(safe_to_deref)(sap, sizeof(vki_spawn_attr_t))) {
+               if (sap->sa_psflags & VKI_POSIX_SPAWN_SETVAMASK_NP) {
+                  VG_(unimplemented)("Support for spawn() with attributes flag "
+                                     "including POSIX_SPAWN_SETVAMASK_NP.");
+               }
+               /* paranoia */
+               Int rem = sap->sa_psflags & ~(
+                  VKI_POSIX_SPAWN_RESETIDS      | VKI_POSIX_SPAWN_SETPGROUP |
+                  VKI_POSIX_SPAWN_SETSIGDEF     | VKI_POSIX_SPAWN_SETSIGMASK |
+                  VKI_POSIX_SPAWN_SETSCHEDPARAM | VKI_POSIX_SPAWN_SETSCHEDULER |
+                  VKI_POSIX_SPAWN_SETSID_NP     | VKI_POSIX_SPAWN_SETVAMASK_NP |
+                  VKI_POSIX_SPAWN_SETSIGIGN_NP  | VKI_POSIX_SPAWN_NOSIGCHLD_NP |
+                  VKI_POSIX_SPAWN_WAITPID_NP    | VKI_POSIX_SPAWN_NOEXECERR_NP);
+               if (rem != 0) {
+                  VG_(unimplemented)("Support for spawn() with attributes flag "
+                                     "%#x.", sap->sa_psflags);
+               }
+            }
+         }
+
+         if (attrs->ksa_path_off != 0) {
+            PRE_FIELD_READ("spawn(attrs->ksa_path_size)", attrs->ksa_path_size);
+            PRE_MEM_RASCIIZ("spawn(attrs->ksa_path)",
+                            (Addr) attrs + attrs->ksa_path_off);
+         }
+
+         if (attrs->ksa_shell_off != 0) {
+            PRE_FIELD_READ("spawn(attrs->ksa_shell_size)",
+                           attrs->ksa_shell_size);
+            PRE_MEM_RASCIIZ("spawn(attrs->ksa_shell)",
+                            (Addr) attrs + attrs->ksa_shell_off);
+         }
+
+         vki_kfile_attr_t *kfa = (vki_kfile_attr_t *) (ARG2 + attrs->ksa_size);
+         while ((Addr) kfa < ARG2 + ARG3) {
+            if (spawn_pre_check_kfa(tid, status, kfa) == False) {
+               return;
+            }
+            kfa = (vki_kfile_attr_t *) ((Addr) kfa + kfa->kfa_size);
+         }
+      }
+   }
+   PRE_MEM_READ("spawn(argenv)", ARG4, ARG5);
+
+   /* Check that the name at least begins in client-accessible storage. */
+   if ((ARG1 == 0) || !ML_(safe_to_deref)((HChar *) ARG1, 1)) {
+      SET_STATUS_Failure(VKI_EFAULT);
+      return;
+   }
+
+   /* Check that attrs reside in client-accessible storage. */
+   if (ARG2 != 0) {
+      if (!VG_(am_is_valid_for_client)(ARG2, ARG3, VKI_PROT_READ)) {
+         SET_STATUS_Failure(VKI_EFAULT);
+         return;
+      }
+   }
+
+   /* Check that the argenv reside in client-accessible storage.
+      Solaris disallows to perform spawn() without any arguments & environment
+      variables specified. */
+   if ((ARG4 == 0) /* obviously bogus */ ||
+       !VG_(am_is_valid_for_client)(ARG4, ARG5, VKI_PROT_READ)) {
+      SET_STATUS_Failure(VKI_EFAULT);
+      return;
+   }
+
+   /* Copy existing attrs or create empty minimal ones. */
+   vki_kspawn_attr_t *attrs;
+   SizeT attrs_size;
+   if (ARG2 == 0) {
+      /* minimalistic kspawn_attr_t + spawn_attr_t */
+      attrs_size = sizeof(vki_kspawn_attr_t) + sizeof(vki_spawn_attr_t);
+      attrs = VG_(calloc)("syswrap.spawn.1", 1, attrs_size);
+      attrs->ksa_version = VKI_SPAWN_VERSION;
+      attrs->ksa_size = attrs_size;
+      attrs->ksa_attr_off = sizeof(vki_kspawn_attr_t);
+      attrs->ksa_attr_size = sizeof(vki_spawn_attr_t);
+   } else if (((vki_kspawn_attr_t *) ARG2)->ksa_attr_off == 0) {
+      /* existing kspawn_attr_t but missing spawn_attr_t */
+      attrs_size = ARG3 + sizeof(vki_spawn_attr_t);
+      attrs = VG_(calloc)("syswrap.spawn.2", 1, attrs_size);
+      VG_(memcpy)(attrs, (void *) ARG2, sizeof(vki_kspawn_attr_t));
+      SizeT file_actions_size = ARG3 - attrs->ksa_size;
+      attrs->ksa_size += sizeof(vki_spawn_attr_t);
+      attrs->ksa_attr_off = sizeof(vki_kspawn_attr_t);
+      attrs->ksa_attr_size = sizeof(vki_spawn_attr_t);
+      if (attrs->ksa_path_off != 0) {
+         VG_(memcpy)((HChar *) attrs + attrs->ksa_path_off +
+                     sizeof(vki_spawn_attr_t), (HChar *) ARG2 +
+                     attrs->ksa_path_off, attrs->ksa_path_size);
+         attrs->ksa_path_off += sizeof(vki_spawn_attr_t);
+      }
+      if (attrs->ksa_shell_off != 0) {
+         VG_(memcpy)((HChar *) attrs + attrs->ksa_shell_off +
+                     sizeof(vki_spawn_attr_t), (HChar *) ARG2 +
+                     attrs->ksa_shell_off, attrs->ksa_shell_size);
+         attrs->ksa_shell_off += sizeof(vki_spawn_attr_t);
+      }
+      if (file_actions_size > 0) {
+         VG_(memcpy)((HChar *) attrs + attrs_size - file_actions_size,
+                     (HChar *) ARG2 + ARG3 - file_actions_size,
+                     file_actions_size);
+      }
+   } else {
+      /* existing kspawn_attr_t + spawn_attr_t */
+      attrs_size = ARG3;
+      attrs = VG_(malloc)("syswrap.spawn.3", attrs_size);
+      VG_(memcpy)(attrs, (void *) ARG2, attrs_size);
+   }
+   vki_spawn_attr_t *spa = (vki_spawn_attr_t *) ((HChar *) attrs +
+                                                 attrs->ksa_attr_off);
+
+   /* Convert argv and envp parts of argenv into their separate XArray's.
+      Duplicate strings because argv and envp will be then modified. */
+   XArray *argv = VG_(newXA)(VG_(malloc), "syswrap.spawn.4",
+                             VG_(free), sizeof(HChar *));
+   XArray *envp = VG_(newXA)(VG_(malloc), "syswrap.spawn.5",
+                             VG_(free), sizeof(HChar *));
+
+   HChar *argenv = (HChar *) ARG4;
+   XArray *current_xa = argv;
+   while ((Addr) argenv < ARG4 + ARG5) {
+      if (*argenv == '\0') {
+         argenv += 1;
+         if (current_xa == argv) {
+            current_xa = envp;
+            if ((*argenv == '\0') && ((Addr) argenv == ARG4 + ARG5 - 1)) {
+               /* envp part is empty, it contained only {NULL}. */
+               break;
+            }
+         } else {
+            if ((Addr) argenv != ARG4 + ARG5) {
+               if (VG_(clo_trace_syscalls))
+                  VG_(debugLog)(3, "syswrap-solaris", "spawn: bogus argenv\n");
+               SET_STATUS_Failure(VKI_EINVAL);
+               goto exit;
+            }
+            break;
+         }
+      }
+
+      if (*argenv != '\1') {
+         if (VG_(clo_trace_syscalls))
+            VG_(debugLog)(3, "syswrap-solaris", "spawn: bogus argenv\n");
+         SET_STATUS_Failure(VKI_EINVAL);
+         goto exit;
+      }
+      argenv += 1;
+
+      HChar *duplicate = VG_(strdup)("syswrap.spawn.6", argenv);
+      VG_(addToXA)(current_xa, &duplicate);
+      argenv += VG_(strlen)(argenv) + 1;
+   }
+
+   /* Debug-only printing. */
+   if (0) {
+      VG_(printf)("\nARG1 = %#lx(%s)\n", ARG1, (HChar *) ARG1);
+      VG_(printf)("ARG4 (argv) = ");
+      for (Word i = 0; i < VG_(sizeXA)(argv); i++) {
+         VG_(printf)("%s ", *(HChar **) VG_(indexXA)(argv, i));
+      }
+
+      VG_(printf)("\nARG4 (envp) = ");
+      for (Word i = 0; i < VG_(sizeXA)(envp); i++) {
+         VG_(printf)("%s ", *(HChar **) VG_(indexXA)(envp, i));
+      }
+      VG_(printf)("\n");
+   }
+
+   /* Decide whether or not we want to trace the spawned child.
+      Omit the executable name itself from child_argv. */
+   const HChar **child_argv = VG_(malloc)("syswrap.spawn.7",
+                                     (VG_(sizeXA)(argv) - 1) * sizeof(HChar *));
+   for (Word i = 1; i < VG_(sizeXA)(argv); i++) {
+      child_argv[i - 1] = *(HChar **) VG_(indexXA)(argv, i);
+   }
+   Bool trace_this_child = VG_(should_we_trace_this_child)((HChar *) ARG1,
+                                                           child_argv);
+   VG_(free)(child_argv);
+
+   /* If we're tracing the child, and the launcher name looks bogus (possibly
+      because launcher.c couldn't figure it out, see comments therein) then we
+      have no option but to fail. */
+   if (trace_this_child &&
+       (!VG_(name_of_launcher) || VG_(name_of_launcher)[0] != '/')) {
+      SET_STATUS_Failure(VKI_ECHILD); /* "No child processes." */
+      goto exit;
+   }
+
+   /* Set up the child's exe path. */
+   const HChar *path = (const HChar *) ARG1;
+   const HChar *launcher_basename = NULL;
+   if (trace_this_child) {
+      /* We want to exec the launcher. */
+      path = VG_(name_of_launcher);
+      vg_assert(path != NULL);
+
+      launcher_basename = VG_(strrchr)(path, '/');
+      if ((launcher_basename == NULL) || (launcher_basename[1] == '\0')) {
+         launcher_basename = path;  /* hmm, tres dubious */
+      } else {
+         launcher_basename++;
+      }
+   }
+
+   /* Set up the child's environment.
+
+      Remove the valgrind-specific stuff from the environment so the child
+      doesn't get vgpreload_core.so, vgpreload_<tool>.so, etc. This is done
+      unconditionally, since if we are tracing the child, the child valgrind
+      will set up the appropriate client environment.
+
+      Then, if tracing the child, set VALGRIND_LIB for it. */
+   HChar **child_envp = VG_(calloc)("syswrap.spawn.8",
+                                    VG_(sizeXA)(envp) + 1, sizeof(HChar *));
+   for (Word i = 0; i < VG_(sizeXA)(envp); i++) {
+      child_envp[i] = *(HChar **) VG_(indexXA)(envp, i);
+   }
+   VG_(env_remove_valgrind_env_stuff)(child_envp, /* ro_strings */ False,
+                                      VG_(free));
+
+   /* Stuff was removed from child_envp, reflect that in envp XArray. */
+   VG_(dropTailXA)(envp, VG_(sizeXA)(envp));
+   for (UInt i = 0; child_envp[i] != NULL; i++) {
+      VG_(addToXA)(envp, &child_envp[i]);
+   }
+   VG_(free)(child_envp);
+
+   if (trace_this_child) {
+      /* Set VALGRIND_LIB in envp. */
+      SizeT len = VG_(strlen)(VALGRIND_LIB) + VG_(strlen)(VG_(libdir)) + 2;
+      HChar *valstr = VG_(malloc)("syswrap.spawn.9", len);
+      VG_(sprintf)(valstr, "%s=%s", VALGRIND_LIB, VG_(libdir));
+      VG_(addToXA)(envp, &valstr);
+   }
+
+   /* Set up the child's args. If not tracing it, they are left untouched.
+      Otherwise, they are:
+
+      [launcher_basename] ++ VG_(args_for_valgrind) ++ [ARG1] ++ ARG4[1..],
+
+      except that the first VG_(args_for_valgrind_noexecpass) args are
+      omitted. */
+   if (trace_this_child) {
+      vg_assert(VG_(args_for_valgrind) != NULL);
+      vg_assert(VG_(args_for_valgrind_noexecpass) >= 0);
+      vg_assert(VG_(args_for_valgrind_noexecpass)
+                   <= VG_(sizeXA)(VG_(args_for_valgrind)));
+
+      /* So what args will there be? Bear with me... */
+      /* ... launcher basename, ... */
+      HChar *duplicate = VG_(strdup)("syswrap.spawn.10", launcher_basename);
+      VG_(insertIndexXA)(argv, 0, &duplicate);
+
+      /* ... Valgrind's args, ... */
+      UInt v_args = VG_(sizeXA)(VG_(args_for_valgrind));
+      v_args -= VG_(args_for_valgrind_noexecpass);
+      for (Word i = VG_(args_for_valgrind_noexecpass);
+           i < VG_(sizeXA)(VG_(args_for_valgrind)); i++) {
+         duplicate = VG_(strdup)("syswrap.spawn.11",
+                           *(HChar **) VG_(indexXA)(VG_(args_for_valgrind), i));
+         VG_(insertIndexXA)(argv, 1 + i, &duplicate);
+      }
+
+      /* ... name of client executable, ... */
+      duplicate = VG_(strdup)("syswrap.spawn.12", (HChar *) ARG1);
+      VG_(insertIndexXA)(argv, 1 + v_args, &duplicate);
+
+      /* ... and args for client executable (without [0]). */
+      duplicate = *(HChar **) VG_(indexXA)(argv, 1 + v_args + 1);
+      VG_(free)(duplicate);
+      VG_(removeIndexXA)(argv, 1 + v_args + 1);
+   }
+
+   /* Debug-only printing. */
+   if (0) {
+      VG_(printf)("\npath = %s\n", path);
+      VG_(printf)("argv = ");
+      for (Word i = 0; i < VG_(sizeXA)(argv); i++) {
+         VG_(printf)("%s ", *(HChar **) VG_(indexXA)(argv, i));
+      }
+
+      VG_(printf)("\nenvp = ");
+      for (Word i = 0; i < VG_(sizeXA)(envp); i++) {
+         VG_(printf)("%s ", *(HChar **) VG_(indexXA)(envp, i));
+      }
+      VG_(printf)("\n");
+   }
+
+   /* Set the signal state up for spawned child.
+
+      Signals set to be caught are equivalent to signals set to the default
+      action, from the child's perspective.
+
+      Therefore query SCSS and prepare default (DFL) and ignore (IGN) signal
+      sets. Then combine these sets with those passed from client, if flags
+      POSIX_SPAWN_SETSIGDEF, or POSIX_SPAWN_SETSIGIGN_NP have been specified.
+   */
+   vki_sigset_t sig_default;
+   vki_sigset_t sig_ignore;
+   VG_(sigemptyset)(&sig_default);
+   VG_(sigemptyset)(&sig_ignore);
+   for (Int i = 1; i < VG_(max_signal); i++) {
+      vki_sigaction_fromK_t sa;
+      VG_(do_sys_sigaction)(i, NULL, &sa); /* query SCSS */
+      if (sa.sa_handler == VKI_SIG_IGN) {
+         VG_(sigaddset)(&sig_ignore, i);
+      } else {
+         VG_(sigaddset)(&sig_default, i);
+      }
+   }
+
+   if (spa->sa_psflags & VKI_POSIX_SPAWN_SETSIGDEF) {
+      VG_(sigaddset_from_set)(&spa->sa_sigdefault, &sig_default);
+   } else {
+      spa->sa_psflags |= VKI_POSIX_SPAWN_SETSIGDEF;
+      spa->sa_sigdefault = sig_default;
+   }
+
+   if (spa->sa_psflags & VKI_POSIX_SPAWN_SETSIGIGN_NP) {
+      VG_(sigaddset_from_set)(&spa->sa_sigignore, &sig_ignore);
+   } else {
+      spa->sa_psflags |= VKI_POSIX_SPAWN_SETSIGIGN_NP;
+      spa->sa_sigignore = sig_ignore;
+   }
+
+   /* Set the signal mask for spawned child.
+
+      Analogous to signal handlers: query SCSS for blocked signals mask
+      and combine this mask with that passed from client, if flag
+      POSIX_SPAWN_SETSIGMASK has been specified. */
+   vki_sigset_t *sigmask = &VG_(get_ThreadState)(tid)->sig_mask;
+   if (spa->sa_psflags & VKI_POSIX_SPAWN_SETSIGMASK) {
+      VG_(sigaddset_from_set)(&spa->sa_sigmask, sigmask);
+   } else {
+      spa->sa_psflags |= VKI_POSIX_SPAWN_SETSIGMASK;
+      spa->sa_sigmask = *sigmask;
+   }
+
+   /* Lastly, reconstruct argenv from argv + envp. */
+   SizeT argenv_size = 1 + 1;
+   for (Word i = 0; i < VG_(sizeXA)(argv); i++) {
+      argenv_size += VG_(strlen)(*(HChar **) VG_(indexXA)(argv, i)) + 2;
+   }
+   for (Word i = 0; i < VG_(sizeXA)(envp); i++) {
+      argenv_size += VG_(strlen)(*(HChar **) VG_(indexXA)(envp, i)) + 2;
+   }
+
+   argenv = VG_(malloc)("syswrap.spawn.13", argenv_size);
+   HChar *current = argenv;
+#define COPY_CHAR_TO_ARGENV(dst, character) \
+   do {                                     \
+      *(dst) = character;                   \
+      (dst) += 1;                           \
+   } while (0)
+#define COPY_STRING_TO_ARGENV(dst, src)       \
+   do {                                       \
+      COPY_CHAR_TO_ARGENV(dst, '\1');         \
+      SizeT src_len = VG_(strlen)((src)) + 1; \
+      VG_(memcpy)((dst), (src), src_len);     \
+      (dst) += src_len;                       \
+   } while (0)
+
+   for (Word i = 0; i < VG_(sizeXA)(argv); i++) {
+      COPY_STRING_TO_ARGENV(current, *(HChar **) VG_(indexXA)(argv, i));
+   }
+   COPY_CHAR_TO_ARGENV(current, '\0');
+   for (Word i = 0; i < VG_(sizeXA)(envp); i++) {
+      COPY_STRING_TO_ARGENV(current, *(HChar **) VG_(indexXA)(envp, i));
+   }
+   COPY_CHAR_TO_ARGENV(current, '\0');
+   vg_assert(current == argenv + argenv_size);
+#undef COPY_CHAR_TO_ARGENV
+#undef COPY_STRING_TOARGENV
+
+   /* HACK: Temporarily restore the DATA rlimit for spawned child.
+      This is a terrible hack to provide sensible brk limit for child. */
+   VG_(setrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data));
+
+   /* Actual spawn() syscall. */
+   SysRes res = VG_(do_syscall5)(__NR_spawn, (UWord) path, (UWord) attrs,
+                                 attrs_size, (UWord) argenv, argenv_size);
+   SET_STATUS_from_SysRes(res);
+   VG_(free)(argenv);
+
+   /* Restore DATA rlimit back to its previous value set in m_main.c. */
+   struct vki_rlimit zero = { 0, 0 };
+   zero.rlim_max = VG_(client_rlimit_data).rlim_max;
+   VG_(setrlimit)(VKI_RLIMIT_DATA, &zero);
+
+   if (SUCCESS) {
+      PRINT("   spawn: process %d spawned child %ld\n", VG_(getpid)(), RES);
+   }
+
+exit:
+   VG_(free)(attrs);
+   for (Word i = 0; i < VG_(sizeXA)(argv); i++) {
+      VG_(free)(*(HChar **) VG_(indexXA)(argv, i));
+   }
+   for (Word i = 0; i < VG_(sizeXA)(envp); i++) {
+      VG_(free)(*(HChar **) VG_(indexXA)(envp, i));
+   }
+   VG_(deleteXA)(argv);
+   VG_(deleteXA)(envp);
+}
+#endif /* SOLARIS_SPAWN_SYSCALL */
+
+/* Handles the case where the open is of /proc/self/psinfo or
+   /proc/<pid>/psinfo. Fetch fresh contents into psinfo_t,
+   fake fname, psargs, argc and argv. Write the structure to the fake
+   file we cooked up at startup (in m_main) and give out a copy of this
+   fd. Also seek the cloned fd back to the start. */
+static Bool handle_psinfo_open(SyscallStatus *status,
+                               Bool use_openat,
+                               const HChar *filename,
+                               Int arg1, UWord arg3, UWord arg4)
+{
+   if (!ML_(safe_to_deref)((const void *) filename, 1))
+      return False;
+
+   HChar name[VKI_PATH_MAX];    // large enough
+   VG_(sprintf)(name, "/proc/%d/psinfo", VG_(getpid)());
+
+   if (!VG_STREQ(filename, name) && !VG_STREQ(filename, "/proc/self/psinfo"))
+      return False;
+
+   /* Use original arguments to open() or openat(). */
+   SysRes sres;
+#if defined(SOLARIS_OLD_SYSCALLS)
+   if (use_openat)
+      sres = VG_(do_syscall4)(SYS_openat, arg1, (UWord) filename,
+                              arg3, arg4);
+   else
+      sres = VG_(do_syscall3)(SYS_open, (UWord) filename, arg3, arg4);
+#else
+   vg_assert(use_openat == True);
+   sres = VG_(do_syscall4)(SYS_openat, arg1, (UWord) filename,
+                           arg3, arg4);
+#endif /* SOLARIS_OLD_SYSCALLS */
+
+   if (sr_isError(sres)) {
+      SET_STATUS_from_SysRes(sres);
+      return True;
+   }
+   Int fd = sr_Res(sres);
+
+   vki_psinfo_t psinfo;
+   sres = VG_(do_syscall3)(SYS_read, fd, (UWord) &psinfo, sizeof(psinfo));
+   if (sr_isError(sres)) {
+      SET_STATUS_from_SysRes(sres);
+      VG_(close)(fd);
+      return True;
+   }
+   if (sr_Res(sres) != sizeof(psinfo)) {
+      SET_STATUS_Failure(VKI_ENODATA);
+      VG_(close)(fd);
+      return True;
+   }
+
+   VG_(close)(fd);
+
+   VG_(client_fname)(psinfo.pr_fname, sizeof(psinfo.pr_fname), True);
+   VG_(client_cmd_and_args)(psinfo.pr_psargs, sizeof(psinfo.pr_psargs));
+
+   Addr *ptr = (Addr *) VG_(get_initial_client_SP)();
+   psinfo.pr_argc = *ptr++;
+   psinfo.pr_argv = (Addr) ptr;
+
+   sres = VG_(do_syscall4)(SYS_pwrite, VG_(cl_psinfo_fd),
+                           (UWord) &psinfo, sizeof(psinfo), 0);
+   if (sr_isError(sres)) {
+      SET_STATUS_from_SysRes(sres);
+      return True;
+   }
+
+   sres = VG_(dup)(VG_(cl_psinfo_fd));
+   SET_STATUS_from_SysRes(sres);
+   if (!sr_isError(sres)) {
+      OffT off = VG_(lseek)(sr_Res(sres), 0, VKI_SEEK_SET);
+      if (off < 0)
+         SET_STATUS_Failure(VKI_EMFILE);
+   }
+
+   return True;
+}
+
+#if defined(SOLARIS_PROC_CMDLINE)
+/* Handles the case where the open is of /proc/self/cmdline or
+   /proc/<pid>/cmdline. Just give it a copy of VG_(cl_cmdline_fd) for the
+   fake file we cooked up at startup (in m_main).  Also, seek the
+   cloned fd back to the start. */
+static Bool handle_cmdline_open(SyscallStatus *status, const HChar *filename)
+{
+   if (!ML_(safe_to_deref)((const void *) filename, 1))
+      return False;
+
+   HChar name[VKI_PATH_MAX];    // large enough
+   VG_(sprintf)(name, "/proc/%d/cmdline", VG_(getpid)());
+
+   if (!VG_STREQ(filename, name) && !VG_STREQ(filename, "/proc/self/cmdline"))
+      return False;
+
+   SysRes sres = VG_(dup)(VG_(cl_cmdline_fd));
+   SET_STATUS_from_SysRes(sres);
+   if (!sr_isError(sres)) {
+      OffT off = VG_(lseek)(sr_Res(sres), 0, VKI_SEEK_SET);
+      if (off < 0)
+         SET_STATUS_Failure(VKI_EMFILE);
+   }
+
+   return True;
+}
+#endif /* SOLARIS_PROC_CMDLINE */
+
+
+#if defined(SOLARIS_OLD_SYSCALLS)
+PRE(sys_open)
+{
+   /* int open(const char *filename, int flags);
+      int open(const char *filename, int flags, mode_t mode); */
+
+   if (ARG2 & VKI_O_CREAT) {
+      /* 3-arg version */
+      PRINT("sys_open ( %#lx(%s), %ld, %ld )", ARG1, (HChar *) ARG1,
+            SARG2, ARG3);
+      PRE_REG_READ3(long, "open", const char *, filename,
+                    int, flags, vki_mode_t, mode);
+   } else {
+      /* 2-arg version */
+      PRINT("sys_open ( %#lx(%s), %ld )", ARG1, (HChar *) ARG1, SARG2);
+      PRE_REG_READ2(long, "open", const char *, filename, int, flags);
+   }
+
+   PRE_MEM_RASCIIZ("open(filename)", ARG1);
+
+   if (ML_(handle_auxv_open)(status, (const HChar*)ARG1, ARG2))
+      return;
+
+   if (handle_psinfo_open(status, False /*use_openat*/, (const HChar*)ARG1, 0,
+                          ARG2, ARG3))
+      return;
+
+   *flags |= SfMayBlock;
+}
+
+POST(sys_open)
+{
+   if (!ML_(fd_allowed)(RES, "open", tid, True)) {
+      VG_(close)(RES);
+      SET_STATUS_Failure(VKI_EMFILE);
+   } else if (VG_(clo_track_fds))
+      ML_(record_fd_open_with_given_name)(tid, RES, (HChar *) ARG1);
+}
+#endif /* SOLARIS_OLD_SYSCALLS */
+
+PRE(sys_close)
+{
+   WRAPPER_PRE_NAME(generic, sys_close)(tid, layout, arrghs, status,
+                                        flags);
+}
+
+POST(sys_close)
+{
+   WRAPPER_POST_NAME(generic, sys_close)(tid, arrghs, status);
+   door_revoke(tid, ARG1);
+   /* Possibly an explicitly open'ed client door fd was just closed.
+      Generic sys_close wrapper calls this only if VG_(clo_track_fds) = True. */
+   if (!VG_(clo_track_fds))
+      ML_(record_fd_close)(ARG1);
+}
+
+PRE(sys_linkat)
+{
+   /* int linkat(int fd1, const char *path1, int fd2,
+                 const char *path2, int flag);
+    */
+
+   /* Interpret the first and third arguments as 32-bit values even on 64-bit
+      architecture. This is different from Linux, for example, where glibc
+      sign-extends them. */
+   Int fd1 = (Int) ARG1;
+   Int fd2 = (Int) ARG3;
+
+   PRINT("sys_linkat ( %d, %#lx(%s), %d, %#lx(%s), %ld )",
+         fd1, ARG2, (HChar *) ARG2, fd2, ARG4, (HChar *) ARG4, SARG5);
+   PRE_REG_READ5(long, "linkat", int, fd1, const char *, path1,
+                 int, fd2, const char *, path2, int, flags);
+   PRE_MEM_RASCIIZ("linkat(path1)", ARG2);
+   PRE_MEM_RASCIIZ("linkat(path2)", ARG4);
+
+   /* Be strict but ignore fd1/fd2 for absolute path1/path2. */
+   if (fd1 != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd1, "linkat", tid, False)) {
+      SET_STATUS_Failure(VKI_EBADF);
+   }
+   if (fd2 != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG4, 1)
+       && ((HChar *) ARG4)[0] != '/'
+       && !ML_(fd_allowed)(fd2, "linkat", tid, False)) {
+      SET_STATUS_Failure(VKI_EBADF);
+   }
+
+   *flags |= SfMayBlock;
+}
+
+PRE(sys_symlinkat)
+{
+   /* int symlinkat(const char *path1, int fd, const char *path2); */
+
+   /* Interpret the second argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG2;
+
+   PRINT("sys_symlinkat ( %#lx(%s), %d, %#lx(%s) )",
+         ARG1, (HChar *) ARG1, fd, ARG3, (HChar *) ARG3);
+   PRE_REG_READ3(long, "symlinkat", const char *, path1, int, fd,
+                 const char *, path2);
+   PRE_MEM_RASCIIZ("symlinkat(path1)", ARG1);
+   PRE_MEM_RASCIIZ("symlinkat(path2)", ARG3);
+
+   /* Be strict but ignore fd for absolute path2. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG3, 1)
+       && ((HChar *) ARG3)[0] != '/'
+       && !ML_(fd_allowed)(fd, "symlinkat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+
+   *flags |= SfMayBlock;
+}
+
+PRE(sys_time)
+{
+   /* time_t time(); */
+   PRINT("sys_time ( )");
+   PRE_REG_READ0(long, "time");
+}
+
+/* Data segment for brk (heap). It is an expandable anonymous mapping
+   abutting a 1-page reservation. The data segment starts at VG_(brk_base)
+   and runs up to VG_(brk_limit). None of these two values have to be
+   page-aligned.
+   Initial data segment is established (see initimg-solaris.c for rationale):
+   - directly during client program image initialization,
+   - or on demand when the executed program is the runtime linker itself,
+     after it has loaded its target dynamic executable (see PRE(sys_mmapobj)),
+     or when the first brk() syscall is made.
+
+   Notable facts:
+   - VG_(brk_base) is not page aligned; does not move
+   - VG_(brk_limit) moves between [VG_(brk_base), data segment end]
+   - data segment end is always page aligned
+   - right after data segment end is 1-page reservation
+
+            |      heap           | 1 page
+     +------+------+--------------+-------+
+     | BSS  | anon |   anon       | resvn |
+     +------+------+--------------+-------+
+
+            ^      ^        ^    ^
+            |      |        |    |
+            |      |        |    data segment end
+            |      |        VG_(brk_limit) -- no alignment constraint
+            |      brk_base_pgup -- page aligned
+            VG_(brk_base) -- not page aligned -- does not move
+
+   Because VG_(brk_base) is not page-aligned and is initially located within
+   pre-established BSS (data) segment, special care has to be taken in the code
+   below to handle this feature.
+
+   Reservation segment is used to protect the data segment merging with
+   a pre-existing segment. This should be no problem because address space
+   manager ensures that requests for client address space are satisfied from
+   the highest available addresses. However when memory is low, data segment
+   can meet with mmap'ed objects and the reservation segment separates these.
+   The page that contains VG_(brk_base) is already allocated by the program's
+   loaded data segment. The brk syscall wrapper handles this special case. */
+
+static Bool brk_segment_established = False;
+
+/* Establishes initial data segment for brk (heap). */
+Bool VG_(setup_client_dataseg)(void)
+{
+   /* Segment size is initially at least 1 MB and at most 8 MB. */
+   SizeT m1 = 1024 * 1024;
+   SizeT m8 = 8 * m1;
+   SizeT initial_size = VG_(client_rlimit_data).rlim_cur;
+   VG_(debugLog)(1, "syswrap-solaris", "Setup client data (brk) segment "
+                                       "at %#lx\n", VG_(brk_base));
+   if (initial_size < m1)
+      initial_size = m1;
+   if (initial_size > m8)
+      initial_size = m8;
+   initial_size = VG_PGROUNDUP(initial_size);
+
+   Addr anon_start = VG_PGROUNDUP(VG_(brk_base));
+   SizeT anon_size = VG_PGROUNDUP(initial_size);
+   Addr resvn_start = anon_start + anon_size;
+   SizeT resvn_size = VKI_PAGE_SIZE;
+
+   vg_assert(VG_IS_PAGE_ALIGNED(anon_size));
+   vg_assert(VG_IS_PAGE_ALIGNED(resvn_size));
+   vg_assert(VG_IS_PAGE_ALIGNED(anon_start));
+   vg_assert(VG_IS_PAGE_ALIGNED(resvn_start));
+   vg_assert(VG_(brk_base) == VG_(brk_limit));
+
+   /* Find the loaded data segment and remember its protection. */
+   const NSegment *seg = VG_(am_find_nsegment)(VG_(brk_base) - 1);
+   vg_assert(seg != NULL);
+   UInt prot = (seg->hasR ? VKI_PROT_READ : 0)
+             | (seg->hasW ? VKI_PROT_WRITE : 0)
+             | (seg->hasX ? VKI_PROT_EXEC : 0);
+
+   /* Try to create the data segment and associated reservation where
+      VG_(brk_base) says. */
+   Bool ok = VG_(am_create_reservation)(resvn_start, resvn_size, SmLower,
+                                        anon_size);
+   if (!ok) {
+      /* That didn't work, we're hosed. */
+      return False;
+   }
+
+   /* Map the data segment. */
+   SysRes sres = VG_(am_mmap_anon_fixed_client)(anon_start, anon_size, prot);
+   vg_assert(!sr_isError(sres));
+   vg_assert(sr_Res(sres) == anon_start);
+
+   brk_segment_established = True;
+   return True;
+}
+
+/* Tell the tool about the client data segment and then kill it which will
+   make it initially inaccessible/unaddressable. */
+void VG_(track_client_dataseg)(ThreadId tid)
+{
+   const NSegment *seg = VG_(am_find_nsegment)(VG_PGROUNDUP(VG_(brk_base)));
+   vg_assert(seg != NULL);
+   vg_assert(seg->kind == SkAnonC);
+
+   VG_TRACK(new_mem_brk, VG_(brk_base), seg->end + 1 - VG_(brk_base), tid);
+   VG_TRACK(die_mem_brk, VG_(brk_base), seg->end + 1 - VG_(brk_base));
+}
+
+PRE(sys_brk)
+{
+   /* unsigned long brk(caddr_t end_data_segment); */
+   /* The Solaris kernel returns 0 on success.
+      In addition to this, brk(0) returns current data segment end.  This is
+      very different from the Linux kernel, for example. */
+
+   Addr old_brk_limit = VG_(brk_limit);
+   /* If VG_(brk_base) is page-aligned then old_brk_base_pgup is equal to
+      VG_(brk_base). */
+   Addr old_brk_base_pgup = VG_PGROUNDUP(VG_(brk_base));
+   Addr new_brk = ARG1;
+   const NSegment *seg, *seg2;
+
+   PRINT("sys_brk ( %#lx )", ARG1);
+   PRE_REG_READ1(unsigned long, "brk", vki_caddr_t, end_data_segment);
+
+   if (new_brk == 0) {
+      /* brk(0) - specific to Solaris 11 only. */
+      SET_STATUS_Success(old_brk_limit);
+      return;
+   }
+
+   /* Handle some trivial cases. */
+   if (new_brk == old_brk_limit) {
+      SET_STATUS_Success(0);
+      return;
+   }
+   if (new_brk < VG_(brk_base)) {
+      /* Clearly impossible. */
+      SET_STATUS_Failure(VKI_ENOMEM);
+      return;
+   }
+   if (new_brk - VG_(brk_base) > VG_(client_rlimit_data).rlim_cur) {
+      SET_STATUS_Failure(VKI_ENOMEM);
+      return;
+   }
+
+   /* The brk base and limit must have been already set. */
+   vg_assert(VG_(brk_base) != -1);
+   vg_assert(VG_(brk_limit) != -1);
+
+   if (!brk_segment_established) {
+      /* Stay sane (because there should have been no brk activity yet). */
+      vg_assert(VG_(brk_base) == VG_(brk_limit));
+
+      if (!VG_(setup_client_dataseg)()) {
+         VG_(umsg)("Cannot map memory to initialize brk segment in thread #%d "
+                   "at %#lx\n", tid, VG_(brk_base));
+         SET_STATUS_Failure(VKI_ENOMEM);
+         return;
+      }
+
+      VG_(track_client_dataseg)(tid);
+   }
+
+   if (new_brk < old_brk_limit) {
+      /* Shrinking the data segment.  Be lazy and don't munmap the excess
+         area. */
+      if (old_brk_limit > old_brk_base_pgup) {
+         /* Calculate new local brk (=MAX(new_brk, old_brk_base_pgup)). */
+         Addr new_brk_local;
+         if (new_brk < old_brk_base_pgup)
+            new_brk_local = old_brk_base_pgup;
+         else
+            new_brk_local = new_brk;
+
+         /* Find a segment at the beginning and at the end of the shrinked
+            range. */
+         seg = VG_(am_find_nsegment)(new_brk_local);
+         seg2 = VG_(am_find_nsegment)(old_brk_limit - 1);
+         vg_assert(seg);
+         vg_assert(seg->kind == SkAnonC);
+         vg_assert(seg2);
+         vg_assert(seg == seg2);
+
+         /* Discard any translations and zero-out the area. */
+         if (seg->hasT)
+            VG_(discard_translations)(new_brk_local,
+                                      old_brk_limit - new_brk_local,
+                                      "do_brk(shrink)");
+        /* Since we're being lazy and not unmapping pages, we have to zero out
+           the area, so that if the area later comes back into circulation, it
+           will be filled with zeroes, as if it really had been unmapped and
+           later remapped.  Be a bit paranoid and try hard to ensure we're not
+           going to segfault by doing the write - check that segment is
+           writable. */
+         if (seg->hasW)
+            VG_(memset)((void*)new_brk_local, 0, old_brk_limit - new_brk_local);
+      }
+
+      /* Fixup code if the VG_(brk_base) is not page-aligned. */
+      if (new_brk < old_brk_base_pgup) {
+         /* Calculate old local brk (=MIN(old_brk_limit, old_brk_base_up)). */
+         Addr old_brk_local;
+         if (old_brk_limit < old_brk_base_pgup)
+            old_brk_local = old_brk_limit;
+         else
+            old_brk_local = old_brk_base_pgup;
+
+         /* Find a segment at the beginning and at the end of the shrinked
+            range. */
+         seg = VG_(am_find_nsegment)(new_brk);
+         seg2 = VG_(am_find_nsegment)(old_brk_local - 1);
+         vg_assert(seg);
+         vg_assert(seg2);
+         vg_assert(seg == seg2);
+
+         /* Discard any translations and zero-out the area. */
+         if (seg->hasT)
+            VG_(discard_translations)(new_brk, old_brk_local - new_brk,
+                                      "do_brk(shrink)");
+         if (seg->hasW)
+            VG_(memset)((void*)new_brk, 0, old_brk_local - new_brk);
+      }
+
+      /* We are done, update VG_(brk_limit), tell the tool about the changes,
+         and leave. */
+      VG_(brk_limit) = new_brk;
+      VG_TRACK(die_mem_brk, new_brk, old_brk_limit - new_brk);
+      SET_STATUS_Success(0);
+      return;
+   }
+
+   /* We are expanding the brk segment. */
+
+   /* Fixup code if the VG_(brk_base) is not page-aligned. */
+   if (old_brk_limit < old_brk_base_pgup) {
+      /* Calculate new local brk (=MIN(new_brk, old_brk_base_pgup)). */
+      Addr new_brk_local;
+      if (new_brk < old_brk_base_pgup)
+         new_brk_local = new_brk;
+      else
+         new_brk_local = old_brk_base_pgup;
+
+      /* Find a segment at the beginning and at the end of the expanded
+         range. */
+      seg = VG_(am_find_nsegment)(old_brk_limit);
+      seg2 = VG_(am_find_nsegment)(new_brk_local - 1);
+      vg_assert(seg);
+      vg_assert(seg2);
+      vg_assert(seg == seg2);
+
+      /* Nothing else to do. */
+   }
+
+   if (new_brk > old_brk_base_pgup) {
+      /* Calculate old local brk (=MAX(old_brk_limit, old_brk_base_pgup)). */
+      Addr old_brk_local;
+      if (old_brk_limit < old_brk_base_pgup)
+         old_brk_local = old_brk_base_pgup;
+      else
+         old_brk_local = old_brk_limit;
+
+      /* Find a segment at the beginning of the expanded range. */
+      if (old_brk_local > old_brk_base_pgup)
+         seg = VG_(am_find_nsegment)(old_brk_local - 1);
+      else
+         seg = VG_(am_find_nsegment)(old_brk_local);
+      vg_assert(seg);
+      vg_assert(seg->kind == SkAnonC);
+
+      /* Find the 1-page reservation segment. */
+      seg2 = VG_(am_next_nsegment)(seg, True/*forwards*/);
+      vg_assert(seg2);
+      vg_assert(seg2->kind == SkResvn);
+      vg_assert(seg->end + 1 == seg2->start);
+      vg_assert(seg2->end - seg2->start + 1 == VKI_PAGE_SIZE);
+
+      if (new_brk <= seg2->start) {
+         /* Still fits within the existing anon segment, nothing to do. */
+      } else {
+         /* Data segment limit was already checked. */
+         Addr anon_start = seg->end + 1;
+         Addr resvn_start = VG_PGROUNDUP(new_brk);
+         SizeT anon_size = resvn_start - anon_start;
+         SizeT resvn_size = VKI_PAGE_SIZE;
+         SysRes sres;
+
+         vg_assert(VG_IS_PAGE_ALIGNED(anon_size));
+         vg_assert(VG_IS_PAGE_ALIGNED(resvn_size));
+         vg_assert(VG_IS_PAGE_ALIGNED(anon_start));
+         vg_assert(VG_IS_PAGE_ALIGNED(resvn_start));
+         vg_assert(anon_size > 0);
+
+         /* Address space manager checks for free address space for us;
+            reservation would not be otherwise created. */
+         Bool ok = VG_(am_create_reservation)(resvn_start, resvn_size, SmLower,
+                                              anon_size);
+         if (!ok) {
+            VG_(umsg)("brk segment overflow in thread #%d: can't grow "
+                      "to %#lx\n", tid, new_brk);
+            SET_STATUS_Failure(VKI_ENOMEM);
+            return;
+         }
+
+         /* Establish protection from the existing segment. */
+         UInt prot = (seg->hasR ? VKI_PROT_READ : 0)
+                     | (seg->hasW ? VKI_PROT_WRITE : 0)
+                     | (seg->hasX ? VKI_PROT_EXEC : 0);
+
+         /* Address space manager will merge old and new data segments. */
+         sres = VG_(am_mmap_anon_fixed_client)(anon_start, anon_size, prot);
+         if (sr_isError(sres)) {
+            VG_(umsg)("Cannot map memory to grow brk segment in thread #%d "
+                      "to %#lx\n", tid, new_brk);
+            SET_STATUS_Failure(VKI_ENOMEM);
+            return;
+         }
+         vg_assert(sr_Res(sres) == anon_start);
+
+         seg = VG_(am_find_nsegment)(old_brk_base_pgup);
+         seg2 = VG_(am_find_nsegment)(VG_PGROUNDUP(new_brk) - 1);
+         vg_assert(seg);
+         vg_assert(seg2);
+         vg_assert(seg == seg2);
+         vg_assert(new_brk <= seg->end + 1);
+      }
+   }
+
+   /* We are done, update VG_(brk_limit), tell the tool about the changes, and
+      leave. */
+   VG_(brk_limit) = new_brk;
+   VG_TRACK(new_mem_brk, old_brk_limit, new_brk - old_brk_limit, tid);
+   SET_STATUS_Success(0);
+}
+
+PRE(sys_stat)
+{
+   /* int stat(const char *path, struct stat *buf); */
+   /* Note: We could use here the sys_newstat generic wrapper, but the 'new'
+      in its name is rather confusing in the Solaris context, thus we provide
+      our own wrapper. */
+   PRINT("sys_stat ( %#lx(%s), %#lx )", ARG1, (HChar *) ARG1, ARG2);
+   PRE_REG_READ2(long, "stat", const char *, path, struct stat *, buf);
+
+   PRE_MEM_RASCIIZ("stat(path)", ARG1);
+   PRE_MEM_WRITE("stat(buf)", ARG2, sizeof(struct vki_stat));
+}
+
+POST(sys_stat)
+{
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_stat));
+}
+
+PRE(sys_lseek)
+{
+   /* off_t lseek(int fildes, off_t offset, int whence); */
+   PRINT("sys_lseek ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+   PRE_REG_READ3(long, "lseek", int, fildes, vki_off_t, offset, int, whence);
+
+   /* Stay sane. */
+   if (!ML_(fd_allowed)(ARG1, "lseek", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_mount)
+{
+   /* int mount(const char *spec, const char *dir, int mflag, char *fstype,
+                char *dataptr, int datalen, char *optptr, int optlen); */
+   *flags |= SfMayBlock;
+   if (ARG3 & VKI_MS_OPTIONSTR) {
+      /* 8-argument mount */
+      PRINT("sys_mount ( %#lx(%s), %#lx(%s), %ld, %#lx(%s), %#lx, %ld, "
+            "%#lx(%s), %ld )", ARG1, (HChar *) ARG1, ARG2, (HChar *) ARG2, SARG3,
+            ARG4, (HChar *) ARG4, ARG5, ARG6, ARG7, (HChar *) ARG7, SARG8);
+      PRE_REG_READ8(long, "mount", const char *, spec, const char *, dir,
+                    int, mflag, char *, fstype, char *, dataptr, int, datalen,
+                    char *, optptr, int, optlen);
+   }
+   else if (ARG3 & VKI_MS_DATA) {
+      /* 6-argument mount */
+      PRINT("sys_mount ( %#lx(%s), %#lx(%s), %ld, %#lx(%s), %#lx, %ld )",
+            ARG1, (HChar *) ARG1, ARG2, (HChar *) ARG2, SARG3, ARG4,
+            (HChar *) ARG4, ARG5, SARG6);
+      PRE_REG_READ6(long, "mount", const char *, spec, const char *, dir,
+                    int, mflag, char *, fstype, char *, dataptr,
+                    int, datalen);
+   }
+   else {
+      /* 4-argument mount */
+      PRINT("sys_mount ( %#lx(%s), %#lx(%s), %ld, %#lx(%s) )", ARG1,
+            (HChar *) ARG1, ARG2, (HChar *) ARG2, SARG3, ARG4, (HChar *) ARG4);
+      PRE_REG_READ4(long, "mount", const char *, spec, const char *, dir,
+                    int, mflag, char *, fstype);
+   }
+   if (ARG1)
+      PRE_MEM_RASCIIZ("mount(spec)", ARG1);
+   PRE_MEM_RASCIIZ("mount(dir)", ARG2);
+   if (ARG4 && ARG4 >= 256) {
+      /* If ARG4 < 256, then it's an index to a fs table in the kernel. */
+      PRE_MEM_RASCIIZ("mount(fstype)", ARG4);
+   }
+   if (ARG3 & (VKI_MS_DATA | VKI_MS_OPTIONSTR)) {
+      if (ARG5)
+         PRE_MEM_READ("mount(dataptr)", ARG5, ARG6);
+      if ((ARG3 & VKI_MS_OPTIONSTR) && ARG7) {
+         /* in/out buffer */
+         PRE_MEM_RASCIIZ("mount(optptr)", ARG7);
+         PRE_MEM_WRITE("mount(optptr)", ARG7, ARG8);
+      }
+   }
+}
+
+POST(sys_mount)
+{
+   if (ARG3 & VKI_MS_OPTIONSTR) {
+      POST_MEM_WRITE(ARG7, VG_(strlen)((HChar*)ARG7) + 1);
+   } else if (ARG3 & VKI_MS_DATA) {
+      if ((ARG2) &&
+          (ARG3 & MS_NOMNTTAB) &&
+          (VG_STREQ((HChar *) ARG4, "namefs")) &&
+          (ARG6 == sizeof(struct vki_namefd)) &&
+          ML_(safe_to_deref)((void *) ARG5, ARG6)) {
+         /* Most likely an fattach() call for a door file descriptor. */
+         door_server_fattach(((struct vki_namefd *) ARG5)->fd, (HChar *) ARG2);
+      }
+   }
+}
+
+PRE(sys_readlinkat)
+{
+   /* ssize_t readlinkat(int dfd, const char *path, char *buf,
+                         size_t bufsiz); */
+   HChar name[30];    // large enough
+   Word saved = SYSNO;
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int dfd = (Int) ARG1;
+
+   PRINT("sys_readlinkat ( %d, %#lx(%s), %#lx, %ld )", dfd, ARG2,
+         (HChar *) ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "readlinkat", int, dfd, const char *, path,
+                 char *, buf, int, bufsiz);
+   PRE_MEM_RASCIIZ("readlinkat(path)", ARG2);
+   PRE_MEM_WRITE("readlinkat(buf)", ARG3, ARG4);
+
+   /* Be strict but ignore dfd for absolute path. */
+   if (dfd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(dfd, "readlinkat", tid, False)) {
+      SET_STATUS_Failure(VKI_EBADF);
+      return;
+   }
+
+   /* Handle the case where readlinkat is looking at /proc/self/path/a.out or
+      /proc/<pid>/path/a.out. */
+   VG_(sprintf)(name, "/proc/%d/path/a.out", VG_(getpid)());
+   if (ML_(safe_to_deref)((void*)ARG2, 1) &&
+       (!VG_(strcmp)((HChar*)ARG2, name) ||
+        !VG_(strcmp)((HChar*)ARG2, "/proc/self/path/a.out"))) {
+      VG_(sprintf)(name, "/proc/self/path/%d", VG_(cl_exec_fd));
+      SET_STATUS_from_SysRes(VG_(do_syscall4)(saved, dfd, (UWord)name, ARG3,
+                                              ARG4));
+   }
+}
+
+POST(sys_readlinkat)
+{
+   POST_MEM_WRITE(ARG3, RES);
+}
+
+PRE(sys_stime)
+{
+   /* Kernel: int stime(time_t time); */
+   PRINT("sys_stime ( %ld )", ARG1);
+   PRE_REG_READ1(long, "stime", vki_time_t, time);
+}
+
+PRE(sys_fstat)
+{
+   /* int fstat(int fildes, struct stat *buf); */
+   /* Note: We could use here the sys_newfstat generic wrapper, but the 'new'
+      in its name is rather confusing in the Solaris context, thus we provide
+      our own wrapper. */
+   PRINT("sys_fstat ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "fstat", int, fildes, struct stat *, buf);
+   PRE_MEM_WRITE("fstat(buf)", ARG2, sizeof(struct vki_stat));
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "fstat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_fstat)
+{
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_stat));
+}
+
+#if defined(SOLARIS_FREALPATHAT_SYSCALL)
+PRE(sys_frealpathat)
+{
+   /* int frealpathat(int fd, char *path, char *buf, size_t buflen); */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG1;
+
+   PRINT("sys_frealpathat ( %d, %#lx(%s), %#lx, %lu )",
+         fd, ARG2, (HChar *) ARG2, ARG3, ARG4);
+   PRE_REG_READ4(long, "frealpathat", int, fd, char *, path,
+                 char *, buf, vki_size_t, buflen);
+   PRE_MEM_RASCIIZ("frealpathat(path)", ARG2);
+   PRE_MEM_WRITE("frealpathat(buf)", ARG3, ARG4);
+
+   /* Be strict but ignore fd for absolute path. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd, "frealpathat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_frealpathat)
+{
+   POST_MEM_WRITE(ARG3, VG_(strlen)((HChar *) ARG3) + 1);
+}
+#endif /* SOLARIS_FREALPATHAT_SYSCALL */
+
+PRE(sys_stty)
+{
+   /* int stty(int fd, const struct sgttyb *tty); */
+   PRINT("sys_stty ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "stty", int, fd,
+                 const struct vki_sgttyb *, tty);
+   PRE_MEM_READ("stty(tty)", ARG2, sizeof(struct vki_sgttyb));
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "stty", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_gtty)
+{
+   /* int gtty(int fd, struct sgttyb *tty); */
+   PRINT("sys_gtty ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "gtty", int, fd, struct vki_sgttyb *, tty);
+   PRE_MEM_WRITE("gtty(tty)", ARG2, sizeof(struct vki_sgttyb));
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "gtty", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_gtty)
+{
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_sgttyb));
+}
+
+PRE(sys_pgrpsys)
+{
+   /* Kernel: int setpgrp(int flag, int pid, int pgid); */
+   switch (ARG1 /*flag*/) {
+   case 0:
+      /* Libc: pid_t getpgrp(void); */
+      PRINT("sys_pgrpsys ( %ld )", SARG1);
+      PRE_REG_READ1(long, SC2("pgrpsys", "getpgrp"), int, flag);
+      break;
+   case 1:
+      /* Libc: pid_t setpgrp(void); */
+      PRINT("sys_pgrpsys ( %ld )", SARG1);
+      PRE_REG_READ1(long, SC2("pgrpsys", "setpgrp"), int, flag);
+      break;
+   case 2:
+      /* Libc: pid_t getsid(pid_t pid); */
+      PRINT("sys_pgrpsys ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("pgrpsys", "getsid"), int, flag,
+                    vki_pid_t, pid);
+      break;
+   case 3:
+      /* Libc: pid_t setsid(void); */
+      PRINT("sys_pgrpsys ( %ld )", SARG1);
+      PRE_REG_READ1(long, SC2("pgrpsys", "setsid"), int, flag);
+      break;
+   case 4:
+      /* Libc: pid_t getpgid(pid_t pid); */
+      PRINT("sys_pgrpsys ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("pgrpsys", "getpgid"), int, flag,
+                    vki_pid_t, pid);
+      break;
+   case 5:
+      /* Libc: int setpgid(pid_t pid, pid_t pgid); */
+      PRINT("sys_pgrpsys ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+      PRE_REG_READ3(long, SC2("pgrpsys", "setpgid"), int, flag,
+                    vki_pid_t, pid, vki_pid_t, pgid);
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the pgrpsys call with flag %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+PRE(sys_pipe)
+{
+#if defined(SOLARIS_NEW_PIPE_SYSCALL)
+   /* int pipe(int fildes[2], int flags); */
+   PRINT("sys_pipe ( %#lx, %ld )", ARG1, SARG2);
+   PRE_REG_READ2(long, "pipe", int *, fildes, int, flags);
+   PRE_MEM_WRITE("pipe(fildes)", ARG1, 2 * sizeof(int));
+#else
+   /* longlong_t pipe(); */
+   PRINT("sys_pipe ( )");
+   PRE_REG_READ0(long, "pipe");
+#endif /* SOLARIS_NEW_PIPE_SYSCALL */
+}
+
+POST(sys_pipe)
+{
+   Int p0, p1;
+
+#if defined(SOLARIS_NEW_PIPE_SYSCALL)
+   int *fds = (int*)ARG1;
+   p0 = fds[0];
+   p1 = fds[1];
+   POST_MEM_WRITE(ARG1, 2 * sizeof(int));
+#else
+   p0 = RES;
+   p1 = RESHI;
+#endif /* SOLARIS_NEW_PIPE_SYSCALL */
+
+   if (!ML_(fd_allowed)(p0, "pipe", tid, True) ||
+       !ML_(fd_allowed)(p1, "pipe", tid, True)) {
+      VG_(close)(p0);
+      VG_(close)(p1);
+      SET_STATUS_Failure(VKI_EMFILE);
+   }
+   else if (VG_(clo_track_fds)) {
+      ML_(record_fd_open_nameless)(tid, p0);
+      ML_(record_fd_open_nameless)(tid, p1);
+   }
+}
+
+PRE(sys_faccessat)
+{
+   /* int faccessat(int fd, const char *path, int amode, int flag); */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG1;
+
+   PRINT("sys_faccessat ( %d, %#lx(%s), %ld, %ld )", fd, ARG2,
+         (HChar *) ARG2, SARG3, SARG4);
+   PRE_REG_READ4(long, "faccessat", int, fd, const char *, path,
+                 int, amode, int, flag);
+   PRE_MEM_RASCIIZ("faccessat(path)", ARG2);
+
+   /* Be strict but ignore fd for absolute path. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd, "faccessat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_mknodat)
+{
+   /* int mknodat(int fd, char *fname, mode_t fmode, dev_t dev); */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG1;
+
+   PRINT("sys_mknodat ( %d, %#lx(%s), %ld, %ld )", fd, ARG2,
+         (HChar *) ARG2, SARG3, SARG4);
+   PRE_REG_READ4(long, "mknodat", int, fd, const char *, fname,
+                 vki_mode_t, fmode, vki_dev_t, dev);
+   PRE_MEM_RASCIIZ("mknodat(fname)", ARG2);
+
+   /* Be strict but ignore fd for absolute path. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd, "mknodat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+
+   *flags |= SfMayBlock;
+}
+
+POST(sys_mknodat)
+{
+   if (!ML_(fd_allowed)(RES, "mknodat", tid, True)) {
+      VG_(close)(RES);
+      SET_STATUS_Failure(VKI_EMFILE);
+   } else if (VG_(clo_track_fds))
+      ML_(record_fd_open_with_given_name)(tid, RES, (HChar *) ARG2);
+}
+
+PRE(sys_sysi86)
+{
+   /* int sysi86(int cmd, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3); */
+   PRINT("sys_sysi86 ( %ld, %#lx, %#lx, %#lx )", SARG1, ARG2, ARG3, ARG4);
+   PRE_REG_READ4(long, "sysi86", int, cmd, uintptr_t, arg1, uintptr_t, arg2,
+                 uintptr_t, arg3);
+
+   switch (ARG1 /*cmd*/) {
+   case VKI_SI86FPSTART:
+      PRE_MEM_WRITE("sysi86(fp_hw)", ARG2, sizeof(vki_uint_t));
+      /* ARG3 is a desired x87 FCW value, ARG4 is a desired SSE MXCSR value.
+         They are passed to the kernel but V will change them later anyway
+         (this is a general Valgrind limitation described in the official
+         documentation). */
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the sysi86 call with cmd %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_sysi86)
+{
+   switch (ARG1 /*cmd*/) {
+   case VKI_SI86FPSTART:
+      POST_MEM_WRITE(ARG2, sizeof(vki_uint_t));
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_shmsys)
+{
+   /* Kernel: uintptr_t shmsys(int opcode, uintptr_t a0, uintptr_t a1,
+                               uintptr_t a2, uintptr_t a3);
+    */
+   *flags |= SfMayBlock;
+
+   switch (ARG1 /*opcode*/) {
+   case VKI_SHMAT:
+      /* Libc: void *shmat(int shmid, const void *shmaddr, int shmflg); */
+      PRINT("sys_shmsys ( %ld, %ld, %#lx, %ld )",
+            SARG1, SARG2, ARG3, SARG4);
+      PRE_REG_READ4(long, SC2("shmsys", "shmat"), int, opcode,
+                    int, shmid, const void *, shmaddr, int, shmflg);
+
+      UWord addr = ML_(generic_PRE_sys_shmat)(tid, ARG2, ARG3, ARG4);
+      if (addr == 0)
+         SET_STATUS_Failure(VKI_EINVAL);
+      else
+         ARG3 = addr;
+      break;
+
+   case VKI_SHMCTL:
+      /* Libc: int shmctl(int shmid, int cmd, struct shmid_ds *buf); */
+      switch (ARG3 /* cmd */) {
+      case VKI_SHM_LOCK:
+         PRINT("sys_shmsys ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+         PRE_REG_READ3(long, SC3("shmsys", "shmctl", "lock"),
+                       int, opcode, int, shmid, int, cmd);
+         break;
+      case VKI_SHM_UNLOCK:
+         PRINT("sys_shmsys ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+         PRE_REG_READ3(long, SC3("shmsys", "shmctl", "unlock"),
+                       int, opcode, int, shmid, int, cmd);
+         break;
+      case VKI_IPC_RMID:
+         PRINT("sys_shmsys ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+         PRE_REG_READ3(long, SC3("shmsys", "shmctl", "rmid"),
+                       int, opcode, int, shmid, int, cmd);
+         break;
+      case VKI_IPC_SET:
+         PRINT("sys_shmsys ( %ld, %ld, %ld, %#lx )",
+               SARG1, SARG2, SARG3, ARG4);
+         PRE_REG_READ4(long, SC3("shmsys", "shmctl", "set"),
+                       int, opcode, int, shmid, int, cmd,
+                       struct vki_shmid_ds *, buf);
+
+         struct vki_shmid_ds *buf = (struct vki_shmid_ds *) ARG4;
+         PRE_FIELD_READ("shmsys(shmctl, ipc_set, buf->shm_perm.uid)",
+                        buf->shm_perm.uid);
+         PRE_FIELD_READ("shmsys(shmctl, ipc_set, buf->shm_perm.gid)",
+                        buf->shm_perm.gid);
+         PRE_FIELD_READ("shmsys(shmctl, ipc_set, buf->shm_perm.mode)",
+                        buf->shm_perm.mode);
+         break;
+      case VKI_IPC_STAT:
+         PRINT("sys_shmsys ( %ld, %ld, %ld, %#lx )",
+               SARG1, SARG2, SARG3, ARG4);
+         PRE_REG_READ4(long, SC3("shmsys", "shmctl", "stat"),
+                       int, opcode, int, shmid, int, cmd,
+                       struct vki_shmid_ds *, buf);
+         PRE_MEM_WRITE("shmsys(shmctl, ipc_stat, buf)", ARG4,
+                       sizeof(struct vki_shmid_ds));
+        break;
+      case VKI_IPC_SET64:
+         PRINT("sys_shmsys ( %ld, %ld, %ld, %#lx )",
+               SARG1, SARG2, SARG3, ARG4);
+         PRE_REG_READ4(long, SC3("shmsys", "shmctl", "set64"),
+                       int, opcode, int, shmid, int, cmd,
+                       struct vki_shmid_ds64 *, buf);
+
+         struct vki_shmid_ds64 *buf64 = (struct vki_shmid_ds64 *) ARG4;
+         PRE_FIELD_READ("shmsys(shmctl, ipc_set64, "
+                        "buf->shmx_perm.ipcx_uid)",
+                        buf64->shmx_perm.ipcx_uid);
+         PRE_FIELD_READ("shmsys(shmctl, ipc_set64, "
+                        "buf->shmx_perm.ipcx_gid)",
+                        buf64->shmx_perm.ipcx_gid);
+         PRE_FIELD_READ("shmsys(shmctl, ipc_set64, "
+                        "buf->shmx_perm.ipcx_mode)",
+                        buf64->shmx_perm.ipcx_mode);
+         break;
+      case VKI_IPC_STAT64:
+         PRINT("sys_shmsys ( %ld, %ld, %ld, %#lx )",
+               SARG1, SARG2, SARG3, ARG4);
+         PRE_REG_READ4(long, SC3("shmsys", "shmctl", "stat64"),
+                       int, opcode, int, shmid, int, cmd,
+                       struct vki_shmid_ds64 *, buf);
+         PRE_MEM_WRITE("shmsys(shmctl, ipc_stat64, buf)", ARG4,
+                       sizeof(struct vki_shmid_ds64));
+         break;
+#if defined(SOLARIS_SHM_NEW)
+      case VKI_IPC_XSTAT64:
+         PRINT("sys_shmsys ( %ld, %ld, %ld, %#lx )",
+               SARG1, SARG2, SARG3, ARG4);
+         PRE_REG_READ4(long, SC3("shmsys", "shmctl", "xstat64"),
+                       int, opcode, int, shmid, int, cmd,
+                       struct vki_shmid_ds64 *, buf);
+         PRE_MEM_WRITE("shmsys(shmctl, ipc_xstat64, buf)", ARG4,
+                       sizeof(struct vki_shmid_xds64));
+         break;
+#endif /* SOLARIS_SHM_NEW */
+      default:
+         VG_(unimplemented)("Syswrap of the shmsys(shmctl) call with "
+                            "cmd %ld.", SARG3);
+         /*NOTREACHED*/
+         break;
+      }
+      break;
+
+   case VKI_SHMDT:
+      /* Libc: int shmdt(const void *shmaddr); */
+      PRINT("sys_shmsys ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("shmsys", "shmdt"), int, opcode,
+                    const void *, shmaddr);
+
+      if (!ML_(generic_PRE_sys_shmdt)(tid, ARG2))
+	 SET_STATUS_Failure(VKI_EINVAL);
+      break;
+
+   case VKI_SHMGET:
+      /* Libc: int shmget(key_t key, size_t size, int shmflg); */
+      PRINT("sys_shmsys ( %ld, %ld, %lu, %ld )",
+            SARG1, SARG2, ARG3, ARG4);
+      PRE_REG_READ4(long, SC2("shmsys", "shmget"), int, opcode,
+                    vki_key_t, key, vki_size_t, size, int, shmflg);
+      break;
+
+   case VKI_SHMIDS:
+      /* Libc: int shmids(int *buf, uint_t nids, uint_t *pnids); */
+      PRINT("sys_shmsys ( %ld, %#lx, %lu, %#lx )",
+            SARG1, ARG2, ARG3, ARG4);
+      PRE_REG_READ4(long, SC2("shmsys", "shmids"), int, opcode,
+                    int *, buf, vki_uint_t, nids, vki_uint_t *, pnids);
+
+      PRE_MEM_WRITE("shmsys(shmids, buf)", ARG2, ARG3 * sizeof(int *));
+      PRE_MEM_WRITE("shmsys(shmids, pnids)", ARG4, sizeof(vki_uint_t));
+      break;
+
+#if defined(SOLARIS_SHM_NEW)
+   case VKI_SHMADV:
+      /* Libc: int shmadv(int shmid, uint_t cmd, uint_t *advice); */
+      PRINT("sys_shmsys ( %ld, %ld, %lu, %ld )",
+            SARG1, SARG2, ARG3, ARG4);
+      PRE_REG_READ4(long, SC2("shmsys", "shmadv"), int, opcode,
+                    int, shmid, vki_uint_t, cmd, vki_uint_t *, advice);
+
+      switch (ARG3 /*cmd*/) {
+      case VKI_SHM_ADV_GET:
+         PRE_MEM_WRITE("shmsys(shmadv, advice)", ARG4,
+                       sizeof(vki_uint_t));
+         break;
+      case VKI_SHM_ADV_SET:
+         PRE_MEM_READ("shmsys(shmadv, advice)", ARG4,
+                       sizeof(vki_uint_t));
+         break;
+      default:
+         VG_(unimplemented)("Syswrap of the shmsys(shmadv) call with "
+                            "cmd %lu.", ARG3);
+         /*NOTREACHED*/
+         break;
+      }
+      break;
+
+   case VKI_SHMGET_OSM:
+      /* Libc: int shmget_osm(key_t key, size_t size, int shmflg,
+                              size_t granule_sz);
+       */
+      PRINT("sys_shmsys ( %ld, %ld, %lu, %ld, %lu )",
+            SARG1, SARG2, ARG3, SARG4, ARG5);
+      PRE_REG_READ5(long, SC2("shmsys", "shmget_osm"), int, opcode,
+                    vki_key_t, key, vki_size_t, size, int, shmflg,
+                    vki_size_t, granule_sz);
+      break;
+#endif /* SOLARIS_SHM_NEW */
+
+   default:
+      VG_(unimplemented)("Syswrap of the shmsys call with opcode %ld.",
+                         SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_shmsys)
+{
+   switch (ARG1 /*opcode*/) {
+   case VKI_SHMAT:
+      ML_(generic_POST_sys_shmat)(tid, RES, ARG2, ARG3, ARG4);
+      break;
+
+   case VKI_SHMCTL:
+      switch (ARG3 /*cmd*/) {
+      case VKI_SHM_LOCK:
+      case VKI_SHM_UNLOCK:
+      case VKI_IPC_RMID:
+      case VKI_IPC_SET:
+         break;
+      case VKI_IPC_STAT:
+         POST_MEM_WRITE(ARG4, sizeof(struct vki_shmid_ds));
+         break;
+      case VKI_IPC_SET64:
+         break;
+      case VKI_IPC_STAT64:
+         POST_MEM_WRITE(ARG4, sizeof(struct vki_shmid_ds64));
+         break;
+#if defined(SOLARIS_SHM_NEW)
+      case VKI_IPC_XSTAT64:
+         POST_MEM_WRITE(ARG4, sizeof(struct vki_shmid_xds64));
+         break;
+#endif /* SOLARIS_SHM_NEW */
+      default:
+         vg_assert(0);
+         break;
+      }
+      break;
+
+   case VKI_SHMDT:
+      ML_(generic_POST_sys_shmdt)(tid, RES, ARG2);
+      break;
+
+   case VKI_SHMGET:
+      break;
+
+   case VKI_SHMIDS:
+      {
+         POST_MEM_WRITE(ARG4, sizeof(vki_uint_t));
+
+         uint_t *pnids = (vki_uint_t *) ARG4;
+         if (*pnids <= ARG3)
+            POST_MEM_WRITE(ARG2, *pnids * sizeof(int *));
+      }
+      break;
+
+#if defined(SOLARIS_SHM_NEW)
+   case VKI_SHMADV:
+      switch (ARG3 /*cmd*/) {
+      case VKI_SHM_ADV_GET:
+         POST_MEM_WRITE(ARG4, sizeof(vki_uint_t));
+         break;
+      case VKI_SHM_ADV_SET:
+         break;
+      default:
+         vg_assert(0);
+         break;
+      }
+      break;
+
+   case VKI_SHMGET_OSM:
+      break;
+#endif /* SOLARIS_SHM_NEW */
+
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_semsys)
+{
+   /* Kernel: int semsys(int opcode, uintptr_t a1, uintptr_t a2, uintptr_t a3,
+                         uintptr_t a4);
+    */
+   *flags |= SfMayBlock;
+
+   switch (ARG1 /*opcode*/) {
+   case VKI_SEMCTL:
+      /* Libc: int semctl(int semid, int semnum, int cmd...); */
+      switch (ARG4) {
+         case VKI_IPC_STAT:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %ld, %#lx )",
+                  SARG1, SARG2, SARG3, SARG4, ARG5);
+            PRE_REG_READ5(long, SC3("semsys", "semctl", "stat"), int, opcode,
+                          int, semid, int, semnum, int, cmd,
+                          struct vki_semid_ds *, arg);
+            break;
+         case VKI_IPC_SET:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %ld, %#lx )",
+                  SARG1, SARG2, SARG3, SARG4, ARG5);
+            PRE_REG_READ5(long, SC3("semsys", "semctl", "set"), int, opcode,
+                          int, semid, int, semnum, int, cmd,
+                          struct vki_semid_ds *, arg);
+            break;
+         case VKI_IPC_STAT64:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %ld, %#lx )",
+                  SARG1, SARG2, SARG3, SARG4, ARG5);
+            PRE_REG_READ5(long, SC3("semsys", "semctl", "stat64"), int, opcode,
+                          int, semid, int, semnum, int, cmd,
+                          struct vki_semid64_ds *, arg);
+            break;
+         case VKI_IPC_SET64:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %ld, %#lx )",
+                  SARG1, SARG2, SARG3, SARG4, ARG5);
+            PRE_REG_READ5(long, SC3("semsys", "semctl", "set64"), int, opcode,
+                          int, semid, int, semnum, int, cmd,
+                          struct vki_semid64_ds *, arg);
+            break;
+         case VKI_IPC_RMID:
+            PRINT("sys_semsys ( %ld, %ld, %ld )", SARG1, SARG3, SARG4);
+            PRE_REG_READ3(long, SC3("semsys", "semctl", "rmid"), int, opcode,
+                          int, semid, int, cmd);
+            break;
+         case VKI_GETALL:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %#lx )",
+                  SARG1, SARG2, SARG4, ARG5);
+            PRE_REG_READ4(long, SC3("semsys", "semctl", "getall"), int, opcode,
+                          int, semid, int, cmd, ushort_t *, arg);
+            break;
+         case VKI_SETALL:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %#lx )",
+                  SARG1, SARG2, SARG4, ARG5);
+            PRE_REG_READ4(long, SC3("semsys", "semctl", "setall"), int, opcode,
+                          int, semid, int, cmd, ushort_t *, arg);
+            break;
+         case VKI_GETVAL:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %ld )",
+                  SARG1, SARG2, SARG3, SARG4);
+            PRE_REG_READ4(long, SC3("semsys", "semctl", "getval"), int, opcode,
+                          int, semid, int, semnum, int, cmd);
+            break;
+         case VKI_SETVAL:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %ld, %#lx )",
+                  SARG1, SARG2, SARG3, SARG4, ARG5);
+            PRE_REG_READ5(long, SC3("semsys", "semctl", "setval"), int, opcode,
+                          int, semid, int, semnum, int, cmd,
+                          union vki_semun *, arg);
+            break;
+         case VKI_GETPID:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %ld )",
+                  SARG1, SARG2, SARG3, SARG4);
+            PRE_REG_READ4(long, SC3("semsys", "semctl", "getpid"), int, opcode,
+                          int, semid, int, semnum, int, cmd);
+            break;
+         case VKI_GETNCNT:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %ld )",
+                  SARG1, SARG2, SARG3, SARG4);
+            PRE_REG_READ4(long, SC3("semsys", "semctl", "getncnt"),
+                          int, opcode, int, semid, int, semnum, int, cmd);
+            break;
+         case VKI_GETZCNT:
+            PRINT("sys_semsys ( %ld, %ld, %ld, %ld )",
+                  SARG1, SARG2, SARG3, SARG4);
+            PRE_REG_READ4(long, SC3("semsys", "semctl", "getzcnt"),
+                          int, opcode, int, semid, int, semnum, int, cmd);
+            break;
+         default:
+            VG_(unimplemented)("Syswrap of the semsys(semctl) call "
+                               "with cmd %ld.", SARG4);
+            /*NOTREACHED*/
+            break;
+      }
+      ML_(generic_PRE_sys_semctl)(tid, ARG2, ARG3, ARG4, ARG5);
+      break;
+   case VKI_SEMGET:
+      /* Libc: int semget(key_t key, int nsems, int semflg); */
+      PRINT("sys_semsys ( %ld, %ld, %ld, %ld )", SARG1, SARG2, SARG3, SARG4);
+      PRE_REG_READ4(long, SC2("semsys", "semget"), int, opcode,
+                    vki_key_t, key, int, nsems, int, semflg);
+      break;
+   case VKI_SEMOP:
+      /* Libc: int semop(int semid, struct sembuf *sops, size_t nsops); */
+      PRINT("sys_semsys ( %ld, %ld, %#lx, %lu )", SARG1, SARG2, ARG3, ARG4);
+      PRE_REG_READ4(long, SC2("semsys", "semop"), int, opcode, int, semid,
+                    struct vki_sembuf *, sops, vki_size_t, nsops);
+      ML_(generic_PRE_sys_semop)(tid, ARG2, ARG3, ARG4);
+      break;
+   case VKI_SEMIDS:
+      /* Libc: int semids(int *buf, uint_t nids, uint_t *pnids); */
+      PRINT("sys_semsys ( %ld, %#lx, %lu, %#lx )", SARG1, ARG2, ARG3, ARG4);
+      PRE_REG_READ4(long, SC2("semsys", "semids"), int, opcode, int *, buf,
+                   vki_uint_t, nids, vki_uint_t *, pnids);
+
+      PRE_MEM_WRITE("semsys(semids, buf)", ARG2, ARG3 * sizeof(int *));
+      PRE_MEM_WRITE("semsys(semids, pnids)", ARG4, sizeof(vki_uint_t));
+      break;
+   case VKI_SEMTIMEDOP:
+      /* Libc: int semtimedop(int semid, struct sembuf *sops, size_t nsops,
+                              const struct timespec *timeout);
+       */
+      PRINT("sys_semsys ( %ld, %ld, %#lx, %lu, %#lx )", SARG1, SARG2, ARG3,
+            ARG4, ARG5);
+      PRE_REG_READ5(long, SC2("semsys", "semtimedop"), int, opcode,
+                    int, semid, struct vki_sembuf *, sops, vki_size_t, nsops,
+                    struct vki_timespec *, timeout);
+      ML_(generic_PRE_sys_semtimedop)(tid, ARG2, ARG3, ARG4, ARG5);
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the semsys call with opcode %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_semsys)
+{
+   switch (ARG1 /*opcode*/) {
+   case VKI_SEMCTL:
+      ML_(generic_POST_sys_semctl)(tid, RES, ARG2, ARG3, ARG4, ARG5);
+      break;
+   case VKI_SEMGET:
+   case VKI_SEMOP:
+      break;
+   case VKI_SEMIDS:
+      {
+         POST_MEM_WRITE(ARG4, sizeof(vki_uint_t));
+
+         uint_t *pnids = (uint_t *)ARG4;
+         if (*pnids <= ARG3)
+            POST_MEM_WRITE(ARG2, *pnids * sizeof(int *));
+      }
+      break;
+   case VKI_SEMTIMEDOP:
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+/* ---------------------------------------------------------------------
+   ioctl wrappers
+   ------------------------------------------------------------------ */
+
+PRE(sys_ioctl)
+{
+   /* int ioctl(int fildes, int request, ...); */
+   *flags |= SfMayBlock;
+
+   /* Prevent sign extending the switch case values to 64-bits on 64-bits
+      architectures. */
+   Int cmd = (Int) ARG2;
+
+   switch (cmd /*request*/) {
+      /* Handle 2-arg specially here (they do not use ARG3 at all). */
+   case VKI_TIOCNOTTY:
+   case VKI_TIOCSCTTY:
+      PRINT("sys_ioctl ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, "ioctl", int, fd, int, request);
+      break;
+      /* And now come the 3-arg ones. */
+   default:
+      PRINT("sys_ioctl ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+      PRE_REG_READ3(long, "ioctl", int, fd, int, request, intptr_t, arg);
+      break;
+   }
+
+   switch (cmd /*request*/) {
+   /* pools */
+   case VKI_POOL_STATUSQ:
+      PRE_MEM_WRITE("ioctl(POOL_STATUSQ)", ARG3, sizeof(vki_pool_status_t));
+      break;
+
+   /* mntio */
+   case VKI_MNTIOC_GETMNTANY:
+      {
+         PRE_MEM_READ("ioctl(MNTIOC_GETMNTANY)",
+                      ARG3, sizeof(struct vki_mntentbuf));
+
+         struct vki_mntentbuf *embuf = (struct vki_mntentbuf *) ARG3;
+         if (ML_(safe_to_deref(embuf, sizeof(*embuf)))) {
+            PRE_MEM_READ("ioctl(MNTIOC_GETMNTANY, embuf->mbuf_emp)",
+                         (Addr) embuf->mbuf_emp,
+                         sizeof(struct vki_mnttab));
+            PRE_MEM_WRITE("ioctl(MNTIOC_GETMNTANY, embuf->mbuf_buf)",
+                          (Addr) embuf->mbuf_buf,
+                          embuf->mbuf_bufsize);
+            struct vki_mnttab *mnt
+               = (struct vki_mnttab *) embuf->mbuf_emp;
+            if (ML_(safe_to_deref(mnt, sizeof(struct vki_mnttab)))) {
+               if (mnt->mnt_special != NULL)
+                  PRE_MEM_RASCIIZ("ioctl(MNTIOC_GETMNTANY, mnt->mnt_special)",
+                                  (Addr) mnt->mnt_special);
+               if (mnt->mnt_mountp != NULL)
+                  PRE_MEM_RASCIIZ("ioctl(MNTIOC_GETMNTANY, mnt->mnt_mountp)",
+                                  (Addr) mnt->mnt_mountp);
+               if (mnt->mnt_fstype != NULL)
+                  PRE_MEM_RASCIIZ("ioctl(MNTIOC_GETMNTANY, mnt->mnt_fstype)",
+                                  (Addr) mnt->mnt_fstype);
+               if (mnt->mnt_mntopts != NULL)
+                  PRE_MEM_RASCIIZ("ioctl(MNTIOC_GETMNTANY, mnt->mnt_mntopts)",
+                                  (Addr) mnt->mnt_mntopts);
+               if (mnt->mnt_time != NULL)
+                  PRE_MEM_RASCIIZ("ioctl(MNTIOC_GETMNTANY, mnt->mnt_time)",
+                                  (Addr) mnt->mnt_time);
+            }
+         }
+      }
+      break;
+
+   /* termio/termios */
+   case VKI_TCGETA:
+      PRE_MEM_WRITE("ioctl(TCGETA)", ARG3, sizeof(struct vki_termio));
+      break;
+   case VKI_TCGETS:
+      PRE_MEM_WRITE("ioctl(TCGETS)", ARG3, sizeof(struct vki_termios));
+      break;
+   case VKI_TCSETS:
+      PRE_MEM_READ("ioctl(TCSETS)", ARG3, sizeof(struct vki_termios));
+      break;
+   case VKI_TCSETSW:
+      PRE_MEM_READ("ioctl(TCSETSW)", ARG3, sizeof(struct vki_termios));
+      break;
+   case VKI_TCSETSF:
+      PRE_MEM_READ("ioctl(TCSETSF)", ARG3, sizeof(struct vki_termios));
+      break;
+   case VKI_TIOCGWINSZ:
+      PRE_MEM_WRITE("ioctl(TIOCGWINSZ)", ARG3, sizeof(struct vki_winsize));
+      break;
+   case VKI_TIOCSWINSZ:
+      PRE_MEM_READ("ioctl(TIOCSWINSZ)", ARG3, sizeof(struct vki_winsize));
+      break;
+   case VKI_TIOCGPGRP:
+      PRE_MEM_WRITE("ioctl(TIOCGPGRP)", ARG3, sizeof(vki_pid_t));
+      break;
+   case VKI_TIOCSPGRP:
+      PRE_MEM_READ("ioctl(TIOCSPGRP)", ARG3, sizeof(vki_pid_t));
+      break;
+   case VKI_TIOCGSID:
+      PRE_MEM_WRITE("ioctl(TIOCGSID)", ARG3, sizeof(vki_pid_t));
+      break;
+   case VKI_TIOCNOTTY:
+   case VKI_TIOCSCTTY:
+      break;
+
+   /* STREAMS */
+   case VKI_I_PUSH:
+      PRE_MEM_RASCIIZ("ioctl(I_PUSH)", ARG3);
+      break;
+   case VKI_I_STR:
+      {
+         PRE_MEM_READ("ioctl(I_STR)", ARG3, sizeof(struct vki_strioctl));
+
+         struct vki_strioctl *p = (struct vki_strioctl *) ARG3;
+         if (ML_(safe_to_deref(p, sizeof(*p)))) {
+            if ((p->ic_dp != NULL) && (p->ic_len > 0)) {
+               PRE_MEM_READ("ioctl(I_STR, strioctl->ic_dp)",
+                            (Addr) p->ic_dp, p->ic_len);
+            }
+         }
+      }
+      break;
+   case VKI_I_PEEK:
+      {
+         /* Try hard not to mark strpeek->*buf.len members as being read. */
+         struct vki_strpeek *p = (struct vki_strpeek*)ARG3;
+
+         PRE_FIELD_READ("ioctl(I_PEEK, strpeek->ctlbuf.maxlen)",
+                        p->ctlbuf.maxlen);
+         PRE_FIELD_WRITE("ioctl(I_PEEK, strpeek->ctlbuf.len)",
+                         p->ctlbuf.len);
+         PRE_FIELD_READ("ioctl(I_PEEK, strpeek->ctlbuf.buf)",
+                        p->ctlbuf.buf);
+         PRE_FIELD_READ("ioctl(I_PEEK, strpeek->databuf.maxlen)",
+                        p->databuf.maxlen);
+         PRE_FIELD_WRITE("ioctl(I_PEEK, strpeek->databuf.len)",
+                         p->databuf.len);
+         PRE_FIELD_READ("ioctl(I_PEEK, strpeek->databuf.buf)",
+                        p->databuf.buf);
+         PRE_FIELD_READ("ioctl(I_PEEK, strpeek->flags)", p->flags);
+         /*PRE_FIELD_WRITE("ioctl(I_PEEK, strpeek->flags)", p->flags);*/
+
+         if (ML_(safe_to_deref(p, sizeof(*p)))) {
+            if (p->ctlbuf.buf && p->ctlbuf.maxlen > 0)
+               PRE_MEM_WRITE("ioctl(I_PEEK, strpeek->ctlbuf.buf)",
+                             (Addr)p->ctlbuf.buf, p->ctlbuf.maxlen);
+            if (p->databuf.buf && p->databuf.maxlen > 0)
+               PRE_MEM_WRITE("ioctl(I_PEEK, strpeek->databuf.buf)",
+                             (Addr)p->databuf.buf, p->databuf.maxlen);
+         }
+      }
+      break;
+   case VKI_I_CANPUT:
+      break;
+
+   /* sockio */
+   case VKI_SIOCGIFCONF:
+      {
+         struct vki_ifconf *p = (struct vki_ifconf *) ARG3;
+         PRE_FIELD_READ("ioctl(SIOCGIFCONF, ifconf->ifc_len)", p->ifc_len);
+         PRE_FIELD_READ("ioctl(SIOCGIFCONF, ifconf->ifc_buf)", p->ifc_buf);
+         if (ML_(safe_to_deref)(p, sizeof(*p))) {
+            if ((p->ifc_buf != NULL) && (p->ifc_len > 0))
+               PRE_MEM_WRITE("ioctl(SIOCGIFCONF, ifconf->ifc_buf)",
+                             (Addr) p->ifc_buf, p->ifc_len);
+         }
+         /* ifc_len gets also written to during SIOCGIFCONF ioctl. */
+      }
+      break;
+   case VKI_SIOCGIFFLAGS:
+      {
+         struct vki_ifreq *p = (struct vki_ifreq *) ARG3;
+         PRE_FIELD_READ("ioctl(SIOCGIFFLAGS, ifreq->ifr_name)", p->ifr_name);
+         PRE_FIELD_WRITE("ioctl(SIOCGIFFLAGS, ifreq->ifr_flags)", p->ifr_flags);
+      }
+      break;
+   case VKI_SIOCGIFNETMASK:
+      {
+         struct vki_ifreq *p = (struct vki_ifreq *) ARG3;
+         PRE_FIELD_READ("ioctl(SIOCGIFFLAGS, ifreq->ifr_name)", p->ifr_name);
+         PRE_FIELD_WRITE("ioctl(SIOCGIFFLAGS, ifreq->ifr_addr)", p->ifr_addr);
+      }
+      break;
+   case VKI_SIOCGIFNUM:
+      PRE_MEM_WRITE("ioctl(SIOCGIFNUM)", ARG3, sizeof(int));
+      break;
+   case VKI_SIOCGLIFBRDADDR:
+      {
+         struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+         PRE_FIELD_READ("ioctl(SIOCGLIFBRDADDR, lifreq->lifr_name)",
+                        p->lifr_name);
+         PRE_FIELD_WRITE("ioctl(SIOCGLIFBRDADDR, lifreq->lifr_addr)",
+                         p->lifr_addr);
+      }
+      break;
+   case VKI_SIOCGLIFCONF:
+      {
+         struct vki_lifconf *p = (struct vki_lifconf *) ARG3;
+         PRE_FIELD_READ("ioctl(SIOCGLIFCONF, lifconf->lifc_len)", p->lifc_len);
+         PRE_FIELD_READ("ioctl(SIOCGLIFCONF, lifconf->lifc_buf)", p->lifc_buf);
+         PRE_FIELD_READ("ioctl(SIOCGLIFCONF, lifconf->lifc_family)",
+                        p->lifc_family);
+         PRE_FIELD_READ("ioctl(SIOCGLIFCONF, lifconf->lifc_flags)",
+                        p->lifc_flags);
+         if (ML_(safe_to_deref)(p, sizeof(*p))) {
+            if ((p->lifc_buf != NULL) && (p->lifc_len > 0))
+               PRE_MEM_WRITE("ioctl(SIOCGLIFCONF, lifconf->lifc_buf)",
+                             (Addr) p->lifc_buf, p->lifc_len);
+         }
+         /* lifc_len gets also written to during SIOCGLIFCONF ioctl. */
+      }
+      break;
+   case VKI_SIOCGLIFFLAGS:
+      {
+         struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+         PRE_FIELD_READ("ioctl(SIOCGLIFFLAGS, lifreq->lifr_name)",
+                        p->lifr_name);
+         PRE_FIELD_WRITE("ioctl(SIOCGLIFFLAGS, lifreq->lifr_flags)",
+                         p->lifr_flags);
+      }
+      break;
+   case VKI_SIOCGLIFNETMASK:
+      {
+         struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+         PRE_FIELD_READ("ioctl(SIOCGLIFNETMASK, lifreq->lifr_name)",
+                        p->lifr_name);
+         PRE_FIELD_WRITE("ioctl(SIOCGLIFNETMASK, lifreq->lifr_addr)",
+                         p->lifr_addr);
+      }
+      break;
+   case VKI_SIOCGLIFNUM:
+      {
+         struct vki_lifnum *p = (struct vki_lifnum *) ARG3;
+         PRE_FIELD_READ("ioctl(SIOCGLIFNUM, lifn->lifn_family)",
+                        p->lifn_family);
+         PRE_FIELD_READ("ioctl(SIOCGLIFNUM, lifn->lifn_flags)",
+                        p->lifn_flags);
+         PRE_FIELD_WRITE("ioctl(SIOCGLIFNUM, lifn->lifn_count)",
+                         p->lifn_count);
+      }
+      break;
+
+   /* filio */
+   case VKI_FIOSETOWN:
+      PRE_MEM_READ("ioctl(FIOSETOWN)", ARG3, sizeof(vki_pid_t));
+      break;
+   case VKI_FIOGETOWN:
+      PRE_MEM_WRITE("ioctl(FIOGETOWN)", ARG3, sizeof(vki_pid_t));
+      break;
+
+   /* CRYPTO */
+   case VKI_CRYPTO_GET_PROVIDER_LIST:
+      {
+         vki_crypto_get_provider_list_t *pl =
+            (vki_crypto_get_provider_list_t *) ARG3;
+         PRE_FIELD_READ("ioctl(CRYPTO_GET_PROVIDER_LIST, pl->pl_count)",
+                        pl->pl_count);
+
+         if (ML_(safe_to_deref)(pl, sizeof(*pl))) {
+            PRE_MEM_WRITE("ioctl(CRYPTO_GET_PROVIDER_LIST)", ARG3,
+                          MAX(1, pl->pl_count) *
+                          sizeof(vki_crypto_get_provider_list_t));
+         }
+         /* Save the requested count to unused ARG4 below,
+            when we know pre-handler succeeded.
+          */
+      }
+      break; 
+
+   /* dtrace */
+   case VKI_DTRACEHIOC_REMOVE:
+      break;
+   case VKI_DTRACEHIOC_ADDDOF:
+      {
+         vki_dof_helper_t *dh = (vki_dof_helper_t *) ARG3;
+         PRE_MEM_RASCIIZ("ioctl(DTRACEHIOC_ADDDOF, dh->dofhp_mod)",
+                         (Addr) dh->dofhp_mod);
+         PRE_FIELD_READ("ioctl(DTRACEHIOC_ADDDOF, dh->dofhp_addr",
+                        dh->dofhp_addr);
+         PRE_FIELD_READ("ioctl(DTRACEHIOC_ADDDOF, dh->dofhp_dof",
+                        dh->dofhp_dof);
+      }
+      break;
+
+   default:
+      ML_(PRE_unknown_ioctl)(tid, ARG2, ARG3);
+      break;
+   }
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "ioctl", tid, False)) {
+      SET_STATUS_Failure(VKI_EBADF);
+   } else if (ARG2 == VKI_CRYPTO_GET_PROVIDER_LIST) {
+      /* Save the requested count to unused ARG4 now. */
+      ARG4 = ARG3;
+   }
+}
+
+POST(sys_ioctl)
+{
+   /* Prevent sign extending the switch case values to 64-bits on 64-bits
+      architectures. */
+   Int cmd = (Int) ARG2;
+
+   switch (cmd /*request*/) {
+   /* pools */
+   case VKI_POOL_STATUSQ:
+      POST_MEM_WRITE(ARG3, sizeof(vki_pool_status_t));
+      break;
+
+   /* mntio */
+   case VKI_MNTIOC_GETMNTANY:
+      {
+         struct vki_mntentbuf *embuf = (struct vki_mntentbuf *) ARG3;
+         struct vki_mnttab *mnt = (struct vki_mnttab *) embuf->mbuf_emp;
+
+         POST_MEM_WRITE((Addr) mnt, sizeof(struct vki_mnttab));
+         if (mnt != NULL) {
+            if (mnt->mnt_special != NULL)
+               POST_MEM_WRITE((Addr) mnt->mnt_special,
+                              VG_(strlen)(mnt->mnt_special) + 1);
+            if (mnt->mnt_mountp != NULL)
+               POST_MEM_WRITE((Addr) mnt->mnt_mountp,
+                              VG_(strlen)(mnt->mnt_mountp) + 1);
+            if (mnt->mnt_fstype != NULL)
+               POST_MEM_WRITE((Addr) mnt->mnt_fstype,
+                              VG_(strlen)(mnt->mnt_fstype) + 1);
+            if (mnt->mnt_mntopts != NULL)
+               POST_MEM_WRITE((Addr) mnt->mnt_mntopts,
+                              VG_(strlen)(mnt->mnt_mntopts) + 1);
+            if (mnt->mnt_time != NULL)
+               POST_MEM_WRITE((Addr) mnt->mnt_time,
+                              VG_(strlen)(mnt->mnt_time) + 1);
+         }
+      }
+      break;
+
+   /* termio/termios */
+   case VKI_TCGETA:
+      POST_MEM_WRITE(ARG3, sizeof(struct vki_termio));
+      break;
+   case VKI_TCGETS:
+      POST_MEM_WRITE(ARG3, sizeof(struct vki_termios));
+      break;
+   case VKI_TCSETS:
+      break;
+   case VKI_TCSETSW:
+      break;
+   case VKI_TCSETSF:
+      break;
+   case VKI_TIOCGWINSZ:
+      POST_MEM_WRITE(ARG3, sizeof(struct vki_winsize));
+      break;
+   case VKI_TIOCSWINSZ:
+      break;
+   case VKI_TIOCGPGRP:
+      POST_MEM_WRITE(ARG3, sizeof(vki_pid_t));
+      break;
+   case VKI_TIOCSPGRP:
+      break;
+   case VKI_TIOCGSID:
+      POST_MEM_WRITE(ARG3, sizeof(vki_pid_t));
+      break;
+   case VKI_TIOCNOTTY:
+   case VKI_TIOCSCTTY:
+      break;
+
+   /* STREAMS */
+   case VKI_I_PUSH:
+      break;
+   case VKI_I_STR:
+      {
+         struct vki_strioctl *p = (struct vki_strioctl *) ARG3;
+
+         POST_FIELD_WRITE(p->ic_len);
+         if ((p->ic_dp != NULL) && (p->ic_len > 0))
+            POST_MEM_WRITE((Addr) p->ic_dp, p->ic_len);
+      }
+      break;
+   case VKI_I_PEEK:
+      {
+         struct vki_strpeek *p = (struct vki_strpeek*)ARG3;
+
+         POST_FIELD_WRITE(p->ctlbuf.len);
+         POST_FIELD_WRITE(p->databuf.len);
+         POST_FIELD_WRITE(p->flags);
+
+         if (p->ctlbuf.buf && p->ctlbuf.len > 0)
+            POST_MEM_WRITE((Addr)p->ctlbuf.buf, p->ctlbuf.len);
+         if (p->databuf.buf && p->databuf.len > 0)
+            POST_MEM_WRITE((Addr)p->databuf.buf, p->databuf.len);
+      }
+      break;
+   case VKI_I_CANPUT:
+      break;
+
+   /* sockio */
+   case VKI_SIOCGIFCONF:
+      {
+         struct vki_ifconf *p = (struct vki_ifconf *) ARG3;
+         POST_FIELD_WRITE(p->ifc_len);
+         POST_FIELD_WRITE(p->ifc_req);
+         if ((p->ifc_req != NULL) && (p->ifc_len > 0))
+            POST_MEM_WRITE((Addr) p->ifc_req, p->ifc_len);
+      }
+      break;
+   case VKI_SIOCGIFFLAGS:
+      {
+         struct vki_ifreq *p = (struct vki_ifreq *) ARG3;
+         POST_FIELD_WRITE(p->ifr_flags);
+      }
+      break;
+   case VKI_SIOCGIFNETMASK:
+      {
+         struct vki_ifreq *p = (struct vki_ifreq *) ARG3;
+         POST_FIELD_WRITE(p->ifr_addr);
+      }
+      break;
+   case VKI_SIOCGIFNUM:
+      POST_MEM_WRITE(ARG3, sizeof(int));
+      break;
+   case VKI_SIOCGLIFBRDADDR:
+      {
+         struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+         POST_FIELD_WRITE(p->lifr_addr);
+      }
+      break;
+   case VKI_SIOCGLIFCONF:
+      {
+         struct vki_lifconf *p = (struct vki_lifconf *) ARG3;
+         POST_FIELD_WRITE(p->lifc_len);
+         POST_FIELD_WRITE(p->lifc_req);
+         if ((p->lifc_req != NULL) && (p->lifc_len > 0))
+            POST_MEM_WRITE((Addr) p->lifc_req, p->lifc_len);
+      }
+      break;
+   case VKI_SIOCGLIFFLAGS:
+      {
+         struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+         POST_FIELD_WRITE(p->lifr_flags);
+      }
+      break;
+   case VKI_SIOCGLIFNETMASK:
+      {
+         struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+         POST_FIELD_WRITE(p->lifr_addr);
+      }
+      break;
+   case VKI_SIOCGLIFNUM:
+      {
+         struct vki_lifnum *p = (struct vki_lifnum *) ARG3;
+         POST_FIELD_WRITE(p->lifn_count);
+      }
+      break;  
+
+   /* filio */
+   case VKI_FIOSETOWN:
+      break;
+   case VKI_FIOGETOWN:
+      POST_MEM_WRITE(ARG3, sizeof(vki_pid_t));
+      break;
+
+   /* CRYPTO */
+   case VKI_CRYPTO_GET_PROVIDER_LIST:
+      {
+         vki_crypto_get_provider_list_t *pl =
+            (vki_crypto_get_provider_list_t *) ARG3;
+
+         POST_FIELD_WRITE(pl->pl_count);
+         POST_FIELD_WRITE(pl->pl_return_value);
+
+         if ((ARG4 > 0) && (pl->pl_return_value == VKI_CRYPTO_SUCCESS))
+            POST_MEM_WRITE((Addr) pl->pl_list, pl->pl_count *
+                           sizeof(vki_crypto_provider_entry_t));
+      }
+      break;
+
+   /* dtrace */
+   case VKI_DTRACEHIOC_REMOVE:
+   case VKI_DTRACEHIOC_ADDDOF:
+      break;
+
+   default:
+      /* Not really anything to do since ioctl direction hints are hardly used
+         on Solaris. */
+      break;
+   }
+}
+
+PRE(sys_fchownat)
+{
+   /* int fchownat(int fd, const char *path, uid_t owner, gid_t group,
+                   int flag); */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG1;
+
+   PRINT("sys_fchownat ( %d, %#lx(%s), %ld, %ld, %ld )", fd,
+         ARG2, (HChar *) ARG2, SARG3, SARG4, ARG5);
+   PRE_REG_READ5(long, "fchownat", int, fd, const char *, path,
+                 vki_uid_t, owner, vki_gid_t, group, int, flag);
+
+   if (ARG2)
+      PRE_MEM_RASCIIZ("fchownat(path)", ARG2);
+
+   /* Be strict but ignore fd for absolute path. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd, "fchownat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_fdsync)
+{
+   /* int fdsync(int fd, int flag); */
+   PRINT("sys_fdsync ( %ld, %ld )", SARG1, SARG2);
+   PRE_REG_READ2(long, "fdsync", int, fd, int, flag);
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "fdsync", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_execve)
+{
+   Int i, j;
+   /* This is a Solaris specific version of the generic pre-execve wrapper. */
+
+#if defined(SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS)
+   /* int execve(uintptr_t file, const char **argv, const char **envp,
+                 int flags); */
+   PRINT("sys_execve ( %#lx, %#lx, %#lx, %ld )", ARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "execve", uintptr_t, file, const char **, argv,
+                 const char **, envp, int, flags);
+
+#else
+
+   /* int execve(const char *fname, const char **argv, const char **envp); */
+   PRINT("sys_execve ( %#lx(%s), %#lx, %#lx )",
+         ARG1, (HChar *) ARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "execve", const char *, file, const char **, argv,
+                 const char **, envp);
+#endif /* SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS */
+
+   Bool ARG1_is_fd = False;
+#if defined(SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS)
+   if (ARG4 & VKI_EXEC_DESCRIPTOR) {
+      ARG1_is_fd = True;
+   }
+#endif /* SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS */
+
+   if (ARG1_is_fd == False)
+      PRE_MEM_RASCIIZ("execve(filename)", ARG1);
+   if (ARG2)
+      ML_(pre_argv_envp)(ARG2, tid, "execve(argv)", "execve(argv[i])");
+   if (ARG3)
+      ML_(pre_argv_envp)(ARG3, tid, "execve(envp)", "execve(envp[i])");
+
+   /* Erk.  If the exec fails, then the following will have made a mess of
+      things which makes it hard for us to continue.  The right thing to do is
+      piece everything together again in POST(execve), but that's close to
+      impossible.  Instead, we make an effort to check that the execve will
+      work before actually doing it. */
+
+   const HChar *fname = (const HChar *) ARG1;
+   if (ARG1_is_fd) {
+      if (!ML_(fd_allowed)(ARG1, "execve", tid, False)) {
+         SET_STATUS_Failure(VKI_EBADF);
+         return;
+      }
+
+      if (VG_(resolve_filename)(ARG1, &fname) == False) {
+         SET_STATUS_Failure(VKI_EBADF);
+         return;
+      }
+
+      struct vg_stat stats;
+      if (VG_(fstat)(ARG1, &stats) != 0) {
+         SET_STATUS_Failure(VKI_EBADF);
+         return;
+      }
+
+      if (stats.nlink > 1)
+         VG_(unimplemented)("Syswrap of execve where fd points to a hardlink.");
+   }
+
+   /* Check that the name at least begins in client-accessible storage. */
+   if (ARG1_is_fd == False) {
+      if ((fname == NULL) || !ML_(safe_to_deref)(fname, 1)) {
+         SET_STATUS_Failure(VKI_EFAULT);
+         return;
+      }
+   }
+
+   /* Check that the args at least begin in client-accessible storage.
+      Solaris disallows to perform the exec without any arguments specified.
+    */
+   if (!ARG2 /* obviously bogus */ ||
+       !VG_(am_is_valid_for_client)(ARG2, 1, VKI_PROT_READ)) {
+      SET_STATUS_Failure(VKI_EFAULT);
+      return;
+   }
+
+   /* Debug-only printing. */
+   if (0) {
+      VG_(printf)("ARG1 = %#lx(%s)\n", ARG1, fname);
+      if (ARG2) {
+         Int q;
+         HChar** vec = (HChar**)ARG2;
+
+         VG_(printf)("ARG2 = ");
+         for (q = 0; vec[q]; q++)
+            VG_(printf)("%p(%s) ", vec[q], vec[q]);
+         VG_(printf)("\n");
+      }
+      else
+         VG_(printf)("ARG2 = null\n");
+   }
+
+   /* Decide whether or not we want to follow along. */
+   /* Make 'child_argv' be a pointer to the child's arg vector (skipping the
+      exe name) */
+   const HChar **child_argv = (const HChar **) ARG2;
+   if (child_argv[0] == NULL)
+      child_argv = NULL;
+   Bool trace_this_child = VG_(should_we_trace_this_child)(fname, child_argv);
+
+   /* Do the important checks:  it is a file, is executable, permissions are
+      ok, etc.  We allow setuid executables to run only in the case when
+      we are not simulating them, that is, they to be run natively. */
+   Bool setuid_allowed = trace_this_child ? False : True;
+   SysRes res = VG_(pre_exec_check)(fname, NULL, setuid_allowed);
+   if (sr_isError(res)) {
+      SET_STATUS_Failure(sr_Err(res));
+      return;
+   }
+
+   /* If we're tracing the child, and the launcher name looks bogus (possibly
+      because launcher.c couldn't figure it out, see comments therein) then we
+      have no option but to fail. */
+   if (trace_this_child &&
+       (!VG_(name_of_launcher) || VG_(name_of_launcher)[0] != '/')) {
+      SET_STATUS_Failure(VKI_ECHILD); /* "No child processes." */
+      return;
+   }
+
+   /* After this point, we can't recover if the execve fails. */
+   VG_(debugLog)(1, "syswrap", "Exec of %s\n", fname);
+
+   /* Terminate gdbserver if it is active. */
+   if (VG_(clo_vgdb) != Vg_VgdbNo) {
+      /* If the child will not be traced, we need to terminate gdbserver to
+         cleanup the gdbserver resources (e.g. the FIFO files). If child will
+         be traced, we also terminate gdbserver: the new Valgrind will start a
+         fresh gdbserver after exec. */
+      VG_(gdbserver)(0);
+   }
+
+   /* Resistance is futile.  Nuke all other threads.  POSIX mandates this.
+      (Really, nuke them all, since the new process will make its own new
+      thread.) */
+   VG_(nuke_all_threads_except)(tid, VgSrc_ExitThread);
+   VG_(reap_threads)(tid);
+
+   /* Set up the child's exe path. */
+   const HChar *path = fname;
+   const HChar *launcher_basename = NULL;
+   if (trace_this_child) {
+      /* We want to exec the launcher.  Get its pre-remembered path. */
+      path = VG_(name_of_launcher);
+      /* VG_(name_of_launcher) should have been acquired by m_main at
+         startup. */
+      vg_assert(path);
+
+      launcher_basename = VG_(strrchr)(path, '/');
+      if (!launcher_basename || launcher_basename[1] == '\0')
+         launcher_basename = path;  /* hmm, tres dubious */
+      else
+         launcher_basename++;
+   }
+
+   /* Set up the child's environment.
+
+      Remove the valgrind-specific stuff from the environment so the child
+      doesn't get vgpreload_core.so, vgpreload_<tool>.so, etc.  This is done
+      unconditionally, since if we are tracing the child, the child valgrind
+      will set up the appropriate client environment.  Nb: we make a copy of
+      the environment before trying to mangle it as it might be in read-only
+      memory (bug #101881).
+
+      Then, if tracing the child, set VALGRIND_LIB for it. */
+   HChar **envp = NULL;
+   if (ARG3 != 0) {
+      envp = VG_(env_clone)((HChar**)ARG3);
+      vg_assert(envp != NULL);
+      VG_(env_remove_valgrind_env_stuff)(envp, True /*ro_strings*/, NULL);
+   }
+
+   if (trace_this_child) {
+      /* Set VALGRIND_LIB in ARG3 (the environment). */
+      VG_(env_setenv)( &envp, VALGRIND_LIB, VG_(libdir));
+   }
+
+   /* Set up the child's args.  If not tracing it, they are simply ARG2.
+      Otherwise, they are:
+
+      [launcher_basename] ++ VG_(args_for_valgrind) ++ [ARG1] ++ ARG2[1..],
+
+      except that the first VG_(args_for_valgrind_noexecpass) args are
+      omitted. */
+   HChar **argv = NULL;
+   if (!trace_this_child)
+      argv = (HChar **) ARG2;
+   else {
+      Int tot_args;
+
+      vg_assert(VG_(args_for_valgrind));
+      vg_assert(VG_(args_for_valgrind_noexecpass) >= 0);
+      vg_assert(VG_(args_for_valgrind_noexecpass)
+                   <= VG_(sizeXA)(VG_(args_for_valgrind)));
+
+      /* How many args in total will there be? */
+      /* launcher basename */
+      tot_args = 1;
+      /* V's args */
+      tot_args += VG_(sizeXA)(VG_(args_for_valgrind));
+      tot_args -= VG_(args_for_valgrind_noexecpass);
+      /* name of client exe */
+      tot_args++;
+      /* args for client exe, skipping [0] */
+      HChar **arg2copy = (HChar **) ARG2;
+      if (arg2copy[0] != NULL)
+         for (i = 1; arg2copy[i]; i++)
+            tot_args++;
+      /* allocate */
+      argv = VG_(malloc)("syswrap.exec.5", (tot_args + 1) * sizeof(HChar*));
+      /* copy */
+      j = 0;
+      argv[j++] = CONST_CAST(HChar *, launcher_basename);
+      for (i = 0; i < VG_(sizeXA)(VG_(args_for_valgrind)); i++) {
+         if (i < VG_(args_for_valgrind_noexecpass))
+            continue;
+         argv[j++] = *(HChar**)VG_(indexXA)(VG_(args_for_valgrind), i);
+      }
+      argv[j++] = CONST_CAST(HChar *, fname);
+      if (arg2copy[0] != NULL)
+         for (i = 1; arg2copy[i]; i++)
+            argv[j++] = arg2copy[i];
+      argv[j++] = NULL;
+      /* check */
+      vg_assert(j == tot_args + 1);
+   }
+
+   /* Set the signal state up for exec.
+
+      We need to set the real signal state to make sure the exec'd process
+      gets SIG_IGN properly.
+
+      Also set our real sigmask to match the client's sigmask so that the
+      exec'd child will get the right mask.  First we need to clear out any
+      pending signals so they they don't get delivered, which would confuse
+      things.
+
+      XXX This is a bug - the signals should remain pending, and be delivered
+      to the new process after exec.  There's also a race-condition, since if
+      someone delivers us a signal between the sigprocmask and the execve,
+      we'll still get the signal. Oh well.
+   */
+   {
+      vki_sigset_t allsigs;
+      vki_siginfo_t info;
+
+      /* What this loop does: it queries SCSS (the signal state that the
+         client _thinks_ the kernel is in) by calling VG_(do_sys_sigaction),
+         and modifies the real kernel signal state accordingly. */
+      for (i = 1; i < VG_(max_signal); i++) {
+         vki_sigaction_fromK_t sa_f;
+         vki_sigaction_toK_t   sa_t;
+         VG_(do_sys_sigaction)(i, NULL, &sa_f);
+         VG_(convert_sigaction_fromK_to_toK)(&sa_f, &sa_t);
+         VG_(sigaction)(i, &sa_t, NULL);
+      }
+
+      VG_(sigfillset)(&allsigs);
+      while (VG_(sigtimedwait_zero)(&allsigs, &info) > 0)
+         ;
+
+      ThreadState *tst = VG_(get_ThreadState)(tid);
+      VG_(sigprocmask)(VKI_SIG_SETMASK, &tst->sig_mask, NULL);
+   }
+
+   /* Restore the DATA rlimit for the child. */
+   VG_(setrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data));
+
+   /* Debug-only printing. */
+   if (0) {
+      HChar **cpp;
+      VG_(printf)("exec: %s\n", path);
+      for (cpp = argv; cpp && *cpp; cpp++)
+         VG_(printf)("argv: %s\n", *cpp);
+      if (0)
+         for (cpp = envp; cpp && *cpp; cpp++)
+            VG_(printf)("env: %s\n", *cpp);
+   }
+
+#if defined(SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS)
+   res = VG_(do_syscall4)(__NR_execve, (UWord) path, (UWord) argv,
+                          (UWord) envp, ARG4 & ~VKI_EXEC_DESCRIPTOR);
+#else
+   res = VG_(do_syscall3)(__NR_execve, (UWord) path, (UWord) argv,
+                          (UWord) envp);
+#endif /* SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS */
+   SET_STATUS_from_SysRes(res);
+
+   /* If we got here, then the execve failed.  We've already made way too much
+      of a mess to continue, so we have to abort. */
+   vg_assert(FAILURE);
+#if defined(SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS)
+   if (ARG1_is_fd)
+      VG_(message)(Vg_UserMsg, "execve(%ld, %#lx, %#lx, %lu) failed, "
+                   "errno %ld\n", SARG1, ARG2, ARG3, ARG4, ERR);
+   else
+      VG_(message)(Vg_UserMsg, "execve(%#lx(%s), %#lx, %#lx, %ld) failed, errno"
+                   " %lu\n", ARG1, (HChar *) ARG1, ARG2, ARG3, SARG4, ERR);
+#else
+   VG_(message)(Vg_UserMsg, "execve(%#lx(%s), %#lx, %#lx) failed, errno %lu\n",
+                ARG1, (HChar *) ARG1, ARG2, ARG3, ERR);
+#endif /* SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS */
+   VG_(message)(Vg_UserMsg, "EXEC FAILED: I can't recover from "
+                            "execve() failing, so I'm dying.\n");
+   VG_(message)(Vg_UserMsg, "Add more stringent tests in PRE(sys_execve), "
+                            "or work out how to recover.\n");
+   VG_(exit)(101);
+   /*NOTREACHED*/
+}
+
+static void pre_mem_read_flock(ThreadId tid, struct vki_flock *lock)
+{
+   PRE_FIELD_READ("fcntl(lock->l_type)", lock->l_type);
+   PRE_FIELD_READ("fcntl(lock->l_whence)", lock->l_whence);
+   PRE_FIELD_READ("fcntl(lock->l_start)", lock->l_start);
+   PRE_FIELD_READ("fcntl(lock->l_len)", lock->l_len);
+}
+
+#if defined(VGP_x86_solaris)
+static void pre_mem_read_flock64(ThreadId tid, struct vki_flock64 *lock)
+{
+   PRE_FIELD_READ("fcntl(lock->l_type)", lock->l_type);
+   PRE_FIELD_READ("fcntl(lock->l_whence)", lock->l_whence);
+   PRE_FIELD_READ("fcntl(lock->l_start)", lock->l_start);
+   PRE_FIELD_READ("fcntl(lock->l_len)", lock->l_len);
+}
+#endif /* VGP_x86_solaris */
+
+PRE(sys_fcntl)
+{
+   /* int fcntl(int fildes, int cmd, ...); */
+
+   switch (ARG2 /*cmd*/) {
+   /* These ones ignore ARG3. */
+   case VKI_F_GETFD:
+   case VKI_F_GETFL:
+   case VKI_F_GETXFL:
+      PRINT("sys_fcntl ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, "fcntl", int, fildes, int, cmd);
+      break;
+
+   /* These ones use ARG3 as "arg". */
+   case VKI_F_DUPFD:
+   case VKI_F_SETFD:
+   case VKI_F_SETFL:
+   case VKI_F_DUP2FD:
+   case VKI_F_BADFD:
+      PRINT("sys_fcntl ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+      PRE_REG_READ3(long, "fcntl", int, fildes, int, cmd, int, arg);
+      /* Check if a client program isn't going to poison any of V's output
+         fds. */
+      if (ARG2 == VKI_F_DUP2FD &&
+          !ML_(fd_allowed)(ARG3, "fcntl(F_DUP2FD)", tid, False)) {
+         SET_STATUS_Failure(VKI_EBADF);
+         return;
+      }
+      break;
+
+   /* These ones use ARG3 as "native lock" (input only). */
+   case VKI_F_SETLK:
+   case VKI_F_SETLKW:
+   case VKI_F_ALLOCSP:
+   case VKI_F_FREESP:
+   case VKI_F_SETLK_NBMAND:
+      PRINT("sys_fcntl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, "fcntl", int, fildes, int, cmd,
+                    struct flock *, lock);
+      pre_mem_read_flock(tid, (struct vki_flock*)ARG3);
+      break;
+
+   /* This one uses ARG3 as "native lock" (input&output). */
+   case VKI_F_GETLK:
+      PRINT("sys_fcntl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, "fcntl", int, fildes, int, cmd,
+                    struct flock *, lock);
+      pre_mem_read_flock(tid, (struct vki_flock*)ARG3);
+      PRE_MEM_WRITE("fcntl(lock)", ARG3, sizeof(struct vki_flock));
+      break;
+
+#if defined(VGP_x86_solaris)
+   /* These ones use ARG3 as "transitional 64b lock" (input only). */
+   case VKI_F_SETLK64:
+   case VKI_F_SETLKW64:
+   case VKI_F_ALLOCSP64:
+   case VKI_F_FREESP64:
+   case VKI_F_SETLK64_NBMAND:
+      PRINT("sys_fcntl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, "fcntl", int, fildes, int, cmd,
+                    struct flock64 *, lock);
+      pre_mem_read_flock64(tid, (struct vki_flock64*)ARG3);
+      break;
+
+   /* This one uses ARG3 as "transitional 64b lock" (input&output). */
+   case VKI_F_GETLK64:
+      PRINT("sys_fcntl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, "fcntl", int, fildes, int, cmd,
+                    struct flock64 *, lock);
+      pre_mem_read_flock64(tid, (struct vki_flock64*)ARG3);
+      PRE_MEM_WRITE("fcntl(lock)", ARG3, sizeof(struct vki_flock64));
+      break;
+#endif /* VGP_x86_solaris */
+
+   /* These ones use ARG3 as "fshare". */
+   case VKI_F_SHARE:
+   case VKI_F_UNSHARE:
+   case VKI_F_SHARE_NBMAND:
+      PRINT("sys_fcntl[ARG3=='fshare'] ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, "fcntl", int, fildes, int, cmd,
+                    struct fshare *, sh);
+      PRE_MEM_READ("fcntl(fshare)", ARG3, sizeof(struct vki_fshare));
+      break;
+
+   default:
+      VG_(unimplemented)("Syswrap of the fcntl call with cmd %ld.", SARG2);
+      /*NOTREACHED*/
+      break;
+   }
+
+   if (ARG2 == VKI_F_SETLKW
+#if defined(VGP_x86_solaris)
+       || ARG2 == VKI_F_SETLKW64
+#endif /* VGP_x86_solaris */
+       )
+      *flags |= SfMayBlock;
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "fcntl", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_fcntl)
+{
+   switch (ARG2 /*cmd*/) {
+   case VKI_F_DUPFD:
+      if (!ML_(fd_allowed)(RES, "fcntl(F_DUPFD)", tid, True)) {
+         VG_(close)(RES);
+         SET_STATUS_Failure(VKI_EMFILE);
+      }
+      else if (VG_(clo_track_fds))
+         ML_(record_fd_open_named)(tid, RES);
+      break;
+
+   case VKI_F_DUP2FD:
+      if (!ML_(fd_allowed)(RES, "fcntl(F_DUP2FD)", tid, True)) {
+         VG_(close)(RES);
+         SET_STATUS_Failure(VKI_EMFILE);
+      }
+      else if (VG_(clo_track_fds))
+         ML_(record_fd_open_named)(tid, RES);
+      break;
+
+   /* This one uses ARG3 as "native lock" (input&output). */
+   case VKI_F_GETLK:
+      POST_MEM_WRITE(ARG3, sizeof(struct vki_flock));
+      break;
+
+#if defined(VGP_x86_solaris)
+   /* This one uses ARG3 as "transitional 64b lock" (input&output). */
+   case VKI_F_GETLK64:
+      POST_MEM_WRITE(ARG3, sizeof(struct vki_flock64));
+      break;
+#endif /* VGP_x86_solaris */
+
+   default:
+      break;
+   }
+}
+
+PRE(sys_renameat)
+{
+   /* int renameat(int fromfd, const char *old, int tofd, const char *new); */
+
+   /* Interpret the first and third arguments as 32-bit values even on 64-bit
+      architecture. This is different from Linux, for example, where glibc
+      sign-extends them. */
+   Int fromfd = (Int) ARG1;
+   Int tofd = (Int) ARG3;
+
+   *flags |= SfMayBlock;
+   PRINT("sys_renameat ( %d, %#lx(%s), %d, %#lx(%s) )", fromfd,
+         ARG2, (HChar *) ARG2, tofd, ARG4, (HChar *) ARG4);
+   PRE_REG_READ4(long, "renameat", int, fromfd, const char *, old,
+                 int, tofd, const char *, new);
+
+   PRE_MEM_RASCIIZ("renameat(old)", ARG2);
+   PRE_MEM_RASCIIZ("renameat(new)", ARG4);
+
+   /* Be strict but ignore fromfd/tofd for absolute old/new. */
+   if (fromfd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fromfd, "renameat", tid, False)) {
+      SET_STATUS_Failure(VKI_EBADF);
+   }
+   if (tofd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG4, 1)
+       && ((HChar *) ARG4)[0] != '/'
+       && !ML_(fd_allowed)(tofd, "renameat", tid, False)) {
+      SET_STATUS_Failure(VKI_EBADF);
+   }
+}
+
+PRE(sys_unlinkat)
+{
+   /* int unlinkat(int dirfd, const char *pathname, int flags); */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int dfd = (Int) ARG1;
+
+   *flags |= SfMayBlock;
+   PRINT("sys_unlinkat ( %d, %#lx(%s), %ld )", dfd, ARG2, (HChar *) ARG2,
+         SARG3);
+   PRE_REG_READ3(long, "unlinkat", int, dirfd, const char *, pathname,
+                 int, flags);
+   PRE_MEM_RASCIIZ("unlinkat(pathname)", ARG2);
+
+   /* Be strict but ignore dfd for absolute pathname. */
+   if (dfd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(dfd, "unlinkat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_fstatat)
+{
+   /* int fstatat(int fildes, const char *path, struct stat *buf,
+                    int flag); */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG1;
+
+   PRINT("sys_fstatat ( %d, %#lx(%s), %#lx, %ld )", fd, ARG2,
+         (HChar *) ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "fstatat", int, fildes, const char *, path,
+                 struct stat *, buf, int, flag);
+   if (ARG2) {
+      /* Only test ARG2 if it isn't NULL.  The kernel treats the NULL-case as
+         fstat(fildes, buf). */
+      PRE_MEM_RASCIIZ("fstatat(path)", ARG2);
+   }
+   PRE_MEM_WRITE("fstatat(buf)", ARG3, sizeof(struct vki_stat));
+
+   /* Be strict but ignore fildes for absolute path. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd, "fstatat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_fstatat)
+{
+   POST_MEM_WRITE(ARG3, sizeof(struct vki_stat));
+}
+
+PRE(sys_openat)
+{
+   /* int openat(int fildes, const char *filename, int flags);
+      int openat(int fildes, const char *filename, int flags, mode_t mode); */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG1;
+
+   if (ARG3 & VKI_O_CREAT) {
+      /* 4-arg version */
+      PRINT("sys_openat ( %d, %#lx(%s), %ld, %ld )", fd, ARG2, (HChar *) ARG2,
+            SARG3, SARG4);
+      PRE_REG_READ4(long, "openat", int, fildes, const char *, filename,
+                    int, flags, vki_mode_t, mode);
+   }
+   else {
+      /* 3-arg version */
+      PRINT("sys_openat ( %d, %#lx(%s), %ld )", fd, ARG2, (HChar *) ARG2,
+            SARG3);
+      PRE_REG_READ3(long, "openat", int, fildes, const char *, filename,
+                    int, flags);
+   }
+
+   PRE_MEM_RASCIIZ("openat(filename)", ARG2);
+
+   /* Be strict but ignore fildes for absolute pathname. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd, "openat", tid, False)) {
+      SET_STATUS_Failure(VKI_EBADF);
+      return;
+   }
+
+   if (ML_(handle_auxv_open)(status, (const HChar *) ARG2, ARG3))
+      return;
+
+   if (handle_psinfo_open(status, True /*use_openat*/, (const HChar *) ARG2,
+                          fd, ARG3, ARG4))
+      return;
+
+#if defined(SOLARIS_PROC_CMDLINE)
+   if (handle_cmdline_open(status, (const HChar *) ARG2))
+      return;
+#endif /* SOLARIS_PROC_CMDLINE */
+
+   *flags |= SfMayBlock;
+}
+
+POST(sys_openat)
+{
+   if (!ML_(fd_allowed)(RES, "openat", tid, True)) {
+      VG_(close)(RES);
+      SET_STATUS_Failure(VKI_EMFILE);
+   }
+   else if (VG_(clo_track_fds))
+      ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)ARG2);
+}
+
+PRE(sys_tasksys)
+{
+   /* Kernel: long tasksys(int code, projid_t projid, uint_t flags,
+                           void *projidbuf, size_t pbufsz);
+    */
+   switch (ARG1 /*code*/) {
+   case 0:
+      /* Libc: taskid_t settaskid(projid_t project, uint_t flags); */
+      PRINT("sys_tasksys ( %ld, %ld, %lu )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, SC2("tasksys", "settaskid"), int, code,
+                    vki_projid_t, projid, vki_uint_t, flags);
+      break;
+   case 1:
+      /* Libc: taskid_t gettaskid(void); */
+      PRINT("sys_tasksys ( %ld )", SARG1);
+      PRE_REG_READ1(long, SC2("tasksys", "gettaskid"), int, code);
+      break;
+   case 2:
+      /* Libc: projid_t getprojid(void); */
+      PRINT("sys_tasksys ( %ld )", SARG1);
+      PRE_REG_READ1(long, SC2("tasksys", "getprojid"), int, code);
+      break;
+   case 3:
+      /* Libproject: size_t projlist(id_t *idbuf, size_t idbufsz); */
+      PRINT("sys_tasksys ( %ld, %#lx, %lu )", SARG1, ARG4, ARG5);
+      PRE_REG_READ3(long, SC2("tasksys", "projlist"), int, code,
+                    vki_id_t *, idbuf, vki_size_t, idbufsz);
+      PRE_MEM_WRITE("tasksys(idbuf)", ARG4, ARG5);
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the tasksys call with code %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_tasksys)
+{
+   switch (ARG1 /*code*/) {
+   case 0:
+   case 1:
+   case 2:
+      break;
+   case 3:
+      if ((ARG4 != 0) && (ARG5 != 0))
+         POST_MEM_WRITE(ARG4, MIN(RES, ARG5));
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_lwp_park)
+{
+   /* Kernel: int lwp_park(int which, uintptr_t arg1, uintptr_t arg2);
+    */
+   *flags |= SfMayBlock;
+   switch (ARG1 /*which*/) {
+   case 0:
+      /* Libc: int lwp_park(timespec_t *timeout, id_t lwpid); */
+      PRINT("sys_lwp_park ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+      PRE_REG_READ3(long, SC2("lwp_park", "lwp_park"), int, which,
+                    timespec_t *, timeout, vki_id_t, lwpid);
+      if (ARG2) {
+         PRE_MEM_READ("lwp_park(timeout)", ARG2, sizeof(vki_timespec_t));
+         /*PRE_MEM_WRITE("lwp_park(timeout)", ARG2,
+                         sizeof(vki_timespec_t));*/
+      }
+      break;
+   case 1:
+      /* Libc: int lwp_unpark(id_t lwpid); */
+      PRINT("sys_lwp_park ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("lwp_park", "lwp_unpark"), int, which,
+                    vki_id_t, lwpid);
+      break;
+   case 2:
+      /* Libc: int lwp_unpark_all(id_t *lwpid, int nids); */
+      PRINT("sys_lwp_park ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+      PRE_REG_READ3(long, SC2("lwp_park", "lwp_unpark_all"), int, which,
+                    id_t *, lwpid, int, nids);
+      PRE_MEM_READ("lwp_park(lwpid)", ARG2, ARG3 * sizeof(vki_id_t));
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the lwp_park call with which %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_lwp_park)
+{
+   switch (ARG1 /*which*/) {
+   case 0:
+      if (ARG2)
+         POST_MEM_WRITE(ARG2, sizeof(vki_timespec_t));
+      break;
+   case 1:
+   case 2:
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_sendfilev)
+{
+   /* Kernel: ssize_t sendfilev(int opcode, int fd,
+                                const struct sendfilevec *vec,
+                                int sfvcnt, size_t *xferred);
+    */
+   PRINT("sys_sendfilev ( %ld, %ld, %#lx, %ld, %#lx )",
+         SARG1, SARG2, ARG3, SARG4, ARG5);
+
+   switch (ARG1 /*opcode*/) {
+   case VKI_SENDFILEV:
+      {
+         PRE_REG_READ5(long, "sendfilev", int, opcode, int, fd,
+                       const struct vki_sendfilevec *, vec,
+                       int, sfvcnt, vki_size_t *, xferred);
+
+         PRE_MEM_READ("sendfilev(vec)", ARG3,
+                      ARG4 * sizeof(struct vki_sendfilevec));
+         PRE_MEM_WRITE("sendfilev(xferred)", ARG5, sizeof(vki_size_t));
+
+         struct vki_sendfilevec *vec = (struct vki_sendfilevec *) ARG3;
+         if (ML_(safe_to_deref)(vec, ARG4 *
+                                sizeof(struct vki_sendfilevec))) {
+            UInt i;
+            for (i = 0; i < ARG4; i++) {
+               HChar desc[35];    // large enough
+               if (vec[i].sfv_fd == VKI_SFV_FD_SELF) {
+                  VG_(snprintf)(desc, sizeof(desc),
+                                "sendfilev(vec[%u].sfv_off", i);
+                  PRE_MEM_READ(desc, vec[i].sfv_off, vec[i].sfv_len);
+               } else {
+                  VG_(snprintf)(desc, sizeof(desc),
+                                "sendfilev(vec[%u].sfv_fd)", i);
+                  if (!ML_(fd_allowed)(vec[i].sfv_fd, desc, tid, False))
+                     SET_STATUS_Failure(VKI_EBADF);
+               }
+            }
+         }
+      }
+      break;
+   case VKI_SENDFILEV64:
+      {
+         PRE_REG_READ5(long, "sendfilev", int, opcode, int, fd,
+                       const struct vki_sendfilevec64 *, vec,
+                       int, sfvcnt, vki_size_t *, xferred);
+
+         PRE_MEM_READ("sendfilev(vec)", ARG3,
+                      ARG4 * sizeof(struct vki_sendfilevec64));
+         PRE_MEM_WRITE("sendfilev(xferred)", ARG5, sizeof(vki_size_t));
+
+         struct vki_sendfilevec64 *vec64 =
+            (struct vki_sendfilevec64 *) ARG3;
+         if (ML_(safe_to_deref)(vec64, ARG4 *
+                                sizeof(struct vki_sendfilevec64))) {
+            UInt i;
+            for (i = 0; i < ARG4; i++) {
+               HChar desc[35];    // large enough
+               if (vec64[i].sfv_fd == VKI_SFV_FD_SELF) {
+                  VG_(snprintf)(desc, sizeof(desc),
+                                "sendfilev(vec[%u].sfv_off", i);
+                  PRE_MEM_READ(desc, vec64[i].sfv_off, vec64[i].sfv_len);
+               } else {
+                  VG_(snprintf)(desc, sizeof(desc),
+                                "sendfilev(vec[%u].sfv_fd)", i);
+                  if (!ML_(fd_allowed)(vec64[i].sfv_fd, desc,
+                                       tid, False))
+                     SET_STATUS_Failure(VKI_EBADF);
+               }
+            }
+         }
+      }
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the sendfilev call with "
+                         "opcode %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG2, "sendfilev(fd)", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+
+   *flags |= SfMayBlock;
+}
+
+POST(sys_sendfilev)
+{
+   POST_MEM_WRITE(ARG5, sizeof(vki_size_t));
+}
+
+#if defined(SOLARIS_LWP_NAME_SYSCALL)
+PRE(sys_lwp_name)
+{
+   /* int lwp_name(int opcode, id_t lwpid, char *name, size_t len); */
+   PRINT("sys_lwp_name ( %ld, %ld, %#lx, %lu )", SARG1, SARG2, ARG3, ARG4);
+
+   switch (ARG1 /*opcode*/) {
+   case 0:
+      /* lwp_setname */
+      PRE_REG_READ3(long, "lwp_name", int, opcode, vki_id_t, lwpid,
+                    char *, name);
+      PRE_MEM_RASCIIZ("lwp_name(name)", ARG3);
+      break;
+   case 1:
+      /* lwp_getname */
+      PRE_REG_READ4(long, "lwp_name", int, opcode, vki_id_t, lwpid,
+                    char *, name, vki_size_t, len);
+      PRE_MEM_WRITE("lwp_name(name)", ARG3, ARG4);
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the lwp_name call with opcode %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_lwp_name)
+{
+   switch (ARG1 /*opcode*/) {
+   case 0:
+      if (ARG3) { // Paranoia
+         const HChar *new_name = (const HChar *) ARG3;
+         ThreadState *tst = VG_(get_ThreadState)(tid);
+         SizeT new_len = VG_(strlen)(new_name);
+
+         /* Don't bother reusing the memory. This is a rare event. */
+         tst->thread_name = VG_(realloc)("syswrap.lwp_name", tst->thread_name,
+                                         new_len + 1);
+         VG_(strcpy)(tst->thread_name, new_name);
+      }
+      break;
+   case 1:
+      POST_MEM_WRITE(ARG3, VG_(strlen)((HChar *) ARG3) + 1);
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+#endif /* SOLARIS_LWP_NAME_SYSCALL */
+
+PRE(sys_privsys)
+{
+   /* Kernel: int privsys(int code, priv_op_t op, priv_ptype_t type,
+                          void *buf, size_t bufsize, int itype);
+    */
+   switch (ARG1 /*code*/) {
+   case VKI_PRIVSYS_SETPPRIV:
+      /* Libc: int setppriv(priv_op_t op, priv_ptype_t type,
+                            const priv_set_t *pset);
+       */
+      PRINT("sys_privsys ( %ld, %ld, %ld, %#lx, %lu )", SARG1, SARG2, SARG3,
+            ARG4, ARG5);
+      PRE_REG_READ5(long, SC2("privsys", "setppriv"), int, code,
+                    vki_priv_op_t, op, vki_priv_ptype_t, type,
+                    const priv_set_t *, pset, vki_size_t, bufsize);
+      PRE_MEM_READ("privsys(pset)", ARG4, ARG5);
+      break;
+   case VKI_PRIVSYS_GETPPRIV:
+      /* Libc: int getppriv(priv_ptype_t type, priv_set_t *pset);
+               priv_set_t *pset -> void *buf
+       */
+      PRINT("sys_privsys ( %ld, %ld, %ld, %#lx, %lu )", SARG1, SARG2, SARG3,
+            ARG4, ARG5);
+      PRE_REG_READ5(long, SC2("privsys", "getppriv"), int, code,
+            vki_priv_op_t, op, vki_priv_ptype_t, type, priv_set_t *, pset,
+            vki_size_t, bufsize);
+      PRE_MEM_WRITE("privsys(pset)", ARG4, ARG5);
+      break;
+   case VKI_PRIVSYS_GETIMPLINFO:
+      /* Libc: int getprivinfo(priv_impl_info_t *buf, size_t bufsize);
+               priv_impl_info_t *buf -> void *buf
+       */
+      PRINT("sys_privsys ( %ld, %ld, %ld, %#lx, %lu )", SARG1, SARG2, SARG3,
+            ARG4, ARG5);
+      PRE_REG_READ5(long, SC2("privsys", "getprivinfo"), int, code,
+            vki_priv_op_t, op, vki_priv_ptype_t, type,
+            priv_impl_info_t *, buf, vki_size_t, bufsize);
+      PRE_MEM_WRITE("privsys(buf)", ARG4, ARG5);
+      break;
+   case VKI_PRIVSYS_SETPFLAGS:
+      /* Libc: int setpflags(uint_t flag, uint_t val);
+               uint_t flag -> priv_op_t op
+               uint_t val -> priv_ptype_t type
+       */
+      PRINT("sys_privsys ( %ld, %lu, %lu )", SARG1, ARG2, ARG3);
+      PRE_REG_READ3(long, SC2("privsys", "setpflags"), int, code,
+                    vki_uint_t, flag, vki_uint_t, val);
+      break;
+   case VKI_PRIVSYS_GETPFLAGS:
+      /* Libc: uint_t getpflags(uint_t flag);
+               uint_t flag -> priv_op_t op
+       */
+      PRINT("sys_privsys ( %ld, %lu )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("privsys", "setpflags"), int, code,
+                    vki_uint_t, flag);
+      break;
+   case VKI_PRIVSYS_ISSETUGID:
+      /* Libc: int issetugid(void); */
+      PRINT("sys_privsys ( %ld )", SARG1);
+      PRE_REG_READ1(long, SC2("privsys", "issetugid"), int, code);
+      break;
+   case VKI_PRIVSYS_PFEXEC_REG:
+      /* Libc: int register_pfexec(int did);
+               int did -> priv_op_t op
+       */
+      PRINT("sys_privsys ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("privsys", "register_pfexec"), int, code,
+                    int, did);
+      break;
+   case VKI_PRIVSYS_PFEXEC_UNREG:
+      /* Libc: int unregister_pfexec(int did); */
+      PRINT("sys_privsys ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("privsys", "unregister_pfexec"), int, code,
+                    int, did);
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the privsys call with code %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+
+   /* Be strict. */
+   if ((ARG1 == VKI_PRIVSYS_PFEXEC_REG ||
+        ARG1 == VKI_PRIVSYS_PFEXEC_UNREG) &&
+       !ML_(fd_allowed)(ARG2, "privsys", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_privsys)
+{
+   switch (ARG1 /*code*/) {
+   case VKI_PRIVSYS_SETPPRIV:
+      break;
+   case VKI_PRIVSYS_GETPPRIV:
+      POST_MEM_WRITE(ARG4, sizeof(vki_priv_set_t));
+      break;
+   case VKI_PRIVSYS_GETIMPLINFO:
+      /* The kernel copy outs data of size min(bufsize, privinfosize).
+         Unfortunately, it does not seem to be possible to easily obtain the
+         privinfosize value.  The code below optimistically marks all ARG5
+         bytes (aka bufsize) as written by the kernel. */
+      POST_MEM_WRITE(ARG4, ARG5);
+      break;
+   case VKI_PRIVSYS_SETPFLAGS:
+   case VKI_PRIVSYS_GETPFLAGS:
+   case VKI_PRIVSYS_ISSETUGID:
+   case VKI_PRIVSYS_PFEXEC_REG:
+   case VKI_PRIVSYS_PFEXEC_UNREG:
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_ucredsys)
+{
+   /* Kernel: int ucredsys(int code, int obj, void *buf); */
+   PRINT("sys_ucredsys ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+
+   switch (ARG1 /*code*/) {
+   case VKI_UCREDSYS_UCREDGET:
+      /* Libc: ucred_t *ucred_get(pid_t pid); */
+      PRE_REG_READ3(long, SC2("ucredsys", "ucredget"), int, code,
+                    vki_pid_t, pid, vki_ucred_t *, buf);
+      PRE_MEM_WRITE("ucredsys(buf)", ARG3, sizeof(vki_ucred_t));
+      break;
+
+   case VKI_UCREDSYS_GETPEERUCRED:
+      /* Libc: int getpeerucred(int fd, ucred_t **ucred); */
+      PRE_REG_READ3(long, SC2("ucredsys", "getpeerucred"), int, code,
+                    int, fd, vki_ucred_t *, buf);
+      PRE_MEM_WRITE("ucredsys(buf)", ARG3, sizeof(vki_ucred_t));
+
+      /* Be strict. */
+      if (!ML_(fd_allowed)(ARG2, "ucredsys", tid, False))
+         SET_STATUS_Failure(VKI_EBADF);
+      break;
+
+   default:
+      VG_(unimplemented)("Syswrap of the ucredsys call with code %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_ucredsys)
+{
+   switch (ARG1 /*code*/) {
+   case VKI_UCREDSYS_UCREDGET:
+   case VKI_UCREDSYS_GETPEERUCRED:
+      vg_assert(ARG3 != 0);
+      POST_MEM_WRITE(ARG3, ((vki_ucred_t *) ARG3)->uc_size);
+      break;
+
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_getmsg)
+{
+   /* int getmsg(int fildes, struct strbuf *ctlptr, struct strbuf *dataptr,
+                 int *flagsp); */
+   struct vki_strbuf *ctrlptr = (struct vki_strbuf *)ARG2;
+   struct vki_strbuf *dataptr = (struct vki_strbuf *)ARG3;
+   *flags |= SfMayBlock;
+   PRINT("sys_getmsg ( %ld, %#lx, %#lx, %#lx )", SARG1, ARG2, ARG3, ARG4);
+   PRE_REG_READ4(long, "getmsg", int, fildes, struct vki_strbuf *, ctlptr,
+                 struct vki_strbuf *, dataptr, int *, flagsp);
+   if (ctrlptr) {
+      PRE_FIELD_READ("getmsg(ctrlptr->maxlen)", ctrlptr->maxlen);
+      PRE_FIELD_WRITE("getmsg(ctrlptr->len)", ctrlptr->len);
+      PRE_FIELD_READ("getmsg(ctrlptr->buf)", ctrlptr->buf);
+      if (ML_(safe_to_deref)((void*)ARG2, sizeof(struct vki_strbuf))
+          && ctrlptr->maxlen > 0)
+         PRE_MEM_WRITE("getmsg(ctrlptr->buf)", (Addr)ctrlptr->buf,
+                       ctrlptr->maxlen);
+   }
+   if (dataptr) {
+      PRE_FIELD_READ("getmsg(dataptr->maxlen)", dataptr->maxlen);
+      PRE_FIELD_WRITE("getmsg(dataptr->len)", dataptr->len);
+      PRE_FIELD_READ("getmsg(dataptr->buf)", dataptr->buf);
+      if (ML_(safe_to_deref)((void*)ARG3, sizeof(struct vki_strbuf))
+          && dataptr->maxlen > 0)
+         PRE_MEM_WRITE("getmsg(dataptr->buf)", (Addr)dataptr->buf,
+                       dataptr->maxlen);
+   }
+   PRE_MEM_READ("getmsg(flagsp)", ARG4, sizeof(int));
+   /*PRE_MEM_WRITE("getmsg(flagsp)", ARG4, sizeof(int));*/
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "getmsg", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_getmsg)
+{
+   struct vki_strbuf *ctrlptr = (struct vki_strbuf *)ARG2;
+   struct vki_strbuf *dataptr = (struct vki_strbuf *)ARG3;
+
+   if (ctrlptr && ctrlptr->len > 0)
+      POST_MEM_WRITE((Addr)ctrlptr->buf, ctrlptr->len);
+   if (dataptr && dataptr->len > 0)
+      POST_MEM_WRITE((Addr)dataptr->buf, dataptr->len);
+   POST_MEM_WRITE(ARG4, sizeof(int));
+}
+
+PRE(sys_putmsg)
+{
+   /* int putmsg(int fildes, struct strbuf *ctlptr, struct strbuf *dataptr,
+                 int flags); */
+   struct vki_strbuf *ctrlptr = (struct vki_strbuf *)ARG2;
+   struct vki_strbuf *dataptr = (struct vki_strbuf *)ARG3;
+   *flags |= SfMayBlock;
+   PRINT("sys_putmsg ( %ld, %#lx, %#lx, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "putmsg", int, fildes, struct vki_strbuf *, ctrlptr,
+                 struct vki_strbuf *, dataptr, int, flags);
+   if (ctrlptr) {
+      PRE_FIELD_READ("putmsg(ctrlptr->len)", ctrlptr->len);
+      PRE_FIELD_READ("putmsg(ctrlptr->buf)", ctrlptr->buf);
+      if (ML_(safe_to_deref)((void*)ARG2, sizeof(struct vki_strbuf))
+          && ctrlptr->len > 0)
+         PRE_MEM_READ("putmsg(ctrlptr->buf)", (Addr)ctrlptr->buf,
+                      ctrlptr->len);
+   }
+   if (dataptr) {
+      PRE_FIELD_READ("putmsg(dataptr->len)", dataptr->len);
+      PRE_FIELD_READ("putmsg(dataptr->buf)", dataptr->buf);
+      if (ML_(safe_to_deref)((void*)ARG3, sizeof(struct vki_strbuf))
+          && dataptr->len > 0)
+         PRE_MEM_READ("putmsg(dataptr->buf)", (Addr)dataptr->buf,
+                      dataptr->len);
+   }
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "putmsg", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_lstat)
+{
+   /* int lstat(const char *path, struct stat *buf); */
+   /* Note: We could use here the sys_newlstat generic wrapper, but the 'new'
+      in its name is rather confusing in the Solaris context, thus we provide
+      our own wrapper. */
+   PRINT("sys_lstat ( %#lx(%s), %#lx )", ARG1, (HChar *) ARG1, ARG2);
+   PRE_REG_READ2(long, "lstat", const char *, path, struct stat *, buf);
+
+   PRE_MEM_RASCIIZ("lstat(path)", ARG1);
+   PRE_MEM_WRITE("lstat(buf)", ARG2, sizeof(struct vki_stat));
+}
+
+POST(sys_lstat)
+{
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_stat));
+}
+
+PRE(sys_sigprocmask)
+{
+   /* int sigprocmask(int how, const sigset_t *set, sigset_t *oset); */
+   PRINT("sys_sigprocmask ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "sigprocmask",
+                 int, how, vki_sigset_t *, set, vki_sigset_t *, oset);
+   if (ARG2)
+      PRE_MEM_READ("sigprocmask(set)", ARG2, sizeof(vki_sigset_t));
+   if (ARG3)
+      PRE_MEM_WRITE("sigprocmask(oset)", ARG3, sizeof(vki_sigset_t));
+
+   /* Be safe. */
+   if (ARG2 && !ML_(safe_to_deref((void*)ARG2, sizeof(vki_sigset_t)))) {
+      SET_STATUS_Failure(VKI_EFAULT);
+   }
+   if (ARG3 && !ML_(safe_to_deref((void*)ARG3, sizeof(vki_sigset_t)))) {
+      SET_STATUS_Failure(VKI_EFAULT);
+   }
+
+   if (!FAILURE)
+      SET_STATUS_from_SysRes(
+         VG_(do_sys_sigprocmask)(tid, ARG1 /*how*/, (vki_sigset_t*)ARG2,
+                                 (vki_sigset_t*)ARG3)
+      );
+
+   if (SUCCESS)
+      *flags |= SfPollAfter;
+}
+
+POST(sys_sigprocmask)
+{
+   if (ARG3)
+      POST_MEM_WRITE(ARG3, sizeof(vki_sigset_t));
+}
+
+PRE(sys_sigaction)
+{
+   /* int sigaction(int signal, const struct sigaction *act,
+                    struct sigaction *oact); */
+   PRINT("sys_sigaction ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "sigaction", int, signal,
+                 const struct sigaction *, act, struct sigaction *, oact);
+
+   /* Note that on Solaris, vki_sigaction_toK_t and vki_sigaction_fromK_t are
+      both typedefs of 'struct sigaction'. */
+
+   if (ARG2) {
+      vki_sigaction_toK_t *sa = (vki_sigaction_toK_t*)ARG2;
+      PRE_FIELD_READ("sigaction(act->sa_flags)", sa->sa_flags);
+      PRE_FIELD_READ("sigaction(act->sa_handler)", sa->ksa_handler);
+      PRE_FIELD_READ("sigaction(act->sa_mask)", sa->sa_mask);
+   }
+   if (ARG3)
+      PRE_MEM_WRITE("sigaction(oact)", ARG3, sizeof(vki_sigaction_fromK_t));
+
+   /* Be safe. */
+   if (ARG2 && !ML_(safe_to_deref((void*)ARG2,
+                                  sizeof(vki_sigaction_toK_t)))) {
+      SET_STATUS_Failure(VKI_EFAULT);
+   }
+   if (ARG3 && !ML_(safe_to_deref((void*)ARG3,
+                                   sizeof(vki_sigaction_fromK_t)))) {
+      SET_STATUS_Failure(VKI_EFAULT);
+   }
+
+   if (!FAILURE)
+      SET_STATUS_from_SysRes(
+         VG_(do_sys_sigaction)(ARG1, (const vki_sigaction_toK_t*)ARG2,
+                              (vki_sigaction_fromK_t*)ARG3));
+}
+
+POST(sys_sigaction)
+{
+   if (ARG3)
+      POST_MEM_WRITE(ARG3, sizeof(vki_sigaction_fromK_t));
+}
+
+PRE(sys_sigpending)
+{
+   /* int sigpending(int flag, sigset_t *setp); */
+   PRINT("sys_sigpending ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "sigpending", int, flag, sigset_t *, setp);
+   PRE_MEM_WRITE("sigpending(setp)", ARG2, sizeof(vki_sigset_t));
+}
+
+POST(sys_sigpending)
+{
+   POST_MEM_WRITE(ARG2, sizeof(vki_sigset_t));
+}
+
+PRE(sys_getsetcontext)
+{
+   /* Kernel: int getsetcontext(int flag, void *arg) */
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   PRINT("sys_getsetcontext ( %ld, %#lx )", SARG1, ARG2);
+   switch (ARG1 /*flag*/) {
+   case VKI_GETCONTEXT:
+      /* Libc: int getcontext(ucontext_t *ucp); */
+      PRE_REG_READ2(long, SC2("getsetcontext", "getcontext"), int, flag,
+                    ucontext_t *, ucp);
+      PRE_MEM_WRITE("getsetcontext(ucp)", ARG2, sizeof(vki_ucontext_t));
+
+      if (!ML_(safe_to_deref((void*)ARG2, sizeof(vki_ucontext_t)))) {
+         SET_STATUS_Failure(VKI_EFAULT);
+         return;
+      }
+      VG_(save_context)(tid, (vki_ucontext_t*)ARG2, Vg_CoreSysCall);
+      SET_STATUS_Success(0);
+      break;
+   case VKI_SETCONTEXT:
+      /* Libc: int setcontext(const ucontext_t *ucp); */
+      PRE_REG_READ2(long, SC2("getsetcontext", "setcontext"), int, flag,
+                    const ucontext_t *, ucp);
+
+      if (!ARG2) {
+         /* Setting NULL context causes thread exit. */
+         tst->exitreason = VgSrc_ExitThread;
+         tst->os_state.exitcode = 0;
+         SET_STATUS_Success(0);
+         return;
+      }
+
+      if (!ML_(safe_to_deref((void*)ARG2, sizeof(vki_ucontext_t)))) {
+         SET_STATUS_Failure(VKI_EFAULT);
+         return;
+      }
+
+      VG_(restore_context)(tid, (vki_ucontext_t*)ARG2,
+                           Vg_CoreSysCall, False/*esp_is_thrptr*/);
+      /* Tell the driver not to update the guest state with the "result". */
+      *flags |= SfNoWriteResult;
+      /* Check to see if any signals arose as a result of this. */
+      *flags |= SfPollAfter;
+
+      /* Check if this is a possible return from a signal handler. */
+      VG_(sigframe_return)(tid, (vki_ucontext_t*)ARG2);
+
+      SET_STATUS_Success(0);
+      break;
+   case VKI_GETUSTACK:
+      /* Libc: int getustack(stack_t **spp); */
+      PRE_REG_READ2(long, SC2("getsetcontext", "getustack"), int, flag,
+                    stack_t **, spp);
+      PRE_MEM_WRITE("getsetcontext(spp)", ARG2, sizeof(vki_stack_t*));
+
+      if (!ML_(safe_to_deref((void*)ARG2, sizeof(vki_stack_t*)))) {
+         SET_STATUS_Failure(VKI_EFAULT);
+         return;
+      }
+
+      *(vki_stack_t**)ARG2 = tst->os_state.ustack;
+      POST_MEM_WRITE(ARG2, sizeof(vki_stack_t*));
+      SET_STATUS_Success(0);
+      break;
+   case VKI_SETUSTACK:
+      {
+         /* Libc: int setustack(stack_t *sp); */
+         PRE_REG_READ2(long, SC2("getsetcontext", "setustack"), int, flag,
+                       stack_t *, sp);
+
+         /* The kernel does not read the stack data instantly but it can read
+            them later so it is better to make sure the data are defined. */
+         PRE_MEM_READ("getsetcontext_setustack(sp)", ARG2, sizeof(vki_stack_t));
+
+         if (!ML_(safe_to_deref((void*)ARG2, sizeof(vki_stack_t)))) {
+            SET_STATUS_Failure(VKI_EFAULT);
+            return;
+         }
+
+         vki_stack_t *old_stack = tst->os_state.ustack;
+         tst->os_state.ustack = (vki_stack_t*)ARG2;
+
+         /* The thread is setting the ustack pointer.  It is a good time to get
+            information about its stack. */
+         if (tst->os_state.ustack->ss_flags == 0) {
+            /* If the sanity check of ss_flags passed set the stack. */
+            set_stack(tid, tst->os_state.ustack);
+
+            if ((old_stack == NULL) && (tid > 1)) {
+               /* New thread creation is now completed. Inform the tool. */
+               VG_TRACK(pre_thread_first_insn, tid);
+            }
+         }
+
+         SET_STATUS_Success(0);
+      }
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the context call with flag %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+PRE(sys_fchmodat)
+{
+   /* int fchmodat(int fd, const char *path, mode_t mode, int flag); */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG1;
+
+   PRINT("sys_fchmodat ( %d, %#lx(%s), %ld, %ld )",
+         fd, ARG2, (HChar *) ARG2, SARG3, SARG4);
+   PRE_REG_READ4(long, "fchmodat",
+                 int, fd, const char *, path, vki_mode_t, mode, int, flag);
+
+   if (ARG2)
+      PRE_MEM_RASCIIZ("fchmodat(path)", ARG2);
+
+   /* Be strict but ignore fd for absolute path. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd, "fchmodat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_mkdirat)
+{
+   /* int mkdirat(int fd, const char *path, mode_t mode); */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG1;
+
+   *flags |= SfMayBlock;
+   PRINT("sys_mkdirat ( %d, %#lx(%s), %ld )", fd, ARG2, (HChar *) ARG2, SARG3);
+   PRE_REG_READ3(long, "mkdirat", int, fd, const char *, path,
+                 vki_mode_t, mode);
+   PRE_MEM_RASCIIZ("mkdirat(path)", ARG2);
+
+   /* Be strict but ignore fd for absolute path. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd, "mkdirat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+static void do_statvfs_post(struct vki_statvfs *stats, ThreadId tid)
+{
+   POST_FIELD_WRITE(stats->f_bsize);
+   POST_FIELD_WRITE(stats->f_frsize);
+   POST_FIELD_WRITE(stats->f_blocks);
+   POST_FIELD_WRITE(stats->f_bfree);
+   POST_FIELD_WRITE(stats->f_bavail);
+   POST_FIELD_WRITE(stats->f_files);
+   POST_FIELD_WRITE(stats->f_ffree);
+   POST_FIELD_WRITE(stats->f_favail);
+   POST_FIELD_WRITE(stats->f_fsid);
+   POST_MEM_WRITE((Addr) stats->f_basetype, VG_(strlen)(stats->f_basetype) + 1);
+   POST_FIELD_WRITE(stats->f_flag);
+   POST_FIELD_WRITE(stats->f_namemax);
+   POST_MEM_WRITE((Addr) stats->f_fstr, VG_(strlen)(stats->f_fstr) + 1);
+}
+
+PRE(sys_statvfs)
+{
+   /* int statvfs(const char *path, struct statvfs *buf); */
+   *flags |= SfMayBlock;
+   PRINT("sys_statvfs ( %#lx(%s), %#lx )", ARG1, (HChar *) ARG1, ARG2);
+   PRE_REG_READ2(long, "statvfs", const char *, path,
+                 struct vki_statvfs *, buf);
+   PRE_MEM_RASCIIZ("statvfs(path)", ARG1);
+   PRE_MEM_WRITE("statvfs(buf)", ARG2, sizeof(struct vki_statvfs));
+}
+
+POST(sys_statvfs)
+{
+   do_statvfs_post((struct vki_statvfs *) ARG2, tid);
+}
+
+PRE(sys_fstatvfs)
+{
+   /* int fstatvfs(int fd, struct statvfs *buf); */
+   *flags |= SfMayBlock;
+   PRINT("sys_fstatvfs ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "fstatvfs", int, fd, struct vki_statvfs *, buf);
+   PRE_MEM_WRITE("fstatvfs(buf)", ARG2, sizeof(struct vki_statvfs));
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "fstatvfs", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_fstatvfs)
+{
+   do_statvfs_post((struct vki_statvfs *) ARG2, tid);
+}
+
+PRE(sys_nfssys)
+{
+   /* int nfssys(enum nfssys_op opcode, void *arg); */
+   *flags |= SfMayBlock;
+   PRINT("sys_nfssys ( %ld, %#lx )", SARG1, ARG2);
+
+   switch (ARG1 /*opcode*/) {
+   case VKI_NFS_REVAUTH:
+      PRE_REG_READ2(long, SC2("nfssys", "nfs_revauth"), int, opcode,
+                    struct vki_nfs_revauth_args *, args);
+      PRE_MEM_READ("nfssys(arg)", ARG2,
+                   sizeof(struct vki_nfs_revauth_args));
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the nfssys call with opcode %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_nfssys)
+{
+   switch (ARG1 /*opcode*/) {
+   case VKI_NFS_REVAUTH:
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_waitid)
+{
+   /* int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options); */
+   *flags |= SfMayBlock;
+   PRINT("sys_waitid( %ld, %ld, %#lx, %ld )", SARG1, SARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "waitid", vki_idtype_t, idtype, vki_id_t, id,
+                 siginfo_t *, infop, int, options);
+   PRE_MEM_WRITE("waitid(infop)", ARG3, sizeof(vki_siginfo_t));
+}
+
+POST(sys_waitid)
+{
+   POST_MEM_WRITE(ARG3, sizeof(vki_siginfo_t));
+}
+
+#if defined(SOLARIS_UTIMESYS_SYSCALL)
+PRE(sys_utimesys)
+{
+   /* Kernel: int utimesys(int code, uintptr_t arg1, uintptr_t arg2,
+                           uintptr_t arg3, uintptr_t arg4);
+    */
+
+   switch (ARG1 /*code*/) {
+   case 0:
+      /* Libc: int futimens(int fd, const timespec_t times[2]); */
+      PRINT("sys_utimesys ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, "utimesys", int, code, int, fd,
+                    const vki_timespec_t *, times);
+      if (ARG3)
+         PRE_MEM_READ("utimesys(times)", ARG3, 2 * sizeof(vki_timespec_t));
+
+      /* Be strict. */
+      if (!ML_(fd_allowed)(ARG2, "utimesys", tid, False))
+         SET_STATUS_Failure(VKI_EBADF);
+      break;
+   case 1:
+      {
+         /* Libc: int utimensat(int fd, const char *path,
+                                const timespec_t times[2], int flag);
+          */
+
+         /* Interpret the second argument as 32-bit value even on 64-bit
+            architecture. This is different from Linux, for example, where glibc
+            sign-extends it. */
+         Int fd = (Int) ARG2;
+
+         PRINT("sys_utimesys ( %ld, %d, %#lx(%s), %#lx, %ld )",
+               SARG1, fd, ARG3, (HChar *) ARG3, ARG4, SARG5);
+         PRE_REG_READ5(long, "utimesys", int, code, int, fd, const char *, path,
+                       const vki_timespec_t *, times, int, flag);
+         if (ARG3)
+            PRE_MEM_RASCIIZ("utimesys(path)", ARG3);
+         if (ARG4)
+            PRE_MEM_READ("utimesys(times)", ARG4, 2 * sizeof(vki_timespec_t));
+
+         /* Be strict but ignore fd for absolute path. */
+         if (fd != VKI_AT_FDCWD
+             && ML_(safe_to_deref)((void *) ARG3, 1)
+             && ((HChar *) ARG3)[0] != '/'
+             && !ML_(fd_allowed)(fd, "utimesys", tid, False))
+            SET_STATUS_Failure(VKI_EBADF);
+         break;
+      }
+   default:
+      VG_(unimplemented)("Syswrap of the utimesys call with code %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+#endif /* SOLARIS_UTIMESYS_SYSCALL */
+
+#if defined(SOLARIS_UTIMENSAT_SYSCALL)
+PRE(sys_utimensat)
+{
+   /* int utimensat(int fd, const char *path, const timespec_t times[2],
+                    int flag);
+    */
+
+   /* Interpret the first argument as 32-bit value even on 64-bit architecture.
+      This is different from Linux, for example, where glibc sign-extends it. */
+   Int fd = (Int) ARG1;
+
+   PRINT("sys_utimensat ( %d, %#lx(%s), %#lx, %ld )",
+         fd, ARG2, (HChar *) ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "utimensat", int, fd, const char *, path,
+                 const vki_timespec_t *, times, int, flag);
+   if (ARG2)
+      PRE_MEM_RASCIIZ("utimensat(path)", ARG2);
+   if (ARG3)
+      PRE_MEM_READ("utimensat(times)", ARG3, 2 * sizeof(vki_timespec_t));
+
+   /* Be strict but ignore fd for absolute path. */
+   if (fd != VKI_AT_FDCWD
+       && ML_(safe_to_deref)((void *) ARG2, 1)
+       && ((HChar *) ARG2)[0] != '/'
+       && !ML_(fd_allowed)(fd, "utimensat", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+#endif /* SOLARIS_UTIMENSAT_SYSCALL */
+
+PRE(sys_sigresend)
+{
+   /* int sigresend(int signal, siginfo_t *siginfo, sigset_t *mask); */
+   /* Sends a signal to the calling thread, the mask parameter specifies a new
+      signal mask. */
+
+   /* Static (const) mask accessible from outside of this function. */
+   static vki_sigset_t block_all;
+
+   PRINT("sys_sigresend( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "sigresend", int, signal, vki_siginfo_t *, siginfo,
+                 vki_sigset_t *, mask);
+
+   if (ARG2)
+      PRE_MEM_READ("sigresend(siginfo)", ARG2, sizeof(vki_siginfo_t));
+   PRE_MEM_WRITE("sigresend(mask)", ARG3, sizeof(vki_sigset_t));
+
+   /* Check the signal and mask. */
+   if (!ML_(client_signal_OK)(ARG1)) {
+      SET_STATUS_Failure(VKI_EINVAL);
+   }
+   if (!ML_(safe_to_deref)((void*)ARG3, sizeof(vki_sigset_t))) {
+      SET_STATUS_Failure(VKI_EFAULT);
+   }
+   
+   /* Exit early if there are problems. */
+   if (FAILURE)
+      return;
+
+   /* Save the requested mask to unused ARG4. */
+   ARG4 = ARG3;
+
+   /* Fake the requested sigmask with a block-all mask.  If the syscall
+      suceeds then we will block "all" signals for a few instructions (in
+      syscall-x86-solaris.S) but the correct mask will be almost instantly set
+      again by a call to sigprocmask (also in syscall-x86-solaris.S).  If the
+      syscall fails then the mask is not changed, so everything is ok too. */
+   VG_(sigfillset)(&block_all);
+   ARG3 = (UWord)&block_all;
+
+   /* Check to see if this gave us a pending signal. */
+   *flags |= SfPollAfter;
+
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg, "sigresend: resending signal %ld\n", ARG1);
+
+   /* Handle SIGKILL specially. */
+   if (ARG1 == VKI_SIGKILL && ML_(do_sigkill)(tid, -1)) {
+      SET_STATUS_Success(0);
+      return;
+   }
+
+   /* Ask to handle this syscall via the slow route, since that's the only one
+      that sets tst->status to VgTs_WaitSys.  If the result of doing the
+      syscall is an immediate run of async_signalhandler() in m_signals.c,
+      then we need the thread to be properly tidied away. */
+   *flags |= SfMayBlock;
+}
+
+POST(sys_sigresend)
+{
+   /* The syscall succeeded, set the requested mask. */
+   VG_(do_sys_sigprocmask)(tid, VKI_SIG_SETMASK, (vki_sigset_t*)ARG4, NULL);
+
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg, "sigresend: resent signal %lu\n", ARG1);
+}
+
+static void mem_priocntlsys_parm_ok(ThreadId tid, Bool pre, Bool reade,
+                                    vki_pc_vaparm_t *parm)
+{
+   if (reade)
+      return;
+
+   if (pre)
+      PRE_FIELD_WRITE("priocntlsys(parm)", parm->pc_parm);
+   else
+      POST_FIELD_WRITE(parm->pc_parm);
+}
+
+static void mem_priocntlsys_parm(ThreadId tid, Bool pre, Bool reade,
+                                 const HChar *clname,
+                                 vki_pc_vaparm_t *parm)
+{
+   /* This function is used to handle the PC_SETXPARMS and PC_GETXPARMS
+      parameters.  In the case of PC_SETXPARMS, the code below merely checks
+      if all parameters are scalar, PRE_MEM_READ() for these parameters is
+      already done by the PC_SETXPARMS handler in PRE(sys_priocntlsys).
+
+      A caller of this function is responsible for checking that clname and
+      &parm->key can be dereferenced. */
+
+   if (VG_STREQ(clname, "RT")) {
+      switch (parm->pc_key) {
+      case VKI_RT_KY_PRI:
+      case VKI_RT_KY_TQSECS:
+      case VKI_RT_KY_TQNSECS:
+      case VKI_RT_KY_TQSIG:
+         /* Scalar values that are stored directly in pc_parm. */
+         mem_priocntlsys_parm_ok(tid, pre, reade, parm);
+         return;
+      }
+   }
+   else if (VG_STREQ(clname, "TS")) {
+      switch (parm->pc_key) {
+      case VKI_TS_KY_UPRILIM:
+      case VKI_TS_KY_UPRI:
+         /* Scalar values that are stored directly in pc_parm. */
+         mem_priocntlsys_parm_ok(tid, pre, reade, parm);
+         return;
+      }
+   }
+   else if (VG_STREQ(clname, "IA")) {
+      switch (parm->pc_key) {
+      case VKI_IA_KY_UPRILIM:
+      case VKI_IA_KY_UPRI:
+      case VKI_IA_KY_MODE:
+         /* Scalar values that are stored directly in pc_parm. */
+         mem_priocntlsys_parm_ok(tid, pre, reade, parm);
+         return;
+      }
+   }
+   else if (VG_STREQ(clname, "FSS")) {
+      switch (parm->pc_key) {
+      case VKI_FSS_KY_UPRILIM:
+      case VKI_FSS_KY_UPRI:
+         /* Scalar values that are stored directly in pc_parm. */
+         mem_priocntlsys_parm_ok(tid, pre, reade, parm);
+         return;
+      }
+   }
+   else if (VG_STREQ(clname, "FX")) {
+      switch (parm->pc_key) {
+      case VKI_FX_KY_UPRILIM:
+      case VKI_FX_KY_UPRI:
+      case VKI_FX_KY_TQSECS:
+      case VKI_FX_KY_TQNSECS:
+         /* Scalar values that are stored directly in pc_parm. */
+         mem_priocntlsys_parm_ok(tid, pre, reade, parm);
+         return;
+      }
+   }
+   else {
+      /* Unknown class. */
+      VG_(unimplemented)("Syswrap of the priocntlsys call where clname=%s.",
+                         clname);
+      /*NOTREACHED*/
+   }
+
+   /* The class is known but pc_key is unknown. */
+   VG_(unimplemented)("Syswrap of the priocntlsys call where clname=%s "
+                      "and pc_key=%d.", clname, parm->pc_key);
+   /*NOTREACHED*/
+}
+
+PRE(sys_priocntlsys)
+{
+   /* long priocntlsys(int pc_version, procset_t *psp, int cmd, caddr_t arg,
+                       caddr_t arg2); */
+
+   if (ARG1 != 1) {
+      /* Only the first version of priocntlsys is supported by the code below.
+       */
+      VG_(unimplemented)("Syswrap of the priocntlsys where pc_version=%lu.",
+                         ARG1);
+      /*NOTREACHED*/
+   }
+
+   PRINT("sys_priocntlsys ( %ld, %#lx, %ld, %#lx, %#lx )", SARG1, ARG2, SARG3,
+         ARG4, ARG5);
+   PRE_REG_READ5(long, "priocntlsys", int, pc_version, procset_t *, psp,
+                 int, cmd, void *, arg, void *, arg2);
+
+   switch (ARG3 /*cmd*/) {
+   case VKI_PC_GETCID:
+      if (ARG4) {
+         vki_pcinfo_t *info = (vki_pcinfo_t*)ARG4;
+         PRE_MEM_RASCIIZ("priocntlsys(clname)", (Addr)info->pc_clname);
+         /* The next line says that the complete pcinfo_t structure can be
+            written, but this actually isn't true for pc_clname which is
+            always only read. */
+         PRE_MEM_WRITE("priocntlsys(pcinfo)", ARG4, sizeof(vki_pcinfo_t));
+      }
+      break;
+   case VKI_PC_GETCLINFO:
+      if (ARG4) {
+         vki_pcinfo_t *info = (vki_pcinfo_t*)ARG4;
+         PRE_FIELD_READ("priocntlsys(cid)", info->pc_cid);
+         /* The next line says that the complete pcinfo_t structure can be
+            written, but this actually isn't true for pc_cid which is
+            always only read. */
+         PRE_MEM_WRITE("priocntlsys(pcinfo)", ARG4, sizeof(vki_pcinfo_t));
+      }
+      break;
+   case VKI_PC_SETPARMS:
+      PRE_MEM_READ("priocntlsys(psp)", ARG2, sizeof(vki_procset_t));
+      /* The next line says that the complete pcparms_t structure is read
+         which is never actually true (we are too pessimistic here).
+         Unfortunately we can't do better because we don't know what
+         process class is involved. */
+      PRE_MEM_READ("priocntlsys(parms)", ARG4, sizeof(vki_pcparms_t));
+      break;
+   case VKI_PC_GETPARMS:
+      PRE_MEM_READ("priocntlsys(psp)", ARG2, sizeof(vki_procset_t));
+      PRE_MEM_WRITE("priocntlsys(parms)", ARG4, sizeof(vki_pcparms_t));
+      break;
+   case VKI_PC_GETPRIRANGE:
+      {
+         vki_pcpri_t *pcpri = (vki_pcpri_t*)ARG4;
+         PRE_FIELD_READ("priocntlsys(cid)", pcpri->pc_cid);
+      }
+      PRE_MEM_WRITE("priocntlsys(pri)", ARG4, sizeof(vki_pcpri_t));
+      break;
+   case VKI_PC_DONICE:
+      PRE_MEM_READ("priocntlsys(psp)", ARG2, sizeof(vki_procset_t));
+      {
+         vki_pcnice_t *nicee = (vki_pcnice_t*)ARG4;
+         PRE_FIELD_READ("priocntlsys(op)", nicee->pc_op);
+         if (ML_(safe_to_deref)(&nicee->pc_op, sizeof(nicee->pc_op))) {
+            switch (nicee->pc_op) {
+            case VKI_PC_GETNICE:
+               PRE_FIELD_WRITE("priocntlsys(val)", nicee->pc_val);
+               break;
+            case VKI_PC_SETNICE:
+               PRE_FIELD_READ("priocntlsys(val)", nicee->pc_val);
+               break;
+            default:
+               VG_(unimplemented)("Syswrap of the priocntlsys call where "
+                                  "cmd=PC_DONICE and pc_op=%d", nicee->pc_op);
+               /*NOTREACHED*/
+               break;
+            }
+         }
+      }
+      break;
+   case VKI_PC_SETXPARMS:
+      PRE_MEM_READ("priocntlsys(psp)", ARG2, sizeof(vki_procset_t));
+      PRE_MEM_RASCIIZ("priocntlsys(clname)", ARG4);
+      if (ARG5) {
+         vki_pc_vaparms_t *parms = (vki_pc_vaparms_t*)ARG5;
+         PRE_FIELD_READ("priocntlsys(vaparmscnt)", parms->pc_vaparmscnt);
+         if (ML_(safe_to_deref)(&parms->pc_vaparmscnt,
+                                sizeof(parms->pc_vaparmscnt))) {
+            vki_uint_t i;
+            PRE_MEM_READ("priocntlsys(parms)", (Addr)parms->pc_parms,
+                         parms->pc_vaparmscnt * sizeof(parms->pc_parms[0]));
+            for (i = 0; i < parms->pc_vaparmscnt; i++) {
+               vki_pc_vaparm_t *parm = &parms->pc_parms[i];
+               if (ML_(safe_to_deref)(parm, sizeof(*parm)) &&
+                   ML_(safe_to_deref)((void*)ARG4, 1))
+                  mem_priocntlsys_parm(tid, True /*pre*/, True /*read*/,
+                                       (HChar*)ARG4, parm);
+            }
+         }
+      }
+      break;
+   case VKI_PC_GETXPARMS:
+      PRE_MEM_READ("priocntlsys(psp)", ARG2, sizeof(vki_procset_t));
+      if (ARG4)
+         PRE_MEM_RASCIIZ("priocntlsys(clname)", ARG4);
+      if (ARG5) {
+         vki_pc_vaparms_t *parms = (vki_pc_vaparms_t*)ARG5;
+         PRE_FIELD_READ("priocntlsys(vaparmscnt)", parms->pc_vaparmscnt);
+         if (ML_(safe_to_deref)(&parms->pc_vaparmscnt,
+                                sizeof(parms->pc_vaparmscnt))) {
+            vki_uint_t i;
+            for (i = 0; i < parms->pc_vaparmscnt; i++) {
+               vki_pc_vaparm_t *parm = &parms->pc_parms[i];
+               PRE_MEM_READ("priocntlsys(parms)", (Addr)&parm->pc_key,
+                            parms->pc_vaparmscnt * sizeof(parm->pc_key));
+               if (ML_(safe_to_deref)(&parm->pc_key,
+                                      sizeof(parm->pc_key))) {
+                  /* First handle PC_KY_CLNAME, then class specific keys.
+                     Note that PC_KY_CLNAME can be used only with
+                     ARG4==NULL && parms->pc_vaparmscnt==1.  We are not so
+                     strict here and handle this special case as a regular
+                     one which makes the code simpler. */
+                  if (parm->pc_key == VKI_PC_KY_CLNAME)
+                     PRE_MEM_WRITE("priocntlsys(clname)", parm->pc_parm,
+                                   VKI_PC_CLNMSZ);
+                  else if (ARG4 && ML_(safe_to_deref)((void*)ARG4, 1))
+                     mem_priocntlsys_parm(tid, True /*pre*/,
+                                          False /*read*/, (HChar*)ARG4,
+                                          parm);
+               }
+            }
+         }
+      }
+      break;
+   case VKI_PC_SETDFLCL:
+      PRE_MEM_RASCIIZ("priocntlsys(clname)", ARG4);
+      break;
+   case VKI_PC_GETDFLCL:
+      if (ARG4) {
+         /* GETDFLCL writes to the ARG4 buffer only if ARG4 isn't NULL.  Also
+            note that if ARG4 is NULL then the syscall succeeds. */
+         PRE_MEM_WRITE("priocntlsys(clname)", ARG4, VKI_PC_CLNMSZ);
+      }
+      break;
+   case VKI_PC_DOPRIO:
+      PRE_MEM_READ("priocntlsys(psp)", ARG2, sizeof(vki_procset_t));
+      {
+         vki_pcprio_t *prio = (vki_pcprio_t*)ARG4;
+         PRE_FIELD_READ("priocntlsys(op)", prio->pc_op);
+         if (ML_(safe_to_deref)(&prio->pc_op, sizeof(prio->pc_op))) {
+            switch (prio->pc_op) {
+            case VKI_PC_GETPRIO:
+               PRE_FIELD_WRITE("priocntlsys(cid)", prio->pc_cid);
+               PRE_FIELD_WRITE("priocntlsys(val)", prio->pc_val);
+               break;
+            case VKI_PC_SETPRIO:
+               PRE_FIELD_READ("priocntlsys(cid)", prio->pc_cid);
+               PRE_FIELD_READ("priocntlsys(val)", prio->pc_val);
+               break;
+            default:
+               VG_(unimplemented)("Syswrap of the priocntlsys call where "
+                                  "cmd=PC_DOPRIO and pc_op=%d", prio->pc_op);
+               /*NOTREACHED*/
+               break;
+            }
+         }
+      }
+      break;
+   case VKI_PC_ADMIN:
+   default:
+      VG_(unimplemented)("Syswrap of the priocntlsys call with cmd %ld.", SARG3);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+static void post_mem_write_priocntlsys_clinfo(ThreadId tid,
+                                              const HChar *clname, Addr clinfo)
+{
+   if (VG_STREQ(clname, "RT"))
+      POST_MEM_WRITE(clinfo, sizeof(vki_rtinfo_t));
+   else if (VG_STREQ(clname, "TS"))
+      POST_MEM_WRITE(clinfo, sizeof(vki_tsinfo_t));
+   else if (VG_STREQ(clname, "IA"))
+      POST_MEM_WRITE(clinfo, sizeof(vki_iainfo_t));
+   else if (VG_STREQ(clname, "FSS"))
+      POST_MEM_WRITE(clinfo, sizeof(vki_fssinfo_t));
+   else if (VG_STREQ(clname, "FX"))
+      POST_MEM_WRITE(clinfo, sizeof(vki_fxinfo_t));
+   else if (VG_STREQ(clname, "SDC")) {
+      /* Relax. */
+   }
+   else {
+      VG_(unimplemented)("Syswrap of the priocntlsys call where clname=%s.",
+                         clname);
+      /*NOTREACHED*/
+   }
+}
+
+POST(sys_priocntlsys)
+{
+   switch (ARG3 /*cmd*/) {
+   case VKI_PC_GETCID:
+      if (ARG4) {
+         vki_pcinfo_t *info = (vki_pcinfo_t*)ARG4;
+         POST_FIELD_WRITE(info->pc_cid);
+         post_mem_write_priocntlsys_clinfo(tid, info->pc_clname,
+                                           (Addr)&info->pc_clinfo);
+      }
+      break;
+   case VKI_PC_GETCLINFO:
+      if (ARG4) {
+         vki_pcinfo_t *info = (vki_pcinfo_t*)ARG4;
+         POST_MEM_WRITE((Addr)info->pc_clname,
+                        VG_(strlen)((HChar*)info->pc_clname) + 1);
+         post_mem_write_priocntlsys_clinfo(tid, info->pc_clname,
+                                           (Addr)&info->pc_clinfo);
+      }
+      break;
+   case VKI_PC_SETPARMS:
+      /* Relax. */
+      break;
+   case VKI_PC_GETPARMS:
+      /* The next line says that the complete pcparms_t structure is
+         written which is never actually true (we are too optimistic here).
+         Unfortunately we can't do better because we don't know what
+         process class is involved. */
+      POST_MEM_WRITE(ARG4, sizeof(vki_pcparms_t));
+      break;
+   case VKI_PC_GETPRIRANGE:
+      POST_MEM_WRITE(ARG4, sizeof(vki_pcpri_t));
+      break;
+   case VKI_PC_DONICE:
+      {
+         vki_pcnice_t *nicee = (vki_pcnice_t*)ARG4;
+         if (nicee->pc_op == VKI_PC_GETNICE)
+            POST_FIELD_WRITE(nicee->pc_val);
+      }
+      break;
+   case VKI_PC_SETXPARMS:
+      /* Relax. */
+      break;
+   case VKI_PC_GETXPARMS:
+      {
+         vki_pc_vaparms_t *parms = (vki_pc_vaparms_t*)ARG5;
+         vki_uint_t i;
+         for (i = 0; i < parms->pc_vaparmscnt; i++) {
+            vki_pc_vaparm_t *parm = &parms->pc_parms[i];
+            if (parm->pc_key == VKI_PC_KY_CLNAME)
+               POST_MEM_WRITE(parm->pc_parm,
+                              VG_(strlen)((HChar*)(Addr)parm->pc_parm) + 1);
+            else if (ARG4)
+               mem_priocntlsys_parm(tid, False /*pre*/, False /*read*/,
+                                    (HChar*)ARG4, parm);
+         }
+      }
+      break;
+   case VKI_PC_SETDFLCL:
+      /* Relax. */
+      break;
+   case VKI_PC_GETDFLCL:
+      if (ARG4)
+         POST_MEM_WRITE(ARG4, VG_(strlen)((HChar*)ARG4) + 1);
+      break;
+   case VKI_PC_DOPRIO:
+      {
+         vki_pcprio_t *prio = (vki_pcprio_t*)ARG4;
+         if (prio->pc_op == VKI_PC_GETPRIO) {
+            POST_FIELD_WRITE(prio->pc_cid);
+            POST_FIELD_WRITE(prio->pc_val);
+         }
+      }
+      break;
+   case VKI_PC_ADMIN:
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_pathconf)
+{
+   /* long pathconf(const char *path, int name); */
+   PRINT("sys_pathconf ( %#lx(%s), %ld )", ARG1, (HChar *) ARG1, SARG2);
+   PRE_REG_READ2(long, "pathconf", const char *, path, int, name);
+   PRE_MEM_RASCIIZ("pathconf(path)", ARG1);
+}
+
+PRE(sys_mmap)
+{
+   /* void *mmap(void *addr, size_t len, int prot, int flags,
+                 int fildes, off_t off); */
+   SysRes r;
+   OffT offset;
+
+   /* Stay sane. */
+   vg_assert(VKI_PAGE_SIZE == 4096);
+   vg_assert(sizeof(offset) == sizeof(ARG6));
+
+   PRINT("sys_mmap ( %#lx, %#lx, %#lx, %#lx, %ld, %#lx )",
+         ARG1, ARG2, ARG3, ARG4, SARG5, ARG6);
+   PRE_REG_READ6(long, "mmap", void *, start, vki_size_t, length,
+                 int, prot, int, flags, int, fd, vki_off_t, offset);
+
+   /* Make sure that if off < 0 then it's passed correctly to the generic mmap
+      wraper. */
+   offset = *(OffT*)&ARG6;
+
+   r = ML_(generic_PRE_sys_mmap)(tid, ARG1, ARG2, ARG3, ARG4, ARG5, offset);
+   SET_STATUS_from_SysRes(r);
+}
+
+#if defined(SOLARIS_UUIDSYS_SYSCALL)
+PRE(sys_uuidsys)
+{
+   /* int uuidsys(struct uuid *uuid); */
+   PRINT("sys_uuidsys ( %#lx )", ARG1);
+   PRE_REG_READ1(long, "uuidsys", struct vki_uuid *, uuid);
+   PRE_MEM_WRITE("uuidsys(uuid)", ARG1, sizeof(struct vki_uuid));
+}
+
+POST(sys_uuidsys)
+{
+   POST_MEM_WRITE(ARG1, sizeof(struct vki_uuid));
+}
+#endif /* SOLARIS_UUIDSYS_SYSCALL */
+
+/* Syscall mmapobj emulation. Processes ELF program headers
+   and maps them into correct place in memory. Not an easy task, though.
+   ELF program header of PT_LOAD/PT_SUNWBSS type specifies:
+   o p_vaddr  - actually a memory offset
+   o p_memsz  - total segment size, including text, data and BSS
+   o p_filesz - file-based segment size mapping (includes only text and data);
+                p_memsz - p_filesz is the size of BSS
+   o p_offset - offset into the ELF file where the file-based mapping starts
+ 
+   Several problematic areas to cover here:
+   1. p_offset can contain a value which is not page-aligned. In that case
+      we mmap a part of the file prior to p_offset to make the start address
+      page-aligned.
+   2. Partially unused page after the file-based mapping must be zeroed.
+   3. The first mapping is flagged with MR_HDR_ELF and needs to contain
+      the ELF header. This information is used and verified by the dynamic
+      linker (ld.so.1). */
+static SysRes mmapobj_process_phdrs(ThreadId tid, Int fd,
+                                    vki_mmapobj_result_t *storage,
+                                    vki_uint_t *elements,
+                                    const VKI_ESZ(Ehdr) *ehdr,
+                                    const VKI_ESZ(Phdr) *phdrs)
+{
+#define ADVANCE_PHDR(ehdr, phdr) \
+   (const VKI_ESZ(Phdr) *) ((const HChar *) (phdr) + (ehdr)->e_phentsize)
+
+   SysRes res;
+   Int i;
+   Int first_segment_idx = -1;
+   UInt idx;
+   UInt segments = 0; /* loadable segments */
+   Addr start_addr = 0;
+   Addr end_addr = 0;
+   Addr elfbrk = 0;
+   SizeT max_align = VKI_PAGE_SIZE;
+
+   /* 1. First pass over phdrs - determine number, span and max alignment. */
+   const VKI_ESZ(Phdr) *phdr = phdrs;
+   for (idx = 0; idx < ehdr->e_phnum; idx++, phdr = ADVANCE_PHDR(ehdr, phdr)) {
+      /* Skip this header if no memory is requested. */
+      if (phdr->p_memsz == 0)
+         continue;
+
+      if ((phdr->p_type == VKI_PT_LOAD) || (phdr->p_type == VKI_PT_SUNWBSS)) {
+         Off64T offset = 0;
+
+         if (VG_(clo_trace_syscalls))
+            VG_(debugLog)(2, "syswrap-solaris", "mmapobj_process_phdrs: "
+                             "program header #%u: addr=%#lx type=%#lx "
+                             "prot=%#lx memsz=%#lx filesz=%#lx file "
+                             "offset=%#lx\n", idx, phdr->p_vaddr,
+                             (UWord) phdr->p_type, (UWord) phdr->p_flags,
+                             phdr->p_memsz, phdr->p_filesz, phdr->p_offset);
+
+         if (segments == 0) {
+            first_segment_idx = idx;
+
+            if (phdr->p_filesz == 0) {
+               VG_(unimplemented)("Syswrap of the mmapobj call with the first "
+                                  "loadable ELF program header specifying "
+                                  "p_filesz == 0");
+              /*NOTREACHED*/
+              return res;
+            }
+
+            /* Address of the first segment must be either NULL or within the
+               first page. */
+            if ((ehdr->e_type == VKI_ET_DYN) &&
+                ((phdr->p_vaddr & VKI_PAGEMASK) != 0)) {
+               if (VG_(clo_trace_syscalls))
+                  VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: "
+                                   "ELF program header #%u does not land on "
+                                   "the first page (vaddr=%#lx)\n", idx,
+                                   phdr->p_vaddr);
+               return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+            }
+
+            start_addr = phdr->p_vaddr;
+            /* The first segment is mapped from the beginning of the file (to
+               include also the ELF header), so include this memory as well.
+               Later on we flag this mapping with MR_HDR_ELF. */
+            offset = phdr->p_offset;
+         }
+
+         if (phdr->p_align > 1) {
+            if ((phdr->p_vaddr % phdr->p_align) !=
+                (phdr->p_offset % phdr->p_align)) {
+               if (VG_(clo_trace_syscalls))
+                  VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: "
+                                   "ELF program header #%u does not have "
+                                   "congruent offset and vaddr (vaddr=%#lx "
+                                   "file offset=%#lx align=%#lx)\n", idx,
+                                   phdr->p_vaddr, phdr->p_offset,
+                                   phdr->p_align);
+               return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+            }
+         }
+
+         if (phdr->p_vaddr < end_addr) {
+            if (VG_(clo_trace_syscalls))
+               VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: "
+                                "ELF program header #%u specifies overlaping "
+                                "address (vaddr=%#lx end_addr=%#lx)\n",
+                                idx, phdr->p_vaddr, end_addr);
+            return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+         }
+
+         end_addr = elfbrk = phdr->p_vaddr + phdr->p_memsz + offset;
+         end_addr = VG_PGROUNDUP(end_addr);
+         if (phdr->p_align > max_align) {
+            max_align = phdr->p_align;
+         }
+
+         segments += 1;
+      }
+   }
+
+   /* Alignment check - it should be power of two. */
+   if ((max_align & (max_align - 1)) != 0) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: alignment "
+                          "is not a power of 2 (%#lx)\n", max_align);
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+   vg_assert(max_align >= VKI_PAGE_SIZE);
+
+#if defined(VGP_x86_solaris)
+   if (max_align > VKI_UINT_MAX) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: alignment "
+                          "for 32-bit ELF is >32-bits (%#lx)\n", max_align);
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+#endif /* VGP_x86_solaris */
+
+   if (segments == 0) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: nothing "
+                          "to map (0 loadable segments)");
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+
+   vg_assert(end_addr >= start_addr);
+   SizeT span = end_addr - start_addr;
+   if (span == 0) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: nothing "
+                          "to map (%u loadable segments spanning 0 bytes)\n",
+                          segments);
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+   vg_assert(first_segment_idx >= 0);
+
+   if (segments > *elements) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: too many "
+                          "segments (%u)\n", segments);
+      return VG_(mk_SysRes_Error)(VKI_E2BIG);
+   }
+
+   if (VG_(clo_trace_syscalls))
+      VG_(debugLog)(2, "syswrap-solaris", "mmapobj_process_phdrs: there "
+                       "are %u loadable segments spanning %#lx bytes; max "
+                       "align is %#lx\n", segments, span, max_align);
+
+   /* Now get the aspacemgr oraculum advisory.
+      Later on we mmap file-based and BSS mappings into this address space area
+      as required and leave the holes unmapped. */
+   if (ehdr->e_type == VKI_ET_DYN) {
+      MapRequest mreq = {MAlign, max_align, span};
+      Bool ok;
+      start_addr = VG_(am_get_advisory)(&mreq, True /* forClient */, &ok);
+      if (!ok) {
+         if (VG_(clo_trace_syscalls))
+            VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: "
+                             "failed to reserve address space of %#lx bytes "
+                             "with alignment %#lx\n", span, max_align);
+         return VG_(mk_SysRes_Error)(VKI_ENOMEM);
+      }
+      vg_assert(VG_ROUNDUP(start_addr, max_align) == start_addr);
+
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(2, "syswrap-solaris", "PRE(sys_mmapobj): address space "
+                          "reserved at: vaddr=%#lx size=%#lx\n",
+                          start_addr, span);
+   } else {
+      vg_assert(ehdr->e_type == VKI_ET_EXEC);
+      /* ET_EXEC uses fixed mappings. Will be checked when processing phdrs. */
+   }
+
+   /* This is an utterly ugly hack, the aspacemgr assumes that only one
+      segment is added at the time. However we add here multiple segments so
+      AM_SANITY_CHECK inside the aspacemgr can easily fail. We want to
+      prevent that thus we disable these checks. The scheduler will check the
+      aspacemgr sanity after the syscall. */
+   UInt sanity_level = VG_(clo_sanity_level);
+   VG_(clo_sanity_level) = 1;
+
+   /* 2. Second pass over phdrs - map the program headers and fill in
+         the mmapobj_result_t array. */
+   phdr = phdrs;
+   *elements = 0;
+   for (idx = 0; idx < ehdr->e_phnum; idx++, phdr = ADVANCE_PHDR(ehdr, phdr)) {
+      /* Skip this header if no memory is requested. */
+      if (phdr->p_memsz == 0)
+         continue;
+
+      if ((phdr->p_type == VKI_PT_LOAD) || (phdr->p_type == VKI_PT_SUNWBSS)) {
+         UInt prot = 0;
+         if (phdr->p_flags & VKI_PF_R)
+            prot |= VKI_PROT_READ;
+         if (phdr->p_flags & VKI_PF_W)
+            prot |= VKI_PROT_WRITE;
+         if (phdr->p_flags & VKI_PF_X)
+            prot |= VKI_PROT_EXEC;
+
+         vki_mmapobj_result_t *mrp = &storage[*elements];
+         mrp->mr_msize = phdr->p_memsz;
+         mrp->mr_fsize = phdr->p_filesz;
+         mrp->mr_offset = 0;
+         mrp->mr_prot = prot;
+         mrp->mr_flags = 0;
+         Off64T file_offset = phdr->p_offset;
+         if (idx == first_segment_idx) {
+            mrp->mr_flags = VKI_MR_HDR_ELF;
+            if (ehdr->e_type == VKI_ET_DYN) {
+               if (phdr->p_offset > 0) {
+                  /* Include the ELF header into the first segment.
+                     This means we ignore p_offset from the program header
+                     and map from file offset 0. */
+                  mrp->mr_msize += phdr->p_offset;
+                  mrp->mr_fsize += phdr->p_offset;
+                  file_offset = 0;
+               }
+            } else {
+               vg_assert(ehdr->e_type == VKI_ET_EXEC);
+               start_addr = phdr->p_vaddr;
+            }
+         }
+
+         /* p_vaddr is absolute for ET_EXEC, and relative for ET_DYN. */
+         mrp->mr_addr = (vki_caddr_t) phdr->p_vaddr;
+         if (ehdr->e_type == VKI_ET_DYN) {
+            mrp->mr_addr += start_addr;
+         }
+
+         SizeT page_offset = (Addr) mrp->mr_addr & VKI_PAGEOFFSET;
+         if (page_offset > 0) {
+            vg_assert(file_offset >= page_offset);
+            /* Mapping address does not start at the beginning of a page.
+               Therefore include some bytes before to make it page aligned. */
+            mrp->mr_addr -= page_offset;
+            mrp->mr_msize += page_offset;
+            mrp->mr_offset = page_offset;
+            file_offset -= page_offset;
+         }
+         SizeT file_size = mrp->mr_fsize + mrp->mr_offset;
+         if (VG_(clo_trace_syscalls))
+            VG_(debugLog)(2, "syswrap-solaris", "mmapobj_process_phdrs: "
+                             "mmapobj result #%u: addr=%#lx msize=%#lx "
+                             "fsize=%#lx mr_offset=%#lx prot=%#x flags=%#x\n",
+                             *elements, (Addr) mrp->mr_addr,
+                             (UWord) mrp->mr_msize, (UWord) mrp->mr_fsize,
+                             (UWord) mrp->mr_offset, mrp->mr_prot,
+                             mrp->mr_flags);
+
+         UInt flags = VKI_MAP_PRIVATE | VKI_MAP_FIXED;
+         if ((mrp->mr_prot & (VKI_PROT_WRITE | VKI_PROT_EXEC)) ==
+                                                               VKI_PROT_EXEC) {
+            flags |= VKI_MAP_TEXT;
+         } else {
+            flags |= VKI_MAP_INITDATA;
+         }
+
+         /* Determine if there will be partially unused page after file-based
+            mapping. If so, then we need to zero it explicitly afterwards. */
+         Addr mapping_end = (Addr) mrp->mr_addr + file_size;
+         SizeT zeroed_size = VG_PGROUNDUP(mapping_end) - mapping_end;
+         Bool mprotect_needed = False;
+         if ((zeroed_size > 0) && ((prot & VKI_PROT_WRITE) == 0)) {
+            prot |= VKI_PROT_WRITE;
+            mprotect_needed = True;
+         }
+
+         if (ehdr->e_type == VKI_ET_EXEC) {
+            /* Now check if the requested address space is available. */
+            if (!VG_(am_is_free_or_resvn)((Addr) mrp->mr_addr, mrp->mr_msize)) {
+               if (VG_(clo_trace_syscalls))
+                  VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: "
+                                   "requested segment at %#lx with size of "
+                                   "%#lx bytes is not available\n",
+                                   (Addr) mrp->mr_addr, (UWord) mrp->mr_msize);
+               res = VG_(mk_SysRes_Error)(VKI_EADDRINUSE);
+               goto mmap_error;
+            }
+         }
+
+         if (file_size > 0) {
+            res = VG_(am_mmap_file_fixed_client_flags)((Addr) mrp->mr_addr,
+                                       file_size, prot, flags, fd, file_offset);
+            if (sr_isError(res)) {
+               if (VG_(clo_trace_syscalls))
+                  VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: "
+                                   "mmap failed: addr=%#lx size=%#lx prot=%#x "
+                                   "flags=%#x fd=%d file offset=%#llx\n",
+                                   (Addr) mrp->mr_addr, file_size,
+                                   prot, flags, fd, file_offset);
+               goto mmap_error;
+            }
+
+            VG_(debugLog)(1, "syswrap-solaris", "PRE(sys_mmapobj): new "
+                             "segment: vaddr=%#lx size=%#lx prot=%#x "
+                             "flags=%#x fd=%d file offset=%#llx\n",
+                             (Addr) mrp->mr_addr, file_size, mrp->mr_prot,
+                             flags, fd, file_offset);
+         }
+
+         if (zeroed_size > 0) {
+            /* Now zero out the end of partially used page. */
+            VG_(memset)((void *) mapping_end, 0, zeroed_size);
+            if (mprotect_needed) {
+               prot &= ~VKI_PROT_WRITE;
+               res = VG_(do_syscall3)(SYS_mprotect, (Addr) mrp->mr_addr,
+                                      file_size, prot);
+               if (sr_isError(res)) {
+                  if (VG_(clo_trace_syscalls))
+                     VG_(debugLog)(3, "syswrap-solaris",
+                                      "mmapobj_process_phdrs: mprotect failed: "
+                                      "addr=%#lx size=%#lx prot=%#x",
+                                      (Addr) mrp->mr_addr, file_size, prot);
+                  /* Mapping for this segment was already established. */
+                  idx += 1;
+                  goto mmap_error;
+               }
+            }
+         }
+
+         if (file_size > 0) {
+            ML_(notify_core_and_tool_of_mmap)((Addr) mrp->mr_addr, file_size,
+                                              prot, flags, fd, file_offset);
+         }
+
+         /* Page(s) after the mapping backed up by the file are part of BSS.
+            They need to be mmap'ed over with correct flags and will be
+            implicitly zeroed. */
+         mapping_end = VG_PGROUNDUP(mrp->mr_addr + mrp->mr_msize);
+         Addr page_end = VG_PGROUNDUP(mrp->mr_addr + file_size);
+         vg_assert(mapping_end >= page_end);
+         zeroed_size = mapping_end - page_end;
+         if (zeroed_size > 0) {
+            flags = VKI_MAP_FIXED | VKI_MAP_PRIVATE | VKI_MAP_ANONYMOUS;
+            res = VG_(am_mmap_anon_fixed_client)(page_end, zeroed_size, prot);
+            if (sr_isError(res)) {
+               if (VG_(clo_trace_syscalls))
+                  VG_(debugLog)(3, "syswrap-solaris", "mmapobj_process_phdrs: "
+                                   "mmap_anon failed: addr=%#lx size=%#lx "
+                                   "prot=%#x\n", page_end, zeroed_size, prot);
+               idx += 1; /* mapping for this segment was already established */
+               goto mmap_error;
+            }
+
+            VG_(debugLog)(1, "syswrap-solaris", "PRE(sys_mmapobj): new "
+                             "anonymous segment (BSS): vaddr=%#lx size=%#lx "
+                             "prot=%#x\n", page_end, zeroed_size, prot);
+            ML_(notify_core_and_tool_of_mmap)(page_end, zeroed_size,
+                                              prot, flags, -1, 0);
+         }
+
+         VG_(di_notify_mmap)((Addr) mrp->mr_addr, False /*allow_SkFileV*/, fd);
+
+         *elements += 1;
+         vg_assert(*elements <= segments);
+      }
+   }
+
+   if ((ehdr->e_type == VKI_ET_EXEC) && (!brk_segment_established)) {
+      vg_assert(VG_(brk_base) == VG_(brk_limit));
+      vg_assert(VG_(brk_base) == -1);
+      VG_(brk_base) = VG_(brk_limit) = elfbrk;
+
+      if (!VG_(setup_client_dataseg)()) {
+         VG_(umsg)("Cannot map memory to initialize brk segment in thread #%d "
+                   "at %#lx\n", tid, VG_(brk_base));
+         res = VG_(mk_SysRes_Error)(VKI_ENOMEM);
+         goto mmap_error;
+      }
+
+      VG_(track_client_dataseg)(tid);
+   }
+
+   /* Restore VG_(clo_sanity_level). The scheduler will perform the aspacemgr
+      sanity check after the syscall. */
+   VG_(clo_sanity_level) = sanity_level;
+
+   return VG_(mk_SysRes_Success)(0);
+
+mmap_error:
+   for (i = idx - 1; i > 0; i--) {
+      Bool discard_translations;
+      Addr addr = (Addr) storage[i].mr_addr;
+
+      VG_(am_munmap_client)(&discard_translations, addr, storage[i].mr_msize);
+      ML_(notify_core_and_tool_of_munmap)(addr, storage[i].mr_msize);
+   }
+   *elements = 0;
+   return res;
+
+#undef ADVANCE_PHDR
+}
+
+static SysRes mmapobj_interpret(ThreadId tid, Int fd,
+                                vki_mmapobj_result_t *storage,
+                                vki_uint_t *elements)
+{
+   SysRes res;
+
+   struct vg_stat stats;
+   if (VG_(fstat)(fd, &stats) != 0) {
+      return VG_(mk_SysRes_Error)(VKI_EBADF);
+   }
+
+   if (stats.size < sizeof(VKI_ESZ(Ehdr))) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_interpret: insufficient "
+                          "file size (%lld)\n", stats.size);
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+
+   /* Align the header buffer appropriately. */
+   vki_ulong_t lheader[sizeof(VKI_ESZ(Ehdr)) / sizeof(vki_ulong_t) + 1];
+   HChar *header = (HChar *) &lheader;
+
+   res = VG_(pread)(fd, header, sizeof(VKI_ESZ(Ehdr)), 0);
+   if (sr_isError(res)) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_interpret: read of ELF "
+                          "header failed\n");
+      return res;
+   } else if (sr_Res(res) != sizeof(VKI_ESZ(Ehdr))) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_interpret: read of ELF "
+                          "header failed - only %lu bytes out of %lu\n",
+                          sr_Res(res), (UWord) sizeof(VKI_ESZ(Ehdr)));
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+
+   /* Verify file type is ELF. */
+   if ((header[VKI_EI_MAG0] != VKI_ELFMAG0) ||
+       (header[VKI_EI_MAG1] != VKI_ELFMAG1) ||
+       (header[VKI_EI_MAG2] != VKI_ELFMAG2) ||
+       (header[VKI_EI_MAG3] != VKI_ELFMAG3)) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_interpret: ELF header "
+                          "missing magic\n");
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+
+   if (header[VKI_EI_CLASS] != VG_ELF_CLASS) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_interpret: ELF class "
+                          "mismatch (%u vs %u)\n", header[VKI_EI_CLASS],
+                          VG_ELF_CLASS);
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+
+   VKI_ESZ(Ehdr) *ehdr = (VKI_ESZ(Ehdr) *) header;
+   if ((ehdr->e_type != VKI_ET_EXEC) && (ehdr->e_type != VKI_ET_DYN)) {
+      VG_(unimplemented)("Syswrap of the mmapobj call with ELF type %u.",
+                         ehdr->e_type);
+      /*NOTREACHED*/
+      return res;
+   }
+
+   if (ehdr->e_phnum == VKI_PN_XNUM) {
+      VG_(unimplemented)("Syswrap of the mmapobj call with number of ELF "
+                         "program headers == PN_XNUM");
+      /*NOTREACHED*/
+      return res;
+   }
+
+   /* Check alignment. */
+#if defined(VGP_x86_solaris)
+   if (!VG_IS_4_ALIGNED(ehdr->e_phentsize)) {
+#elif defined(VGP_amd64_solaris)
+   if (!VG_IS_8_ALIGNED(ehdr->e_phentsize)) {
+#else
+#  error "Unknown platform"
+#endif
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_interpret: ELF header "
+                          "phentsize not aligned properly (%u)\n",
+                          ehdr->e_phentsize);
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+
+   SizeT phdrs_size = ehdr->e_phnum * ehdr->e_phentsize;
+   if (phdrs_size == 0) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_interpret: no ELF "
+                          "program headers\n");
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+
+   VKI_ESZ(Phdr) *phdrs = VG_(malloc)("syswrap.mi.1", phdrs_size);
+   res = VG_(pread)(fd, phdrs, phdrs_size, ehdr->e_phoff);
+   if (sr_isError(res)) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_interpret: read of ELF "
+                          "program headers failed\n");
+      VG_(free)(phdrs);
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   } else if (sr_Res(res) != phdrs_size) {
+      if (VG_(clo_trace_syscalls))
+         VG_(debugLog)(3, "syswrap-solaris", "mmapobj_interpret: read of ELF "
+                          "program headers failed - only %lu bytes out of %lu\n",
+                          sr_Res(res), phdrs_size);
+      VG_(free)(phdrs);
+      return VG_(mk_SysRes_Error)(VKI_ENOTSUP);
+   }
+
+   if (VG_(clo_trace_syscalls))
+      VG_(debugLog)(2, "syswrap-solaris", "mmapobj_interpret: %u ELF "
+                       "program headers with total size of %lu bytes\n",
+                       ehdr->e_phnum, phdrs_size);
+
+   /* Now process the program headers. */
+   res = mmapobj_process_phdrs(tid, fd, storage, elements, ehdr, phdrs);
+   VG_(free)(phdrs);
+   return res;
+}
+
+PRE(sys_mmapobj)
+{
+   /* int mmapobj(int fd, uint_t flags, mmapobj_result_t *storage,
+                  uint_t *elements, void *arg); */
+   PRINT("sys_mmapobj ( %ld, %#lx, %#lx, %#lx, %#lx )", SARG1, ARG2, ARG3,
+         ARG4, ARG5);
+   PRE_REG_READ5(long, "mmapobj", int, fd, vki_uint_t, flags,
+                 mmapobj_result_t *, storage, uint_t *, elements,
+                 void *, arg);
+
+   PRE_MEM_READ("mmapobj(elements)", ARG4, sizeof(vki_uint_t));
+   /*PRE_MEM_WRITE("mmapobj(elements)", ARG4, sizeof(vki_uint_t));*/
+   if (ML_(safe_to_deref)((void*)ARG4, sizeof(vki_uint_t))) {
+      vki_uint_t *u = (vki_uint_t*)ARG4;
+      PRE_MEM_WRITE("mmapobj(storage)", ARG3,
+                    *u * sizeof(vki_mmapobj_result_t));
+   }
+
+   if (ARG2 & VKI_MMOBJ_PADDING)
+      PRE_MEM_READ("mmapobj(arg)", ARG5, sizeof(vki_size_t));
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "mmapobj", tid, False)) {
+      SET_STATUS_Failure(VKI_EBADF);
+      return;
+   }
+
+   /* We cannot advise mmapobj about desired address(es). Unfortunately
+      kernel places mappings from mmapobj at the end of process address
+      space, defeating memcheck's optimized fast 2-level array algorithm.
+      So we need to emulate what mmapobj does in the kernel. */
+
+   /* Sanity check on parameters. */
+   if ((ARG2 & ~VKI_MMOBJ_ALL_FLAGS) != 0) {
+      SET_STATUS_Failure(VKI_EINVAL);
+      return;
+   }
+
+   if (!ML_(safe_to_deref)((void *) ARG4, sizeof(vki_uint_t))) {
+      SET_STATUS_Failure(VKI_EFAULT);
+      return;
+   }
+   vki_uint_t *elements = (vki_uint_t *) ARG4;
+
+   if (*elements > 0) {
+      if (!ML_(safe_to_deref)((void *) ARG3,
+                              *elements * sizeof(vki_mmapobj_result_t))) {
+         SET_STATUS_Failure(VKI_EFAULT);
+         return;
+      }
+   }
+
+   /* For now, supported is only MMOBJ_INTERPRET and no MMOBJ_PADDING. */
+   if (ARG2 != VKI_MMOBJ_INTERPRET) {
+      VG_(unimplemented)("Syswrap of the mmapobj call with flags %lu.", ARG2);
+      /*NOTREACHED*/
+      return;
+   }
+
+   SysRes res = mmapobj_interpret(tid, (Int) ARG1,
+                                  (vki_mmapobj_result_t *) ARG3, elements);
+   SET_STATUS_from_SysRes(res);
+
+   if (!sr_isError(res)) {
+      POST_MEM_WRITE(ARG4, sizeof(vki_uint_t));
+
+      UInt idx;
+      for (idx = 0; idx < *(vki_uint_t *) ARG4; idx++) {
+         vki_mmapobj_result_t *mrp = &((vki_mmapobj_result_t *) ARG3)[idx];
+         POST_FIELD_WRITE(mrp->mr_addr);
+         POST_FIELD_WRITE(mrp->mr_msize);
+         POST_FIELD_WRITE(mrp->mr_fsize);
+         POST_FIELD_WRITE(mrp->mr_prot);
+         POST_FIELD_WRITE(mrp->mr_flags);
+         POST_FIELD_WRITE(mrp->mr_offset);
+      }
+   }
+}
+
+PRE(sys_memcntl)
+{
+   /* int memcntl(caddr_t addr, size_t len, int cmd, caddr_t arg,
+                  int attr, int mask); */
+   PRINT("sys_memcntl ( %#lx, %#lx, %ld, %#lx, %#lx, %#lx )", ARG1, ARG2,
+         SARG3, ARG4, ARG5, ARG6);
+   PRE_REG_READ6(long, "memcntl", void *, addr, vki_size_t, len, int, cmd,
+                 void *, arg, int, attr, int, mask);
+
+   if (ARG3 != VKI_MC_LOCKAS && ARG3 != VKI_MC_UNLOCKAS &&
+       !ML_(valid_client_addr)(ARG1, ARG2, tid, "memcntl")) {
+      /* MC_LOCKAS and MC_UNLOCKAS work on the complete address space thus we
+         don't check the address range validity if these commands are
+         requested. */
+      SET_STATUS_Failure(VKI_ENOMEM);
+      return;
+   }
+
+   if (ARG3 == VKI_MC_HAT_ADVISE)
+      PRE_MEM_READ("memcntl(arg)", ARG4, sizeof(struct vki_memcntl_mha));
+}
+
+PRE(sys_getpmsg)
+{
+   /* int getpmsg(int fildes, struct strbuf *ctlptr, struct strbuf *dataptr,
+                  int *bandp, int *flagsp); */
+   struct vki_strbuf *ctrlptr = (struct vki_strbuf *)ARG2;
+   struct vki_strbuf *dataptr = (struct vki_strbuf *)ARG3;
+   *flags |= SfMayBlock;
+   PRINT("sys_getpmsg ( %ld, %#lx, %#lx, %#lx, %#lx )", SARG1, ARG2, ARG3,
+         ARG4, ARG5);
+   PRE_REG_READ5(long, "getpmsg", int, fildes, struct vki_strbuf *, ctlptr,
+                 struct vki_strbuf *, dataptr, int *, bandp, int *, flagsp);
+   if (ctrlptr) {
+      PRE_FIELD_READ("getpmsg(ctrlptr->maxlen)", ctrlptr->maxlen);
+      PRE_FIELD_WRITE("getpmsg(ctrlptr->len)", ctrlptr->len);
+      PRE_FIELD_READ("getpmsg(ctrlptr->buf)", ctrlptr->buf);
+      if (ML_(safe_to_deref)((void*)ARG2, sizeof(struct vki_strbuf))
+          && ctrlptr->maxlen > 0)
+         PRE_MEM_WRITE("getpmsg(ctrlptr->buf)", (Addr)ctrlptr->buf,
+                       ctrlptr->maxlen);
+   }
+   if (dataptr) {
+      PRE_FIELD_READ("getpmsg(dataptr->maxlen)", dataptr->maxlen);
+      PRE_FIELD_WRITE("getpmsg(dataptr->len)", dataptr->len);
+      PRE_FIELD_READ("getpmsg(dataptr->buf)", dataptr->buf);
+      if (ML_(safe_to_deref)((void*)ARG3, sizeof(struct vki_strbuf))
+          && dataptr->maxlen > 0)
+         PRE_MEM_WRITE("getpmsg(dataptr->buf)", (Addr)dataptr->buf,
+                       dataptr->maxlen);
+   }
+   PRE_MEM_READ("getpmsg(bandp)", ARG4, sizeof(int));
+   /*PRE_MEM_WRITE("getpmsg(bandp)", ARG4, sizeof(int));*/
+   PRE_MEM_READ("getpmsg(flagsp)", ARG5, sizeof(int));
+   /*PRE_MEM_WRITE("getpmsg(flagsp)", ARG5, sizeof(int));*/
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "getpmsg", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_getpmsg)
+{
+   struct vki_strbuf *ctrlptr = (struct vki_strbuf *)ARG2;
+   struct vki_strbuf *dataptr = (struct vki_strbuf *)ARG3;
+
+   if (ctrlptr && ctrlptr->len > 0)
+      POST_MEM_WRITE((Addr)ctrlptr->buf, ctrlptr->len);
+   if (dataptr && dataptr->len > 0)
+      POST_MEM_WRITE((Addr)dataptr->buf, dataptr->len);
+   POST_MEM_WRITE(ARG4, sizeof(int));
+   POST_MEM_WRITE(ARG5, sizeof(int));
+}
+
+PRE(sys_putpmsg)
+{
+   /* int putpmsg(int fildes, const struct strbuf *ctlptr,
+                  const struct strbuf *dataptr, int band, int flags); */
+   struct vki_strbuf *ctrlptr = (struct vki_strbuf *)ARG2;
+   struct vki_strbuf *dataptr = (struct vki_strbuf *)ARG3;
+   *flags |= SfMayBlock;
+   PRINT("sys_putpmsg ( %ld, %#lx, %#lx, %ld, %ld )", SARG1, ARG2, ARG3, SARG4,
+         SARG5);
+   PRE_REG_READ5(long, "putpmsg", int, fildes, struct vki_strbuf *, ctrlptr,
+                 struct vki_strbuf *, dataptr, int, band, int, flags);
+   if (ctrlptr) {
+      PRE_FIELD_READ("putpmsg(ctrlptr->len)", ctrlptr->len);
+      PRE_FIELD_READ("putpmsg(ctrlptr->buf)", ctrlptr->buf);
+      if (ML_(safe_to_deref)((void*)ARG2, sizeof(struct vki_strbuf))
+          && ctrlptr->len > 0)
+         PRE_MEM_READ("putpmsg(ctrlptr->buf)", (Addr)ctrlptr->buf,
+                      ctrlptr->len);
+   }
+   if (dataptr) {
+      PRE_FIELD_READ("putpmsg(dataptr->len)", dataptr->len);
+      PRE_FIELD_READ("putpmsg(dataptr->buf)", dataptr->buf);
+      if (ML_(safe_to_deref)((void*)ARG3, sizeof(struct vki_strbuf))
+          && dataptr->len > 0)
+         PRE_MEM_READ("putpmsg(dataptr->buf)", (Addr)dataptr->buf,
+                      dataptr->len);
+   }
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "putpmsg", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+#if defined(SOLARIS_OLD_SYSCALLS)
+PRE(sys_rename)
+{
+   /* int rename(const char *from, const char *to); */
+
+   *flags |= SfMayBlock;
+   PRINT("sys_rename ( %#lx(%s), %#lx(%s) )",
+         ARG1, (HChar *) ARG1, ARG2, (HChar *) ARG2);
+   PRE_REG_READ2(long, "rename", const char *, from, const char *, to);
+
+   PRE_MEM_RASCIIZ("rename(from)", ARG1);
+   PRE_MEM_RASCIIZ("rename(to)", ARG2);
+}
+#endif /* SOLARIS_OLD_SYSCALLS */
+
+PRE(sys_uname)
+{
+   /* int uname(struct utsname *name); */
+   PRINT("sys_uname ( %#lx )", ARG1);
+   PRE_REG_READ1(long, "uname", struct vki_utsname *, name);
+   PRE_MEM_WRITE("uname(name)", ARG1, sizeof(struct vki_utsname));
+}
+
+POST(sys_uname)
+{
+   struct vki_utsname *name = (struct vki_utsname *) ARG1;
+   POST_MEM_WRITE((Addr) name->sysname, VG_(strlen)(name->sysname) + 1);
+   POST_MEM_WRITE((Addr) name->nodename, VG_(strlen)(name->nodename) + 1);
+   POST_MEM_WRITE((Addr) name->release, VG_(strlen)(name->release) + 1);
+   POST_MEM_WRITE((Addr) name->version, VG_(strlen)(name->version) + 1);
+   POST_MEM_WRITE((Addr) name->machine, VG_(strlen)(name->machine) + 1);
+}
+
+PRE(sys_setegid)
+{
+   /* int setegid(gid_t egid); */
+   PRINT("sys_setegid ( %ld )", SARG1);
+   PRE_REG_READ1(long, "setegid", vki_gid_t, egid);
+}
+
+PRE(sys_sysconfig)
+{
+   /* long sysconf(int name); */
+   PRINT("sys_sysconfig ( %ld )", SARG1);
+   PRE_REG_READ1(long, "sysconf", int, name);
+
+   if (ARG1 == VKI_CONFIG_OPEN_FILES)
+      SET_STATUS_Success(VG_(fd_soft_limit));
+}
+
+PRE(sys_systeminfo)
+{
+   /* int sysinfo(int command, char *buf, long count); */
+   PRINT("sys_systeminfo ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+   PRE_REG_READ3(long, "sysinfo", int, command, char *, buf, long, count);
+
+   switch (ARG1 /*command*/) {
+   case VKI_SI_SYSNAME:
+   case VKI_SI_HOSTNAME:
+   case VKI_SI_RELEASE:
+   case VKI_SI_VERSION:
+   case VKI_SI_MACHINE:
+   case VKI_SI_ARCHITECTURE:
+   case VKI_SI_HW_SERIAL:
+   case VKI_SI_HW_PROVIDER:
+   case VKI_SI_SRPC_DOMAIN:
+   case VKI_SI_PLATFORM:
+   case VKI_SI_ISALIST:
+   case VKI_SI_DHCP_CACHE:
+   case VKI_SI_ARCHITECTURE_32:
+   case VKI_SI_ARCHITECTURE_64:
+   case VKI_SI_ARCHITECTURE_K:
+   case VKI_SI_ARCHITECTURE_NATIVE:
+      PRE_MEM_WRITE("sysinfo(buf)", ARG2, ARG3);
+      break;
+
+   case VKI_SI_SET_HOSTNAME:
+   case VKI_SI_SET_SRCP_DOMAIN:
+      PRE_MEM_RASCIIZ("sysinfo(buf)", ARG2);
+      break;
+
+   default:
+      VG_(unimplemented)("Syswrap of the sysinfo call with command %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_systeminfo)
+{
+   if (ARG1 != VKI_SI_SET_HOSTNAME && ARG1 != VKI_SI_SET_SRCP_DOMAIN)
+      POST_MEM_WRITE(ARG2, MIN(RES, ARG3));
+}
+
+PRE(sys_seteuid)
+{
+   /* int seteuid(uid_t euid); */
+   PRINT("sys_seteuid ( %ld )", SARG1);
+   PRE_REG_READ1(long, "seteuid", vki_uid_t, euid);
+}
+
+PRE(sys_forksys)
+{
+   /* int64_t forksys(int subcode, int flags); */
+   Int fds[2];
+   Int res;
+   PRINT("sys_forksys ( %ld, %ld )", SARG1, SARG2);
+   PRE_REG_READ2(long, "forksys", int, subcode, int, flags);
+
+   if (ARG1 == 1) {
+      /* Support for forkall() requires changes to the big lock processing
+         which are not yet implemented. */
+      VG_(unimplemented)("Support for forkall().");
+      /*NOTREACHED*/
+      return;
+   }
+
+   if (ARG1 != 0 && ARG1 != 2) {
+      VG_(unimplemented)("Syswrap of the forksys call where subcode=%ld.",
+                         SARG1);
+      /*NOTREACHED*/
+   }
+
+   if (ARG1 == 2) {
+      /* vfork() is requested. Translate it to a normal fork() but work around
+         a problem with posix_spawn() which relies on the real vfork()
+         behaviour. See a description in vg_preloaded.c for details. */
+      res = VG_(pipe)(fds);
+      vg_assert(res == 0);
+
+      vg_assert(fds[0] != fds[1]);
+
+      /* Move to Valgrind fds and set close-on-exec flag on both of them (done
+         by VG_(safe_fd). */
+      fds[0] = VG_(safe_fd)(fds[0]);
+      fds[1] = VG_(safe_fd)(fds[1]);
+      vg_assert(fds[0] != fds[1]);
+
+      vg_assert(VG_(vfork_fildes_addr) != NULL);
+      vg_assert(*VG_(vfork_fildes_addr) == -1);
+      *VG_(vfork_fildes_addr) = fds[0];
+   }
+
+   VG_(do_atfork_pre)(tid);
+   SET_STATUS_from_SysRes(VG_(do_syscall2)(__NR_forksys, 0, ARG2));
+
+   if (!SUCCESS) {
+      /* vfork */
+      if (ARG1 == 2) {
+         VG_(close)(fds[0]);
+         VG_(close)(fds[1]);
+      }
+
+      return;
+   }
+
+   if (RESHI) {
+      VG_(do_atfork_child)(tid);
+
+      /* If --child-silent-after-fork=yes was specified, set the output file
+         descriptors to 'impossible' values.  This is noticed by
+         send_bytes_to_logging_sink() in m_libcprint.c, which duly stops
+         writing any further output. */
+      if (VG_(clo_child_silent_after_fork)) {
+         if (!VG_(log_output_sink).is_socket)
+            VG_(log_output_sink).fd = -1;
+         if (!VG_(xml_output_sink).is_socket)
+            VG_(xml_output_sink).fd = -1;
+      }
+
+      /* vfork */
+      if (ARG1 == 2)
+         VG_(close)(fds[1]);
+   }
+   else {
+      VG_(do_atfork_parent)(tid);
+
+      /* Print information about the fork. */
+      PRINT("   fork: process %d created child %d\n", VG_(getpid)(),
+            (Int)RES);
+
+      /* vfork */
+      if (ARG1 == 2) {
+         /* Wait for the child to finish (exec or exit). */
+         UChar w;
+
+         VG_(close)(fds[0]);
+
+         res = VG_(read)(fds[1], &w, 1);
+         if (res == 1)
+            SET_STATUS_Failure(w);
+         VG_(close)(fds[1]);
+
+         *VG_(vfork_fildes_addr) = -1;
+      }
+   }
+}
+
+PRE(sys_sigtimedwait)
+{
+   /* int sigtimedwait(const sigset_t *set, siginfo_t *info,
+                       const timespec_t *timeout); */
+   *flags |= SfMayBlock;
+   PRINT("sys_sigtimedwait ( %#lx, %#lx, %#lx )", ARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "sigtimedwait", vki_sigset_t *, set,
+                 vki_siginfo_t *, info, vki_timespec_t *, timeout);
+   PRE_MEM_READ("sigtimewait(set)", ARG1, sizeof(vki_sigset_t));
+   if (ARG2)
+      PRE_MEM_WRITE("sigtimedwait(info)", ARG2, sizeof(vki_siginfo_t));
+   if (ARG3)
+      PRE_MEM_READ("sigtimedwait(timeout)", ARG3, sizeof(vki_timespec_t));
+}
+
+POST(sys_sigtimedwait)
+{
+   if (ARG2)
+      POST_MEM_WRITE(ARG2, sizeof(vki_siginfo_t));
+}
+
+PRE(sys_yield)
+{
+   /* void yield(void); */
+   *flags |= SfMayBlock;
+   PRINT("sys_yield ( )");
+   PRE_REG_READ0(long, "yield");
+}
+
+PRE(sys_lwp_sema_post)
+{
+   /* int lwp_sema_post(lwp_sema_t *sema); */
+   vki_lwp_sema_t *sema = (vki_lwp_sema_t*)ARG1;
+   *flags |= SfMayBlock;
+   PRINT("sys_lwp_sema_post ( %#lx )", ARG1);
+   PRE_REG_READ1(long, "lwp_sema_post", lwp_sema_t *, sema);
+
+   PRE_FIELD_READ("lwp_sema_post(sema->type)", sema->vki_sema_type);
+   PRE_FIELD_READ("lwp_sema_post(sema->count)", sema->vki_sema_count);
+   /*PRE_FIELD_WRITE("lwp_sema_post(sema->count)", sema->vki_sema_count);*/
+   PRE_FIELD_READ("lwp_sema_post(sema->waiters)", sema->vki_sema_waiters);
+   /*PRE_FIELD_WRITE("lwp_sema_post(sema->waiters)", sema->vki_sema_waiters);*/
+}
+
+POST(sys_lwp_sema_post)
+{
+   vki_lwp_sema_t *sema = (vki_lwp_sema_t*)ARG1;
+   POST_FIELD_WRITE(sema->vki_sema_count);
+   POST_FIELD_WRITE(sema->vki_sema_waiters);
+}
+
+PRE(sys_lwp_sema_trywait)
+{
+   /* int lwp_sema_trywait(lwp_sema_t *sema); */
+   vki_lwp_sema_t *sema = (vki_lwp_sema_t*)ARG1;
+   PRINT("sys_lwp_sema_trywait ( %#lx )", ARG1);
+   PRE_REG_READ1(long, "lwp_sema_trywait", lwp_sema_t *, sema);
+
+   PRE_FIELD_READ("lwp_sema_trywait(sema->type)", sema->vki_sema_type);
+   PRE_FIELD_READ("lwp_sema_trywait(sema->count)", sema->vki_sema_count);
+   /*PRE_FIELD_WRITE("lwp_sema_trywait(sema->count)", sema->vki_sema_count);*/
+   PRE_FIELD_READ("lwp_sema_trywait(sema->waiters)", sema->vki_sema_waiters);
+   /*PRE_FIELD_WRITE("lwp_sema_trywait(sema->waiters)",
+     sema->vki_sema_waiters);*/
+}
+
+POST(sys_lwp_sema_trywait)
+{
+   vki_lwp_sema_t *sema = (vki_lwp_sema_t*)ARG1;
+   POST_FIELD_WRITE(sema->vki_sema_count);
+   POST_FIELD_WRITE(sema->vki_sema_waiters);
+}
+
+PRE(sys_lwp_detach)
+{
+   /* int lwp_detach(id_t lwpid); */
+   PRINT("sys_lwp_detach ( %ld )", SARG1);
+   PRE_REG_READ1(long, "lwp_detach", vki_id_t, lwpid);
+}
+
+PRE(sys_fchroot)
+{
+   /* int fchroot(int fd); */
+   PRINT("sys_fchroot ( %ld )", SARG1);
+   PRE_REG_READ1(long, "fchroot", int, fd);
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "fchroot", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+#if defined(SOLARIS_SYSTEM_STATS_SYSCALL)
+PRE(sys_system_stats)
+{
+   /* void system_stats(int flag); */
+   PRINT("sys_system_stats ( %ld )", SARG1);
+   PRE_REG_READ1(void, "system_stats", int, flag);
+}
+#endif /* SOLARIS_SYSTEM_STATS_SYSCALL */
+
+PRE(sys_gettimeofday)
+{
+   /* Kernel: int gettimeofday(struct timeval *tp); */
+   PRINT("sys_gettimeofday ( %#lx )", ARG1);
+   PRE_REG_READ1(long, "gettimeofday", struct timeval *, tp);
+   if (ARG1)
+      PRE_timeval_WRITE("gettimeofday(tp)", ARG1);
+}
+
+POST(sys_gettimeofday)
+{
+   if (ARG1)
+      POST_timeval_WRITE(ARG1);
+}
+
+PRE(sys_lwp_create)
+{
+   /* int lwp_create(ucontext_t *ucp, int flags, id_t *new_lwp) */
+
+   ThreadId ctid;
+   ThreadState *ptst;
+   ThreadState *ctst;
+   Addr stack;
+   SysRes res;
+   vki_ucontext_t uc;
+   Bool tool_informed = False;
+
+   PRINT("sys_lwp_create ( %#lx, %ld, %#lx )", ARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "lwp_create", ucontext_t *, ucp, int, flags,
+                 id_t *, new_lwp);
+
+   if (ARG3 != 0)
+      PRE_MEM_WRITE("lwp_create(new_lwp)", ARG3, sizeof(vki_id_t));
+
+   /* If we can't deref ucontext_t then we can't do anything. */
+   if (!ML_(safe_to_deref)((void*)ARG1, sizeof(vki_ucontext_t))) {
+      SET_STATUS_Failure(VKI_EINVAL);
+      return;
+   }
+
+   ctid = VG_(alloc_ThreadState)();
+   ptst = VG_(get_ThreadState)(tid);
+   ctst = VG_(get_ThreadState)(ctid);
+
+   /* Stay sane. */
+   vg_assert(VG_(is_running_thread)(tid));
+   vg_assert(VG_(is_valid_tid)(ctid));
+
+   stack = ML_(allocstack)(ctid);
+   if (!stack) {
+      res = VG_(mk_SysRes_Error)(VKI_ENOMEM);
+      goto out;
+   }
+
+   /* First inherit parent's guest state */
+   ctst->arch.vex = ptst->arch.vex;
+   ctst->arch.vex_shadow1 = ptst->arch.vex_shadow1;
+   ctst->arch.vex_shadow2 = ptst->arch.vex_shadow2;
+
+   /* Set up some values. */
+   ctst->os_state.parent = tid;
+   ctst->os_state.threadgroup = ptst->os_state.threadgroup;
+   ctst->sig_mask = ptst->sig_mask;
+   ctst->tmp_sig_mask = ptst->sig_mask;
+
+   /* No stack definition should be currently present.  The stack will be set
+      later by libc by a setustack() call (the getsetcontext syscall). */
+   ctst->client_stack_highest_byte = 0;
+   ctst->client_stack_szB = 0;
+   vg_assert(ctst->os_state.stk_id == (UWord)(-1));
+
+   /* Inform a tool that a new thread is created.  This has to be done before
+      any other core->tool event is sent. */
+   vg_assert(VG_(owns_BigLock_LL)(tid));
+   VG_TRACK(pre_thread_ll_create, tid, ctid);
+   tool_informed = True;
+
+#if defined(VGP_x86_solaris)
+   /* Set up GDT (this has to be done before calling
+      VG_(restore_context)(). */
+   ML_(setup_gdt)(&ctst->arch.vex);
+#elif defined(VGP_amd64_solaris)
+   /* Nothing to do. */
+#else
+#  error "Unknown platform"
+#endif
+
+   /* Now set up the new thread according to ucontext_t. */
+   VG_(restore_context)(ctid, (vki_ucontext_t*)ARG1, Vg_CoreSysCall,
+                        True/*esp_is_thrptr*/);
+
+   /* Set up V thread (this also tells the kernel to block all signals in the
+      thread). */
+   ML_(setup_start_thread_context)(ctid, &uc);
+
+   /* Actually create the new thread. */
+   res = VG_(do_syscall3)(__NR_lwp_create, (UWord)&uc, ARG2, ARG3);
+
+   if (!sr_isError(res)) {
+      if (ARG3 != 0)
+         POST_MEM_WRITE(ARG3, sizeof(vki_id_t));
+      if (ARG2 & VKI_LWP_DAEMON)
+         ctst->os_state.daemon_thread = True;
+   }
+
+out:
+   if (sr_isError(res)) {
+      if (tool_informed) {
+         /* Tell a tool the thread exited in a hurry. */
+         VG_TRACK(pre_thread_ll_exit, ctid);
+      }
+
+      /* lwp_create failed. */
+      VG_(cleanup_thread)(&ctst->arch);
+      ctst->status = VgTs_Empty;
+   }
+
+   SET_STATUS_from_SysRes(res);
+}
+
+PRE(sys_lwp_exit)
+{
+   /* void syslwp_exit(); */
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   PRINT("sys_lwp_exit ( )");
+   PRE_REG_READ0(long, "lwp_exit");
+
+   /* Set the thread's status to be exiting, then claim that the syscall
+      succeeded. */
+   tst->exitreason = VgSrc_ExitThread;
+   tst->os_state.exitcode = 0;
+   SET_STATUS_Success(0);
+}
+
+PRE(sys_lwp_suspend)
+{
+   /* int lwp_suspend(id_t lwpid); */
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   PRINT("sys_lwp_suspend ( %ld )", SARG1);
+   PRE_REG_READ1(long, "lwp_suspend", vki_id_t, lwpid);
+
+   if (ARG1 == tst->os_state.lwpid) {
+      /* Set the SfMayBlock flag only if the currently running thread should
+         be suspended. If this flag was used also when suspending other
+         threads then it could happen that a thread holding the_BigLock would
+         be suspended and Valgrind would hang. */
+      *flags |= SfMayBlock;
+   }
+}
+
+PRE(sys_lwp_continue)
+{
+   /* int lwp_continue(id_t target_lwp); */
+   PRINT("sys_lwp_continue ( %ld )", SARG1);
+   PRE_REG_READ1(long, "lwp_continue", vki_id_t, target_lwp);
+}
+
+static void
+do_lwp_sigqueue(const HChar *syscall_name, UWord target_lwp, UWord signo,
+                SyscallStatus *status, UWord *flags)
+{
+   if (!ML_(client_signal_OK)(signo)) {
+      SET_STATUS_Failure(VKI_EINVAL);
+      return;
+   }
+
+   /* Check to see if this gave us a pending signal. */
+   *flags |= SfPollAfter;
+
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg, "%s: sending signal %lu to thread %lu\n",
+                   syscall_name, signo, target_lwp);
+
+   /* If we're sending SIGKILL, check to see if the target is one of our
+      threads and handle it specially. */
+   if (signo == VKI_SIGKILL && ML_(do_sigkill)(target_lwp, -1)) {
+      SET_STATUS_Success(0);
+      return;
+   }
+
+   /* Ask to handle this syscall via the slow route, since that's the only one
+      that sets tst->status to VgTs_WaitSys.  If the result of doing the
+      syscall is an immediate run of async_signalhandler() in m_signals.c,
+      then we need the thread to be properly tidied away. */
+   *flags |= SfMayBlock;
+}
+
+#if defined(SOLARIS_LWP_SIGQUEUE_SYSCALL)
+#if defined(SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID)
+PRE(sys_lwp_sigqueue)
+{
+   /* int lwp_sigqueue(pid_t target_pid, id_t target_lwp, int signal,
+                       void *value, int si_code, timespec_t *timeout);
+    */
+   PRINT("sys_lwp_sigqueue ( %ld, %ld, %ld, %#lx, %ld, %#lx )",
+         SARG1, SARG2, SARG3, ARG4, SARG5, ARG6);
+   PRE_REG_READ6(long, "lwp_sigqueue", vki_pid_t, target_pid,
+                 vki_id_t, target_lwp, int, signal, void *, value, int, si_code,
+                 vki_timespec_t *, timeout);
+
+   if (ARG6)
+      PRE_MEM_READ("lwp_sigqueue(timeout)", ARG6, sizeof(vki_timespec_t));
+
+   if ((ARG1 == 0) || (ARG1 == VG_(getpid)())) {
+      do_lwp_sigqueue("lwp_sigqueue", ARG2, ARG3, status, flags);
+   } else {
+      /* Signal is sent to a different process. */
+      if (VG_(clo_trace_signals))
+         VG_(message)(Vg_DebugMsg, "lwp_sigqueue: sending signal %ld to "
+                      "process %ld, thread %ld\n", SARG3, SARG1, SARG2);
+     *flags |= SfMayBlock;
+   }
+}
+
+POST(sys_lwp_sigqueue)
+{
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg, "lwp_sigqueue: sent signal %ld to process %ld, "
+                   "thread %ld\n", SARG3, SARG1, SARG2);
+}
+
+#else
+
+PRE(sys_lwp_sigqueue)
+{
+   /* int lwp_sigqueue(id_t target_lwp, int signal, void *value,
+                       int si_code, timespec_t *timeout);
+    */
+   PRINT("sys_lwp_sigqueue ( %ld, %ld, %#lx, %ld, %#lx )",
+         SARG1, SARG2, ARG3, SARG4, ARG5);
+   PRE_REG_READ5(long, "lwp_sigqueue", vki_id_t, target_lwp, int, signal,
+                 void *, value, int, si_code, vki_timespec_t *, timeout);
+
+   if (ARG5)
+      PRE_MEM_READ("lwp_sigqueue(timeout)", ARG5, sizeof(vki_timespec_t));
+
+   do_lwp_sigqueue("lwp_sigqueue", ARG1, ARG2, status, flags);
+}
+
+POST(sys_lwp_sigqueue)
+{
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg, "lwp_sigqueue: sent signal %lu to thread %lu\n",
+                   ARG2, ARG1);
+}
+
+
+#endif /* SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID */
+
+#else
+
+PRE(sys_lwp_kill)
+{
+   /* int lwp_kill(id_t target_lwp, int signal); */
+   PRINT("sys_lwp_kill ( %ld, %ld )", SARG1, SARG2);
+   PRE_REG_READ2(long, "lwp_kill", vki_id_t, target_lwp, int, signal);
+
+   do_lwp_sigqueue("lwp_kill", ARG1, ARG2, status, flags);
+}
+
+POST(sys_lwp_kill)
+{
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg, "lwp_kill: sent signal %lu to thread %lu\n",
+                   ARG2, ARG1);
+}
+#endif /* SOLARIS_LWP_SIGQUEUE_SYSCALL */
+
+PRE(sys_lwp_self)
+{
+   /* id_t lwp_self(void); */
+   PRINT("sys_lwp_self ( )");
+   PRE_REG_READ0(long, "lwp_self");
+}
+
+PRE(sys_lwp_sigmask)
+{
+   /* int64_t lwp_sigmask(int how, uint_t bits0, uint_t bits1, uint_t bits2,
+                          uint_t bits3); */
+   vki_sigset_t sigset;
+   PRINT("sys_lwp_sigmask ( %ld, %#lx, %#lx, %#lx, %#lx )", SARG1, ARG2, ARG3,
+         ARG4, ARG5);
+   PRE_REG_READ5(long, "lwp_sigmask", int, how, vki_uint_t, bits0,
+                 vki_uint_t, bits1, vki_uint_t, bits2, vki_uint_t, bits3);
+
+   sigset.__sigbits[0] = ARG2;
+   sigset.__sigbits[1] = ARG3;
+   sigset.__sigbits[2] = ARG4;
+   sigset.__sigbits[3] = ARG5;
+
+   SET_STATUS_from_SysRes(
+      VG_(do_sys_sigprocmask)(tid, ARG1 /*how*/, &sigset, NULL)
+   );
+
+   if (SUCCESS)
+      *flags |= SfPollAfter;
+}
+
+PRE(sys_lwp_private)
+{
+   /* int lwp_private(int cmd, int which, uintptr_t base); */
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   Int supported_base, supported_sel;
+   PRINT("sys_lwp_private ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+   PRE_REG_READ3(long, "lwp_private", int, cmd, int, which,
+                 uintptr_t, base);
+
+   /* Note: Only the %gs base is currently supported on x86 and the %fs base
+      on amd64.  Support for the %fs base on x86 and for the %gs base on amd64
+      should be added.  Anything else is probably a client program error. */
+#if defined(VGP_x86_solaris)
+   supported_base = VKI_LWP_GSBASE;
+   supported_sel = VKI_LWPGS_SEL;
+#elif defined(VGP_amd64_solaris)
+   supported_base = VKI_LWP_FSBASE;
+   supported_sel = 0;
+#else
+#error "Unknown platform"
+#endif
+   if (ARG2 != supported_base) {
+      VG_(unimplemented)("Syswrap of the lwp_private call where which=%ld.",
+                         SARG2);
+      /*NOTREACHED*/
+   }
+
+   switch (ARG1 /*cmd*/) {
+   case VKI_LWP_SETPRIVATE:
+#if defined(VGP_x86_solaris)
+      tst->os_state.thrptr = ARG3;
+      ML_(update_gdt_lwpgs)(tid);
+#elif defined(VGP_amd64_solaris)
+      tst->arch.vex.guest_FS_CONST = ARG3;
+#else
+#error "Unknown platform"
+#endif
+      SET_STATUS_Success(supported_sel);
+      break;
+   case VKI_LWP_GETPRIVATE:
+      {
+         int thrptr;
+#if defined(VGP_x86_solaris)
+         thrptr = tst->os_state.thrptr;
+#elif defined(VGP_amd64_solaris)
+         thrptr = tst->arch.vex.guest_FS_CONST;
+#else
+#error "Unknown platform"
+#endif
+
+         if (thrptr == 0) {
+            SET_STATUS_Failure(VKI_EINVAL);
+            return;
+         }
+
+#if defined(VGP_x86_solaris)
+         if (tst->arch.vex.guest_GS != supported_sel) {
+            SET_STATUS_Failure(VKI_EINVAL);
+            return;
+         }
+#elif defined(VGP_amd64_solaris)
+         /* Valgrind on amd64 does not allow to change the gs register so
+            a check that guest_GS is equal to supported_sel is not needed
+            here. */
+#else
+#error "Unknown platform"
+#endif
+
+         PRE_MEM_WRITE("lwp_private(base)", ARG3, sizeof(Addr));
+         if (!ML_(safe_to_deref((void*)ARG3, sizeof(Addr)))) {
+            SET_STATUS_Failure(VKI_EFAULT);
+            return;
+         }
+         *(Addr*)ARG3 = thrptr;
+         POST_MEM_WRITE((Addr)ARG3, sizeof(Addr));
+         SET_STATUS_Success(0);
+         break;
+      }
+   default:
+      VG_(unimplemented)("Syswrap of the lwp_private call where cmd=%ld.",
+                         SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+PRE(sys_lwp_wait)
+{
+   /* int lwp_wait(id_t lwpid, id_t *departed); */
+   *flags |= SfMayBlock;
+   PRINT("sys_lwp_wait ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "lwp_wait", vki_id_t, lwpid, vki_id_t *, departed);
+   if (ARG2)
+      PRE_MEM_WRITE("lwp_wait(departed)", ARG2, sizeof(vki_id_t));
+}
+
+POST(sys_lwp_wait)
+{
+   POST_MEM_WRITE(ARG2, sizeof(vki_id_t));
+}
+
+PRE(sys_lwp_mutex_wakeup)
+{
+   /* int lwp_mutex_wakeup(lwp_mutex_t *lp, int release_all); */
+   *flags |= SfMayBlock;
+   PRINT("sys_lwp_mutex_wakeup ( %#lx, %ld )", ARG1, SARG2);
+   PRE_REG_READ2(long, "lwp_mutex_wakeup", vki_lwp_mutex_t *, lp,
+                 int, release_all);
+   vki_lwp_mutex_t *lp = (vki_lwp_mutex_t *) ARG1;
+   PRE_FIELD_READ("lwp_mutex_wakeup(lp->mutex_type)", lp->vki_mutex_type);
+   PRE_FIELD_WRITE("lwp_mutex_wakeup(lp->mutex_waiters)",
+                   lp->vki_mutex_waiters);
+}
+
+POST(sys_lwp_mutex_wakeup)
+{
+   vki_lwp_mutex_t *lp = (vki_lwp_mutex_t *) ARG1;
+   POST_FIELD_WRITE(lp->vki_mutex_waiters);
+}
+
+PRE(sys_lwp_cond_wait)
+{
+   /* int lwp_cond_wait(lwp_cond_t *cvp, lwp_mutex_t *mp, timespec_t *tsp,
+                        int check_park); */
+   *flags |= SfMayBlock;
+   PRINT("sys_lwp_cond_wait( %#lx, %#lx, %#lx, %ld )", ARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "lwp_cond_wait", vki_lwp_cond_t *, cvp,
+                 vki_lwp_mutex_t *, mp, vki_timespec_t *, tsp, int, check_part);
+
+   vki_lwp_cond_t *cvp = (vki_lwp_cond_t *) ARG1;
+   vki_lwp_mutex_t *mp = (vki_lwp_mutex_t *) ARG2;
+   PRE_FIELD_READ("lwp_cond_wait(cvp->type)", cvp->vki_cond_type);
+   PRE_FIELD_READ("lwp_cond_wait(cvp->waiters_kernel)",
+                  cvp->vki_cond_waiters_kernel);
+   PRE_FIELD_READ("lwp_cond_wait(mp->mutex_type)", mp->vki_mutex_type);
+   PRE_FIELD_WRITE("lwp_cond_wait(mp->mutex_waiters)", mp->vki_mutex_waiters);
+   if (ARG3 != 0)
+      PRE_MEM_READ("lwp_cond_wait(tsp)", ARG3, sizeof(vki_timespec_t));
+}
+
+POST(sys_lwp_cond_wait)
+{
+   vki_lwp_cond_t *cvp = (vki_lwp_cond_t *) ARG1;
+   vki_lwp_mutex_t *mp = (vki_lwp_mutex_t *) ARG2;
+   POST_FIELD_WRITE(cvp->vki_cond_waiters_kernel);
+   POST_FIELD_WRITE(mp->vki_mutex_waiters);
+   if (ARG3 != 0)
+      POST_MEM_WRITE(ARG3, sizeof(vki_timespec_t));
+}
+
+PRE(sys_lwp_cond_broadcast)
+{
+   /* int lwp_cond_broadcast(lwp_cond_t *cvp); */
+   *flags |= SfMayBlock;
+   PRINT("sys_lwp_cond_broadcast ( %#lx )", ARG1);
+   PRE_REG_READ1(long, "lwp_cond_broadcast", vki_lwp_cond_t *, cvp);
+
+   vki_lwp_cond_t *cvp = (vki_lwp_cond_t *) ARG1;
+   PRE_FIELD_READ("lwp_cond_broadcast(cvp->type)", cvp->vki_cond_type);
+   PRE_FIELD_READ("lwp_cond_broadcast(cvp->waiters_kernel)",
+                  cvp->vki_cond_waiters_kernel);
+   /*PRE_FIELD_WRITE("lwp_cond_broadcast(cvp->waiters_kernel)",
+                     cvp->vki_cond_waiters_kernel);*/
+}
+
+POST(sys_lwp_cond_broadcast)
+{
+   vki_lwp_cond_t *cvp = (vki_lwp_cond_t *) ARG1;
+   POST_FIELD_WRITE(cvp->vki_cond_waiters_kernel);
+}
+
+PRE(sys_pread)
+{
+   /* ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); */
+   *flags |= SfMayBlock;
+   PRINT("sys_pread ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "pread", int, fildes, void *, buf,
+                 vki_size_t, nbyte, vki_off_t, offset);
+   PRE_MEM_WRITE("pread(buf)", ARG2, ARG3);
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "pread", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_pread)
+{
+   POST_MEM_WRITE(ARG2, RES);
+}
+
+PRE(sys_pwrite)
+{
+   /* ssize_t pwrite(int fildes, const void *buf, size_t nbyte,
+                     off_t offset); */
+   *flags |= SfMayBlock;
+   PRINT("sys_pwrite ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "pwrite", int, fildes, const void *, buf,
+                 vki_size_t, nbyte, vki_off_t, offset);
+   PRE_MEM_READ("pwrite(buf)", ARG2, ARG3);
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "pwrite", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_getpagesizes)
+{
+   /* int getpagesizes(int legacy, size_t *buf, int nelem); */
+   PRINT("sys_getpagesizes ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+   PRE_REG_READ3(long, "getpagesizes", int, legacy, size_t *, buf,
+                 int, nelem);
+   if (ARG2)
+      PRE_MEM_WRITE("getpagesizes(buf)", ARG2, ARG3 * sizeof(vki_size_t));
+}
+
+POST(sys_getpagesizes)
+{
+   if (ARG2)
+      POST_MEM_WRITE(ARG2, RES * sizeof(vki_size_t));
+}
+
+PRE(sys_rusagesys)
+{
+   /* Kernel: int rusagesys(int code, void *arg1, void *arg2,
+                            void *arg3, void *arg4); */
+   switch (ARG1 /*code*/) {
+   case VKI__RUSAGESYS_GETRUSAGE:
+   case VKI__RUSAGESYS_GETRUSAGE_CHLD:
+   case VKI__RUSAGESYS_GETRUSAGE_LWP:
+      /* Libc: int getrusage(int who, struct rusage *r_usage); */
+      PRINT("sys_rusagesys ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("rusagesys", "getrusage"), int, code,
+                    struct vki_rusage *, r_usage);
+      PRE_MEM_WRITE("rusagesys(r_usage)", ARG2, sizeof(struct vki_rusage));
+      break;
+
+   case VKI__RUSAGESYS_GETVMUSAGE:
+      /* Libc: int getvmusage(uint_t flags, time_t age,
+                              vmusage_t *buf, size_t *nres); */
+      PRINT("sys_rusagesys ( %ld, %lu, %ld, %#lx, %#lx )",
+            SARG1, ARG2, SARG3, ARG4, ARG5);
+      PRE_REG_READ5(long, SC2("rusagesys", "getvmusage"), int, code,
+                    vki_uint_t, flags, vki_time_t, age,
+                    vki_vmusage_t *, buf, vki_size_t *, nres);
+      PRE_MEM_READ("rusagesys(nres)", ARG5, sizeof(vki_size_t));
+      /* PRE_MEM_WRITE("rusagesys(nres)", ARG5, sizeof(vki_size_t)); */
+
+      if (ML_(safe_to_deref)((void *) ARG5, sizeof(vki_size_t))) {
+         vki_size_t *nres = (vki_size_t *) ARG5;
+         PRE_MEM_WRITE("rusagesys(buf)", ARG4,
+                       *nres * sizeof(vki_vmusage_t));
+      }
+      *flags |= SfMayBlock;
+      break;
+
+   default:
+      VG_(unimplemented)("Syswrap of the rusagesys call with code %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_rusagesys)
+{
+   switch (ARG1 /*code*/) {
+   case VKI__RUSAGESYS_GETRUSAGE:
+   case VKI__RUSAGESYS_GETRUSAGE_CHLD:
+   case VKI__RUSAGESYS_GETRUSAGE_LWP:
+      POST_MEM_WRITE(ARG2, sizeof(struct vki_rusage));
+      break;
+   case VKI__RUSAGESYS_GETVMUSAGE:
+      {
+         vki_size_t *nres = (vki_size_t *) ARG5;
+         POST_MEM_WRITE(ARG5, sizeof(vki_size_t));
+         POST_MEM_WRITE(ARG4, *nres * sizeof(vki_vmusage_t));
+      }
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+
+}
+
+PRE(sys_port)
+{
+   /* Kernel: int64_t portfs(int opcode, uintptr_t a0, uintptr_t a1,
+                             uintptr_t a2, uintptr_t a3, uintptr_t a4); */
+   Int opcode = ARG1 & VKI_PORT_CODE_MASK;
+   *flags |= SfMayBlock;
+   switch (opcode) {
+   case VKI_PORT_CREATE:
+      PRINT("sys_port ( %ld )", SARG1);
+      PRE_REG_READ1(long, SC2("port", "create"), int, opcode);
+      break;
+   case VKI_PORT_ASSOCIATE:
+   case VKI_PORT_DISSOCIATE:
+      PRINT("sys_port ( %ld, %ld, %ld, %#lx, %ld, %#lx )", SARG1, SARG2, SARG3,
+            ARG4, SARG5, ARG6);
+      if (opcode == VKI_PORT_ASSOCIATE) {
+         PRE_REG_READ6(long, SC2("port", "associate"), int, opcode, int, a0,
+                       int, a1, uintptr_t, a2, int, a3, void *, a4);
+      }
+      else {
+         PRE_REG_READ6(long, SC2("port", "dissociate"), int, opcode, int, a0,
+                       int, a1, uintptr_t, a2, int, a3, void *, a4);
+      }
+
+      switch (ARG3 /*source*/) {
+      case VKI_PORT_SOURCE_FD:
+         if (!ML_(fd_allowed)(ARG4, "port", tid, False)) {
+            SET_STATUS_Failure(VKI_EBADF);
+         }
+         break;
+      case VKI_PORT_SOURCE_FILE:
+         {
+            struct vki_file_obj *fo = (struct vki_file_obj *)ARG4;
+            PRE_MEM_READ("port(file_obj)", ARG4, sizeof(struct vki_file_obj));
+            if (ML_(safe_to_deref)(&fo->fo_name, sizeof(fo->fo_name)))
+               PRE_MEM_RASCIIZ("port(file_obj->fo_name)", (Addr)fo->fo_name);
+         }
+         break;
+      default:
+         VG_(unimplemented)("Syswrap of the port_associate/dissociate call "
+                            "type %ld.", SARG3);
+         /*NOTREACHED*/
+         break;
+      }
+      break;
+   case VKI_PORT_SEND:
+      PRINT("sys_port ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+      PRE_REG_READ4(long, SC2("port", "send"), int, opcode, int, a0, int, a1,
+                    void *, a2);
+      break;
+   case VKI_PORT_SENDN:
+      PRINT("sys_port ( %ld, %#lx, %#lx, %lu, %lx, %#lx)", SARG1, ARG2, ARG3,
+            ARG4, ARG5, ARG6);
+      PRE_REG_READ6(long, SC2("port", "sendn"), int, opcode, int *, a0,
+                    int *, a1, vki_uint_t, a2, int, a3, void *, a4);
+      PRE_MEM_READ("port(ports)", ARG2, ARG4 * sizeof(int));
+      PRE_MEM_WRITE("port(errors)", ARG3, ARG4 * sizeof(int));
+      break;
+   case VKI_PORT_GET:
+      PRINT("sys_port ( %ld, %ld, %#lx, %ld, %ld, %#lx )", SARG1, SARG2, ARG3,
+            SARG4, SARG5, ARG6);
+      PRE_REG_READ6(long, SC2("port", "get"), int, opcode, int, a0,
+                    port_event_t *, a1, vki_time_t, a2, long, a3,
+                    timespec_t *, a4);
+      PRE_MEM_WRITE("port(uevp)", ARG3, sizeof(vki_port_event_t));
+      break;
+   case VKI_PORT_GETN:
+      PRINT("sys_port ( %ld, %ld, %#lx, %lu, %lu, %#lx )", SARG1, SARG2, ARG3,
+            ARG4, ARG5, ARG6);
+      PRE_REG_READ6(long, SC2("port", "getn"), int, opcode, int, a0,
+                    port_event_t *, a1, vki_uint_t, a2, vki_uint_t, a3,
+                    timespec_t *, a4);
+      if (ARG6)
+         PRE_MEM_READ("port(timeout)", ARG6, sizeof(vki_timespec_t));
+      PRE_MEM_WRITE("port(uevp)", ARG3, ARG4 * sizeof(vki_port_event_t));
+      break;
+   case VKI_PORT_ALERT:
+      PRINT("sys_port ( %ld, %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, SARG4,
+            ARG5);
+      PRE_REG_READ5(long, SC2("port", "alert"), int, opcode, int, a0, int, a1,
+                    int, a2, void *, a3);
+      break;
+   case VKI_PORT_DISPATCH:
+      // FIXME: check order: SARG2, SARG1  or   SARG1, SARG2  ??
+      PRINT("sys_port ( %ld, %ld, %ld, %ld, %#lx, %#lx )", SARG2, SARG1, SARG3,
+            SARG4, ARG5, ARG6);
+      PRE_REG_READ6(long, SC2("port", "dispatch"), int, opcode, int, a0,
+                    int, a1, int, a2, uintptr_t, a3, void *, a4);
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the port call with opcode %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+
+   /* Be strict. */
+   if ((opcode != VKI_PORT_CREATE && opcode != VKI_PORT_SENDN) &&
+       !ML_(fd_allowed)(ARG2, "port", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_port)
+{
+   Int opcode = ARG1 & VKI_PORT_CODE_MASK;
+   switch (opcode) {
+   case VKI_PORT_CREATE:
+      if (!ML_(fd_allowed)(RES, "port", tid, True)) {
+         VG_(close)(RES);
+         SET_STATUS_Failure(VKI_EMFILE);
+      }
+      else if (VG_(clo_track_fds))
+         ML_(record_fd_open_named)(tid, RES);
+      break;
+   case VKI_PORT_ASSOCIATE:
+   case VKI_PORT_DISSOCIATE:
+   case VKI_PORT_SEND:
+      break;
+   case VKI_PORT_SENDN:
+      if (RES != ARG4) {
+         /* If there is any error then the whole errors area is written. */
+         POST_MEM_WRITE(ARG3, ARG4 * sizeof(int));
+      }
+      break;
+   case VKI_PORT_GET:
+      POST_MEM_WRITE(ARG3, sizeof(vki_port_event_t));
+      break;
+   case VKI_PORT_GETN:
+      POST_MEM_WRITE(ARG3, RES * sizeof(vki_port_event_t));
+      break;
+   case VKI_PORT_ALERT:
+   case VKI_PORT_DISPATCH:
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the port call with opcode %lu.", ARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+PRE(sys_pollsys)
+{
+   /* int pollsys(pollfd_t *fds, nfds_t nfds, timespec_t *timeout,
+                  sigset_t *set); */
+   UWord i;
+   struct vki_pollfd *ufds = (struct vki_pollfd *)ARG1;
+
+   *flags |= SfMayBlock;
+
+   PRINT("sys_pollsys ( %#lx, %lu, %#lx, %#lx )", ARG1, ARG2, ARG3, ARG4);
+   PRE_REG_READ4(long, "poll", pollfd_t *, fds, vki_nfds_t, nfds,
+                 timespec_t *, timeout, sigset_t *, set);
+
+   for (i = 0; i < ARG2; i++) {
+      vki_pollfd_t *u = &ufds[i];
+      PRE_FIELD_READ("poll(ufds.fd)", u->fd);
+      /* XXX Check if it's valid? */
+      PRE_FIELD_READ("poll(ufds.events)", u->events);
+      PRE_FIELD_WRITE("poll(ufds.revents)", u->revents);
+   }
+
+   if (ARG3)
+      PRE_MEM_READ("poll(timeout)", ARG3, sizeof(vki_timespec_t));
+   if (ARG4)
+      PRE_MEM_READ("poll(set)", ARG4, sizeof(vki_sigset_t));
+}
+
+POST(sys_pollsys)
+{
+   if (RES >= 0) {
+      UWord i;
+      vki_pollfd_t *ufds = (vki_pollfd_t*)ARG1;
+      for (i = 0; i < ARG2; i++)
+         POST_FIELD_WRITE(ufds[i].revents);
+   }
+}
+
+PRE(sys_labelsys)
+{
+   /* Kernel: int labelsys(int op, void *a1, void *a2, void *a3,
+                           void *a4, void *a5); */
+
+   switch (ARG1 /*op*/) {
+   case VKI_TSOL_SYSLABELING:
+      /* Libc: int is_system_labeled(void); */
+      PRINT("sys_labelsys ( %ld )", SARG1);
+      PRE_REG_READ1(long, SC2("labelsys", "syslabeling"), int, op);
+      break;
+
+   case VKI_TSOL_TNRH:
+      /* Libtsnet: int tnrh(int cmd, tsol_rhent_t *buf); */
+      PRINT("sys_labelsys ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, SC2("labelsys", "tnrh"), int, op, int, cmd,
+                    vki_tsol_rhent_t *, buf);
+      if (ARG2 != VKI_TNDB_FLUSH)
+         PRE_MEM_READ("labelsys(buf)", ARG3, sizeof(vki_tsol_rhent_t));
+      break;
+
+   case VKI_TSOL_TNRHTP:
+      /* Libtsnet: int tnrhtp(int cmd, tsol_tpent_t *buf); */
+      PRINT("sys_labelsys ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, SC2("labelsys", "tnrhtp"), int, op, int, cmd,
+                    vki_tsol_tpent_t *, buf);
+      if (ARG2 != VKI_TNDB_FLUSH)
+         PRE_MEM_READ("labelsys(buf)", ARG3, sizeof(vki_tsol_tpent_t));
+      break;
+
+   case VKI_TSOL_TNMLP:
+      /* Libtsnet: int tnmlp(int cmd, tsol_mlpent_t *buf); */
+      PRINT("sys_labelsys ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, SC2("labelsys", "tnmlp"), int, op, int, cmd,
+                    vki_tsol_mlpent_t *, buf);
+      PRE_MEM_READ("labelsys(buf)", ARG3, sizeof(vki_tsol_mlpent_t));
+      break;
+
+   case VKI_TSOL_GETLABEL:
+      /* Libtsol: int getlabel(const char *path, bslabel_t *label); */
+      PRINT("sys_labelsys ( %ld, %#lx(%s), %#lx )",
+            SARG1, ARG2, (HChar *) ARG2, ARG3);
+      PRE_REG_READ3(long, SC2("labelsys", "getlabel"), int, op,
+                    const char *, path, vki_bslabel_t *, label);
+      PRE_MEM_RASCIIZ("labelsys(path)", ARG2);
+      PRE_MEM_WRITE("labelsys(label)", ARG3, sizeof(vki_bslabel_t));
+      break;
+
+   case VKI_TSOL_FGETLABEL:
+      /* Libtsol: int fgetlabel(int fd, bslabel_t *label); */
+      PRINT("sys_labelsys ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, SC2("labelsys", "fgetlabel"), int, op,
+                    int, fd, vki_bslabel_t *, label);
+      /* Be strict. */
+      if (!ML_(fd_allowed)(ARG2, "labelsys(fgetlabel)", tid, False))
+         SET_STATUS_Failure(VKI_EBADF);
+      PRE_MEM_WRITE("labelsys(label)", ARG3, sizeof(vki_bslabel_t));
+      break;
+
+#if defined(SOLARIS_TSOL_CLEARANCE)
+   case VKI_TSOL_GETCLEARANCE:
+      /* Libtsol: int getclearance(bslabel_t *clearance); */
+      PRINT("sys_labelsys ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("labelsys", "getclearance"), int, op,
+                    vki_bslabel_t *, clearance);
+      PRE_MEM_WRITE("labelsys(clearance)", ARG2, sizeof(vki_bslabel_t));
+      break;
+
+   case VKI_TSOL_SETCLEARANCE:
+      /* Libtsol: int setclearance(bslabel_t *clearance); */
+      PRINT("sys_labelsys ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("labelsys", "setclearance"), int, op,
+                    vki_bslabel_t *, clearance);
+      PRE_MEM_READ("labelsys(clearance)", ARG2, sizeof(vki_bslabel_t));
+      break;
+#endif /* SOLARIS_TSOL_CLEARANCE */
+
+   default:
+      VG_(unimplemented)("Syswrap of the labelsys call with op %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_labelsys)
+{
+   switch (ARG1 /*op*/) {
+   case VKI_TSOL_SYSLABELING:
+      break;
+
+   case VKI_TSOL_TNRH:
+      switch (ARG2 /*cmd*/) {
+      case VKI_TNDB_LOAD:
+      case VKI_TNDB_DELETE:
+      case VKI_TNDB_FLUSH:
+         break;
+#if defined(SOLARIS_TNDB_GET_TNIP)
+      case TNDB_GET_TNIP:
+#endif /* SOLARIS_TNDB_GET_TNIP */
+      case VKI_TNDB_GET:
+         POST_MEM_WRITE(ARG3, sizeof(vki_tsol_rhent_t));
+         break;
+      default:
+         vg_assert(0);
+         break;
+      }
+      break;
+
+   case VKI_TSOL_TNRHTP:
+      switch (ARG2 /*cmd*/) {
+      case VKI_TNDB_LOAD:
+      case VKI_TNDB_DELETE:
+      case VKI_TNDB_FLUSH:
+         break;
+      case VKI_TNDB_GET:
+         POST_MEM_WRITE(ARG3, sizeof(vki_tsol_tpent_t));
+         break;
+      default:
+         vg_assert(0);
+         break;
+      }
+      break;
+
+   case VKI_TSOL_TNMLP:
+      switch (ARG2 /*cmd*/) {
+      case VKI_TNDB_LOAD:
+      case VKI_TNDB_DELETE:
+      case VKI_TNDB_FLUSH:
+         break;
+      case VKI_TNDB_GET:
+         POST_MEM_WRITE(ARG3, sizeof(vki_tsol_mlpent_t));
+         break;
+      default:
+         vg_assert(0);
+         break;
+      }
+      break;
+
+   case VKI_TSOL_GETLABEL:
+   case VKI_TSOL_FGETLABEL:
+      POST_MEM_WRITE(ARG3, sizeof(vki_bslabel_t));
+      break;
+
+#if defined(SOLARIS_TSOL_CLEARANCE)
+   case VKI_TSOL_GETCLEARANCE:
+      POST_MEM_WRITE(ARG2, sizeof(vki_bslabel_t));
+      break;
+
+   case VKI_TSOL_SETCLEARANCE:
+      break;
+#endif /* SOLARIS_TSOL_CLEARANCE */
+
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_acl)
+{
+   /* int acl(char *pathp, int cmd, int nentries, void *aclbufp); */
+   PRINT("sys_acl ( %#lx(%s), %ld, %ld, %#lx )", ARG1, (HChar *) ARG1, SARG2,
+         SARG3, ARG4);
+
+   PRE_REG_READ4(long, "acl", char *, pathp, int, cmd,
+                 int, nentries, void *, aclbufp);
+   PRE_MEM_RASCIIZ("acl(pathp)", ARG1);
+
+   switch (ARG2 /*cmd*/) {
+   case VKI_SETACL:
+      if (ARG4)
+         PRE_MEM_READ("acl(aclbufp)", ARG4, ARG3 * sizeof(vki_aclent_t));
+      break;
+   case VKI_GETACL:
+      PRE_MEM_WRITE("acl(aclbufp)", ARG4, ARG3 * sizeof(vki_aclent_t));
+      break;
+   case VKI_GETACLCNT:
+      break;
+   case VKI_ACE_SETACL:
+      if (ARG4)
+         PRE_MEM_READ("acl(aclbufp)", ARG4, ARG3 * sizeof(vki_ace_t));
+      break;
+   case VKI_ACE_GETACL:
+      PRE_MEM_WRITE("acl(aclbufp)", ARG4, ARG3 * sizeof(vki_ace_t));
+      break;
+   case VKI_ACE_GETACLCNT:
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the acl call with cmd %ld.", SARG2);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_acl)
+{
+   switch (ARG2 /*cmd*/) {
+   case VKI_SETACL:
+      break;
+   case VKI_GETACL:
+      POST_MEM_WRITE(ARG4, ARG3 * sizeof(vki_aclent_t));
+      break;
+   case VKI_GETACLCNT:
+      break;
+   case VKI_ACE_SETACL:
+      break;
+   case VKI_ACE_GETACL:
+      POST_MEM_WRITE(ARG4, ARG3 * sizeof(vki_ace_t));
+      break;
+   case VKI_ACE_GETACLCNT:
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_auditsys)
+{
+   /* Kernel: int auditsys(long code, long a1, long a2, long a3, long a4); */
+   switch (ARG1 /*code*/) {
+   case VKI_BSM_GETAUID:
+      /* Libbsm: int getauid(au_id_t *auid); */
+      PRINT("sys_auditsys ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("auditsys", "getauid"), long, code,
+                    vki_au_id_t *, auid);
+      PRE_MEM_WRITE("auditsys(auid)", ARG2, sizeof(vki_au_id_t));
+      break;
+   case VKI_BSM_SETAUID:
+      /* Libbsm: int setauid(au_id_t *auid); */
+      PRINT("sys_auditsys ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("auditsys", "setauid"), long, code,
+                    vki_au_id_t *, auid);
+      PRE_MEM_READ("auditsys(auid)", ARG2, sizeof(vki_au_id_t));
+      break;
+   case VKI_BSM_GETAUDIT:
+      /* Libbsm: int getaudit(auditinfo_t *ai); */
+      PRINT("sys_auditsys ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("auditsys", "getaudit"), long, code,
+                    vki_auditinfo_t *, ai);
+      PRE_MEM_WRITE("auditsys(ai)", ARG2, sizeof(vki_auditinfo_t));
+      break;
+   case VKI_BSM_SETAUDIT:
+      /* Libbsm: int setaudit(auditinfo_t *ai); */
+      PRINT("sys_auditsys ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("auditsys", "setaudit"), long, code,
+                    vki_auditinfo_t *, ai);
+      PRE_MEM_READ("auditsys(ai)", ARG2, sizeof(vki_auditinfo_t));
+      break;
+   case VKI_BSM_AUDIT:
+      /* Libbsm: int audit(void *record, int length); */
+      PRINT("sys_auditsys ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+      PRE_REG_READ3(long, SC2("auditsys", "audit"), long, code,
+                    void *, record, int, length);
+      PRE_MEM_READ("auditsys(record)", ARG2, ARG3);
+      break;
+   case VKI_BSM_AUDITCTL:
+      /* Libbsm: int auditon(int cmd, caddr_t data, int length); */
+      PRINT("sys_auditsys ( %ld, %ld, %#lx, %ld )",
+            SARG1, SARG2, ARG3, SARG4);
+
+      switch (ARG2 /*cmd*/) {
+      case VKI_A_GETPOLICY:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "getpolicy"),
+                       long, code, int, cmd, vki_uint32_t *, policy);
+         PRE_MEM_WRITE("auditsys(policy)", ARG3, sizeof(vki_uint32_t));
+         break;
+      case VKI_A_SETPOLICY:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setpolicy"),
+                       long, code, int, cmd, vki_uint32_t *, policy);
+         PRE_MEM_READ("auditsys(policy)", ARG3, sizeof(vki_uint32_t));
+         break;
+      case VKI_A_GETKMASK:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "getkmask"),
+                       long, code, int, cmd, vki_au_mask_t *, kmask);
+         PRE_MEM_WRITE("auditsys(kmask)", ARG3, sizeof(vki_au_mask_t));
+         break;
+      case VKI_A_SETKMASK:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setkmask"),
+                       long, code, int, cmd, vki_au_mask_t *, kmask);
+         PRE_MEM_READ("auditsys(kmask)", ARG3, sizeof(vki_au_mask_t));
+         break;
+      case VKI_A_GETQCTRL:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "getqctrl"),
+                       long, code, int, cmd,
+                       struct vki_au_qctrl *, qctrl);
+         PRE_MEM_WRITE("auditsys(qctrl)", ARG3,
+                       sizeof(struct vki_au_qctrl));
+         break;
+      case VKI_A_SETQCTRL:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setqctrl"),
+                       long, code, int, cmd,
+                       struct vki_au_qctrl *, qctrl);
+         PRE_MEM_READ("auditsys(qctrl)", ARG3,
+                      sizeof(struct vki_au_qctrl));
+         break;
+      case VKI_A_GETCWD:
+         PRE_REG_READ4(long, SC3("auditsys", "auditctl", "getcwd"),
+                       long, code, int, cmd, char *, data, int, length);
+         PRE_MEM_WRITE("auditsys(data)", ARG3, ARG4);
+         break;
+      case VKI_A_GETCAR:
+         PRE_REG_READ4(long, SC3("auditsys", "auditctl", "getcar"),
+                       long, code, int, cmd, char *, data, int, length);
+         PRE_MEM_WRITE("auditsys(data)", ARG3, ARG4);
+         break;
+      case VKI_A_GETSTAT:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "getstat"),
+                       long, code, int, cmd, vki_au_stat_t *, stats);
+         PRE_MEM_WRITE("auditsys(stats)", ARG3, sizeof(vki_au_stat_t));
+         break;
+      case VKI_A_SETSTAT:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setstat"),
+                       long, code, int, cmd, vki_au_stat_t *, stats);
+         PRE_MEM_READ("auditsys(stats)", ARG3, sizeof(vki_au_stat_t));
+         break;
+      case VKI_A_SETUMASK:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setumask"),
+                       long, code, int, cmd, vki_auditinfo_t *, umask);
+         PRE_MEM_READ("auditsys(umask)", ARG3, sizeof(vki_auditinfo_t));
+         break;
+      case VKI_A_SETSMASK:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setsmask"),
+                       long, code, int, cmd, vki_auditinfo_t *, smask);
+         PRE_MEM_READ("auditsys(smask)", ARG3, sizeof(vki_auditinfo_t));
+         break;
+      case VKI_A_GETCOND:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "getcond"),
+                       long, code, int, cmd, int *, cond);
+         PRE_MEM_WRITE("auditsys(cond)", ARG3, sizeof(int));
+         break;
+      case VKI_A_SETCOND:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setcond"),
+                       long, code, int, cmd, int *, state);
+         PRE_MEM_READ("auditsys(cond)", ARG3, sizeof(int));
+         break;
+      case VKI_A_GETCLASS:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "getclass"),
+                       long, code, int, cmd,
+                       vki_au_evclass_map_t *, classmap);
+
+         if (ML_(safe_to_deref((void *) ARG3,
+                               sizeof(vki_au_evclass_map_t)))) {
+            vki_au_evclass_map_t *classmap =
+               (vki_au_evclass_map_t *) ARG3;
+            PRE_FIELD_READ("auditsys(classmap.ec_number)",
+                           classmap->ec_number);
+            PRE_MEM_WRITE("auditsys(classmap)", ARG3,
+                          sizeof(vki_au_evclass_map_t));
+         }
+         break;
+      case VKI_A_SETCLASS:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setclass"),
+                       long, code, int, cmd,
+                       vki_au_evclass_map_t *, classmap);
+
+         if (ML_(safe_to_deref((void *) ARG3, 
+                               sizeof(vki_au_evclass_map_t)))) {
+            vki_au_evclass_map_t *classmap =
+               (vki_au_evclass_map_t *) ARG3;
+            PRE_FIELD_READ("auditsys(classmap.ec_number)", 
+                           classmap->ec_number);  
+            PRE_FIELD_READ("auditsys(classmap.ec_class)", 
+                           classmap->ec_class);
+         }
+         break;
+      case VKI_A_GETPINFO:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "getpinfo"),
+                       long, code, int, cmd,
+                       struct vki_auditpinfo *, apinfo);
+
+         if (ML_(safe_to_deref((void *) ARG3,
+                               sizeof(struct vki_auditpinfo)))) {
+            struct vki_auditpinfo *apinfo =
+               (struct vki_auditpinfo *) ARG3;
+            PRE_FIELD_READ("auditsys(apinfo.ap_pid)", apinfo->ap_pid);
+            PRE_MEM_WRITE("auditsys(apinfo)", ARG3,
+                          sizeof(struct vki_auditpinfo));
+         }
+         break;
+      case VKI_A_SETPMASK:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setpmask"),
+                       long, code, int, cmd,
+                       struct vki_auditpinfo *, apinfo);
+         PRE_MEM_WRITE("auditsys(apinfo)", ARG3,
+                       sizeof(struct vki_auditpinfo));
+         break;
+      case VKI_A_GETPINFO_ADDR:
+         PRE_REG_READ4(long, SC3("auditsys", "auditctl", "getpinfo_addr"),
+                       long, code, int, cmd,
+                       struct vki_auditpinfo_addr *, apinfo, int, length);
+
+         if (ML_(safe_to_deref((void *) ARG3,
+                               sizeof(struct vki_auditpinfo_addr)))) {
+            struct vki_auditpinfo_addr *apinfo_addr =
+               (struct vki_auditpinfo_addr *) ARG3;
+            PRE_FIELD_READ("auditsys(apinfo_addr.ap_pid)",
+                           apinfo_addr->ap_pid);
+            PRE_MEM_WRITE("auditsys(apinfo_addr)", ARG3, ARG4);
+         }
+         break;
+      case VKI_A_GETKAUDIT:
+         PRE_REG_READ4(long, SC3("auditsys", "auditctl", "getkaudit"),
+                       long, code, int, cmd,
+                       vki_auditinfo_addr_t *, kaudit, int, length);
+         PRE_MEM_WRITE("auditsys(kaudit)", ARG3, ARG4);
+         break;
+      case VKI_A_SETKAUDIT:
+         PRE_REG_READ4(long, SC3("auditsys", "auditctl", "setkaudit"),
+                       long, code, int, cmd,
+                       vki_auditinfo_addr_t *, kaudit, int, length);
+         PRE_MEM_READ("auditsys(kaudit)", ARG3, ARG4);
+         break;
+      case VKI_A_GETAMASK:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "getamask"),
+                       long, code, int, cmd, vki_au_mask_t *, amask);
+         PRE_MEM_WRITE("auditsys(amask)", ARG3, sizeof(vki_au_mask_t));
+         break;
+      case VKI_A_SETAMASK:
+         PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setamask"),
+                       long, code, int, cmd, vki_au_mask_t *, amask);
+         PRE_MEM_READ("auditsys(amask)", ARG3, sizeof(vki_au_mask_t));
+         break;
+      default:
+         VG_(unimplemented)("Syswrap of the auditsys(auditctl) call "
+                            "with cmd %lu.", ARG2);
+         /*NOTREACHED*/
+         break;
+      }
+      break;
+   case VKI_BSM_GETAUDIT_ADDR:
+      /* Libbsm: int getaudit_addr(auditinfo_addr_t *ai, int len); */
+      PRINT("sys_auditsys ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+      PRE_REG_READ3(long, SC2("auditsys", "getaudit_addr"), long, code,
+                    vki_auditinfo_addr_t *, ai, int, len);
+      PRE_MEM_WRITE("auditsys(ai)", ARG2, ARG3);
+      break;
+   case VKI_BSM_SETAUDIT_ADDR:
+      /* Libbsm: int setaudit_addr(auditinfo_addr_t *ai, int len); */
+      PRINT("sys_auditsys ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+      PRE_REG_READ3(long, SC2("auditsys", "setaudit_addr"), long, code,
+                    vki_auditinfo_addr_t *, ai, int, len);
+      PRE_MEM_READ("auditsys(ai)", ARG2, ARG3);
+      break;
+   case VKI_BSM_AUDITDOOR:
+      /* Libbsm: int auditdoor(int fd); */
+      PRINT("sys_auditsys ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("auditsys", "door"), long, code, int, fd);
+
+      /* Be strict. */
+      if (!ML_(fd_allowed)(ARG2, SC2("auditsys", "door")"(fd)",
+                           tid, False))
+         SET_STATUS_Failure(VKI_EBADF);
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the auditsys call with code %lu.", ARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_auditsys)
+{
+   switch (ARG1 /*code*/) {
+   case VKI_BSM_GETAUID:
+      POST_MEM_WRITE(ARG2, sizeof(vki_au_id_t));
+      break;
+   case VKI_BSM_SETAUID:
+      break;
+   case VKI_BSM_GETAUDIT:
+      POST_MEM_WRITE(ARG2, sizeof(vki_auditinfo_t));
+      break;
+   case VKI_BSM_SETAUDIT:
+   case VKI_BSM_AUDIT:
+      break;
+   case VKI_BSM_AUDITCTL:
+      switch (ARG2 /*cmd*/) {
+         case VKI_A_GETPOLICY:
+            POST_MEM_WRITE(ARG3, sizeof(vki_uint32_t));
+            break;
+         case VKI_A_SETPOLICY:
+            break;
+         case VKI_A_GETKMASK:
+            POST_MEM_WRITE(ARG3, sizeof(vki_au_mask_t));
+            break;
+         case VKI_A_SETKMASK:
+            break;
+         case VKI_A_GETQCTRL:
+            POST_MEM_WRITE(ARG3, sizeof(struct vki_au_qctrl));
+            break;
+         case VKI_A_SETQCTRL:
+            break;
+         case VKI_A_GETCWD:
+         case VKI_A_GETCAR:
+            POST_MEM_WRITE(ARG3, VG_(strlen)((HChar *) ARG3) + 1);
+            break;
+         case VKI_A_GETSTAT:
+            POST_MEM_WRITE(ARG3, sizeof(vki_au_stat_t));
+            break;
+         case VKI_A_SETSTAT:
+         case VKI_A_SETUMASK:
+         case VKI_A_SETSMASK:
+            break;
+         case VKI_A_GETCOND:
+            POST_MEM_WRITE(ARG3, sizeof(int));
+            break;
+         case VKI_A_SETCOND:
+            break;
+         case VKI_A_GETCLASS:
+            POST_MEM_WRITE(ARG3, sizeof(vki_au_evclass_map_t));
+            break;
+         case VKI_A_SETCLASS:
+            break;
+         case VKI_A_GETPINFO:
+            POST_MEM_WRITE(ARG3, sizeof(struct vki_auditpinfo));
+            break;
+         case VKI_A_SETPMASK:
+            break;
+         case VKI_A_GETPINFO_ADDR:
+            POST_MEM_WRITE(ARG3, sizeof(struct auditpinfo_addr));
+            break;
+         case VKI_A_GETKAUDIT:
+            POST_MEM_WRITE(ARG3, sizeof(vki_auditinfo_addr_t));
+            break;
+         case VKI_A_SETKAUDIT:
+            break;
+         case VKI_A_GETAMASK:
+            POST_MEM_WRITE(ARG3, sizeof(vki_au_mask_t));
+            break;
+         case VKI_A_SETAMASK:
+            break;
+      }
+      break;
+   case VKI_BSM_GETAUDIT_ADDR:
+      POST_MEM_WRITE(ARG2, sizeof(vki_auditinfo_addr_t));
+      break;
+   case VKI_BSM_SETAUDIT_ADDR:
+      break;
+   case VKI_BSM_AUDITDOOR:
+      break;
+   }
+}
+
+PRE(sys_p_online)
+{
+   /* int p_online(processorid_t processorid, int flag); */
+   PRINT("sys_p_online ( %ld, %ld )", SARG1, SARG2);
+   PRE_REG_READ2(long, "p_online", vki_processorid_t, processorid, int, flag);
+}
+
+PRE(sys_sigqueue)
+{
+   /* int sigqueue(pid_t pid, int signo, void *value,
+                   int si_code, timespec_t *timeout);
+    */
+   PRINT("sys_sigqueue ( %ld, %ld, %#lx, %ld, %#lx )",
+         SARG1, SARG2, ARG3, SARG4, ARG5);
+   PRE_REG_READ5(long, "sigqueue", vki_pid_t, pid, int, signo,
+                 void *, value, int, si_code,
+                 vki_timespec_t *, timeout);
+
+   if (ARG5)
+      PRE_MEM_READ("sigqueue(timeout)", ARG5, sizeof(vki_timespec_t));
+
+   if (!ML_(client_signal_OK)(ARG2)) {
+      SET_STATUS_Failure(VKI_EINVAL);
+      return;
+   }
+
+   /* If we're sending SIGKILL, check to see if the target is one of
+      our threads and handle it specially. */
+   if (ARG2 == VKI_SIGKILL && ML_(do_sigkill)(ARG1, -1)) {
+      SET_STATUS_Success(0);
+   } else {
+      SysRes res = VG_(do_syscall5)(SYSNO, ARG1, ARG2, ARG3, ARG4,
+                                    ARG5);
+      SET_STATUS_from_SysRes(res);
+   }
+
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg,
+                   "sigqueue: signal %lu queued for pid %lu\n",
+                   ARG2, ARG1);
+
+   /* Check to see if this gave us a pending signal. */
+   *flags |= SfPollAfter;
+}
+
+PRE(sys_clock_gettime)
+{
+   /* int clock_gettime(clockid_t clock_id, struct timespec *tp); */
+   PRINT("sys_clock_gettime ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "clock_gettime", vki_clockid_t, clock_id,
+                 struct timespec *, tp);
+   PRE_MEM_WRITE("clock_gettime(tp)", ARG2, sizeof(struct vki_timespec));
+}
+
+POST(sys_clock_gettime)
+{
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_timespec));
+}
+
+PRE(sys_clock_settime)
+{
+   /* int clock_settime(clockid_t clock_id, const struct timespec *tp); */
+   PRINT("sys_clock_settime ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "clock_settime", vki_clockid_t, clock_id,
+                 const struct timespec *, tp);
+   PRE_MEM_READ("clock_settime(tp)", ARG2, sizeof(struct vki_timespec));
+}
+
+PRE(sys_clock_getres)
+{
+   /* int clock_getres(clockid_t clock_id, struct timespec *res); */
+   PRINT("sys_clock_getres ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "clock_getres", vki_clockid_t, clock_id,
+                 struct timespec *, res);
+
+   if (ARG2)
+      PRE_MEM_WRITE("clock_getres(res)", ARG2, sizeof(struct vki_timespec));
+}
+
+POST(sys_clock_getres)
+{
+   if (ARG2)
+      POST_MEM_WRITE(ARG2, sizeof(struct vki_timespec));
+}
+
+PRE(sys_timer_create)
+{
+   /* int timer_create(clockid_t clock_id,
+                       struct sigevent *evp, timer_t *timerid);
+    */
+   PRINT("sys_timer_create ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "timer_create", vki_clockid_t, clock_id,
+                 struct vki_sigevent *, evp, vki_timer_t *, timerid);
+
+   if (ARG2) {
+      struct vki_sigevent *evp = (struct vki_sigevent *) ARG2;
+      PRE_FIELD_READ("timer_create(evp.sigev_notify)", evp->sigev_notify);
+      PRE_FIELD_READ("timer_create(evp.sigev_signo)", evp->sigev_signo);
+      PRE_FIELD_READ("timer_create(evp.sigev_value.sival_int)",
+         evp->sigev_value.sival_int);
+
+      /* Be safe. */
+      if (ML_(safe_to_deref(evp, sizeof(struct vki_sigevent)))) {
+         if ((evp->sigev_notify == VKI_SIGEV_PORT) ||
+             (evp->sigev_notify == VKI_SIGEV_THREAD))
+            PRE_MEM_READ("timer_create(evp.sigev_value.sival_ptr)", 
+                         (Addr) evp->sigev_value.sival_ptr,
+                         sizeof(vki_port_notify_t));
+      }
+   }
+
+   PRE_MEM_WRITE("timer_create(timerid)", ARG3, sizeof(vki_timer_t));
+}
+
+POST(sys_timer_create)
+{
+   POST_MEM_WRITE(ARG3, sizeof(vki_timer_t));
+}
+
+PRE(sys_timer_delete)
+{
+   /* int timer_delete(timer_t timerid); */
+   PRINT("sys_timer_delete ( %ld )", SARG1);
+   PRE_REG_READ1(long, "timer_delete", vki_timer_t, timerid);
+}
+
+PRE(sys_timer_settime)
+{
+   /* int timer_settime(timer_t timerid, int flags,
+                        const struct itimerspec *value,
+                        struct itimerspec *ovalue);
+    */
+   PRINT("sys_timer_settime ( %ld, %ld, %#lx, %#lx )",
+         SARG1, SARG2, ARG3, ARG4);
+   PRE_REG_READ4(long, "timer_settime", vki_timer_t, timerid,
+                 int, flags, const struct vki_itimerspec *, value,
+                 struct vki_itimerspec *, ovalue);
+   PRE_MEM_READ("timer_settime(value)",
+                ARG3, sizeof(struct vki_itimerspec));
+   if (ARG4)
+      PRE_MEM_WRITE("timer_settime(ovalue)",
+                    ARG4, sizeof(struct vki_itimerspec));
+}
+
+POST(sys_timer_settime)
+{
+   if (ARG4)
+      POST_MEM_WRITE(ARG4, sizeof(struct vki_itimerspec));
+}
+
+PRE(sys_timer_gettime)
+{
+   /* int timer_gettime(timer_t timerid, struct itimerspec *value); */
+   PRINT("sys_timer_gettime ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "timer_gettime", vki_timer_t, timerid,
+                 struct vki_itimerspec *, value);
+   PRE_MEM_WRITE("timer_gettime(value)",
+                 ARG2, sizeof(struct vki_itimerspec));
+}
+
+POST(sys_timer_gettime)
+{
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_itimerspec));
+}
+
+PRE(sys_timer_getoverrun)
+{
+   /* int timer_getoverrun(timer_t timerid); */
+   PRINT("sys_timer_getoverrun ( %ld )", SARG1);
+   PRE_REG_READ1(long, "timer_getoverrun", vki_timer_t, timerid);
+}
+
+PRE(sys_facl)
+{
+   /* int facl(int fildes, int cmd, int nentries, void *aclbufp); */
+   PRINT("sys_facl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+
+   PRE_REG_READ4(long, "facl", int, fildes, int, cmd,
+                 int, nentries, void *, aclbufp);
+
+   switch (ARG2 /*cmd*/) {
+   case VKI_SETACL:
+      if (ARG4)
+         PRE_MEM_READ("facl(aclbufp)", ARG4, sizeof(vki_aclent_t));
+      break;
+   case VKI_GETACL:
+      PRE_MEM_WRITE("facl(aclbufp)", ARG4, ARG3 * sizeof(vki_aclent_t));
+      break;
+   case VKI_GETACLCNT:
+      break;
+   case VKI_ACE_SETACL:
+      if (ARG4)
+         PRE_MEM_READ("facl(aclbufp)", ARG4, sizeof(vki_ace_t));
+      break;
+   case VKI_ACE_GETACL:
+      PRE_MEM_WRITE("facl(aclbufp)", ARG4, ARG3 * sizeof(vki_ace_t));
+      break;
+   case VKI_ACE_GETACLCNT:
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the facl call with cmd %ld.", SARG2);
+      /*NOTREACHED*/
+      break;
+   }
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "facl", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_facl)
+{
+   switch (ARG2 /*cmd*/) {
+   case VKI_SETACL:
+      break;
+   case VKI_GETACL:
+      POST_MEM_WRITE(ARG4, ARG3 * sizeof(vki_aclent_t));
+      break;
+   case VKI_GETACLCNT:
+      break;
+   case VKI_ACE_SETACL:
+      break;
+   case VKI_ACE_GETACL:
+      POST_MEM_WRITE(ARG4, ARG3 * sizeof(vki_ace_t));
+      break;
+   case VKI_ACE_GETACLCNT:
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+static Int pre_check_and_close_fds(ThreadId tid, const HChar *name,
+                                   vki_door_desc_t *desc_ptr,
+                                   vki_uint_t desc_num)
+{
+   vki_uint_t i;
+
+   /* Verify passed file descriptors. */
+   for (i = 0; i < desc_num; i++) {
+      vki_door_desc_t *desc = &desc_ptr[i];
+      if ((desc->d_attributes & DOOR_DESCRIPTOR) &&
+          (desc->d_attributes & DOOR_RELEASE)) {
+         Int fd = desc->d_data.d_desc.d_descriptor;
+
+         /* Detect and negate attempts by the client to close Valgrind's fds.
+            Also if doing -d style logging (which is to fd = 2 = stderr),
+            don't allow that to be closed either. */
+         if (!ML_(fd_allowed)(fd, name, tid, False) ||
+             (fd == 2 && VG_(debugLog_getLevel)() > 0))
+            return VKI_EBADF;
+      }
+   }
+
+   /* All fds are allowed, record information about the closed ones.
+
+      Note: Recording information about any closed fds should generally happen
+      in a post wrapper but it is not possible in this case because door calls
+      are "very blocking", if the information was recorded after the syscall
+      finishes then it would be out-of-date during the call, i.e. while the
+      syscall is blocked in the kernel.  Therefore, we record closed fds for
+      this specific syscall in the PRE wrapper.  Unfortunately, this creates
+      a problem when the syscall fails, for example, door_call() can fail with
+      EBADF or EFAULT and then no fds are released.  If that happens the
+      information about opened fds is incorrect.  This should be very rare (I
+      hope) and such a condition is also reported in the post wrapper. */
+   if (VG_(clo_track_fds)) {
+      for (i = 0; i < desc_num; i++) {
+         vki_door_desc_t *desc = &desc_ptr[i];
+         if ((desc->d_attributes & DOOR_DESCRIPTOR) &&
+             (desc->d_attributes & DOOR_RELEASE)) {
+            Int fd = desc->d_data.d_desc.d_descriptor;
+            ML_(record_fd_close)(fd);
+         }
+      }
+   }
+
+   return 0;
+}
+
+static void post_record_fds(ThreadId tid, const HChar *name,
+                            vki_door_desc_t *desc_ptr, vki_uint_t desc_num)
+{
+   vki_uint_t i;
+
+   /* Record returned file descriptors. */
+   for (i = 0; i < desc_num; i++) {
+      vki_door_desc_t *desc = &desc_ptr[i];
+      if (desc->d_attributes & DOOR_DESCRIPTOR) {
+         Int fd = desc->d_data.d_desc.d_descriptor;
+         if (!ML_(fd_allowed)(fd, name, tid, True)) {
+            /* Unfortunately, we cannot recover at this point and have to fail
+               hard. */
+            VG_(message)(Vg_UserMsg, "The %s syscall returned an unallowed"
+                                     "file descriptor %d.\n", name, fd);
+            VG_(exit)(101);
+         }
+         else if (VG_(clo_track_fds))
+            ML_(record_fd_open_named)(tid, fd);
+      }
+   }
+}
+
+/* Handles repository door protocol request over client door fd. */
+static void repository_door_pre_mem_door_call_hook(ThreadId tid, Int fd,
+                                                   void *data_ptr,
+                                                   SizeT data_size)
+{
+   vki_rep_protocol_request_t *p = (vki_rep_protocol_request_t *) data_ptr;
+   PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                  "request->rpr_request)", p->rpr_request);
+
+   if (ML_(safe_to_deref)(p, sizeof(vki_rep_protocol_request_t))) {
+      switch (p->rpr_request) {
+      case VKI_REP_PROTOCOL_CLOSE:
+         break;
+      case VKI_REP_PROTOCOL_ENTITY_SETUP:
+         {
+            struct vki_rep_protocol_entity_setup *r =
+               (struct vki_rep_protocol_entity_setup *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_setup->rpr_entityid)", r->rpr_entityid);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_setup->rpr_entitytype)", r->rpr_entitytype);
+         }
+         break;
+      case VKI_REP_PROTOCOL_ENTITY_NAME:
+         {
+            struct vki_rep_protocol_entity_name *r =
+               (struct vki_rep_protocol_entity_name *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_name->rpr_entityid)", r->rpr_entityid);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_name->rpr_answertype)", r->rpr_answertype);
+         }
+         break;
+#if (SOLARIS_REPCACHE_PROTOCOL_VERSION >= 25)
+      case VKI_REP_PROTOCOL_ENTITY_GET_ROOT:
+         {
+            struct vki_rep_protocol_entity_root *r =
+               (struct vki_rep_protocol_entity_root *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_root->rpr_entityid)", r->rpr_entityid);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_root->rpr_outid)", r->rpr_outid);
+         }
+         break;
+#endif /* SOLARIS_REPCACHE_PROTOCOL_VERSION >= 25 */
+      case VKI_REP_PROTOCOL_ENTITY_GET:
+         {
+            struct vki_rep_protocol_entity_get *r =
+               (struct vki_rep_protocol_entity_get *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_get->rpr_entityid)", r->rpr_entityid);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_get->rpr_object)", r->rpr_object);
+         }
+         break;
+      case VKI_REP_PROTOCOL_ENTITY_GET_CHILD:
+         {
+            struct vki_rep_protocol_entity_get_child *r =
+               (struct vki_rep_protocol_entity_get_child *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_get_child->rpr_entityid)", r->rpr_entityid);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_get_child->rpr_childid)", r->rpr_childid);
+            PRE_MEM_RASCIIZ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                            "entity_get_child->rpr_name)", (Addr) r->rpr_name);
+         }
+         break;
+      case VKI_REP_PROTOCOL_ENTITY_GET_PARENT:
+         {
+            struct vki_rep_protocol_entity_parent *r =
+               (struct vki_rep_protocol_entity_parent *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_get_parent->rpr_entityid)", r->rpr_entityid);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_get_parent->rpr_outid)", r->rpr_outid);
+         }
+         break;
+      case VKI_REP_PROTOCOL_ENTITY_RESET:
+         {
+            struct vki_rep_protocol_entity_reset *r =
+               (struct vki_rep_protocol_entity_reset *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_reset->rpr_entityid)", r->rpr_entityid);
+         }
+         break;
+      case VKI_REP_PROTOCOL_ENTITY_TEARDOWN:
+         {
+            struct vki_rep_protocol_entity_teardown *r =
+               (struct vki_rep_protocol_entity_teardown *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "entity_teardown->rpr_entityid)", r->rpr_entityid);
+         }
+         break;
+      case VKI_REP_PROTOCOL_ITER_READ:
+         {
+            struct vki_rep_protocol_iter_read *r =
+               (struct vki_rep_protocol_iter_read *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_read->rpr_iterid)", r->rpr_iterid);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_read->rpr_sequence)", r->rpr_sequence);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_read->rpr_entityid)", r->rpr_entityid);
+         }
+         break;
+      case VKI_REP_PROTOCOL_ITER_READ_VALUE:
+         {
+            struct vki_rep_protocol_iter_read_value *r =
+               (struct vki_rep_protocol_iter_read_value *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_read_value->rpr_iterid)", r->rpr_iterid);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_read_value->rpr_sequence)", r->rpr_sequence);
+         }
+         break;
+      case VKI_REP_PROTOCOL_ITER_RESET:
+      case VKI_REP_PROTOCOL_ITER_SETUP:
+      case VKI_REP_PROTOCOL_ITER_TEARDOWN:
+         {
+            struct vki_rep_protocol_iter_request *r =
+               (struct vki_rep_protocol_iter_request *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_request->rpr_iterid)", r->rpr_iterid);
+         }
+         break;
+      case VKI_REP_PROTOCOL_ITER_START:
+         {
+            struct vki_rep_protocol_iter_start *r =
+               (struct vki_rep_protocol_iter_start *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_start->rpr_iterid)", r->rpr_iterid);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_start->rpr_entity)", r->rpr_entity);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_start->rpr_itertype)", r->rpr_itertype);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "iter_start->rpr_flags)", r->rpr_flags);
+            PRE_MEM_RASCIIZ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                            "iter_start->rpr_pattern)", (Addr) r->rpr_pattern);
+         }
+         break;
+      case VKI_REP_PROTOCOL_PROPERTY_GET_TYPE:
+      case VKI_REP_PROTOCOL_PROPERTY_GET_VALUE:
+         {
+            struct vki_rep_protocol_property_request *r =
+               (struct vki_rep_protocol_property_request *) p;
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "property_request->rpr_entityid)", r->rpr_entityid);
+         }
+         break;
+      default:
+         VG_(unimplemented)("Door wrapper of " VKI_REPOSITORY_DOOR_NAME
+                            " where rpr_request=%u.", p->rpr_request);
+         /* NOTREACHED */
+         break;
+      }        
+   }
+}
+
+/* Handles repository door protocol response over client door fd. */
+static void repository_door_post_mem_door_call_hook(ThreadId tid, Int fd,
+                                                    void *rbuf, SizeT rsize)
+{
+   /* :TODO: Ideally we would need to match the response type with the
+      previous request because response itself does not contain any
+      type identification.
+      For now simply make defined whole response buffer. */
+   POST_MEM_WRITE((Addr) rbuf, rsize);
+}
+
+/* Pre-syscall checks for params->data_ptr contents of a door_call(). */
+static void door_call_pre_mem_params_data(ThreadId tid, Int fd,
+                                          void *data_ptr, SizeT data_size)
+{
+   const HChar *pathname;
+
+   /* Get pathname of the door file descriptor, if not already done.
+      Needed to dissect door service on the pathname below. */
+   if (!VG_(clo_track_fds) && !ML_(fd_recorded)(fd)) {
+      ML_(record_fd_open_named)(tid, fd);
+   }
+   pathname = ML_(find_fd_recorded_by_fd)(fd);
+
+   /* Debug-only printing. */
+   if (0) {
+      VG_(printf)("PRE(door_call) with fd=%d and filename=%s\n",
+                  fd, pathname);
+   }
+
+   if (VG_STREQ(pathname, VKI__PATH_KCFD_DOOR)) {
+      vki_kcf_door_arg_t *p = (vki_kcf_door_arg_t *) data_ptr;
+
+      PRE_FIELD_READ("door_call(\"" VKI__PATH_KCFD_DOOR "\", "
+                     "kcf_door_arg_t->da_version)", p->da_version);
+      PRE_FIELD_READ("door_call(\"" VKI__PATH_KCFD_DOOR "\", "
+                     "kcf_door_arg_t->da_iskernel)", p->da_iskernel);
+      PRE_MEM_RASCIIZ("door_call(\"" VKI__PATH_KCFD_DOOR "\", "
+                      "kcf_door_arg_t->da_u.filename)",
+                      (Addr) p->vki_da_u.filename);
+   } else if (VG_STREQ(pathname, VKI_NAME_SERVICE_DOOR)) {
+      vki_nss_pheader_t *p = (vki_nss_pheader_t *) data_ptr;
+
+      PRE_FIELD_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", "
+                     "nss_pheader->nsc_callnumber)", p->nsc_callnumber);
+      if (ML_(safe_to_deref)(p, sizeof(vki_nss_pheader_t))) {
+         if ((p->nsc_callnumber & VKI_NSCDV2CATMASK) == VKI_NSCD_CALLCAT_APP) {
+            /* request from an application towards nscd */
+            PRE_FIELD_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->p_version)", p->p_version);
+            PRE_FIELD_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->dbd_off)", p->dbd_off);
+            PRE_FIELD_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->dbd_len)", p->dbd_len);
+            PRE_FIELD_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->key_off)", p->key_off);
+            PRE_FIELD_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->key_len)", p->key_len);
+            PRE_FIELD_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->data_off)", p->data_off);
+            PRE_FIELD_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->data_len)", p->data_len);
+            /* Fields ext_off and ext_len are set only sporadically. */
+            PRE_FIELD_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->pbufsiz)", p->pbufsiz);
+            PRE_MEM_WRITE("door_call(\"" VKI_NAME_SERVICE_DOOR "\", pbuf)",
+                          (Addr) p, p->pbufsiz);
+
+            if (p->dbd_len > 0) {
+               vki_nss_dbd_t *dbd
+                  = (vki_nss_dbd_t *) ((HChar *) p + p->dbd_off);
+
+               PRE_MEM_READ("door_call(\"" VKI_NAME_SERVICE_DOOR
+                            "\", nss_dbd)", (Addr) dbd, sizeof(vki_nss_dbd_t));
+               if (ML_(safe_to_deref)(dbd, sizeof(vki_nss_dbd_t))) {
+                  if (dbd->o_name != 0)
+                     PRE_MEM_RASCIIZ("door_call(\"" VKI_NAME_SERVICE_DOOR
+                                     "\", nss_dbd->o_name)", (Addr) ((HChar *) p
+                                     + p->dbd_off + dbd->o_name));
+                  if (dbd->o_config_name != 0)
+                     PRE_MEM_RASCIIZ("door_call(\"" VKI_NAME_SERVICE_DOOR
+                                     "\", nss_dbd->o_config_name)",
+                                     (Addr) ((HChar *) p + p->dbd_off
+                                     + dbd->o_config_name));
+                  if (dbd->o_default_config != 0)
+                     PRE_MEM_RASCIIZ("door_call(\"" VKI_NAME_SERVICE_DOOR
+                                     "\", nss_dbd->o_default_config)",
+                                     (Addr) ((HChar *) p + p->dbd_off +
+                                     dbd->o_default_config));
+              }
+           }
+
+           PRE_MEM_READ("door_call(\"" VKI_NAME_SERVICE_DOOR "\", nss->key)",
+                        (Addr) ((HChar *) p + p->key_off), p->key_len);
+         } else {
+            /* request from a child nscd towards parent nscd */
+            VG_(unimplemented)("Door wrapper of child/parent nscd.");
+         }
+      }
+   } else if (VG_STREQ(pathname, VKI_REPOSITORY_DOOR_NAME)) {
+      vki_repository_door_request_t *p =	
+         (vki_repository_door_request_t *) data_ptr;
+
+      PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                     "request->rdr_version)", p->rdr_version);
+      PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                     "request->rdr_request)", p->rdr_request);
+      if (ML_(safe_to_deref)(p, sizeof(vki_repository_door_request_t))) {
+         if (p->rdr_version == VKI_REPOSITORY_DOOR_VERSION) {
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "request->rdr_flags)", p->rdr_flags);
+            PRE_FIELD_READ("door_call(\"" VKI_REPOSITORY_DOOR_NAME "\", "
+                           "request->rdr_debug)", p->rdr_debug);
+         } else {
+            VG_(unimplemented)("Door wrapper of " VKI_REPOSITORY_DOOR_NAME
+                               " where version=%u.", p->rdr_version);
+         }
+      }
+   } else {
+      const OpenDoor *open_door = door_find_by_fd(fd);
+      if ((open_door != NULL) && (open_door->pre_mem_hook != NULL)) {
+         open_door->pre_mem_hook(tid, fd, data_ptr, data_size);
+      } else {
+         if (SimHintiS(SimHint_lax_doors, VG_(clo_sim_hints))) {
+            /*
+             * Be very lax about door syscall handling over unrecognized
+             * door file descriptors. Does not require that full buffer
+             * is initialized when writing. Without this, programs using
+             * libdoor(3LIB) functionality with completely proprietary
+             * semantics may report large number of false positives.
+             */
+         } else {
+            static Int moans = 3;
+
+            /* generic default */
+            if (moans > 0 && !VG_(clo_xml)) {
+               moans--;
+               VG_(umsg)(
+"Warning: noted and generically handled door call\n"
+"   on file descriptor %d (filename: %s).\n"
+"   This could cause spurious value errors to appear.\n"
+"   See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.\n"
+"   Alternatively you may find '--sim-hints=lax-doors' option useful.\n",
+                         fd, pathname);
+            }
+            PRE_MEM_READ("door_call(params->data_ptr)",
+                         (Addr) data_ptr, data_size);
+         }
+      }
+   }
+}
+
+/* Post-syscall checks for params->rbuf contents of a door_call(). */
+static void door_call_post_mem_params_rbuf(ThreadId tid, Int fd,
+                                           void *rbuf, SizeT rsize,
+                                           const vki_door_desc_t *desc_ptr,
+                                           vki_uint_t desc_num)
+{
+   const HChar *pathname = ML_(find_fd_recorded_by_fd)(fd);
+
+   /* Debug-only printing. */
+   if (0) {
+      VG_(printf)("POST(door_call) with fd=%d and filename=%s\n",
+                  fd, pathname);
+   }
+
+   if (VG_STREQ(pathname, VKI__PATH_KCFD_DOOR)) {
+      vki_kcf_door_arg_t *p = (vki_kcf_door_arg_t *) rbuf;
+
+      POST_FIELD_WRITE(p->da_version);
+      POST_FIELD_WRITE(p->vki_da_u.result.status);
+      POST_MEM_WRITE((Addr) p->vki_da_u.result.signature,
+                     p->vki_da_u.result.siglen);
+   } else if (VG_STREQ(pathname, VKI_NAME_SERVICE_DOOR)) {
+      vki_nss_pheader_t *p = (vki_nss_pheader_t *) rbuf;
+
+      POST_FIELD_WRITE(p->nsc_callnumber);
+      if (ML_(safe_to_deref)(p, sizeof(vki_nss_pheader_t))) {
+         if ((p->nsc_callnumber & VKI_NSCDV2CATMASK) == VKI_NSCD_CALLCAT_APP) {
+            /* response from nscd to an application */
+            POST_FIELD_WRITE(p->p_status);
+            POST_FIELD_WRITE(p->p_errno);
+            POST_FIELD_WRITE(p->p_herrno);
+            POST_FIELD_WRITE(p->dbd_off);
+            POST_FIELD_WRITE(p->dbd_len);
+            POST_FIELD_WRITE(p->key_off);
+            POST_FIELD_WRITE(p->key_len);
+            POST_FIELD_WRITE(p->data_off);
+            POST_FIELD_WRITE(p->data_len);
+            POST_FIELD_WRITE(p->ext_off);
+            POST_FIELD_WRITE(p->ext_len);
+            POST_FIELD_WRITE(p->pbufsiz);
+
+            if (p->pbufsiz <= rsize) {
+               if (p->dbd_off < p->pbufsiz - sizeof(vki_nss_pheader_t)) {
+                  SizeT len = MIN(p->dbd_len, p->pbufsiz - p->dbd_off);
+                  POST_MEM_WRITE((Addr) ((HChar *) p + p->dbd_off), len);
+               }
+
+               if (p->key_off < p->pbufsiz - sizeof(vki_nss_pheader_t)) {
+                  SizeT len = MIN(p->key_len, p->pbufsiz - p->key_off);
+                  POST_MEM_WRITE((Addr) ((HChar *) p + p->key_off), len);
+               }
+
+               if (p->data_off < p->pbufsiz - sizeof(vki_nss_pheader_t)) {
+                  SizeT len = MIN(p->data_len, p->pbufsiz - p->data_off);
+                  POST_MEM_WRITE((Addr) ((HChar *) p + p->data_off), len);
+               }
+
+               if (p->ext_off < p->pbufsiz - sizeof(vki_nss_pheader_t)) {
+                  SizeT len = MIN(p->ext_len, p->pbufsiz - p->ext_off);
+                  POST_MEM_WRITE((Addr) ((HChar *) p + p->ext_off), len);
+               }
+            }
+         } else {
+            /* response from parent nscd to a child nscd */
+            VG_(unimplemented)("Door wrapper of child/parent nscd.");
+         }
+      }
+   } else if (VG_STREQ(pathname, VKI_REPOSITORY_DOOR_NAME)) {
+      POST_FIELD_WRITE(((vki_repository_door_response_t *) rbuf)->rdr_status);
+      /* A new client door fd is passed over the global repository door. */
+      if ((desc_ptr != NULL) && (desc_num > 0)) {
+         if (desc_ptr[0].d_attributes & DOOR_DESCRIPTOR) {
+            door_record_client(tid, desc_ptr[0].d_data.d_desc.d_descriptor,
+                               repository_door_pre_mem_door_call_hook,
+                               repository_door_post_mem_door_call_hook);
+         }
+      }
+   } else {
+      const OpenDoor *open_door = door_find_by_fd(fd);
+      if ((open_door != NULL) && (open_door->post_mem_hook != NULL)) {
+         open_door->post_mem_hook(tid, fd, rbuf, rsize);
+      } else {
+         /* generic default */
+         POST_MEM_WRITE((Addr) rbuf, rsize);
+      }
+   }
+}
+
+/* Pre-syscall checks for data_ptr contents in a door_return(). */
+static void door_return_pre_mem_data(ThreadId tid, Addr server_procedure,
+                                     void *data_ptr, SizeT data_size)
+{
+   if ((data_size == 0) || (server_procedure == 0)) {
+      /* There is nothing to check. This usually happens during thread's
+         first call to door_return(). */
+      return;
+   }
+
+   /* Get pathname of the door file descriptor based on the
+      door server procedure (that's all we have).
+      Needed to dissect door service on the pathname below. */
+   const OpenDoor *open_door = door_find_by_proc(server_procedure);
+   const HChar *pathname = (open_door != NULL) ? open_door->pathname : NULL;
+   Int fd = (open_door != NULL) ? open_door->fd : -1;
+
+   /* Debug-only printing. */
+   if (0) {
+      VG_(printf)("PRE(door_return) with fd=%d and filename=%s "
+                  "(nr_doors_recorded=%u)\n",
+                  fd, pathname, nr_doors_recorded);
+   }
+
+   if (VG_STREQ(pathname, VKI__PATH_KCFD_DOOR)) {
+      vki_kcf_door_arg_t *p = (vki_kcf_door_arg_t *) data_ptr;
+
+      PRE_FIELD_READ("door_return(\"" VKI__PATH_KCFD_DOOR "\", "
+                     "kcf_door_arg_t->da_version)", p->da_version);
+      PRE_FIELD_READ("door_return(\"" VKI__PATH_KCFD_DOOR "\", "
+                     "kcf_door_arg_t->da_u.result.status)",
+                     p->vki_da_u.result.status);
+      PRE_MEM_READ("door_return(\"" VKI__PATH_KCFD_DOOR "\", "
+                   "kcf_door_arg_t->da_u.result.signature)",
+                   (Addr) p->vki_da_u.result.signature,
+                   p->vki_da_u.result.siglen);
+   } else if (VG_STREQ(pathname, VKI_NAME_SERVICE_DOOR)) {
+      vki_nss_pheader_t *p = (vki_nss_pheader_t *) data_ptr;
+
+      PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                     "nss_pheader->nsc_callnumber)", p->nsc_callnumber);
+      if (ML_(safe_to_deref)(p, sizeof(vki_nss_pheader_t))) {
+         if ((p->nsc_callnumber & VKI_NSCDV2CATMASK) == VKI_NSCD_CALLCAT_APP) {
+            /* response from nscd to an application */
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->p_status)", p->p_status);
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->p_errno)", p->p_errno);
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->p_herrno)", p->p_herrno);
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->dbd_off)", p->dbd_off);
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->dbd_len)", p->dbd_len);
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->data_off)", p->data_off);
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->data_len)", p->data_len);
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->ext_off)", p->ext_off);
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->ext_len)", p->ext_len);
+            PRE_FIELD_READ("door_return(\"" VKI_NAME_SERVICE_DOOR "\", "
+                           "nss_pheader->pbufsiz)", p->pbufsiz);
+            PRE_MEM_WRITE("door_return(\"" VKI_NAME_SERVICE_DOOR "\", pbuf)",
+                          (Addr) p, p->pbufsiz);
+            PRE_MEM_READ("door_return(\"" VKI_NAME_SERVICE_DOOR
+                         "\", nss->data)",
+                         (Addr) ((HChar *) p + p->data_off), p->data_len);
+            PRE_MEM_READ("door_return(\"" VKI_NAME_SERVICE_DOOR
+                         "\", nss->ext)",
+                         (Addr) ((HChar *) p + p->ext_off), p->ext_len);
+         } else {
+            /* response from parent nscd to a child nscd */
+            VG_(unimplemented)("Door wrapper of child/parent nscd.");
+         }
+      }
+   } else if (VG_STREQ(pathname, VKI_REPOSITORY_DOOR_NAME)) {
+            VG_(unimplemented)("Door wrapper of " VKI_REPOSITORY_DOOR_NAME);
+   } else {
+      if (SimHintiS(SimHint_lax_doors, VG_(clo_sim_hints))) {
+         /*
+          * Be very lax about door syscall handling over unrecognized
+          * door file descriptors. Does not require that full buffer
+          * is initialized when writing. Without this, programs using
+          * libdoor(3LIB) functionality with completely proprietary
+          * semantics may report large number of false positives.
+          */
+      } else {
+         static Int moans = 3;
+
+         /* generic default */
+         if (moans > 0 && !VG_(clo_xml)) {
+            moans--;
+            VG_(umsg)(
+"Warning: noted and generically handled door return\n"
+"   on file descriptor %d (filename: %s).\n"
+"   This could cause spurious value errors to appear.\n"
+"   See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.\n"
+"   Alternatively you may find '--sim-hints=lax-doors' option useful.\n",
+                   fd, pathname);
+         }
+         PRE_MEM_READ("door_return(data_ptr)",
+                      (Addr) data_ptr, data_size);
+      }
+   }
+}
+
+/* Post-syscall checks for data_ptr contents in a door_return(). */
+static void door_return_post_mem_data(ThreadId tid, Addr server_procedure,
+                                      void *data_ptr, SizeT data_size)
+{
+   const OpenDoor *open_door = door_find_by_proc(server_procedure);
+   const HChar *pathname = (open_door != NULL) ? open_door->pathname : NULL;
+
+   /* Debug-only printing. */
+   if (0) {
+      Int fd = (open_door != NULL) ? open_door->fd : -1;
+      VG_(printf)("POST(door_return) with fd=%d and filename=%s "
+                  "(nr_doors_recorded=%u)\n",
+                  fd, pathname, nr_doors_recorded);
+   }
+
+   if (VG_STREQ(pathname, VKI__PATH_KCFD_DOOR)) {
+      vki_kcf_door_arg_t *p = (vki_kcf_door_arg_t *) data_ptr;
+
+      POST_FIELD_WRITE(p->da_version);
+      POST_FIELD_WRITE(p->da_iskernel);
+      POST_MEM_WRITE((Addr) p->vki_da_u.filename,
+                     VG_(strlen)(p->vki_da_u.filename) + 1);
+   } else if (VG_STREQ(pathname, VKI_NAME_SERVICE_DOOR)) {
+      vki_nss_pheader_t *p = (vki_nss_pheader_t *) data_ptr;
+
+      POST_FIELD_WRITE(p->nsc_callnumber);
+      if (ML_(safe_to_deref)(p, sizeof(vki_nss_pheader_t))) {
+         if ((p->nsc_callnumber & VKI_NSCDV2CATMASK) == VKI_NSCD_CALLCAT_APP) {
+            /* request from an application towards nscd */
+            POST_FIELD_WRITE(p->p_version);
+            POST_FIELD_WRITE(p->dbd_off);
+            POST_FIELD_WRITE(p->dbd_len);
+            POST_FIELD_WRITE(p->key_off);
+            POST_FIELD_WRITE(p->key_len);
+            POST_FIELD_WRITE(p->data_off);
+            POST_FIELD_WRITE(p->data_len);
+            POST_FIELD_WRITE(p->ext_off);
+            POST_FIELD_WRITE(p->ext_len);
+            POST_FIELD_WRITE(p->pbufsiz);
+
+            if (p->dbd_len > 0) {
+               vki_nss_dbd_t *dbd
+                  = (vki_nss_dbd_t *) ((HChar *) p + p->dbd_off);
+
+               POST_MEM_WRITE((Addr) dbd, sizeof(vki_nss_dbd_t));
+               if (ML_(safe_to_deref)(dbd, sizeof(vki_nss_dbd_t))) {
+                  SizeT headers_size = sizeof(vki_nss_pheader_t)
+                     + sizeof(vki_nss_dbd_t);
+
+                  if (dbd->o_name != 0) {
+                     HChar *name = (HChar *) p + p->dbd_off + dbd->o_name;
+                     SizeT name_len = VG_(strlen)(name) + 1;
+                     if (name_len <= data_size - headers_size)
+                        POST_MEM_WRITE((Addr) name, name_len);
+                  }
+                  if (dbd->o_config_name != 0) {
+                     HChar *name = (HChar *) p + p->dbd_off + dbd->o_config_name;
+                     SizeT name_len = VG_(strlen)(name) + 1;
+                     if (name_len <= data_size - headers_size)
+                        POST_MEM_WRITE((Addr) name, name_len);
+                  }
+                  if (dbd->o_default_config != 0) {
+                     HChar *name = (HChar *) p + p->dbd_off
+                        + dbd->o_default_config;
+                     SizeT name_len = VG_(strlen)(name) + 1;
+                     if (name_len <= data_size - headers_size)
+                        POST_MEM_WRITE((Addr) name, name_len);
+                  }
+              }
+           }
+
+           if (p->key_len <= data_size - p->key_off)
+              POST_MEM_WRITE((Addr) ((HChar *) p + p->key_off), p->key_len);
+         } else {
+            /* request from a child nscd towards parent nscd */
+            VG_(unimplemented)("Door wrapper of child/parent nscd.");
+         }
+      }
+   } else if (VG_STREQ(pathname, VKI_REPOSITORY_DOOR_NAME)) {
+            VG_(unimplemented)("Door wrapper of " VKI_REPOSITORY_DOOR_NAME);
+   } else {
+      /* generic default */
+      POST_MEM_WRITE((Addr) data_ptr, data_size);
+   }
+}
+
+PRE(sys_door)
+{
+   /* int doorfs(long arg1, long arg2, long arg3, long arg4, long arg5,
+                 long subcode); */
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   *flags |= SfMayBlock | SfPostOnFail;
+
+   PRINT("sys_door ( %#lx, %#lx, %#lx, %#lx, %#lx, %ld )", ARG1, ARG2, ARG3,
+         ARG4, ARG5, SARG6);
+
+   /* Macro PRE_REG_READ6 cannot be simply used because not all ARGs are used
+      in door() syscall variants. Note that ARG6 (subcode) is used always. */
+#define PRE_REG_READ_SIXTH_ONLY         \
+   if (VG_(tdict).track_pre_reg_read) { \
+      PRA6("door", long, subcode);      \
+   }
+
+   switch (ARG6 /*subcode*/) {
+   case VKI_DOOR_CREATE:
+      PRE_REG_READ3(long, "door", long, arg1, long, arg2, long, arg3);
+      PRE_REG_READ_SIXTH_ONLY;
+      /* Note: the first argument to DOOR_CREATE is a server procedure.
+         This could lead to a problem if the kernel tries to force the
+         execution of this procedure, similarly to how signal handlers are
+         executed.   Fortunately, the kernel never does that (for user-space
+         server procedures).  The procedure is always executed by the standard
+         library. */
+      break;
+   case VKI_DOOR_REVOKE:
+      PRE_REG_READ1(long, "door", long, arg1);
+      PRE_REG_READ_SIXTH_ONLY;
+      if (!ML_(fd_allowed)(ARG1, "door_revoke", tid, False))
+         SET_STATUS_Failure(VKI_EBADF);
+      break;
+   case VKI_DOOR_INFO:
+      PRE_REG_READ2(long, "door", long, arg1, long, arg2);
+      PRE_REG_READ_SIXTH_ONLY;
+      PRE_MEM_WRITE("door_info(info)", ARG2, sizeof(vki_door_info_t));
+      break;
+   case VKI_DOOR_CALL:
+      {
+         PRE_REG_READ2(long, "door", long, arg1, long, arg2);
+         PRE_REG_READ_SIXTH_ONLY;
+
+         Int rval = 0;
+         vki_door_arg_t *params = (vki_door_arg_t*)ARG2;
+
+         if (!ML_(fd_allowed)(ARG1, "door_call", tid, False))
+            rval = VKI_EBADF;
+
+         PRE_FIELD_READ("door_call(params->data_ptr)", params->data_ptr);
+         PRE_FIELD_READ("door_call(params->data_size)", params->data_size);
+         PRE_FIELD_READ("door_call(params->desc_ptr)", params->desc_ptr);
+         PRE_FIELD_READ("door_call(params->desc_num)", params->desc_num);
+         PRE_FIELD_READ("door_call(params->rbuf)", params->rbuf);
+         PRE_FIELD_READ("door_call(params->rsize)", params->rsize);
+
+         if (ML_(safe_to_deref)(params, sizeof(*params))) {
+            if (params->data_ptr)
+               door_call_pre_mem_params_data(tid, ARG1, params->data_ptr,
+                                             params->data_size);
+
+            if (params->desc_ptr) {
+               SizeT desc_size = params->desc_num * sizeof(*params->desc_ptr);
+               PRE_MEM_READ("door_call(params->desc_ptr)",
+                            (Addr)params->desc_ptr, desc_size);
+
+               /* Do not record information about closed fds if we are going
+                  to fail the syscall and so no fds will be closed. */
+               if ((rval == 0) &&
+                   (ML_(safe_to_deref)(params->desc_ptr, desc_size))) {
+                     rval = pre_check_and_close_fds(tid, "door_call",
+                                                    params->desc_ptr,
+                                                    params->desc_num);
+               }
+            }
+
+            if (params->rbuf)
+               PRE_MEM_WRITE("door_call(params->rbuf)", (Addr)params->rbuf,
+                             params->rsize);
+         }
+
+         if (rval)
+            SET_STATUS_Failure(rval);
+      }
+      break;
+   case VKI_DOOR_BIND:
+      PRE_REG_READ1(long, "door", long, arg1);
+      PRE_REG_READ_SIXTH_ONLY;
+      VG_(unimplemented)("DOOR_BIND");
+      break;
+   case VKI_DOOR_UNBIND:
+      PRE_REG_READ0(long, "door");
+      PRE_REG_READ_SIXTH_ONLY;
+      VG_(unimplemented)("DOOR_UNBIND");
+      break;
+   case VKI_DOOR_UNREFSYS:
+      PRE_REG_READ0(long, "door");
+      PRE_REG_READ_SIXTH_ONLY;
+      VG_(unimplemented)("DOOR_UNREFSYS");
+      break;
+   case VKI_DOOR_UCRED:
+      PRE_REG_READ1(long, "door", long, arg1);
+      PRE_REG_READ_SIXTH_ONLY;
+      VG_(unimplemented)("DOOR_UCRED");
+      break;
+   case VKI_DOOR_RETURN:
+      PRE_REG_READ6(long, "door", long, arg1, long, arg2, long, arg3,
+                    long, arg4, long, arg5, long, subcode);
+
+      /* Register %esp/%rsp is read and modified by the syscall. */
+      VG_TRACK(pre_reg_read, Vg_CoreSysCall, tid, "door_return(sp)",
+               VG_O_STACK_PTR, sizeof(UWord));
+      /* Register %ebp/%rbp is not really read by the syscall, it is only
+         written by it, but it is hard to determine when it is written so we
+         make sure it is always valid prior to making the syscall. */
+      VG_TRACK(pre_reg_read, Vg_CoreSysCall, tid, "door_return(bp)",
+               VG_O_FRAME_PTR, sizeof(UWord));
+
+      door_return_pre_mem_data(tid, tst->os_state.door_return_procedure,
+                               (void *) ARG1, ARG2);
+
+      /* Do not tell the tool where the syscall is going to write the
+         resulting data.  It is necessary to skip this check because the data
+         area starting at ARG4-ARG5 (of length ARG5) is usually on a client
+         thread stack below the stack pointer and therefore it can be marked
+         by a tool (for example, Memcheck) as inaccessible.  It is ok to skip
+         this check in this case because if there is something wrong with the
+         data area then the syscall will fail or the error will be handled by
+         POST_MEM_WRITE() in the post wrapper. */
+      /*PRE_MEM_WRITE("door_return(sp)", ARG4 - ARG5, ARG5);*/
+
+      if (ARG3) {
+         vki_door_return_desc_t *desc_env = (vki_door_return_desc_t*)ARG3;
+
+         PRE_MEM_READ("door_return(desc_env)", ARG3,
+                      sizeof(vki_door_return_desc_t));
+
+         if (ML_(safe_to_deref)(desc_env, sizeof(*desc_env)) &&
+             desc_env->desc_ptr) {
+            Int rval;
+
+            PRE_MEM_READ("door_return(desc_env->desc_ptr)",
+                         (Addr)desc_env->desc_ptr,
+                         desc_env->desc_num * sizeof(*desc_env->desc_ptr));
+
+            rval = pre_check_and_close_fds(tid, "door_return",
+                                           desc_env->desc_ptr,
+                                           desc_env->desc_num);
+            if (rval)
+               SET_STATUS_Failure(rval);
+         }
+      }
+      tst->os_state.in_door_return = True;
+      tst->os_state.door_return_procedure = 0;
+      break;
+   case VKI_DOOR_GETPARAM:
+      PRE_REG_READ3(long, "door", long, arg1, long, arg2, long, arg3);
+      PRE_REG_READ_SIXTH_ONLY;
+      VG_(unimplemented)("DOOR_GETPARAM");
+      break;
+   case VKI_DOOR_SETPARAM:
+      PRE_REG_READ3(long, "door", long, arg1, long, arg2, long, arg3);
+      PRE_REG_READ_SIXTH_ONLY;
+      VG_(unimplemented)("DOOR_SETPARAM");
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the door call with subcode %ld.", SARG6);
+      /*NOTREACHED*/
+      break;
+   }
+
+#undef PRE_REG_READ_SIXTH_ONLY
+}
+
+POST(sys_door)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+
+   vg_assert(SUCCESS || FAILURE);
+
+   /* Alter the tst->os_state.in_door_return flag. */
+   if (ARG6 == VKI_DOOR_RETURN) {
+      vg_assert(tst->os_state.in_door_return == True);
+      tst->os_state.in_door_return = False;
+
+      /* Inform the tool that %esp/%rsp and %ebp/%rbp were (potentially)
+         modified. */
+      VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, VG_O_STACK_PTR,
+               sizeof(UWord));
+      VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, VG_O_FRAME_PTR,
+               sizeof(UWord));
+   }
+   else
+      vg_assert(tst->os_state.in_door_return == False);
+
+   if (FAILURE) {
+      if (VG_(clo_track_fds)) {
+         /* See the discussion in pre_check_and_close_fds() to understand this
+            part. */
+         Bool loss = False;
+         switch (ARG6 /*subcode*/) {
+         case VKI_DOOR_CALL:
+            if (ERR == VKI_EFAULT || ERR == VKI_EBADF)
+               loss = True;
+            break;
+         case VKI_DOOR_RETURN:
+            if (ERR == VKI_EFAULT || ERR == VKI_EINVAL)
+               loss = True;
+            break;
+         default:
+            break;
+         }
+         if (loss)
+            VG_(message)(Vg_UserMsg, "The door call failed with an "
+                                     "unexpected error and information "
+                                     "about open file descriptors can be "
+                                     "now imprecise.\n");
+      }
+
+      return;
+   }
+
+   vg_assert(SUCCESS);
+
+   switch (ARG6 /*subcode*/) {
+   case VKI_DOOR_CREATE:
+      door_record_server(tid, ARG1, RES);
+      break;
+   case VKI_DOOR_REVOKE:
+      door_revoke(tid, ARG1);
+      if (VG_(clo_track_fds))
+         ML_(record_fd_close)(ARG1);
+      break;
+   case VKI_DOOR_INFO:
+      POST_MEM_WRITE(ARG2, sizeof(vki_door_info_t));
+      break;
+   case VKI_DOOR_CALL:
+      {
+         /* Note that all returned values are stored in the rbuf, i.e.
+            data_ptr and desc_ptr points into this buffer. */
+         vki_door_arg_t *params = (vki_door_arg_t*)ARG2;
+
+         if (params->rbuf) {
+            Addr addr = (Addr)params->rbuf;
+            if (!VG_(am_find_anon_segment(addr))) {
+               /* This segment is new and was mapped by the kernel. */
+               UInt prot, flags;
+               SizeT size;
+
+               prot = VKI_PROT_READ | VKI_PROT_WRITE | VKI_PROT_EXEC;
+               flags = VKI_MAP_ANONYMOUS;
+               size = VG_PGROUNDUP(params->rsize);
+
+               VG_(debugLog)(1, "syswrap-solaris", "POST(sys_door), "
+                                "new segment: vaddr=%#lx, size=%#lx, "
+                                "prot=%#x, flags=%#x, fd=%ld, offset=%#llx\n",
+                                addr, size, prot, flags, (UWord)-1, (ULong)0);
+
+               ML_(notify_core_and_tool_of_mmap)(addr, size, prot, flags,
+                                                 -1, 0);
+
+               /* Note: We don't notify the debuginfo reader about this
+                  mapping because there are no debug information stored in
+                  this segment. */
+            }
+
+            door_call_post_mem_params_rbuf(tid, ARG1, (void *) addr,
+                                           params->rsize, params->desc_ptr,
+                                           params->desc_num);
+         }
+
+         if (params->desc_ptr) {
+            POST_MEM_WRITE((Addr)params->desc_ptr,
+                           params->desc_num * sizeof(vki_door_desc_t));
+            post_record_fds(tid, "door_call", params->desc_ptr,
+                            params->desc_num);
+         }
+      }
+      break;
+   case VKI_DOOR_BIND:
+      break;
+   case VKI_DOOR_UNBIND:
+      break;
+   case VKI_DOOR_UNREFSYS:
+      break;
+   case VKI_DOOR_UCRED:
+      break;
+   case VKI_DOOR_RETURN:
+      {
+         struct vki_door_results *results
+            = (struct vki_door_results*)VG_(get_SP)(tid);
+
+         tst->os_state.door_return_procedure = (Addr)results->pc;
+
+         POST_MEM_WRITE((Addr)results, sizeof(*results));
+         if (results->data_ptr)
+            door_return_post_mem_data(tid,
+                                      tst->os_state.door_return_procedure,
+                                      results->data_ptr,
+                                      results->data_size);
+         if (results->desc_ptr) {
+            POST_MEM_WRITE((Addr)results->desc_ptr,
+                           results->desc_num * sizeof(vki_door_desc_t));
+            post_record_fds(tid, "door_return", results->desc_ptr,
+                            results->desc_num);
+         }
+
+         POST_MEM_WRITE((Addr)results->door_info,
+                        sizeof(*results->door_info));
+      }
+      break;
+   case VKI_DOOR_GETPARAM:
+      break;
+   case VKI_DOOR_SETPARAM:
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_schedctl)
+{
+   /* caddr_t schedctl(void); */
+   /* This syscall returns an address that points to struct sc_shared.
+      This per-thread structure is used as an interface between the libc and
+      the kernel. */
+   PRINT("sys_schedctl ( )");
+   PRE_REG_READ0(long, "schedctl");
+}
+
+POST(sys_schedctl)
+{
+   Addr a = RES;
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+
+   /* Stay sane. */
+   vg_assert((tst->os_state.schedctl_data == 0) ||
+             (tst->os_state.schedctl_data == a));
+   tst->os_state.schedctl_data = a;
+
+   /* Returned address points to a block in a mapped page. */
+   if (!VG_(am_find_anon_segment(a))) {
+      Addr page = VG_PGROUNDDN(a);
+      UInt prot = VKI_PROT_READ | VKI_PROT_WRITE | VKI_PROT_EXEC;
+      UInt flags = VKI_MAP_ANONYMOUS;
+      /* The kernel always allocates one page for the sc_shared struct. */
+      SizeT size = VKI_PAGE_SIZE;
+
+      VG_(debugLog)(1, "syswrap-solaris", "POST(sys_schedctl), new segment: "
+                    "vaddr=%#lx, size=%#lx, prot=%#x, flags=%#x, fd=-1, "
+                    "offset=0\n", page, size, prot, flags);
+
+      /* The kernel always places redzone before and after the allocated page.
+         Check this assertion now; the tool can later request to allocate
+         a Valgrind segment and aspacemgr will place it adjacent. */
+      const NSegment *seg = VG_(am_find_nsegment(page - 1));
+      vg_assert(seg == NULL || seg->kind == SkResvn);
+      seg = VG_(am_find_nsegment(page + VKI_PAGE_SIZE));
+      vg_assert(seg == NULL || seg->kind == SkResvn);
+
+      /* The address space manager works with whole pages. */
+      VG_(am_notify_client_mmap)(page, size, prot, flags, -1, 0);
+
+      /* Note: It isn't needed to notify debuginfo about the new mapping
+         because it's only an anonymous mapping. */
+      /* Note: schedctl data are cleaned in two places:
+         - for the tool when the thread exits
+         - for the core in child's post-fork handler clean_schedctl_data(). */
+   }
+
+   /* The tool needs per-thread granularity, not whole pages. */
+   VG_TRACK(new_mem_mmap, a, sizeof(struct vki_sc_shared), True, True, True, 0);
+   POST_MEM_WRITE(a, sizeof(struct vki_sc_shared));
+}
+
+PRE(sys_pset)
+{
+   /* Kernel: int pset(int subcode, long arg1, long arg2, long arg3,
+                       long arg4); */
+   switch (ARG1 /* subcode */) {
+   case VKI_PSET_CREATE:
+      /* Libc: int pset_create(psetid_t *newpset); */
+      PRINT("sys_pset ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("pset", "create"), int, subcode,
+                    vki_psetid_t *, newpset);
+      PRE_MEM_WRITE("pset(newpset)", ARG2, sizeof(vki_psetid_t));
+      break;
+   case VKI_PSET_DESTROY:
+      /* Libc: int pset_destroy(psetid_t pset); */
+      PRINT("sys_pset ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("pset", "destroy"), int, subcode,
+                    vki_psetid_t, pset);
+      break;
+   case VKI_PSET_ASSIGN:
+      /* Libc: int pset_assign(psetid_t pset, processorid_t cpu,
+                               psetid_t *opset); */
+      PRINT("sys_pset ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+      PRE_REG_READ4(long, SC2("pset", "assign"), int, subcode,
+                    vki_psetid_t, pset, vki_processorid_t, cpu,
+                    vki_psetid_t *, opset);
+      if (ARG4 != 0)
+         PRE_MEM_WRITE("pset(opset)", ARG4, sizeof(vki_psetid_t));
+      break;
+   case VKI_PSET_INFO:
+      /* Libc: int pset_info(psetid_t pset, int *type, uint_t *numcpus,
+                             processorid_t *cpulist); */
+      PRINT("sys_pset ( %ld, %ld, %#lx, %#lx, %#lx )", SARG1, SARG2, ARG3,
+                                                       ARG4, ARG5);
+      PRE_REG_READ5(long, SC2("pset", "info"), int, subcode, vki_psetid_t, pset,
+                    int *, type, vki_uint_t *, numcpus,
+                    vki_processorid_t *, cpulist);
+      if (ARG3 != 0)
+         PRE_MEM_WRITE("pset(type)", ARG3, sizeof(int));
+      if (ARG4 != 0)
+         PRE_MEM_WRITE("pset(numcpus)", ARG4, sizeof(vki_uint_t));
+      if ((ARG4 != 0) && (ARG5 != 0)) {
+         vki_uint_t *numcpus = (vki_uint_t *) ARG4;
+         if (ML_(safe_to_deref(numcpus, sizeof(vki_uint_t)))) {
+            PRE_MEM_WRITE("pset(cpulist)", ARG5,
+                          *numcpus * sizeof(vki_processorid_t));
+            /* If cpulist buffer is not large enough, it will hold only as many
+               entries as fit in the buffer. However numcpus will contain the
+               real number of cpus which will be greater than originally passed
+               in. Stash the original value in unused ARG6. */
+            ARG6 = *numcpus;
+         }
+      }
+      break;
+   case VKI_PSET_BIND:
+      /* Libc: int pset_bind(psetid_t pset, idtype_t idtype, id_t id,
+                             psetid_t *opset); */
+      PRINT("sys_pset ( %ld, %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3,
+                                                     SARG4, ARG5);
+      PRE_REG_READ5(long, SC2("pset", "bind"), int, subcode, vki_psetid_t, pset,
+                    vki_idtype_t, idtype, vki_id_t, id, vki_psetid_t *, opset);
+      if (ARG5 != 0)
+         PRE_MEM_WRITE("pset(opset)", ARG5, sizeof(vki_psetid_t));
+      break;
+   case VKI_PSET_BIND_LWP:
+      /* Libc: int pset_bind_lwp(psetid_t pset, id_t id, pid_t pid,
+                                 psetid_t *opset); */
+      PRINT("sys_pset ( %ld, %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3,
+                                                     SARG4, ARG5);
+      PRE_REG_READ5(long, SC2("pset", "bind_lwp"), int, subcode,
+                    vki_psetid_t, pset, vki_id_t, id, vki_pid_t, pid,
+                    vki_psetid_t *, opset);
+      if (ARG5 != 0)
+         PRE_MEM_WRITE("pset(opset)", ARG5, sizeof(vki_psetid_t));
+      break;
+   case VKI_PSET_GETLOADAVG:
+      /* Libc: int pset_getloadavg(psetid_t pset, double loadavg[],
+                                   int nelem); */
+      PRINT("sys_pset ( %ld, %ld, %#lx, %ld )", SARG1, SARG2, ARG3, SARG4);
+      PRE_REG_READ4(long, SC2("pset", "getloadavg"), int, subcode,
+                    vki_psetid_t, pset, double, loadavg[], int, nelem);
+      if (ARG3 != 0)
+         PRE_MEM_WRITE("pset(loadavg)", ARG3, SARG4 * sizeof(double));
+      break;
+   case VKI_PSET_LIST:
+      /* Libc: int pset_list(psetid_t *psetlist, uint_t *numpsets); */
+      PRINT("sys_pset ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+      PRE_REG_READ3(long, SC2("pset", "list"), int, subcode,
+                    vki_psetid_t *, psetlist, vki_uint_t *, numpsets);
+      if (ARG3 != 0)
+         PRE_MEM_WRITE("pset(numpsets)", ARG3, sizeof(vki_uint_t));
+      if ((ARG2 != 0) && (ARG3 != 0)) {
+         vki_uint_t *numpsets = (vki_uint_t *) ARG3;
+         if (ML_(safe_to_deref(numpsets, sizeof(vki_uint_t)))) {
+            PRE_MEM_WRITE("pset(psetlist)", ARG2,
+                          *numpsets * sizeof(vki_psetid_t));
+            /* If psetlist buffer is not large enough, it will hold only as many
+               entries as fit in the buffer. However numpsets will contain the
+               real number of processor sets which will be greater than
+               originally passed in. Stash the original value in unused ARG6. */
+            ARG6 = *numpsets;
+         }
+      }
+      break;
+#  if defined(SOLARIS_PSET_GET_NAME)
+   case VKI_PSET_GET_NAME:
+      /* Libc: int pset_get_name(psetid_t psetid, char *buf, uint_t len); */
+      PRINT("sys_pset ( %ld, %ld, %#lx, %ld )", SARG1, SARG2, ARG3, SARG4);
+      PRE_REG_READ4(long, SC2("pset", "get_name"), int, subcode,
+                    vki_psetid_t, pset, char *, buf, vki_uint_t, len);
+      PRE_MEM_WRITE("pset(buf)", ARG3, ARG4);
+      break;
+#  endif /* SOLARIS_PSET_GET_NAME */
+   case VKI_PSET_SETATTR:
+      /* Libc: int pset_setattr(psetid_t pset, uint_t attr); */
+      PRINT("sys_pset ( %ld, %ld, %ld )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, SC2("pset", "setattr"), int, subcode,
+                    vki_psetid_t, pset, vki_uint_t, attr);
+      break;
+   case VKI_PSET_GETATTR:
+      /* Libc: int pset_getattr(psetid_t pset, uint_t *attr); */
+      PRINT("sys_pset ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRE_REG_READ3(long, SC2("pset", "getattr"), int, subcode,
+                    vki_psetid_t, pset, vki_uint_t *, attr);
+      PRE_MEM_WRITE("pset(attr)", ARG3, sizeof(vki_uint_t));
+      break;
+   case VKI_PSET_ASSIGN_FORCED:
+      /* Libc: int pset_assign_forced(psetid_t pset, processorid_t cpu,
+                                      psetid_t *opset); */
+      PRINT("sys_pset ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+      PRE_REG_READ4(long, SC2("pset", "assign_forced"), int, subcode,
+                    vki_psetid_t, pset, vki_processorid_t, cpu,
+                    vki_psetid_t *, opset);
+      if (ARG4 != 0)
+         PRE_MEM_WRITE("pset(opset)", ARG4, sizeof(vki_psetid_t));
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of pset syscall with subcode %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_pset)
+{
+   switch (ARG1 /*subcode*/) {
+   case VKI_PSET_CREATE:
+      POST_MEM_WRITE(ARG2, sizeof(vki_psetid_t));
+      break;
+   case VKI_PSET_DESTROY:
+      break;
+   case VKI_PSET_ASSIGN:
+      if (ARG4 != 0)
+         POST_MEM_WRITE(ARG4, sizeof(vki_psetid_t));
+      break;
+   case VKI_PSET_INFO:
+      if (ARG3 != 0)
+         POST_MEM_WRITE(ARG3, sizeof(int));
+      if (ARG4 != 0)
+         POST_MEM_WRITE(ARG4, sizeof(vki_uint_t));
+      if ((ARG4 != 0) && (ARG5 != 0)) {
+         vki_uint_t *numcpus = (vki_uint_t *) ARG4;
+         POST_MEM_WRITE(ARG5, MIN(*numcpus, ARG6) * sizeof(vki_processorid_t));
+      }
+      break;
+   case VKI_PSET_BIND:
+      if (ARG5 != 0)
+         POST_MEM_WRITE(ARG5, sizeof(vki_psetid_t));
+      break;
+   case VKI_PSET_BIND_LWP:
+      if (ARG5 != 0)
+         POST_MEM_WRITE(ARG5, sizeof(vki_psetid_t));
+      break;
+   case VKI_PSET_GETLOADAVG:
+      if (ARG3 != 0)
+         POST_MEM_WRITE(ARG3, MIN(SARG4, VKI_LOADAVG_NSTATS) * sizeof(double));
+      break;
+   case VKI_PSET_LIST:
+      if (ARG3 != 0)
+         POST_MEM_WRITE(ARG3, sizeof(vki_uint_t));
+      if ((ARG2 != 0) && (ARG3 != 0)) {
+         vki_uint_t *numpsets = (vki_uint_t *) ARG3;
+         POST_MEM_WRITE(ARG2, MIN(*numpsets, ARG6) * sizeof(vki_psetid_t));
+      }
+      break;
+#  if defined(SOLARIS_PSET_GET_NAME)
+   case VKI_PSET_GET_NAME:
+      POST_MEM_WRITE(ARG3, VG_(strlen)((HChar *) ARG3) + 1);
+      break;
+#  endif /* SOLARIS_PSET_GET_NAME */
+   case VKI_PSET_SETATTR:
+      break;
+   case VKI_PSET_GETATTR:
+      POST_MEM_WRITE(ARG3, sizeof(vki_uint_t));
+      break;
+   case VKI_PSET_ASSIGN_FORCED:
+      if (ARG4 != 0)
+         POST_MEM_WRITE(ARG4, sizeof(vki_psetid_t));
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_resolvepath)
+{
+   /* int resolvepath(const char *path, char *buf, size_t bufsiz); */
+   PRINT("sys_resolvepath ( %#lx(%s), %#lx, %lu )", ARG1, (HChar *) ARG1, ARG2,
+         ARG3);
+   PRE_REG_READ3(long, "resolvepath", const char *, path, char *, buf,
+                 vki_size_t, bufsiz);
+
+   PRE_MEM_RASCIIZ("resolvepath(path)", ARG1);
+   PRE_MEM_WRITE("resolvepath(buf)", ARG2, ARG3);
+}
+
+POST(sys_resolvepath)
+{
+   POST_MEM_WRITE(ARG2, RES);
+}
+
+PRE(sys_lwp_mutex_timedlock)
+{
+   /* int lwp_mutex_timedlock(lwp_mutex_t *lp, timespec_t *tsp,
+                              uintptr_t owner); */
+   vki_lwp_mutex_t *lp = (vki_lwp_mutex_t *)ARG1;
+   *flags |= SfMayBlock;
+   PRINT("lwp_mutex_timedlock ( %#lx, %#lx, %#lx )", ARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "lwp_mutex_timedlock", lwp_mutex_t *, lp,
+                 timespec_t *, tsp, uintptr_t, owner);
+
+   PRE_FIELD_READ("lwp_mutex_timedlock(lp->mutex_flag)", lp->vki_mutex_flag);
+   PRE_FIELD_READ("lwp_mutex_timedlock(lp->mutex_type)", lp->vki_mutex_type);
+   PRE_FIELD_WRITE("lwp_mutex_timedlock(lp->mutex_owner)",
+                   lp->vki_mutex_owner);
+   PRE_FIELD_WRITE("lwp_mutex_timedlock(lp->mutex_ownerpid)",
+                   lp->vki_mutex_ownerpid);
+   PRE_FIELD_READ("lwp_mutex_timedlock(lp->mutex_lockw)", lp->vki_mutex_lockw);
+   /*PRE_FIELD_WRITE("lwp_mutex_timedlock(lp->mutex_lockw)",
+                     lp->vki_mutex_lockw);*/
+   PRE_FIELD_READ("lwp_mutex_timedlock(lp->mutex_waiters)",
+                  lp->vki_mutex_waiters);
+   /*PRE_FIELD_WRITE("lwp_mutex_timedlock(lp->mutex_waiters)",
+                     lp->vki_mutex_waiters);*/
+   if (ARG2) {
+      PRE_MEM_READ("lwp_mutex_timedlock(tsp)", ARG2, sizeof(vki_timespec_t));
+      /*PRE_MEM_WRITE("lwp_mutex_timedlock(tsp)", ARG2,
+                      sizeof(vki_timespec_t));*/
+   }
+}
+
+POST(sys_lwp_mutex_timedlock)
+{
+   vki_lwp_mutex_t *lp = (vki_lwp_mutex_t *)ARG1;
+   POST_FIELD_WRITE(lp->vki_mutex_owner);
+   POST_FIELD_WRITE(lp->vki_mutex_ownerpid);
+   POST_FIELD_WRITE(lp->vki_mutex_lockw);
+   POST_FIELD_WRITE(lp->vki_mutex_waiters);
+   if (ARG2)
+      POST_MEM_WRITE(ARG2, sizeof(vki_timespec_t));
+}
+
+PRE(sys_lwp_rwlock_sys)
+{
+   /* int lwp_rwlock_sys(int subcode, lwp_rwlock_t *rwlp, timespec_t *tsp); */
+   vki_lwp_rwlock_t *rwlp = (vki_lwp_rwlock_t *)ARG2;
+   switch (ARG1 /*subcode*/) {
+   case 0:
+   case 1:
+   case 2:
+   case 3:
+      *flags |= SfMayBlock;
+      switch (ARG1 /*subcode*/) {
+      case 0:
+         PRINT("sys_lwp_rwlock ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+         PRE_REG_READ3(long, SC2("lwp_rwlock", "rdlock"), int, subcode,
+                       lwp_rwlock_t *, rwlp, timespec_t *, tsp);
+         break;
+      case 1:
+         PRINT("sys_lwp_rwlock ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+         PRE_REG_READ3(long, SC2("lwp_rwlock", "wrlock"), int, subcode,
+                       lwp_rwlock_t *, rwlp, timespec_t *, tsp);
+         break;
+      case 2:
+         PRINT("sys_lwp_rwlock ( %ld, %#lx )", SARG1, ARG2);
+         PRE_REG_READ2(long, SC2("lwp_rwlock", "tryrdlock"), int, subcode,
+                       lwp_rwlock_t *, rwlp);
+         break;
+      case 3:
+         PRINT("sys_lwp_rwlock ( %ld, %#lx )", SARG1, ARG2);
+         PRE_REG_READ2(long, SC2("lwp_rwlock", "trywrlock"), int, subcode,
+                       lwp_rwlock_t *, rwlp);
+         break;
+      default:
+         vg_assert(0);
+         break;
+      }
+
+      PRE_FIELD_READ("lwp_rwlock(rwlp->rwlock_type)", rwlp->vki_rwlock_type);
+      PRE_FIELD_READ("lwp_rwlock(rwlp->rwlock_readers)",
+                     rwlp->vki_rwlock_readers);
+      /*PRE_FIELD_WRITE("lwp_rwlock(rwlp->rwlock_readers)",
+                        rwlp->vki_rwlock_readers);*/
+
+      PRE_FIELD_READ("lwp_rwlock(rwlp->mutex.mutex_type)",
+                     rwlp->mutex.vki_mutex_type);
+      PRE_FIELD_WRITE("lwp_rwlock(rwlp->mutex.mutex_owner)",
+                      rwlp->mutex.vki_mutex_owner);
+      PRE_FIELD_WRITE("lwp_rwlock(rwlp->mutex.mutex_ownerpid)",
+                      rwlp->mutex.vki_mutex_ownerpid);
+      /* The mutex_lockw member is not really read by the kernel for this
+         syscall but it seems better to mark it that way because when locking
+         an rwlock the associated mutex has to be locked. */
+      PRE_FIELD_READ("lwp_rwlock(rwlp->mutex.mutex_lockw)",
+                     rwlp->mutex.vki_mutex_lockw);
+      /*PRE_FIELD_WRITE("lwp_rwlock(rwlp->mutex.mutex_lockw)",
+                        rwlp->mutex.vki_mutex_lockw);*/
+      PRE_FIELD_READ("lwp_rwlock(rwlp->mutex.mutex_waiters)",
+                     rwlp->mutex.vki_mutex_waiters);
+      /*PRE_FIELD_WRITE("lwp_rwlock(rwlp->mutex.mutex_waiters)",
+                        rwlp->mutex.vki_mutex_waiters);*/
+
+      if ((ARG1 == 0 || ARG1 == 1) && ARG3)
+         PRE_MEM_READ("lwp_rwlock(tsp)", ARG3, sizeof(vki_timespec_t));
+      break;
+   case 4:
+      PRINT("sys_lwp_rwlock( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("lwp_rwlock", "unlock"), int, subcode,
+                    lwp_rwlock_t *, rwlp);
+      PRE_FIELD_READ("lwp_rwlock(rwlp->mutex.mutex_type)",
+                     rwlp->mutex.vki_mutex_type);
+      PRE_FIELD_READ("lwp_rwlock(rwlp->rwlock_readers)",
+                     rwlp->vki_rwlock_readers);
+      /*PRE_FIELD_WRITE("lwp_rwlock(rwlp->rwlock_readers)",
+                        rwlp->vki_rwlock_readers);*/
+      break;
+   default:
+      VG_(unimplemented)("Syswrap of the lwp_rwlock_sys call with subcode %ld.",
+                         SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+}
+
+POST(sys_lwp_rwlock_sys)
+{
+   vki_lwp_rwlock_t *rwlp = (vki_lwp_rwlock_t *)ARG2;
+   switch (ARG1 /*subcode*/) {
+   case 0:
+   case 1:
+   case 2:
+   case 3:
+      POST_FIELD_WRITE(rwlp->vki_rwlock_readers);
+      POST_FIELD_WRITE(rwlp->vki_rwlock_owner);
+      POST_FIELD_WRITE(rwlp->vki_rwlock_ownerpid);
+      POST_FIELD_WRITE(rwlp->mutex.vki_mutex_lockw);
+      POST_FIELD_WRITE(rwlp->mutex.vki_mutex_waiters);
+      break;
+   case 4:
+      POST_FIELD_WRITE(rwlp->vki_rwlock_readers);
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_lwp_sema_timedwait)
+{
+   /* int lwp_sema_timedwait(lwp_sema_t *sema, timespec_t *timeout,
+                             int check_park); */
+   vki_lwp_sema_t *sema = (vki_lwp_sema_t*)ARG1;
+   *flags |= SfMayBlock;
+   PRINT("sys_lwp_sema_timewait ( %#lx, %#lx, %ld )", ARG1, ARG2, SARG3);
+   PRE_REG_READ3(long, "lwp_sema_timedwait", lwp_sema_t *, sema,
+                 timespec_t *, timeout, int, check_park);
+
+   PRE_FIELD_READ("lwp_sema_timedwait(sema->type)", sema->vki_sema_type);
+   PRE_FIELD_READ("lwp_sema_timedwait(sema->count)", sema->vki_sema_count);
+   /*PRE_FIELD_WRITE("lwp_sema_timedwait(sema->count)",
+                     sema->vki_sema_count);*/
+   PRE_FIELD_READ("lwp_sema_timedwait(sema->waiters)", sema->vki_sema_waiters);
+   /*PRE_FIELD_WRITE("lwp_sema_timedwait(sema->waiters)",
+                     sema->vki_sema_waiters);*/
+   if (ARG2) {
+      PRE_MEM_READ("lwp_sema_timedwait(timeout)", ARG2,
+                   sizeof(vki_timespec_t));
+      /*PRE_MEM_WRITE("lwp_sema_timedwait(timeout)", ARG2,
+                      sizeof(vki_timespec_t));*/
+   }
+}
+
+POST(sys_lwp_sema_timedwait)
+{
+   vki_lwp_sema_t *sema = (vki_lwp_sema_t*)ARG1;
+   POST_FIELD_WRITE(sema->vki_sema_count);
+   POST_FIELD_WRITE(sema->vki_sema_waiters);
+   if (ARG2)
+      POST_MEM_WRITE(ARG2, sizeof(vki_timespec_t));
+}
+
+PRE(sys_zone)
+{
+   /* Kernel: long zone(int cmd, void *arg1, void *arg2, void *arg3,
+                        void *arg4);
+    */
+   switch (ARG1 /*cmd*/) {
+   case VKI_ZONE_CREATE:
+      /* Libc: zoneid_t zone_create(const char *name, const char *root,
+                                    const struct priv_set *privs,
+                                    const char *rctls, size_t rctlsz,
+                                    const char *zfs, size_t zfssz,
+                                    int *extended_error, int match,
+                                    int doi, const bslabel_t *label,
+                                    int flags);
+        Kernel: zoneid_t zone_create(zone_def *zd);
+       */
+      PRINT("sys_zone ( %ld, %#lx )", SARG1, ARG2);
+      PRE_REG_READ2(long, SC2("zone", "create"), int, cmd,
+                    vki_zone_def *, zd);
+
+      vki_zone_def *zd = (vki_zone_def *) ARG2;
+      PRE_FIELD_READ("zone(zd.zone_name)", zd->zone_name);
+      PRE_FIELD_READ("zone(zd.zone_root)", zd->zone_root);
+      PRE_FIELD_READ("zone(zd.zone_privs)", zd->zone_privs);
+      PRE_FIELD_READ("zone(zd.zone_privssz)", zd->zone_privssz);
+      PRE_FIELD_READ("zone(zd.rctlbuf)", zd->rctlbuf);
+      PRE_FIELD_READ("zone(zd.rctlbufsz)", zd->rctlbufsz);
+      PRE_FIELD_READ("zone(zd.zfsbuf)", zd->zfsbuf);
+      PRE_FIELD_READ("zone(zd.zfsbufsz)", zd->zfsbufsz);
+      PRE_FIELD_READ("zone(zd.extended_error)", zd->extended_error);
+      PRE_FIELD_READ("zone(zd.match)", zd->match);
+      PRE_FIELD_READ("zone(zd.doi)", zd->doi);
+      PRE_FIELD_READ("zone(zd.label)", zd->label);
+      PRE_FIELD_READ("zone(zd.flags)", zd->flags);
+
+      if (ML_(safe_to_deref((void *)ARG2, sizeof(vki_zone_def)))) {
+         if (zd->zone_name)
+            PRE_MEM_RASCIIZ("zone(zd.zone_name)", (Addr) zd->zone_name);
+         if (zd->zone_root)
+            PRE_MEM_RASCIIZ("zone(zd.zone_root)", (Addr) zd->zone_root);
+         PRE_MEM_READ("zone(zd.zone_privs)", (Addr) zd->zone_privs,
+                      zd->zone_privssz);
+         PRE_MEM_READ("zone(zd.rctlbuf)", (Addr) zd->rctlbuf,
+                      zd->rctlbufsz);
+         PRE_MEM_READ("zone(zd.zfsbuf)",
+                      (Addr) zd->zfsbuf, zd->zfsbufsz);
+         if (zd->label)
+            PRE_MEM_READ("zone(zd.label)", (Addr) zd->label,
+                         sizeof(vki_bslabel_t));
+      }
+      break;
+   case VKI_ZONE_DESTROY:
+      /* Libc: int zone_destroy(zoneid_t zoneid); */
+      PRINT("sys_zone ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("zone", "destroy"), int, cmd,
+                    vki_zoneid_t, zoneid);
+      break;
+   case VKI_ZONE_GETATTR:
+      /* Libc: ssize_t zone_getattr(zoneid_t zoneid, int attr,
+                                    void *valp, size_t size);
+       */
+      PRINT("sys_zone ( %ld, %ld, %ld, %#lx, %ld )",
+            SARG1, SARG2, SARG3, ARG4, SARG5);
+      PRE_REG_READ5(long, SC2("zone", "getattr"), int, cmd,
+                    vki_zoneid_t, zoneid, int, attr, void *, valp,
+                    vki_size_t, size);
+      PRE_MEM_WRITE("zone(valp)", ARG4, ARG5);
+      break;
+   case VKI_ZONE_ENTER:
+      /* Libc: int zone_enter(zoneid_t zoneid); */
+      PRINT("sys_zone ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("zone", "enter"), int, cmd,
+                    vki_zoneid_t, zoneid);
+      break;
+   case VKI_ZONE_LIST:
+      /* Libc: int zone_list(zoneid_t *zonelist, uint_t *numzones); */
+      PRINT("sys_zone ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+      PRE_REG_READ3(long, SC2("zone", "list"), int, cmd,
+                    vki_zoneid_t *, zonelist, vki_uint_t *, numzones);
+
+      PRE_MEM_WRITE("zone(numzones)", ARG3, sizeof(vki_uint_t));
+
+      if (ML_(safe_to_deref((void *) ARG3, sizeof(vki_uint_t)))) {
+         if (ARG2)
+            PRE_MEM_WRITE("zone(zonelist)", ARG2,
+                          *(vki_uint_t *) ARG3 * sizeof(vki_zoneid_t));
+      }
+      break;
+   case VKI_ZONE_SHUTDOWN:
+      /* Libc: int zone_shutdown(zoneid_t zoneid); */
+      PRINT("sys_zone ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("zone", "shutdown"), int, cmd,
+                    vki_zoneid_t, zoneid);
+      break;
+   case VKI_ZONE_LOOKUP:
+      /* Libc: zoneid_t zone_lookup(const char *name); */
+      PRINT("sys_zone ( %ld, %#lx(%s) )", SARG1, ARG2, (HChar *) ARG2);
+      PRE_REG_READ2(long, SC2("zone", "lookup"), int, cmd,
+                    const char *, name);
+      if (ARG2)
+         PRE_MEM_RASCIIZ("zone(name)", ARG2);
+      break;
+   case VKI_ZONE_BOOT:
+      /* Libc: int zone_boot(zoneid_t zoneid); */
+      PRINT("sys_zone ( %ld, %ld )", SARG1, SARG2);
+      PRE_REG_READ2(long, SC2("zone", "boot"), int, cmd,
+                    vki_zoneid_t, zoneid);
+      break;
+   case VKI_ZONE_SETATTR:
+      /* Libc: int zone_setattr(zoneid_t zoneid, int attr, void *valp,
+                                size_t size);
+       */
+      PRINT("sys_zone ( %ld, %ld, %ld, %#lx, %lu )",
+            SARG1, SARG2, SARG3, ARG4, ARG5);
+      PRE_REG_READ5(long, SC2("zone", "setattr"), int, cmd,
+                    vki_zoneid_t, zoneid, int, attr, void *, valp,
+                    vki_size_t, size);
+      PRE_MEM_READ("zone(valp)", ARG4, ARG5);
+      break;
+   case VKI_ZONE_ADD_DATALINK:
+      /* Libc: int zone_add_datalink(zoneid_t zoneid,
+                                     datalink_id_t linkid);
+       */
+      PRINT("sys_zone ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+      PRE_REG_READ3(long, SC2("zone", "add_datalink"), int, cmd,
+                    vki_zoneid_t, zoneid, vki_datalink_id_t, linkid);
+      break;
+   case VKI_ZONE_DEL_DATALINK:
+      /* Libc: int zone_remove_datalink(zoneid_t zoneid,
+                                        datalink_id_t linkid);
+       */
+      PRINT("sys_zone ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+      PRE_REG_READ3(long, SC2("zone", "del_datalink"), int, cmd,
+                    vki_zoneid_t, zoneid, vki_datalink_id_t, linkid);
+      break;
+   case VKI_ZONE_CHECK_DATALINK:
+      /* Libc: int zone_check_datalink(zoneid_t *zoneidp,
+                                       datalink_id_t linkid);
+      */
+      PRINT("sys_zone ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+      PRE_REG_READ3(long, SC2("zone", "check_datalink"), int, cmd,
+                    vki_zoneid_t *, zoneidp, vki_datalink_id_t, linkid);
+      PRE_MEM_WRITE("zone(zoneidp)", ARG2, sizeof(vki_zoneid_t));
+      break;
+   case VKI_ZONE_LIST_DATALINK:
+      /* Libc: int zone_list_datalink(zoneid_t zoneid, int *dlnump,
+                                      datalink_id_t *linkids);
+       */
+      PRINT("sys_zone ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4);
+      PRE_REG_READ4(long, SC2("zone", "list_datalink"), int, cmd,
+                    vki_zoneid_t, zoneid, int *, dlnump,
+                    vki_datalink_id_t *, linkids);
+
+      PRE_MEM_WRITE("zone(dlnump)", ARG3, sizeof(int));
+      if (ML_(safe_to_deref((void *) ARG3, sizeof(int)))) {
+         if (ARG4)
+            PRE_MEM_WRITE("zone(linkids)", ARG4,
+                          *(int *) ARG3 * sizeof(vki_datalink_id_t));
+      }
+      break;
+#if defined(SOLARIS_ZONE_DEFUNCT)
+   case VKI_ZONE_LIST_DEFUNCT:
+      /* Libc: int zone_list_defunct(uint64_t *uniqidlist,
+                                     uint_t *numzones);
+       */
+      PRINT("sys_zone ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+      PRE_REG_READ3(long, SC2("zone", "list_defunct"), int, cmd,
+                    vki_uint64_t *, uniqidlist, vki_uint_t *, numzones);
+
+      PRE_MEM_WRITE("zone(numzones)", ARG3, sizeof(vki_uint_t));
+
+      if (ML_(safe_to_deref((void *) ARG3, sizeof(vki_uint_t)))) {
+         if (ARG2)
+            PRE_MEM_WRITE("zone(uniqidlist)", ARG2,
+                          *(vki_uint_t *) ARG3 * sizeof(vki_uint64_t));
+      }
+      break;
+   case VKI_ZONE_GETATTR_DEFUNCT:
+      /* Libc: ssize_t zone_getattr_defunct(uint64_t uniqid, int attr,
+                                            void *valp, size_t size);
+         Kernel: ssize_t zone_getattr_defunct(uint64_t *uniqid, int attr,
+                                              void *valp, size_t size);
+       */
+      PRINT("sys_zone ( %ld, %#lx, %ld, %#lx, %lu )",
+            SARG1, ARG2, SARG3, ARG4, ARG5);
+      PRE_REG_READ5(long, SC2("zone", "getattr_defunct"), int, cmd,
+                    vki_uint64_t *, uniqid, int, attr,
+                    void *, valp, vki_size_t, size);
+
+      PRE_MEM_READ("zone(uniqid)", ARG2, sizeof(vki_uint64_t));
+      PRE_MEM_WRITE("zone(valp)", ARG4, ARG5);
+      break;
+#endif /* SOLARIS_ZONE_DEFUNCT */
+   default:
+      VG_(unimplemented)("Syswrap of the zone call with cmd %ld.", SARG1);
+      /*NOTREACHED*/
+      break;
+   }
+
+}
+
+POST(sys_zone)
+{
+   switch (ARG1 /*cmd*/) {
+   case VKI_ZONE_CREATE:
+   case VKI_ZONE_DESTROY:
+      break;
+   case VKI_ZONE_GETATTR:
+      POST_MEM_WRITE(ARG4, MIN(RES, ARG5));
+      break;
+   case VKI_ZONE_ENTER:
+      break;
+   case VKI_ZONE_LIST:
+      POST_MEM_WRITE(ARG2, *(vki_uint_t *) ARG3 * sizeof(vki_zoneid_t));
+      break;
+   case VKI_ZONE_SHUTDOWN:
+   case VKI_ZONE_LOOKUP:
+   case VKI_ZONE_BOOT:
+   case VKI_ZONE_SETATTR:
+   case VKI_ZONE_ADD_DATALINK:
+   case VKI_ZONE_DEL_DATALINK:
+      break;
+   case VKI_ZONE_CHECK_DATALINK:
+      POST_MEM_WRITE(ARG2, sizeof(vki_zoneid_t));
+      break;
+   case VKI_ZONE_LIST_DATALINK:
+      POST_MEM_WRITE(ARG4, *(int *) ARG3 * sizeof(vki_datalink_id_t));
+      break;
+#if defined(SOLARIS_ZONE_DEFUNCT)
+   case VKI_ZONE_LIST_DEFUNCT:
+      POST_MEM_WRITE(ARG2, *(vki_uint_t *) ARG3 * sizeof(vki_uint64_t));
+      break;
+   case VKI_ZONE_GETATTR_DEFUNCT:
+      POST_MEM_WRITE(ARG4, MIN(RES, ARG5));
+      break;
+#endif /* SOLARIS_ZONE_DEFUNCT */
+   default:
+      vg_assert(0);
+      break;
+   }
+}
+
+PRE(sys_getcwd)
+{
+   /* int getcwd(char *buf, size_t size); */
+   /* Note: Generic getcwd() syswrap can't be used because it expects
+      a different return value. */
+   PRINT("sys_getcwd ( %#lx, %lu )", ARG1, ARG2);
+   PRE_REG_READ2(long, "getcwd", char *, buf, vki_size_t, size);
+   PRE_MEM_WRITE("getcwd(buf)", ARG1, ARG2);
+}
+
+POST(sys_getcwd)
+{
+   POST_MEM_WRITE(ARG1, VG_(strlen)((HChar*)ARG1) + 1);
+}
+
+PRE(sys_so_socket)
+{
+   /* int so_socket(int family, int type, int protocol, char *devpath,
+                    int version); */
+   PRINT("sys_so_socket ( %ld, %ld, %ld, %#lx(%s), %ld)", SARG1, SARG2, SARG3,
+         ARG4, (HChar *) ARG4, SARG5);
+   PRE_REG_READ5(long, "socket", int, family, int, type, int, protocol,
+                 char *, devpath, int, version);
+   if (ARG4)
+      PRE_MEM_RASCIIZ("socket(devpath)", ARG4);
+}
+
+POST(sys_so_socket)
+{
+   SysRes r;
+   r = ML_(generic_POST_sys_socket)(tid, VG_(mk_SysRes_Success)(RES));
+   SET_STATUS_from_SysRes(r);
+}
+
+PRE(sys_so_socketpair)
+{
+   /* int so_socketpair(int sv[2]); */
+   /* This syscall is used to connect two already created sockets together. */
+   PRINT("sys_so_socketpair ( %#lx )", ARG1);
+   PRE_REG_READ1(long, "socketpair", int *, sv);
+   PRE_MEM_READ("socketpair(sv)", ARG1, 2 * sizeof(int));
+   /*PRE_MEM_WRITE("socketpair(sv)", ARG1, 2 * sizeof(int));*/
+   if (ML_(safe_to_deref)((void*)ARG1, 2 * sizeof(int))) {
+      int *fds = (int*)ARG1;
+      if (!ML_(fd_allowed)(fds[0], "socketpair", tid, False))
+         SET_STATUS_Failure(VKI_EBADF);
+      else if (!ML_(fd_allowed)(fds[1], "socketpair", tid, False))
+         SET_STATUS_Failure(VKI_EBADF);
+   }
+}
+
+POST(sys_so_socketpair)
+{
+   /* The kernel can return new file descriptors, in such a case we have to
+      validate them. */
+   int *fds = (int*)ARG1;
+   POST_MEM_WRITE(ARG1, 2 * sizeof(int));
+   if (!ML_(fd_allowed)(fds[0], "socketpair", tid, True))
+      SET_STATUS_Failure(VKI_EMFILE);
+   if (!ML_(fd_allowed)(fds[1], "socketpair", tid, True))
+      SET_STATUS_Failure(VKI_EMFILE);
+   if (FAILURE) {
+      /* One or both of the file descriptors weren't allowed, close newly
+         created file descriptors but don't close the already recorded
+         ones. */
+      if (!ML_(fd_recorded)(fds[0]))
+         VG_(close)(fds[0]);
+      if (!ML_(fd_recorded)(fds[1]))
+         VG_(close)(fds[1]);
+   }
+   else if (VG_(clo_track_fds)) {
+      /* Everything went better than expected, record the newly created file
+         descriptors.  Note: If the kernel actually returns the original file
+         descriptors, then ML_(record_fd_open_nameless) notices that these
+         file descriptors have been already recorded. */
+      ML_(record_fd_open_nameless)(tid, fds[0]);
+      ML_(record_fd_open_nameless)(tid, fds[1]);
+   }
+}
+
+PRE(sys_bind)
+{
+   /* int bind(int s, struct sockaddr *name, socklen_t namelen,
+               int version); */
+   PRINT("sys_bind ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "bind", int, s, struct sockaddr *, name,
+                 vki_socklen_t, namelen, int, version);
+   ML_(generic_PRE_sys_bind)(tid, ARG1, ARG2, ARG3);
+}
+
+PRE(sys_listen)
+{
+   /* int listen(int s, int backlog, int version); */
+   PRINT("sys_listen ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+   PRE_REG_READ3(long, "listen", int, s, int, backlog, int, version);
+}
+
+PRE(sys_accept)
+{
+#if defined(SOLARIS_NEW_ACCEPT_SYSCALL)
+   /* int accept(int s, struct sockaddr *addr, socklen_t *addrlen,
+                 int version, int flags); */
+   *flags |= SfMayBlock;
+   PRINT("sys_accept ( %ld, %#lx, %#lx, %ld, %ld )", SARG1, ARG2, ARG3, SARG4,
+         SARG5);
+   PRE_REG_READ5(long, "accept", int, s, struct sockaddr *, addr,
+                 socklen_t *, addrlen, int, version, int, flags);
+#else
+   /* int accept(int s, struct sockaddr *addr, socklen_t *addrlen,
+                 int version); */
+   *flags |= SfMayBlock;
+   PRINT("sys_accept ( %ld, %#lx, %#lx, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "accept", int, s, struct sockaddr *, addr,
+                 socklen_t *, addrlen, int, version);
+#endif /* SOLARIS_NEW_ACCEPT_SYSCALL */
+   ML_(generic_PRE_sys_accept)(tid, ARG1, ARG2, ARG3);
+}
+
+POST(sys_accept)
+{
+   SysRes r;
+   r = ML_(generic_POST_sys_accept)(tid, VG_(mk_SysRes_Success)(RES),
+                                    ARG1, ARG2, ARG3);
+   SET_STATUS_from_SysRes(r);
+}
+
+PRE(sys_connect)
+{
+   /* int connect(int s, struct sockaddr *name, socklen_t namelen,
+                  int version); */
+   *flags |= SfMayBlock;
+   PRINT("sys_connect ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "connect", int, s, struct sockaddr *, name,
+                 vki_socklen_t, namelen, int, version);
+   ML_(generic_PRE_sys_connect)(tid, ARG1, ARG2, ARG3);
+}
+
+PRE(sys_shutdown)
+{
+   /* Kernel: int shutdown(int sock, int how, int version);
+      Libc:   int shutdown(int sock, int how);
+    */
+   *flags |= SfMayBlock;
+   PRINT("sys_shutdown ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+   PRE_REG_READ3(int, "shutdown", int, sock, int, how, int, version);
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "shutdown", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_recv)
+{
+   /* ssize_t recv(int s, void *buf, size_t len, int flags); */
+   *flags |= SfMayBlock;
+   PRINT("sys_recv ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "recv", int, s, void *, buf, vki_size_t, len,
+                 int, flags);
+   ML_(generic_PRE_sys_recv)(tid, ARG1, ARG2, ARG3);
+}
+
+POST(sys_recv)
+{
+   ML_(generic_POST_sys_recv)(tid, RES, ARG1, ARG2, ARG3);
+}
+
+PRE(sys_recvfrom)
+{
+   /* ssize_t recvfrom(int s, void *buf, size_t len, int flags,
+                       struct sockaddr *from, socklen_t *fromlen); */
+   *flags |= SfMayBlock;
+   PRINT("sys_recvfrom ( %ld, %#lx, %lu, %ld, %#lx, %#lx )", SARG1, ARG2, ARG3,
+         SARG4, ARG5, ARG6);
+   PRE_REG_READ6(long, "recvfrom", int, s, void *, buf, vki_size_t, len,
+                 int, flags, struct sockaddr *, from, socklen_t *, fromlen);
+   ML_(generic_PRE_sys_recvfrom)(tid, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+}
+
+POST(sys_recvfrom)
+{
+   ML_(generic_POST_sys_recvfrom)(tid, VG_(mk_SysRes_Success)(RES),
+                                  ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+}
+
+PRE(sys_recvmsg)
+{
+   /* ssize_t recvmsg(int s, struct msghdr *msg, int flags); */
+   *flags |= SfMayBlock;
+   PRINT("sys_recvmsg ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+   PRE_REG_READ3(long, "recvmsg", int, s, struct msghdr *, msg, int, flags);
+   ML_(generic_PRE_sys_recvmsg)(tid, "msg", (struct vki_msghdr*)ARG2);
+}
+
+POST(sys_recvmsg)
+{
+   ML_(generic_POST_sys_recvmsg)(tid, "msg", (struct vki_msghdr*)ARG2, RES);
+}
+
+PRE(sys_send)
+{
+   /* ssize_t send(int s, const void *msg, size_t len, int flags); */
+   *flags |= SfMayBlock;
+   PRINT("sys_send ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "send", int, s, const void *, msg, vki_size_t, len,
+                 int, flags);
+   ML_(generic_PRE_sys_send)(tid, ARG1, ARG2, ARG3);
+}
+
+PRE(sys_sendmsg)
+{
+   /* ssize_t sendmsg(int s, const struct msghdr *msg, int flags); */
+   *flags |= SfMayBlock;
+   PRINT("sys_sendmsg ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+   PRE_REG_READ3(long, "sendmsg", int, s, const struct msghdr *, msg,
+                 int, flags);
+   ML_(generic_PRE_sys_sendmsg)(tid, "msg", (struct vki_msghdr*)ARG2);
+}
+
+PRE(sys_sendto)
+{
+   /* ssize_t sendto(int s, const void *msg, size_t len, int flags,
+                     const struct sockaddr *to, int tolen); */
+   *flags |= SfMayBlock;
+   PRINT("sys_sendto ( %ld, %#lx, %lu, %ld, %#lx, %ld )", SARG1, ARG2, ARG3,
+         SARG4, ARG5, SARG6);
+   PRE_REG_READ6(long, "sendto", int, s, const void *, msg, vki_size_t, len,
+                 int, flags, const struct sockaddr *, to, int, tolen);
+   ML_(generic_PRE_sys_sendto)(tid, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+}
+
+PRE(sys_getpeername)
+{
+   /* Kernel: int getpeername(int s, struct sockaddr *name,
+                              socklen_t *namelen, int version);
+      Libc:   int getpeername(int s, struct sockaddr *name,
+                              socklen_t *namelen);
+    */
+   *flags |= SfMayBlock;
+   PRINT("sys_getpeername ( %ld, %#lx, %#lx, %ld )",
+         SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "getpeername", int, s, struct vki_sockaddr *, name,
+                 vki_socklen_t *, namelen, int, version);
+   ML_(buf_and_len_pre_check)(tid, ARG2, ARG3, "getpeername(name)",
+                              "getpeername(namelen)");
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "getpeername", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_getpeername)
+{
+   ML_(buf_and_len_post_check)(tid, VG_(mk_SysRes_Success)(RES),
+                               ARG2, ARG3, "getpeername(namelen)");
+}
+
+PRE(sys_getsockname)
+{
+   /* int getsockname(int s, struct sockaddr *name, socklen_t *namelen,
+                      int version); */
+   PRINT("sys_getsockname ( %ld, %#lx, %#lx, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "getsockname", int, s, struct sockaddr *, name,
+                 socklen_t *, namelen, int, version);
+   ML_(generic_PRE_sys_getsockname)(tid, ARG1, ARG2, ARG3);
+}
+
+POST(sys_getsockname)
+{
+   ML_(generic_POST_sys_getsockname)(tid, VG_(mk_SysRes_Success)(RES),
+                                     ARG1, ARG2, ARG3);
+}
+
+PRE(sys_getsockopt)
+{
+   /* int getsockopt(int s, int level, int optname, void *optval,
+                     socklen_t *optlen, int version); */
+   PRINT("sys_getsockopt ( %ld, %ld, %ld, %#lx, %#lx, %ld )", SARG1, SARG2,
+         SARG3, ARG4, ARG5, SARG6);
+   PRE_REG_READ6(long, "getsockopt", int, s, int, level, int, optname,
+                 void *, optval, socklen_t *, option, int, version);
+   if (ARG4)
+      ML_(buf_and_len_pre_check)(tid, ARG4, ARG5, "getsockopt(optval)",
+                                 "getsockopt(optlen)");
+}
+
+POST(sys_getsockopt)
+{
+   if (ARG4)
+      ML_(buf_and_len_post_check)(tid, VG_(mk_SysRes_Success)(RES), ARG4,
+                                  ARG5, "getsockopt(optlen_out)");
+}
+
+PRE(sys_setsockopt)
+{
+   /* int setsockopt(int s, int level, int optname, const void *optval,
+                     socklen_t optlen, int version); */
+   PRINT("sys_setsockopt ( %ld, %ld, %ld, %#lx, %lu, %ld )", SARG1, SARG2,
+         SARG3, ARG4, ARG5, SARG6);
+   PRE_REG_READ6(long, "setsockopt", int, s, int, level, int, optname,
+                 const void *, optval, vki_socklen_t, optlen, int, version);
+   ML_(generic_PRE_sys_setsockopt)(tid, ARG1, ARG2, ARG3, ARG4, ARG5);
+}
+
+PRE(sys_lwp_mutex_register)
+{
+   /* int lwp_mutex_register(lwp_mutex_t *mp, caddr_t uaddr); */
+   vki_lwp_mutex_t *mp = (vki_lwp_mutex_t*)ARG1;
+   PRINT("sys_lwp_mutex_register ( %#lx, %#lx )", ARG1, ARG2);
+   PRE_REG_READ2(long, "lwp_mutex_register", lwp_mutex_t *, mp,
+                 void *, uaddr);
+   PRE_FIELD_READ("lwp_mutex_register(mp->mutex_type)", mp->vki_mutex_type);
+}
+
+PRE(sys_uucopy)
+{
+   /* int uucopy(const void *s1, void *s2, size_t n); */
+   PRINT("sys_uucopy ( %#lx, %#lx, %lu )", ARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "uucopy", const void *, s1, void *, s2, vki_size_t, n);
+
+   /* Stay away from V segments. */
+   if (!ML_(valid_client_addr)(ARG1, ARG3, tid, "uucopy(s1)")) {
+      SET_STATUS_Failure(VKI_EFAULT);
+   }
+   if (!ML_(valid_client_addr)(ARG2, ARG3, tid, "uucopy(s2)")) {
+      SET_STATUS_Failure(VKI_EFAULT);
+   }
+
+   if (FAILURE)
+      return;
+
+   /* XXX This is actually incorrect, we should be able to copy undefined
+      values through to their new destination. */
+   PRE_MEM_READ("uucopy(s1)", ARG1, ARG3);
+   PRE_MEM_WRITE("uucopy(s2)", ARG2, ARG3);
+}
+
+POST(sys_uucopy)
+{
+   POST_MEM_WRITE(ARG2, ARG3);
+}
+
+PRE(sys_umount2)
+{
+   /* int umount2(const char *file, int mflag); */
+   *flags |= SfMayBlock;
+   PRINT("sys_umount2 ( %#lx(%s), %ld )", ARG1, (HChar *) ARG1, SARG2);
+   PRE_REG_READ2(long, "umount2", const char *, file, int, mflag);
+   PRE_MEM_RASCIIZ("umount2(file)", ARG1);
+}
+
+PRE(fast_gethrtime)
+{
+   PRINT("fast_gethrtime ( )");
+   PRE_REG_READ0(long, "gethrtime");
+}
+
+PRE(fast_gethrvtime)
+{
+   PRINT("fast_gethrvtime ( )");
+   PRE_REG_READ0(long, "gethrvtime");
+}
+
+PRE(fast_gethrestime)
+{
+   /* Used by gettimeofday(3C). */
+   PRINT("fast_gethrestime ( )");
+   PRE_REG_READ0(long, "gethrestime");
+}
+
+#if defined(SOLARIS_GETHRT_FASTTRAP)
+PRE(fast_gethrt)
+{
+   /* Used by gethrtime(3C) when tsp & tscp HWCAPs are present. */
+   PRINT("fast_gethrt ( )");
+   PRE_REG_READ0(long, "gethrt");
+}
+
+POST(fast_gethrt)
+{
+   if (RES == 0)
+      return;
+
+   VG_(change_mapping_ownership)(RES, False);
+}
+#endif /* SOLARIS_GETHRT_FASTTRAP */
+
+#if defined(SOLARIS_GETZONEOFFSET_FASTTRAP)
+PRE(fast_getzoneoffset)
+{
+   /* Returns kernel's time zone offset data. */
+   PRINT("fast_getzoneoffset ( )");
+   PRE_REG_READ0(long, "get_zone_offset");
+}
+
+POST(fast_getzoneoffset)
+{
+   if (RES == 0)
+      return;
+
+   VG_(change_mapping_ownership)(RES, False);
+}
+#endif /* SOLARIS_GETZONEOFFSET_FASTTRAP */
+
+#undef PRE
+#undef POST
+
+/* ---------------------------------------------------------------------
+   The Solaris syscall table
+   ------------------------------------------------------------------ */
+
+/* Add a Solaris-specific, arch-independent wrapper to a syscall table. */
+#define SOLX_(sysno, name) \
+   WRAPPER_ENTRY_X_(solaris, VG_SOLARIS_SYSNO_INDEX(sysno), name)
+#define SOLXY(sysno, name) \
+   WRAPPER_ENTRY_XY(solaris, VG_SOLARIS_SYSNO_INDEX(sysno), name)
+
+#if defined(VGP_x86_solaris)
+/* Add an x86-solaris specific wrapper to a syscall table. */
+#define PLAX_(sysno, name) \
+   WRAPPER_ENTRY_X_(x86_solaris, VG_SOLARIS_SYSNO_INDEX(sysno), name)
+#define PLAXY(sysno, name) \
+   WRAPPER_ENTRY_XY(x86_solaris, VG_SOLARIS_SYSNO_INDEX(sysno), name)
+
+#elif defined(VGP_amd64_solaris)
+/* Add an amd64-solaris specific wrapper to a syscall table. */
+#define PLAX_(sysno, name) \
+   WRAPPER_ENTRY_X_(amd64_solaris, VG_SOLARIS_SYSNO_INDEX(sysno), name)
+#define PLAXY(sysno, name) \
+   WRAPPER_ENTRY_XY(amd64_solaris, VG_SOLARIS_SYSNO_INDEX(sysno), name)
+
+#else
+#  error "Unknown platform"
+#endif
+
+/*
+   GEN   : handlers are in syswrap-generic.c
+   SOL   : handlers are in this file
+      X_ : PRE handler only
+      XY : PRE and POST handlers
+*/
+
+static SyscallTableEntry syscall_table[] = {
+   SOLX_(__NR_exit,                 sys_exit),                  /*   1 */
+#if defined(SOLARIS_SPAWN_SYSCALL)
+   SOLX_(__NR_spawn,                sys_spawn),                 /*   2 */
+#endif /* SOLARIS_SPAWN_SYSCALL */
+   GENXY(__NR_read,                 sys_read),                  /*   3 */
+   GENX_(__NR_write,                sys_write),                 /*   4 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   SOLXY(__NR_open,                 sys_open),                  /*   5 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   SOLXY(__NR_close,                sys_close),                 /*   6 */
+   SOLX_(__NR_linkat,               sys_linkat),                /*   7 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   GENX_(__NR_link,                 sys_link),                  /*   9 */
+   GENX_(__NR_unlink,               sys_unlink),                /*  10 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   SOLX_(__NR_symlinkat,            sys_symlinkat),             /*  11 */
+   GENX_(__NR_chdir,                sys_chdir),                 /*  12 */
+   SOLX_(__NR_time,                 sys_time),                  /*  13 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   GENX_(__NR_chmod,                sys_chmod),                 /*  15 */
+   GENX_(__NR_chown,                sys_chown),                 /*  16 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   SOLX_(__NR_brk,                  sys_brk),                   /*  17 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   SOLXY(__NR_stat,                 sys_stat),                  /*  18 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   SOLX_(__NR_lseek,                sys_lseek),                 /*  19 */
+   GENX_(__NR_getpid,               sys_getpid),                /*  20 */
+   SOLXY(__NR_mount,                sys_mount),                 /*  21 */
+   SOLXY(__NR_readlinkat,           sys_readlinkat),            /*  22 */
+   GENX_(__NR_setuid,               sys_setuid),                /*  23 */
+   GENX_(__NR_getuid,               sys_getuid),                /*  24 */
+   SOLX_(__NR_stime,                sys_stime),                 /*  25 */
+   GENX_(__NR_alarm,                sys_alarm),                 /*  27 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   SOLXY(__NR_fstat,                sys_fstat),                 /*  28 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   GENX_(__NR_pause,                sys_pause),                 /*  29 */
+#if defined(SOLARIS_FREALPATHAT_SYSCALL)
+   SOLXY(__NR_frealpathat,          sys_frealpathat),           /*  30 */
+#endif /* SOLARIS_FREALPATHAT_SYSCALL */
+   SOLX_(__NR_stty,                 sys_stty),                  /*  31 */
+   SOLXY(__NR_gtty,                 sys_gtty),                  /*  32 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   GENX_(__NR_access,               sys_access),                /*  33 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   GENX_(__NR_kill,                 sys_kill),                  /*  37 */
+   SOLX_(__NR_pgrpsys,              sys_pgrpsys),               /*  39 */
+   SOLXY(__NR_pipe,                 sys_pipe),                  /*  42 */
+   GENXY(__NR_times,                sys_times),                 /*  43 */
+   SOLX_(__NR_faccessat,            sys_faccessat),             /*  45 */
+   GENX_(__NR_setgid,               sys_setgid),                /*  46 */
+   GENX_(__NR_getgid,               sys_getgid),                /*  47 */
+   SOLXY(__NR_mknodat,              sys_mknodat),               /*  48 */
+   SOLXY(__NR_sysi86,               sys_sysi86),                /*  50 */
+   SOLXY(__NR_shmsys,               sys_shmsys),                /*  52 */
+   SOLXY(__NR_semsys,               sys_semsys),                /*  53 */
+   SOLXY(__NR_ioctl,                sys_ioctl),                 /*  54 */
+   SOLX_(__NR_fchownat,             sys_fchownat),              /*  56 */
+   SOLX_(__NR_fdsync,               sys_fdsync),                /*  58 */
+   SOLX_(__NR_execve,               sys_execve),                /*  59 */
+   GENX_(__NR_umask,                sys_umask),                 /*  60 */
+   GENX_(__NR_chroot,               sys_chroot),                /*  61 */
+   SOLXY(__NR_fcntl,                sys_fcntl),                 /*  62 */
+   SOLX_(__NR_renameat,             sys_renameat),              /*  64 */
+   SOLX_(__NR_unlinkat,             sys_unlinkat),              /*  65 */
+   SOLXY(__NR_fstatat,              sys_fstatat),               /*  66 */
+#if defined(VGP_x86_solaris)
+   PLAXY(__NR_fstatat64,            sys_fstatat64),             /*  67 */
+#endif /* VGP_x86_solaris */
+   SOLXY(__NR_openat,               sys_openat),                /*  68 */
+#if defined(VGP_x86_solaris)
+   PLAXY(__NR_openat64,             sys_openat64),              /*  69 */
+#endif /* VGP_x86_solaris */
+   SOLXY(__NR_tasksys,              sys_tasksys),               /*  70 */
+   SOLXY(__NR_getpagesizes,         sys_getpagesizes),          /*  73 */
+   SOLXY(__NR_lwp_park,             sys_lwp_park),              /*  77 */
+   SOLXY(__NR_sendfilev,            sys_sendfilev),             /*  78 */
+#if defined(SOLARIS_LWP_NAME_SYSCALL)
+   SOLXY(__NR_lwp_name,             sys_lwp_name),              /*  79 */
+#endif /* SOLARIS_LWP_NAME_SYSCALL */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   GENX_(__NR_rmdir,                sys_rmdir),                 /*  79 */
+   GENX_(__NR_mkdir,                sys_mkdir),                 /*  80 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   GENXY(__NR_getdents,             sys_getdents),              /*  81 */
+   SOLXY(__NR_privsys,              sys_privsys),               /*  82 */
+   SOLXY(__NR_ucredsys,             sys_ucredsys),              /*  83 */
+   SOLXY(__NR_getmsg,               sys_getmsg),                /*  85 */
+   SOLX_(__NR_putmsg,               sys_putmsg),                /*  86 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   SOLXY(__NR_lstat,                sys_lstat),                 /*  88 */
+   GENX_(__NR_symlink,              sys_symlink),               /*  89 */
+   GENX_(__NR_readlink,             sys_readlink),              /*  90 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   GENX_(__NR_setgroups,            sys_setgroups),             /*  91 */
+   GENXY(__NR_getgroups,            sys_getgroups),             /*  92 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   GENX_(__NR_fchmod,               sys_fchmod),                /*  93 */
+   GENX_(__NR_fchown,               sys_fchown),                /*  94 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   SOLXY(__NR_sigprocmask,          sys_sigprocmask),           /*  95 */
+   GENXY(__NR_sigaltstack,          sys_sigaltstack),           /*  97 */
+   SOLXY(__NR_sigaction,            sys_sigaction),             /*  98 */
+   SOLXY(__NR_sigpending,           sys_sigpending),            /*  99 */
+   SOLX_(__NR_context,              sys_getsetcontext),         /* 100 */
+   SOLX_(__NR_fchmodat,             sys_fchmodat),              /* 101 */
+   SOLX_(__NR_mkdirat,              sys_mkdirat),               /* 102 */
+   SOLXY(__NR_statvfs,              sys_statvfs),               /* 103 */
+   SOLXY(__NR_fstatvfs,             sys_fstatvfs),              /* 104 */
+   SOLXY(__NR_nfssys,               sys_nfssys),                /* 106 */
+   SOLXY(__NR_waitid,               sys_waitid),                /* 107 */
+#if defined(SOLARIS_UTIMESYS_SYSCALL)
+   SOLX_(__NR_utimesys,             sys_utimesys),              /* 110 */
+#endif /* SOLARIS_UTIMESYS_SYSCALL */
+#if defined(SOLARIS_UTIMENSAT_SYSCALL)
+   SOLX_(__NR_utimensat,            sys_utimensat),             /* 110 */
+#endif /* SOLARIS_UTIMENSAT_SYSCALL */
+   SOLXY(__NR_sigresend,            sys_sigresend),             /* 111 */
+   SOLXY(__NR_priocntlsys,          sys_priocntlsys),           /* 112 */
+   SOLX_(__NR_pathconf,             sys_pathconf),              /* 113 */
+   SOLX_(__NR_mmap,                 sys_mmap),                  /* 115 */
+   GENXY(__NR_mprotect,             sys_mprotect),              /* 116 */
+   GENXY(__NR_munmap,               sys_munmap),                /* 117 */
+   GENX_(__NR_fchdir,               sys_fchdir),                /* 120 */
+   GENXY(__NR_readv,                sys_readv),                 /* 121 */
+   GENX_(__NR_writev,               sys_writev),                /* 122 */
+#if defined(SOLARIS_UUIDSYS_SYSCALL)
+   SOLXY(__NR_uuidsys,              sys_uuidsys),               /* 124 */
+#endif /* SOLARIS_UUIDSYS_SYSCALL */
+   SOLX_(__NR_mmapobj,              sys_mmapobj),               /* 127 */
+   GENX_(__NR_setrlimit,            sys_setrlimit),             /* 128 */
+   GENXY(__NR_getrlimit,            sys_getrlimit),             /* 129 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   GENX_(__NR_lchown,               sys_lchown),                /* 130 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   SOLX_(__NR_memcntl,              sys_memcntl),               /* 131 */
+   SOLXY(__NR_getpmsg,              sys_getpmsg),               /* 132 */
+   SOLX_(__NR_putpmsg,              sys_putpmsg),               /* 133 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   SOLX_(__NR_rename,               sys_rename),                /* 134 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   SOLXY(__NR_uname,                sys_uname),                 /* 135 */
+   SOLX_(__NR_setegid,              sys_setegid),               /* 136 */
+   SOLX_(__NR_sysconfig,            sys_sysconfig),             /* 137 */
+   SOLXY(__NR_systeminfo,           sys_systeminfo),            /* 139 */
+   SOLX_(__NR_seteuid,              sys_seteuid),               /* 141 */
+   SOLX_(__NR_forksys,              sys_forksys),               /* 142 */
+   SOLXY(__NR_sigtimedwait,         sys_sigtimedwait),          /* 144 */
+   SOLX_(__NR_yield,                sys_yield),                 /* 146 */
+   SOLXY(__NR_lwp_sema_post,        sys_lwp_sema_post),         /* 148 */
+   SOLXY(__NR_lwp_sema_trywait,     sys_lwp_sema_trywait),      /* 149 */
+   SOLX_(__NR_lwp_detach,           sys_lwp_detach),            /* 150 */
+   SOLX_(__NR_fchroot,              sys_fchroot),               /* 153 */
+#if defined(SOLARIS_SYSTEM_STATS_SYSCALL)
+   SOLX_(__NR_system_stats,         sys_system_stats),          /* 154 */
+#endif /* SOLARIS_SYSTEM_STATS_SYSCALL */
+   SOLXY(__NR_gettimeofday,         sys_gettimeofday),          /* 156 */
+   GENXY(__NR_getitimer,            sys_getitimer),             /* 157 */
+   GENXY(__NR_setitimer,            sys_setitimer),             /* 158 */
+   SOLX_(__NR_lwp_create,           sys_lwp_create),            /* 159 */
+   SOLX_(__NR_lwp_exit,             sys_lwp_exit),              /* 160 */
+   SOLX_(__NR_lwp_suspend,          sys_lwp_suspend),           /* 161 */
+   SOLX_(__NR_lwp_continue,         sys_lwp_continue),          /* 162 */
+#if defined(SOLARIS_LWP_SIGQUEUE_SYSCALL)
+   SOLXY(__NR_lwp_sigqueue,         sys_lwp_sigqueue),          /* 163 */
+#else
+   SOLXY(__NR_lwp_kill,             sys_lwp_kill),              /* 163 */
+#endif /* SOLARIS_LWP_SIGQUEUE_SYSCALL */
+   SOLX_(__NR_lwp_self,             sys_lwp_self),              /* 164 */
+   SOLX_(__NR_lwp_sigmask,          sys_lwp_sigmask),           /* 165 */
+   SOLX_(__NR_lwp_private,          sys_lwp_private),           /* 166 */
+   SOLXY(__NR_lwp_wait,             sys_lwp_wait),              /* 167 */
+   SOLXY(__NR_lwp_mutex_wakeup,     sys_lwp_mutex_wakeup),      /* 168 */
+   SOLXY(__NR_lwp_cond_wait,        sys_lwp_cond_wait),         /* 170 */
+   SOLX_(__NR_lwp_cond_broadcast,   sys_lwp_cond_broadcast),    /* 172 */
+   SOLXY(__NR_pread,                sys_pread),                 /* 173 */
+   SOLX_(__NR_pwrite,               sys_pwrite),                /* 174 */
+#if defined(VGP_x86_solaris)
+   PLAX_(__NR_llseek,               sys_llseek32),              /* 175 */
+#endif /* VGP_x86_solaris */
+   SOLXY(__NR_rusagesys,            sys_rusagesys),             /* 181 */
+   SOLXY(__NR_port,                 sys_port),                  /* 182 */
+   SOLXY(__NR_pollsys,              sys_pollsys),               /* 183 */
+   SOLXY(__NR_labelsys,             sys_labelsys),              /* 184 */
+   SOLXY(__NR_acl,                  sys_acl),                   /* 185 */
+   SOLXY(__NR_auditsys,             sys_auditsys),              /* 186 */
+   SOLX_(__NR_p_online,             sys_p_online),              /* 189 */
+   SOLX_(__NR_sigqueue,             sys_sigqueue),              /* 190 */
+   SOLX_(__NR_clock_gettime,        sys_clock_gettime),         /* 191 */
+   SOLX_(__NR_clock_settime,        sys_clock_settime),         /* 192 */
+   SOLXY(__NR_clock_getres,         sys_clock_getres),          /* 193 */
+   SOLXY(__NR_timer_create,         sys_timer_create),          /* 194 */
+   SOLX_(__NR_timer_delete,         sys_timer_delete),          /* 195 */
+   SOLXY(__NR_timer_settime,        sys_timer_settime),         /* 196 */
+   SOLXY(__NR_timer_gettime,        sys_timer_gettime),         /* 197 */
+   SOLX_(__NR_timer_getoverrun,     sys_timer_getoverrun),      /* 198 */
+   GENXY(__NR_nanosleep,            sys_nanosleep),             /* 199 */
+   SOLXY(__NR_facl,                 sys_facl),                  /* 200 */
+   SOLXY(__NR_door,                 sys_door),                  /* 201 */
+   GENX_(__NR_setreuid,             sys_setreuid),              /* 202 */
+   GENX_(__NR_setregid,             sys_setregid),              /* 202 */
+   SOLXY(__NR_schedctl,             sys_schedctl),              /* 206 */
+   SOLXY(__NR_pset,                 sys_pset),                  /* 207 */
+   SOLXY(__NR_resolvepath,          sys_resolvepath),           /* 209 */
+   SOLXY(__NR_lwp_mutex_timedlock,  sys_lwp_mutex_timedlock),   /* 210 */
+   SOLXY(__NR_lwp_sema_timedwait,   sys_lwp_sema_timedwait),    /* 211 */
+   SOLXY(__NR_lwp_rwlock_sys,       sys_lwp_rwlock_sys),        /* 212 */
+#if defined(VGP_x86_solaris)
+   GENXY(__NR_getdents64,           sys_getdents64),            /* 213 */
+   PLAX_(__NR_mmap64,               sys_mmap64),                /* 214 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   PLAXY(__NR_stat64,               sys_stat64),                /* 215 */
+   PLAXY(__NR_lstat64,              sys_lstat64),               /* 216 */
+   PLAXY(__NR_fstat64,              sys_fstat64),               /* 217 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+   PLAXY(__NR_statvfs64,            sys_statvfs64),             /* 218 */
+   PLAXY(__NR_fstatvfs64,           sys_fstatvfs64),            /* 219 */
+#endif /* VGP_x86_solaris */
+#if defined(VGP_x86_solaris)
+   PLAX_(__NR_setrlimit64,          sys_setrlimit64),           /* 220 */
+   PLAXY(__NR_getrlimit64,          sys_getrlimit64),           /* 221 */
+   PLAXY(__NR_pread64,              sys_pread64),               /* 222 */
+   PLAX_(__NR_pwrite64,             sys_pwrite64),              /* 223 */
+#if defined(SOLARIS_OLD_SYSCALLS)
+   PLAXY(__NR_open64,               sys_open64),                /* 225 */
+#endif /* SOLARIS_OLD_SYSCALLS */
+#endif /* VGP_x86_solaris */
+   SOLXY(__NR_zone,                 sys_zone),                  /* 227 */
+   SOLXY(__NR_getcwd,               sys_getcwd),                /* 229 */
+   SOLXY(__NR_so_socket,            sys_so_socket),             /* 230 */
+   SOLXY(__NR_so_socketpair,        sys_so_socketpair),         /* 231 */
+   SOLX_(__NR_bind,                 sys_bind),                  /* 232 */
+   SOLX_(__NR_listen,               sys_listen),                /* 233 */
+   SOLXY(__NR_accept,               sys_accept),                /* 234 */
+   SOLX_(__NR_connect,              sys_connect),               /* 235 */
+   SOLX_(__NR_shutdown,             sys_shutdown),              /* 236 */
+   SOLXY(__NR_recv,                 sys_recv),                  /* 237 */
+   SOLXY(__NR_recvfrom,             sys_recvfrom),              /* 238 */
+   SOLXY(__NR_recvmsg,              sys_recvmsg),               /* 239 */
+   SOLX_(__NR_send,                 sys_send),                  /* 240 */
+   SOLX_(__NR_sendmsg,              sys_sendmsg),               /* 241 */
+   SOLX_(__NR_sendto,               sys_sendto),                /* 242 */
+   SOLXY(__NR_getpeername,          sys_getpeername),           /* 243 */
+   SOLXY(__NR_getsockname,          sys_getsockname),           /* 244 */
+   SOLXY(__NR_getsockopt,           sys_getsockopt),            /* 245 */
+   SOLX_(__NR_setsockopt,           sys_setsockopt),            /* 246 */
+   SOLX_(__NR_lwp_mutex_register,   sys_lwp_mutex_register),    /* 252 */
+   SOLXY(__NR_uucopy,               sys_uucopy),                /* 254 */
+   SOLX_(__NR_umount2,              sys_umount2)                /* 255 */
+};
+
+static SyscallTableEntry fasttrap_table[] = {
+   SOLX_(__NR_gethrtime,            fast_gethrtime),            /*   3 */
+   SOLX_(__NR_gethrvtime,           fast_gethrvtime),           /*   4 */
+   SOLX_(__NR_gethrestime,          fast_gethrestime)           /*   5 */
+#if defined(SOLARIS_GETHRT_FASTTRAP)
+   ,
+   SOLXY(__NR_gethrt,               fast_gethrt)                /*   7 */
+#endif /* SOLARIS_GETHRT_FASTTRAP */
+#if defined(SOLARIS_GETZONEOFFSET_FASTTRAP)
+   ,
+   SOLXY(__NR_getzoneoffset,        fast_getzoneoffset)         /*   8 */
+#endif /* SOLARIS_GETZONEOFFSET_FASTTRAP */
+
+};
+
+SyscallTableEntry *ML_(get_solaris_syscall_entry)(UInt sysno)
+{
+   const UInt syscall_table_size
+      = sizeof(syscall_table) / sizeof(syscall_table[0]);
+   const UInt fasttrap_table_size
+      = sizeof(fasttrap_table) / sizeof(fasttrap_table[0]);
+
+   SyscallTableEntry *table;
+   Int size;
+
+   switch (VG_SOLARIS_SYSNO_CLASS(sysno)) {
+   case VG_SOLARIS_SYSCALL_CLASS_CLASSIC:
+      table = syscall_table;
+      size = syscall_table_size;
+      break;
+   case VG_SOLARIS_SYSCALL_CLASS_FASTTRAP:
+      table = fasttrap_table;
+      size = fasttrap_table_size;
+      break;
+   default:
+      vg_assert(0);
+      break;
+   }
+   sysno = VG_SOLARIS_SYSNO_INDEX(sysno);
+   if (sysno < size) {
+      SyscallTableEntry *sys = &table[sysno];
+      if (!sys->before)
+         return NULL; /* no entry */
+      return sys;
+   }
+
+   /* Can't find a wrapper. */
+   return NULL;
+}
+
+#endif // defined(VGO_solaris)
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syswrap-tilegx-linux.c b/coregrind/m_syswrap/syswrap-tilegx-linux.c
index fbdf4bf..aceceb4 100644
--- a/coregrind/m_syswrap/syswrap-tilegx-linux.c
+++ b/coregrind/m_syswrap/syswrap-tilegx-linux.c
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013 Tilera Corp.
+  Copyright (C) 2010-2015 Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -319,7 +319,7 @@
 static SysRes sys_set_tls ( ThreadId tid, Addr tlsptr );
  /*
    When a client clones, we need to keep track of the new thread.  This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
    2. initialize the thread's new VCPU state
    3. create the thread using the same args as the client requested,
    but using the scheduler entrypoint for IP, and a separate stack
@@ -393,7 +393,7 @@
 
   /* High half word64 is syscall return value. */
   if (debug)
-    VG_(printf)("ret: 0x%lx\n", ret);
+    VG_(printf)("ret: 0x%llx\n", (ULong)ret);
 
   res = VG_(mk_SysRes_tilegx_linux) (/*val */ ret);
 
@@ -628,7 +628,7 @@
 
 PRE(sys_arch_prctl)
 {
-  PRINT( "arch_prctl ( %ld, %lx )", ARG1, ARG2 );
+  PRINT( "arch_prctl ( %ld, %lx )", SARG1, ARG2 );
 
   vg_assert(VG_(is_valid_tid)(tid));
   vg_assert(tid >= 1 && tid < VG_N_THREADS);
@@ -645,9 +645,9 @@
 // space, and we should therefore not check anything it points to.
 PRE(sys_ptrace)
 {
-  PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4);
+  PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4);
   PRE_REG_READ4(int, "ptrace",
-                long, request, long, pid, long, addr, long, data);
+                long, request, long, pid, unsigned long, addr, unsigned long, data);
   switch (ARG1) {
   case VKI_PTRACE_PEEKTEXT:
   case VKI_PTRACE_PEEKDATA:
@@ -721,7 +721,7 @@
 
 PRE(sys_socket)
 {
-  PRINT("sys_socket ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+  PRINT("sys_socket ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
   PRE_REG_READ3(long, "socket", int, domain, int, type, int, protocol);
 }
 POST(sys_socket)
@@ -734,7 +734,8 @@
 
 PRE(sys_setsockopt)
 {
-  PRINT("sys_setsockopt ( %ld, %ld, %ld, %#lx, %ld )",ARG1,ARG2,ARG3,ARG4,ARG5);
+  PRINT("sys_setsockopt ( %ld, %ld, %ld, %#lx, %ld )", SARG1, SARG2, SARG3,
+        ARG4, SARG5);
   PRE_REG_READ5(long, "setsockopt",
                 int, s, int, level, int, optname,
                 const void *, optval, int, optlen);
@@ -743,7 +744,8 @@
 
 PRE(sys_getsockopt)
 {
-  PRINT("sys_getsockopt ( %ld, %ld, %ld, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
+  PRINT("sys_getsockopt ( %ld, %ld, %ld, %#lx, %#lx )", SARG1, SARG2, SARG3,
+        ARG4, ARG5);
   PRE_REG_READ5(long, "getsockopt",
                 int, s, int, level, int, optname,
                 void *, optval, int, *optlen);
@@ -759,7 +761,7 @@
 PRE(sys_connect)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_connect ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+  PRINT("sys_connect ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
   PRE_REG_READ3(long, "connect",
                 int, sockfd, struct sockaddr *, serv_addr, int, addrlen);
   ML_(generic_PRE_sys_connect)(tid, ARG1,ARG2,ARG3);
@@ -768,9 +770,9 @@
 PRE(sys_accept)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_accept ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+  PRINT("sys_accept ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
   PRE_REG_READ3(long, "accept",
-                int, s, struct sockaddr *, addr, int, *addrlen);
+                int, s, struct sockaddr *, addr, int *, addrlen);
   ML_(generic_PRE_sys_accept)(tid, ARG1,ARG2,ARG3);
 }
 POST(sys_accept)
@@ -785,9 +787,9 @@
 PRE(sys_accept4)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_accept4 ( %ld, %#lx, %ld, %ld )",ARG1,ARG2,ARG3,ARG4);
+  PRINT("sys_accept4 ( %ld, %#lx, %#lx, %ld )", SARG1, ARG2, ARG3, SARG4);
   PRE_REG_READ4(long, "accept4",
-                int, s, struct sockaddr *, addr, int, *addrlen, int, flags);
+                int, s, struct sockaddr *, addr, int *, addrlen, int, flags);
   ML_(generic_PRE_sys_accept)(tid, ARG1,ARG2,ARG3);
 }
 POST(sys_accept4)
@@ -802,8 +804,8 @@
 PRE(sys_sendto)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_sendto ( %ld, %#lx, %ld, %lu, %#lx, %ld )",ARG1,ARG2,ARG3,
-        ARG4,ARG5,ARG6);
+  PRINT("sys_sendto ( %ld, %#lx, %ld, %lu, %#lx, %ld )", SARG1, ARG2, SARG3,
+        ARG4, ARG5, SARG6);
   PRE_REG_READ6(long, "sendto",
                 int, s, const void *, msg, int, len,
                 unsigned int, flags,
@@ -814,8 +816,8 @@
 PRE(sys_recvfrom)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_recvfrom ( %ld, %#lx, %ld, %lu, %#lx, %#lx )",ARG1,ARG2,ARG3,
-        ARG4,ARG5,ARG6);
+  PRINT("sys_recvfrom ( %ld, %#lx, %ld, %lu, %#lx, %#lx )", SARG1, ARG2, SARG3,
+        ARG4, ARG5, ARG6);
   PRE_REG_READ6(long, "recvfrom",
                 int, s, void *, buf, int, len, unsigned int, flags,
                 struct sockaddr *, from, int *, fromlen);
@@ -831,7 +833,7 @@
 PRE(sys_sendmsg)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_sendmsg ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+  PRINT("sys_sendmsg ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
   PRE_REG_READ3(long, "sendmsg",
                 int, s, const struct msghdr *, msg, int, flags);
   ML_(generic_PRE_sys_sendmsg)(tid, "msg", ARG2);
@@ -840,7 +842,7 @@
 PRE(sys_recvmsg)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_recvmsg ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+  PRINT("sys_recvmsg ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
   PRE_REG_READ3(long, "recvmsg", int, s, struct msghdr *, msg, int, flags);
   ML_(generic_PRE_sys_recvmsg)(tid, "msg", (struct vki_msghdr *) ARG2);
 }
@@ -853,13 +855,13 @@
 PRE(sys_shutdown)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_shutdown ( %ld, %ld )",ARG1,ARG2);
+  PRINT("sys_shutdown ( %ld, %ld )", SARG1, SARG2);
   PRE_REG_READ2(int, "shutdown", int, s, int, how);
 }
 
 PRE(sys_bind)
 {
-  PRINT("sys_bind ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+  PRINT("sys_bind ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
   PRE_REG_READ3(long, "bind",
                 int, sockfd, struct sockaddr *, my_addr, int, addrlen);
   ML_(generic_PRE_sys_bind)(tid, ARG1,ARG2,ARG3);
@@ -867,13 +869,13 @@
 
 PRE(sys_listen)
 {
-  PRINT("sys_listen ( %ld, %ld )",ARG1,ARG2);
+  PRINT("sys_listen ( %ld, %ld )", SARG1, SARG2);
   PRE_REG_READ2(long, "listen", int, s, int, backlog);
 }
 
 PRE(sys_getsockname)
 {
-  PRINT("sys_getsockname ( %ld, %#lx, %#lx )",ARG1,ARG2,ARG3);
+  PRINT("sys_getsockname ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
   PRE_REG_READ3(long, "getsockname",
                 int, s, struct sockaddr *, name, int *, namelen);
   ML_(generic_PRE_sys_getsockname)(tid, ARG1,ARG2,ARG3);
@@ -887,7 +889,7 @@
 
 PRE(sys_getpeername)
 {
-  PRINT("sys_getpeername ( %ld, %#lx, %#lx )",ARG1,ARG2,ARG3);
+  PRINT("sys_getpeername ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
   PRE_REG_READ3(long, "getpeername",
                 int, s, struct sockaddr *, name, int *, namelen);
   ML_(generic_PRE_sys_getpeername)(tid, ARG1,ARG2,ARG3);
@@ -901,7 +903,7 @@
 
 PRE(sys_socketpair)
 {
-  PRINT("sys_socketpair ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+  PRINT("sys_socketpair ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
   PRE_REG_READ4(long, "socketpair",
                 int, d, int, type, int, protocol, int*, sv);
   ML_(generic_PRE_sys_socketpair)(tid, ARG1,ARG2,ARG3,ARG4);
@@ -915,14 +917,14 @@
 
 PRE(sys_semget)
 {
-  PRINT("sys_semget ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+  PRINT("sys_semget ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
   PRE_REG_READ3(long, "semget", vki_key_t, key, int, nsems, int, semflg);
 }
 
 PRE(sys_semop)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_semop ( %ld, %#lx, %lu )",ARG1,ARG2,ARG3);
+  PRINT("sys_semop ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
   PRE_REG_READ3(long, "semop",
                 int, semid, struct sembuf *, sops, unsigned, nsoops);
   ML_(generic_PRE_sys_semop)(tid, ARG1,ARG2,ARG3);
@@ -931,7 +933,7 @@
 PRE(sys_semtimedop)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_semtimedop ( %ld, %#lx, %lu, %#lx )",ARG1,ARG2,ARG3,ARG4);
+  PRINT("sys_semtimedop ( %ld, %#lx, %lu, %#lx )", SARG1, ARG2, ARG3, ARG4);
   PRE_REG_READ4(long, "semtimedop",
                 int, semid, struct sembuf *, sops, unsigned, nsoops,
                 struct timespec *, timeout);
@@ -943,25 +945,25 @@
   switch (ARG3 & ~VKI_IPC_64) {
   case VKI_IPC_INFO:
   case VKI_SEM_INFO:
-    PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+    PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
     PRE_REG_READ4(long, "semctl",
                   int, semid, int, semnum, int, cmd, struct seminfo *, arg);
     break;
   case VKI_IPC_STAT:
   case VKI_SEM_STAT:
   case VKI_IPC_SET:
-    PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+    PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
     PRE_REG_READ4(long, "semctl",
                   int, semid, int, semnum, int, cmd, struct semid_ds *, arg);
     break;
   case VKI_GETALL:
   case VKI_SETALL:
-    PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4);
+    PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
     PRE_REG_READ4(long, "semctl",
                   int, semid, int, semnum, int, cmd, unsigned short *, arg);
     break;
   default:
-    PRINT("sys_semctl ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+    PRINT("sys_semctl ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
     PRE_REG_READ3(long, "semctl",
                   int, semid, int, semnum, int, cmd);
     break;
@@ -975,13 +977,13 @@
 
 PRE(sys_msgget)
 {
-  PRINT("sys_msgget ( %ld, %ld )",ARG1,ARG2);
+  PRINT("sys_msgget ( %ld, %ld )", SARG1, SARG2);
   PRE_REG_READ2(long, "msgget", vki_key_t, key, int, msgflg);
 }
 
 PRE(sys_msgsnd)
 {
-  PRINT("sys_msgsnd ( %ld, %#lx, %ld, %ld )",ARG1,ARG2,ARG3,ARG4);
+  PRINT("sys_msgsnd ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
   PRE_REG_READ4(long, "msgsnd",
                 int, msqid, struct msgbuf *, msgp, vki_size_t, msgsz,
                 int, msgflg);
@@ -992,7 +994,8 @@
 
 PRE(sys_msgrcv)
 {
-  PRINT("sys_msgrcv ( %ld, %#lx, %ld, %ld, %ld )",ARG1,ARG2,ARG3,ARG4,ARG5);
+  PRINT("sys_msgrcv ( %ld, %#lx, %lu, %ld, %ld )", SARG1, ARG2, ARG3,
+        SARG4, SARG5);
   PRE_REG_READ5(long, "msgrcv",
                 int, msqid, struct msgbuf *, msgp, vki_size_t, msgsz,
                 long, msgytp, int, msgflg);
@@ -1007,7 +1010,7 @@
 
 PRE(sys_msgctl)
 {
-  PRINT("sys_msgctl ( %ld, %ld, %#lx )",ARG1,ARG2,ARG3);
+  PRINT("sys_msgctl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
   PRE_REG_READ3(long, "msgctl",
                 int, msqid, int, cmd, struct msqid_ds *, buf);
   ML_(linux_PRE_sys_msgctl)(tid, ARG1,ARG2,ARG3);
@@ -1019,14 +1022,14 @@
 
 PRE(sys_shmget)
 {
-  PRINT("sys_shmget ( %ld, %ld, %ld )",ARG1,ARG2,ARG3);
+  PRINT("sys_shmget ( %ld, %lu, %ld )", SARG1, ARG2, SARG3);
   PRE_REG_READ3(long, "shmget", vki_key_t, key, vki_size_t, size, int, shmflg);
 }
 
 PRE(wrap_sys_shmat)
 {
   UWord arg2tmp;
-  PRINT("wrap_sys_shmat ( %ld, %#lx, %ld )",ARG1,ARG2,ARG3);
+  PRINT("wrap_sys_shmat ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
   PRE_REG_READ3(long, "shmat",
                 int, shmid, const void *, shmaddr, int, shmflg);
   arg2tmp = ML_(generic_PRE_sys_shmat)(tid, ARG1,ARG2,ARG3);
@@ -1054,7 +1057,7 @@
 
 PRE(sys_shmctl)
 {
-  PRINT("sys_shmctl ( %ld, %ld, %#lx )",ARG1,ARG2,ARG3);
+  PRINT("sys_shmctl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
   PRE_REG_READ3(long, "shmctl",
                 int, shmid, int, cmd, struct shmid_ds *, buf);
   ML_(generic_PRE_sys_shmctl)(tid, ARG1,ARG2|VKI_IPC_64,ARG3);
@@ -1066,7 +1069,7 @@
 
 PRE(sys_fadvise64)
 {
-  PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )", ARG1,ARG2,ARG3,ARG4);
+  PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )", SARG1, SARG2, ARG3, SARG4);
   PRE_REG_READ4(long, "fadvise64",
                 int, fd, vki_loff_t, offset, vki_size_t, len, int, advice);
 }
@@ -1075,8 +1078,8 @@
 {
   SysRes r;
 
-  PRINT("sys_mmap ( %#lx, %llu, %ld, %ld, %d, %ld )",
-        ARG1, (ULong)ARG2, ARG3, ARG4, (Int)ARG5, ARG6 );
+  PRINT("sys_mmap ( %#lx, %lu, %lu, %lu, %lu, %lu )",
+        ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
   PRE_REG_READ6(long, "mmap",
                 unsigned long, start, unsigned long, length,
                 unsigned long, prot,  unsigned long, flags,
@@ -1092,7 +1095,7 @@
    ------------------------------------------------------------ */
 PRE(sys_cacheflush)
 {
-   PRINT("cacheflush (%lx, %lx, %lx)", ARG1, ARG2, ARG3);
+   PRINT("cacheflush (%lx, %ld, %ld)", ARG1, SARG2, SARG3);
    PRE_REG_READ3(long, "cacheflush", unsigned long, addr,
                  int, nbytes, int, cache);
    VG_ (discard_translations) ((Addr)ARG1, (ULong) ARG2,
@@ -1103,7 +1106,7 @@
 PRE(sys_set_dataplane)
 {
   *flags |= SfMayBlock;
-  PRINT("sys_set_dataplane ( %ld )", ARG1);
+  PRINT("sys_set_dataplane ( %lu )", ARG1);
   PRE_REG_READ1(long, "set_dataplane", unsigned long, flag);
 }
 
diff --git a/coregrind/m_syswrap/syswrap-x86-darwin.c b/coregrind/m_syswrap/syswrap-x86-darwin.c
index 45f0adf..a9282ee 100644
--- a/coregrind/m_syswrap/syswrap-x86-darwin.c
+++ b/coregrind/m_syswrap/syswrap-x86-darwin.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Apple Inc.
+   Copyright (C) 2005-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -412,7 +412,7 @@
       out just the relevant parts.  Hence: */
 #  if DARWIN_VERS <= DARWIN_10_7
    Bool is_reuse = reuse != 0;
-#  elif DARWIN_VERS == DARWIN_10_8 || DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
+#  elif DARWIN_VERS > DARWIN_10_7
    Bool is_reuse = (reuse & 0x20000 /* == WQ_FLAG_THREAD_REUSE */) != 0;
 #  else
 #    error "Unsupported Darwin version"
@@ -429,6 +429,8 @@
       UWord magic_delta = 0x48;
 #     elif DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
       UWord magic_delta = 0xB0;
+#     elif DARWIN_VERS == DARWIN_10_11
+      UWord magic_delta = 0x100;
 #     else
 #       error "magic_delta: to be computed on new OS version"
         // magic_delta = tst->os_state.pthread - self
@@ -444,7 +446,7 @@
 
       tst = VG_(get_ThreadState)(tid);
 
-      if (0) VG_(printf)("wqthread_hijack reuse %s: tid %d, tst %p, "
+      if (0) VG_(printf)("wqthread_hijack reuse %s: tid %u, tst %p, "
                          "tst->os_state.pthread %#lx, self %#lx\n",
                          tst->os_state.pthread == self ? "SAME" : "DIFF",
                          tid, tst, tst->os_state.pthread, self);
diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c
index e08af76..24d7dc1 100644
--- a/coregrind/m_syswrap/syswrap-x86-linux.c
+++ b/coregrind/m_syswrap/syswrap-x86-linux.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -195,7 +195,7 @@
 
 /* 
    When a client clones, we need to keep track of the new thread.  This means:
-   1. allocate a ThreadId+ThreadState+stack for the the thread
+   1. allocate a ThreadId+ThreadState+stack for the thread
 
    2. initialize the thread's new VCPU state
 
@@ -286,7 +286,7 @@
 
    if (flags & VKI_CLONE_SETTLS) {
       if (debug)
-	 VG_(printf)("clone child has SETTLS: tls info at %p: idx=%d "
+	 VG_(printf)("clone child has SETTLS: tls info at %p: idx=%u "
                      "base=%#lx limit=%x; esp=%#x fs=%x gs=%x\n",
 		     tlsinfo, tlsinfo->entry_number, 
                      tlsinfo->base_addr, tlsinfo->limit,
@@ -396,7 +396,7 @@
    vg_assert(8 == sizeof(VexGuestX86SegDescr));
 
    if (0)
-      VG_(printf)("translate_to_hw_format: base %#lx, limit %d\n",
+      VG_(printf)("translate_to_hw_format: base %#lx, limit %u\n",
                   inn->base_addr, inn->limit );
 
    /* Allow LDTs to be cleared by the user. */
@@ -520,7 +520,7 @@
    UChar* ldt;
 
    if (0)
-      VG_(printf)("read_ldt: tid = %d, ptr = %p, bytecount = %d\n",
+      VG_(printf)("read_ldt: tid = %u, ptr = %p, bytecount = %u\n",
                   tid, ptr, bytecount );
 
    vg_assert(sizeof(HWord) == sizeof(VexGuestX86SegDescr*));
@@ -553,8 +553,8 @@
    vki_modify_ldt_t* ldt_info; 
 
    if (0)
-      VG_(printf)("write_ldt: tid = %d, ptr = %p, "
-                  "bytecount = %d, oldmode = %d\n",
+      VG_(printf)("write_ldt: tid = %u, ptr = %p, "
+                  "bytecount = %u, oldmode = %d\n",
                   tid, ptr, bytecount, oldmode );
 
    vg_assert(8 == sizeof(VexGuestX86SegDescr));
@@ -808,7 +808,7 @@
       a4 = arg_struct[3];
       a5 = arg_struct[4];
 
-      PRINT("old_select ( %d, %#x, %#x, %#x, %#x )", a1,a2,a3,a4,a5);
+      PRINT("old_select ( %d, %#x, %#x, %#x, %#x )", (Int)a1,a2,a3,a4,a5);
       if (a2 != (Addr)NULL)
          PRE_MEM_READ( "old_select(readfds)",   a2, a1/8 /* __FD_SETSIZE/8 */ );
       if (a3 != (Addr)NULL)
@@ -1021,7 +1021,7 @@
 
 PRE(sys_modify_ldt)
 {
-   PRINT("sys_modify_ldt ( %ld, %#lx, %ld )", ARG1,ARG2,ARG3);
+   PRINT("sys_modify_ldt ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(int, "modify_ldt", int, func, void *, ptr,
                  unsigned long, bytecount);
    
@@ -1073,9 +1073,10 @@
 // space, and we should therefore not check anything it points to.
 PRE(sys_ptrace)
 {
-   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "ptrace", 
-                 long, request, long, pid, long, addr, long, data);
+                 long, request, long, pid, unsigned long, addr,
+                 unsigned long, data);
    switch (ARG1) {
    case VKI_PTRACE_PEEKTEXT:
    case VKI_PTRACE_PEEKDATA:
@@ -1196,8 +1197,8 @@
    a5 = args[5-1];
    a6 = args[6-1];
 
-   PRINT("old_mmap ( %#lx, %llu, %ld, %ld, %ld, %ld )",
-         a1, (ULong)a2, a3, a4, a5, a6 );
+   PRINT("old_mmap ( %#lx, %lu, %ld, %ld, %ld, %ld )",
+         a1, a2, (Word)a3, (Word)a4, (Word)a5, (Word)a6 );
 
    r = ML_(generic_PRE_sys_mmap)( tid, a1, a2, a3, a4, a5, (Off64T)a6 );
    SET_STATUS_from_SysRes(r);
@@ -1214,8 +1215,8 @@
    // pagesize or 4K-size units in offset?  For ppc32/64-linux, this is
    // 4K-sized.  Assert that the page size is 4K here for safety.
    vg_assert(VKI_PAGE_SIZE == 4096);
-   PRINT("sys_mmap2 ( %#lx, %llu, %ld, %ld, %ld, %ld )",
-         ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
+   PRINT("sys_mmap2 ( %#lx, %lu, %lu, %lu, %lu, %lu )",
+         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
    PRE_REG_READ6(long, "mmap2",
                  unsigned long, start, unsigned long, length,
                  unsigned long, prot,  unsigned long, flags,
@@ -1232,7 +1233,7 @@
 // things, eventually, I think.  --njn
 PRE(sys_lstat64)
 {
-   PRINT("sys_lstat64 ( %#lx(%s), %#lx )",ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_lstat64 ( %#lx(%s), %#lx )", ARG1, (HChar*)ARG1, ARG2);
    PRE_REG_READ2(long, "lstat64", char *, file_name, struct stat64 *, buf);
    PRE_MEM_RASCIIZ( "lstat64(file_name)", ARG1 );
    PRE_MEM_WRITE( "lstat64(buf)", ARG2, sizeof(struct vki_stat64) );
@@ -1249,7 +1250,7 @@
 PRE(sys_stat64)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_stat64 ( %#lx(%s), %#lx )",ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_stat64 ( %#lx(%s), %#lx )", ARG1, (HChar*)ARG1, ARG2);
    PRE_REG_READ2(long, "stat64", char *, file_name, struct stat64 *, buf);
    PRE_MEM_RASCIIZ( "stat64(file_name)", ARG1 );
    PRE_MEM_WRITE( "stat64(buf)", ARG2, sizeof(struct vki_stat64) );
@@ -1263,9 +1264,12 @@
 PRE(sys_fstatat64)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fstatat64 ( %ld, %#lx(%s), %#lx )",ARG1,ARG2,(char*)ARG2,ARG3);
-   PRE_REG_READ3(long, "fstatat64",
-                 int, dfd, char *, file_name, struct stat64 *, buf);
+   // ARG4 =  int flags;  Flags are or'ed together, therefore writing them
+   // as a hex constant is more meaningful.
+   PRINT("sys_fstatat64 ( %ld, %#lx(%s), %#lx, %#lx )",
+         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
+   PRE_REG_READ4(long, "fstatat64",
+                 int, dfd, char *, file_name, struct stat64 *, buf, int, flags);
    PRE_MEM_RASCIIZ( "fstatat64(file_name)", ARG2 );
    PRE_MEM_WRITE( "fstatat64(buf)", ARG3, sizeof(struct vki_stat64) );
 }
@@ -1277,7 +1281,7 @@
 
 PRE(sys_fstat64)
 {
-   PRINT("sys_fstat64 ( %ld, %#lx )",ARG1,ARG2);
+   PRINT("sys_fstat64 ( %lu, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(long, "fstat64", unsigned long, fd, struct stat64 *, buf);
    PRE_MEM_WRITE( "fstat64(buf)", ARG2, sizeof(struct vki_stat64) );
 }
@@ -1301,7 +1305,7 @@
       that takes a pointer to the signal mask so supports more signals.
     */
    *flags |= SfMayBlock;
-   PRINT("sys_sigsuspend ( %ld, %ld, %ld )", ARG1,ARG2,ARG3 );
+   PRINT("sys_sigsuspend ( %ld, %ld, %lu )", SARG1, SARG2, ARG3 );
    PRE_REG_READ3(int, "sigsuspend",
                  int, history0, int, history1,
                  vki_old_sigset_t, mask);
@@ -1321,7 +1325,7 @@
 
 PRE(sys_vm86)
 {
-   PRINT("sys_vm86 ( %ld, %#lx )", ARG1,ARG2);
+   PRINT("sys_vm86 ( %lu, %#lx )", ARG1, ARG2);
    PRE_REG_READ2(int, "vm86", unsigned long, fn, struct vm86plus_struct *, v86);
    if (ARG1 == VKI_VM86_ENTER || ARG1 == VKI_VM86_ENTER_NO_BYPASS)
       PRE_MEM_WRITE( "vm86(v86)", ARG2, sizeof(struct vki_vm86plus_struct));
diff --git a/coregrind/m_syswrap/syswrap-x86-solaris.c b/coregrind/m_syswrap/syswrap-x86-solaris.c
new file mode 100644
index 0000000..ed57729
--- /dev/null
+++ b/coregrind/m_syswrap/syswrap-x86-solaris.c
@@ -0,0 +1,990 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Platform-specific syscalls stuff.      syswrap-x86-solaris.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2011-2015 Petr Pavlu
+      setup@dagobah.cz
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+#if defined(VGP_x86_solaris)
+
+#include "libvex_guest_offsets.h"
+#include "pub_core_basics.h"
+#include "pub_core_vki.h"
+#include "pub_core_threadstate.h"
+#include "pub_core_aspacemgr.h"
+#include "pub_core_xarray.h"
+#include "pub_core_clientstate.h"
+#include "pub_core_debuglog.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcfile.h"
+#include "pub_core_libcprint.h"
+#include "pub_core_libcsignal.h"
+#include "pub_core_machine.h"           // VG_(get_SP)
+#include "pub_core_mallocfree.h"
+#include "pub_core_options.h"
+#include "pub_core_tooliface.h"
+#include "pub_core_signals.h"
+#include "pub_core_syscall.h"
+#include "pub_core_syswrap.h"
+
+#include "priv_types_n_macros.h"
+#include "priv_syswrap-generic.h"
+#include "priv_syswrap-solaris.h"
+
+/* Call f(arg1), but first switch stacks, using 'stack' as the new stack, and
+   use 'retaddr' as f's return-to address.  Also, clear all the integer
+   registers before entering f. */
+__attribute__((noreturn))
+void ML_(call_on_new_stack_0_1)(Addr stack,             /* 4(%esp) */
+                                Addr retaddr,           /* 8(%esp) */
+                                void (*f)(Word),        /* 12(%esp) */
+                                Word arg1);             /* 16(%esp) */
+__asm__ (
+".text\n"
+".globl vgModuleLocal_call_on_new_stack_0_1\n"
+"vgModuleLocal_call_on_new_stack_0_1:\n"
+"   movl  %esp, %esi\n"         /* remember old stack pointer */
+"   movl  4(%esi), %esp\n"      /* set stack */
+"   pushl $0\n"                 /* align stack */
+"   pushl $0\n"                 /* align stack */
+"   pushl $0\n"                 /* align stack */
+"   pushl 16(%esi)\n"           /* arg1 to stack */
+"   pushl 8(%esi)\n"            /* retaddr to stack */
+"   pushl 12(%esi)\n"           /* f to stack */
+"   movl  $0, %eax\n"           /* zero all GP regs */
+"   movl  $0, %ebx\n"
+"   movl  $0, %ecx\n"
+"   movl  $0, %edx\n"
+"   movl  $0, %esi\n"
+"   movl  $0, %edi\n"
+"   movl  $0, %ebp\n"
+"   ret\n"                      /* jump to f */
+"   ud2\n"                      /* should never get here */
+".previous\n"
+);
+
+/* This function is called to setup a context of a new Valgrind thread (which
+   will run the client code). */
+void ML_(setup_start_thread_context)(ThreadId tid, vki_ucontext_t *uc)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   UWord *stack = (UWord*)tst->os_state.valgrind_stack_init_SP;
+   UShort cs, ds, ss, es, fs, gs;
+
+   VG_(memset)(uc, 0, sizeof(*uc));
+   uc->uc_flags = VKI_UC_CPU | VKI_UC_SIGMASK;
+
+   /* Start the thread with everything blocked. */
+   VG_(sigfillset)(&uc->uc_sigmask);
+
+   /* Set up the stack, it should be always 16-byte aligned before doing
+      a function call, i.e. the first parameter is also 16-byte aligned. */
+   vg_assert(VG_IS_16_ALIGNED(stack));
+   stack -= 1;
+   stack[0] = 0; /* bogus return value */
+   stack[1] = (UWord)tst; /* the parameter */
+
+   /* Set up the registers. */
+   uc->uc_mcontext.gregs[VKI_EIP] = (UWord)ML_(start_thread_NORETURN);
+   uc->uc_mcontext.gregs[VKI_UESP] = (UWord)stack;
+
+   /* Copy segment registers. */
+   __asm__ __volatile__(
+      "movw %%cs, %[cs]\n"
+      "movw %%ds, %[ds]\n"
+      "movw %%ss, %[ss]\n"
+      "movw %%es, %[es]\n"
+      "movw %%fs, %[fs]\n"
+      "movw %%gs, %[gs]\n"
+      : [cs] "=m" (cs), [ds] "=m" (ds), [ss] "=m" (ss), [es] "=m" (es),
+        [fs] "=m" (fs), [gs] "=m" (gs));
+   uc->uc_mcontext.gregs[VKI_CS] = cs;
+   uc->uc_mcontext.gregs[VKI_DS] = ds;
+   uc->uc_mcontext.gregs[VKI_SS] = ss;
+   uc->uc_mcontext.gregs[VKI_ES] = es;
+   uc->uc_mcontext.gregs[VKI_FS] = fs;
+   uc->uc_mcontext.gregs[VKI_GS] = gs;
+}
+
+/* Architecture-specific part of VG_(save_context). */
+void ML_(save_machine_context)(ThreadId tid, vki_ucontext_t *uc,
+                               CorePart part)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   struct vki_fpchip_state *fs
+      = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state;
+   SizeT i;
+
+   /* CPU */
+   /* Common registers */
+   uc->uc_mcontext.gregs[VKI_EIP] = tst->arch.vex.guest_EIP;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_EIP,
+            (Addr)&uc->uc_mcontext.gregs[VKI_EIP], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_EAX] = tst->arch.vex.guest_EAX;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_EAX,
+            (Addr)&uc->uc_mcontext.gregs[VKI_EAX], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_EBX] = tst->arch.vex.guest_EBX;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_EBX,
+            (Addr)&uc->uc_mcontext.gregs[VKI_EBX], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_ECX] = tst->arch.vex.guest_ECX;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_ECX,
+            (Addr)&uc->uc_mcontext.gregs[VKI_ECX], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_EDX] = tst->arch.vex.guest_EDX;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_EDX,
+            (Addr)&uc->uc_mcontext.gregs[VKI_EDX], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_EBP] = tst->arch.vex.guest_EBP;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_EBP,
+            (Addr)&uc->uc_mcontext.gregs[VKI_EBP], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_ESI] = tst->arch.vex.guest_ESI;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_ESI,
+            (Addr)&uc->uc_mcontext.gregs[VKI_ESI], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_EDI] = tst->arch.vex.guest_EDI;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_EDI,
+            (Addr)&uc->uc_mcontext.gregs[VKI_EDI], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_UESP] = tst->arch.vex.guest_ESP;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_ESP,
+            (Addr)&uc->uc_mcontext.gregs[VKI_UESP], sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_ESP] = 0;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&uc->uc_mcontext.gregs[VKI_ESP],
+            sizeof(UWord));
+
+   /* ERR and TRAPNO */
+   uc->uc_mcontext.gregs[VKI_ERR] = 0;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&uc->uc_mcontext.gregs[VKI_ERR],
+            sizeof(UWord));
+   uc->uc_mcontext.gregs[VKI_TRAPNO] = 0;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&uc->uc_mcontext.gregs[VKI_TRAPNO],
+            sizeof(UWord));
+
+   /* Segment registers */
+   /* Note that segment registers are 16b in VEX, but 32b in mcontext.  Thus
+      we tell a tool that the lower 16 bits were copied and that the higher 16
+      bits were set (to zero).  (This assumes a little-endian
+      architecture.) */
+   uc->uc_mcontext.gregs[VKI_CS] = tst->arch.vex.guest_CS;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_CS,
+            (Addr)&uc->uc_mcontext.gregs[VKI_CS], sizeof(UShort));
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)(&uc->uc_mcontext.gregs[VKI_CS]) + 2, sizeof(UShort));
+   uc->uc_mcontext.gregs[VKI_DS] = tst->arch.vex.guest_DS;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_DS,
+            (Addr)&uc->uc_mcontext.gregs[VKI_DS], sizeof(UShort));
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)(&uc->uc_mcontext.gregs[VKI_DS]) + 2, sizeof(UShort));
+   uc->uc_mcontext.gregs[VKI_SS] = tst->arch.vex.guest_SS;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_SS,
+            (Addr)&uc->uc_mcontext.gregs[VKI_SS], sizeof(UShort));
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)(&uc->uc_mcontext.gregs[VKI_SS]) + 2, sizeof(UShort));
+   uc->uc_mcontext.gregs[VKI_ES] = tst->arch.vex.guest_ES;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_ES,
+            (Addr)&uc->uc_mcontext.gregs[VKI_ES], sizeof(UShort));
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)(&uc->uc_mcontext.gregs[VKI_ES]) + 2, sizeof(UShort));
+   uc->uc_mcontext.gregs[VKI_FS] = tst->arch.vex.guest_FS;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_FS,
+            (Addr)&uc->uc_mcontext.gregs[VKI_FS], sizeof(UShort));
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)(&uc->uc_mcontext.gregs[VKI_FS]) + 2, sizeof(UShort));
+   uc->uc_mcontext.gregs[VKI_GS] = tst->arch.vex.guest_GS;
+   VG_TRACK(copy_reg_to_mem, part, tid, OFFSET_x86_GS,
+            (Addr)&uc->uc_mcontext.gregs[VKI_GS], sizeof(UShort));
+   VG_TRACK(post_mem_write, part, tid,
+            (Addr)(&uc->uc_mcontext.gregs[VKI_GS]) + 2, sizeof(UShort));
+
+   /* Handle eflags (optimistically make all flags defined). */
+   uc->uc_mcontext.gregs[VKI_EFL] =
+      LibVEX_GuestX86_get_eflags(&tst->arch.vex);
+   VG_TRACK(post_mem_write, part, tid, (Addr)&uc->uc_mcontext.gregs[VKI_EFL],
+         sizeof(UWord));
+   /* The LibVEX_GuestX86_get_eflags() call calculates eflags value from the
+      CC_OP, CC_DEP1, CC_DEP2, CC_NDEP, DFLAG, IDFLAG and ACFLAG guest state
+      values.  The *FLAG values represent one-bit information and are saved
+      without loss of precision into eflags.  However when CC_* values are
+      converted into eflags then precision is lost.  What we do here is to
+      save unmodified CC_* values into unused ucontext members (the 'long
+      uc_filler[5] and 'int fs->__pad[2]' arrays) so we can then restore the
+      context in ML_(restore_machine_context)() without the loss of precision.
+      This imposes a requirement on client programs to not use these two
+      members. Luckily this is never a case in Solaris-gate programs and
+      libraries. */
+   /* CC_OP and CC_NDEP are always defined, but we don't want to tell a tool
+      that we just defined uc_filler[0,1].  This helps if someone uses an
+      uninitialized ucontext and tries to read (use) uc_filler[0,1].  Memcheck
+      in such a case should detect this error. */
+   VKI_UC_GUEST_CC_OP(uc) = tst->arch.vex.guest_CC_OP;
+   VKI_UC_GUEST_CC_NDEP(uc) = tst->arch.vex.guest_CC_NDEP;
+   /* We want to copy shadow values of CC_DEP1 and CC_DEP2 so we have to tell
+      a tool about this copy. */
+   VKI_UC_GUEST_CC_DEP1(uc) = tst->arch.vex.guest_CC_DEP1;
+   VG_TRACK(copy_reg_to_mem, part, tid,
+            offsetof(VexGuestX86State, guest_CC_DEP1),
+            (Addr)&VKI_UC_GUEST_CC_DEP1(uc), sizeof(UWord));
+   VKI_UC_GUEST_CC_DEP2(uc) = tst->arch.vex.guest_CC_DEP2;
+   VG_TRACK(copy_reg_to_mem, part, tid,
+            offsetof(VexGuestX86State, guest_CC_DEP2),
+            (Addr)&VKI_UC_GUEST_CC_DEP2(uc), sizeof(UWord));
+   /* Make another copy of eflags. */
+   VKI_UC_GUEST_EFLAGS_NEG(uc) = ~uc->uc_mcontext.gregs[VKI_EFL];
+   /* Calculate a checksum. */
+   {
+      UInt buf[5];
+      UInt checksum;
+
+      buf[0] = VKI_UC_GUEST_CC_OP(uc);
+      buf[1] = VKI_UC_GUEST_CC_NDEP(uc);
+      buf[2] = VKI_UC_GUEST_CC_DEP1(uc);
+      buf[3] = VKI_UC_GUEST_CC_DEP2(uc);
+      buf[4] = uc->uc_mcontext.gregs[VKI_EFL];
+      checksum = ML_(fletcher32)((UShort*)&buf, sizeof(buf) / sizeof(UShort));
+      /* Store the checksum. */
+      VKI_UC_GUEST_EFLAGS_CHECKSUM(uc) = checksum;
+   }
+
+   /* FPU */
+   /* x87 */
+   vg_assert(sizeof(fs->state) == 108);
+   LibVEX_GuestX86_get_x87(&tst->arch.vex, (UChar*)&fs->state);
+
+   /* Flags and control words */
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->state, 28);
+   /* ST registers */
+   for (i = 0; i < 8; i++) {
+      Addr addr = (Addr)&fs->state + 28 + i * 10;
+      /* x87 uses 80b FP registers but VEX uses only 64b registers, thus we
+         have to lie here. :< */
+      VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+               guest_FPREG[i]), addr, sizeof(ULong));
+      VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+               guest_FPREG[i]), addr + 8, sizeof(UShort));
+      }
+
+   /* Status word (sw) at exception */
+   fs->status = 0;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->status, sizeof(fs->status));
+
+   /* SSE */
+   fs->mxcsr = LibVEX_GuestX86_get_mxcsr(&tst->arch.vex);
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->mxcsr, sizeof(fs->mxcsr));
+
+   /* MXCSR at exception */
+   fs->xstatus = 0;
+   VG_TRACK(post_mem_write, part, tid, (Addr)&fs->xstatus,
+            sizeof(fs->xstatus));
+
+   /* XMM registers */
+#define COPY_OUT_XMM(dest, src) \
+   do {                         \
+      dest._l[0] = src[0];      \
+      dest._l[1] = src[1];      \
+      dest._l[2] = src[2];      \
+      dest._l[3] = src[3];      \
+   } while (0)
+   COPY_OUT_XMM(fs->xmm[0], tst->arch.vex.guest_XMM0);
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+            guest_XMM0), (Addr)&fs->xmm[0], sizeof(U128));
+   COPY_OUT_XMM(fs->xmm[1], tst->arch.vex.guest_XMM1);
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+            guest_XMM1), (Addr)&fs->xmm[1], sizeof(U128));
+   COPY_OUT_XMM(fs->xmm[2], tst->arch.vex.guest_XMM2);
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+            guest_XMM2), (Addr)&fs->xmm[2], sizeof(U128));
+   COPY_OUT_XMM(fs->xmm[3], tst->arch.vex.guest_XMM3);
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+            guest_XMM3), (Addr)&fs->xmm[3], sizeof(U128));
+   COPY_OUT_XMM(fs->xmm[4], tst->arch.vex.guest_XMM4);
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+            guest_XMM4), (Addr)&fs->xmm[4], sizeof(U128));
+   COPY_OUT_XMM(fs->xmm[5], tst->arch.vex.guest_XMM5);
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+            guest_XMM5), (Addr)&fs->xmm[5], sizeof(U128));
+   COPY_OUT_XMM(fs->xmm[6], tst->arch.vex.guest_XMM6);
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+            guest_XMM6), (Addr)&fs->xmm[6], sizeof(U128));
+   COPY_OUT_XMM(fs->xmm[7], tst->arch.vex.guest_XMM7);
+   VG_TRACK(copy_reg_to_mem, part, tid, offsetof(VexGuestX86State,
+            guest_XMM7), (Addr)&fs->xmm[7], sizeof(U128));
+#undef COPY_OUT_XMM
+}
+
+/* Architecture-specific part of VG_(restore_context). */
+void ML_(restore_machine_context)(ThreadId tid, vki_ucontext_t *uc,
+                                  CorePart part, Bool esp_is_thrptr)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   struct vki_fpchip_state *fs
+      = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state;
+
+   /* CPU */
+   if (uc->uc_flags & VKI_UC_CPU) {
+      /* Common registers */
+      tst->arch.vex.guest_EIP = uc->uc_mcontext.gregs[VKI_EIP];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_EIP], OFFSET_x86_EIP,
+               sizeof(UWord));
+      tst->arch.vex.guest_EAX = uc->uc_mcontext.gregs[VKI_EAX];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_EAX], OFFSET_x86_EAX,
+               sizeof(UWord));
+      tst->arch.vex.guest_EBX = uc->uc_mcontext.gregs[VKI_EBX];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_EBX], OFFSET_x86_EBX,
+               sizeof(UWord));
+      tst->arch.vex.guest_ECX = uc->uc_mcontext.gregs[VKI_ECX];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_ECX], OFFSET_x86_ECX,
+               sizeof(UWord));
+      tst->arch.vex.guest_EDX = uc->uc_mcontext.gregs[VKI_EDX];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_EDX], OFFSET_x86_EDX,
+               sizeof(UWord));
+      tst->arch.vex.guest_EBP = uc->uc_mcontext.gregs[VKI_EBP];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_EBP], OFFSET_x86_EBP,
+               sizeof(UWord));
+      tst->arch.vex.guest_ESI = uc->uc_mcontext.gregs[VKI_ESI];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_ESI], OFFSET_x86_ESI,
+               sizeof(UWord));
+      tst->arch.vex.guest_EDI = uc->uc_mcontext.gregs[VKI_EDI];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_EDI], OFFSET_x86_EDI,
+               sizeof(UWord));
+      tst->arch.vex.guest_ESP = uc->uc_mcontext.gregs[VKI_UESP];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_UESP], OFFSET_x86_ESP,
+               sizeof(UWord));
+
+      if (esp_is_thrptr) {
+         /* The thrptr value is passed by libc to the kernel in the otherwise
+            unused ESP field.  This is used when a new thread is created. */
+         VG_TRACK(pre_mem_read, part, tid,
+                  "restore_machine_context(uc->uc_mcontext.gregs[VKI_ESP])",
+                  (Addr)&uc->uc_mcontext.gregs[VKI_ESP], sizeof(UWord));
+         if (uc->uc_mcontext.gregs[VKI_ESP]) {
+            tst->os_state.thrptr = uc->uc_mcontext.gregs[VKI_ESP];
+            ML_(update_gdt_lwpgs)(tid);
+         }
+      }
+
+      /* Ignore ERR and TRAPNO. */
+
+      /* Segment registers */
+      tst->arch.vex.guest_CS = uc->uc_mcontext.gregs[VKI_CS];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_CS], OFFSET_x86_CS,
+               sizeof(UShort));
+      tst->arch.vex.guest_DS = uc->uc_mcontext.gregs[VKI_DS];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_DS], OFFSET_x86_DS,
+               sizeof(UShort));
+      tst->arch.vex.guest_SS = uc->uc_mcontext.gregs[VKI_SS];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_SS], OFFSET_x86_SS,
+               sizeof(UShort));
+      tst->arch.vex.guest_ES = uc->uc_mcontext.gregs[VKI_ES];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_ES], OFFSET_x86_ES,
+               sizeof(UShort));
+      tst->arch.vex.guest_FS = uc->uc_mcontext.gregs[VKI_FS];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_FS], OFFSET_x86_FS,
+               sizeof(UShort));
+      tst->arch.vex.guest_GS = uc->uc_mcontext.gregs[VKI_GS];
+      VG_TRACK(copy_mem_to_reg, part, tid,
+               (Addr)&uc->uc_mcontext.gregs[VKI_GS], OFFSET_x86_GS,
+               sizeof(UShort));
+
+      /* Eflags */
+      {
+         UInt eflags;
+         UInt orig_eflags;
+         UInt new_eflags;
+         Bool ok_restore = False;
+
+         VG_TRACK(pre_mem_read, part, tid,
+                  "restore_machine_context(uc->uc_mcontext.gregs[VKI_EFL])",
+                  (Addr)&uc->uc_mcontext.gregs[VKI_EFL], sizeof(UWord));
+         eflags = uc->uc_mcontext.gregs[VKI_EFL];
+         orig_eflags = LibVEX_GuestX86_get_eflags(&tst->arch.vex);
+         new_eflags = eflags;
+         /* The kernel disallows the ID flag to be changed via the setcontext
+            call, thus do the same. */
+         if (orig_eflags & VKI_EFLAGS_ID_BIT)
+            new_eflags |= VKI_EFLAGS_ID_BIT;
+         else
+            new_eflags &= ~VKI_EFLAGS_ID_BIT;
+         LibVEX_GuestX86_put_eflags(new_eflags, &tst->arch.vex);
+         VG_TRACK(post_reg_write, part, tid,
+                  offsetof(VexGuestX86State, guest_CC_DEP1), sizeof(UWord));
+         VG_TRACK(post_reg_write, part, tid,
+                  offsetof(VexGuestX86State, guest_CC_DEP2), sizeof(UWord));
+
+         /* Check if this context was created by us in VG_(save_context). In
+            that case, try to restore the CC_OP, CC_DEP1, CC_DEP2 and CC_NDEP
+            values which we previously stashed into unused members of the
+            context. */
+         if (eflags != ~VKI_UC_GUEST_EFLAGS_NEG(uc)) {
+            VG_(debugLog)(1, "syswrap-solaris",
+                             "The eflags value was restored from an "
+                             "explicitly set value in thread %u.\n", tid);
+            ok_restore = True;
+         }
+         else {
+            UInt buf[5];
+            UInt checksum;
+
+            buf[0] = VKI_UC_GUEST_CC_OP(uc);
+            buf[1] = VKI_UC_GUEST_CC_NDEP(uc);
+            buf[2] = VKI_UC_GUEST_CC_DEP1(uc);
+            buf[3] = VKI_UC_GUEST_CC_DEP2(uc);
+            buf[4] = eflags;
+            checksum = ML_(fletcher32)((UShort*)&buf,
+                                       sizeof(buf) / sizeof(UShort));
+            if (checksum == VKI_UC_GUEST_EFLAGS_CHECKSUM(uc)) {
+               /* Check ok, the full restoration is possible. */
+               VG_(debugLog)(1, "syswrap-solaris",
+                                "The CC_* guest state values were fully "
+                                "restored in thread %u.\n", tid);
+               ok_restore = True;
+
+               tst->arch.vex.guest_CC_OP = VKI_UC_GUEST_CC_OP(uc);
+               tst->arch.vex.guest_CC_NDEP = VKI_UC_GUEST_CC_NDEP(uc);
+               tst->arch.vex.guest_CC_DEP1 = VKI_UC_GUEST_CC_DEP1(uc);
+               VG_TRACK(copy_mem_to_reg, part, tid,
+                        (Addr)&VKI_UC_GUEST_CC_DEP1(uc),
+                        offsetof(VexGuestX86State, guest_CC_DEP1),
+                        sizeof(UWord));
+               tst->arch.vex.guest_CC_DEP2 = VKI_UC_GUEST_CC_DEP2(uc);
+               VG_TRACK(copy_mem_to_reg, part, tid,
+                        (Addr)&VKI_UC_GUEST_CC_DEP2(uc),
+                        offsetof(VexGuestX86State, guest_CC_DEP2),
+                        sizeof(UWord));
+            }
+         }
+
+         if (!ok_restore)
+            VG_(debugLog)(1, "syswrap-solaris",
+                             "Cannot fully restore the CC_* guest state "
+                             "values, using approximate eflags in thread "
+                             "%u.\n", tid);
+      }
+   }
+
+   if (uc->uc_flags & VKI_UC_FPU) {
+      /* FPU */
+      VexEmNote note;
+      SizeT i;
+
+      /* x87 */
+      /* Flags and control words */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..x87_state)",
+               (Addr)&fs->state, 28);
+      /* ST registers */
+      for (i = 0; i < 8; i++) {
+         Addr addr = (Addr)&fs->state + 28 + i * 10;
+         VG_TRACK(copy_mem_to_reg, part, tid, addr,
+                  offsetof(VexGuestX86State, guest_FPREG[i]), sizeof(ULong));
+      }
+      note = LibVEX_GuestX86_put_x87((UChar*)&fs->state, &tst->arch.vex);
+      if (note != EmNote_NONE)
+         VG_(message)(Vg_UserMsg,
+                      "Error restoring x87 state in thread %u: %s.\n",
+                      tid, LibVEX_EmNote_string(note));
+
+      /* SSE */
+      VG_TRACK(pre_mem_read, part, tid,
+               "restore_machine_context(uc->uc_mcontext.fpregs..mxcsr)",
+               (Addr)&fs->mxcsr, sizeof(fs->mxcsr));
+      note = LibVEX_GuestX86_put_mxcsr(fs->mxcsr, &tst->arch.vex);
+      if (note != EmNote_NONE)
+         VG_(message)(Vg_UserMsg,
+                      "Error restoring mxcsr state in thread %u: %s.\n",
+                      tid, LibVEX_EmNote_string(note));
+      /* XMM registers */
+#define COPY_IN_XMM(src, dest) \
+      do {                     \
+         dest[0] = src._l[0];  \
+         dest[1] = src._l[1];  \
+         dest[2] = src._l[2];  \
+         dest[3] = src._l[3];  \
+      } while (0)
+      COPY_IN_XMM(fs->xmm[0], tst->arch.vex.guest_XMM0);
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[0],
+               offsetof(VexGuestX86State, guest_XMM0), sizeof(U128));
+      COPY_IN_XMM(fs->xmm[1], tst->arch.vex.guest_XMM1);
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[1],
+               offsetof(VexGuestX86State, guest_XMM1), sizeof(U128));
+      COPY_IN_XMM(fs->xmm[2], tst->arch.vex.guest_XMM2);
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[2],
+               offsetof(VexGuestX86State, guest_XMM2), sizeof(U128));
+      COPY_IN_XMM(fs->xmm[3], tst->arch.vex.guest_XMM3);
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[3],
+               offsetof(VexGuestX86State, guest_XMM3), sizeof(U128));
+      COPY_IN_XMM(fs->xmm[4], tst->arch.vex.guest_XMM4);
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[4],
+               offsetof(VexGuestX86State, guest_XMM4), sizeof(U128));
+      COPY_IN_XMM(fs->xmm[5], tst->arch.vex.guest_XMM5);
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[5],
+               offsetof(VexGuestX86State, guest_XMM5), sizeof(U128));
+      COPY_IN_XMM(fs->xmm[6], tst->arch.vex.guest_XMM6);
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[6],
+               offsetof(VexGuestX86State, guest_XMM6), sizeof(U128));
+      COPY_IN_XMM(fs->xmm[7], tst->arch.vex.guest_XMM7);
+      VG_TRACK(copy_mem_to_reg, part, tid, (Addr)&fs->xmm[7],
+               offsetof(VexGuestX86State, guest_XMM7), sizeof(U128));
+#undef COPY_IN_XMM
+   }
+}
+
+/* Allocate GDT for a given thread. */
+void ML_(setup_gdt)(VexGuestX86State *vex)
+{
+   Addr gdt = (Addr)VG_(calloc)("syswrap-solaris-x86.gdt",
+                                VEX_GUEST_X86_GDT_NENT,
+                                sizeof(VexGuestX86SegDescr));
+   vex->guest_GDT = gdt;
+}
+
+/* Deallocate GDT for a given thread. */
+void ML_(cleanup_gdt)(VexGuestX86State *vex)
+{
+   if (!vex->guest_GDT)
+      return;
+   VG_(free)((void*)vex->guest_GDT);
+   vex->guest_GDT = 0;
+}
+
+/* For a given thread, update the LWPGS descriptor in the thread's GDT
+   according to the thread pointer. */
+void ML_(update_gdt_lwpgs)(ThreadId tid)
+{
+   ThreadState *tst = VG_(get_ThreadState)(tid);
+   Addr base = tst->os_state.thrptr;
+   VexGuestX86SegDescr *gdt = (VexGuestX86SegDescr*)tst->arch.vex.guest_GDT;
+   VexGuestX86SegDescr desc;
+
+   vg_assert(gdt);
+
+   VG_(memset)(&desc, 0, sizeof(desc));
+   if (base) {
+      desc.LdtEnt.Bits.LimitLow = -1;
+      desc.LdtEnt.Bits.LimitHi = -1;
+      desc.LdtEnt.Bits.BaseLow = base & 0xffff;
+      desc.LdtEnt.Bits.BaseMid = (base >> 16) & 0xff;
+      desc.LdtEnt.Bits.BaseHi = (base >> 24) & 0xff;
+      desc.LdtEnt.Bits.Pres = 1;
+      desc.LdtEnt.Bits.Dpl = 3; /* SEL_UPL */
+      desc.LdtEnt.Bits.Type = 19; /* SDT_MEMRWA */
+      desc.LdtEnt.Bits.Granularity = 1; /* SDP_PAGES */
+      desc.LdtEnt.Bits.Default_Big = 1; /* SDP_OP32 */
+   }
+
+   gdt[VKI_GDT_LWPGS] = desc;
+
+   /* Write %gs. */
+   tst->arch.vex.guest_GS = VKI_LWPGS_SEL;
+   VG_TRACK(post_reg_write, Vg_CoreSysCall, tid, OFFSET_x86_GS,
+            sizeof(UShort));
+}
+
+
+/* ---------------------------------------------------------------------
+   PRE/POST wrappers for x86/Solaris-specific syscalls
+   ------------------------------------------------------------------ */
+
+#define PRE(name)       DEFN_PRE_TEMPLATE(x86_solaris, name)
+#define POST(name)      DEFN_POST_TEMPLATE(x86_solaris, name)
+
+/* implementation */
+
+PRE(sys_fstatat64)
+{
+   /* int fstatat64(int fildes, const char *path, struct stat64 *buf,
+                    int flag); */
+   PRINT("sys_fstatat64 ( %ld, %#lx(%s), %#lx, %ld )", SARG1, ARG2,
+         (HChar*)ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "fstatat64", int, fildes, const char *, path,
+                 struct stat64 *, buf, int, flag);
+   if (ARG2)
+      PRE_MEM_RASCIIZ("fstatat64(path)", ARG2);
+   PRE_MEM_WRITE("fstatat64(buf)", ARG3, sizeof(struct vki_stat64));
+
+   /* Be strict. */
+   if (ARG1 != VKI_AT_FDCWD &&
+       !ML_(fd_allowed)(ARG1, "fstatat64", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_fstatat64)
+{
+   POST_MEM_WRITE(ARG3, sizeof(struct vki_stat64));
+}
+
+PRE(sys_openat64)
+{
+   /* int openat64(int fildes, const char *filename, int flags);
+      int openat64(int fildes, const char *filename, int flags, mode_t mode);
+    */
+   *flags |= SfMayBlock;
+
+   if (ARG3 & VKI_O_CREAT) {
+      /* 4-arg version */
+      PRINT("sys_openat64 ( %ld, %#lx(%s), %ld, %ld )", SARG1, ARG2,
+            (HChar*)ARG2, SARG3, SARG4);
+      PRE_REG_READ4(long, "openat64", int, fildes, const char *, filename,
+                    int, flags, vki_mode_t, mode);
+   }
+   else {
+      /* 3-arg version */
+      PRINT("sys_openat64 ( %ld, %#lx(%s), %ld )", SARG1, ARG2, (HChar*)ARG2,
+            SARG3);
+      PRE_REG_READ3(long, "openat64", int, fildes, const char *, filename,
+                    int, flags);
+   }
+
+   PRE_MEM_RASCIIZ("openat64(filename)", ARG2);
+
+   /* Be strict. */
+   if (ARG1 != VKI_AT_FDCWD && !ML_(fd_allowed)(ARG1, "openat64", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_openat64)
+{
+   if (!ML_(fd_allowed)(RES, "openat64", tid, True)) {
+      VG_(close)(RES);
+      SET_STATUS_Failure(VKI_EMFILE);
+   }
+   else if (VG_(clo_track_fds))
+      ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)ARG2);
+}
+
+PRE(sys_llseek32)
+{
+   /* offset_t llseek(int fildes, offset_t offset, int whence); */
+   PRINT("sys_llseek32 ( %ld, %#lx, %#lx, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRE_REG_READ4(long, "llseek", int, fildes, vki_u32, offset_low,
+                 vki_u32, offset_high, int, whence);
+
+   /* Stay sane. */
+   if (!ML_(fd_allowed)(ARG1, "llseek", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_mmap64)
+{
+   /* void *mmap64(void *addr, size_t len, int prot, int flags,
+                   int fildes, uint32_t offlo, uint32_t offhi); */
+   /* Note this wrapper assumes a little-endian architecture, offlo and offhi
+      have to be swapped if a big-endian architecture is present. */
+#if !defined(VG_LITTLEENDIAN)
+#error "Unexpected endianness."
+#endif /* !VG_LITTLEENDIAN */
+
+   SysRes r;
+   ULong u;
+   Off64T offset;
+
+   /* Stay sane. */
+   vg_assert(VKI_PAGE_SIZE == 4096);
+   vg_assert(sizeof(u) == sizeof(offset));
+
+   PRINT("sys_mmap ( %#lx, %#lx, %#lx, %#lx, %ld, %#lx, %#lx )",
+         ARG1, ARG2, ARG3, ARG4, SARG5, ARG6, ARG7);
+   PRE_REG_READ7(long, "mmap", void *, start, vki_size_t, length,
+                 int, prot, int, flags, int, fd, uint32_t, offlo,
+                 uint32_t, offhi);
+
+   /* The offlo and offhi values can actually represent a negative value.
+      Make sure it's passed correctly to the generic mmap wrapper. */
+   u = ((ULong)ARG7 << 32) + ARG6;
+   offset = *(Off64T*)&u;
+
+   r = ML_(generic_PRE_sys_mmap)(tid, ARG1, ARG2, ARG3, ARG4, ARG5, offset);
+   SET_STATUS_from_SysRes(r);
+}
+
+PRE(sys_stat64)
+{
+   /* int stat64(const char *path, struct stat64 *buf); */
+   PRINT("sys_stat64 ( %#lx(%s), %#lx )", ARG1, (HChar*)ARG1, ARG2);
+   PRE_REG_READ2(long, "stat64", const char *, path, struct stat64 *, buf);
+
+   PRE_MEM_RASCIIZ("stat64(path)", ARG1);
+   PRE_MEM_WRITE("stat64(buf)", ARG2, sizeof(struct vki_stat64));
+}
+
+POST(sys_stat64)
+{
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_stat64));
+}
+
+PRE(sys_lstat64)
+{
+   /* int lstat64(const char *path, struct stat64 *buf); */
+   PRINT("sys_lstat64 ( %#lx(%s), %#lx )", ARG1, (HChar*)ARG1, ARG2);
+   PRE_REG_READ2(long, "lstat64", const char *, path, struct stat64 *, buf);
+
+   PRE_MEM_RASCIIZ("lstat64(path)", ARG1);
+   PRE_MEM_WRITE("lstat64(buf)", ARG2, sizeof(struct vki_stat64));
+}
+
+POST(sys_lstat64)
+{
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_stat64));
+}
+
+PRE(sys_fstat64)
+{
+   /* int fstat64(int fildes, struct stat64 *buf); */
+   PRINT("sys_fstat64 ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "fstat64", int, fildes, struct stat64 *, buf);
+   PRE_MEM_WRITE("fstat64(buf)", ARG2, sizeof(struct vki_stat64));
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "fstat64", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_fstat64)
+{
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_stat64));
+}
+
+static void do_statvfs64_post(struct vki_statvfs64 *stats, ThreadId tid)
+{
+   POST_FIELD_WRITE(stats->f_bsize);
+   POST_FIELD_WRITE(stats->f_frsize);
+   POST_FIELD_WRITE(stats->f_blocks);
+   POST_FIELD_WRITE(stats->f_bfree);
+   POST_FIELD_WRITE(stats->f_bavail);
+   POST_FIELD_WRITE(stats->f_files);
+   POST_FIELD_WRITE(stats->f_ffree);
+   POST_FIELD_WRITE(stats->f_favail);
+   POST_FIELD_WRITE(stats->f_fsid);
+   POST_MEM_WRITE((Addr) stats->f_basetype, VG_(strlen)(stats->f_basetype) + 1);
+   POST_FIELD_WRITE(stats->f_flag);
+   POST_FIELD_WRITE(stats->f_namemax);
+   POST_MEM_WRITE((Addr) stats->f_fstr, VG_(strlen)(stats->f_fstr) + 1);
+}
+
+PRE(sys_statvfs64)
+{
+   /* int statvfs64(const char *path, struct statvfs64 *buf); */
+   *flags |= SfMayBlock;
+   PRINT("sys_statvfs64 ( %#lx(%s), %#lx )", ARG1, (HChar *) ARG1, ARG2);
+   PRE_REG_READ2(long, "statvfs64", const char *, path,
+                 struct vki_statvfs64 *, buf);
+   PRE_MEM_RASCIIZ("statvfs64(path)", ARG1);
+   PRE_MEM_WRITE("statvfs64(buf)", ARG2, sizeof(struct vki_statvfs64));
+}
+
+POST(sys_statvfs64)
+{
+   do_statvfs64_post((struct vki_statvfs64 *) ARG2, tid);
+}
+
+PRE(sys_fstatvfs64)
+{
+   /* int fstatvfs64(int fd, struct statvfs64 *buf); */
+   *flags |= SfMayBlock;
+   PRINT("sys_fstatvfs64 ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "fstatvfs64", int, fd, struct vki_statvfs64 *, buf);
+   PRE_MEM_WRITE("fstatvfs64(buf)", ARG2, sizeof(struct vki_statvfs64));
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "fstatvfs64", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_fstatvfs64)
+{
+   do_statvfs64_post((struct vki_statvfs64 *) ARG2, tid);
+}
+
+PRE(sys_setrlimit64)
+{
+   /* int setrlimit64(int resource, struct rlimit64 *rlim); */
+   struct vki_rlimit64 *limit = (struct vki_rlimit64 *)ARG2;
+   PRINT("sys_setrlimit64 ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "setrlimit64", int, resource, struct rlimit64 *, rlim);
+   PRE_MEM_READ("setrlimit64(rlim)", ARG2, sizeof(struct vki_rlimit64));
+
+   if (limit && limit->rlim_cur > limit->rlim_max)
+      SET_STATUS_Failure(VKI_EINVAL);
+   else if (ARG1 == VKI_RLIMIT_NOFILE) {
+      if (limit->rlim_cur > VG_(fd_hard_limit) ||
+          limit->rlim_max != VG_(fd_hard_limit)) {
+         SET_STATUS_Failure(VKI_EPERM);
+      }
+      else {
+         VG_(fd_soft_limit) = limit->rlim_cur;
+         SET_STATUS_Success(0);
+      }
+   }
+   else if (ARG1 == VKI_RLIMIT_DATA) {
+      if (limit->rlim_cur > VG_(client_rlimit_data).rlim_max ||
+          limit->rlim_max > VG_(client_rlimit_data).rlim_max) {
+         SET_STATUS_Failure(VKI_EPERM);
+      }
+      else {
+         VG_(client_rlimit_data).rlim_max = limit->rlim_max;
+         VG_(client_rlimit_data).rlim_cur = limit->rlim_cur;
+         SET_STATUS_Success(0);
+      }
+   }
+   else if (ARG1 == VKI_RLIMIT_STACK && tid == 1) {
+      if (limit->rlim_cur > VG_(client_rlimit_stack).rlim_max ||
+          limit->rlim_max > VG_(client_rlimit_stack).rlim_max) {
+         SET_STATUS_Failure(VKI_EPERM);
+      }
+      else {
+         /* Change the value of client_stack_szB to the rlim_cur value but
+            only if it is smaller than the size of the allocated stack for the
+            client. */
+         if (limit->rlim_cur <= VG_(clstk_max_size))
+            VG_(threads)[tid].client_stack_szB = limit->rlim_cur;
+
+         VG_(client_rlimit_stack).rlim_max = limit->rlim_max;
+         VG_(client_rlimit_stack).rlim_cur = limit->rlim_cur;
+         SET_STATUS_Success(0);
+      }
+   }
+}
+
+PRE(sys_getrlimit64)
+{
+   /* int getrlimit64(int resource, struct rlimit64 *rlim); */
+   PRINT("sys_getrlimit64 ( %ld, %#lx )", SARG1, ARG2);
+   PRE_REG_READ2(long, "getrlimit64",
+                 int, resource, struct rlimit64 *, rlim);
+   PRE_MEM_WRITE("getrlimit64(rlim)", ARG2, sizeof(struct vki_rlimit64));
+}
+
+POST(sys_getrlimit64)
+{
+   /* Based on common_post_getrlimit() from syswrap-generic.c. */
+   struct vki_rlimit64 *rlim = (struct vki_rlimit64*)ARG2;
+
+   POST_MEM_WRITE(ARG2, sizeof(struct vki_rlimit64));
+
+   switch (ARG1 /*resource*/) {
+   case VKI_RLIMIT_NOFILE:
+      rlim->rlim_cur = VG_(fd_soft_limit);
+      rlim->rlim_max = VG_(fd_hard_limit);
+      break;
+   case VKI_RLIMIT_DATA:
+      rlim->rlim_cur = VG_(client_rlimit_data).rlim_cur;
+      rlim->rlim_max = VG_(client_rlimit_data).rlim_max;
+      break;
+   case VKI_RLIMIT_STACK:
+      rlim->rlim_cur = VG_(client_rlimit_stack).rlim_cur;
+      rlim->rlim_max = VG_(client_rlimit_stack).rlim_max;
+      break;
+   }
+}
+
+PRE(sys_pread64)
+{
+   /* ssize32_t pread64(int fd, void *buf, size32_t count,
+                        uint32_t offset_1, uint32_t offset_2);
+    */
+   *flags |= SfMayBlock;
+   PRINT("sys_pread64 ( %ld, %#lx, %lu, %#lx, %#lx )",
+         SARG1, ARG2, ARG3, ARG4, ARG5);
+   PRE_REG_READ5(long, "pread64", int, fd, void *, buf, vki_size32_t, count,
+                 vki_uint32_t, offset_1, vki_uint32_t, offset_2);
+   PRE_MEM_WRITE("pread64(buf)", ARG2, ARG3);
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "pread64", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+POST(sys_pread64)
+{
+   POST_MEM_WRITE(ARG2, RES);
+}
+
+PRE(sys_pwrite64)
+{
+   /* ssize32_t pwrite64(int fd, void *buf, size32_t count,
+                         uint32_t offset_1, uint32_t offset_2);
+    */
+   *flags |= SfMayBlock;
+   PRINT("sys_pwrite64 ( %ld, %#lx, %lu, %#lx, %#lx )",
+         SARG1, ARG2, ARG3, ARG4, ARG5);
+   PRE_REG_READ5(long, "pwrite64", int, fd, void *, buf, vki_size32_t, count,
+                 vki_uint32_t, offset_1, vki_uint32_t, offset_2);
+   PRE_MEM_READ("pwrite64(buf)", ARG2, ARG3);
+
+   /* Be strict. */
+   if (!ML_(fd_allowed)(ARG1, "pwrite64", tid, False))
+      SET_STATUS_Failure(VKI_EBADF);
+}
+
+PRE(sys_open64)
+{
+   /* int open64(const char *filename, int flags);
+      int open64(const char *filename, int flags, mode_t mode); */
+   *flags |= SfMayBlock;
+
+   if (ARG2 & VKI_O_CREAT) {
+      /* 3-arg version */
+      PRINT("sys_open64 ( %#lx(%s), %#lx, %ld )", ARG1, (HChar*)ARG1, ARG2,
+            SARG3);
+      PRE_REG_READ3(long, "open64", const char *, filename, int, flags,
+                    vki_mode_t, mode);
+   }
+   else {
+      /* 2-arg version */
+      PRINT("sys_open64 ( %#lx(%s), %#lx )", ARG1, (HChar*)ARG1, ARG2);
+      PRE_REG_READ2(long, "open64", const char *, filename, int, flags);
+   }
+   PRE_MEM_RASCIIZ("open(filename)", ARG1);
+}
+
+POST(sys_open64)
+{
+   if (!ML_(fd_allowed)(RES, "open64", tid, True)) {
+      VG_(close)(RES);
+      SET_STATUS_Failure(VKI_EMFILE);
+   }
+   else if (VG_(clo_track_fds))
+      ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)ARG1);
+}
+
+#undef PRE
+#undef POST
+
+#endif // defined(VGP_x86_solaris)
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syswrap-xen.c b/coregrind/m_syswrap/syswrap-xen.c
index a1e11c9..20341c4 100644
--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -65,15 +65,37 @@
 #define PRE(name) static DEFN_PRE_TEMPLATE(xen, name)
 #define POST(name) static DEFN_POST_TEMPLATE(xen, name)
 
+static void bad_intf_version ( ThreadId              tid,
+                               SyscallArgLayout*     layout,
+                               /*MOD*/SyscallArgs*   args,
+                               /*OUT*/SyscallStatus* status,
+                               /*OUT*/UWord*         flags,
+                               const HChar*          hypercall,
+                               UWord                 version)
+{
+   VG_(dmsg)("WARNING: %s version %#lx not supported\n",
+             hypercall, version);
+   if (VG_(clo_verbosity) > 1) {
+      VG_(get_and_pp_StackTrace)(tid, VG_(clo_backtrace_size));
+   }
+   VG_(dmsg)("You may be able to write your own handler.\n");
+   VG_(dmsg)("Read the file README_MISSING_SYSCALL_OR_IOCTL.\n");
+   VG_(dmsg)("Nevertheless we consider this a bug.  Please report\n");
+   VG_(dmsg)("it at http://valgrind.org/support/bug_reports.html &\n");
+   VG_(dmsg)("http://wiki.xen.org/wiki/Reporting_Bugs_against_Xen.\n");
+
+   SET_STATUS_Failure(VKI_ENOSYS);
+}
+
 static void bad_subop ( ThreadId              tid,
                         SyscallArgLayout*     layout,
                         /*MOD*/SyscallArgs*   args,
                         /*OUT*/SyscallStatus* status,
                         /*OUT*/UWord*         flags,
-                        const HChar*           hypercall,
+                        const HChar*          hypercall,
                         UWord                 subop)
 {
-   VG_(dmsg)("WARNING: unhandled %s subop: %ld\n",
+   VG_(dmsg)("WARNING: unhandled %s subop: %lu\n",
              hypercall, subop);
    if (VG_(clo_verbosity) > 1) {
       VG_(get_and_pp_StackTrace)(tid, VG_(clo_backtrace_size));
@@ -89,7 +111,7 @@
 
 PRE(memory_op)
 {
-   PRINT("__HYPERVISOR_memory_op ( %ld, %lx )", ARG1, ARG2);
+   PRINT("__HYPERVISOR_memory_op ( %lu, %#lx )", ARG1, ARG2);
 
    switch (ARG1) {
 
@@ -102,7 +124,8 @@
                     (Addr)ARG2, sizeof(vki_xen_domid_t));
        break;
 
-   case VKI_XENMEM_machphys_mfn_list: {
+   case VKI_XENMEM_machphys_mfn_list:
+   case VKI_XENMEM_machphys_compat_mfn_list: {
        struct vki_xen_machphys_mfn_list *arg =
            (struct vki_xen_machphys_mfn_list *)ARG2;
        PRE_MEM_READ("XENMEM_machphys_mfn_list max_extents",
@@ -121,6 +144,16 @@
                    (Addr)&arg->map, sizeof(arg->map));
       break;
    }
+
+   case VKI_XENMEM_memory_map:
+   case VKI_XENMEM_machine_memory_map: {
+      struct vki_xen_memory_map *arg =
+	      (struct vki_xen_memory_map *)ARG2;
+      PRE_MEM_READ("XENMEM_memory_map nr_entries",
+                   (Addr)&arg->nr_entries, sizeof(arg->nr_entries));
+      break;
+   }
+
    case VKI_XENMEM_increase_reservation:
    case VKI_XENMEM_decrease_reservation:
    case VKI_XENMEM_populate_physmap:
@@ -221,6 +254,9 @@
 
 PRE(mmuext_op)
 {
+   PRINT("__HYPERVISOR_mmuext_op ( %#lx, %ld, %#lx, %lu )",
+         ARG1, SARG2, ARG3, ARG4);
+
    struct vki_xen_mmuext_op *ops = (struct vki_xen_mmuext_op *)ARG1;
    unsigned int i, nr = ARG2;
 
@@ -306,6 +342,80 @@
    }
 }
 
+PRE(xsm_op)
+{
+   /* XXX assuming flask, only actual XSM right now */
+   struct vki_xen_flask_op *op = (struct vki_xen_flask_op *)ARG1;
+
+   PRINT("__HYPERVISOR_xsm_op ( %u )", op->cmd);
+
+   /*
+    * Common part of xen_flask_op:
+    *    vki_uint32_t cmd;
+    *    vki_uint32_t interface_version;
+    */
+   PRE_MEM_READ("__HYPERVISOR_xsm_op", ARG1,
+                sizeof(vki_uint32_t) + sizeof(vki_uint32_t));
+
+   if (!op)
+      return;
+
+   switch (op->interface_version) {
+   case 0x00000001:
+      break;
+   default:
+      bad_intf_version(tid, layout, arrghs, status, flags,
+                       "__HYPERVISOR_xsm_op", op->interface_version);
+      return;
+   }
+
+#define PRE_XEN_XSM_OP_READ(_xsm_op, _union, _field)            \
+   PRE_MEM_READ("FLASK_" #_xsm_op " u." #_union "." #_field,    \
+                (Addr)&op->u._union._field,                     \
+                sizeof(op->u._union._field))
+
+   switch (op->cmd) {
+   case VKI_FLASK_SID_TO_CONTEXT:
+      PRE_XEN_XSM_OP_READ(SID_TO_CONTEXT, sid_context, sid);
+      PRE_XEN_XSM_OP_READ(SID_TO_CONTEXT, sid_context, size);
+      PRE_XEN_XSM_OP_READ(SID_TO_CONTEXT, sid_context, context.p);
+      break;
+   default:
+      bad_subop(tid, layout, arrghs, status, flags,
+                "__HYPERVISOR_xsm_op", op->cmd);
+      break;
+   }
+#undef __PRE_XEN_XSM_OP_READ
+#undef PRE_XEN_XSM_OP_READ
+}
+
+PRE(sched_op)
+{
+   PRINT("__HYPERVISOR_sched_op ( %ld, %#lx )", SARG1, ARG2);
+   void *arg = (void *)(unsigned long)ARG2;
+
+#define __PRE_XEN_SCHEDOP_READ(_schedop, _type, _field) \
+   PRE_MEM_READ("XEN_SCHEDOP_" # _schedop " " #_field,  \
+                (Addr)&((_type*)arg)->_field,           \
+                sizeof(((_type*)arg)->_field))
+#define PRE_XEN_SCHEDOP_READ(_schedop, _field)                          \
+   __PRE_XEN_SCHEDOP_READ(_schedop, vki_xen_ ## _schedop ## _t, _field)
+
+   switch (ARG1) {
+   case VKI_XEN_SCHEDOP_remote_shutdown:
+      PRE_XEN_SCHEDOP_READ(remote_shutdown, domain_id);
+      PRE_XEN_SCHEDOP_READ(remote_shutdown, reason);
+      break;
+
+   default:
+      bad_subop(tid, layout, arrghs, status, flags,
+                "__HYPERVISOR_sched_op", ARG1);
+      break;
+   }
+#undef __PRE_XEN_SCHEDOP_READ
+#undef PRE_XEN_SCHEDOP_READ
+}
+
 static void pre_evtchn_op(ThreadId tid,
                           SyscallArgLayout*     layout,
                           /*MOD*/SyscallArgs*   arrghs,
@@ -313,7 +423,7 @@
                           /*OUT*/UWord*         flags,
                           __vki_u32 cmd, void *arg, int compat)
 {
-   PRINT("__HYPERVISOR_event_channel_op%s ( %d, %p )",
+   PRINT("__HYPERVISOR_event_channel_op%s ( %u, %p )",
          compat ? "_compat" : "", cmd, arg);
 
    switch (cmd) {
@@ -353,9 +463,63 @@
                  evtchn->cmd, &evtchn->u, 1);
 }
 
+PRE(physdev_op)
+{
+   int cmd = ARG1;
+
+   PRINT("__HYPERVISOR_physdev_op ( %ld, %#lx )", SARG1, ARG2);
+
+#define PRE_XEN_PHYSDEVOP_READ(_op, _field)		\
+   PRE_MEM_READ("XEN_PHYSDEVOP_" #_op " ." #_field,	\
+                (Addr)&arg->_field,			\
+                sizeof(arg->_field))
+
+   switch (cmd) {
+   case VKI_XEN_PHYSDEVOP_map_pirq: {
+      struct vki_xen_physdev_map_pirq *arg =
+         (struct vki_xen_physdev_map_pirq *)ARG2;
+
+      PRE_XEN_PHYSDEVOP_READ("map_pirq", domid);
+      PRE_XEN_PHYSDEVOP_READ("map_pirq", type);
+
+      PRE_XEN_PHYSDEVOP_READ("map_pirq", bus);
+      PRE_XEN_PHYSDEVOP_READ("map_pirq", devfn);
+      PRE_XEN_PHYSDEVOP_READ("map_pirq", entry_nr);
+      PRE_XEN_PHYSDEVOP_READ("map_pirq", table_base);
+
+      switch(arg->type) {
+      case VKI_XEN_MAP_PIRQ_TYPE_MSI:
+         PRE_XEN_PHYSDEVOP_READ("map_pirq", index);
+         break;
+      case VKI_XEN_MAP_PIRQ_TYPE_GSI:
+         PRE_XEN_PHYSDEVOP_READ("map_pirq", index);
+         PRE_XEN_PHYSDEVOP_READ("map_pirq", pirq);
+         break;
+      case VKI_XEN_MAP_PIRQ_TYPE_MSI_SEG:
+         PRE_XEN_PHYSDEVOP_READ("map_pirq", index);
+         break;
+      case VKI_XEN_MAP_PIRQ_TYPE_MULTI_MSI:
+         break;
+      }
+      break;
+   }
+   case VKI_XEN_PHYSDEVOP_unmap_pirq: {
+      struct vki_xen_physdev_unmap_pirq *arg =
+         (struct vki_xen_physdev_unmap_pirq *)ARG2;
+      PRE_XEN_PHYSDEVOP_READ("unmap_pirq", domid);
+      PRE_XEN_PHYSDEVOP_READ("unmap_pirq", pirq);
+      break;
+   }
+   default:
+      bad_subop(tid, layout, arrghs, status, flags,
+                "__HYPERVISOR_physdev_op", cmd);
+   }
+#undef PRE_XEN_PHYSDEVOP_READ
+}
+
 PRE(xen_version)
 {
-   PRINT("__HYPERVISOR_xen_version ( %ld, %lx )", ARG1, ARG2);
+   PRINT("__HYPERVISOR_xen_version ( %ld, %#lx )", SARG1, ARG2);
 
    switch (ARG1) {
    case VKI_XENVER_version:
@@ -380,7 +544,7 @@
 
 PRE(grant_table_op)
 {
-   PRINT("__HYPERVISOR_grant_table_op ( %ld, 0x%lx, %ld )", ARG1, ARG2, ARG3);
+   PRINT("__HYPERVISOR_grant_table_op ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
    switch (ARG1) {
    case VKI_XEN_GNTTABOP_setup_table: {
       struct vki_xen_gnttab_setup_table *gst =
@@ -401,7 +565,7 @@
 PRE(sysctl) {
    struct vki_xen_sysctl *sysctl = (struct vki_xen_sysctl *)ARG1;
 
-   PRINT("__HYPERVISOR_sysctl ( %d )", sysctl->cmd);
+   PRINT("__HYPERVISOR_sysctl ( %u )", sysctl->cmd);
 
    /*
     * Common part of xen_sysctl:
@@ -419,20 +583,11 @@
    case 0x00000008:
    case 0x00000009:
    case 0x0000000a:
+   case 0x0000000b:
 	   break;
    default:
-      VG_(dmsg)("WARNING: sysctl version %"PRIx32" not supported\n",
-                sysctl->interface_version);
-      if (VG_(clo_verbosity) > 1) {
-         VG_(get_and_pp_StackTrace)(tid, VG_(clo_backtrace_size));
-      }
-      VG_(dmsg)("You may be able to write your own handler.\n");
-      VG_(dmsg)("Read the file README_MISSING_SYSCALL_OR_IOCTL.\n");
-      VG_(dmsg)("Nevertheless we consider this a bug.  Please report\n");
-      VG_(dmsg)("it at http://valgrind.org/support/bug_reports.html &\n");
-      VG_(dmsg)("http://wiki.xen.org/wiki/Reporting_Bugs_against_Xen.\n");
-
-      SET_STATUS_Failure(VKI_EINVAL);
+      bad_intf_version(tid, layout, arrghs, status, flags,
+                       "__HYPERVISOR_sysctl", sysctl->interface_version);
       return;
    }
 
@@ -470,6 +625,7 @@
 	 PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, buffer);
 	 break;
       case 0x0000000a:
+      case 0x0000000b:
 	 PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, first_domain);
 	 PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, max_domains);
 	 PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, buffer);
@@ -551,7 +707,7 @@
 {
    struct vki_xen_domctl *domctl = (struct vki_xen_domctl *)ARG1;
 
-   PRINT("__HYPERVISOR_domctl ( %d ) on dom%d", domctl->cmd, domctl->domain);
+   PRINT("__HYPERVISOR_domctl ( %u ) on dom%d", domctl->cmd, domctl->domain);
 
    /*
     * Common part of xen_domctl:
@@ -571,20 +727,11 @@
    case 0x00000007:
    case 0x00000008:
    case 0x00000009:
+   case 0x0000000a:
 	   break;
    default:
-      VG_(dmsg)("WARNING: domctl version %"PRIx32" not supported\n",
-                domctl->interface_version);
-      if (VG_(clo_verbosity) > 1) {
-         VG_(get_and_pp_StackTrace)(tid, VG_(clo_backtrace_size));
-      }
-      VG_(dmsg)("You may be able to write your own handler.\n");
-      VG_(dmsg)("Read the file README_MISSING_SYSCALL_OR_IOCTL.\n");
-      VG_(dmsg)("Nevertheless we consider this a bug.  Please report\n");
-      VG_(dmsg)("it at http://valgrind.org/support/bug_reports.html &\n");
-      VG_(dmsg)("http://wiki.xen.org/wiki/Reporting_Bugs_against_Xen.\n");
-
-      SET_STATUS_Failure(VKI_EINVAL);
+      bad_intf_version(tid, layout, arrghs, status, flags,
+                       "__HYPERVISOR_domctl", domctl->interface_version);
       return;
    }
 
@@ -658,6 +805,16 @@
       __PRE_XEN_DOMCTL_READ(set_address_size, address_size, size);
       break;
 
+   case VKI_XEN_DOMCTL_test_assign_device:
+      __PRE_XEN_DOMCTL_READ(test_assign_device, assign_device, machine_sbdf);
+      break;
+   case VKI_XEN_DOMCTL_assign_device:
+      __PRE_XEN_DOMCTL_READ(assign_device, assign_device, machine_sbdf);
+      break;
+   case VKI_XEN_DOMCTL_deassign_device:
+      __PRE_XEN_DOMCTL_READ(deassign_device, assign_device, machine_sbdf);
+      break;
+
    case VKI_XEN_DOMCTL_settscinfo:
       __PRE_XEN_DOMCTL_READ(settscinfo, tsc_info, info.tsc_mode);
       __PRE_XEN_DOMCTL_READ(settscinfo, tsc_info, info.gtsc_khz);
@@ -665,6 +822,17 @@
       __PRE_XEN_DOMCTL_READ(settscinfo, tsc_info, info.elapsed_nsec);
       break;
 
+   case VKI_XEN_DOMCTL_irq_permission:
+      PRE_XEN_DOMCTL_READ(irq_permission, pirq);
+      PRE_XEN_DOMCTL_READ(irq_permission, allow_access);
+      break;
+
+   case VKI_XEN_DOMCTL_iomem_permission:
+      PRE_XEN_DOMCTL_READ(iomem_permission, first_mfn);
+      PRE_XEN_DOMCTL_READ(iomem_permission, nr_mfns);
+      PRE_XEN_DOMCTL_READ(iomem_permission, allow_access);
+      break;
+
    case VKI_XEN_DOMCTL_ioport_permission:
       PRE_XEN_DOMCTL_READ(ioport_permission, first_port);
       PRE_XEN_DOMCTL_READ(ioport_permission, nr_ports);
@@ -702,6 +870,10 @@
          case VKI_XEN_SCHEDULER_CREDIT2:
             PRE_XEN_DOMCTL_READ(scheduler_op, u.credit2.weight);
             break;
+         case VKI_XEN_SCHEDULER_RTDS:
+            PRE_XEN_DOMCTL_READ(scheduler_op, u.rtds.period);
+            PRE_XEN_DOMCTL_READ(scheduler_op, u.rtds.budget);
+            break;
          case VKI_XEN_SCHEDULER_ARINC653:
             break;
          }
@@ -709,14 +881,57 @@
       break;
 
    case VKI_XEN_DOMCTL_getvcpuaffinity:
-      __PRE_XEN_DOMCTL_READ(getvcpuaffinity, vcpuaffinity, vcpu);
+      switch (domctl->interface_version) {
+      case 0x00000007:
+      case 0x00000008:
+      case 0x00000009:
+         __PRE_XEN_DOMCTL_READ(getvcpuaffinity, vcpuaffinity_00000009, vcpu);
+         __PRE_XEN_DOMCTL_READ(getvcpuaffinity, vcpuaffinity_00000009, cpumap.nr_bits);
+         break;
+      case 0x0000000a:
+         __PRE_XEN_DOMCTL_READ(getvcpuaffinity, vcpuaffinity_0000000a, vcpu);
+         if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_HARD)
+            __PRE_XEN_DOMCTL_READ(
+               setvcpuaffinity, vcpuaffinity_0000000a, cpumap_hard.nr_bits);
+         if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_SOFT)
+            __PRE_XEN_DOMCTL_READ(
+               setvcpuaffinity, vcpuaffinity_0000000a, cpumap_soft.nr_bits);
+         break;
+      }
       break;
 
    case VKI_XEN_DOMCTL_setvcpuaffinity:
-      __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity, vcpu);
-      PRE_MEM_READ("XEN_DOMCTL_setvcpuaffinity u.vcpuaffinity.cpumap.bitmap",
-                   (Addr)domctl->u.vcpuaffinity.cpumap.bitmap.p,
-                   domctl->u.vcpuaffinity.cpumap.nr_bits / 8);
+      switch (domctl->interface_version) {
+      case 0x00000007:
+      case 0x00000008:
+      case 0x00000009:
+         __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity_00000009, vcpu);
+         __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity_00000009, cpumap.nr_bits);
+         PRE_MEM_READ("XEN_DOMCTL_setvcpuaffinity u.vcpuaffinity.cpumap.bitmap",
+                      (Addr)domctl->u.vcpuaffinity_00000009.cpumap.bitmap.p,
+                      domctl->u.vcpuaffinity_00000009.cpumap.nr_bits / 8);
+         break;
+      case 0x0000000a:
+         __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity_0000000a, vcpu);
+         __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity_0000000a, flags);
+         if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_HARD) {
+            __PRE_XEN_DOMCTL_READ(
+               setvcpuaffinity, vcpuaffinity_0000000a, cpumap_hard.nr_bits);
+            PRE_MEM_READ(
+               "XEN_DOMCTL_setvcpuaffinity u.vcpuaffinity.cpumap_hard.bitmap",
+               (Addr)domctl->u.vcpuaffinity_0000000a.cpumap_hard.bitmap.p,
+               domctl->u.vcpuaffinity_0000000a.cpumap_hard.nr_bits / 8);
+         }
+         if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_SOFT) {
+            __PRE_XEN_DOMCTL_READ(
+               setvcpuaffinity, vcpuaffinity_0000000a, cpumap_soft.nr_bits);
+            PRE_MEM_READ(
+               "XEN_DOMCTL_setvcpuaffinity u.vcpuaffinity.cpumap_soft.bitmap",
+               (Addr)domctl->u.vcpuaffinity_0000000a.cpumap_soft.bitmap.p,
+               domctl->u.vcpuaffinity_0000000a.cpumap_soft.nr_bits / 8);
+         }
+      break;
+      }
       break;
 
    case VKI_XEN_DOMCTL_getnodeaffinity:
@@ -738,6 +953,98 @@
       __PRE_XEN_DOMCTL_READ(setvcpucontext, vcpucontext, ctxt.p);
       break;
 
+   case VKI_XEN_DOMCTL_pin_mem_cacheattr:
+      PRE_XEN_DOMCTL_READ(pin_mem_cacheattr, start);
+      PRE_XEN_DOMCTL_READ(pin_mem_cacheattr, end);
+      PRE_XEN_DOMCTL_READ(pin_mem_cacheattr, type);
+      break;
+
+   case VKI_XEN_DOMCTL_get_ext_vcpucontext:
+      switch (domctl->interface_version)
+      {
+      case 0x00000007:
+      case 0x00000008:
+         __PRE_XEN_DOMCTL_READ(get_ext_vcpucontext, ext_vcpucontext_00000008, vcpu);
+         break;
+
+      case 0x00000009:
+         __PRE_XEN_DOMCTL_READ(get_ext_vcpucontext, ext_vcpucontext_00000009, vcpu);
+         break;
+
+      default:
+         VG_(dmsg)("WARNING: VKI_XEN_DOMCTL_get_ext_vcpucontext  domctl version %#"
+                   PRIx32" not implemented\n", domctl->interface_version);
+         SET_STATUS_Failure(VKI_EINVAL);
+         break;
+      }
+      break;
+
+   case VKI_XEN_DOMCTL_set_ext_vcpucontext:
+       switch (domctl->interface_version)
+       {
+       case 0x00000007:
+       case 0x00000008:
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000008, vcpu);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000008, size);
+#if defined(__i386__) || defined(__x86_64__)
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000008,
+                                 syscall32_callback_eip);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000008,
+                                 sysenter_callback_eip);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000008,
+                                 syscall32_callback_cs);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000008,
+                                 sysenter_callback_cs);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000008,
+                                 syscall32_disables_events);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000008,
+                                 sysenter_disables_events);
+
+           if ( domctl->u.ext_vcpucontext_00000008.size >=
+                offsetof(struct vki_xen_domctl_ext_vcpucontext_00000008, mcg_cap) )
+               __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000008,
+                                     mcg_cap);
+#endif
+           break;
+
+       case 0x00000009:
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009, vcpu);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009, size);
+#if defined(__i386__) || defined(__x86_64__)
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009,
+                                 syscall32_callback_eip);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009,
+                                 sysenter_callback_eip);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009,
+                                 syscall32_callback_cs);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009,
+                                 sysenter_callback_cs);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009,
+                                 syscall32_disables_events);
+           __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009,
+                                 sysenter_disables_events);
+
+           if ( domctl->u.ext_vcpucontext_00000009.size >=
+                offsetof(struct vki_xen_domctl_ext_vcpucontext_00000009, caps) )
+           {
+               __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009,
+                                     caps);
+               __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009,
+                                     mci_ctl2_bank0);
+               __PRE_XEN_DOMCTL_READ(set_ext_vcpucontext, ext_vcpucontext_00000009,
+                                     mci_ctl2_bank1);
+           }
+#endif
+	   break;
+
+       default:
+           VG_(dmsg)("WARNING: VKI_XEN_DOMCTL_set_ext_vcpucontext  domctl version %#"
+                     PRIx32" not implemented\n", domctl->interface_version);
+           SET_STATUS_Failure(VKI_EINVAL);
+           break;
+       }
+       break;
+
    case VKI_XEN_DOMCTL_set_cpuid:
       PRE_MEM_READ("XEN_DOMCTL_set_cpuid u.cpuid",
                    (Addr)&domctl->u.cpuid, sizeof(domctl->u.cpuid));
@@ -751,6 +1058,15 @@
                     domctl->u.getpageframeinfo3.num * sizeof(vki_xen_pfn_t));
        break;
 
+   case VKI_XEN_DOMCTL_setvcpuextstate:
+      __PRE_XEN_DOMCTL_READ(setvcpuextstate, vcpuextstate, vcpu);
+      __PRE_XEN_DOMCTL_READ(setvcpuextstate, vcpuextstate, size);
+      __PRE_XEN_DOMCTL_READ(setvcpuextstate, vcpuextstate, buffer);
+      PRE_MEM_READ("XEN_DOMCTL_setvcpuextstate *u.vcpuextstate.buffer.p",
+                   (Addr)domctl->u.vcpuextstate.buffer.p,
+                   domctl->u.vcpuextstate.size);
+      break;
+
    case VKI_XEN_DOMCTL_getvcpuextstate:
       __PRE_XEN_DOMCTL_READ(getvcpuextstate, vcpuextstate, vcpu);
       __PRE_XEN_DOMCTL_READ(getvcpuextstate, vcpuextstate, xfeature_mask);
@@ -764,6 +1080,7 @@
        switch(domctl->u.shadow_op.op)
        {
        case VKI_XEN_DOMCTL_SHADOW_OP_OFF:
+       case VKI_XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION:
            /* No further inputs */
            break;
 
@@ -793,6 +1110,10 @@
            PRE_XEN_DOMCTL_READ(shadow_op, pages);
            break;
 
+       case VKI_XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION:
+           PRE_XEN_DOMCTL_READ(shadow_op, mb);
+           break;
+
        default:
            bad_subop(tid, layout, arrghs, status, flags,
                      "__HYPERVISOR_domctl shadow(10)",
@@ -824,6 +1145,22 @@
       PRE_XEN_DOMCTL_READ(debug_op, vcpu);
       break;
 
+   case VKI_XEN_DOMCTL_get_vcpu_msrs:
+      __PRE_XEN_DOMCTL_READ(get_vcpu_msrs, vcpu_msrs, vcpu);
+      __PRE_XEN_DOMCTL_READ(get_vcpu_msrs, vcpu_msrs, msr_count);
+      __PRE_XEN_DOMCTL_READ(get_vcpu_msrs, vcpu_msrs, msrs);
+      break;
+
+   case VKI_XEN_DOMCTL_set_vcpu_msrs:
+      __PRE_XEN_DOMCTL_READ(set_vcpu_msrs, vcpu_msrs, vcpu);
+      __PRE_XEN_DOMCTL_READ(set_vcpu_msrs, vcpu_msrs, msr_count);
+      __PRE_XEN_DOMCTL_READ(set_vcpu_msrs, vcpu_msrs, msrs);
+      PRE_MEM_READ("XEN_DOMCTL_set_vcpu_msrs *u.vcpu_msrs.msrs.p",
+                   (Addr)domctl->u.vcpu_msrs.msrs.p,
+                   sizeof(vki_xen_domctl_vcpu_msr_t) *
+                   domctl->u.vcpu_msrs.msr_count);
+      break;
+
    default:
       bad_subop(tid, layout, arrghs, status, flags,
                 "__HYPERVISOR_domctl", domctl->cmd);
@@ -838,7 +1175,7 @@
    unsigned long op = ARG1;
    void *arg = (void *)(unsigned long)ARG2;
 
-   PRINT("__HYPERVISOR_hvm_op ( %ld, %p )", op, arg);
+   PRINT("__HYPERVISOR_hvm_op ( %ld, %#lx )", SARG1, ARG2);
 
 #define __PRE_XEN_HVMOP_READ(_hvm_op, _type, _field)    \
    PRE_MEM_READ("XEN_HVMOP_" # _hvm_op " " #_field,     \
@@ -859,52 +1196,72 @@
       __PRE_XEN_HVMOP_READ(get_param, struct vki_xen_hvm_param, index);
       break;
 
+   case VKI_XEN_HVMOP_set_pci_intx_level:
+      PRE_XEN_HVMOP_READ(set_pci_intx_level, domid);
+      PRE_XEN_HVMOP_READ(set_pci_intx_level, domain);
+      PRE_XEN_HVMOP_READ(set_pci_intx_level, bus);
+      PRE_XEN_HVMOP_READ(set_pci_intx_level, device);
+      PRE_XEN_HVMOP_READ(set_pci_intx_level, level);
+      break;
+
    case VKI_XEN_HVMOP_set_isa_irq_level:
-       PRE_XEN_HVMOP_READ(set_isa_irq_level, domid);
-       PRE_XEN_HVMOP_READ(set_isa_irq_level, isa_irq);
-       PRE_XEN_HVMOP_READ(set_isa_irq_level, level);
-       break;
+      PRE_XEN_HVMOP_READ(set_isa_irq_level, domid);
+      PRE_XEN_HVMOP_READ(set_isa_irq_level, isa_irq);
+      PRE_XEN_HVMOP_READ(set_isa_irq_level, level);
+      break;
 
    case VKI_XEN_HVMOP_set_pci_link_route:
-       PRE_XEN_HVMOP_READ(set_pci_link_route, domid);
-       PRE_XEN_HVMOP_READ(set_pci_link_route, link);
-       PRE_XEN_HVMOP_READ(set_pci_link_route, isa_irq);
-       break;
+      PRE_XEN_HVMOP_READ(set_pci_link_route, domid);
+      PRE_XEN_HVMOP_READ(set_pci_link_route, link);
+      PRE_XEN_HVMOP_READ(set_pci_link_route, isa_irq);
+      break;
+
+   case VKI_XEN_HVMOP_track_dirty_vram: {
+      vki_xen_hvm_track_dirty_vram_t *Arg =
+         (vki_xen_hvm_track_dirty_vram_t*)ARG2;
+      PRE_XEN_HVMOP_READ(track_dirty_vram, domid);
+      PRE_XEN_HVMOP_READ(track_dirty_vram, nr);
+      if ( Arg->nr ) {
+         PRE_XEN_HVMOP_READ(track_dirty_vram, first_pfn);
+         PRE_XEN_HVMOP_READ(track_dirty_vram, dirty_bitmap);
+      }
+      break;
+   }
 
    case VKI_XEN_HVMOP_set_mem_type:
-       PRE_XEN_HVMOP_READ(set_mem_type, domid);
-       PRE_XEN_HVMOP_READ(set_mem_type, hvmmem_type);
-       PRE_XEN_HVMOP_READ(set_mem_type, nr);
-       PRE_XEN_HVMOP_READ(set_mem_type, first_pfn);
-       break;
+      PRE_XEN_HVMOP_READ(set_mem_type, domid);
+      PRE_XEN_HVMOP_READ(set_mem_type, hvmmem_type);
+      PRE_XEN_HVMOP_READ(set_mem_type, nr);
+      PRE_XEN_HVMOP_READ(set_mem_type, first_pfn);
+      break;
 
    case VKI_XEN_HVMOP_set_mem_access:
-       PRE_XEN_HVMOP_READ(set_mem_access, domid);
-       PRE_XEN_HVMOP_READ(set_mem_access, hvmmem_access);
-       PRE_XEN_HVMOP_READ(set_mem_access, first_pfn);
-       /* if default access */
-       if ( ((vki_xen_hvm_set_mem_access_t*)arg)->first_pfn != ~0ULL)
-           PRE_XEN_HVMOP_READ(set_mem_access, nr);
-       break;
+      PRE_XEN_HVMOP_READ(set_mem_access, domid);
+      PRE_XEN_HVMOP_READ(set_mem_access, hvmmem_access);
+      PRE_XEN_HVMOP_READ(set_mem_access, first_pfn);
+      /* if default access */
+      if ( ((vki_xen_hvm_set_mem_access_t*)arg)->first_pfn != ~0ULL)
+         PRE_XEN_HVMOP_READ(set_mem_access, nr);
+      break;
 
    case VKI_XEN_HVMOP_get_mem_access:
-       PRE_XEN_HVMOP_READ(get_mem_access, domid);
-       PRE_XEN_HVMOP_READ(get_mem_access, pfn);
+      PRE_XEN_HVMOP_READ(get_mem_access, domid);
+      PRE_XEN_HVMOP_READ(get_mem_access, pfn);
 
-       PRE_MEM_WRITE("XEN_HVMOP_get_mem_access *hvmmem_access",
-                   (Addr)&(((vki_xen_hvm_get_mem_access_t*)arg)->hvmmem_access),
-                   sizeof(vki_uint16_t));
-       break;
+      PRE_MEM_WRITE("XEN_HVMOP_get_mem_access *hvmmem_access",
+                    (Addr)&(((vki_xen_hvm_get_mem_access_t*)arg)->hvmmem_access),
+                    sizeof(vki_uint16_t));
+      break;
 
    case VKI_XEN_HVMOP_inject_trap:
-       PRE_XEN_HVMOP_READ(inject_trap, domid);
-       PRE_XEN_HVMOP_READ(inject_trap, vcpuid);
-       PRE_XEN_HVMOP_READ(inject_trap, vector);
-       PRE_XEN_HVMOP_READ(inject_trap, type);
-       PRE_XEN_HVMOP_READ(inject_trap, error_code);
-       PRE_XEN_HVMOP_READ(inject_trap, insn_len);
-       PRE_XEN_HVMOP_READ(inject_trap, cr2);
-       break;
+      PRE_XEN_HVMOP_READ(inject_trap, domid);
+      PRE_XEN_HVMOP_READ(inject_trap, vcpuid);
+      PRE_XEN_HVMOP_READ(inject_trap, vector);
+      PRE_XEN_HVMOP_READ(inject_trap, type);
+      PRE_XEN_HVMOP_READ(inject_trap, error_code);
+      PRE_XEN_HVMOP_READ(inject_trap, insn_len);
+      PRE_XEN_HVMOP_READ(inject_trap, cr2);
+      break;
 
    default:
       bad_subop(tid, layout, arrghs, status, flags,
@@ -919,7 +1276,7 @@
 {
     struct vki_xen_tmem_op *tmem = (struct vki_xen_tmem_op *)ARG1;
 
-    PRINT("__HYPERVISOR_tmem_op ( %d )", tmem->cmd);
+    PRINT("__HYPERVISOR_tmem_op ( %u )", tmem->cmd);
 
     /* Common part for xen_tmem_op:
      *    vki_uint32_t cmd;
@@ -943,7 +1300,7 @@
          *    vki_uint32_t subop;
          */
         PRE_MEM_READ("__HYPERVISOR_tmem_op pool_id",
-                     (Addr)&tmem->pool_id, sizeof(&tmem->pool_id));
+                     (Addr)&tmem->pool_id, sizeof(tmem->pool_id));
         PRE_XEN_TMEMOP_READ(ctrl, subop);
 
         switch (tmem->u.ctrl.subop) {
@@ -992,7 +1349,8 @@
       break;
    }
 
-   case VKI_XENMEM_machphys_mfn_list: {
+   case VKI_XENMEM_machphys_mfn_list:
+   case VKI_XENMEM_machphys_compat_mfn_list: {
        struct vki_xen_machphys_mfn_list *arg =
            (struct vki_xen_machphys_mfn_list *)ARG2;
        POST_MEM_WRITE((Addr)&arg->nr_extents, sizeof(arg->nr_extents));
@@ -1001,6 +1359,16 @@
        break;
    }
 
+   case VKI_XENMEM_memory_map:
+   case VKI_XENMEM_machine_memory_map: {
+      struct vki_xen_memory_map *arg =
+         (struct vki_xen_memory_map *)ARG2;
+      POST_MEM_WRITE(arg->nr_entries, sizeof(arg->nr_entries));
+      POST_MEM_WRITE((Addr)arg->buffer.p,
+                     arg->nr_entries * 20 /* size of an e820 entry */);
+      break;
+   }
+
    case VKI_XENMEM_add_to_physmap: {
        struct vki_xen_add_to_physmap *arg =
            (struct vki_xen_add_to_physmap *)ARG2;
@@ -1022,6 +1390,30 @@
    POST_MEM_WRITE((Addr)pdone, sizeof(*pdone));
 }
 
+POST(xsm_op)
+{
+   /* XXX assuming flask, only actual XSM right now */
+   struct vki_xen_flask_op *op = (struct vki_xen_flask_op *)ARG1;
+
+   switch (op->interface_version) {
+   case 0x00000001:
+      break;
+   default:
+      return;
+   }
+
+#define POST_XEN_XSM_OP_WRITE(_xsm_op, _union, _field)        \
+      POST_MEM_WRITE((Addr)&op->u._union._field,              \
+                     sizeof(op->u._union._field))
+
+   switch (op->cmd) {
+   case VKI_FLASK_SID_TO_CONTEXT:
+      POST_XEN_XSM_OP_WRITE(SID_TO_CONTEXT, sid_context, size);
+      POST_MEM_WRITE((Addr)op->u.sid_context.context.p,
+                     op->u.sid_context.size);
+   }
+}
+
 static void post_evtchn_op(ThreadId tid, __vki_u32 cmd, void *arg, int compat)
 {
    switch (cmd) {
@@ -1033,6 +1425,15 @@
    }
 }
 
+POST(sched_op)
+{
+   switch (ARG1) {
+   case VKI_XEN_SCHEDOP_remote_shutdown:
+      /* No outputs */
+      break;
+   }
+}
+
 POST(evtchn_op)
 {
    post_evtchn_op(tid, ARG1, (void *)ARG2, 0);
@@ -1044,6 +1445,33 @@
    post_evtchn_op(tid, evtchn->cmd, &evtchn->u, 1);
 }
 
+POST(physdev_op)
+{
+   int cmd = ARG1;
+
+#define POST_XEN_PHYSDEVOP_WRITE(_op, _field)                   \
+   POST_MEM_WRITE((Addr)&arg->_field, sizeof(arg->_field))
+
+   switch (cmd) {
+   case VKI_XEN_PHYSDEVOP_unmap_pirq:
+      /* No outputs */
+      break;
+
+   case VKI_XEN_PHYSDEVOP_map_pirq: {
+      struct vki_xen_physdev_map_pirq *arg =
+         (struct vki_xen_physdev_map_pirq *)ARG2;
+      if (arg->type == VKI_XEN_MAP_PIRQ_TYPE_MULTI_MSI)
+         POST_XEN_PHYSDEVOP_WRITE("map_pirq", entry_nr);
+      POST_XEN_PHYSDEVOP_WRITE("map_pirq", pirq);
+      break;
+   }
+#undef POST_XEN_PHYSDEVOP_WRITE
+
+   default:
+      break;
+   }
+}
+
 POST(xen_version)
 {
    switch (ARG1) {
@@ -1105,6 +1533,7 @@
    case 0x00000008:
    case 0x00000009:
    case 0x0000000a:
+   case 0x0000000b:
 	   break;
    default:
       return;
@@ -1138,6 +1567,7 @@
 			* sysctl->u.getdomaininfolist_00000009.num_domains);
 	 break;
       case 0x0000000a:
+      case 0x0000000b:
 	 POST_XEN_SYSCTL_WRITE(getdomaininfolist_0000000a, num_domains);
 	 POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_0000000a.buffer.p,
 			sizeof(*sysctl->u.getdomaininfolist_0000000a.buffer.p)
@@ -1182,6 +1612,7 @@
          POST_XEN_SYSCTL_WRITE(physinfo_00000008, capabilities);
          break;
       case 0x0000000a:
+      case 0x0000000b:
          POST_XEN_SYSCTL_WRITE(physinfo_0000000a, threads_per_core);
          POST_XEN_SYSCTL_WRITE(physinfo_0000000a, cores_per_socket);
          POST_XEN_SYSCTL_WRITE(physinfo_0000000a, nr_cpus);
@@ -1237,6 +1668,7 @@
    case 0x00000007:
    case 0x00000008:
    case 0x00000009:
+   case 0x0000000a:
 	   break;
    default:
 	   return;
@@ -1253,12 +1685,19 @@
    case VKI_XEN_DOMCTL_destroydomain:
    case VKI_XEN_DOMCTL_pausedomain:
    case VKI_XEN_DOMCTL_max_mem:
+   case VKI_XEN_DOMCTL_setvcpuextstate:
    case VKI_XEN_DOMCTL_set_address_size:
+   case VKI_XEN_DOMCTL_test_assign_device:
+   case VKI_XEN_DOMCTL_assign_device:
+   case VKI_XEN_DOMCTL_deassign_device:
    case VKI_XEN_DOMCTL_settscinfo:
+   case VKI_XEN_DOMCTL_irq_permission:
+   case VKI_XEN_DOMCTL_iomem_permission:
    case VKI_XEN_DOMCTL_ioport_permission:
    case VKI_XEN_DOMCTL_hypercall_init:
-   case VKI_XEN_DOMCTL_setvcpuaffinity:
    case VKI_XEN_DOMCTL_setvcpucontext:
+   case VKI_XEN_DOMCTL_pin_mem_cacheattr:
+   case VKI_XEN_DOMCTL_set_ext_vcpucontext:
    case VKI_XEN_DOMCTL_setnodeaffinity:
    case VKI_XEN_DOMCTL_set_cpuid:
    case VKI_XEN_DOMCTL_unpausedomain:
@@ -1267,6 +1706,7 @@
    case VKI_XEN_DOMCTL_set_max_evtchn:
    case VKI_XEN_DOMCTL_cacheflush:
    case VKI_XEN_DOMCTL_resumedomain:
+   case VKI_XEN_DOMCTL_set_vcpu_msrs:
    case VKI_XEN_DOMCTL_set_access_required:
       /* No output fields */
       break;
@@ -1333,13 +1773,33 @@
             break;
          case VKI_XEN_SCHEDULER_ARINC653:
             break;
+         case VKI_XEN_SCHEDULER_RTDS:
+            POST_XEN_DOMCTL_WRITE(scheduler_op, u.rtds.period);
+            POST_XEN_DOMCTL_WRITE(scheduler_op, u.rtds.budget);
+            break;
          }
       }
       break;
 
    case VKI_XEN_DOMCTL_getvcpuaffinity:
-      POST_MEM_WRITE((Addr)domctl->u.vcpuaffinity.cpumap.bitmap.p,
-                     domctl->u.vcpuaffinity.cpumap.nr_bits / 8);
+   case VKI_XEN_DOMCTL_setvcpuaffinity: /* Writes back actual result */
+      switch (domctl->interface_version) {
+      case 0x00000007:
+      case 0x00000008:
+      case 0x00000009:
+         POST_MEM_WRITE((Addr)domctl->u.vcpuaffinity_00000009.cpumap.bitmap.p,
+                        domctl->u.vcpuaffinity_00000009.cpumap.nr_bits / 8);
+         break;
+      case 0x0000000a:
+         if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_HARD)
+            POST_MEM_WRITE(
+               (Addr)domctl->u.vcpuaffinity_0000000a.cpumap_hard.bitmap.p,
+               domctl->u.vcpuaffinity_0000000a.cpumap_hard.nr_bits / 8);
+         if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_SOFT)
+            POST_MEM_WRITE(
+               (Addr)domctl->u.vcpuaffinity_0000000a.cpumap_soft.bitmap.p,
+               domctl->u.vcpuaffinity_0000000a.cpumap_soft.nr_bits / 8);
+      }
       break;
 
    case VKI_XEN_DOMCTL_getnodeaffinity:
@@ -1379,6 +1839,7 @@
 	 POST_XEN_DOMCTL_WRITE(getdomaininfo_00000008, cpupool);
       break;
       case 0x00000009:
+      case 0x0000000a:
 	 POST_XEN_DOMCTL_WRITE(getdomaininfo_00000009, domain);
 	 POST_XEN_DOMCTL_WRITE(getdomaininfo_00000009, flags);
 	 POST_XEN_DOMCTL_WRITE(getdomaininfo_00000009, tot_pages);
@@ -1405,18 +1866,70 @@
                       domctl->u.getpageframeinfo3.num * sizeof(vki_xen_pfn_t));
        break;
 
+   case VKI_XEN_DOMCTL_get_ext_vcpucontext:
+       switch (domctl->interface_version)
+       {
+       case 0x00000007:
+       case 0x00000008:
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008, size);
+#if defined(__i386__) || defined(__x86_64__)
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008,
+                                   syscall32_callback_eip);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008,
+                                   sysenter_callback_eip);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008,
+                                   syscall32_callback_cs);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008,
+                                   sysenter_callback_cs);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008,
+                                   syscall32_disables_events);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008,
+                                   sysenter_disables_events);
+
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008,
+                                   mcg_cap);
+#endif
+           break;
+
+       case 0x00000009:
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009, size);
+#if defined(__i386__) || defined(__x86_64__)
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
+                                   syscall32_callback_eip);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
+                                   sysenter_callback_eip);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
+                                   syscall32_callback_cs);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
+                                   sysenter_callback_cs);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
+                                   syscall32_disables_events);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
+                                   sysenter_disables_events);
+
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
+                                   caps);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
+                                   mci_ctl2_bank0);
+           __POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
+                                   mci_ctl2_bank1);
+#endif
+	   break;
+       }
+       break;
+
 
    case VKI_XEN_DOMCTL_getvcpuextstate:
-      __POST_XEN_DOMCTL_WRITE(getvcpuextstate, vcpuextstate, xfeature_mask);
-      __POST_XEN_DOMCTL_WRITE(getvcpuextstate, vcpuextstate, size);
-      POST_MEM_WRITE((Addr)domctl->u.vcpuextstate.buffer.p,
-                     domctl->u.vcpuextstate.size);
+      if (domctl->u.vcpuextstate.buffer.p)
+         POST_MEM_WRITE((Addr)domctl->u.vcpuextstate.buffer.p,
+                        domctl->u.vcpuextstate.size);
       break;
 
    case VKI_XEN_DOMCTL_shadow_op:
        switch(domctl->u.shadow_op.op)
        {
        case VKI_XEN_DOMCTL_SHADOW_OP_OFF:
+       case VKI_XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION:
            /* No outputs */
            break;
 
@@ -1430,10 +1943,21 @@
                               domctl->u.shadow_op.pages * sizeof(vki_uint8_t));
            break;
 
+       case VKI_XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION:
+           POST_XEN_DOMCTL_WRITE(shadow_op, mb);
+           break;
+
        default:
            break;
        }
        break;
+   case VKI_XEN_DOMCTL_get_vcpu_msrs:
+      if (domctl->u.vcpu_msrs.msrs.p)
+         POST_MEM_WRITE((Addr)domctl->u.vcpu_msrs.msrs.p,
+                        sizeof(vki_xen_domctl_vcpu_msr_t) *
+                        domctl->u.vcpu_msrs.msr_count);
+      break;
+
    case VKI_XEN_DOMCTL_mem_event_op:
        POST_XEN_DOMCTL_WRITE(mem_event_op, port);
 
@@ -1456,6 +1980,7 @@
 
    switch (op) {
    case VKI_XEN_HVMOP_set_param:
+   case VKI_XEN_HVMOP_set_pci_intx_level:
    case VKI_XEN_HVMOP_set_isa_irq_level:
    case VKI_XEN_HVMOP_set_pci_link_route:
    case VKI_XEN_HVMOP_set_mem_type:
@@ -1541,14 +2066,14 @@
 
    //    __VKI_XEN_set_segment_base                                // 25
    HYPXY(__VKI_XEN_mmuext_op,               mmuext_op,         2), // 26
-   //    __VKI_XEN_xsm_op                                          // 27
+   HYPXY(__VKI_XEN_xsm_op,                  xsm_op,            1), // 27
    //    __VKI_XEN_nmi_op                                          // 28
-   //    __VKI_XEN_sched_op                                        // 29
+   HYPXY(__VKI_XEN_sched_op,                sched_op,          2), // 29
 
    //    __VKI_XEN_callback_op                                     // 30
    //    __VKI_XEN_xenoprof_op                                     // 31
    HYPXY(__VKI_XEN_event_channel_op,        evtchn_op,         2), // 32
-   //    __VKI_XEN_physdev_op                                      // 33
+   HYPXY(__VKI_XEN_physdev_op,              physdev_op,        2), // 33
    HYPXY(__VKI_XEN_hvm_op,                  hvm_op,            2), // 34
 
    HYPXY(__VKI_XEN_sysctl,                  sysctl,            1), // 35
diff --git a/coregrind/m_threadstate.c b/coregrind/m_threadstate.c
index e6b7b7b..6cea270 100644
--- a/coregrind/m_threadstate.c
+++ b/coregrind/m_threadstate.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -54,14 +54,10 @@
 void VG_(init_Threads)(void)
 {
    ThreadId tid;
-   UChar *addr, *aligned_addr;
 
-   addr = VG_(malloc)("init_Threads",
-          VG_N_THREADS * sizeof VG_(threads)[0] + LibVEX_GUEST_STATE_ALIGN - 1);
-
-   // Align
-   aligned_addr = addr + (Addr)addr % LibVEX_GUEST_STATE_ALIGN;
-   VG_(threads) = (ThreadState *)aligned_addr;
+   VG_(threads) = VG_(arena_memalign) (VG_AR_CORE, "init_Threads",
+                                       LibVEX_GUEST_STATE_ALIGN,
+                                       VG_N_THREADS * sizeof VG_(threads)[0]);
 
    for (tid = 1; tid < VG_N_THREADS; tid++) {
       INNER_REQUEST(
diff --git a/coregrind/m_tooliface.c b/coregrind/m_tooliface.c
index 40d8325..6971a47 100644
--- a/coregrind/m_tooliface.c
+++ b/coregrind/m_tooliface.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Nicholas Nethercote
+   Copyright (C) 2000-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -441,6 +441,9 @@
 DEF0(track_pre_reg_read,          CorePart, ThreadId, const HChar*, PtrdiffT, SizeT)
 DEF0(track_post_reg_write,        CorePart, ThreadId,               PtrdiffT, SizeT)
 
+DEF0(track_copy_mem_to_reg,       CorePart, ThreadId, Addr, PtrdiffT, SizeT)
+DEF0(track_copy_reg_to_mem,       CorePart, ThreadId, PtrdiffT, Addr, SizeT)
+
 DEF0(track_post_reg_write_clientcall_return, ThreadId, PtrdiffT, SizeT, Addr)
 
 DEF0(track_start_client_code,     ThreadId, ULong)
diff --git a/coregrind/m_trampoline.S b/coregrind/m_trampoline.S
index 027f9f6..cac2288 100644
--- a/coregrind/m_trampoline.S
+++ b/coregrind/m_trampoline.S
@@ -7,9 +7,9 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2000-2013 Julian Seward 
+  Copyright (C) 2000-2015 Julian Seward 
      jseward@acm.org
-  Copyright (C) 2006-2013 OpenWorks LLP
+  Copyright (C) 2006-2015 OpenWorks LLP
      info@open-works.co.uk
 	
   This program is free software; you can redistribute it and/or
@@ -1329,6 +1329,7 @@
 #	undef UD2_1024
 #	undef UD2_PAGE
 
+/*---------------------- tilegx-linux ----------------------*/
 #else
 #if defined(VGP_tilegx_linux)
 
@@ -1399,6 +1400,186 @@
 #	undef UD2_4K
 #	undef UD2_16K
 #	undef UD2_PAGE
+
+/*---------------- x86-solaris ----------------*/
+#else
+#if defined(VGP_x86_solaris)
+
+.global VG_(trampoline_stuff_start)
+VG_(trampoline_stuff_start):
+
+/* int strcmp(const char *s1, const char *s2); */
+.global VG_(x86_solaris_REDIR_FOR_strcmp)
+.type   VG_(x86_solaris_REDIR_FOR_strcmp), @function
+VG_(x86_solaris_REDIR_FOR_strcmp):
+        pushl   %ebp                    /* establish a stack frame */
+        movl    %esp, %ebp
+        movl    8(%ebp), %edx           /* get s1 */
+        movl    12(%esp), %ecx          /* get s2 */
+        jmp     2f                      /* go compare the first characters */
+1:
+        incl    %edx                    /* skip to the next s1 character */
+        incl    %ecx                    /* skip to the next s2 character */
+2:
+        movzbl  (%edx), %eax            /* load a character from s1 */
+        testb   %al, %al                /* is it null? */
+        jz      3f                      /* yes, exit */
+        cmpb    (%ecx), %al             /* are the characters equal? */
+        je      1b                      /* yes, proceed with next characters */
+3:
+        movzbl  (%ecx), %edx            /* load a character from s2 */
+        subl    %edx, %eax              /* calculate the return value */
+        popl    %ebp                    /* destroy the stack frame */
+        ret                             /* return to the caller */
+.size VG_(x86_solaris_REDIR_FOR_strcmp), .-VG_(x86_solaris_REDIR_FOR_strcmp)
+
+/* size_t strlen(const char *s); */
+.global VG_(x86_solaris_REDIR_FOR_strlen)
+.type   VG_(x86_solaris_REDIR_FOR_strlen), @function
+VG_(x86_solaris_REDIR_FOR_strlen):
+        pushl   %ebp                    /* establish a stack frame */
+        movl    %esp, %ebp
+        movl    8(%ebp), %edx           /* get s */
+        movl    %edx, %eax              /* copy s */
+        jmp     2f                      /* go handle the first character */
+1:
+        incl    %eax                    /* skip to the next s character */
+2:
+        cmpb    $0, (%eax)              /* is the s character null? */
+        jne     1b                      /* no, go process the next character */
+        subl    %edx, %eax              /* calculate the return value */
+        popl    %ebp                    /* destroy the stack frame */
+        ret                             /* return to the caller */
+.size VG_(x86_solaris_REDIR_FOR_strlen), .-VG_(x86_solaris_REDIR_FOR_strlen)
+
+.global VG_(trampoline_stuff_end)
+VG_(trampoline_stuff_end):
+
+/*---------------- amd64-solaris ----------------*/
+#else
+#if defined(VGP_amd64_solaris)
+
+.global VG_(trampoline_stuff_start)
+VG_(trampoline_stuff_start):
+
+/* char *strcpy(char *restrict s1, const char *restrict s2); */
+.global VG_(amd64_solaris_REDIR_FOR_strcpy)
+.type   VG_(amd64_solaris_REDIR_FOR_strcpy), @function
+VG_(amd64_solaris_REDIR_FOR_strcpy):
+        pushq   %rbp                    /* establish a stack frame */
+        movq    %rsp, %rbp
+        movq    %rdi, %rdx              /* copy s1 */
+1:
+        movzbl  (%rsi), %eax            /* load one input character */
+        movb    %al, (%rdx)             /* copy to output/s2 */
+        incq    %rsi                    /* skip to the next output character */
+        incq    %rdx                    /* skip to the next input character */
+        testb   %al, %al                /* is the copied character null? */
+        jnz     1b                      /* no, copy the next character */
+        leave                           /* destroy the stack frame */
+        movq    %rdi, %rax              /* set s1 as the return value */
+        ret                             /* return to the caller */
+.size VG_(amd64_solaris_REDIR_FOR_strcpy), .-VG_(amd64_solaris_REDIR_FOR_strcpy)
+
+/* char *strncpy(char *restrict s1, const char *restrict s2, size_t n); */
+.global VG_(amd64_solaris_REDIR_FOR_strncpy)
+.type   VG_(amd64_solaris_REDIR_FOR_strncpy), @function
+VG_(amd64_solaris_REDIR_FOR_strncpy):
+        pushq   %rbp                    /* establish a stack frame */
+        movq    %rsp, %rbp
+        movq    %rdi, %rcx              /* copy s1 */
+1:
+        testq   %rdx, %rdx              /* is the remaining size zero? */
+        jz      3f                      /* yes, all done */
+        movzbl  (%rsi), %eax            /* load one input character */
+        movb    %al, (%rcx)             /* copy to output/s2 */
+        decq    %rdx                    /* decrement the remaining size */
+        incq    %rsi                    /* skip to the next output character */
+        incq    %rcx                    /* skip to the next input character */
+        testb   %al, %al                /* is the copied character null? */
+        jnz     1b                      /* no, copy the next character */
+2:
+        testq   %rdx, %rdx              /* is the remaining size zero? */
+        jz      3f                      /* yes, all done */
+        movb    $0, (%rdx)              /* copy null to output/s2 */
+        decq    %rdx                    /* decrement the remaining size */
+        incq    %rsi                    /* skip to next output character */
+        jmp     2b                      /* proceed with the next character */
+3:
+        leave                           /* destroy the stack frame */
+        movq    %rdi, %rax              /* set s1 as the return value */
+        ret                             /* return to the caller */
+.size VG_(amd64_solaris_REDIR_FOR_strncpy), .-VG_(amd64_solaris_REDIR_FOR_strncpy)
+
+/* int strcmp(const char *s1, const char *s2); */
+.global VG_(amd64_solaris_REDIR_FOR_strcmp)
+.type   VG_(amd64_solaris_REDIR_FOR_strcmp), @function
+VG_(amd64_solaris_REDIR_FOR_strcmp):
+        pushq   %rbp                    /* establish a stack frame */
+        movq    %rsp, %rbp
+        jmp     2f                      /* go compare the first characters */
+1:
+        incq    %rdi                    /* skip to the next s1 character */
+        incq    %rsi                    /* skip to the next s2 character */
+2:
+        movzbl  (%rdi), %eax            /* load a character from s1 */
+        testb   %al, %al                /* is it null? */
+        jz      3f                      /* yes, exit */
+        cmpb    (%rsi), %al             /* are the characters equal? */
+        je      1b                      /* yes, proceed with next characters */
+3:
+        movzbl  (%rsi), %edx            /* load a character from s2 */
+        subl    %edx, %eax              /* calculate the return value */
+        leave                           /* destroy the stack frame */
+        ret                             /* return to the caller */
+.size VG_(amd64_solaris_REDIR_FOR_strcmp), .-VG_(amd64_solaris_REDIR_FOR_strcmp)
+
+/* char *strcat(char *restrict s1, const char *restrict s2); */
+.global VG_(amd64_solaris_REDIR_FOR_strcat)
+.type   VG_(amd64_solaris_REDIR_FOR_strcat), @function
+VG_(amd64_solaris_REDIR_FOR_strcat):
+        pushq   %rbp                    /* establish a stack frame */
+        movq    %rsp, %rbp
+        movq    %rdi, %rdx              /* copy s1 */
+        jmp     2f                      /* go handle the first character */
+1:
+        incq    %rdx                    /* skip to the next s1 character */
+2:
+        cmpb    $0, (%rdx)              /* is the s1 character null? */
+        jne     1b                      /* no, go check the next character */
+3:
+        movzbl  (%rsi), %eax            /* load a character from s2 */
+        movb    %al, (%rdx)             /* copy the s2 character to s1 */
+        incq    %rdx                    /* skip to the next s1 character */
+        incq    %rsi                    /* skip to the next s2 character */
+        testb   %al, %al                /* was the character null? */
+        jnz     3b                      /* no, go copy the next character */
+        movq    %rdi, %rax              /* set s1 as the return value */
+        leave                           /* destroy the stack frame */
+        ret                             /* return to the caller */
+.size VG_(amd64_solaris_REDIR_FOR_strcat), .-VG_(amd64_solaris_REDIR_FOR_strcat)
+
+/* size_t strlen(const char *s); */
+.global VG_(amd64_solaris_REDIR_FOR_strlen)
+.type   VG_(amd64_solaris_REDIR_FOR_strlen), @function
+VG_(amd64_solaris_REDIR_FOR_strlen):
+        pushq   %rbp                    /* establish a stack frame */
+        movq    %rsp, %rbp
+        movq    %rdi, %rax              /* copy s */
+        jmp     2f                      /* go handle the first character */
+1:
+        incq    %rax                    /* skip to the next s character */
+2:
+        cmpb    $0, (%rax)              /* is the s character null? */
+        jne     1b                      /* no, go process the next character */
+        subq    %rdi, %rax              /* calculate the return value */
+        leave                           /* destroy the stack frame */
+        ret                             /* return to the caller */
+.size VG_(amd64_solaris_REDIR_FOR_strlen), .-VG_(amd64_solaris_REDIR_FOR_strlen)
+
+.global VG_(trampoline_stuff_end)
+VG_(trampoline_stuff_end):
+
 /*---------------- unknown ----------------*/
 #else
 #  error Unknown platform
@@ -1415,15 +1596,11 @@
 #endif
 #endif
 #endif
-
-#if defined(VGO_linux)
-/* Let the linker know we don't need an executable stack */
-#  if defined(VGP_arm_linux)
-   .section .note.GNU-stack,"",%progbits
-#  else        
-   .section .note.GNU-stack,"",@progbits
-#  endif
 #endif
+#endif
+
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_translate.c b/coregrind/m_translate.c
index 86a3f4a..62680cb 100644
--- a/coregrind/m_translate.c
+++ b/coregrind/m_translate.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -1572,9 +1572,10 @@
       Bool ok = VG_(get_fnname_w_offset)(addr, &fnname);
       if (!ok) fnname = "UNKNOWN_FUNCTION";
       VG_(printf)(
-         "==== SB %d (evchecks %lld) [tid %d] 0x%lx %s %s+0x%llx\n",
-         VG_(get_bbs_translated)(), bbs_done, (Int)tid, addr,
-         fnname, objname, (ULong)objoff
+         "==== SB %u (evchecks %llu) [tid %u] 0x%lx %s %s%c0x%lx\n",
+         VG_(get_bbs_translated)(), bbs_done, tid, addr,
+         fnname, objname, objoff >= 0 ? '+' : '-', 
+         (UWord)(objoff >= 0 ? objoff : -objoff)
       );
    }
 
@@ -1679,6 +1680,9 @@
    vex_abiinfo.guest_ppc_zap_RZ_at_bl         = const_True;
    vex_abiinfo.host_ppc_calls_use_fndescrs    = False;
 #  endif
+#  if defined(VGP_amd64_solaris)
+   vex_abiinfo.guest_amd64_assume_fs_is_const = True;
+#  endif
 
    /* Set up closure args. */
    closure.tid    = tid;
diff --git a/coregrind/m_transtab.c b/coregrind/m_transtab.c
index a5f6f26..b9cce99 100644
--- a/coregrind/m_transtab.c
+++ b/coregrind/m_transtab.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -2373,8 +2373,8 @@
    if (VG_(clo_verbosity) > 2 || VG_(clo_stats)
        || VG_(debugLog_getLevel) () >= 2) {
       VG_(message)(Vg_DebugMsg,
-         "TT/TC: cache: %s--avg-transtab-entry-size=%d, " 
-         "%stool provided default %d\n",
+         "TT/TC: cache: %s--avg-transtab-entry-size=%u, "
+         "%stool provided default %u\n",
          VG_(clo_avg_transtab_entry_size) == 0 ? "ignoring " : "using ",
          VG_(clo_avg_transtab_entry_size),
          VG_(clo_avg_transtab_entry_size) == 0 ? "using " : "ignoring ",
@@ -2426,13 +2426,13 @@
       n_fast_updates, n_fast_flushes );
 
    VG_(message)(Vg_DebugMsg,
-                " transtab: new        %'lld "
+                " transtab: new        %'llu "
                 "(%'llu -> %'llu; ratio %3.1f) [%'llu scs] "
-                "avg tce size %d\n",
+                "avg tce size %llu\n",
                 n_in_count, n_in_osize, n_in_tsize,
                 safe_idiv(n_in_tsize, n_in_osize),
                 n_in_sc_count,
-                (int) (n_in_tsize / (n_in_count ? n_in_count : 1)));
+                n_in_tsize / (n_in_count ? n_in_count : 1));
    VG_(message)(Vg_DebugMsg,
                 " transtab: dumped     %'llu (%'llu -> ?" "?) "
                 "(sectors recycled %'llu)\n",
diff --git a/coregrind/m_ume/elf.c b/coregrind/m_ume/elf.c
index 0e4c1cd..a987150 100644
--- a/coregrind/m_ume/elf.c
+++ b/coregrind/m_ume/elf.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 
 #include "pub_core_basics.h"
 #include "pub_core_vki.h"
@@ -47,10 +47,15 @@
 #include "priv_ume.h"
 
 /* --- !!! --- EXTERNAL HEADERS start --- !!! --- */
-#define _GNU_SOURCE
-#define _FILE_OFFSET_BITS 64
+#if defined(VGO_linux)
+#  define _GNU_SOURCE
+#  define _FILE_OFFSET_BITS 64
+#endif
 /* This is for ELF types etc, and also the AT_ constants. */
 #include <elf.h>
+#if defined(VGO_solaris)
+#  include <sys/fasttrap.h> // PT_SUNWDTRACE_SIZE
+#endif
 /* --- !!! --- EXTERNAL HEADERS end --- !!! --- */
 
 
@@ -307,6 +312,9 @@
    Int i;
    void *entry;
    ESZ(Addr) ebase = 0;
+#  if defined(VGO_solaris)
+   ESZ(Addr) thrptr_addr = 0;
+#  endif
 
 #  if defined(HAVE_PIE)
    ebase = info->exe_base;
@@ -342,6 +350,11 @@
       if (ebase < hacky_load_address)
          ebase = hacky_load_address;
 #     endif
+
+#     if defined(VGO_solaris)
+      /* Record for later use in AT_BASE. */
+      info->interp_offset = ebase;
+#     endif
    }
 
    info->phnum = e->e.e_phnum;
@@ -355,6 +368,9 @@
       switch(ph->p_type) {
       case PT_PHDR:
          info->phdr = ph->p_vaddr + ebase;
+#        if defined(VGO_solaris)
+         info->real_phdr_present = True;
+#        endif
          break;
 
       case PT_LOAD:
@@ -363,6 +379,18 @@
          if (ph->p_vaddr+ph->p_memsz > maxaddr)
             maxaddr = ph->p_vaddr+ph->p_memsz;
          break;
+
+#     if defined(VGO_solaris)
+      case PT_SUNWDTRACE:
+         if (ph->p_memsz < PT_SUNWDTRACE_SIZE ||
+             (ph->p_flags & (PF_R | PF_W | PF_X)) != (PF_R | PF_W | PF_X)) {
+            VG_(printf)("valgrind: m_ume.c: too small SUNWDTRACE size\n");
+            return VKI_ENOEXEC;
+         }
+
+         info->init_thrptr = ph->p_vaddr + ebase;
+         break;
+#     endif
                         
       case PT_INTERP: {
          HChar *buf = VG_(malloc)("ume.LE.1", ph->p_filesz+1);
@@ -392,6 +420,21 @@
             ESZ(Phdr) *iph = &interp->p[j];
             ESZ(Addr) end;
 
+#           if defined(VGO_solaris)
+            if (iph->p_type == PT_SUNWDTRACE) {
+               if (iph->p_memsz < PT_SUNWDTRACE_SIZE ||
+                   (iph->p_flags & (PF_R | PF_W | PF_X))
+                      != (PF_R | PF_W | PF_X)) {
+                  VG_(printf)("valgrind: m_ume.c: too small SUNWDTRACE size\n");
+                  return VKI_ENOEXEC;
+               }
+
+               /* Store the thrptr value into a temporary because we do not
+                  know yet where the interpreter is mapped. */
+               thrptr_addr = iph->p_vaddr;
+            }
+#           endif
+
             if (iph->p_type != PT_LOAD || iph->p_memsz == 0)
                continue;
             
@@ -408,21 +451,40 @@
                interp_size = end;
          }
          break;
+         }
 
+#     if defined(PT_GNU_STACK) || defined(PT_SUNWSTACK)
 #     if defined(PT_GNU_STACK)
       /* Android's elf.h doesn't appear to have PT_GNU_STACK. */
       case PT_GNU_STACK:
+#     endif
+#     if defined(PT_SUNWSTACK)
+      /* Solaris-specific program header. */
+      case PT_SUNWSTACK:
+#     endif
          if ((ph->p_flags & PF_X) == 0) info->stack_prot &= ~VKI_PROT_EXEC;
          if ((ph->p_flags & PF_W) == 0) info->stack_prot &= ~VKI_PROT_WRITE;
          if ((ph->p_flags & PF_R) == 0) info->stack_prot &= ~VKI_PROT_READ;
          break;
 #     endif
 
+#     if defined(PT_SUNW_SYSSTAT)
+      /* Solaris-specific program header which requires link-time support. */
+      case PT_SUNW_SYSSTAT:
+         VG_(unimplemented)("Support for program header PT_SUNW_SYSSTAT.");
+         break;
+#     endif
+#     if defined(PT_SUNW_SYSSTAT_ZONE)
+      /* Solaris-specific program header which requires link-time support. */
+      case PT_SUNW_SYSSTAT_ZONE:
+         VG_(unimplemented)("Support for program header PT_SUNW_SYSSTAT_ZONE.");
+         break;
+#     endif
+
       default:
          // do nothing
          break;
       }
-      }
    }
 
    if (info->phdr == 0)
@@ -494,12 +556,22 @@
       entry = (void *)(advised - interp_addr + interp->e.e_entry);
 
       info->interp_offset = advised - interp_addr;
+#     if defined(VGO_solaris)
+      if (thrptr_addr)
+         info->init_thrptr = thrptr_addr + info->interp_offset;
+#     endif
 
       VG_(free)(interp->p);
       VG_(free)(interp);
-   } else
+   } else {
       entry = (void *)(ebase + e->e.e_entry);
 
+#     if defined(VGO_solaris)
+      if (e->e.e_type == ET_DYN)
+         info->ldsoexec = True;
+#     endif
+   }
+
    info->exe_base = minaddr + ebase;
    info->exe_end  = maxaddr + ebase;
 
@@ -526,7 +598,7 @@
    return 0;
 }
 
-#endif // defined(VGO_linux)
+#endif // defined(VGO_linux) || defined(VGO_solaris)
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_ume/macho.c b/coregrind/m_ume/macho.c
index 5c55141..efe0f59 100644
--- a/coregrind/m_ume/macho.c
+++ b/coregrind/m_ume/macho.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Apple Inc.
+   Copyright (C) 2005-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -76,8 +76,10 @@
 static void check_mmap(SysRes res, Addr base, SizeT len, const HChar* who)
 {
    if (sr_isError(res)) {
-      VG_(printf)("valgrind: mmap-FIXED(0x%llx, %lld) failed in UME (%s).\n", 
-                  (ULong)base, (Long)len, who);
+      VG_(printf)("valgrind: mmap-FIXED(0x%llx, %lld) failed in UME (%s) "
+                  "with error %lu (%s).\n",
+                  (ULong)base, (Long)len, who,
+                  sr_Err(res), VG_(strerror)(sr_Err(res)) );
       VG_(exit)(1);
    }
 }
@@ -86,8 +88,10 @@
 static void check_mmap_float(SysRes res, SizeT len, const HChar* who)
 {
    if (sr_isError(res)) {
-      VG_(printf)("valgrind: mmap-FLOAT(size=%lld) failed in UME (%s).\n", 
-                  (Long)len, who);
+      VG_(printf)("valgrind: mmap-FLOAT(size=%lld) failed in UME (%s) "
+                  "with error %lu (%s).\n",
+                  (Long)len, who,
+                  sr_Err(res), VG_(strerror)(sr_Err(res)) );
       VG_(exit)(1);
    }
 }
diff --git a/coregrind/m_ume/main.c b/coregrind/m_ume/main.c
index 11c6cc6..a319f4a 100644
--- a/coregrind/m_ume/main.c
+++ b/coregrind/m_ume/main.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -51,7 +51,7 @@
 } ExeHandler;
 
 static ExeHandler exe_handlers[] = {
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    { VG_(match_ELF),    VG_(load_ELF) },
 #  elif defined(VGO_darwin)
    { VG_(match_macho),  VG_(load_macho) },
diff --git a/coregrind/m_ume/priv_ume.h b/coregrind/m_ume/priv_ume.h
index 4f78190..7b3ccfd 100644
--- a/coregrind/m_ume/priv_ume.h
+++ b/coregrind/m_ume/priv_ume.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
-#if defined(VGO_linux) || defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 #ifndef __PRIV_UME_H
 #define __PRIV_UME_H
@@ -36,7 +36,7 @@
 
 extern Int VG_(do_exec_inner)(const HChar *exe, ExeInfo *info);
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 extern Bool VG_(match_ELF) ( const void *hdr, SizeT len );
 extern Int  VG_(load_ELF)  ( Int fd, const HChar *name, ExeInfo *info );
 #elif defined(VGO_darwin)
@@ -52,7 +52,7 @@
 
 #endif // __PRIV_UME_H
 
-#endif // defined(VGO_linux) || defined(VGO_darwin)
+#endif // defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
diff --git a/coregrind/m_ume/script.c b/coregrind/m_ume/script.c
index 5c03428..7f6b5b6 100644
--- a/coregrind/m_ume/script.c
+++ b/coregrind/m_ume/script.c
@@ -1,3 +1,4 @@
+/* -*- mode: C; c-basic-offset: 3; -*- */
 
 /*--------------------------------------------------------------------*/
 /*--- User-mode execve() for #! scripts.            m_ume_script.c ---*/
@@ -7,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -41,35 +42,27 @@
 
 #include "priv_ume.h"
 
+/* Return true, if the first line begins with #! and contains an
+   interpreter. */
 Bool VG_(match_script)(const void *hdr, SizeT len)
 {
    const HChar* script = hdr;
    const HChar* end    = script + len;
    const HChar* interp = script + 2;
 
-   // len < 4: need '#', '!', plus at least a '/' and one more char
-   if (len < 4) return False;    
+   if (len < 2) return False;    
    if (0 != VG_(memcmp)(hdr, "#!", 2)) return False;
 
-   // Find interpreter name, make sure it's an absolute path (starts with
-   // '/') and has at least one more char.  First, skip over any space
-   // between the #! and the start of the interpreter name
+   // Find interpreter name, which may be absolute or relative.
+   // First, skip over any space between the #! and the start of the
+   // interpreter name
    while (interp < end && (*interp == ' ' || *interp == '\t')) interp++;
 
    // overrun?
    if (interp >= end)   return False;  // can't find start of interp name
 
-   // interp should now point at the /
-   if (*interp != '/')  return False;  // absolute path only for interpreter
-
-   // check for something plausible after the /
-   interp++;
-   if (interp >= end)   return False;
-   if (VG_(isspace)(*interp)) return False;
-
-   // Here we should get the full interpreter name and check it with
-   // check_executable().  See the "EXEC FAILED" failure when running shell
-   // for an example.
+   // No interpreter found.
+   if (*interp == '\n') return False;
 
    return True;   // looks like a #! script
 }
@@ -103,8 +96,6 @@
    while (interp < end && (*interp == ' ' || *interp == '\t'))
       interp++;
 
-   vg_assert(*interp == '/');   /* absolute path only for interpreter */
-
    /* skip over interpreter name */
    for (cp = interp; cp < end && !VG_(isspace)(*cp); cp++)
       ;
diff --git a/coregrind/m_vki.c b/coregrind/m_vki.c
index 2e1626b..11b115c 100644
--- a/coregrind/m_vki.c
+++ b/coregrind/m_vki.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -76,7 +76,7 @@
 
    /* --- Platform-specific checks on signal sets --- */
 
-#  if defined(VGO_linux)
+#  if defined(VGO_linux) || defined(VGO_solaris)
    /* nothing to check */
 #  elif defined(VGP_x86_darwin) || defined(VGP_amd64_darwin)
    vg_assert(_VKI_NSIG == NSIG);
@@ -128,6 +128,14 @@
       syscall-amd64-darwin.S */
    vg_assert(VKI_SIG_SETMASK == 3);
 
+#  elif defined(VGO_solaris)
+   /* the toK- and fromK- forms are identical */
+   vg_assert(sizeof(vki_sigaction_toK_t)
+             == sizeof(vki_sigaction_fromK_t));
+   /* VKI_SET_SIGMASK is hardwired into syscall-x86-solaris.S
+      and syscall-amd64-solaris.S */
+   vg_assert(VKI_SIG_SETMASK == 3);
+
 #  else
 #     error "Unknown OS" 
 #  endif
diff --git a/coregrind/m_vkiscnums.c b/coregrind/m_vkiscnums.c
index 6bd15b2..9807a82 100644
--- a/coregrind/m_vkiscnums.c
+++ b/coregrind/m_vkiscnums.c
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -52,6 +52,19 @@
    return buf;
 }
 
+/* include/pub_tool_basics.h hardcodes the following syscall numbers
+   on mips{32,64}-linux so as to avoid a module cycle.  We make that
+   safe here by causing the build to fail if those numbers should ever
+   change.  See comments in function sr_EQ in the mips{32,64}-linux
+   section of include/pub_tool_basics.h for more details. */
+#if defined(VGP_mips32_linux)
+STATIC_ASSERT(__NR_pipe  == 4042);
+STATIC_ASSERT(__NR_pipe2 == 4328);
+#elif defined(VGP_mips64_linux)
+STATIC_ASSERT(__NR_pipe  == 5021);
+STATIC_ASSERT(__NR_pipe2 == 5287);
+#endif
+
 //---------------------------------------------------------------------------
 #elif defined(VGO_darwin)
 //---------------------------------------------------------------------------
@@ -73,6 +86,24 @@
 }
 
 //---------------------------------------------------------------------------
+#elif defined(VGO_solaris)
+//---------------------------------------------------------------------------
+
+const HChar *VG_(sysnum_string)(Word sysnum)
+{
+   static HChar buf[8+20+1];   // large enough
+
+   const HChar* classname = NULL;
+   switch (VG_SOLARIS_SYSNO_CLASS(sysnum)) {
+      case VG_SOLARIS_SYSCALL_CLASS_CLASSIC: classname = ""; break;
+      case VG_SOLARIS_SYSCALL_CLASS_FASTTRAP: classname = "fast:"; break;
+      default: classname = "UNKNOWN:"; break;
+   }
+   VG_(sprintf)(buf, "%s%ld", classname, VG_SOLARIS_SYSNO_INDEX(sysnum));
+   return buf;
+}
+
+//---------------------------------------------------------------------------
 #else
 //---------------------------------------------------------------------------
 #  error Unknown OS
diff --git a/coregrind/m_wordfm.c b/coregrind/m_wordfm.c
index 30cd6ad..9717020 100644
--- a/coregrind/m_wordfm.c
+++ b/coregrind/m_wordfm.c
@@ -9,13 +9,13 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2007-2013 Julian Seward
+   Copyright (C) 2007-2015 Julian Seward
       jseward@acm.org
 
    This code is based on previous work by Nicholas Nethercote
    (coregrind/m_oset.c) which is
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
        njn@valgrind.org
 
    which in turn was derived partially from:
diff --git a/coregrind/m_xarray.c b/coregrind/m_xarray.c
index 726dd55..07f161f 100644
--- a/coregrind/m_xarray.c
+++ b/coregrind/m_xarray.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2007-2013 OpenWorks LLP
+   Copyright (C) 2007-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -278,6 +278,9 @@
    return VG_(lookupXA_UNSAFE)(xa, key, first, last, xa->cmpFn);
 }
 
+/* FIXME: This function should return an unsigned value because the number
+   of elements cannot be negative. Unfortunately, making the change causes
+   a lot of ripple. */
 Word VG_(sizeXA) ( const XArray* xa )
 {
    vg_assert(xa);
diff --git a/coregrind/pub_core_addrinfo.h b/coregrind/pub_core_addrinfo.h
index 577c104..d5ee2db 100644
--- a/coregrind/pub_core_addrinfo.h
+++ b/coregrind/pub_core_addrinfo.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014  Philippe Waroquiers
+   Copyright (C) 2014-2015  Philippe Waroquiers
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/pub_core_aspacehl.h b/coregrind/pub_core_aspacehl.h
index 7ff0d98..66bca0c 100644
--- a/coregrind/pub_core_aspacehl.h
+++ b/coregrind/pub_core_aspacehl.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2009-2013 Julian Seward
+   Copyright (C) 2009-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_aspacemgr.h b/coregrind/pub_core_aspacemgr.h
index aefb43e..003d94e 100644
--- a/coregrind/pub_core_aspacemgr.h
+++ b/coregrind/pub_core_aspacemgr.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -70,6 +70,9 @@
 // Querying current status
 
 
+/* Finds an anonymous segment containing 'a'. Returned pointer is read only. */
+extern NSegment const *VG_(am_find_anon_segment) ( Addr a );
+
 /* Find the next segment along from 'here', if it is a file/anon/resvn
    segment. */
 extern NSegment const* VG_(am_next_nsegment) ( const NSegment* here,
@@ -91,6 +94,10 @@
 extern Bool VG_(am_is_valid_for_client_or_free_or_resvn)
    ( Addr start, SizeT len, UInt prot );
 
+/* Checks if a piece of memory consists of either free or reservation
+   segments. */
+extern Bool VG_(am_is_free_or_resvn)( Addr start, SizeT len );
+
 /* Check whether ADDR looks like an address or address-to-be located in an
    extensible client stack segment. */
 extern Bool VG_(am_addr_is_in_extensible_client_stack)( Addr addr );
@@ -122,7 +129,9 @@
 /* Describes a request for VG_(am_get_advisory). */
 typedef
    struct {
-      enum { MFixed, MHint, MAny } rkind;
+      /* Note: if rkind == MAlign then start specifies alignment. This is
+         Solaris specific. */
+      enum { MFixed, MHint, MAny, MAlign } rkind;
       Addr start;
       Addr len;
    }
@@ -209,8 +218,14 @@
    segment array accordingly. */
 extern SysRes VG_(am_mmap_file_fixed_client)
    ( Addr start, SizeT length, UInt prot, Int fd, Off64T offset );
+extern SysRes VG_(am_mmap_file_fixed_client_flags)
+   ( Addr start, SizeT length, UInt prot, UInt flags, Int fd, Off64T offset );
 extern SysRes VG_(am_mmap_named_file_fixed_client)
-   ( Addr start, SizeT length, UInt prot, Int fd, Off64T offset, const HChar *name );
+   ( Addr start, SizeT length, UInt prot, Int fd,
+     Off64T offset, const HChar *name );
+extern SysRes VG_(am_mmap_named_file_fixed_client_flags)
+   ( Addr start, SizeT length, UInt prot, UInt flags, Int fd,
+     Off64T offset, const HChar *name );
 
 /* Map anonymously at a fixed address for the client, and update
    the segment array accordingly. */
diff --git a/coregrind/pub_core_basics.h b/coregrind/pub_core_basics.h
index 9d7e6b4..278e3dc 100644
--- a/coregrind/pub_core_basics.h
+++ b/coregrind/pub_core_basics.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_basics_asm.h b/coregrind/pub_core_basics_asm.h
index ada20cb..0dccce8 100644
--- a/coregrind/pub_core_basics_asm.h
+++ b/coregrind/pub_core_basics_asm.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_clientstate.h b/coregrind/pub_core_clientstate.h
index dc93d1f..215dfb2 100644
--- a/coregrind/pub_core_clientstate.h
+++ b/coregrind/pub_core_clientstate.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -46,9 +46,11 @@
 extern Addr  VG_(clstk_start_base); // *Initial* lowest byte address
 extern Addr  VG_(clstk_end);        // Highest byte address
 extern UWord VG_(clstk_id);      // client stack id
+extern SizeT VG_(clstk_max_size); // max size of the main threads's client stack
 
-/* linux only: where is the client auxv ? */
-/* This is setup as part of setup_client_stack in initimg-linux.c. */
+/* Linux and Solaris only: where is the client auxv? */
+/* This is setup as part of setup_client_stack in initimg-linux.c
+   or initimg-solaris.c, respectively. */
 extern UWord* VG_(client_auxv);
 
 extern Addr  VG_(brk_base);	 // start of brk
@@ -71,6 +73,11 @@
 /* Same as above, but for /proc/<pid>/auxv. */
 extern Int VG_(cl_auxv_fd);
 
+#if defined(VGO_solaris)
+/* Same as above, but for /proc/<pid>/psinfo. */
+extern Int VG_(cl_psinfo_fd);
+#endif /* VGO_solaris */
+
 // Client's original rlimit data and rlimit stack
 extern struct vki_rlimit VG_(client_rlimit_data);
 extern struct vki_rlimit VG_(client_rlimit_stack);
@@ -93,6 +100,8 @@
    VG_(get_StackTrace) in m_stacktrace.c for further info. */
 extern Addr VG_(client__dl_sysinfo_int80);
 
+/* Obtains the initial client stack pointer from the finalised image info. */
+extern Addr VG_(get_initial_client_SP)(void);
 
 /* glibc nptl pthread systems only, when no-nptl-pthread-stackcache
    was given in --sim-hints.
@@ -112,6 +121,12 @@
    way to disable the pthread stack cache. */
 extern SizeT* VG_(client__stack_cache_actsize__addr);
 
+#if defined(VGO_solaris)
+/* Address of variable vg_vfork_fildes in vgpreload_core.so.0
+   (vg_preloaded.c). */
+extern Int* VG_(vfork_fildes_addr);
+#endif
+
 #endif   // __PUB_CORE_CLIENTSTATE_H
 
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/pub_core_clreq.h b/coregrind/pub_core_clreq.h
index b6d3a09..45c48c3 100644
--- a/coregrind/pub_core_clreq.h
+++ b/coregrind/pub_core_clreq.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_commandline.h b/coregrind/pub_core_commandline.h
index 0cf0036..bac902e 100644
--- a/coregrind/pub_core_commandline.h
+++ b/coregrind/pub_core_commandline.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_coredump.h b/coregrind/pub_core_coredump.h
index 08e4107..851b3ff 100644
--- a/coregrind/pub_core_coredump.h
+++ b/coregrind/pub_core_coredump.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_cpuid.h b/coregrind/pub_core_cpuid.h
index eebe371..f34e56e 100644
--- a/coregrind/pub_core_cpuid.h
+++ b/coregrind/pub_core_cpuid.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_debugger.h b/coregrind/pub_core_debugger.h
deleted file mode 100644
index a3ac809..0000000
--- a/coregrind/pub_core_debugger.h
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/*--------------------------------------------------------------------*/
-/*--- Attaching a debugger.                    pub_core_debugger.h ---*/
-/*--------------------------------------------------------------------*/
-
-/*
-   This file is part of Valgrind, a dynamic binary instrumentation
-   framework.
-
-   Copyright (C) 2000-2013 Julian Seward
-      jseward@acm.org
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307, USA.
-
-   The GNU General Public License is contained in the file COPYING.
-*/
-
-#ifndef __PUB_CORE_DEBUGGER_H
-#define __PUB_CORE_DEBUGGER_H
-
-//--------------------------------------------------------------------
-// PURPOSE: This simple module just deals with attaching a debugger to the
-// running program.
-//--------------------------------------------------------------------
-
-#include "pub_core_basics.h"      // ThreadId
-
-extern void VG_(start_debugger) ( ThreadId tid );
-
-#endif   // __PUB_CORE_DEBUGGER_H
-
-/*--------------------------------------------------------------------*/
-/*--- end                                                          ---*/
-/*--------------------------------------------------------------------*/
diff --git a/coregrind/pub_core_debuginfo.h b/coregrind/pub_core_debuginfo.h
index ce1b199..b698f2c 100644
--- a/coregrind/pub_core_debuginfo.h
+++ b/coregrind/pub_core_debuginfo.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -62,7 +62,7 @@
    released by simply re-opening and closing the same file (even via
    different fd!).
 */
-#if defined(VGO_linux) || defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
 extern ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd );
 
 extern void VG_(di_notify_munmap)( Addr a, SizeT len );
@@ -142,14 +142,22 @@
                                Addr min_accessible,
                                Addr max_accessible );
 
-/* returns the "generation" of the CF info.
+/* returns the "generation" of the debug info.
    Each time some debuginfo is changed (e.g. loaded or unloaded),
-   the VG_(CF_info_generation) value returned will be increased.
-   This can be used to flush cached information derived from the CF info. */
-extern UInt VG_(CF_info_generation) (void);
+   the VG_(debuginfo_generation)() value returned will be increased.
+   This can be used to flush cached information derived from debug
+   info (e.g. CFI info or FPO info or ...). */
+extern UInt VG_(debuginfo_generation) (void);
 
 
 
+/* True if some FPO information is loaded.
+   It is useless to call VG_(use_FPO_info) if this returns False.
+   Note that the return value should preferrably be cached in
+   the stack unwind code, and re-queried when the debug info generation
+   changes. */
+extern Bool VG_(FPO_info_present)(void);
+
 /* Use MSVC FPO data to do one step of stack unwinding. */
 extern Bool VG_(use_FPO_info) ( /*MOD*/Addr* ipP,
                                 /*MOD*/Addr* spP,
@@ -157,6 +165,10 @@
                                 Addr min_accessible,
                                 Addr max_accessible );
 
+/* Print the unwind info (if there is some) for the given address
+   range [from,to]. */
+extern void VG_(ppUnwindInfo) (Addr from, Addr to);
+
 /* AVMAs for a symbol. Usually only the lowest address of the entity.
    On ppc64 platforms, also contains tocptr and local_ep.
    These fields should only be accessed using the macros
diff --git a/coregrind/pub_core_debuglog.h b/coregrind/pub_core_debuglog.h
index 812ce8a..c5006ca 100644
--- a/coregrind/pub_core_debuglog.h
+++ b/coregrind/pub_core_debuglog.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_deduppoolalloc.h b/coregrind/pub_core_deduppoolalloc.h
index 0803485..956fe17 100644
--- a/coregrind/pub_core_deduppoolalloc.h
+++ b/coregrind/pub_core_deduppoolalloc.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014  Philippe Waroquiers philippe.waroquiers@skynet.be
+   Copyright (C) 2014-2015  Philippe Waroquiers philippe.waroquiers@skynet.be
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/pub_core_demangle.h b/coregrind/pub_core_demangle.h
index b7e1a8f..57b2f7b 100644
--- a/coregrind/pub_core_demangle.h
+++ b/coregrind/pub_core_demangle.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_dispatch.h b/coregrind/pub_core_dispatch.h
index 9e08e9d..222879b 100644
--- a/coregrind/pub_core_dispatch.h
+++ b/coregrind/pub_core_dispatch.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_dispatch_asm.h b/coregrind/pub_core_dispatch_asm.h
index 97fa500..297efa3 100644
--- a/coregrind/pub_core_dispatch_asm.h
+++ b/coregrind/pub_core_dispatch_asm.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_errormgr.h b/coregrind/pub_core_errormgr.h
index 110c206..5dc01b7 100644
--- a/coregrind/pub_core_errormgr.h
+++ b/coregrind/pub_core_errormgr.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -57,7 +57,7 @@
 // else                         print all errors and suppressions used.
 extern void VG_(show_all_errors)          ( Int verbosity, Bool xml );
 
-/* Print (in readable format) the last error that occured. */
+/* Print (in readable format) the last error that occurred. */
 extern void VG_(show_last_error)          ( void );
 
 extern void VG_(show_error_counts_as_XML) ( void );
diff --git a/coregrind/pub_core_execontext.h b/coregrind/pub_core_execontext.h
index abab888..b553cc0 100644
--- a/coregrind/pub_core_execontext.h
+++ b/coregrind/pub_core_execontext.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_gdbserver.h b/coregrind/pub_core_gdbserver.h
index 6ec9daf..fa69863 100644
--- a/coregrind/pub_core_gdbserver.h
+++ b/coregrind/pub_core_gdbserver.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Philippe Waroquiers
+   Copyright (C) 2011-2015 Philippe Waroquiers
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -63,7 +63,7 @@
 void VG_(gdbserver_exit) (ThreadId tid, VgSchedReturnCode tids_schedretcode);
 
 /* On systems that defines PR_SET_PTRACER, verify if ptrace_scope is
-   is permissive enough for vgdb or --db-attach=yes.
+   is permissive enough for vgdb.
    Otherwise, call set_ptracer.
    This is especially aimed at Ubuntu >= 10.10 which has added
    the ptrace_scope context. */
@@ -83,7 +83,7 @@
 
    Note that gdbserver assumes that software breakpoint is supported
    (as this will be done by re-instrumenting the code).
-   Note that len is ignored for sofware breakpoints. hardware_breakpoint
+   Note that len is ignored for software breakpoints. hardware_breakpoint
    are not supported.
 
    Returns True if the point has properly been inserted or removed
diff --git a/coregrind/pub_core_guest.h b/coregrind/pub_core_guest.h
index 46a7d05..d7025c6 100644
--- a/coregrind/pub_core_guest.h
+++ b/coregrind/pub_core_guest.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 OpenWorks LLP
+   Copyright (C) 2014-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_hashtable.h b/coregrind/pub_core_hashtable.h
index ca6ba57..e5eb46f 100644
--- a/coregrind/pub_core_hashtable.h
+++ b/coregrind/pub_core_hashtable.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_initimg.h b/coregrind/pub_core_initimg.h
index 428b0c2..2943321 100644
--- a/coregrind/pub_core_initimg.h
+++ b/coregrind/pub_core_initimg.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -119,6 +119,30 @@
    Addr  initial_client_IP;
 };
 
+/* ------------------------- Solaris ------------------------- */
+
+#elif defined(VGO_solaris)
+
+struct _IICreateImageInfo {
+   /* ------ Mandatory fields ------ */
+   const HChar* toolname;
+   Addr    sp_at_startup;
+   Addr    clstack_end; /* highest stack addressable byte */
+   /* ------ Per-OS fields ------ */
+   HChar** argv;
+   HChar** envp;
+};
+
+struct _IIFinaliseImageInfo {
+   /* ------ Mandatory fields ------ */
+   SizeT clstack_max_size;
+   Addr  initial_client_SP;
+   /* ------ Per-OS fields ------ */
+   Addr  initial_client_IP;
+   Addr  initial_client_TOC;
+   UInt* client_auxv;
+   Addr  initial_client_TP; /* thread pointer */
+};
 
 #else
 #  error "Unknown OS"
diff --git a/coregrind/pub_core_inner.h b/coregrind/pub_core_inner.h
index 9ee2622..0e59844 100644
--- a/coregrind/pub_core_inner.h
+++ b/coregrind/pub_core_inner.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2012-2013 Philippe Waroquiers
+   Copyright (C) 2012-2015 Philippe Waroquiers
       philippe.waroquiers@skynet.be
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_libcassert.h b/coregrind/pub_core_libcassert.h
index 32cfc50..9313350 100644
--- a/coregrind/pub_core_libcassert.h
+++ b/coregrind/pub_core_libcassert.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -75,8 +75,9 @@
 
 /* Called when some unhandleable client behaviour is detected.
    Prints a msg and aborts. */
-extern void VG_(unimplemented) ( const HChar* msg )
-            __attribute__((__noreturn__));
+extern void VG_(unimplemented) ( const HChar* format, ... )
+            __attribute__((__noreturn__))
+            PRINTF_CHECK(1, 2);
 
 /* Show the state of various threads related information, such
    as the guest stacktrace for each thread.
diff --git a/coregrind/pub_core_libcbase.h b/coregrind/pub_core_libcbase.h
index e0b5bbf..cdb4c49 100644
--- a/coregrind/pub_core_libcbase.h
+++ b/coregrind/pub_core_libcbase.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_libcfile.h b/coregrind/pub_core_libcfile.h
index 560e10c..caf7ce1 100644
--- a/coregrind/pub_core_libcfile.h
+++ b/coregrind/pub_core_libcfile.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_libcprint.h b/coregrind/pub_core_libcprint.h
index aedd915..7b2d4a8 100644
--- a/coregrind/pub_core_libcprint.h
+++ b/coregrind/pub_core_libcprint.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_libcproc.h b/coregrind/pub_core_libcproc.h
index a1f1e9a..1bb27ba 100644
--- a/coregrind/pub_core_libcproc.h
+++ b/coregrind/pub_core_libcproc.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -71,8 +71,11 @@
 // Environment manipulations
 extern HChar **VG_(env_setenv)   ( HChar ***envp, const HChar* varname,
                                    const HChar *val );
-extern void    VG_(env_unsetenv) ( HChar **env, const HChar *varname );
-extern void    VG_(env_remove_valgrind_env_stuff) ( HChar** env ); 
+extern void    VG_(env_unsetenv) ( HChar **env, const HChar *varname,
+                                   void (*free_fn) ( void *) );
+extern void    VG_(env_remove_valgrind_env_stuff) ( HChar** env,
+                                                    Bool ro_strings,
+                                                    void (*free_fn) (void *) );
 extern HChar **VG_(env_clone)    ( HChar **env_clone );
 
 // misc
diff --git a/coregrind/pub_core_libcsetjmp.h b/coregrind/pub_core_libcsetjmp.h
index 1f71acf..105c304 100644
--- a/coregrind/pub_core_libcsetjmp.h
+++ b/coregrind/pub_core_libcsetjmp.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 Mozilla Inc
+   Copyright (C) 2010-2015 Mozilla Inc
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/pub_core_libcsignal.h b/coregrind/pub_core_libcsignal.h
index 46fa22c..8f45a46 100644
--- a/coregrind/pub_core_libcsignal.h
+++ b/coregrind/pub_core_libcsignal.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -52,7 +52,7 @@
                                  const vki_sigset_t* set2 );
 
 extern Int  VG_(sigaddset)   ( vki_sigset_t* set, Int signum );
-extern Int  VG_(sigdelset)   ( vki_sigset_t* set, Int signum );
+/* VG_(sigdelset) is in pub_tool_libcsignal.h */
 extern Int  VG_(sigismember) ( const vki_sigset_t* set, Int signum );
 
 extern void VG_(sigaddset_from_set) ( vki_sigset_t* dst, const vki_sigset_t* src );
diff --git a/coregrind/pub_core_mach.h b/coregrind/pub_core_mach.h
index 038747c..3dd882c 100644
--- a/coregrind/pub_core_mach.h
+++ b/coregrind/pub_core_mach.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Apple Inc.
+   Copyright (C) 2005-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_machine.h b/coregrind/pub_core_machine.h
index 7fb7afe..a72381b 100644
--- a/coregrind/pub_core_machine.h
+++ b/coregrind/pub_core_machine.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -41,12 +41,12 @@
 #include "pub_core_basics.h"      // UnwindStartRegs
 
 // XXX: this is *really* the wrong spot for these things
-#if defined(VGP_x86_linux)
+#if defined(VGP_x86_linux) || defined(VGP_x86_solaris)
 #  define VG_ELF_DATA2XXX     ELFDATA2LSB
 #  define VG_ELF_MACHINE      EM_386
 #  define VG_ELF_CLASS        ELFCLASS32
 #  undef  VG_PLAT_USES_PPCTOC
-#elif defined(VGP_amd64_linux)
+#elif defined(VGP_amd64_linux) || defined(VGP_amd64_solaris)
 #  define VG_ELF_DATA2XXX     ELFDATA2LSB
 #  define VG_ELF_MACHINE      EM_X86_64
 #  define VG_ELF_CLASS        ELFCLASS64
@@ -169,6 +169,7 @@
 // Offsets for the Vex state
 #define VG_O_STACK_PTR        (offsetof(VexGuestArchState, VG_STACK_PTR))
 #define VG_O_INSTR_PTR        (offsetof(VexGuestArchState, VG_INSTR_PTR))
+#define VG_O_FRAME_PTR        (offsetof(VexGuestArchState, VG_FRAME_PTR))
 #define VG_O_FPC_REG          (offsetof(VexGuestArchState, VG_FPC_REG))
 
 
diff --git a/coregrind/pub_core_mallocfree.h b/coregrind/pub_core_mallocfree.h
index eeb4aa1..87fe7d9 100644
--- a/coregrind/pub_core_mallocfree.h
+++ b/coregrind/pub_core_mallocfree.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -63,9 +63,10 @@
 // This is both the minimum payload size of a malloc'd block, and its
 // minimum alignment.  Must be a power of 2 greater than 4, and should be
 // greater than 8.
-#if   defined(VGP_x86_linux)   || \
-      defined(VGP_arm_linux)   || \
-      defined(VGP_mips32_linux)
+#if   defined(VGP_x86_linux)    || \
+      defined(VGP_arm_linux)    || \
+      defined(VGP_mips32_linux) || \
+      defined(VGP_x86_solaris)
 #  define VG_MIN_MALLOC_SZB        8
 // Nb: We always use 16 bytes for Darwin, even on 32-bits, so it can be used
 // for any AltiVec- or SSE-related type.  This matches the Darwin libc.
@@ -80,7 +81,8 @@
       defined(VGP_x86_darwin)     || \
       defined(VGP_amd64_darwin)   || \
       defined(VGP_arm64_linux)    || \
-      defined(VGP_tilegx_linux)
+      defined(VGP_tilegx_linux)   || \
+      defined(VGP_amd64_solaris)
 #  define VG_MIN_MALLOC_SZB       16
 #else
 #  error Unknown platform
diff --git a/coregrind/pub_core_options.h b/coregrind/pub_core_options.h
index 53ccfc0..2a45c6b 100644
--- a/coregrind/pub_core_options.h
+++ b/coregrind/pub_core_options.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -88,10 +88,6 @@
    shadow registers */
 extern Bool  VG_(clo_vgdb_shadow_registers);
 
-/* Enquire about whether to attach to a debugger at errors?   default: NO */
-extern Bool  VG_(clo_db_attach);
-/* The debugger command?  default: whatever gdb ./configure found */
-extern const HChar* VG_(clo_db_command);
 /* Generating a suppression for each error?   default: 0 (NO)
    Other values: 1 (yes, but ask user), 2 (yes, don't ask user) */
 extern Int   VG_(clo_gen_suppressions);
@@ -220,6 +216,7 @@
 typedef
    enum {
       SimHint_lax_ioctls,
+      SimHint_lax_doors,
       SimHint_fuse_compatible,
       SimHint_enable_outer,
       SimHint_no_inner_prefix,
diff --git a/coregrind/pub_core_oset.h b/coregrind/pub_core_oset.h
index 51a6921..67a1e91 100644
--- a/coregrind/pub_core_oset.h
+++ b/coregrind/pub_core_oset.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_poolalloc.h b/coregrind/pub_core_poolalloc.h
index c8127e6..7744e8c 100644
--- a/coregrind/pub_core_poolalloc.h
+++ b/coregrind/pub_core_poolalloc.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013  Florian Krohm florian@eich-krohm.de
+   Copyright (C) 2013-2015  Florian Krohm florian@eich-krohm.de
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/pub_core_rangemap.h b/coregrind/pub_core_rangemap.h
index d181e1f..39d24a4 100644
--- a/coregrind/pub_core_rangemap.h
+++ b/coregrind/pub_core_rangemap.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Mozilla Foundation
+   Copyright (C) 2014-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/pub_core_redir.h b/coregrind/pub_core_redir.h
index 3f2541b..5d40429 100644
--- a/coregrind/pub_core_redir.h
+++ b/coregrind/pub_core_redir.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_replacemalloc.h b/coregrind/pub_core_replacemalloc.h
index bbcbf8d..4cb3e6f 100644
--- a/coregrind/pub_core_replacemalloc.h
+++ b/coregrind/pub_core_replacemalloc.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_sbprofile.h b/coregrind/pub_core_sbprofile.h
index 69f4847..c17366d 100644
--- a/coregrind/pub_core_sbprofile.h
+++ b/coregrind/pub_core_sbprofile.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2012-2013 Mozilla Foundation
+   Copyright (C) 2012-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/pub_core_scheduler.h b/coregrind/pub_core_scheduler.h
index aa9cf04..0851950 100644
--- a/coregrind/pub_core_scheduler.h
+++ b/coregrind/pub_core_scheduler.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_seqmatch.h b/coregrind/pub_core_seqmatch.h
index 6ac52c1..3e30e4d 100644
--- a/coregrind/pub_core_seqmatch.h
+++ b/coregrind/pub_core_seqmatch.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_sigframe.h b/coregrind/pub_core_sigframe.h
index b1f385c..3e6b682 100644
--- a/coregrind/pub_core_sigframe.h
+++ b/coregrind/pub_core_sigframe.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -41,9 +41,15 @@
 // frame appropriately.
 //--------------------------------------------------------------------
 
+/* This is an arbitrary si_code that we only use internally for SIGSEGV.
+   It corresponds to the value SI_KERNEL on Linux, but that's not really
+   of any significance. */
+#define VKI_SEGV_MADE_UP_GPF 0x80
+
 /* Create a signal frame for thread 'tid'. */
 extern 
 void VG_(sigframe_create) ( ThreadId tid, 
+                            Bool on_altstack,
                             Addr sp_top_of_frame,
                             const vki_siginfo_t *siginfo,
                             const struct vki_ucontext *uc,
@@ -57,6 +63,11 @@
 extern 
 void VG_(sigframe_destroy)( ThreadId tid, Bool isRT );
 
+#if defined(VGO_solaris)
+extern
+void VG_(sigframe_return)(ThreadId tid, const vki_ucontext_t *uc);
+#endif
+
 #endif   // __PUB_CORE_SIGFRAME_H
 
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/pub_core_signals.h b/coregrind/pub_core_signals.h
index 1b1c337..88d7d62 100644
--- a/coregrind/pub_core_signals.h
+++ b/coregrind/pub_core_signals.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_sparsewa.h b/coregrind/pub_core_sparsewa.h
index 68c32b0..b1a210b 100644
--- a/coregrind/pub_core_sparsewa.h
+++ b/coregrind/pub_core_sparsewa.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_stacks.h b/coregrind/pub_core_stacks.h
index 31f5f72..3d83f4e 100644
--- a/coregrind/pub_core_stacks.h
+++ b/coregrind/pub_core_stacks.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_stacktrace.h b/coregrind/pub_core_stacktrace.h
index 5ec37aa..e8aee04 100644
--- a/coregrind/pub_core_stacktrace.h
+++ b/coregrind/pub_core_stacktrace.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_syscall.h b/coregrind/pub_core_syscall.h
index 8c7bdba..d8fe50e 100644
--- a/coregrind/pub_core_syscall.h
+++ b/coregrind/pub_core_syscall.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -87,9 +87,16 @@
 extern SysRes VG_(mk_SysRes_mips64_linux)( ULong v0, ULong v1,
                                            ULong a3 );
 extern SysRes VG_(mk_SysRes_tilegx_linux)( Long val );
+extern SysRes VG_(mk_SysRes_x86_solaris) ( Bool isErr, UInt val, UInt val2 );
+extern SysRes VG_(mk_SysRes_amd64_solaris) ( Bool isErr, ULong val, ULong val2 );
 extern SysRes VG_(mk_SysRes_Error)       ( UWord val );
 extern SysRes VG_(mk_SysRes_Success)     ( UWord val );
 
+#if defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
+/* On Linux/MIPS, VG_(mk_SysRes_Success) sets the second result word
+   to zero.  Here is a version that allows setting both values. */
+extern SysRes VG_(mk_SysRes_SuccessEx)   ( UWord val, UWord valEx );
+#endif
 
 
 /* Return a string which gives the name of an error value.  Note,
diff --git a/coregrind/pub_core_syswrap.h b/coregrind/pub_core_syswrap.h
index 49dbc1e..0b5b54b 100644
--- a/coregrind/pub_core_syswrap.h
+++ b/coregrind/pub_core_syswrap.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -33,6 +33,7 @@
 
 #include "pub_core_basics.h"        // VG_ macro
 #include "pub_core_threadstate.h"   // ThreadArchState
+#include "pub_core_tooliface.h"     // CorePart
 
 //--------------------------------------------------------------------
 // PURPOSE: This module contains all the syscall junk:  mostly PRE/POST
@@ -58,9 +59,15 @@
                ThreadId tid,
                Addr     ip, 
                SysRes   sysret,
-               Bool     restart
+               Bool     restart,
+               struct vki_ucontext *uc
             );
 
+#if defined(VGO_solaris)
+// Determine if in a blocking syscall.
+extern Bool VG_(is_ip_in_blocking_syscall)(ThreadId tid, Addr ip);
+#endif
+
 // Wait until all other threads are dead
 extern void VG_(reap_threads)(ThreadId self);
 
@@ -80,6 +87,17 @@
 extern void (* VG_(address_of_m_main_shutdown_actions_NORETURN) )
             (ThreadId,VgSchedReturnCode);
 
+#if defined(VGO_solaris)
+extern void VG_(save_context)(ThreadId tid, vki_ucontext_t *uc,
+                              CorePart part);
+extern void VG_(restore_context)(ThreadId tid, vki_ucontext_t *uc,
+                                 CorePart part, Bool esp_is_thrptr);
+extern void VG_(syswrap_init)(void);
+extern void VG_(change_mapping_ownership)(Addr addr, Bool once_only);
+extern Bool VG_(setup_client_dataseg)(void);
+extern void VG_(track_client_dataseg)(ThreadId tid);
+#endif
+
 #endif   // __PUB_CORE_SYSWRAP_H
 
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/pub_core_threadstate.h b/coregrind/pub_core_threadstate.h
index 230c41d..d2aa251 100644
--- a/coregrind/pub_core_threadstate.h
+++ b/coregrind/pub_core_threadstate.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -251,6 +251,9 @@
             int which_port;
          } task_get_special_port;
          struct {
+            int which;
+         } host_get_special_port;
+         struct {
             char *service_name;
          } bootstrap_look_up;
          struct {
@@ -263,6 +266,53 @@
             char *path;
          } io_registry_entry_from_path;
       } mach_args;
+
+#     elif defined(VGO_solaris)
+#     if defined(VGP_x86_solaris)
+      /* A pointer to thread related data. The pointer is used to set up
+         a segment descriptor (GDT[VKI_GDT_LWPGS]) when the thread is about to
+         be run. A client program sets this value explicitly by calling the
+         lwp_private syscall or it can be passed as a part of ucontext_t when
+         a new thread is created (the lwp_create syscall). */
+      Addr thrptr;
+#     elif defined(VGP_amd64_solaris)
+      /* GDT is not fully simulated by AMD64/Solaris. The %fs segment
+         register is assumed to be always zero and vex->guest_FS_CONST holds
+         the 64-bit offset associated with a %fs value of zero. */
+#     endif
+
+      /* Stack id (value (UWord)(-1) means that there is no stack). This
+         tracks a stack that is set in restore_stack(). */
+      UWord stk_id;
+
+      /* Simulation of the kernel's lwp->lwp_ustack. Set in the PRE wrapper
+         of the getsetcontext syscall, for SETUSTACK. Used in
+         VG_(save_context)(), VG_(restore_context)() and
+         VG_(sigframe_create)(). */
+      vki_stack_t *ustack;
+
+      /* Flag saying if the current call is in the door_return() variant of
+         the door() syscall. */
+      Bool in_door_return;
+
+      /* Address of the door server procedure corresponding to the current
+         thread. Used to keep track which door call the current thread
+         services. Valid only between subsequent door_return() invocations. */
+      Addr door_return_procedure;
+
+      /* Simulation of the kernel's lwp->lwp_oldcontext. Set in
+         VG_(restore_context)() and VG_(sigframe_create)(). Used in
+         VG_(save_context)(). */
+      vki_ucontext_t *oldcontext;
+
+      /* Address of sc_shared_t struct shared between kernel and libc.
+         Set in POST(sys_schedctl). Every thread gets its own address
+         but typically many are squeezed on a singled mapped page.
+         Cleaned in the child atfork handler. */
+      Addr schedctl_data;
+
+      /* True if this is daemon thread. */
+      Bool daemon_thread;
 #     endif
 
    }
diff --git a/coregrind/pub_core_tooliface.h b/coregrind/pub_core_tooliface.h
index 6968a18..41da986 100644
--- a/coregrind/pub_core_tooliface.h
+++ b/coregrind/pub_core_tooliface.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -233,6 +233,9 @@
    void (*track_post_reg_write_clientcall_return)(ThreadId, PtrdiffT, SizeT,
                                                   Addr);
 
+   void (*track_copy_mem_to_reg)(CorePart, ThreadId, Addr, PtrdiffT, SizeT);
+   void (*track_copy_reg_to_mem)(CorePart, ThreadId, PtrdiffT, Addr, SizeT);
+
    void (*track_start_client_code)(ThreadId, ULong);
    void (*track_stop_client_code) (ThreadId, ULong);
 
diff --git a/coregrind/pub_core_trampoline.h b/coregrind/pub_core_trampoline.h
index 7630729..eda5ec6 100644
--- a/coregrind/pub_core_trampoline.h
+++ b/coregrind/pub_core_trampoline.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -161,6 +161,20 @@
 extern UInt  VG_(mips64_linux_REDIR_FOR_strlen)( void* );
 #endif
 
+#if defined(VGP_x86_solaris)
+extern SizeT VG_(x86_solaris_REDIR_FOR_strcmp)(const HChar *, const HChar *);
+extern SizeT VG_(x86_solaris_REDIR_FOR_strlen)(const HChar *);
+#endif
+
+#if defined(VGP_amd64_solaris)
+extern HChar *VG_(amd64_solaris_REDIR_FOR_strcpy)(HChar *, const HChar *);
+extern HChar *VG_(amd64_solaris_REDIR_FOR_strncpy)(HChar *, const HChar *,
+                                                  SizeT);
+extern Int VG_(amd64_solaris_REDIR_FOR_strcmp)(const HChar *, const HChar *);
+extern HChar *VG_(amd64_solaris_REDIR_FOR_strcat)(HChar *, const HChar *);
+extern SizeT VG_(amd64_solaris_REDIR_FOR_strlen)(const HChar *);
+#endif
+
 #endif   // __PUB_CORE_TRAMPOLINE_H
 
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/pub_core_translate.h b/coregrind/pub_core_translate.h
index 4866629..4c0b068 100644
--- a/coregrind/pub_core_translate.h
+++ b/coregrind/pub_core_translate.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_transtab.h b/coregrind/pub_core_transtab.h
index 291f9df..e9f3bc2 100644
--- a/coregrind/pub_core_transtab.h
+++ b/coregrind/pub_core_transtab.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_transtab_asm.h b/coregrind/pub_core_transtab_asm.h
index 224a9cc..a54b393 100644
--- a/coregrind/pub_core_transtab_asm.h
+++ b/coregrind/pub_core_transtab_asm.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_ume.h b/coregrind/pub_core_ume.h
index 937778f..d9e459c 100644
--- a/coregrind/pub_core_ume.h
+++ b/coregrind/pub_core_ume.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -64,6 +64,12 @@
       HChar* executable_path; // OUT: path passed to execve()
 #endif
 
+#if defined(VGO_solaris)
+      Addr  init_thrptr;       // OUT: architecture-specific user per-thread location
+      Bool  real_phdr_present; // OUT: PT_PHDR found, include phdr in auxv
+      Bool  ldsoexec;          // OUT: the program is the runtime linker itself
+#endif
+
       Addr entry;        // OUT: entrypoint in main executable
       Addr init_ip;      // OUT: address of first instruction to execute
       Addr brkbase;      // OUT: base address of brk segment
diff --git a/coregrind/pub_core_vki.h b/coregrind/pub_core_vki.h
index 0b10ea4..8e88600 100644
--- a/coregrind/pub_core_vki.h
+++ b/coregrind/pub_core_vki.h
@@ -8,11 +8,11 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_vkiscnums.h b/coregrind/pub_core_vkiscnums.h
index 4ceb625..dcdfc89 100644
--- a/coregrind/pub_core_vkiscnums.h
+++ b/coregrind/pub_core_vkiscnums.h
@@ -7,11 +7,11 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_vkiscnums_asm.h b/coregrind/pub_core_vkiscnums_asm.h
index 284c050..b472edb 100644
--- a/coregrind/pub_core_vkiscnums_asm.h
+++ b/coregrind/pub_core_vkiscnums_asm.h
@@ -7,11 +7,11 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/pub_core_wordfm.h b/coregrind/pub_core_wordfm.h
index c720216..11dc830 100644
--- a/coregrind/pub_core_wordfm.h
+++ b/coregrind/pub_core_wordfm.h
@@ -9,13 +9,13 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2007-2013 Julian Seward
+   Copyright (C) 2007-2015 Julian Seward
       jseward@acm.org
 
    This code is based on previous work by Nicholas Nethercote
    (coregrind/m_oset.c) which is
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
        njn@valgrind.org
 
    which in turn was derived partially from:
diff --git a/coregrind/pub_core_xarray.h b/coregrind/pub_core_xarray.h
index a7fab97..bbe5f94 100644
--- a/coregrind/pub_core_xarray.h
+++ b/coregrind/pub_core_xarray.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2007-2013 OpenWorks LLP
+   Copyright (C) 2007-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/coregrind/vg_preloaded.c b/coregrind/vg_preloaded.c
index dec2ac5..85cd432 100644
--- a/coregrind/vg_preloaded.c
+++ b/coregrind/vg_preloaded.c
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -189,8 +189,167 @@
     // but don't care if it's initialized
 }
 
-#else
+#elif defined(VGO_solaris)
 
+/* Declare the errno and environ symbols weakly in case the client is not
+   linked against libc. In such a case it also cannot run replacement
+   functions for set_error() and spawnveg() where these two variables are
+   needed so this is ok. */
+__attribute__((weak)) extern int errno;
+__attribute__((weak)) extern char **environ;
+
+#include <assert.h>
+#include <errno.h>
+#include <spawn.h>
+#include <sys/syscall.h>
+#include <sys/signal.h>
+#include <unistd.h>
+
+/* Replace function block_all_signals() from libc. When the client program is
+   not running under valgrind, the function blocks all signals by setting
+   sc_sigblock flag in the schedctl control block. When run under Valgrind
+   this would bypass Valgrind's syscall and signal machinery.
+   Valgrind's signal machinery needs to retain control over which signals are
+   blocked and which not (see m_signals.c and m_scheduler/scheduler.c for more
+   information - typically synchronous signals should not be blocked).
+   Therefore this function replacement emulates lwp_sigmask syscall.
+*/
+void VG_REPLACE_FUNCTION_ZU(VG_Z_LIBC_SONAME, block_all_signals)(/*ulwp_t*/ void *self);
+void VG_REPLACE_FUNCTION_ZU(VG_Z_LIBC_SONAME, block_all_signals)(/*ulwp_t*/ void *self)
+{
+   syscall(SYS_lwp_sigmask, SIG_SETMASK, ~0U, ~0U, ~0U, ~0U);
+}
+
+/* Replace functions get_error() and set_error() in libc. These functions are
+   internal to the library and are used to work with an error value returned
+   by posix_spawn() (when it is implemented using vfork()). A child calls
+   set_error() to set an error code and the parent then calls get_error() to
+   read it. Accessor functions are used so these trivial store+load operations
+   are not changed by the compiler in any way.
+
+   Since Valgrind translates vfork() to a normal fork(), calling set_error()
+   by the child would have no effect on the error value in the parent so
+   something must be done to fix this problem.
+
+   A pipe is created between a child and its parent in the forksys pre-wrapper
+   when a vfork() is encountered. The child's end of the pipe is closed when
+   the child exits or execs (because close-on-exec is set on the file
+   descriptor). Valgrind (the parent) waits on the child's end of the pipe to
+   be closed which preserves the vfork() behaviour that the parent process is
+   suspended while the child is using its resources.
+
+   The pipe is then used to send an eventual error code set by the child in
+   posix_spawn() to the parent. If there is any error Valgrind returns it as
+   an error from the vfork() syscall. This means the syscall can return errors
+   that it would normally never return but this is not a problem in practice
+   because any error is directly propagated as a return code from
+   posix_spawn().
+
+   Address of vg_vfork_fildes is found by Valgrind when debug information for
+   vgpreload_core.so is being processed. A value of this variable is set in
+   the forksys pre-wrapper before a fork() call is made and set back to -1
+   before returning from the wrapper by the parent.
+
+   Newer Solaris versions introduce the spawn syscall and posix_spawn() is
+   implemented using it. The redirect is not needed for these versions.
+*/
+int vg_vfork_fildes = -1;
+
+int VG_REPLACE_FUNCTION_ZU(VG_Z_LIBC_SONAME, get_error)(int *errp);
+int VG_REPLACE_FUNCTION_ZU(VG_Z_LIBC_SONAME, get_error)(int *errp)
+{
+   /* Always return 0 when the parent tries to call get_error(). Any error
+      from the child is returned directly as an error from the vfork child.
+      Value pointed by errp is initialized only by the child so not
+      redirecting this function would mean that the parent gets an
+      uninitialized/garbage value when it calls this function. */
+   return 0;
+}
+
+int VG_REPLACE_FUNCTION_ZU(VG_Z_LIBC_SONAME, set_error)(int *errp, int err);
+int VG_REPLACE_FUNCTION_ZU(VG_Z_LIBC_SONAME, set_error)(int *errp, int err)
+{
+   *errp = err;
+
+   /* Libc should always call set_error() only after doing a vfork() syscall
+      in posix_spawn(). The forksys pre-wrapper saves a descriptor of the
+      child's end of the pipe in vg_vfork_fildes so it is an error if it is
+      not a valid file descriptor at this point. */
+   assert(vg_vfork_fildes >= 0);
+   /* Current protocol between this function and the forksys pre-wrapper
+      allows to send only errors in range [0, 255] (one byte values). */
+   assert(err >= 0 && err <= 0xff);
+
+   if (err != 0) {
+      unsigned char w = (unsigned char)(err & 0xff);
+      ssize_t res;
+      do {
+         res = write(vg_vfork_fildes, &w, 1);
+         assert(res == 1 || (errno == EINTR || errno == ERESTART));
+      } while (res != 1);
+   }
+
+   return err;
+}
+
+/* Replace spawnveg() in libast.so.1. This function is used by ksh to spawn
+   new processes. The library has a build time option to select between
+   several variants of this function based on behaviour of vfork() and
+   posix_spawn() on the system for which the library is being compiled.
+   Unfortunately, Solaris and illumos use the real vfork() variant which does
+   not work correctly with the vfork() -> fork() translation done by Valgrind
+   (see the forksys pre-wrapper for details). Therefore the function is
+   replaced here with an implementation that uses posix_spawn(). This
+   replacement can be removed when a configuration of libast in Solaris and
+   illumos is changed to use the posix_spawn() implementation.
+*/
+pid_t VG_REPLACE_FUNCTION_ZU(libastZdsoZd1, spawnveg)(const char *command,
+                                                      char **argv,
+                                                      char **envv,
+                                                      pid_t pgid);
+pid_t VG_REPLACE_FUNCTION_ZU(libastZdsoZd1, spawnveg)(const char *command,
+                                                      char **argv,
+                                                      char **envp,
+                                                      pid_t pgid)
+{
+   int err = 0;
+   pid_t pid;
+   posix_spawnattr_t attr;
+   int attr_init_done = 0;
+
+   err = posix_spawnattr_init(&attr);
+   if (err != 0)
+      goto out;
+   attr_init_done = 1;
+
+   err = posix_spawnattr_init(&attr);
+   if (err != 0)
+      goto out;
+
+   if (pgid != 0) {
+      if (pgid <= 1)
+         pgid = 0;
+      err = posix_spawnattr_setpgroup(&attr, pgid);
+      if (err != 0)
+         goto out;
+      err = posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETPGROUP);
+      if (err != 0)
+         goto out;
+   }
+
+   err = posix_spawn(&pid, command, NULL, &attr, argv, envp ? envp : environ);
+
+out:
+   if (attr_init_done)
+      posix_spawnattr_destroy(&attr);
+   if (err != 0) {
+      errno = err;
+      return -1;
+   }
+   return pid;
+}
+
+#else
 #  error Unknown OS
 #endif
 
diff --git a/coregrind/vgdb-invoker-none.c b/coregrind/vgdb-invoker-none.c
index 9b6b90c..4b1fe2d 100644
--- a/coregrind/vgdb-invoker-none.c
+++ b/coregrind/vgdb-invoker-none.c
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Philippe Waroquiers
+   Copyright (C) 2011-2015 Philippe Waroquiers
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/coregrind/vgdb-invoker-ptrace.c b/coregrind/vgdb-invoker-ptrace.c
index 8e7e42e..d65f59a 100644
--- a/coregrind/vgdb-invoker-ptrace.c
+++ b/coregrind/vgdb-invoker-ptrace.c
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Philippe Waroquiers
+   Copyright (C) 2011-2015 Philippe Waroquiers
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -329,7 +329,7 @@
 }
 
 /* Stops the given pid, wait for the process to be stopped.
-   Returns True if succesful, False otherwise.
+   Returns True if successful, False otherwise.
    msg is used in tracing and error reporting. */
 static
 Bool stop (pid_t pid, const char *msg)
@@ -348,7 +348,7 @@
 }
 
 /* Attaches to given pid, wait for the process to be stopped.
-   Returns True if succesful, False otherwise.
+   Returns True if successful, False otherwise.
    msg is used in tracing and error reporting. */
 static
 Bool attach (pid_t pid, const char *msg)
@@ -572,7 +572,7 @@
       res = ptrace (PTRACE_GETREGSET, pid, NT_PRSTATUS, &iovec);
       if (res == 0) {
          if (has_working_ptrace_getregset == -1) {
-            // First call to PTRACE_GETREGSET succesful =>
+            // First call to PTRACE_GETREGSET successful =>
             has_working_ptrace_getregset = 1;
             DEBUG(1, "detected a working PTRACE_GETREGSET\n");
          }
@@ -607,7 +607,7 @@
       res = ptrace (PTRACE_GETREGS, pid, NULL, regs);
       if (res == 0) {
          if (has_working_ptrace_getregs == -1) {
-            // First call to PTRACE_GETREGS succesful =>
+            // First call to PTRACE_GETREGS successful =>
             has_working_ptrace_getregs = 1;
             DEBUG(1, "detected a working PTRACE_GETREGS\n");
          }
diff --git a/coregrind/vgdb-invoker-solaris.c b/coregrind/vgdb-invoker-solaris.c
new file mode 100644
index 0000000..019441b
--- /dev/null
+++ b/coregrind/vgdb-invoker-solaris.c
@@ -0,0 +1,530 @@
+/*--------------------------------------------------------------------*/
+/*--- Implementation of vgdb invoker subsystem on Solaris             */
+/*                      via /proc filesystem and control messages. ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2014-2015 Ivo Raisr <ivosh@ivosh.net>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* This module implements vgdb-invoker subsystem as per vgdb.h
+   on Solaris. It differs significantly from the other ptrace-based
+   implementation found in vgdb-invoker-ptrace.c. However the goal
+   is the same - to work on the following scenario:
+
+   - A valgrind process (referred to also as an inferior process)
+     is remotely debugged with gdb.
+   - All threads of the inferior process are stuck in blocking
+     syscalls.
+   - Therefore no thread can process packets received from gdb.
+
+   When module vgdb.c detects this situation then it calls
+   function invoker_invoke_gdbserver() within the context of
+   invoke_gdbserver_in_valgrind_thread thread. The steps of
+   interaction between vgdb and m_gdbserver module are as follows:
+
+   1. Function invoker_invoke_gdbserver() attaches to the inferior
+      process and stops all threads.
+   2. It gets registers of the first thread and modifies them
+      and the stack so that a call to "invoke_gdbserver" function
+      is arranged along with a function parameter.
+   3. Then it creates an agent thread within the inferior process
+      with these modified registers and waits until the agent thread
+      exits.
+   4. Meanwhile in the inferior process function
+      VG_(invoke_gdbserver)() is invoked within the context of the
+      agent thread; all other threads are still stopped.
+   5. The agent thread processes packets from gdb relayed by vgdb.
+   6. Eventually processing is finished and the agent thread exits
+      in function give_control_back_to_vgdb().
+   7. vgdb then detaches from the inferior process and thus resumes
+      all the stopped threads.
+ */
+
+#include "vgdb.h"
+
+#include <assert.h>
+#include <errno.h>
+#include <string.h>
+
+typedef Addr CORE_ADDR;
+
+typedef struct {
+   long cmd;
+   union {
+       long flags;
+       prgregset_t regs;
+   } arg;
+} ctl_t;
+
+/* Process control file /proc/<pid>/ctl.
+   Once this file is closed, PR_RLC flag takes effect and
+   inferior process resumes automatically. */
+static int ctl_fd = -1;
+
+/* Copy LEN bytes of data from vgdb memory at MYADDR
+   to valgrind memory at MEMADDR.
+   On failure (cannot write the valgrind memory)
+   returns the value of errno. */
+static int write_memory(pid_t pid, CORE_ADDR memaddr,
+                        const void *myaddr, size_t len)
+{
+   char procname[PATH_MAX];
+   snprintf(procname, sizeof(procname), "/proc/%d/as", pid);
+
+   /* Open the process address-space file. */
+   int as_fd = open(procname, O_WRONLY, 0);
+   if (as_fd < 0) {
+      int error = errno;
+      ERROR(error, "Failed to open %s.\n", procname);
+      return error;
+   }
+
+   if (debuglevel >= 1) {
+      DEBUG(1, "Writing bytes '");
+      size_t i;
+      for (i = 0; i < len; i++)
+         PDEBUG(1, "%02x", ((const unsigned char *) myaddr)[i]);
+      PDEBUG(1, "' to address %#lx.\n", memaddr);
+   }
+
+   ssize_t written = pwrite(as_fd, myaddr, len, memaddr);
+   if ((written < 0) || (written != len)) {
+      int error = errno;
+      ERROR(error, "Failed to write to file %s, memory block of %zu"
+            " bytes at %#lx to %#lx.\n",
+            procname, len, (Addr) myaddr, memaddr);
+      close(as_fd);
+      return error;
+   }
+
+   DEBUG(1, "Written ok.\n");
+   close(as_fd);
+   return 0;
+}
+
+/* Attaches to a process identified by pid and stops all threads. */
+static Bool attach(pid_t pid)
+{
+   char procname[PATH_MAX];
+   snprintf(procname, sizeof(procname), "/proc/%d/ctl", pid);
+
+   DEBUG(1, "Attaching to pid %d.\n", pid);
+
+   /* Open the process control file. */
+   ctl_fd = open(procname, O_WRONLY, 0);
+   if (ctl_fd < 0) {
+      ERROR(errno, "Failed to open %s.\n", procname);
+      return False;
+   }
+
+   DEBUG(1, "Setting run-on-last-close-flag (PR_RLC) to pid %d.\n", pid);
+
+   /* Set run-on-last-close flag. */
+   ctl_t ctl;
+   ctl.cmd = PCSET;
+   ctl.arg.flags = PR_RLC;
+   size_t bytes = sizeof(ctl.cmd) + sizeof(ctl.arg.flags);
+   ssize_t written = write(ctl_fd, (void *) &ctl, bytes);
+   if ((written < 0) || (written != bytes)) {
+      ERROR(errno, "Failed to write to ctl_fd: PCSET + PR_RLC.\n");
+      return False;
+   }
+
+   DEBUG(1, "Stopping process %d.\n", pid);
+
+   /* Stop the whole process - all threads. */
+   ctl.cmd = PCSTOP;
+   bytes = sizeof(ctl.cmd);
+   written = write(ctl_fd, (void *) &ctl, bytes);
+   if ((written < 0) || (written != bytes)) {
+      ERROR(errno, "Failed to write to ctl_fd: PCSTOP.\n");
+      return False;
+   }
+
+   DEBUG(1, "Process %d stopped.\n", pid);
+
+   /* Now confirm it is actually the case. */
+   snprintf(procname, sizeof(procname), "/proc/%d/status", pid);
+   int status_fd = open(procname, O_RDONLY, 0);
+   if (status_fd < 0) {
+      ERROR(errno, "Failed to open %s.\n", procname);
+      return False;
+   }
+
+   pstatus_t pstatus;
+   bytes = read(status_fd, &pstatus, sizeof(pstatus));
+   if ((bytes < 0) || (bytes != sizeof(pstatus))) {
+      ERROR(errno, "Failed to read from %s.\n", procname);
+      close(status_fd);
+      return False;
+   }
+
+   if (pstatus.pr_flags & PR_RLC) {
+      DEBUG(2, "Process %d has run-on-last-close flag set. Good.\n", pid);
+   } else {
+      ERROR(0, "Process %d does not have run-on-last-close flag set!\n", pid);
+      close(status_fd);
+      return False;
+   }
+
+   if (pstatus.pr_lwp.pr_flags & PR_STOPPED) {
+      DEBUG(3, "Process %d seems to be stopped. Good.\n", pid);
+   } else {
+      ERROR(0, "Process %d is not stopped!\n", pid);
+      close(status_fd);
+      return False;
+   }
+
+   close(status_fd);
+   return True;
+}
+
+static void detach(pid_t pid)
+{
+   if (ctl_fd != -1) {
+      close(ctl_fd);
+      ctl_fd = -1;
+   }
+
+   DEBUG(1, "Detached from pid %d.\n", pid);
+}
+
+/* Gets the registers of the first thread. */
+static Bool get_regs(pid_t pid, prgregset_t *regs)
+{
+   char procname[PATH_MAX];
+   snprintf(procname, sizeof(procname), "/proc/%d/lwp/1/lwpstatus", pid);
+
+   DEBUG(1, "Getting registers from the first thread of process %d.\n", pid);
+
+   /* Open the first thread's status file. */
+   int status_fd = open(procname, O_RDONLY, 0);
+   if (status_fd < 0) {
+      ERROR(errno, "Failed to open file %s.\n", procname);
+      return False;
+   }
+
+   lwpstatus_t status;
+   ssize_t bytes = read(status_fd, &status, sizeof(status));
+   if ((bytes < 0) || (bytes != sizeof(status))) {
+      ERROR(errno, "Failed to read from %s.\n", procname);
+      close(status_fd);
+      return False;
+   }
+
+   DEBUG(3, "Registers of thread %d from process %d: ", status.pr_lwpid, pid);
+   unsigned int i;
+   for (i = 0; i < _NGREG; i++) {
+      PDEBUG(3, "%u: %#lx, ", i, (unsigned long) status.pr_reg[i]);
+   }
+   PDEBUG(3, "\n");
+
+   memcpy(regs, &status.pr_reg, sizeof(prgregset_t));
+   close(status_fd);
+   return True;
+}
+
+/* Modifies the register set so that a new stack frame is created
+   for "invoke_gdbserver" function with an extra argument.
+   The argument is written to the stack of the first thread.
+ */
+static Bool setup_stack_frame(pid_t pid, prgregset_t *regs)
+{
+   DEBUG(1, "Setting up new stack frame of process %d.\n", pid);
+
+   /* A specific int value is passed to invoke_gdbserver(), to check
+      everything goes according to the plan. */
+   const int check = 0x8BADF00D; // ate bad food.
+
+   /* A bad return address will be pushed on the stack.
+      Function invoke_gdbserver() cannot return. If it ever returns,
+      a NULL address pushed on the stack should ensure this is
+      detected. */
+   const Addr bad_return = 0;
+
+#if defined(VGA_x86)
+   Addr sp = (*regs)[UESP];
+#elif defined(VGA_amd64)
+   Addr sp = (*regs)[REG_RSP];
+#else
+   I_die_here : (sp) architecture missing in vgdb-invoker-solaris.c
+#endif
+
+   if (shared32 != NULL) {
+      /* vgdb speaking with a 32bit executable. */
+#if   defined(VGA_x86) || defined(VGA_amd64)
+      const size_t regsize = 4;
+
+      /* Push check argument on the stack - according to C/ia32 ABI. */
+      sp = sp - regsize;
+      DEBUG(1, "Pushing check argument to process %d memory.\n", pid);
+      assert(regsize == sizeof(check));
+      int error = write_memory(pid, sp, &check, regsize);
+      if (error != 0) {
+         ERROR(error, "Failed to push check argument to process %d memory.\n",
+                      pid);
+         detach(pid);
+         return False;
+      }
+
+      sp = sp - regsize;
+      DEBUG(1, "Pushing bad_return return address to process %d memory.\n",
+               pid);
+      /* Note that even for a 64 bits vgdb, only 4 bytes
+         of NULL bad_return are written. */
+      error = write_memory(pid, sp, &bad_return, regsize);
+      if (error != 0) {
+         ERROR(error, "Failed to push bad_return return address to process %d "
+                      "memory.\n", pid);
+         detach(pid);
+         return False;
+      }
+
+#if   defined(VGA_x86)
+      /* Set EBP, ESP, EIP to invoke gdbserver.
+         vgdb is 32bits, speaking with a 32bits process. */
+      (*regs)[EBP] = sp; // bp set to sp
+      (*regs)[UESP] = sp;
+      (*regs)[EIP] = shared32->invoke_gdbserver;
+#elif defined(VGA_amd64)
+      /* Set RBP, RSP, RIP to invoke gdbserver.
+         vgdb is 64bits, speaking with a 32bits process. */
+      (*regs)[REG_RBP] = sp; // bp set to sp
+      (*regs)[REG_RSP] = sp;
+      (*regs)[REG_RIP] = shared32->invoke_gdbserver;
+#else
+      I_die_here : not x86 or amd64 in x86/amd64 section/
+#endif
+
+#else
+      I_die_here : architecture missing in vgdb-invoker-solaris.c
+#endif
+
+   } else if (shared64 != NULL) {
+#if defined(VGA_x86)
+      assert(0); /* 64bits process with a 32bits vgdb - no way */
+#elif defined(VGA_amd64)
+      /* 64bits vgdb speaking with a 64 bit process. */
+      const int regsize = 8;
+
+      /* Give check argument in rdi - according to C/amd64 ABI. */
+      (*regs)[REG_RDI] = check;
+
+      /* Push return address on stack: return to breakaddr. */
+      sp = sp - regsize;
+      DEBUG(1, "Pushing bad_return return address to process %d memory.\n",
+               pid);
+      int error = write_memory(pid, sp, &bad_return,
+                               sizeof(bad_return));
+      if (error != 0) {
+         ERROR(error, "Failed to push bad_return return address to process %d "
+                      "memory.\n", pid);
+         detach(pid);
+         return False;
+      }
+
+      /* set RBP, RSP, RIP to invoke gdbserver */
+      (*regs)[REG_RBP] = sp; // bp set to sp
+      (*regs)[REG_RSP] = sp;
+      (*regs)[REG_RIP] = shared64->invoke_gdbserver;
+#else
+      I_die_here: architecture missing in vgdb-invoker-solaris.c
+#endif
+   } else {
+      assert(0);
+   }
+
+   DEBUG(1, "New stack frame set up for process %d.\n", pid);
+   return True;
+}
+
+/* Creates and starts an agent thread within the inferior process.
+   The agent thread is created stopped and with its held signal set
+   (the signal mask) having all signals except SIGKILL and SIGSTOP
+   blocked. All these signals need to remain blocked while the agent
+   thread is running because valgrind syscall/signal machinery expects
+   that (remember: all valgrind threads are blocked in VgTs_WaitSys
+   - that is the reason why we are invoking the agent, after all).
+   It is necessary to resume the agent thread afterwards.
+ */
+static Bool invoke_agent(pid_t pid, prgregset_t *regs, id_t *agent_lwpid)
+{
+   assert(ctl_fd != -1);
+
+   DEBUG(1, "Creating an agent thread within process %d.\n", pid);
+
+   /* Create the agent thread. */
+   ctl_t ctl;
+   ctl.cmd = PCAGENT;
+   memcpy(&ctl.arg.regs, regs, sizeof(prgregset_t));
+   size_t bytes = sizeof(ctl.cmd) + sizeof(ctl.arg.regs);
+   ssize_t written = write(ctl_fd, (void *) &ctl, bytes);
+   if ((written < 0) || (written != bytes)) {
+      ERROR(errno, "Failed to write to ctl_fd: PCAGENT.\n");
+      return False;
+   }
+
+   DEBUG(1, "Obtaining agent thread lwpid for process %d.\n", pid);
+
+   char procname[PATH_MAX];
+   snprintf(procname, sizeof(procname),
+            "/proc/%d/lwp/agent/lwpstatus", pid);
+
+   int status_fd = open(procname, O_RDONLY, 0);
+   if (status_fd < 0) {
+      /* Operation failed but there is no way to get rid of the agent
+         thread from outside. We are doomed... */
+      ERROR(errno, "Failed to open file %s.\n", procname);
+      return False;
+   }
+
+   lwpstatus_t status;
+   bytes = read(status_fd, &status, sizeof(status));
+   if ((bytes < 0) || (bytes != sizeof(status))) {
+      ERROR(errno, "Failed to read from %s.\n", procname);
+      close(status_fd);
+      return False;
+   }
+
+   close(status_fd);
+   *agent_lwpid = status.pr_lwpid;
+
+   snprintf(procname, sizeof(procname),
+            "/proc/%d/lwp/agent/lwpctl", pid);
+
+   int agent_ctl_fd = open(procname, O_WRONLY, 0);
+   if (agent_ctl_fd < 0) {
+      /* Resuming failed but there is no way to get rid of the agent
+         thread from outside. We are doomed... */
+      ERROR(errno, "Failed to open file %s.\n", procname);
+      return False;
+   }
+
+   DEBUG(1, "Resuming the agent thread for process %d.\n", pid);
+
+   /* Resume the agent thread. */
+   ctl.cmd = PCRUN;
+   ctl.arg.flags = 0;
+   bytes = sizeof(ctl.cmd) + sizeof(ctl.arg.flags);
+   written = write(agent_ctl_fd, (void *) &ctl, bytes);
+   if ((written < 0) || (written != bytes)) {
+      /* Resuming failed but there is no way to get rid of the agent
+         thread from outside. We are doomed... */
+      ERROR(errno, "Failed to write to agent_ctl_fd: PCRUN 0.\n");
+      close(agent_ctl_fd);
+      return False;
+   }
+
+   DEBUG(1, "Agent thread lwpid %d now running within process %d.\n",
+         *agent_lwpid, pid);
+   close(agent_ctl_fd);
+   return True;
+}
+
+/* Waits until the agent thread running inside the inferior
+   process exits. */
+static Bool wait_for_agent_exit(pid_t pid, id_t agent_lwpid)
+{
+   char procname[PATH_MAX];
+   snprintf(procname, sizeof(procname), "/proc/%d/lwp/agent/lwpctl", pid);
+
+   int agent_ctl_fd = open(procname, O_WRONLY, 0);
+   if (agent_ctl_fd < 0) {
+      if (errno == ENOENT) {
+         DEBUG(1, "Agent control file %s no longer exists. This means "
+               "agent thread %d exited meanwhile.\n",
+               procname, agent_lwpid);
+         return True;
+      }
+      ERROR(errno, "Failed to open agent control file %s.\n", procname);
+      return False;
+   }
+
+   DEBUG(1, "Waiting for agent thread %d to exit.\n", agent_lwpid);
+
+   /* Wait until the agent thread stops. This covers also the case
+      when the thread exited. */
+   ctl_t ctl;
+   ctl.cmd = PCWSTOP;
+   size_t bytes = sizeof(ctl.cmd);
+   ssize_t written = write(agent_ctl_fd, (void *) &ctl, bytes);
+   if ((written < 0) || (written != bytes)) {
+      if (errno == ENOENT) {
+         DEBUG(1, "Agent thread lwpid %d has now exited in process %d.\n",
+                  agent_lwpid, pid);
+      } else {
+         ERROR(errno, "Failed to write to agent_ctl_fd: PCWSTOP.\n");
+         close(agent_ctl_fd);
+         return False;
+      }
+   }
+
+   close(agent_ctl_fd);
+   return True;
+}
+
+Bool invoker_invoke_gdbserver(pid_t pid)
+{
+   if (attach(pid) != True) {
+      return False;
+   }
+
+   prgregset_t regs;
+   if (get_regs(pid, &regs) != True) {
+      detach(pid);
+      return False;
+   }
+
+   if (setup_stack_frame(pid, &regs) != True) {
+      detach(pid);
+      return False;
+   }
+
+   id_t agent_lwpid;
+   if (invoke_agent(pid, &regs, &agent_lwpid) != True) {
+      detach(pid);
+      return False;
+   }
+
+   if (wait_for_agent_exit(pid, agent_lwpid) != True) {
+      detach(pid);
+      return False;
+   }
+
+   detach(pid);
+   return True;
+}
+
+void invoker_cleanup_restore_and_detach(void *v_pid)
+{
+   detach(*(int *) v_pid);
+}
+
+void invoker_restrictions_msg(void)
+{
+}
+
+void invoker_valgrind_dying(void)
+{
+}
diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c
index bcfb6c3..d35d5b2 100644
--- a/coregrind/vgdb.c
+++ b/coregrind/vgdb.c
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Philippe Waroquiers
+   Copyright (C) 2011-2015 Philippe Waroquiers
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -290,7 +290,7 @@
                last invoke. */
             if (invoked_written != written_by_vgdb_before_sleep) {
                if (invoker_invoke_gdbserver(pid)) {
-                  /* If invoke succesful, no need to invoke again
+                  /* If invoke successful, no need to invoke again
                      for the same value of written_by_vgdb_before_sleep. */
                   invoked_written = written_by_vgdb_before_sleep;
                }
diff --git a/coregrind/vgdb.h b/coregrind/vgdb.h
index 4f901b9..6d4c081 100644
--- a/coregrind/vgdb.h
+++ b/coregrind/vgdb.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Philippe Waroquiers
+   Copyright (C) 2011-2015 Philippe Waroquiers
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/darwin11.supp b/darwin11.supp
index 3dc3cb4..f2fd6f5 100644
--- a/darwin11.supp
+++ b/darwin11.supp
@@ -65,6 +65,16 @@
    fun:pthread_mutex_lock
 }
 
+{
+   OSX107:10-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:?alloc
+   ...
+   fun:libSystem_initializer
+   ...
+}
+
 ################
 # More OSX 10.7.2 supps from startup of Firefox, for reports
 # that look like they are in the OSX system libraries
@@ -207,6 +217,13 @@
    fun:__setenv
 }
 
+# See https://bugs.kde.org/show_bug.cgi?id=196528
+{
+   macos-__pthread_rwlock_init-see-our-bug-196528
+   Memcheck:Cond
+   fun:pthread_rwlock_init
+}
+
 #{
 #   libSystem-keymgr-leak-at-exit
 #   Memcheck:Leak
diff --git a/darwin15.supp b/darwin15.supp
new file mode 100644
index 0000000..e745cf0
--- /dev/null
+++ b/darwin15.supp
@@ -0,0 +1,761 @@
+
+# Suppressions for Darwin 15.x / Mac OS X 10.11 El Capitan
+
+############################################
+## Leaks.  For other stuff see below.
+
+{
+   OSX1011:1-Leak
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:malloc_zone_?alloc
+   ...
+   fun:_read_images
+}
+
+{
+   OSX1011:2-Leak
+   Memcheck:Leak
+   match-leak-kinds: definite
+   fun:malloc_zone_?alloc
+   ...
+   fun:_read_images
+}
+
+{
+   OSX1011:3-Leak
+   Memcheck:Leak
+   match-leak-kinds: definite
+   fun:malloc_zone_?alloc
+   fun:recursive_mutex_init
+   ...
+   fun:_os_object_init
+   fun:libdispatch_init
+   fun:libSystem_initializer
+   ...
+}
+
+{
+   OSX1011:4-Leak
+   Memcheck:Leak
+   fun:malloc_zone_?alloc
+   ...
+   fun:dyld_register_image_state_change_handler
+   ...
+}
+
+{
+   OSX1011:5-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:?alloc
+   ...
+   fun:dyld_register_image_state_change_handler
+   ...
+}
+
+{
+   OSX1011:6-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc_zone_?alloc
+   ...
+   fun:map_images_nolock
+   fun:map_2_images
+   ...
+}
+
+{
+   OSX1011:7-Leak
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:malloc_zone_?alloc
+   ...
+   fun:map_images_nolock
+   fun:map_2_images
+   ...
+}
+
+{
+   OSX1011:8-Leak
+   Memcheck:Leak
+   match-leak-kinds: definite
+   fun:?alloc
+   ...
+   fun:libSystem_initializer
+   ...
+}
+
+{
+   OSX1011:9-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc_zone_?alloc
+   ...
+   fun:libSystem_initializer
+   ...
+}
+
+{
+   OSX1011:10-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:?alloc
+   ...
+   fun:libSystem_initializer
+   ...
+}
+
+#{
+#   OSX1011:11-Leak
+#   Memcheck:Leak
+#   match-leak-kinds: definite
+#   fun:malloc
+#   fun:currentlocale
+#}
+#
+#{
+#   OSX1011:12-Leak
+#   Memcheck:Leak
+#   match-leak-kinds: possible
+#   fun:malloc
+#   fun:tzsetwall_basic
+#   fun:_st_tzset_basic
+#}
+
+{
+   OSX1011:13-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc_zone_memalign
+   ...
+   fun:_ZN4dyld24initializeMainExecutableEv
+   ...
+}
+
+{
+   OSX1011:14-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:?alloc
+   ...
+   fun:libSystem_atfork_child
+   ...
+}
+
+{
+   OSX1011:15-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc
+   fun:__smakebuf
+   ...
+   fun:printf
+   ...
+}
+
+{
+   OSX1011:16-Leak
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:?alloc
+   ...
+   fun:_read_images
+}
+
+{
+   OSX1011:17-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:?alloc
+   ...
+   fun:_read_images
+}
+
+{
+   OSX1011:18-Leak
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc_zone_?alloc
+   ...
+   fun:_read_images
+}
+
+{
+   OSX1011:19-Leak
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:malloc_zone_?alloc
+   ...
+   fun:*NX*Map*
+   fun:*NX*Map*
+}
+
+{
+   OSX1011:20-Leak
+   Memcheck:Leak
+   match-leak-kinds: indirect
+   fun:?alloc
+   ...
+   fun:libSystem_initializer
+   ...
+}
+
+{
+   OSX1011:21-Leak
+   Memcheck:Leak
+   match-leak-kinds: definite
+   fun:malloc_zone_memalign
+   ...
+   fun:_ZN4dyld24initializeMainExecutableEv
+   ...
+}
+
+
+############################################
+## Non-leak errors
+
+##{
+##   OSX1011:CoreFoundation-1
+##   Memcheck:Cond
+##   obj:*CoreFoundation.framework*CoreFoundation*
+##   obj:*CoreFoundation.framework*CoreFoundation*
+##   obj:*CoreFoundation.framework*CoreFoundation*
+##}
+
+{
+   OSX1011:CoreFoundation-2
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*libdispatch.dylib*
+   obj:*libdispatch.dylib*
+}
+
+{
+   OSX1011:CoreFoundation-3
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*Foundation.framework*Foundation*
+}
+
+{
+   OSX1011:CoreFoundation-4
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*SystemConfiguration.framework*SystemConfiguration*
+}
+
+{
+   OSX1011:CoreFoundation-5
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*HIServices.framework*HIServices*
+}
+
+{
+   OSX1011:CoreFoundation-6
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*SystemConfiguration.framework*SystemConfiguration*
+   obj:*SystemConfiguration.framework*SystemConfiguration*
+}
+
+{
+   OSX1011:CoreFoundation-7
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*SystemConfiguration.framework*SystemConfiguration*
+   obj:*CoreFoundation.framework*CoreFoundation*
+}
+
+{
+   OSX1011:CoreFoundation-8
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*IOKit.framework*IOKit*
+}
+
+{
+   OSX1011:CoreFoundation-9
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*Foundation.framework*Foundation*
+   obj:*AppKit.framework*AppKit*
+}
+
+{
+   OSX1011:CoreFoundation-10
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*HIToolbox.framework*HIToolbox*
+   obj:*HIToolbox.framework*HIToolbox*
+}
+
+{
+   OSX1011:CoreFoundation-11
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*AE.framework*AE*
+   obj:*AE.framework*AE*
+}
+
+{
+   OSX1011:CoreFoundation-12
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*HIToolbox.framework*HIToolbox*
+}
+
+{
+   OSX1011:CoreFoundation-13
+   Memcheck:Cond
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*CoreFoundation.framework*CoreFoundation*
+   obj:*AE.framework*AE*
+}
+
+{
+   OSX1011:AppKit-1
+   Memcheck:Cond
+   obj:*AppKit.framework*AppKit*
+   obj:*AppKit.framework*AppKit*
+   obj:*AppKit.framework*AppKit*
+}
+
+{
+   OSX1011:AppKit-2
+   Memcheck:Cond
+   obj:*AppKit.framework*AppKit*
+   obj:*AppKit.framework*AppKit*
+   obj:*libdispatch.dylib*
+}
+
+#{
+#   OSX1011:AppKit-3
+#   Memcheck:Cond
+#   obj:*AppKit.framework*AppKit*
+#   obj:*libdispatch.dylib*
+#   obj:*libdispatch.dylib*
+#}
+
+##{
+##   OSX1011:AppKit-4
+##   Memcheck:Cond
+##   obj:*AppKit.framework*AppKit*
+##   obj:*AppKit.framework*AppKit*
+##   obj:*CoreFoundation.framework*CoreFoundation*
+##}
+
+{
+   OSX1011:AppKit-5
+   Memcheck:Cond
+   obj:*AppKit.framework*AppKit*
+   obj:*AppKit.framework*AppKit*
+   obj:*Foundation.framework*Foundation*
+}
+
+{
+   OSX1011:AppKit-6
+   Memcheck:Cond
+   obj:*AppKit.framework*AppKit*
+   obj:*Foundation.framework*Foundation*
+   obj:*AppKit.framework*AppKit*
+}
+
+{
+   OSX1011:AppKit-7
+   Memcheck:Cond
+   obj:*AppKit.framework*AppKit*
+   obj:*libdispatch.dylib*
+   obj:*libdispatch.dylib*
+}
+
+{
+   OSX1011:AppKit-8
+   Memcheck:Cond
+   obj:*AppKit.framework*AppKit*
+   obj:*Foundation.framework*Foundation*
+   obj:*Foundation.framework*Foundation*
+}
+
+{
+   OSX1011:ColorSync-1
+   Memcheck:Cond
+   obj:*ColorSync.framework*ColorSync*
+   obj:*ColorSync.framework*ColorSync*
+   obj:*ColorSync.framework*ColorSync*
+}
+
+#{
+#   OSX1011:ColorSync-2
+#   Memcheck:Value8
+#   obj:*ColorSync.framework*ColorSync*
+#   obj:*ColorSync.framework*ColorSync*
+#   obj:*ColorSync.framework*ColorSync*
+#}
+
+{
+   OSX1011:CoreGraphics-1
+   Memcheck:Cond
+   obj:*CoreGraphics.framework*CoreGraphics*
+   obj:*CoreGraphics.framework*CoreGraphics*
+}
+
+#{
+#   OSX1011:CoreGraphics-2
+#   Memcheck:Value8
+#   obj:*CoreGraphics.framework*CoreGraphics*
+#   obj:*CoreGraphics.framework*CoreGraphics*
+#   obj:*CoreGraphics.framework*CoreGraphics*
+#}
+
+{
+   OSX1011:CoreGraphics-3
+   Memcheck:Cond
+   obj:*CoreGraphics.framework*CoreGraphics*
+   obj:*CoreGraphics.framework*libRIP*
+   obj:*CoreGraphics.framework*libRIP*
+}
+
+#{
+#   OSX1011:CoreGraphics-4
+#   Memcheck:Cond
+#   obj:*CoreGraphics.framework*CoreGraphics*
+#   obj:*CoreGraphics.framework*CoreGraphics*
+#   obj:*CoreGraphics.framework*libRIP*
+#}
+
+{
+   OSX1011:CoreGraphics-5
+   Memcheck:Cond
+   obj:*CoreGraphics.framework*CoreGraphics*
+   obj:*libdispatch.dylib*
+   obj:*libdispatch.dylib*
+}
+
+#{
+#   OSX1011:CoreGraphics-6
+#   Memcheck:Cond
+#   obj:*CoreGraphics.framework*CoreGraphics*
+#   obj:*CoreGraphics.framework*CoreGraphics*
+#   obj:*HIToolbox.framework*HIToolbox*
+#}
+
+{
+   OSX1011:HIServices-1
+   Memcheck:Cond
+   obj:*HIServices.framework*HIServices*
+   obj:*HIToolbox.framework*HIToolbox*
+   obj:*HIToolbox.framework*HIToolbox*
+}
+
+{
+   OSX1011:LaunchServices-1
+   Memcheck:Cond
+   obj:*LaunchServices.framework*LaunchServices*
+   obj:*AppKit.framework*AppKit*
+   obj:*AppKit.framework*AppKit*
+}
+
+{
+   OSX1011:LaunchServices-2
+   Memcheck:Cond
+   obj:*LaunchServices.framework*LaunchServices*
+   obj:*libdispatch.dylib*
+   obj:*libdispatch.dylib*
+}
+
+{
+   OSX1011:QuartzCore-1
+   Memcheck:Cond
+   obj:*QuartzCore.framework*QuartzCore
+   obj:*QuartzCore.framework*QuartzCore
+   obj:*QuartzCore.framework*QuartzCore
+}
+
+#{
+#   OSX1011:vImage-1
+#   Memcheck:Cond
+#   obj:*vImage.framework*vImage*
+#   obj:*vImage.framework*vImage*
+#   obj:*CoreGraphics.framework*CoreGraphics*
+#}
+
+{
+   OSX1011:zlib-C
+   Memcheck:Cond
+   obj:/usr/lib/libz.*dylib
+   obj:/usr/lib/libz.*dylib
+}
+
+{
+   OSX1011:zlib-8
+   Memcheck:Value8
+   obj:/usr/lib/libz.*dylib
+   obj:/usr/lib/libz.*dylib
+}
+
+{
+   OSX1011:32bit:_libxpc_initializer
+   Memcheck:Cond
+   obj:/usr/lib/system/libsystem_c.dylib
+   obj:/usr/lib/system/libsystem_c.dylib
+   fun:_libxpc_initializer
+   obj:/usr/lib/libSystem.B.dylib
+   fun:*ImageLoaderMachO*doModInitFunctions*
+}
+
+{
+   OSX1011:dyld-1
+   Memcheck:Cond
+   fun:*ImageLoader*weakBind*
+   fun:*ImageLoader*link*
+   fun:*dyld*link*
+}
+
+{
+   OSX1011:dyld-2
+   Memcheck:Cond
+   fun:exit
+   obj:*libdyld*dylib*
+}
+
+{
+   OSX1011:libsystem_kernel-1
+   Memcheck:Cond
+   obj:*libsystem_kernel*dylib*
+   obj:*libsystem_kernel*dylib*
+   obj:*CoreFoundation.framework*CoreFoundation*
+}
+
+{
+   OSX1011:CoreServicesInternal-1
+   Memcheck:Cond
+   obj:*CoreServicesInternal.framework*CoreServicesInternal*
+   obj:*CoreServices.framework*LaunchServices*
+   obj:*CoreServices.framework*LaunchServices*
+}
+
+{
+   OSX1011:CoreServicesInternal-2
+   Memcheck:Cond
+   obj:*CoreServicesInternal.framework*CoreServicesInternal*
+   obj:*CoreServicesInternal.framework*CoreServicesInternal*
+   obj:*CoreServicesInternal.framework*CoreServicesInternal*
+}
+
+{
+   OSX1011:CoreServicesInternal-3
+   Memcheck:Cond
+   obj:*CoreServicesInternal.framework*CoreServicesInternal*
+   obj:*CoreServicesInternal.framework*CoreServicesInternal*
+   obj:*CoreFoundation.framework*CoreFoundation*
+}
+
+{
+   OSX1011:CoreServices-1
+   Memcheck:Cond
+   obj:*CoreServices.framework*LaunchServices*
+   obj:*CoreServices.framework*LaunchServices*
+   obj:*CoreServices.framework*LaunchServices*
+}
+
+##{
+##   OSX1011:libsystem_pthread-1
+##   Memcheck:Cond
+##   obj:*libsystem_pthread*dylib*
+##   obj:*ImageIO.framework*ImageIO*
+##   obj:*ImageIO.framework*ImageIO*
+##}
+
+{
+   OSX1011:ApplicationServices-1
+   Memcheck:Cond
+   obj:*ApplicationServices.framework*ATS*
+   obj:*libsystem_pthread*dylib*
+   obj:*libsystem_platform*dylib*
+}
+
+{
+   OSX1011:HIToolbox-1
+   Memcheck:Cond
+   obj:*HIToolbox.framework*HIToolbox*
+   obj:*HIToolbox.framework*HIToolbox*
+   obj:*HIToolbox.framework*HIToolbox*
+}
+
+{
+   OSX1011:RawCamera-1
+   Memcheck:Cond
+   obj:*RawCamera.bundle*RawCamera*
+   obj:*libdispatch.dylib*
+   obj:*libdispatch.dylib*
+}
+
+##{
+##   OSX1011:CoreImage-1
+##   Memcheck:Cond
+##   obj:*CoreImage.framework*CoreImage*
+##   obj:*CoreImage.framework*CoreImage*
+##   obj:*CoreImage.framework*CoreImage*
+##}
+
+##{
+##   OSX1011:strncpy-1
+##   Memcheck:Cond
+##   fun:strncpy
+##   obj:*CoreServicesInternal.framework*CoreServicesInternal
+##   obj:*CoreServicesInternal.framework*CoreServicesInternal
+##}
+
+{
+   OSX1011:pthread_rwlock_init
+   Memcheck:Cond
+   fun:pthread_rwlock_init
+   obj:*ImageIO.framework*ImageIO*
+   obj:*ImageIO.framework*ImageIO*
+}
+
+{
+   OSX1011:CFBasicHash
+   Memcheck:Value8
+   fun:*CFBasicHash*
+   fun:*CF*
+}
+
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-1-Addr8
+   Memcheck:Addr8
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+}
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-1-Addr8
+   Memcheck:Addr4
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+}
+
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-2-Addr8
+   Memcheck:Addr8
+   fun:*platform_memmove*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+}
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-2-Addr2
+   Memcheck:Addr2
+   fun:*platform_memmove*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+}
+
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-3-Addr8
+   Memcheck:Addr8
+   fun:*platform_memmove*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*GLEngine.bundle*GLEngine*
+}
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-3-Addr2
+   Memcheck:Addr2
+   fun:*platform_memmove*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*GLEngine.bundle*GLEngine*
+}
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-3-Addr1
+   Memcheck:Addr1
+   fun:*platform_memmove*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*GLEngine.bundle*GLEngine*
+}
+
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-4
+   Memcheck:Addr8
+   fun:*platform_bzero*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+}
+
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-6-Addr8
+   Memcheck:Addr8
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*GLEngine.bundle*GLEngine*
+}
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-6-Addr4
+   Memcheck:Addr4
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*GLEngine.bundle*GLEngine*
+}
+
+{
+   OSX1011:AppleIntelHD4000GraphicsGLDriver-7
+   Memcheck:Addr4
+   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
+   obj:*GLEngine.bundle*GLEngine*
+}
+
+{
+   OSX1011:OSAtomicAdd32
+   Memcheck:Addr4
+   fun:*OSAtomicAdd32*
+   obj:*IOAccelerator.framework*IOAccelerator*
+   obj:*GPUSupport.framework*GPUSupportMercury*
+}
+
+{
+   OSX1011:IOAccelerator-1
+   Memcheck:Addr4
+   obj:*IOAccelerator.framework*IOAccelerator*
+   obj:*GPUSupport.framework*GPUSupportMercury*
+}
+
+{
+   OSX1011:mach_msg_trap-1
+   Memcheck:Param
+   msg->desc.port.name
+   fun:mach_msg_trap
+   obj:*libsystem_kernel.dylib*
+   obj:*SystemConfiguration.framework*SystemConfiguration*
+}
+
+{
+   OSX1011:mach_msg_trap-2
+   Memcheck:Param
+   msg->desc.port.name
+   fun:mach_msg_trap
+   obj:*SystemConfiguration.framework*SystemConfiguration*
+   obj:*SystemConfiguration.framework*SystemConfiguration*
+}
+
+# See https://bugs.kde.org/show_bug.cgi?id=188572 about this;  it's
+# unavoidable due to BSD setenv() semantics.
+{
+   macos-__setenv-leak-see-our-bug-188572
+   Memcheck:Leak
+   match-leak-kinds: definite
+   fun:malloc
+   fun:_owned_ptr_alloc
+   fun:setenv
+}
+
+# See https://bugs.kde.org/show_bug.cgi?id=196528
+{
+macos-__pthread_rwlock_init-see-our-bug-196528
+Memcheck:Cond
+fun:pthread_rwlock_init
+}
diff --git a/docs/README b/docs/README
index 155fe5e..2f4c57e 100644
--- a/docs/README
+++ b/docs/README
@@ -81,6 +81,22 @@
 Below are random notes and recollections about how to build PDF / PS
 documents from the XML source at various times on various Linux distros.
 
+Notes [Sept 2015]
+-----------------
+Fedora 21 and 22: Had mucho trouble with building the print docs on
+F21/22 even with the [Mar 2015] package set (or something similarish)
+installed.  Eventually installed "passivetex" and that fixes the
+failures.
+
+Installing the packages below on Fedora _might_ get you a working setup.
+Also you need the epstopdf-base.sty hack detailed below.
+
+  texlive-xmltex texlive-xmltex-bin texlive-xmltex-doc texlive dblatex
+  texlive-xmltex docbook-style-xsl docbook-dtds docbook-style-xsl.noarch
+  docbook-simple.noarch docbook-simple.noarch docbook-slides.noarch
+  docbook-style-dsssl.noarch docbook-utils.noarch
+  docbook-utils-pdf.noarch docbook5-schemas.noarch
+  docbook5-style-xsl.noarch passivetex
 
 Notes [Mar 2015]
 ----------------
diff --git a/docs/internals/3_10_BUGSTATUS.txt b/docs/internals/3_10_BUGSTATUS.txt
index fe5f516..768a785 100644
--- a/docs/internals/3_10_BUGSTATUS.txt
+++ b/docs/internals/3_10_BUGSTATUS.txt
@@ -4,46 +4,33 @@
 
 === VEX/amd64 ==========================================================
 
-339218  AVX2 binaries compiled with the Intel compiler fail to
-        run under Valgrind 3.10.0
-        FIXME: should we enable this now?
-        == 338602
-
-338602  AVX2 bit in CPUID missing
-        need to do XSAVE, XRSTOR
-
 339596  vex amd64->IR: 0x8F 0xE8 0x78 0xCD 0xC1 0x4 0xC5 0xF9
-        XOP/FMA -- should take
-
-339820  vex amd64->IR: 0x66 0xF 0x3A 0x63 0xA 0x42 0x74 0x9
-        (pcmpistrix  $0x42, (%rdx), %xmm1)
-        Should fix.  Reported against 3.8.1 -- still valid?
+        XOP/FMA -- should take, but not before 3.11 release
 
 340469  vex amd64->IR: unhandled instruction bytes: 0x66 0xA7
         Not clear what's going on here
-
-342571  Valgrind chokes on AVX compare intrinsic with _CMP_GE_QS
-        probably easy to fix
+        Probably legit, but low impact (few users)
 
 342988  INT 80 not recognised on amd64
+        Probably legit, but low impact (few users)
+
+349304  vex amd64->IR: 0xF 0x33 0x89 0x45 0xFC 0x89 0x55 0xF8 (rdpmc)
+        Is going to be difficult to do
 
 === VEX/arm ============================================================
 
-335618  mov.w rN, pc/sp (ARM32)
-        HAS PATCH
-
-342680  arm: unhanded instruction 0xF590F000: pldw [r0]
-
 342780  arm + gcc 4.9 produce false positive: Use of uninitialised value of
         size 4 and segfault on stack extention
         Has patch
-
-342783  arm: unhandled instruction 0xEEFE1ACA = "vcvt.s32.f32    s3, s3, #12"
+        DEFER till 3.11.1 unless I can repro in the wild
 
 344802  disInstr(arm): unhandled instruction: 0xEC510F1E
         maybe easy fix?
         but doesn't run natively either
 
+348536  ARM32: Unhandled instructions 0xEE190F1D & 0xEC510F1E 
+        == 331178
+
 === VEX/arm64 ==========================================================
 
 === VEX/x86 ============================================================
@@ -57,12 +44,28 @@
 342192  Unhandled instruction on OS X 10.9 in libsystem_m.dylib
         possibly a wontfix
 
+344139  vex x86->IR: 0x36 0x8A 0x18 0x22 (and many other examples)
+        stack segment overrides
+
+344547  vex x86->IR: 0xC5 0xF8 0x77 0xE9
+        avx on x86
+
+345261  Unsupported instruction 0xC5 0xFB 0x10 0x44 (vmovsd
+        0x8(%esp),%xmm0)
+        avx on x86
+
+348749  guest_generic_x87.c:458: bad ? : operator
+
+349891  vex x86->IR: unhandled instruction bytes: 0xF3 0xF 0xB8 0xC9
+
+350062  3.11 SVN cannot start application (x86 ROUNDSD ?)
+
 === VEX/mips ===========================================================
 
 340777  Illegal instruction on mips (ar71xx)
 
-341997  MIPS64: Cavium OCTEON instructions - immediate operand handled
-        incorrectly
+344524  store conditional of guest applications always fail (Octeon3(MIPS)
+        discussed, complex, partial fix available
 
 === VEX/ppc ============================================================
 
@@ -70,37 +73,48 @@
 
 === VEX/s390x ==========================================================
 
-342841  s390x unrecognized instruction fiebra
-        -> Florian?
-
 === VEX general ========================================================
 
-339778  Linux/TileGx platform support to Valgrind
-        Should action
-
 === Syscalls/ioctls ====================================================
 
 339424  Full support of KVM ioctl
-        In progress -- maybe can be closed?
-
-339563  The DVB demux DMX_STOP ioctl doesn't have a wrapper
-        has patch
+        In progress -- maybe can be closed?  QUERIED
 
 341537  POST(sys_io_getevents) shouldn't check iocb or iovec
-        unclear whether really valid or not
+        Hard to fix (inter-syscall dependencies)
 
-342009  Error with valgrind on setcap file on 32bits (only) system
-        == 335143
+335143  Capabilities not supported
+        == 342009
         possibly unfixable
 
 342040  Valgrind mishandles clone with CLONE_VFORK | CLONE_VM that clones
         to a different stack
+        Nothing happened so far
 
 342809  mremap fails when protection is enabled
+        Possibly to do with huge pages (is it == 348269 ?)
 
 343099  Linux setns syscall wrapper missing, unhandled syscall: 308
         HAS PATCH.  Check that mayBlock is enabled.
 
+345077  linux syscall execveat support (linux 3.19)
+        QUERIED -- how critical is it?
+
+345414  WARNING: unhandled syscall: 317 (sys_seccomp)
+        Requires investigation
+
+348616  Wine/valgrind: Warning: noted but unhandled ioctl 0x5390 with
+        no size/direction hints. (DVD_READ_STRUCT)
+        (from AustinE)
+
+349952  Valgrind terminates process upon a call to remap_file_pages
+
+350228  Unhandled ioctl 0x6458 (i965/mesa)
+        (from AustinE)
+
+351029  factor our m_sigframe functions
+        (wishlist)
+
 === Debuginfo reader ===================================================
 
 327427  ifunc crash when symbols are discarded
@@ -110,25 +124,46 @@
         no action so far
 
 339744  warning: evaluate_Dwarf3_Expr: unhandled DW_OP_ 0xf2
-        no action so far
+        Has comments from MJW
 
 340854  valgrind-di-server: allow specification of multiple paths
         has patch, unclear if Right Thing To Do
 
+344052  Cost of dynamically loaded library is not properly linked to
+        source code lines if the library is unloaded before exit
+        This is the usual "debuginfo not available after dlclose" problem
+
+345975  Artificial functions in backtrace
+        more Dwarf complexity
+
 === Tools/Memcheck =====================================================
 
-339499  memcheck does not always detect access beyond mmaped page
-        probably wontfix
-
-339762  missing replacement alias for glibc __strchr_sse42, __strcpy_sse2,
-        __strcpy_ssse3
-        obscure?
-
 340392  Incorrect "Conditional jump..." message
         Optimised code a la Clang
-        PROBABLE CANTFIX
+        Probable CANTFIX
+        (but should we add a command line flag for it?)
 
-342683  memory past the brk limit is not initially inaccessible/unaddressable
+345307  Please suppress warning about "still reachable" memory
+        when using libstdc++ from gcc 5
+
+345751  OS X: Incorrect result for operator Iop_Add32 and Iop_Add64
+        due to mce.useLLVMworkarounds = True
+        Probably harmless
+
+345753  OS X: sanityCheckFail: exiting due to bad IR for Iop_AddF64
+        IR type error; should look at it
+        NEEDS INVESTIGATION.  I can't repro this.
+
+345811  annotate also FP for memcheck dirty helpers
+        has patch, should commit
+        NEEDS INVESTIGATION
+
+350405  Support for Intel DPDK custom allocator rte_malloc
+        Seems dubious
+
+350928  mc_malloc_wrappers.c:244 (in_block_list):
+        Assertion 'found_mc == mc' failed
+        NEEDS INVESTIGATION, Has patch
 
 === Tools/DRD ==========================================================
 === Tools/Helgrind =====================================================
@@ -140,6 +175,8 @@
         == LK_rdwr' failed.
         against 3.8.1
 
+345121  helgrind/tests/hg05_race2 fails intermittently
+
 === Tools/SGCheck ======================================================
 
 340021  sgcheck tool does not work properly on ARM
@@ -150,6 +187,8 @@
 342353  Allow dumping full massif output while valgrind is still running
         Has patch
 
+350934  massif VALGRIND INTERNAL ERROR: Valgrind received a signal 7 (SIGBUS)
+
 === Tools/Cachegrind ===================================================
 
 === Tools/Lackey =======================================================
@@ -168,9 +207,27 @@
 342356  MIPS: determine page size at runtime
         Has patch; could possibly land?
 
+345763  MIPS N32 ABI support
+        various patches, no upstream action so far
+
+348924  MIPS: Load doubles through memory so the code compiles with the FPXX ABI
+
+=== other/ppc ==========================================================
+
+350496  unhandled instruction: 0xE8040000 for powerpc e6500
+        e500 ?
+
 === other/arm ==========================================================
 
+348252  ARM: test vcvt_fixed_float_VFP causes compiler errors
+
+348325  Valgrind becomes noisy when compiled with gcc 4.9
+
 === other/s390 =========================================================
+=== other/tilegx =======================================================
+
+345921  Add TileGX instruction set test in non/tests/tilegx/
+
 === other/Android ======================================================
 
 339605  vgpreload_helgrind-arm-linux.so is not liked to libc.so 
@@ -178,7 +235,7 @@
         recent Android
 
 339861  Remove Elf32_Nhdr definition for Android
-        uh, do we want this?
+        uh, do we want this?  Requires conditionalisation.
 
 339862  v6intThumb.c does not compile when -pie options is specified
         should possible takes; causes build failures on newer Android
@@ -193,43 +250,38 @@
 341726  [patch] Remove uneccessary ifdef _android_ from launcher-linux.c
         do we want this?
 
-=== other/MacOS ========================================================
+=== other/OS X ========================================================
 
-338781  OSX: unable to read debug info
+338781  Unable to read debug information (3.10.0 BETA1)
 
-339745  Valgrind crash when check Marmalade app (OSX 10.?)
-        Rhys partially fixed
-
-341419  Signal handler ucontext_t not filled out correctly on OS X
-        Has patch
-
-342635  OS X 10.10 (Yosemite) - missing system calls and fcntl code
-        Has patch; -> Rhys?
+339745  Valgrind crash when check Marmalade app
+        WONTFIX Requires 64 bit support in client application Marmalade
 
 343306  OS X 10.10: UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option
         Partially fixed
 
-343523  OS X mach_ports_register: UNKNOWN task message
-        [id 3403, to mach_task_self(), reply 0x30f]
+348909  Support OS X 10.11 (El Capitan)
 
-343525  OS X host_get_special_port: UNKNOWN host message
-        [id 412, to mach_host_self(), reply 0x........]
+349128  Access not within mapped region in _pthread_find_thread (OS X 10.11)
 
-343649  OS X host_create_mach_voucher: UNKNOWN host message
-        [id 222, to mach_host_self(), reply 0x........]
+349129  memcheck/tests/wrap6 fails on OS X 10.11
 
-343663  [OSX Yosemite 10.10.1] The memcheck tool always reports a
-        leak regardless of the simplicity of the program.
+349521  Valgrind misses some line numbers in output on OS X 10.11
+
+349804  wine/osx: mmap-FIXED(0x1000, 1073741824) failed in UME (load_segment2)
+
+351632  UNKNOWN fcntl 97 on OS X 10.11
 
 === other/Win32 =======================================================
 
-211529  valgrind doesn't show proper call stacks for programs compiled
-        by newer versions of visual c++
-
-342117  Valgrind hangs after loading PDB file for MSVC compiled Firefox
-        under Wine
+344382  Memcheck has high false error rates on MSVC2013 compiled,
+        optimised, code in progress
+        fixed, but preffed off
 
 === GDB server =========================================================
+
+348358  describe should show info about main stack guard page
+
 === Output =============================================================
 
 339405  Adds ability to invoke a script in order to determine a
@@ -239,9 +291,9 @@
 342423  Log files should have the history 'execve' calls in them
         Wishlist
 
-=== MPI ================================================================
+351043  Invalid XML output when tracing into forked child processes
 
-330147  libmpiwrap PMPI_Get_count (should take; simple fix)
+=== MPI ================================================================
 
 === Documentation ======================================================
 
@@ -256,30 +308,26 @@
         stack crashes callgrind
         m_stacks.c brokenness?
 
-343173  helgrind crash during stack unwind
-        m_stacks.c: need to (de)register stack at munmap?
-
 343357  Please fix semaphore starvation when running threads-per-CPU
         Unclear if we should do anything
 
 343715  valgrind hangs after vgdb help request
 
+350491  Handling of nested scripts
+        Bizarre
+
 === Uncategorised/build=================================================
 
-339215  Valgrind 3.10.0 contain 2013 in copyrights notice
-        Update copyright dates!
-
-339542  Experiences with compiling valgrind with ICC
-        possibly closable now
-
-339636  Use fxsave64 and fxrstor64 mnemonics instead of rex64 prefix
-        Should apply
-
-342008  valgrind.h needs type cast for _zzq_default to compile with
-        clang/llvm in 64-bit mode
-
 343553  e500 chip now supports it? and,how about armv5
 
+344019  new tool: trackptr to track pointer usage
+
+344401  x32 ABI support
+
+348342  Valgrind does not support android-x86_64
+
+349954  Cannot start memcheck: permission denied
+
 ========================================================================
 ========================================================================
 ========================================================================
@@ -295,148 +343,8 @@
 ========================================================================
 ========================================================================
 
-Tue  3 Feb 00:14:18 CET 2015
-
 Check: space recovery in aspacemgr segnames array re-implemented?
+Check: missing copyright notices in include/vki/*xen*.h
+Check: update copyright dates in source files
 
-344019  new tool: trackptr to track pointer usage
-no action so far
-
-344052  Cost of dynamically loaded library is not properly linked to
-        source code lines if the library is unloaded before exit
-
-344139  vex x86->IR: 0x36 0x8A 0x18 0x22 (and many other examples)
-stack segment overrides
-
-344337  OS X 10.10 unhandled syscall
-
-344382 Memcheck has high false error rates on MSVC2013 compiled,
-       optimised, code in progress
-fixed, but preffed off
-
-344401  x32 ABI support
-no action
-
-344416  'make regtest' does not work cleanly on OS X
-meta-bug
-
-344512  unhandled syscal: unix:349
-
-344524  store conditional of guest applications always fail (Octeon3(MIPS)
-discussed, partial fix available
-
-344543  --leak-check=full memleak errors from system libraries in OS X 10.10.2
-can possibly close
-
-344547  vex x86->IR: 0xC5 0xF8 0x77 0xE9
-avx on x86
-
-344560  Stack traces missing penultimate frame
-has plausible patch
-
-Thu  5 Mar 18:08:27 CET 2015
-
-344886  V should not try to extend a sigaltstack
-unclear what the situation is
-
-344936  unhandled syscall: unix:473 (readlinkat) on OS X 10.10
-
-345077  linux syscall execveat support (linux 3.19)
-has patch
-
-345121  helgrind/tests/hg05_race2 fails intermittently
-
-345126  Incorrect handling of VIDIOC_G_AUDIO and G_AUDOUT
-has patch
-
-345177  arm64: prfm (reg) not implemented
-
-345248  add support for Solaris OS in valgrind
-
-345261  Unsupported instruction 0xC5 0xFB 0x10 0x44 (vmovsd
-        0x8(%esp),%xmm0)
-avx on x86
-
-345307  Please suppress warning about "still reachable" memory
-        when using libstdc++ from gcc 5
-
-345338  TIOCGSERIAL and TIOCSSERIAL ioctl support on Linux
-has patch
-
-345414  I get the following when I ran valgrind  WARNING:
-        unhandled syscall: 317
-sys_seccomp
-
-345751  OS X: Incorrect result for operator Iop_Add32 and Iop_Add64
-due to mce.useLLVMworkarounds = True
-
-345753  OS X: sanityCheckFail: exiting due to bad IR for Iop_AddF64
-IR type error; should look at it
-
-345763  MIPS N32 ABI support
-various patches, no upstream action so far
-
-345811  annotate also FP for memcheck dirty helpers
-has patch, should commit
-
-345824  aspacem segment mismatch on OS X: seen with none/tests/bigcode
-but also for s390-linux; confusing
-
-345921  Add TileGX instruction set test in non/tests/tilegx/
-
-345928  amd64: callstack only contains current function for small stacks
-has patch, but needs further investigation
-
-345929  Crash when running with `--gen-suppressions=yes` after
-        entering 'y' to confirm
-probable easy fix
-
-345975  Artificial functions in backtrace
-more Dwarf complexity
-
-345984  disInstr(arm): unhandled instruction: 0xEE193F1E
-
-345985  disInstr(arm): unhandled instruction: 0xF2200150
-
-345987  MIPS64: Implement cavium LHX instruction
-has patches
-
-346023  valgrind crashes when run over mono program
-roundsd, sse 4.1, x86
-
-346031  MIPS: Implement support for the CvmCount register (rhwr %0, 31)
-has patch
-
-346185  Fix typo saving altivec register v24
-has patch
-
-346411  MIPS: SysRes::_valEx handling is incorrect
-
-346476  vex amd64->IR: 0xC5 0xFD 0xC2 0xC1 0x10 0xC5 0xFD 0x29
-
-346562  MIPS64: lwl/lwr instructions are performing 64bit loads
-        and causing spurious "invalid read of size 8" warnings
-has patch
-
-346665  valgrind: the 'impossible' happened: LibVEX called failure_exit().
-armv6 probable failure
-
-Tue 28 Apr 13:48:40 CEST 2015
-
-346912  callgrind bails out on vpmaskmovd instruction
-
-347198  vex x86->IR: unhandled instruction bytes: 0x66 0xF 0x3A 0x63
-
-347233  Fix memcheck/tests/strchr on OS X 10.10 (Haswell)
-
-347322  Power PC regression test cleanup
-
-Fri  8 May 11:52:14 CEST 2015
-
-347686  Patch set to cleanup PPC64 regtests
-
-347698  3.10.1 doesn't recognize cmpsd generated by DynASM
-
-347885  unhandled instruction bytes: 0xD6 0xF 0x84 0x1B (SALC amd64)
-
-Tue 19 May 11:22:52 CEST 2015
+Wed 12 Aug 15:52:27 CEST 2015
diff --git a/docs/internals/Darwin-notes.txt b/docs/internals/Darwin-notes.txt
index f526c4f..85c9e8e 100644
--- a/docs/internals/Darwin-notes.txt
+++ b/docs/internals/Darwin-notes.txt
@@ -69,13 +69,6 @@
   - PRE(sys_posix_spawn) completely ignores signal issues, and
     also ignores the file_actions argument
 
-* env var handling w/ exec on Darwin: is there something odd?  Compare
-  "valgrind env" on Darwin and Linux.  On the former there are
-  settings VALGRIND_LIB and VALGRIND_LIB_INNER, but not for the
-  former.
-  There's a suspicious-looking "#if defined(VGO_darwin)" in 
-  VG_(env_remove_valgrind_env_stuff).  Maybe related?
-
 * Cleanups: sort wrappers in syswrap-darwin.c and priv_syswrap-darwin.h
   alphabetically.  Also, some aren't properly implemented -- check and
   print warnings
diff --git a/docs/internals/s390-opcodes.csv b/docs/internals/s390-opcodes.csv
index 9793182..c0757ee 100644
--- a/docs/internals/s390-opcodes.csv
+++ b/docs/internals/s390-opcodes.csv
@@ -293,9 +293,9 @@
 lcxbr,"load complement extended bfp",implemented,
 lcdbr,"load complement long bfp",implemented,
 lcebr,"load complement short bfp",implemented,
-fixbr,"load fp integer extended bfp","not implemented",
-fidbr,"load fp integer long bfp","not implemented",
-fiebr,"load fp integer short bfp","not implemented",
+fixbr,"load fp integer extended bfp",implemented,
+fidbr,"load fp integer long bfp",implemented,
+fiebr,"load fp integer short bfp",implemented,
 lfpc,"load fpc",implemented,
 lxdbr,"load lengthened long to extended bfp",implemented,
 lxdb,"load lengthened long to extended bfp",implemented,
diff --git a/docs/internals/xml-output-protocol4.txt b/docs/internals/xml-output-protocol4.txt
index a147eaa..ccb22b4 100644
--- a/docs/internals/xml-output-protocol4.txt
+++ b/docs/internals/xml-output-protocol4.txt
@@ -719,6 +719,7 @@
 
 <clientmsg>
   <tid>INT</tid>
+  <threadname>NAME</threadname>    if set
   <text>...</text>
 </clientmsg>
 
@@ -726,12 +727,17 @@
 
 <clientmsg>
   <tid>INT</tid>
+  <threadname>NAME</threadname>    if set
   <text>...</text>
   STACK
 </clientmsg>
 
 * The <tid> tag indicates the Valgrind thread number.
 
+* The <threadname> tag identifies the name of the thread if it was
+  set by the client application. If no name was set, the tag is
+  omitted.
+
 * The <text> tag indicates the message as specified in the client request
   (properly translated to XML).
 
diff --git a/docs/xml/dist-docs.xml b/docs/xml/dist-docs.xml
index 37b2ce3..e4021ed 100644
--- a/docs/xml/dist-docs.xml
+++ b/docs/xml/dist-docs.xml
@@ -121,4 +121,14 @@
           xmlns:xi="http://www.w3.org/2001/XInclude" />
     </literallayout>
     </chapter>
+
+  <chapter id="dist.readme-solaris"
+             xreflabel="Readme Solaris">
+    <title>README.solaris</title>
+    <literallayout>
+      <xi:include href="../../README.solaris"
+          parse="text"
+          xmlns:xi="http://www.w3.org/2001/XInclude" />
+    </literallayout>
+    </chapter>
 </book>
diff --git a/docs/xml/manual-core-adv.xml b/docs/xml/manual-core-adv.xml
index 409cddf..b767825 100644
--- a/docs/xml/manual-core-adv.xml
+++ b/docs/xml/manual-core-adv.xml
@@ -1479,6 +1479,14 @@
   </listitem>
 
   <listitem>
+    <para><varname>v.info unwind  &lt;addr&gt; [&lt;len&gt;]</varname> shows
+    the CFI unwind debug info for the address range [addr, addr+len-1].
+    The default value of &lt;len&gt; is 1, giving the unwind information
+    for the instruction at &lt;addr&gt;.
+    </para>
+  </listitem>
+
+  <listitem>
     <para><varname>v.set debuglog &lt;intvalue&gt;</varname> sets the
     Valgrind debug log level to &lt;intvalue&gt;.  This allows to
     dynamically change the log level of Valgrind e.g. when a problem
diff --git a/docs/xml/manual-core.xml b/docs/xml/manual-core.xml
index 5437bd5..edda8a1 100644
--- a/docs/xml/manual-core.xml
+++ b/docs/xml/manual-core.xml
@@ -1412,11 +1412,13 @@
       after every error shown and print the line:
       <literallayout><computeroutput>    ---- Print suppression ? --- [Return/N/n/Y/y/C/c] ----</computeroutput></literallayout>
 
-      The prompt's behaviour is the same as for the
-      <option>--db-attach</option> option (see below).</para>
+      Pressing <varname>Ret</varname>, or <varname>N Ret</varname> or
+      <varname>n Ret</varname>, causes Valgrind continue execution without
+      printing a suppression for this error.</para>
 
-      <para>If you choose to, Valgrind will print out a suppression for
-      this error.  You can then cut and paste it into a suppression file
+      <para>Pressing <varname>Y Ret</varname> or
+      <varname>y Ret</varname> causes Valgrind to write a suppression
+      for this error.  You can then cut and paste it into a suppression file
       if you don't want to hear about the error in the future.</para>
 
       <para>When set to <varname>all</varname>, Valgrind will print a
@@ -1451,76 +1453,12 @@
     </listitem>
   </varlistentry>
 
-  <varlistentry id="opt.db-attach" xreflabel="--db-attach">
-    <term>
-      <option><![CDATA[--db-attach=<yes|no> [default: no] ]]></option>
-    </term>
-    <listitem>
-      <para>When enabled, Valgrind will pause after every error shown
-      and print the line:
-      <literallayout><computeroutput>    ---- Attach to debugger ? --- [Return/N/n/Y/y/C/c] ----</computeroutput></literallayout>
-
-      Pressing <varname>Ret</varname>, or <varname>N Ret</varname> or
-      <varname>n Ret</varname>, causes Valgrind not to start a debugger
-      for this error.</para>
-
-      <para>Pressing <varname>Y Ret</varname> or
-      <varname>y Ret</varname> causes Valgrind to start a debugger for
-      the program at this point. When you have finished with the
-      debugger, quit from it, and the program will continue. Trying to
-      continue from inside the debugger doesn't work.</para>
-
-      <para>
-      Note: if you use GDB, more powerful debugging support is
-      provided by the <option>--vgdb=</option> <varname>yes</varname>
-      or <varname>full</varname> value.  This activates Valgrind's
-      internal gdbserver, which provides more-or-less full GDB-style
-      control of the application: insertion of breakpoints, continuing 
-      from inside GDB, inferior function calls, and much more.
-      </para> 
-
-      <para><varname>C Ret</varname> or <varname>c Ret</varname> causes
-      Valgrind not to start a debugger, and not to ask again.</para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry id="opt.db-command" xreflabel="--db-command">
-    <term>
-      <option><![CDATA[--db-command=<command> [default: gdb -nw %f %p] ]]></option>
-    </term>
-    <listitem>
-      <para>Specify the debugger to use with the
-      <option>--db-attach</option> command. The default debugger is
-      GDB. This option is a template that is expanded by Valgrind at
-      runtime.  <literal>%f</literal> is replaced with the executable's
-      file name and <literal>%p</literal> is replaced by the process ID
-      of the executable.</para>
-
-      <para>This specifies how Valgrind will invoke the debugger.  By
-      default it will use whatever GDB is detected at build time, which
-      is usually <computeroutput>/usr/bin/gdb</computeroutput>.  Using
-      this command, you can specify some alternative command to invoke
-      the debugger you want to use.</para>
-
-      <para>The command string given can include one or instances of the
-      <literal>%p</literal> and <literal>%f</literal> expansions. Each
-      instance of <literal>%p</literal> expands to the PID of the
-      process to be debugged and each instance of <literal>%f</literal>
-      expands to the path to the executable for the process to be
-      debugged.</para>
-
-      <para>Since <computeroutput>&lt;command&gt;</computeroutput> is likely
-      to contain spaces, you will need to put this entire option in
-      quotes to ensure it is correctly handled by the shell.</para>
-    </listitem>
-  </varlistentry>
-
   <varlistentry id="opt.input-fd" xreflabel="--input-fd">
     <term>
       <option><![CDATA[--input-fd=<number> [default: 0, stdin] ]]></option>
     </term>
     <listitem>
-      <para>When using <option>--db-attach=yes</option> or
+      <para>When using
       <option>--gen-suppressions=yes</option>, Valgrind will stop so as
       to read keyboard input from you when each error occurs.  By
       default it reads from the standard input (stdin), which is
@@ -1532,7 +1470,7 @@
 
   <varlistentry id="opt.dsymutil" xreflabel="--dsymutil">
     <term>
-      <option><![CDATA[--dsymutil=no|yes [no] ]]></option>
+      <option><![CDATA[--dsymutil=no|yes [yes] ]]></option>
     </term>
     <listitem>
       <para>This option is only relevant when running Valgrind on
@@ -1766,59 +1704,60 @@
 
   <varlistentry id="opt.smc-check" xreflabel="--smc-check">
     <term>
-      <option><![CDATA[--smc-check=<none|stack|all|all-non-file> [default: stack] ]]></option>
+      <option><![CDATA[--smc-check=<none|stack|all|all-non-file>
+      [default: all-non-file for x86/amd64/s390x, stack for other archs] ]]></option>
     </term>
     <listitem>
       <para>This option controls Valgrind's detection of self-modifying
-      code.  If no checking is done, if a program executes some code, then
-      overwrites it with new code, and executes the new code, Valgrind will
-      continue to execute the translations it made for the old code.  This
-      will likely lead to incorrect behaviour and/or crashes.</para>
-      
-      <para>Valgrind has four levels of self-modifying code detection:
-      no detection, detect self-modifying code on the stack (which is used by
-      GCC to implement nested functions), detect self-modifying code
-      everywhere, and detect self-modifying code everywhere except in
-      file-backed mappings.
-
-      Note that the default option will catch the vast majority
-      of cases.  The main case it will not catch is programs such as JIT
-      compilers that dynamically generate code <emphasis>and</emphasis>
-      subsequently overwrite part or all of it.  Running with
-      <varname>all</varname> will slow Valgrind down noticeably.
-      Running with
-      <varname>none</varname> will rarely speed things up, since very little
-      code gets put on the stack for most programs.  The
-      <function>VALGRIND_DISCARD_TRANSLATIONS</function> client
-      request is an alternative to <option>--smc-check=all</option>
-      that requires more programmer effort but allows Valgrind to run
-      your program faster, by telling it precisely when translations
-      need to be re-made.
-      <!-- commented out because it causes broken links in the man page
-      ;  see <xref
-      linkend="manual-core-adv.clientreq"/> for more details.
-      -->
-      </para>
-
+       code.  If no checking is done, when a program executes some code, then
+       overwrites it with new code, and executes the new code, Valgrind will
+       continue to execute the translations it made for the old code.  This
+       will likely lead to incorrect behaviour and/or crashes.</para>
+      <para>For "modern" architectures -- anything that's not x86,
+        amd64 or s390x -- the default is <varname>stack</varname>.
+        This is because a correct program must take explicit action
+        to reestablish D-I cache coherence following code
+        modification.  Valgrind observes and honours such actions,
+        with the result that self-modifying code is transparently
+        handled with zero extra cost.</para>
+       <para>For x86, amd64 and s390x, the program is not required to
+        notify the hardware of required D-I coherence syncing.  Hence
+        the default is <varname>all-non-file</varname>, which covers
+        the normal case of generating code into an anonymous
+        (non-file-backed) mmap'd area.</para>
+       <para>The meanings of the four available settings are as
+        follows.  No detection (<varname>none</varname>),
+        detect self-modifying code
+        on the stack (which is used by GCC to implement nested
+        functions) (<varname>stack</varname>), detect self-modifying code
+        everywhere (<varname>all</varname>), and detect
+        self-modifying code everywhere except in file-backed
+        mappings (<varname>all-non-file</varname>).</para>
+       <para>Running with <varname>all</varname> will slow Valgrind
+        down noticeably.  Running with <varname>none</varname> will
+        rarely speed things up, since very little code gets
+        dynamically generated in most programs.  The
+        <function>VALGRIND_DISCARD_TRANSLATIONS</function> client
+        request is an alternative to <option>--smc-check=all</option>
+        and <option>--smc-check=all-non-file</option>
+        that requires more programmer effort but allows Valgrind to run
+        your program faster, by telling it precisely when translations
+        need to be re-made.
+        <!-- commented out because it causes broken links in the man page
+        ;  see <xref
+        linkend="manual-core-adv.clientreq"/> for more details.
+        -->
+        </para>
       <para><option>--smc-check=all-non-file</option> provides a
-      cheaper but more limited version
-      of <option>--smc-check=all</option>.  It adds checks to any
-      translations that do not originate from file-backed memory
-      mappings.  Typical applications that generate code, for example
-      JITs in web browsers, generate code into anonymous mmaped areas,
-      whereas the "fixed" code of the browser always lives in
-      file-backed mappings.  <option>--smc-check=all-non-file</option>
-      takes advantage of this observation, limiting the overhead of
-      checking to code which is likely to be JIT generated.</para>
-
-      <para>Some architectures (including ppc32, ppc64, ARM and MIPS)
-      require programs which create code at runtime to flush the
-      instruction cache in between code generation and first use.
-      Valgrind observes and honours such instructions.  Hence, on
-      ppc32/Linux, ppc64/Linux and ARM/Linux, Valgrind always provides
-      complete, transparent support for self-modifying code.  It is
-      only on platforms such as x86/Linux, AMD64/Linux, x86/Darwin and
-      AMD64/Darwin that you need to use this option.</para>
+       cheaper but more limited version
+       of <option>--smc-check=all</option>.  It adds checks to any
+       translations that do not originate from file-backed memory
+       mappings.  Typical applications that generate code, for example
+       JITs in web browsers, generate code into anonymous mmaped areas,
+       whereas the "fixed" code of the browser always lives in
+       file-backed mappings.  <option>--smc-check=all-non-file</option>
+       takes advantage of this observation, limiting the overhead of
+       checking to code which is likely to be JIT generated.</para>
     </listitem>
   </varlistentry>
 
@@ -1832,8 +1771,8 @@
       startup and makes it use more memory (typically for each inlined
       piece of code, 6 words and space for the function name), but it
       results in more descriptive stacktraces.  For the 3.10.0
-      release, this functionality is enabled by default only for Linux
-      and Android targets and only for the tools Memcheck, Helgrind
+      release, this functionality is enabled by default only for Linux,
+      Android and Solaris targets and only for the tools Memcheck, Helgrind
       and DRD.  Here is an example of some stacktraces with
       <option>--read-inline-info=no</option>:
 </para>
@@ -2005,7 +1944,7 @@
         <listitem>
           <para><option>lax-ioctls: </option> Be very lax about ioctl
           handling; the only assumption is that the size is
-          correct. Doesn't require the full buffer to be initialized
+          correct. Doesn't require the full buffer to be initialised
           when writing.  Without this, using some device drivers with a
           large number of strange ioctl commands becomes very
           tiresome.</para>
@@ -2071,6 +2010,14 @@
             tested with various glibc versions (e.g. 2.11, 2.16, 2.18)
             on various platforms.</para>
         </listitem>
+        <listitem>
+          <para><option>lax-doors: </option> (Solaris only) Be very lax
+          about door syscall handling over unrecognised door file
+          descriptors. Does not require that full buffer is initialised
+          when writing. Without this, programs using libdoor(3LIB)
+          functionality with completely proprietary semantics may report
+          large number of false positives.</para>
+        </listitem>
       </itemizedlist>
     </listitem>
   </varlistentry>
@@ -2444,8 +2391,7 @@
 
 <para>If you wish to debug your program rather than debugging
 Valgrind itself, then you should use the options
-<option>--vgdb=yes</option> or <option>--vgdb=full</option>
-or <option>--db-attach=yes</option>.
+<option>--vgdb=yes</option> or <option>--vgdb=full</option>.
 </para>
 
 <!-- end of xi:include in the manpage -->
diff --git a/docs/xml/vg-entities.xml b/docs/xml/vg-entities.xml
index aeca276..1d8f322 100644
--- a/docs/xml/vg-entities.xml
+++ b/docs/xml/vg-entities.xml
@@ -2,12 +2,12 @@
 <!ENTITY vg-jemail     "julian@valgrind.org">
 <!ENTITY vg-vemail     "valgrind@valgrind.org">
 <!ENTITY cl-email      "Josef.Weidendorfer@gmx.de">
-<!ENTITY vg-lifespan   "2000-2014">
+<!ENTITY vg-lifespan   "2000-2016">
 
 <!-- valgrind release + version stuff -->
 <!ENTITY rel-type    "Release">
-<!ENTITY rel-version "3.10.0">
-<!ENTITY rel-date    "10 September 2014">
+<!ENTITY rel-version "3.12.0.SVN">
+<!ENTITY rel-date    "?? ??????? 2016">
 
 <!-- where the docs are installed -->
 <!ENTITY vg-docs-path  "$INSTALL/share/doc/valgrind/html/index.html">
diff --git a/drd/docs/drd-manual.xml b/drd/docs/drd-manual.xml
index e0c407c..7692dac 100644
--- a/drd/docs/drd-manual.xml
+++ b/drd/docs/drd-manual.xml
@@ -505,6 +505,42 @@
       </para>
     </listitem>
   </varlistentry>
+  <varlistentry>
+    <term>
+      <option><![CDATA[--ignore-thread-creation=<yes|no> [default: no]]]></option>
+    </term>
+    <listitem>
+      <para>
+        Controls whether all activities during thread creation should be
+        ignored. By default enabled only on Solaris.
+        Solaris provides higher throughput, parallelism and scalability than
+        other operating systems, at the cost of more fine-grained locking
+        activity. This means for example that when a thread is created under
+        glibc, just one big lock is used for all thread setup. Solaris libc
+        uses several fine-grained locks and the creator thread resumes its
+        activities as soon as possible, leaving for example stack and TLS setup
+        sequence to the created thread.
+        This situation confuses DRD as it assumes there is some false ordering
+        in place between creator and created thread; and therefore many types
+        of race conditions in the application would not be reported. To prevent
+        such false ordering, this command line option is set to
+        <computeroutput>yes</computeroutput> by default on Solaris.
+        All activity (loads, stores, client requests) is therefore ignored
+        during:</para>
+      <itemizedlist>
+	<listitem>
+	  <para>
+	    pthread_create() call in the creator thread
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    thread creation phase (stack and TLS setup) in the created thread
+	  </para>
+	</listitem>
+      </itemizedlist>
+    </listitem>
+  </varlistentry>
 </variablelist>
 <!-- end of xi:include in the manpage -->
 
diff --git a/drd/drd.h b/drd/drd.h
index 1e96857..4615e5b 100644
--- a/drd/drd.h
+++ b/drd/drd.h
@@ -12,7 +12,7 @@
   This file is part of DRD, a Valgrind tool for verification of
   multithreaded programs.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
   All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
diff --git a/drd/drd_barrier.c b/drd/drd_barrier.c
index 24bec96..e1ab131 100644
--- a/drd/drd_barrier.c
+++ b/drd/drd_barrier.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -259,11 +259,11 @@
 
    if (s_trace_barrier) {
       if (reinitialization)
-         DRD_(trace_msg)("[%d] barrier_reinit    %s 0x%lx count %ld -> %ld",
+         DRD_(trace_msg)("[%u] barrier_reinit    %s 0x%lx count %ld -> %ld",
                          DRD_(thread_get_running_tid)(),
                          barrier_get_typename(p), barrier, p->count, count);
       else
-         DRD_(trace_msg)("[%d] barrier_init      %s 0x%lx",
+         DRD_(trace_msg)("[%u] barrier_init      %s 0x%lx",
                          DRD_(thread_get_running_tid)(),
                          barrier_get_typename(p),
                          barrier);
@@ -293,7 +293,7 @@
    p = DRD_(barrier_get)(barrier);
 
    if (s_trace_barrier)
-      DRD_(trace_msg)("[%d] barrier_destroy   %s 0x%lx",
+      DRD_(trace_msg)("[%u] barrier_destroy   %s 0x%lx",
                       DRD_(thread_get_running_tid)(),
                       barrier_get_typename(p), barrier);
 
@@ -352,7 +352,7 @@
    tl_assert(p);
 
    if (s_trace_barrier)
-      DRD_(trace_msg)("[%d] barrier_pre_wait  %s 0x%lx iteration %ld",
+      DRD_(trace_msg)("[%u] barrier_pre_wait  %s 0x%lx iteration %ld",
                       DRD_(thread_get_running_tid)(),
                       barrier_get_typename(p), barrier, p->pre_iteration);
 
@@ -413,7 +413,7 @@
    p = DRD_(barrier_get)(barrier);
 
    if (s_trace_barrier)
-      DRD_(trace_msg)("[%d] barrier_post_wait %s 0x%lx iteration %ld%s",
+      DRD_(trace_msg)("[%u] barrier_post_wait %s 0x%lx iteration %ld%s",
                       tid, p ? barrier_get_typename(p) : "(?)",
                       barrier, p ? p->post_iteration : -1,
                       serializing ? " (serializing)" : "");
diff --git a/drd/drd_barrier.h b/drd/drd_barrier.h
index 57a48c7..c571807 100644
--- a/drd/drd_barrier.h
+++ b/drd/drd_barrier.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_basics.h b/drd/drd_basics.h
index 7ad3139..57b2df0 100644
--- a/drd/drd_basics.h
+++ b/drd/drd_basics.h
@@ -1,7 +1,7 @@
 /*
   This file is part of DRD, a thread error detector.
 
-  Copyright (C) 2009-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2009-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_bitmap.c b/drd/drd_bitmap.c
index 0b2b099..df7691a 100644
--- a/drd/drd_bitmap.c
+++ b/drd/drd_bitmap.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_bitmap.h b/drd/drd_bitmap.h
index 0b47157..94b5285 100644
--- a/drd/drd_bitmap.h
+++ b/drd/drd_bitmap.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_clientobj.c b/drd/drd_clientobj.c
index 44234f9..7bc1018 100644
--- a/drd/drd_clientobj.c
+++ b/drd/drd_clientobj.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -132,7 +132,7 @@
    tl_assert(VG_(OSetGen_Lookup)(s_clientobj_set, &a1) == 0);
 
    if (s_trace_clientobj)
-      DRD_(trace_msg)("Adding client object 0x%lx of type %d", a1, t);
+     DRD_(trace_msg)("Adding client object 0x%lx of type %d", a1, (Int)t);
 
    p = VG_(OSetGen_AllocNode)(s_clientobj_set, sizeof(*p));
    VG_(memset)(p, 0, sizeof(*p));
@@ -179,7 +179,7 @@
 
    if (s_trace_clientobj) {
       DRD_(trace_msg)("Removing client object 0x%lx of type %d", p->any.a1,
-                      p->any.type);
+                      (Int)p->any.type);
 #if 0
       VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(),
                                  VG_(clo_backtrace_size));
diff --git a/drd/drd_clientobj.h b/drd/drd_clientobj.h
index b3190ab..16fe562 100644
--- a/drd/drd_clientobj.h
+++ b/drd/drd_clientobj.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_clientreq.c b/drd/drd_clientreq.c
index bed68aa..47405d3 100644
--- a/drd/drd_clientreq.c
+++ b/drd/drd_clientreq.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -615,6 +615,16 @@
       }
       break;
 
+#if defined(VGO_solaris)
+   case VG_USERREQ__RTLD_BIND_GUARD:
+      DRD_(thread_entering_rtld_bind_guard)(drd_tid, arg[1]);
+      break;
+
+   case VG_USERREQ__RTLD_BIND_CLEAR:
+      DRD_(thread_leaving_rtld_bind_clear)(drd_tid, arg[1]);
+      break;
+#endif /* VGO_solaris */
+
    default:
 #if 0
       VG_(message)(Vg_DebugMsg, "Unrecognized client request 0x%lx 0x%lx",
diff --git a/drd/drd_clientreq.h b/drd/drd_clientreq.h
index 929b60d..5d9b9b3 100644
--- a/drd/drd_clientreq.h
+++ b/drd/drd_clientreq.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -226,6 +226,15 @@
    VG_USERREQ__POST_RWLOCK_UNLOCK
    /* args: Addr rwlock, RwLockT, Bool unlocked */
 
+#if defined(VGO_solaris)
+   ,
+   /* To notify the drd tool of a bind_guard call from runtime linker. */
+   VG_USERREQ__RTLD_BIND_GUARD,
+   /* args: Int flags */
+   /* To notify the drd tool of a bind_clear call from runtime linker. */
+   VG_USERREQ__RTLD_BIND_CLEAR
+   /* args: Int flags */
+#endif /* VGO_solaris */
 };
 
 /**
diff --git a/drd/drd_cond.c b/drd/drd_cond.c
index bcdef30..efc8e23 100644
--- a/drd/drd_cond.c
+++ b/drd/drd_cond.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -147,7 +147,7 @@
    struct cond_info* p;
 
    if (DRD_(s_trace_cond))
-      DRD_(trace_msg)("[%d] cond_init       cond 0x%lx",
+      DRD_(trace_msg)("[%u] cond_init       cond 0x%lx",
                       DRD_(thread_get_running_tid)(), cond);
 
    p = DRD_(cond_get)(cond);
@@ -170,7 +170,7 @@
    struct cond_info* p;
 
    if (DRD_(s_trace_cond))
-      DRD_(trace_msg)("[%d] cond_destroy    cond 0x%lx",
+      DRD_(trace_msg)("[%u] cond_destroy    cond 0x%lx",
                       DRD_(thread_get_running_tid)(), cond);
 
    p = DRD_(cond_get)(cond);
@@ -210,7 +210,7 @@
    struct mutex_info* q;
 
    if (DRD_(s_trace_cond))
-      DRD_(trace_msg)("[%d] cond_pre_wait   cond 0x%lx",
+      DRD_(trace_msg)("[%u] cond_pre_wait   cond 0x%lx",
                       DRD_(thread_get_running_tid)(), cond);
 
    p = cond_get_or_allocate(cond);
@@ -271,7 +271,7 @@
    struct cond_info* p;
 
    if (DRD_(s_trace_cond))
-      DRD_(trace_msg)("[%d] cond_post_wait  cond 0x%lx",
+      DRD_(trace_msg)("[%u] cond_post_wait  cond 0x%lx",
                       DRD_(thread_get_running_tid)(), cond);
 
    p = DRD_(cond_get)(cond);
@@ -352,7 +352,7 @@
 
    p = DRD_(cond_get)(cond);
    if (DRD_(s_trace_cond))
-      DRD_(trace_msg)("[%d] cond_signal     cond 0x%lx",
+      DRD_(trace_msg)("[%u] cond_signal     cond 0x%lx",
                       DRD_(thread_get_running_tid)(), cond);
 
    tl_assert(DRD_(pthread_cond_initializer));
@@ -375,7 +375,7 @@
    struct cond_info* p;
 
    if (DRD_(s_trace_cond))
-      DRD_(trace_msg)("[%d] cond_broadcast  cond 0x%lx",
+      DRD_(trace_msg)("[%u] cond_broadcast  cond 0x%lx",
                       DRD_(thread_get_running_tid)(), cond);
 
    p = DRD_(cond_get)(cond);
diff --git a/drd/drd_cond.h b/drd/drd_cond.h
index 7cfa48c..3f5857d 100644
--- a/drd/drd_cond.h
+++ b/drd/drd_cond.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_darwin_intercepts.c b/drd/drd_darwin_intercepts.c
index 08cd467..25ce9fb 100644
--- a/drd/drd_darwin_intercepts.c
+++ b/drd/drd_darwin_intercepts.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_error.c b/drd/drd_error.c
index c510b88..fb116f6 100644
--- a/drd/drd_error.c
+++ b/drd/drd_error.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -174,7 +174,7 @@
    tl_assert(dri->size > 0);
 
    (void) VG_(get_data_description)(descr1, descr2, dri->addr);
-   /* If there's nothing in descr1/2, free them.  Why is it safe to to
+   /* If there's nothing in descr1/2, free them.  Why is it safe to
       VG_(indexXA) at zero here?  Because VG_(get_data_description)
       guarantees to zero terminate descr1/2 regardless of the outcome
       of the call.  So there's always at least one element in each XA
@@ -199,7 +199,7 @@
       describe_malloced_addr(dri->addr, &ai);
    }
 
-   print_err_detail("%sConflicting %s by thread %d at 0x%08lx size %ld%s\n",
+   print_err_detail("%sConflicting %s by thread %u at 0x%08lx size %lu%s\n",
                     what_prefix, dri->access_type == eStore ? "store" : "load",
                     dri->tid, dri->addr, dri->size, what_suffix);
 
@@ -316,7 +316,7 @@
       MutexErrInfo* p = (MutexErrInfo*)(VG_(get_error_extra)(e));
       tl_assert(p);
       if (p->recursion_count >= 0) {
-         print_err_detail("%s%s: mutex 0x%lx, recursion count %d, owner %d."
+         print_err_detail("%s%s: mutex 0x%lx, recursion count %d, owner %u."
                           "%s\n", what_prefix, VG_(get_error_string)(e),
                           p->mutex, p->recursion_count, p->owner, what_suffix);
       } else {
@@ -337,7 +337,7 @@
    }
    case CondDestrErr: {
       CondDestrErrInfo* cdi = (CondDestrErrInfo*)(VG_(get_error_extra)(e));
-      print_err_detail("%s%s: cond 0x%lx, mutex 0x%lx locked by thread %d%s\n",
+      print_err_detail("%s%s: cond 0x%lx, mutex 0x%lx locked by thread %u%s\n",
                        what_prefix, VG_(get_error_string)(e), cdi->cond,
                        cdi->mutex, cdi->owner, what_suffix);
       VG_(pp_ExeContext)(VG_(get_error_where)(e));
@@ -384,7 +384,7 @@
       if (bei->other_context) {
          if (xml)
             print_err_detail("  <confl_wait_call>\n");
-         print_err_detail("%sConflicting wait call by thread %d:%s\n",
+         print_err_detail("%sConflicting wait call by thread %u:%s\n",
                           what_prefix, bei->other_tid, what_suffix);
          VG_(pp_ExeContext)(bei->other_context);
          if (xml)
@@ -413,8 +413,8 @@
       VG_(pp_ExeContext)(p->acquired_at);
       if (xml)
          print_err_detail("  </acquired_at>\n");
-      print_err_detail("%sLock on %s 0x%lx was held during %d ms"
-                       " (threshold: %d ms).%s\n", what_prefix,
+      print_err_detail("%sLock on %s 0x%lx was held during %u ms"
+                       " (threshold: %u ms).%s\n", what_prefix,
                        VG_(get_error_string)(e), p->synchronization_object,
                        p->hold_time_ms, p->threshold_ms, what_suffix);
       VG_(pp_ExeContext)(VG_(get_error_where)(e));
diff --git a/drd/drd_error.h b/drd/drd_error.h
index 0825eff..7f80d44 100644
--- a/drd/drd_error.h
+++ b/drd/drd_error.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_hb.c b/drd/drd_hb.c
index aeb9ded..5688feb 100644
--- a/drd/drd_hb.c
+++ b/drd/drd_hb.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -164,7 +164,7 @@
 
    p = DRD_(hb_get_or_allocate)(hb);
    if (DRD_(s_trace_hb))
-      DRD_(trace_msg)("[%d] happens_before 0x%lx",
+      DRD_(trace_msg)("[%u] happens_before 0x%lx",
                       DRD_(thread_get_running_tid)(), hb);
 
    if (!p)
@@ -198,7 +198,7 @@
    p = DRD_(hb_get_or_allocate)(hb);
 
    if (DRD_(s_trace_hb))
-      DRD_(trace_msg)("[%d] happens_after  0x%lx",
+      DRD_(trace_msg)("[%u] happens_after  0x%lx",
                       DRD_(thread_get_running_tid)(), hb);
 
    if (!p)
@@ -230,7 +230,7 @@
    struct hb_info* p;
 
    if (DRD_(s_trace_hb))
-      DRD_(trace_msg)("[%d] happens_done  0x%lx",
+      DRD_(trace_msg)("[%u] happens_done  0x%lx",
                       DRD_(thread_get_running_tid)(), hb);
 
    p = DRD_(hb_get)(hb);
diff --git a/drd/drd_hb.h b/drd/drd_hb.h
index 7616b0a..86432fc 100644
--- a/drd/drd_hb.h
+++ b/drd/drd_hb.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_libstdcxx_intercepts.c b/drd/drd_libstdcxx_intercepts.c
index 99cbd3f..82a583d 100644
--- a/drd/drd_libstdcxx_intercepts.c
+++ b/drd/drd_libstdcxx_intercepts.c
@@ -5,7 +5,7 @@
 /*
   This file is part of DRD, a thread error detector.
 
-  Copyright (C) 2014 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2014-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_load_store.c b/drd/drd_load_store.c
index 88e4d44..f968bcc 100644
--- a/drd/drd_load_store.c
+++ b/drd/drd_load_store.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -103,7 +103,7 @@
 
       vc = DRD_(vc_aprint)(DRD_(thread_get_vc)(DRD_(thread_get_running_tid)()));
       if (access_type == eStore && size <= sizeof(HWord)) {
-         DRD_(trace_msg_w_bt)("store 0x%lx size %ld val %ld/0x%lx (thread %d /"
+         DRD_(trace_msg_w_bt)("store 0x%lx size %lu val %lu/0x%lx (thread %u /"
                               " vc %s)", addr, size, stored_value_lo,
                               stored_value_lo, DRD_(thread_get_running_tid)(),
                               vc);
@@ -112,11 +112,11 @@
 
          tl_assert(sizeof(HWord) == 4);
          sv = ((ULong)stored_value_hi << 32) | stored_value_lo;
-         DRD_(trace_msg_w_bt)("store 0x%lx size %ld val %lld/0x%llx (thread %d"
+         DRD_(trace_msg_w_bt)("store 0x%lx size %lu val %llu/0x%llx (thread %u"
                               " / vc %s)", addr, size, sv, sv,
                               DRD_(thread_get_running_tid)(), vc);
       } else {
-         DRD_(trace_msg_w_bt)("%s 0x%lx size %ld (thread %d / vc %s)",
+         DRD_(trace_msg_w_bt)("%s 0x%lx size %lu (thread %u / vc %s)",
                               access_type == eLoad ? "load "
                               : access_type == eStore ? "store"
                               : access_type == eStart ? "start"
diff --git a/drd/drd_load_store.h b/drd/drd_load_store.h
index ec8b4a5..9e649e8 100644
--- a/drd/drd_load_store.h
+++ b/drd/drd_load_store.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_main.c b/drd/drd_main.c
index 0960fe5..69b7f45 100644
--- a/drd/drd_main.c
+++ b/drd/drd_main.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -104,6 +104,8 @@
    {}
    else if VG_BOOL_CLO(arg, "--show-confl-seg",      show_confl_seg) {}
    else if VG_BOOL_CLO(arg, "--show-stack-usage",    s_show_stack_usage) {}
+   else if VG_BOOL_CLO(arg, "--ignore-thread-creation",
+   DRD_(ignore_thread_creation)) {}
    else if VG_BOOL_CLO(arg, "--trace-alloc",         s_trace_alloc) {}
    else if VG_BOOL_CLO(arg, "--trace-barrier",       trace_barrier) {}
    else if VG_BOOL_CLO(arg, "--trace-clientobj",     trace_clientobj) {}
@@ -161,7 +163,7 @@
       DRD_(start_tracing_address_range)(addr, addr + 1, False);
    }
    if (ptrace_address) {
-      char *plus = VG_(strchr)(ptrace_address, '+');
+      HChar *plus = VG_(strchr)(ptrace_address, '+');
       Addr addr, length;
       if (plus)
          *plus = '\0';
@@ -228,6 +230,8 @@
 "                              milliseconds) [off]\n"
 "    --show-confl-seg=yes|no   Show conflicting segments in race reports [yes].\n"
 "    --show-stack-usage=yes|no Print stack usage at thread exit time [no].\n"
+"    --ignore-thread-creation=yes|no Ignore activities during thread \n"
+"                              creation [%s].\n"
 "\n"
 "  drd options for monitoring process behavior:\n"
 "    --ptrace-addr=<address>[+<length>] Trace all load and store activity for\n"
@@ -245,7 +249,8 @@
 "    --trace-mutex=yes|no      Trace all mutex activity [no].\n"
 "    --trace-rwlock=yes|no     Trace all reader-writer lock activity[no].\n"
 "    --trace-semaphore=yes|no  Trace all semaphore activity [no].\n",
-DRD_(thread_get_segment_merge_interval)()
+DRD_(thread_get_segment_merge_interval)(),
+DRD_(ignore_thread_creation) ? "yes" : "no"
 );
 }
 
@@ -334,7 +339,7 @@
    tl_assert(a1 <= a2);
 
    if (!is_stack_mem && s_trace_alloc)
-      DRD_(trace_msg)("Started using memory range 0x%lx + %ld%s",
+      DRD_(trace_msg)("Started using memory range 0x%lx + %lu%s",
                       a1, len, DRD_(running_thread_inside_pthread_create)()
                       ? " (inside pthread_create())" : "");
 
@@ -378,7 +383,7 @@
       DRD_(trace_mem_access)(a1, len, eEnd, 0, 0);
 
    if (!is_stack_mem && s_trace_alloc)
-      DRD_(trace_msg)("Stopped using memory range 0x%lx + %ld",
+      DRD_(trace_msg)("Stopped using memory range 0x%lx + %lu",
                       a1, len);
 
    if (!is_stack_mem || DRD_(get_check_stack_accesses)())
@@ -425,7 +430,7 @@
    const DebugInfo* di;
 
    if (trace_sectsuppr)
-      VG_(dmsg)("Evaluating range @ 0x%lx size %ld\n", a, len);
+      VG_(dmsg)("Evaluating range @ 0x%lx size %lu\n", a, len);
 
    for (di = VG_(next_DebugInfo)(0); di; di = VG_(next_DebugInfo)(di)) {
       Addr  avma;
@@ -446,7 +451,7 @@
       if (size > 0 &&
           VG_(strcmp)(VG_(DebugInfo_get_soname)(di), "libpthread.so.0") == 0) {
 	 if (trace_sectsuppr)
-	    VG_(dmsg)("Suppressing .bss @ 0x%lx size %ld\n", avma, size);
+	    VG_(dmsg)("Suppressing .bss @ 0x%lx size %lu\n", avma, size);
          tl_assert(VG_(DebugInfo_sect_kind)(NULL, avma) == Vg_SectBSS);
          DRD_(start_suppression)(avma, avma + size, ".bss");
       }
@@ -456,7 +461,7 @@
       tl_assert((avma && size) || (avma == 0 && size == 0));
       if (size > 0) {
 	 if (trace_sectsuppr)
-	    VG_(dmsg)("Suppressing .plt @ 0x%lx size %ld\n", avma, size);
+	    VG_(dmsg)("Suppressing .plt @ 0x%lx size %lu\n", avma, size);
          tl_assert(VG_(DebugInfo_sect_kind)(NULL, avma) == Vg_SectPLT);
          DRD_(start_suppression)(avma, avma + size, ".plt");
       }
@@ -466,7 +471,7 @@
       tl_assert((avma && size) || (avma == 0 && size == 0));
       if (size > 0) {
 	 if (trace_sectsuppr)
-	    VG_(dmsg)("Suppressing .got.plt @ 0x%lx size %ld\n", avma, size);
+	    VG_(dmsg)("Suppressing .got.plt @ 0x%lx size %lu\n", avma, size);
          tl_assert(VG_(DebugInfo_sect_kind)(NULL, avma) == Vg_SectGOTPLT);
          DRD_(start_suppression)(avma, avma + size, ".gotplt");
       }
@@ -476,7 +481,7 @@
       tl_assert((avma && size) || (avma == 0 && size == 0));
       if (size > 0) {
 	 if (trace_sectsuppr)
-	    VG_(dmsg)("Suppressing .got @ 0x%lx size %ld\n", avma, size);
+	    VG_(dmsg)("Suppressing .got @ 0x%lx size %lu\n", avma, size);
          tl_assert(VG_(DebugInfo_sect_kind)(NULL, avma) == Vg_SectGOT);
          DRD_(start_suppression)(avma, avma + size, ".got");
       }
@@ -638,7 +643,7 @@
    }
    if (DRD_(thread_get_trace_fork_join)())
    {
-      DRD_(trace_msg)("drd_pre_thread_create creator = %d, created = %d",
+      DRD_(trace_msg)("drd_pre_thread_create creator = %u, created = %u",
                       drd_creator, created);
    }
 }
@@ -663,7 +668,7 @@
 
    if (DRD_(thread_get_trace_fork_join)())
    {
-      DRD_(trace_msg)("drd_post_thread_create created = %d", drd_created);
+      DRD_(trace_msg)("drd_post_thread_create created = %u", drd_created);
    }
    if (! DRD_(get_check_stack_accesses)())
    {
@@ -690,7 +695,7 @@
    tl_assert(drd_tid != DRD_INVALID_THREADID);
    if (DRD_(thread_get_trace_fork_join)())
    {
-      DRD_(trace_msg)("drd_thread_finished tid = %d%s", drd_tid,
+      DRD_(trace_msg)("drd_thread_finished tid = %u%s", drd_tid,
                       DRD_(thread_get_joinable)(drd_tid)
                       ? "" : " (which is a detached thread)");
    }
@@ -700,8 +705,8 @@
          = (DRD_(thread_get_stack_max)(drd_tid)
             - DRD_(thread_get_stack_min_min)(drd_tid));
       VG_(message)(Vg_UserMsg,
-                   "thread %d%s finished and used %ld bytes out of %ld"
-                   " on its stack. Margin: %ld bytes.\n",
+                   "thread %u%s finished and used %lu bytes out of %lu"
+                   " on its stack. Margin: %lu bytes.\n",
                    drd_tid,
                    DRD_(thread_get_joinable)(drd_tid)
                    ? "" : " (which is a detached thread)",
@@ -735,7 +740,7 @@
 
 static void DRD_(post_clo_init)(void)
 {
-#if defined(VGO_linux) || defined(VGO_darwin)
+#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
    /* fine */
 #else
    VG_(printf)("\nWARNING: DRD has not yet been tested on this operating system.\n\n");
@@ -769,47 +774,47 @@
       ULong pu_join   = DRD_(thread_get_update_conflict_set_join_count)();
 
       VG_(message)(Vg_UserMsg,
-                   "   thread: %lld context switches.\n",
+                   "   thread: %llu context switches.\n",
                    DRD_(thread_get_context_switch_count)());
       VG_(message)(Vg_UserMsg,
-                   "confl set: %lld full updates and %lld partial updates;\n",
+                   "confl set: %llu full updates and %llu partial updates;\n",
                    DRD_(thread_get_compute_conflict_set_count)(),
                    pu);
       VG_(message)(Vg_UserMsg,
-                   "           %lld partial updates during segment creation,\n",
+                   "           %llu partial updates during segment creation,\n",
                    pu_seg_cr);
       VG_(message)(Vg_UserMsg,
-                   "           %lld because of mutex/sema/cond.var. operations,\n",
+                   "           %llu because of mutex/sema/cond.var. operations,\n",
                    pu_mtx_cv);
       VG_(message)(Vg_UserMsg,
-                   "           %lld because of barrier/rwlock operations and\n",
+                   "           %llu because of barrier/rwlock operations and\n",
 		   pu - pu_seg_cr - pu_mtx_cv - pu_join);
       VG_(message)(Vg_UserMsg,
-                   "           %lld partial updates because of thread join"
+                   "           %llu partial updates because of thread join"
                    " operations.\n",
                    pu_join);
       VG_(message)(Vg_UserMsg,
-                   " segments: created %lld segments, max %lld alive,\n",
+                   " segments: created %llu segments, max %llu alive,\n",
                    DRD_(sg_get_segments_created_count)(),
                    DRD_(sg_get_max_segments_alive_count)());
       VG_(message)(Vg_UserMsg,
-                   "           %lld discard points and %lld merges.\n",
+                   "           %llu discard points and %llu merges.\n",
                    DRD_(thread_get_discard_ordered_segments_count)(),
                    DRD_(sg_get_segment_merge_count)());
       VG_(message)(Vg_UserMsg,
-                   "segmnt cr: %lld mutex, %lld rwlock, %lld semaphore and"
-                   " %lld barrier.\n",
+                   "segmnt cr: %llu mutex, %llu rwlock, %llu semaphore and"
+                   " %llu barrier.\n",
                    DRD_(get_mutex_segment_creation_count)(),
                    DRD_(get_rwlock_segment_creation_count)(),
                    DRD_(get_semaphore_segment_creation_count)(),
                    DRD_(get_barrier_segment_creation_count)());
       VG_(message)(Vg_UserMsg,
-                   "  bitmaps: %lld level one"
-                   " and %lld level two bitmaps were allocated.\n",
+                   "  bitmaps: %llu level one"
+                   " and %llu level two bitmaps were allocated.\n",
                    DRD_(bm_get_bitmap_creation_count)(),
                    DRD_(bm_get_bitmap2_creation_count)());
       VG_(message)(Vg_UserMsg,
-                   "    mutex: %lld non-recursive lock/unlock events.\n",
+                   "    mutex: %llu non-recursive lock/unlock events.\n",
                    DRD_(get_mutex_lock_count)());
       DRD_(print_malloc_stats)();
    }
@@ -824,7 +829,7 @@
    VG_(details_name)            ("drd");
    VG_(details_version)         (NULL);
    VG_(details_description)     ("a thread error detector");
-   VG_(details_copyright_author)("Copyright (C) 2006-2013, and GNU GPL'd,"
+   VG_(details_copyright_author)("Copyright (C) 2006-2015, and GNU GPL'd,"
                                  " by Bart Van Assche.");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
 
diff --git a/drd/drd_malloc_wrappers.c b/drd/drd_malloc_wrappers.c
index 369936d..e742ed7 100644
--- a/drd/drd_malloc_wrappers.c
+++ b/drd/drd_malloc_wrappers.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_malloc_wrappers.h b/drd/drd_malloc_wrappers.h
index 6a9b6fd..79bb67d 100644
--- a/drd/drd_malloc_wrappers.h
+++ b/drd/drd_malloc_wrappers.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_mutex.c b/drd/drd_mutex.c
index 6500006..4fe30e5 100644
--- a/drd/drd_mutex.c
+++ b/drd/drd_mutex.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -88,7 +88,7 @@
    struct mutex_info* p = DRD_(mutex_get)(mutex);
 
    if (s_trace_mutex)
-      DRD_(trace_msg)("[%d] mutex_ignore_ordering %s 0x%lx",
+      DRD_(trace_msg)("[%u] mutex_ignore_ordering %s 0x%lx",
                       DRD_(thread_get_running_tid)(),
                       p ? DRD_(mutex_type_name)(p->mutex_type) : "(?)",
                       mutex);
@@ -106,7 +106,7 @@
    tl_assert(p);
 
    if (s_trace_mutex)
-      DRD_(trace_msg)("[%d] mutex_destroy   %s 0x%lx rc %d owner %d",
+      DRD_(trace_msg)("[%u] mutex_destroy   %s 0x%lx rc %d owner %u",
                       DRD_(thread_get_running_tid)(),
                       DRD_(mutex_get_typename)(p), p->a1,
                       p ? p->recursion_count : -1,
@@ -197,7 +197,7 @@
    struct mutex_info* p;
 
    if (s_trace_mutex)
-      DRD_(trace_msg)("[%d] mutex_init      %s 0x%lx",
+      DRD_(trace_msg)("[%u] mutex_init      %s 0x%lx",
                       DRD_(thread_get_running_tid)(),
                       DRD_(mutex_type_name)(mutex_type),
                       mutex);
@@ -258,7 +258,7 @@
       mutex_type = p->mutex_type;
 
    if (s_trace_mutex)
-      DRD_(trace_msg)("[%d] %s %s 0x%lx rc %d owner %d",
+      DRD_(trace_msg)("[%u] %s %s 0x%lx rc %d owner %u",
                       DRD_(thread_get_running_tid)(),
                       trylock ? "pre_mutex_lock " : "mutex_trylock  ",
                       p ? DRD_(mutex_get_typename)(p) : "(?)",
@@ -308,7 +308,7 @@
    p = DRD_(mutex_get)(mutex);
 
    if (s_trace_mutex)
-      DRD_(trace_msg)("[%d] %s %s 0x%lx rc %d owner %d%s",
+      DRD_(trace_msg)("[%u] %s %s 0x%lx rc %d owner %u%s",
                       drd_tid,
                       post_cond_wait ? "cond_post_wait " : "post_mutex_lock",
                       p ? DRD_(mutex_get_typename)(p) : "(?)",
@@ -374,7 +374,7 @@
       mutex_type = p->mutex_type;
 
    if (s_trace_mutex) {
-      DRD_(trace_msg)("[%d] mutex_unlock    %s 0x%lx rc %d",
+      DRD_(trace_msg)("[%u] mutex_unlock    %s 0x%lx rc %d",
                       drd_tid, p ? DRD_(mutex_get_typename)(p) : "(?)",
                       mutex, p ? p->recursion_count : 0);
    }
diff --git a/drd/drd_mutex.h b/drd/drd_mutex.h
index 953045a..e2bbc1b 100644
--- a/drd/drd_mutex.h
+++ b/drd/drd_mutex.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_pthread_intercepts.c b/drd/drd_pthread_intercepts.c
index a3119de..2793660 100644
--- a/drd/drd_pthread_intercepts.c
+++ b/drd/drd_pthread_intercepts.c
@@ -5,7 +5,7 @@
 /*
   This file is part of DRD, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -55,17 +55,82 @@
 #include <stdlib.h>         /* malloc(), free() */
 #include <unistd.h>         /* confstr() */
 #include "config.h"         /* HAVE_PTHREAD_MUTEX_ADAPTIVE_NP etc. */
-#ifdef HAVE_USABLE_LINUX_FUTEX_H
-#include <asm/unistd.h>     /* __NR_futex */
-#include <linux/futex.h>    /* FUTEX_WAIT */
-#ifndef FUTEX_PRIVATE_FLAG
-#define FUTEX_PRIVATE_FLAG 0
-#endif
-#endif
 #include "drd_basics.h"     /* DRD_() */
 #include "drd_clientreq.h"
 #include "pub_tool_redir.h" /* VG_WRAP_FUNCTION_ZZ() */
 
+#if defined(VGO_solaris)
+/*
+ * Solaris usually provides pthread_* functions on top of Solaris threading
+ * and synchronization functions. Usually both need to be intercepted because
+ * pthread_* ones might not call the Solaris ones (see for example sem_wait()).
+ * Such approach is required to correctly report misuse of the POSIX threads
+ * API.
+ * Therefore DRD intercepts and instruments all such functions but due to
+ * DRD_(thread_enter_synchr)() and DRD_(thread_leave_synchr)() guards in
+ * handle_client_request(), only the top-most function is handled.
+ * So the right thing(TM) happens, as expected.
+ * The only exception is when pthread_* function is a weak alias to the Solaris
+ * threading/synchronization function. In such case only one needs to be
+ * intercepted to avoid redirection ambiguity.
+ *
+ * Intercepted functions rely on the fact that:
+ *  - pthread_mutex_t  == mutex_t
+ *  - pthread_cond_t   == cond_t
+ *  - sem_t            == sema_t
+ *  - pthread_rwlock_t == rwlock_t
+ *
+ * It is necessary to intercept also internal libc synchronization functions
+ * for two reasons:
+ *  - For read-write locks the unlocking function is shared
+ *  - Functions lmutex_lock/lmutex_unlock guard many critical sections in libc
+ *    which will be otherwise reported by DRD
+ */
+#include <synch.h>
+#include <thread.h>
+#include "pub_tool_vki.h"
+
+/*
+ * Solaris provides higher throughput, parallelism and scalability than other
+ * operating systems, at the cost of more fine-grained locking activity.
+ * This means for example that when a thread is created under Linux, just one
+ * big lock in glibc is used for all thread setup. Solaris libc uses several
+ * fine-grained locks and the creator thread resumes its activities as soon
+ * as possible, leaving for example stack and TLS setup activities to the
+ * created thread.
+ *
+ * This situation confuses DRD as it assumes there is some false ordering
+ * in place between creator and created thread; and therefore many types of
+ * race conditions in the application would not be reported. To prevent such
+ * false ordering, command line option --ignore-thread-creation is set to
+ * 'yes' by default on Solaris. All activity (loads, stores, client requests)
+ * is therefore ignored during:
+ * - pthread_create() call in the creator thread [libc.so]
+ * - thread creation phase (stack and TLS setup) in the created thread [libc.so]
+ *
+ * As explained in the comments for _ti_bind_guard(), whenever the runtime
+ * linker has to perform any activity (such as resolving a symbol), it protects
+ * its data structures by calling into rt_bind_guard() which in turn invokes
+ * _ti_bind_guard() in libc. Pointers to _ti_bind_guard() and _ti_bind_clear()
+ * are passed from libc to runtime linker in _ld_libc() call during libc_init().
+ * All activity is also ignored during:
+ * - runtime dynamic linker work between rt_bind_guard() and rt_bind_clear()
+ *   calls [ld.so]
+ *
+ * This also means that DRD does not report race conditions in libc (when
+ * --ignore-thread-creation=yes) and runtime linker itself (unconditionally)
+ * during these ignored sequences.
+ */
+
+/*
+ * Original function pointers for _ti_bind_guard() and _ti_bind_clear()
+ * from libc. They are intercepted in function wrapper of _ld_libc().
+ */
+typedef int (*drd_rtld_guard_fn)(int flags);
+static drd_rtld_guard_fn DRD_(rtld_bind_guard) = NULL;
+static drd_rtld_guard_fn DRD_(rtld_bind_clear) = NULL;
+#endif
+
 
 /*
  * Notes regarding thread creation:
@@ -101,6 +166,15 @@
 	 fflush(stdout);						\
       return pth_func_result;						\
    }
+#elif defined(VGO_solaris)
+/* On Solaris, libpthread is just a filter library on top of libc.
+ * Threading and synchronization functions in runtime linker are not
+ * intercepted.
+ */
+#define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl)                    \
+   ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl;           \
+   ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl            \
+   { return implf argl; }
 #else
 #define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl)                    \
    ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl;     \
@@ -137,8 +211,8 @@
 
 typedef struct {
    pthread_mutex_t mutex;
+   pthread_cond_t cond;
    int counter;
-   int waiters;
 } DrdSema;
 
 typedef struct
@@ -177,6 +251,15 @@
 {
    DRD_(check_threading_library)();
    DRD_(set_main_thread_state)();
+#if defined(VGO_solaris)
+   if ((DRD_(rtld_bind_guard) == NULL) || (DRD_(rtld_bind_clear) == NULL)) {
+      fprintf(stderr,
+"Bind guard functions for the runtime linker (ld.so.1) were not intercepted.\n"
+"This means the interface between libc and runtime linker changed and DRD\n"
+"needs to be ported properly. Giving up.\n");
+      abort();
+   }
+#endif
 }
 
 static __always_inline void DRD_(ignore_mutex_ordering)(pthread_mutex_t *mutex)
@@ -190,43 +273,21 @@
    DRD_IGNORE_VAR(*sema);
    pthread_mutex_init(&sema->mutex, NULL);
    DRD_(ignore_mutex_ordering)(&sema->mutex);
+   pthread_cond_init(&sema->cond, NULL);
    sema->counter = 0;
-   sema->waiters = 0;
 }
 
 static void DRD_(sema_destroy)(DrdSema* sema)
 {
    pthread_mutex_destroy(&sema->mutex);
+   pthread_cond_destroy(&sema->cond);
 }
 
 static void DRD_(sema_down)(DrdSema* sema)
 {
-   int res = ENOSYS;
-
    pthread_mutex_lock(&sema->mutex);
-   if (sema->counter == 0) {
-      sema->waiters++;
-      while (sema->counter == 0) {
-         pthread_mutex_unlock(&sema->mutex);
-#ifdef HAVE_USABLE_LINUX_FUTEX_H
-         if (syscall(__NR_futex, (UWord)&sema->counter,
-                     FUTEX_WAIT | FUTEX_PRIVATE_FLAG, 0) == 0)
-            res = 0;
-         else
-            res = errno;
-#endif
-         /*
-          * Invoke sched_yield() on non-Linux systems, if the futex syscall has
-          * not been invoked or if this code has been built on a Linux system
-          * where __NR_futex is defined and is run on a Linux system that does
-          * not support the futex syscall.
-          */
-         if (res != 0 && res != EWOULDBLOCK)
-            sched_yield();
-         pthread_mutex_lock(&sema->mutex);
-      }
-      sema->waiters--;
-   }
+   while (sema->counter == 0)
+      pthread_cond_wait(&sema->cond, &sema->mutex);
    sema->counter--;
    pthread_mutex_unlock(&sema->mutex);
 }
@@ -235,11 +296,7 @@
 {
    pthread_mutex_lock(&sema->mutex);
    sema->counter++;
-#ifdef HAVE_USABLE_LINUX_FUTEX_H
-   if (sema->waiters > 0)
-      syscall(__NR_futex, (UWord)&sema->counter,
-              FUTEX_WAKE | FUTEX_PRIVATE_FLAG, 1);
-#endif
+   pthread_cond_signal(&sema->cond);
    pthread_mutex_unlock(&sema->mutex);
 }
 
@@ -275,6 +332,23 @@
       return mutex_type_invalid_mutex;
 }
 
+#if defined(VGO_solaris)
+/**
+ * Solaris threads and DRD each have their own mutex type identification.
+ * Convert Solaris threads' mutex type to DRD's mutex type.
+ */
+static MutexT DRD_(thread_to_drd_mutex_type)(int type)
+{
+   if (type & LOCK_RECURSIVE) {
+      return mutex_type_recursive_mutex;
+   } else if (type & LOCK_ERRORCHECK) {
+      return mutex_type_errorcheck_mutex;
+   } else {
+      return mutex_type_default_mutex;
+   }
+}
+#endif /* VGO_solaris */
+
 #define IS_ALIGNED(p) (((uintptr_t)(p) & (sizeof(*(p)) - 1)) == 0)
 
 /**
@@ -306,6 +380,9 @@
       const int kind = mutex->__data.__kind & 3;
       return DRD_(pthread_to_drd_mutex_type)(kind);
    }
+#elif defined(VGO_solaris)
+      const int type = ((mutex_t *) mutex)->vki_mutex_type;
+      return DRD_(thread_to_drd_mutex_type)(type);
 #else
    /*
     * Another POSIX threads implementation. The mutex type won't be printed
@@ -503,6 +580,113 @@
            void *(*start) (void *), void *arg),
           (thread, attr, start, arg));
 
+#if defined(VGO_solaris)
+/* Solaris also provides thr_create() in addition to pthread_create().
+ * Both pthread_create(3C) and thr_create(3C) are based on private
+ * _thrp_create().
+ */
+static __always_inline
+int thr_create_intercept(void *stk, size_t stksize, void *(*start)(void *),
+                         void *arg, long flags, thread_t *new_thread)
+{
+   int                ret;
+   OrigFn             fn;
+   DrdSema            wrapper_started;
+   DrdPosixThreadArgs thread_args;
+
+   VALGRIND_GET_ORIG_FN(fn);
+
+   DRD_(sema_init)(&wrapper_started);
+   thread_args.start           = start;
+   thread_args.arg             = arg;
+   thread_args.wrapper_started = &wrapper_started;
+   /*
+    * Find out whether the thread will be started as a joinable thread
+    * or as a detached thread.
+    */
+   if (flags & THR_DETACHED)
+      thread_args.detachstate = PTHREAD_CREATE_DETACHED;
+   else
+      thread_args.detachstate = PTHREAD_CREATE_JOINABLE;
+
+   DRD_(entering_pthread_create)();
+   CALL_FN_W_6W(ret, fn, stk, stksize, DRD_(thread_wrapper), &thread_args,
+                flags, new_thread);
+   DRD_(left_pthread_create)();
+
+   if (ret == 0) {
+      /* Wait until the thread wrapper started. */
+      DRD_(sema_down)(&wrapper_started);
+   }
+
+   DRD_(sema_destroy)(&wrapper_started);
+
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DRD_START_NEW_SEGMENT,
+                                   pthread_self(), 0, 0, 0, 0);
+
+   return ret;
+}
+
+PTH_FUNCS(int, thrZucreate, thr_create_intercept,
+          (void *stk, size_t stksize, void *(*start)(void *), void *arg,
+           long flags, thread_t *new_thread),
+          (stk, stksize, start, arg, flags, new_thread));
+#endif /* VGO_solaris */
+
+#if defined(VGO_solaris)
+/*
+ * Intercepts for _ti_bind_guard() and _ti_bind_clear() functions from libc.
+ * These are intercepted during _ld_libc() call by identifying CI_BIND_GUARD
+ * and CI_BIND_CLEAR, to provide resilience against function renaming.
+ */
+static __always_inline
+int DRD_(_ti_bind_guard_intercept)(int flags) {
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__RTLD_BIND_GUARD,
+                                   flags, 0, 0, 0, 0);
+   return DRD_(rtld_bind_guard)(flags);
+}
+
+static __always_inline
+int DRD_(_ti_bind_clear_intercept)(int flags) {
+   int ret = DRD_(rtld_bind_clear)(flags);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__RTLD_BIND_CLEAR,
+                                   flags, 0, 0, 0, 0);
+   return ret;
+}
+
+/*
+ * Wrapped _ld_libc() from the runtime linker ld.so.1.
+ */
+void VG_WRAP_FUNCTION_ZZ(VG_Z_LD_SO_1, ZuldZulibc)(vki_Lc_interface *ptr);
+void VG_WRAP_FUNCTION_ZZ(VG_Z_LD_SO_1, ZuldZulibc)(vki_Lc_interface *ptr)
+{
+   OrigFn fn;
+   int    tag;
+
+   VALGRIND_GET_ORIG_FN(fn);
+
+   vki_Lc_interface *funcs = ptr;
+   for (tag = funcs->ci_tag; tag != 0; tag = (++funcs)->ci_tag) {
+      switch (tag) {
+      case VKI_CI_BIND_GUARD:
+         if (funcs->vki_ci_un.ci_func != DRD_(_ti_bind_guard_intercept)) {
+            DRD_(rtld_bind_guard) = funcs->vki_ci_un.ci_func;
+            funcs->vki_ci_un.ci_func = DRD_(_ti_bind_guard_intercept);
+         }
+         break;
+      case VKI_CI_BIND_CLEAR:
+         if (funcs->vki_ci_un.ci_func != DRD_(_ti_bind_clear_intercept)) {
+            DRD_(rtld_bind_clear) = funcs->vki_ci_un.ci_func;
+            funcs->vki_ci_un.ci_func = DRD_(_ti_bind_clear_intercept);
+         }
+         break;
+      }
+   }
+
+   CALL_FN_v_W(fn, ptr);
+}
+#endif /* VGO_solaris */
+
 static __always_inline
 int pthread_join_intercept(pthread_t pt_joinee, void **thread_return)
 {
@@ -529,6 +713,34 @@
           (pthread_t pt_joinee, void **thread_return),
           (pt_joinee, thread_return));
 
+#if defined(VGO_solaris)
+/* Solaris also provides thr_join() in addition to pthread_join().
+ * Both pthread_join(3C) and thr_join(3C) are based on private _thrp_join().
+ *
+ * :TODO: No functionality is currently provided for joinee == 0 and departed.
+ *        This would require another client request, of course.
+ */
+static __always_inline
+int thr_join_intercept(thread_t joinee, thread_t *departed, void **thread_return)
+{
+   int      ret;
+   OrigFn   fn;
+
+   VALGRIND_GET_ORIG_FN(fn);
+   CALL_FN_W_WWW(ret, fn, joinee, departed, thread_return);
+   if (ret == 0)
+   {
+      VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_THREAD_JOIN,
+                                      joinee, 0, 0, 0, 0);
+   }
+   return ret;
+}
+
+PTH_FUNCS(int, thrZujoin, thr_join_intercept,
+          (thread_t joinee, thread_t *departed, void **thread_return),
+          (joinee, departed, thread_return));
+#endif /* VGO_solaris */
+
 static __always_inline
 int pthread_detach_intercept(pthread_t pt_thread)
 {
@@ -613,6 +825,28 @@
           (pthread_mutex_t *mutex, const pthread_mutexattr_t* attr),
           (mutex, attr));
 
+#if defined(VGO_solaris)
+static __always_inline
+int mutex_init_intercept(mutex_t *mutex, int type, void *arg)
+{
+   int ret;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_MUTEX_INIT,
+                                   mutex, DRD_(thread_to_drd_mutex_type)(type),
+                                   0, 0, 0);
+   CALL_FN_W_WWW(ret, fn, mutex, type, arg);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_MUTEX_INIT,
+                                   mutex, 0, 0, 0, 0);
+   return ret;
+}
+
+PTH_FUNCS(int, mutexZuinit, mutex_init_intercept,
+          (mutex_t *mutex, int type, void *arg),
+          (mutex, type, arg));
+#endif /* VGO_solaris */
+
 static __always_inline
 int pthread_mutex_destroy_intercept(pthread_mutex_t* mutex)
 {
@@ -627,8 +861,14 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_mutex_destroy is a weak alias to mutex_destroy. */
+PTH_FUNCS(int, mutexZudestroy, pthread_mutex_destroy_intercept,
+          (pthread_mutex_t *mutex), (mutex));
+#else
 PTH_FUNCS(int, pthreadZumutexZudestroy, pthread_mutex_destroy_intercept,
           (pthread_mutex_t *mutex), (mutex));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_mutex_lock_intercept(pthread_mutex_t* mutex)
@@ -644,8 +884,36 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_mutex_lock is a weak alias to mutex_lock. */
+PTH_FUNCS(int, mutexZulock, pthread_mutex_lock_intercept,
+          (pthread_mutex_t *mutex), (mutex));
+#else
 PTH_FUNCS(int, pthreadZumutexZulock, pthread_mutex_lock_intercept,
           (pthread_mutex_t *mutex), (mutex));
+#endif /* VGO_solaris */
+
+#if defined(VGO_solaris)
+/* Internal to libc. Mutex is usually initialized only implicitly,
+ * by zeroing mutex_t structure.
+ */
+static __always_inline
+void lmutex_lock_intercept(mutex_t *mutex)
+{
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_MUTEX_LOCK,
+                                   mutex,
+                                   DRD_(mutex_type)((pthread_mutex_t *) mutex),
+                                   False /* try_lock */, 0, 0);
+   CALL_FN_v_W(fn, mutex);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_MUTEX_LOCK,
+                                   mutex, True /* took_lock */, 0, 0, 0);
+}
+
+PTH_FUNCS(void, lmutexZulock, lmutex_lock_intercept,
+          (mutex_t *mutex), (mutex));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_mutex_trylock_intercept(pthread_mutex_t* mutex)
@@ -661,8 +929,14 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_mutex_trylock is a weak alias to mutex_trylock. */
+PTH_FUNCS(int, mutexZutrylock, pthread_mutex_trylock_intercept,
+          (pthread_mutex_t *mutex), (mutex));
+#else
 PTH_FUNCS(int, pthreadZumutexZutrylock, pthread_mutex_trylock_intercept,
           (pthread_mutex_t *mutex), (mutex));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_mutex_timedlock_intercept(pthread_mutex_t *mutex,
@@ -682,6 +956,12 @@
 PTH_FUNCS(int, pthreadZumutexZutimedlock, pthread_mutex_timedlock_intercept,
           (pthread_mutex_t *mutex, const struct timespec *abs_timeout),
           (mutex, abs_timeout));
+#if defined(VGO_solaris)
+PTH_FUNCS(int,
+          pthreadZumutexZureltimedlockZunp, pthread_mutex_timedlock_intercept,
+          (pthread_mutex_t *mutex, const struct timespec *timeout),
+          (mutex, timeout));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_mutex_unlock_intercept(pthread_mutex_t *mutex)
@@ -697,8 +977,34 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_mutex_unlock is a weak alias to mutex_unlock. */
+PTH_FUNCS(int, mutexZuunlock, pthread_mutex_unlock_intercept,
+          (pthread_mutex_t *mutex), (mutex));
+#else
 PTH_FUNCS(int, pthreadZumutexZuunlock, pthread_mutex_unlock_intercept,
           (pthread_mutex_t *mutex), (mutex));
+#endif /* VGO_solaris */
+
+#if defined(VGO_solaris)
+/* Internal to libc. */
+static __always_inline
+void lmutex_unlock_intercept(mutex_t *mutex)
+{
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_MUTEX_UNLOCK,
+                                   mutex,
+                                   DRD_(mutex_type)((pthread_mutex_t *) mutex),
+                                   0, 0, 0);
+   CALL_FN_v_W(fn, mutex);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_MUTEX_UNLOCK,
+                                   mutex, 0, 0, 0, 0);
+}
+
+PTH_FUNCS(void, lmutexZuunlock, lmutex_unlock_intercept,
+          (mutex_t *mutex), (mutex));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_cond_init_intercept(pthread_cond_t* cond,
@@ -719,6 +1025,26 @@
           (pthread_cond_t* cond, const pthread_condattr_t* attr),
           (cond, attr));
 
+#if defined(VGO_solaris)
+static __always_inline
+int cond_init_intercept(cond_t *cond, int type, void *arg)
+{
+   int ret;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_COND_INIT,
+                                   cond, 0, 0, 0, 0);
+   CALL_FN_W_WWW(ret, fn, cond, type, arg);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_COND_INIT,
+                                   cond, 0, 0, 0, 0);
+   return ret;
+}
+
+PTH_FUNCS(int, condZuinit, cond_init_intercept,
+          (cond_t *cond, int type, void *arg),
+          (cond, type, arg));
+#endif /* VGO_solaris */
+
 static __always_inline
 int pthread_cond_destroy_intercept(pthread_cond_t* cond)
 {
@@ -733,8 +1059,14 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_cond_destroy is a weak alias to cond_destroy. */
+PTH_FUNCS(int, condZudestroy, pthread_cond_destroy_intercept,
+          (pthread_cond_t *cond), (cond));
+#else
 PTH_FUNCS(int, pthreadZucondZudestroy, pthread_cond_destroy_intercept,
           (pthread_cond_t* cond), (cond));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_cond_wait_intercept(pthread_cond_t *cond, pthread_mutex_t *mutex)
@@ -753,6 +1085,11 @@
 PTH_FUNCS(int, pthreadZucondZuwait, pthread_cond_wait_intercept,
           (pthread_cond_t *cond, pthread_mutex_t *mutex),
           (cond, mutex));
+#if defined(VGO_solaris)
+PTH_FUNCS(int, condZuwait, pthread_cond_wait_intercept,
+          (pthread_cond_t *cond, pthread_mutex_t *mutex),
+          (cond, mutex));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_cond_timedwait_intercept(pthread_cond_t *cond,
@@ -774,6 +1111,16 @@
           (pthread_cond_t *cond, pthread_mutex_t *mutex,
            const struct timespec* abstime),
           (cond, mutex, abstime));
+#if defined(VGO_solaris)
+PTH_FUNCS(int, condZutimedwait, pthread_cond_timedwait_intercept,
+          (pthread_cond_t *cond, pthread_mutex_t *mutex,
+           const struct timespec *timeout),
+          (cond, mutex, timeout));
+PTH_FUNCS(int, condZureltimedwait, pthread_cond_timedwait_intercept,
+          (pthread_cond_t *cond, pthread_mutex_t *mutex,
+           const struct timespec *timeout),
+          (cond, mutex, timeout));
+#endif /* VGO_solaris */
 
 // NOTE: be careful to intercept only pthread_cond_signal() and not Darwin's
 // pthread_cond_signal_thread_np(). The former accepts one argument; the latter
@@ -795,8 +1142,14 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_cond_signal is a weak alias to cond_signal. */
+PTH_FUNCS(int, condZusignal, pthread_cond_signal_intercept,
+          (pthread_cond_t *cond), (cond));
+#else
 PTH_FUNCS(int, pthreadZucondZusignal, pthread_cond_signal_intercept,
           (pthread_cond_t* cond), (cond));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_cond_broadcast_intercept(pthread_cond_t* cond)
@@ -812,8 +1165,14 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_cond_broadcast is a weak alias to cond_broadcast. */
+PTH_FUNCS(int, condZubroadcast, pthread_cond_broadcast_intercept,
+          (pthread_cond_t *cond), (cond));
+#else
 PTH_FUNCS(int, pthreadZucondZubroadcast, pthread_cond_broadcast_intercept,
           (pthread_cond_t* cond), (cond));
+#endif /* VGO_solaris */
 
 #if defined(HAVE_PTHREAD_SPIN_LOCK) \
     && !defined(DISABLE_PTHREAD_SPINLOCK_INTERCEPT)
@@ -980,6 +1339,27 @@
 PTH_FUNCS(int, semZuinit, sem_init_intercept,
           (sem_t *sem, int pshared, unsigned int value), (sem, pshared, value));
 
+#if defined(VGO_solaris)
+static __always_inline
+int sema_init_intercept(sema_t *sem, unsigned int value, int type, void *arg)
+{
+   int   ret;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_SEM_INIT,
+                                   sem, type == USYNC_PROCESS ? 1 : 0,
+                                   value, 0, 0);
+   CALL_FN_W_WWWW(ret, fn, sem, value, type, arg);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_SEM_INIT,
+                                   sem, 0, 0, 0, 0);
+   return ret;
+}
+
+PTH_FUNCS(int, semaZuinit, sema_init_intercept,
+          (sema_t *sem, unsigned int value, int type, void *arg),
+          (sem, value, type, arg));
+#endif /* VGO_solaris */
+
 static __always_inline
 int sem_destroy_intercept(sem_t *sem)
 {
@@ -995,6 +1375,9 @@
 }
 
 PTH_FUNCS(int, semZudestroy, sem_destroy_intercept, (sem_t *sem), (sem));
+#if defined(VGO_solaris)
+PTH_FUNCS(int, semaZudestroy, sem_destroy_intercept, (sem_t *sem), (sem));
+#endif /* VGO_solaris */
 
 static __always_inline
 sem_t* sem_open_intercept(const char *name, int oflag, mode_t mode,
@@ -1045,6 +1428,9 @@
 }
 
 PTH_FUNCS(int, semZuwait, sem_wait_intercept, (sem_t *sem), (sem));
+#if defined(VGO_solaris)
+PTH_FUNCS(int, semaZuwait, sem_wait_intercept, (sem_t *sem), (sem));
+#endif /* VGO_solaris */
 
 static __always_inline int sem_trywait_intercept(sem_t *sem)
 {
@@ -1060,6 +1446,9 @@
 }
 
 PTH_FUNCS(int, semZutrywait, sem_trywait_intercept, (sem_t *sem), (sem));
+#if defined(VGO_solaris)
+PTH_FUNCS(int, semaZutrywait, sem_trywait_intercept, (sem_t *sem), (sem));
+#endif /* VGO_solaris */
 
 static __always_inline
 int sem_timedwait_intercept(sem_t *sem, const struct timespec *abs_timeout)
@@ -1078,6 +1467,14 @@
 PTH_FUNCS(int, semZutimedwait, sem_timedwait_intercept,
           (sem_t *sem, const struct timespec *abs_timeout),
           (sem, abs_timeout));
+#if defined(VGO_solaris)
+PTH_FUNCS(int, semaZutimedwait, sem_timedwait_intercept,
+          (sem_t *sem, const struct timespec *timeout),
+          (sem, timeout));
+PTH_FUNCS(int, semaZureltimedwait, sem_timedwait_intercept,
+          (sem_t *sem, const struct timespec *timeout),
+          (sem, timeout));
+#endif /* VGO_solaris */
 
 static __always_inline int sem_post_intercept(sem_t *sem)
 {
@@ -1093,6 +1490,9 @@
 }
 
 PTH_FUNCS(int, semZupost, sem_post_intercept, (sem_t *sem), (sem));
+#if defined(VGO_solaris)
+PTH_FUNCS(int, semaZupost, sem_post_intercept, (sem_t *sem), (sem));
+#endif /* VGO_solaris */
 
 /* Android's pthread.h doesn't say anything about rwlocks, hence these
    functions have to be conditionally compiled. */
@@ -1118,6 +1518,26 @@
           (pthread_rwlock_t* rwlock, const pthread_rwlockattr_t* attr),
           (rwlock, attr));
 
+#if defined(VGO_solaris)
+static __always_inline
+int rwlock_init_intercept(rwlock_t *rwlock, int type, void *arg)
+{
+   int   ret;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_RWLOCK_INIT,
+                                   rwlock, 0, 0, 0, 0);
+   CALL_FN_W_WWW(ret, fn, rwlock, type, arg);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_RWLOCK_INIT,
+                                   rwlock, 0, 0, 0, 0);
+   return ret;
+}
+
+PTH_FUNCS(int, rwlockZuinit, rwlock_init_intercept,
+          (rwlock_t *rwlock, int type, void *arg),
+          (rwlock, type, arg));
+#endif /* VGO_solaris */
+
 static __always_inline
 int pthread_rwlock_destroy_intercept(pthread_rwlock_t* rwlock)
 {
@@ -1132,9 +1552,16 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_rwlock_destroy is a weak alias to rwlock_destroy. */
+PTH_FUNCS(int,
+          rwlockZudestroy, pthread_rwlock_destroy_intercept,
+          (pthread_rwlock_t *rwlock), (rwlock));
+#else
 PTH_FUNCS(int,
           pthreadZurwlockZudestroy, pthread_rwlock_destroy_intercept,
           (pthread_rwlock_t* rwlock), (rwlock));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_rwlock_rdlock_intercept(pthread_rwlock_t* rwlock)
@@ -1150,9 +1577,34 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_rwlock_rdlock is a weak alias to rw_rdlock. */
+PTH_FUNCS(int,
+          rwZurdlock, pthread_rwlock_rdlock_intercept,
+          (pthread_rwlock_t *rwlock), (rwlock));
+#else
 PTH_FUNCS(int,
           pthreadZurwlockZurdlock, pthread_rwlock_rdlock_intercept,
           (pthread_rwlock_t* rwlock), (rwlock));
+#endif /* VGO_solaris */
+
+#if defined(VGO_solaris)
+/* Internal to libc. */
+static __always_inline
+void lrw_rdlock_intercept(rwlock_t *rwlock)
+{
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_RWLOCK_RDLOCK,
+                                   rwlock, 0, 0, 0, 0);
+   CALL_FN_v_W(fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_RWLOCK_RDLOCK,
+                                   rwlock, True /* took_lock */, 0, 0, 0);
+}
+
+PTH_FUNCS(void, lrwZurdlock, lrw_rdlock_intercept,
+          (rwlock_t *rwlock), (rwlock));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_rwlock_wrlock_intercept(pthread_rwlock_t* rwlock)
@@ -1168,9 +1620,34 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_rwlock_wrlock is a weak alias to rw_wrlock. */
+PTH_FUNCS(int,
+          rwZuwrlock, pthread_rwlock_wrlock_intercept,
+          (pthread_rwlock_t *rwlock), (rwlock));
+#else
 PTH_FUNCS(int,
           pthreadZurwlockZuwrlock, pthread_rwlock_wrlock_intercept,
           (pthread_rwlock_t* rwlock), (rwlock));
+#endif /* VGO_solaris */
+
+#if defined(VGO_solaris)
+/* Internal to libc. */
+static __always_inline
+void lrw_wrlock_intercept(rwlock_t *rwlock)
+{
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_RWLOCK_WRLOCK,
+                                   rwlock, 0, 0, 0, 0);
+   CALL_FN_v_W(fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_RWLOCK_WRLOCK,
+                                   rwlock, True /* took_lock */, 0, 0, 0);
+}
+
+PTH_FUNCS(void, lrwZuwrlock, lrw_wrlock_intercept,
+          (rwlock_t *rwlock), (rwlock));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_rwlock_timedrdlock_intercept(pthread_rwlock_t* rwlock,
@@ -1191,6 +1668,12 @@
           pthreadZurwlockZutimedrdlock, pthread_rwlock_timedrdlock_intercept,
           (pthread_rwlock_t* rwlock, const struct timespec *timeout),
           (rwlock, timeout));
+#if defined(VGO_solaris)
+PTH_FUNCS(int, pthreadZurwlockZureltimedrdlockZunp,
+          pthread_rwlock_timedrdlock_intercept,
+          (pthread_rwlock_t *rwlock, const struct timespec *timeout),
+          (rwlock, timeout));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_rwlock_timedwrlock_intercept(pthread_rwlock_t* rwlock,
@@ -1211,6 +1694,12 @@
           pthreadZurwlockZutimedwrlock, pthread_rwlock_timedwrlock_intercept,
           (pthread_rwlock_t* rwlock, const struct timespec *timeout),
           (rwlock, timeout));
+#if defined(VGO_solaris)
+PTH_FUNCS(int, pthreadZurwlockZureltimedwrlockZunp,
+          pthread_rwlock_timedwrlock_intercept,
+          (pthread_rwlock_t *rwlock, const struct timespec *timeout),
+          (rwlock, timeout));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_rwlock_tryrdlock_intercept(pthread_rwlock_t* rwlock)
@@ -1226,9 +1715,16 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_rwlock_tryrdlock is a weak alias to rw_tryrdlock. */
+PTH_FUNCS(int,
+          rwZutryrdlock, pthread_rwlock_tryrdlock_intercept,
+          (pthread_rwlock_t *rwlock), (rwlock));
+#else
 PTH_FUNCS(int,
           pthreadZurwlockZutryrdlock, pthread_rwlock_tryrdlock_intercept,
           (pthread_rwlock_t* rwlock), (rwlock));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_rwlock_trywrlock_intercept(pthread_rwlock_t* rwlock)
@@ -1244,9 +1740,16 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_rwlock_trywrlock is a weak alias to rw_trywrlock. */
+PTH_FUNCS(int,
+          rwZutrywrlock, pthread_rwlock_trywrlock_intercept,
+          (pthread_rwlock_t *rwlock), (rwlock));
+#else
 PTH_FUNCS(int,
           pthreadZurwlockZutrywrlock, pthread_rwlock_trywrlock_intercept,
           (pthread_rwlock_t* rwlock), (rwlock));
+#endif /* VGO_solaris */
 
 static __always_inline
 int pthread_rwlock_unlock_intercept(pthread_rwlock_t* rwlock)
@@ -1262,8 +1765,15 @@
    return ret;
 }
 
+#if defined(VGO_solaris)
+/* On Solaris, pthread_rwlock_unlock is a weak alias to rw_unlock. */
+PTH_FUNCS(int,
+          rwZuunlock, pthread_rwlock_unlock_intercept,
+          (pthread_rwlock_t *rwlock), (rwlock));
+#else
 PTH_FUNCS(int,
           pthreadZurwlockZuunlock, pthread_rwlock_unlock_intercept,
           (pthread_rwlock_t* rwlock), (rwlock));
+#endif /* VGO_solaris */
 
 #endif /* defined(HAVE_PTHREAD_RWLOCK_T) */
diff --git a/drd/drd_qtcore_intercepts.c b/drd/drd_qtcore_intercepts.c
index 85c5a53..9a6b8e9 100644
--- a/drd/drd_qtcore_intercepts.c
+++ b/drd/drd_qtcore_intercepts.c
@@ -5,7 +5,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_rwlock.c b/drd/drd_rwlock.c
index db589a0..30c0f20 100644
--- a/drd/drd_rwlock.c
+++ b/drd/drd_rwlock.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -244,7 +244,7 @@
    tl_assert(p);
 
    if (DRD_(s_trace_rwlock))
-      DRD_(trace_msg)("[%d] rwlock_destroy     0x%lx",
+      DRD_(trace_msg)("[%u] rwlock_destroy     0x%lx",
                       DRD_(thread_get_running_tid)(), p->a1);
 
    if (DRD_(rwlock_is_locked)(p))
@@ -313,7 +313,7 @@
    struct rwlock_info* p;
 
    if (DRD_(s_trace_rwlock))
-      DRD_(trace_msg)("[%d] rwlock_init        0x%lx",
+      DRD_(trace_msg)("[%u] rwlock_init        0x%lx",
                       DRD_(thread_get_running_tid)(), rwlock);
 
    p = DRD_(rwlock_get)(rwlock);
@@ -374,7 +374,7 @@
    struct rwlock_info* p;
 
    if (DRD_(s_trace_rwlock))
-      DRD_(trace_msg)("[%d] pre_rwlock_rdlock  0x%lx",
+      DRD_(trace_msg)("[%u] pre_rwlock_rdlock  0x%lx",
                       DRD_(thread_get_running_tid)(), rwlock);
 
    p = DRD_(rwlock_get_or_allocate)(rwlock, rwlock_type);
@@ -403,7 +403,7 @@
    struct rwlock_thread_info* q;
 
    if (DRD_(s_trace_rwlock))
-      DRD_(trace_msg)("[%d] post_rwlock_rdlock 0x%lx", drd_tid, rwlock);
+      DRD_(trace_msg)("[%u] post_rwlock_rdlock 0x%lx", drd_tid, rwlock);
 
    p = DRD_(rwlock_get)(rwlock);
 
@@ -437,7 +437,7 @@
    p = DRD_(rwlock_get)(rwlock);
 
    if (DRD_(s_trace_rwlock))
-      DRD_(trace_msg)("[%d] pre_rwlock_wrlock  0x%lx",
+      DRD_(trace_msg)("[%u] pre_rwlock_wrlock  0x%lx",
                       DRD_(thread_get_running_tid)(), rwlock);
 
    if (p == 0)
@@ -471,7 +471,7 @@
    p = DRD_(rwlock_get)(rwlock);
 
    if (DRD_(s_trace_rwlock))
-      DRD_(trace_msg)("[%d] post_rwlock_wrlock 0x%lx", drd_tid, rwlock);
+      DRD_(trace_msg)("[%u] post_rwlock_wrlock 0x%lx", drd_tid, rwlock);
 
    if (! p || ! took_lock)
       return;
@@ -506,7 +506,7 @@
    struct rwlock_thread_info* q;
 
    if (DRD_(s_trace_rwlock))
-      DRD_(trace_msg)("[%d] rwlock_unlock      0x%lx", drd_tid, rwlock);
+      DRD_(trace_msg)("[%u] rwlock_unlock      0x%lx", drd_tid, rwlock);
 
    p = DRD_(rwlock_get)(rwlock);
    if (p == 0)
diff --git a/drd/drd_rwlock.h b/drd/drd_rwlock.h
index dc10da0..8728c9c 100644
--- a/drd/drd_rwlock.h
+++ b/drd/drd_rwlock.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_segment.c b/drd/drd_segment.c
index a625f47..a6c0bbc 100644
--- a/drd/drd_segment.c
+++ b/drd/drd_segment.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -97,7 +97,7 @@
       HChar* vc;
 
       vc = DRD_(vc_aprint)(&sg->vc);
-      VG_(message)(Vg_DebugMsg, "New segment for thread %d with vc %s\n",
+      VG_(message)(Vg_DebugMsg, "New segment for thread %u with vc %s\n",
                    created, vc);
       VG_(free)(vc);
    }
diff --git a/drd/drd_segment.h b/drd/drd_segment.h
index 121010a..de265db 100644
--- a/drd/drd_segment.h
+++ b/drd/drd_segment.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_semaphore.c b/drd/drd_semaphore.c
index 40662b9..f5bad6c 100644
--- a/drd/drd_semaphore.c
+++ b/drd/drd_semaphore.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -90,7 +90,7 @@
 
 /**
  * Initialize the memory 'p' points at as a semaphore_info structure for the
- * client semaphore at client addres 'semaphore'.
+ * client semaphore at client address 'semaphore'.
  */
 static
 void drd_semaphore_initialize(struct semaphore_info* const p,
@@ -174,7 +174,7 @@
    Segment* sg;
 
    if (s_trace_semaphore)
-      DRD_(trace_msg)("[%d] sem_init      0x%lx value %u",
+      DRD_(trace_msg)("[%u] sem_init      0x%lx value %u",
                       DRD_(thread_get_running_tid)(), semaphore, value);
 
    p = semaphore_get(semaphore);
@@ -222,7 +222,7 @@
    p = semaphore_get(semaphore);
 
    if (s_trace_semaphore)
-      DRD_(trace_msg)("[%d] sem_destroy   0x%lx value %u",
+      DRD_(trace_msg)("[%u] sem_destroy   0x%lx value %u",
                       DRD_(thread_get_running_tid)(), semaphore,
                       p ? p->value : 0);
 
@@ -252,10 +252,10 @@
    Segment* sg;
 
    if (s_trace_semaphore)
-      DRD_(trace_msg)("[%d] sem_open      0x%lx name %s"
+      DRD_(trace_msg)("[%u] sem_open      0x%lx name %s"
                       " oflag %#lx mode %#lo value %u",
                       DRD_(thread_get_running_tid)(),
-                      semaphore, name, oflag, mode, value);
+                      semaphore, name, (UWord)oflag, (UWord)mode, value);
 
    /* Return if the sem_open() call failed. */
    if (! semaphore)
@@ -295,7 +295,7 @@
    p = semaphore_get(semaphore);
 
    if (s_trace_semaphore)
-      DRD_(trace_msg)("[%d] sem_close     0x%lx value %u",
+      DRD_(trace_msg)("[%u] sem_close     0x%lx value %u",
                       DRD_(thread_get_running_tid)(), semaphore,
                       p ? p->value : 0);
 
@@ -350,7 +350,7 @@
    tl_assert(waited == 0 || waited == 1);
    p = semaphore_get(semaphore);
    if (s_trace_semaphore)
-      DRD_(trace_msg)("[%d] sem_wait      0x%lx value %u -> %u%s",
+      DRD_(trace_msg)("[%u] sem_wait      0x%lx value %u -> %u%s",
                       DRD_(thread_get_running_tid)(), semaphore,
                       p ? p->value : 0, p ? p->value - waited : 0,
 		      waited ? "" : " (did not wait)");
@@ -409,7 +409,7 @@
    p->value++;
 
    if (s_trace_semaphore)
-      DRD_(trace_msg)("[%d] sem_post      0x%lx value %u -> %u",
+      DRD_(trace_msg)("[%u] sem_post      0x%lx value %u -> %u",
                       DRD_(thread_get_running_tid)(),
                       semaphore, p->value - 1, p->value);
 
diff --git a/drd/drd_semaphore.h b/drd/drd_semaphore.h
index 3172cec..aa6b6f3 100644
--- a/drd/drd_semaphore.h
+++ b/drd/drd_semaphore.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_strmem_intercepts.c b/drd/drd_strmem_intercepts.c
index 139117c..a538134 100644
--- a/drd/drd_strmem_intercepts.c
+++ b/drd/drd_strmem_intercepts.c
@@ -9,7 +9,7 @@
   from memchec/mc_replace_strmem.c, which has the following copyright
   notice:
 
-  Copyright (C) 2000-2013 Julian Seward
+  Copyright (C) 2000-2015 Julian Seward
   jseward@acm.org
 
   This program is free software; you can redistribute it and/or
diff --git a/drd/drd_suppression.c b/drd/drd_suppression.c
index 6d88434..c879078 100644
--- a/drd/drd_suppression.c
+++ b/drd/drd_suppression.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -63,7 +63,7 @@
                              const HChar* const reason)
 {
    if (s_trace_suppression)
-      VG_(message)(Vg_DebugMsg, "start suppression of 0x%lx sz %ld (%s)\n",
+      VG_(message)(Vg_DebugMsg, "start suppression of 0x%lx sz %lu (%s)\n",
                    a1, a2 - a1, reason);
 
    tl_assert(a1 <= a2);
@@ -73,7 +73,7 @@
 void DRD_(finish_suppression)(const Addr a1, const Addr a2)
 {
    if (s_trace_suppression) {
-      VG_(message)(Vg_DebugMsg, "finish suppression of 0x%lx sz %ld\n",
+      VG_(message)(Vg_DebugMsg, "finish suppression of 0x%lx sz %lu\n",
                    a1, a2 - a1);
       VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(), 12);
    }
@@ -122,7 +122,7 @@
    tl_assert(a1 <= a2);
 
    if (s_trace_suppression)
-      VG_(message)(Vg_DebugMsg, "start_tracing(0x%lx, %ld) %s\n",
+      VG_(message)(Vg_DebugMsg, "start_tracing(0x%lx, %lu) %s\n",
                    a1, a2 - a1, persistent ? "persistent" : "non-persistent");
 
    DRD_(bm_access_range_load)(s_traced, a1, a2);
@@ -140,7 +140,7 @@
    tl_assert(a1 <= a2);
 
    if (s_trace_suppression)
-      VG_(message)(Vg_DebugMsg, "stop_tracing(0x%lx, %ld)\n",
+      VG_(message)(Vg_DebugMsg, "stop_tracing(0x%lx, %lu)\n",
                    a1, a2 - a1);
 
    if (DRD_(g_any_address_traced)) {
@@ -165,7 +165,7 @@
       for (b = a1; b < a2; b++) {
          if (DRD_(bm_has_1)(s_suppressed, b, eStore)) {
             VG_(message)(Vg_DebugMsg,
-                         "stop_using_mem(0x%lx, %ld) finish suppression of"
+                         "stop_using_mem(0x%lx, %lu) finish suppression of"
                          " 0x%lx\n", a1, a2 - a1, b);
          }
       }
diff --git a/drd/drd_thread.c b/drd/drd_thread.c
index 247dd91..9bb3200 100644
--- a/drd/drd_thread.c
+++ b/drd/drd_thread.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -78,6 +78,11 @@
 static unsigned s_join_list_vol = 10;
 static unsigned s_deletion_head;
 static unsigned s_deletion_tail;
+#if defined(VGO_solaris)
+Bool DRD_(ignore_thread_creation) = True;
+#else
+Bool DRD_(ignore_thread_creation) = False;
+#endif /* VGO_solaris */
 
 
 /* Function definitions. */
@@ -203,6 +208,11 @@
          DRD_(g_threadinfo)[i].pthread_create_nesting_level = 0;
          DRD_(g_threadinfo)[i].synchr_nesting = 0;
          DRD_(g_threadinfo)[i].deletion_seq = s_deletion_tail - 1;
+         DRD_(g_threadinfo)[i].creator_thread = DRD_INVALID_THREADID;
+#if defined (VGO_solaris)
+         DRD_(g_threadinfo)[i].bind_guard_flag = 0;
+#endif /* VGO_solaris */
+
          tl_assert(DRD_(g_threadinfo)[i].sg_first == NULL);
          tl_assert(DRD_(g_threadinfo)[i].sg_last == NULL);
 
@@ -302,6 +312,16 @@
 
    tl_assert(DRD_(g_threadinfo)[created].sg_first == NULL);
    tl_assert(DRD_(g_threadinfo)[created].sg_last == NULL);
+
+   if (creator != DRD_INVALID_THREADID) {
+      if (DRD_(ignore_thread_creation)) {
+         tl_assert(DRD_(thread_get_synchr_nesting_count)(created) == 0);
+         DRD_(thread_enter_synchr)(created);
+         /* Counterpart in DRD_(thread_set_pthreadid)(). */
+      }
+   }
+   DRD_(g_threadinfo)[created].creator_thread = creator;
+
    /* Create an initial segment for the newly created thread. */
    thread_append_segment(created, DRD_(sg_new)(creator, created));
 
@@ -388,7 +408,7 @@
       msg = VG_(malloc)("drd.main.dptj.1", msg_size);
 
       VG_(snprintf)(msg, msg_size,
-                    "drd_post_thread_join joiner = %d, joinee = %d",
+                    "drd_post_thread_join joiner = %u, joinee = %u",
                     drd_joiner, drd_joinee);
       if (joiner)
       {
@@ -575,7 +595,7 @@
    tl_assert(DRD_(g_threadinfo)[tid].pt_threadid != INVALID_POSIX_THREADID);
 
    if (DRD_(thread_get_trace_fork_join)())
-      DRD_(trace_msg)("[%d] drd_thread_pre_cancel %d",
+      DRD_(trace_msg)("[%u] drd_thread_pre_cancel %u",
                       DRD_(g_drd_running_tid), tid);
 }
 
@@ -595,6 +615,13 @@
    tl_assert(ptid != INVALID_POSIX_THREADID);
    DRD_(g_threadinfo)[tid].posix_thread_exists = True;
    DRD_(g_threadinfo)[tid].pt_threadid         = ptid;
+
+   if (DRD_(g_threadinfo)[tid].creator_thread != DRD_INVALID_THREADID) {
+      if (DRD_(ignore_thread_creation)) {
+         DRD_(thread_leave_synchr)(tid);
+         tl_assert(DRD_(thread_get_synchr_nesting_count)(tid) == 0);
+      }
+   }
 }
 
 /** Returns true for joinable threads and false for detached threads. */
@@ -631,6 +658,11 @@
    tl_assert(DRD_(g_threadinfo)[tid].pthread_create_nesting_level >= 0);
 
    DRD_(g_threadinfo)[tid].pthread_create_nesting_level++;
+
+   if (DRD_(ignore_thread_creation)) {
+      tl_assert(DRD_(thread_get_synchr_nesting_count)(tid) == 0);
+      DRD_(thread_enter_synchr)(tid);
+   }
 }
 
 /** Tells DRD that the calling thread has left pthread_create(). */
@@ -642,8 +674,44 @@
    tl_assert(DRD_(g_threadinfo)[tid].pthread_create_nesting_level > 0);
 
    DRD_(g_threadinfo)[tid].pthread_create_nesting_level--;
+
+   if (DRD_(ignore_thread_creation)) {
+      DRD_(thread_leave_synchr)(tid);
+      tl_assert(DRD_(thread_get_synchr_nesting_count)(tid) == 0);
+   }
 }
 
+#if defined(VGO_solaris)
+/** Handles the bind_guard() intercept. */
+void DRD_(thread_entering_rtld_bind_guard)(const DrdThreadId tid, int flags)
+{
+   tl_assert(0 <= (int)tid && tid < DRD_N_THREADS
+             && tid != DRD_INVALID_THREADID);
+
+   Int bindflag = (flags & VKI_THR_FLG_RTLD);
+   if ((bindflag & DRD_(g_threadinfo)[tid].bind_guard_flag) == 0) {
+      DRD_(g_threadinfo)[tid].bind_guard_flag |= bindflag;
+      DRD_(thread_enter_synchr)(tid);
+   }
+}
+
+/**
+ * Handles the bind_clear() intercept.
+ * Call to bind_clear(0) is typically used to determine value of bind_flags.
+ */
+void DRD_(thread_leaving_rtld_bind_clear)(const DrdThreadId tid, int flags)
+{
+   tl_assert(0 <= (int)tid && tid < DRD_N_THREADS
+             && tid != DRD_INVALID_THREADID);
+
+   Int bindflag = (flags & VKI_THR_FLG_RTLD);
+   if ((DRD_(g_threadinfo)[tid].bind_guard_flag & bindflag) != 0) {
+      DRD_(g_threadinfo)[tid].bind_guard_flag &= ~bindflag;
+      DRD_(thread_leave_synchr)(tid);
+   }
+}
+#endif /* VGO_solaris */
+
 /** Obtain the thread number and the user-assigned thread name. */
 const HChar* DRD_(thread_get_name)(const DrdThreadId tid)
 {
@@ -662,12 +730,12 @@
    if (name == NULL || name[0] == 0)
       VG_(snprintf)(DRD_(g_threadinfo)[tid].name,
                     sizeof(DRD_(g_threadinfo)[tid].name),
-                    "Thread %d",
+                    "Thread %u",
                     tid);
    else
       VG_(snprintf)(DRD_(g_threadinfo)[tid].name,
                     sizeof(DRD_(g_threadinfo)[tid].name),
-                    "Thread %d (%s)",
+                    "Thread %u (%s)",
                     tid, name);
    DRD_(g_threadinfo)[tid].name[sizeof(DRD_(g_threadinfo)[tid].name) - 1] = 0;
 }
@@ -706,7 +774,7 @@
           && DRD_(g_drd_running_tid) != DRD_INVALID_THREADID)
       {
          VG_(message)(Vg_DebugMsg,
-                      "Context switch from thread %d to thread %d;"
+                      "Context switch from thread %u to thread %u;"
                       " segments: %llu\n",
                       DRD_(g_drd_running_tid), drd_tid,
                       DRD_(sg_get_segments_alive_count)());
@@ -1153,7 +1221,7 @@
          HChar *str1, *str2;
          str1 = DRD_(vc_aprint)(&old_vc);
          str2 = DRD_(vc_aprint)(DRD_(thread_get_vc)(tid));
-         VG_(message)(Vg_DebugMsg, "thread %d: vc %s -> %s\n", tid, str1, str2);
+         VG_(message)(Vg_DebugMsg, "thread %u: vc %s -> %s\n", tid, str1, str2);
          VG_(free)(str1);
          VG_(free)(str2);
       }
@@ -1171,7 +1239,7 @@
 
 /**
  * Create a new segment for thread tid and update the vector clock of the last
- * segment of this thread with the the vector clock of segment sg. Call this
+ * segment of this thread with the vector clock of segment sg. Call this
  * function after thread tid had to wait because of thread synchronization
  * until the memory accesses in the segment sg finished.
  */
@@ -1236,7 +1304,7 @@
  */
 void DRD_(thread_print_all)(void)
 {
-   unsigned i;
+   UInt i;
    Segment* p;
 
    for (i = 0; i < DRD_N_THREADS; i++)
@@ -1244,7 +1312,7 @@
       p = DRD_(g_threadinfo)[i].sg_first;
       if (p) {
          VG_(printf)("**************\n"
-                     "* thread %3d (%d/%d/%d/%d/0x%lx/%d) *\n"
+                     "* thread %3u (%d/%u/%u/%u/0x%lx/%d) *\n"
                      "**************\n",
                      i,
                      DRD_(g_threadinfo)[i].valid,
@@ -1313,14 +1381,14 @@
                      VG_(printf_xml)("  <other_segment_start>\n");
                   else
                      VG_(message)(Vg_UserMsg,
-                                  "Other segment start (thread %d)\n", i);
+                                  "Other segment start (thread %u)\n", i);
                   show_call_stack(i, q->stacktrace);
                   if (VG_(clo_xml))
                      VG_(printf_xml)("  </other_segment_start>\n"
                                      "  <other_segment_end>\n");
                   else
                      VG_(message)(Vg_UserMsg,
-                                  "Other segment end (thread %d)\n", i);
+                                  "Other segment end (thread %u)\n", i);
                   q_next = q->thr_next;
                   show_call_stack(i, q_next ? q_next->stacktrace : 0);
                   if (VG_(clo_xml))
@@ -1409,7 +1477,7 @@
 
       str = DRD_(vc_aprint)(DRD_(thread_get_vc)(tid));
       VG_(message)(Vg_DebugMsg,
-                   "computing conflict set for thread %d with vc %s\n",
+                   "computing conflict set for thread %u with vc %s\n",
                    tid, str);
       VG_(free)(str);
    }
@@ -1422,7 +1490,7 @@
          HChar* vc;
 
          vc = DRD_(vc_aprint)(&p->vc);
-         VG_(message)(Vg_DebugMsg, "conflict set: thread [%d] at vc %s\n",
+         VG_(message)(Vg_DebugMsg, "conflict set: thread [%u] at vc %s\n",
                       tid, vc);
          VG_(free)(vc);
       }
@@ -1439,7 +1507,7 @@
 
                      str = DRD_(vc_aprint)(&q->vc);
                      VG_(message)(Vg_DebugMsg,
-                                  "conflict set: [%d] merging segment %s\n",
+                                  "conflict set: [%u] merging segment %s\n",
                                   j, str);
                      VG_(free)(str);
                   }
@@ -1450,7 +1518,7 @@
 
                      str = DRD_(vc_aprint)(&q->vc);
                      VG_(message)(Vg_DebugMsg,
-                                  "conflict set: [%d] ignoring segment %s\n",
+                                  "conflict set: [%u] ignoring segment %s\n",
                                   j, str);
                      VG_(free)(str);
                   }
@@ -1466,9 +1534,9 @@
       += DRD_(bm_get_bitmap2_creation_count)();
 
    if (s_trace_conflict_set_bm) {
-      VG_(message)(Vg_DebugMsg, "[%d] new conflict set:\n", tid);
+      VG_(message)(Vg_DebugMsg, "[%u] new conflict set:\n", tid);
       DRD_(bm_print)(*conflict_set);
-      VG_(message)(Vg_DebugMsg, "[%d] end of new conflict set.\n", tid);
+      VG_(message)(Vg_DebugMsg, "[%u] end of new conflict set.\n", tid);
    }
 }
 
@@ -1495,7 +1563,7 @@
 
       str = DRD_(vc_aprint)(DRD_(thread_get_vc)(tid));
       VG_(message)(Vg_DebugMsg,
-                   "updating conflict set for thread %d with vc %s\n",
+                   "updating conflict set for thread %u with vc %s\n",
                    tid, str);
       VG_(free)(str);
    }
@@ -1525,7 +1593,7 @@
 
             str = DRD_(vc_aprint)(&q->vc);
             VG_(message)(Vg_DebugMsg,
-                         "conflict set: [%d] %s segment %s\n", j,
+                         "conflict set: [%u] %s segment %s\n", j,
                          included_in_old_conflict_set
                          != included_in_new_conflict_set
                          ? "merging" : "ignoring", str);
@@ -1547,7 +1615,7 @@
 
             str = DRD_(vc_aprint)(&q->vc);
             VG_(message)(Vg_DebugMsg,
-                         "conflict set: [%d] %s segment %s\n", j,
+                         "conflict set: [%u] %s segment %s\n", j,
                          included_in_old_conflict_set
                          != included_in_new_conflict_set
                          ? "merging" : "ignoring", str);
@@ -1579,9 +1647,9 @@
 
    if (s_trace_conflict_set_bm)
    {
-      VG_(message)(Vg_DebugMsg, "[%d] updated conflict set:\n", tid);
+      VG_(message)(Vg_DebugMsg, "[%u] updated conflict set:\n", tid);
       DRD_(bm_print)(DRD_(g_conflict_set));
-      VG_(message)(Vg_DebugMsg, "[%d] end of updated conflict set.\n", tid);
+      VG_(message)(Vg_DebugMsg, "[%u] end of updated conflict set.\n", tid);
    }
 
    tl_assert(thread_conflict_set_up_to_date(DRD_(g_drd_running_tid)));
diff --git a/drd/drd_thread.h b/drd/drd_thread.h
index 28068a7..eece0a4 100644
--- a/drd/drd_thread.h
+++ b/drd/drd_thread.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -98,6 +98,15 @@
    Int       synchr_nesting;
    /** Delayed thread deletion sequence number. */
    unsigned  deletion_seq;
+   /**
+    * ID of the creator thread. It can be safely accessed only until the
+    * thread is fully created. Then the creator thread lives its own life again.
+    */
+   DrdThreadId creator_thread;
+
+#if defined(VGO_solaris)
+   Int       bind_guard_flag; /**< Bind flag from the runtime linker. */
+#endif /* VGO_solaris */
 } ThreadInfo;
 
 
@@ -117,6 +126,8 @@
 /** Conflict set for the currently running thread. */
 extern struct bitmap* DRD_(g_conflict_set);
 extern Bool           DRD_(verify_conflict_set);
+/** Whether activities during thread creation should be ignored. */
+extern Bool           DRD_(ignore_thread_creation);
 
 
 /* Function declarations. */
@@ -159,6 +170,10 @@
 void DRD_(thread_set_joinable)(const DrdThreadId tid, const Bool joinable);
 void DRD_(thread_entering_pthread_create)(const DrdThreadId tid);
 void DRD_(thread_left_pthread_create)(const DrdThreadId tid);
+#if defined(VGO_solaris)
+void DRD_(thread_entering_rtld_bind_guard)(const DrdThreadId tid, int flags);
+void DRD_(thread_leaving_rtld_bind_clear)(const DrdThreadId tid, int flags);
+#endif /* VGO_solaris */
 const HChar* DRD_(thread_get_name)(const DrdThreadId tid);
 void DRD_(thread_set_name)(const DrdThreadId tid, const HChar* const name);
 void DRD_(thread_set_vg_running_tid)(const ThreadId vg_tid);
diff --git a/drd/drd_thread_bitmap.h b/drd/drd_thread_bitmap.h
index 7687c02..dce884e 100644
--- a/drd/drd_thread_bitmap.h
+++ b/drd/drd_thread_bitmap.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/drd_vc.c b/drd/drd_vc.c
index 0da3b4e..49e8aa3 100644
--- a/drd/drd_vc.c
+++ b/drd/drd_vc.c
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
@@ -277,7 +277,7 @@
             return str;
       }
       size += VG_(snprintf)(str + size, reserved - size,
-                            "%s %d: %d", i > 0 ? "," : "",
+                            "%s %u: %u", i > 0 ? "," : "",
                             vc->vc[i].threadid, vc->vc[i].count);
    }
    size += VG_(snprintf)(str + size, reserved - size, " ]");
diff --git a/drd/drd_vc.h b/drd/drd_vc.h
index 91671fb..fe3cf0b 100644
--- a/drd/drd_vc.h
+++ b/drd/drd_vc.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/pub_drd_bitmap.h b/drd/pub_drd_bitmap.h
index 7765dff..ac5918b 100644
--- a/drd/pub_drd_bitmap.h
+++ b/drd/pub_drd_bitmap.h
@@ -1,7 +1,7 @@
 /*
   This file is part of drd, a thread error detector.
 
-  Copyright (C) 2006-2013 Bart Van Assche <bvanassche@acm.org>.
+  Copyright (C) 2006-2015 Bart Van Assche <bvanassche@acm.org>.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/drd/scripts/download-and-build-splash2.in b/drd/scripts/download-and-build-splash2.in
index cb9809d..0868605 100755
--- a/drd/scripts/download-and-build-splash2.in
+++ b/drd/scripts/download-and-build-splash2.in
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 
 downloads="$HOME/software/downloads"
 
diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am
index a21e709..2885391 100644
--- a/drd/tests/Makefile.am
+++ b/drd/tests/Makefile.am
@@ -9,7 +9,9 @@
 	filter_stderr               \
 	filter_stderr_and_thread_no \
 	filter_stderr_and_thread_no_and_offset \
+	filter_stderr_solaris       \
 	filter_thread_no	    \
+	filter_thread_name_xml      \
 	filter_xml_and_thread_no    \
 	run_openmp_test             \
 	supported_libpthread	    \
@@ -38,6 +40,8 @@
 	annotate_order_3.vgtest			    \
 	annotate_publish_hg.stderr.exp		    \
 	annotate_publish_hg.vgtest		    \
+	annotate_sem.stderr.exp                     \
+	annotate_sem.vgtest                         \
 	annotate_smart_pointer.stderr.exp	    \
 	annotate_smart_pointer.vgtest		    \
 	annotate_smart_pointer2.stderr.exp	    \
@@ -54,10 +58,13 @@
 	annotate_ignore_rw.stderr.exp		    \
 	annotate_ignore_rw.vgtest		    \
 	annotate_ignore_rw2.stderr.exp		    \
+	annotate_ignore_rw2.stderr.exp-solaris	    \
 	annotate_ignore_rw2.vgtest		    \
 	annotate_ignore_write.stderr.exp	    \
+	annotate_ignore_write.stderr.exp-solaris    \
 	annotate_ignore_write.vgtest		    \
 	annotate_ignore_write2.stderr.exp	    \
+	annotate_ignore_write2.stderr.exp-solaris   \
 	annotate_ignore_write2.vgtest		    \
 	annotate_trace_memory.stderr.exp-32bit	    \
 	annotate_trace_memory.stderr.exp-64bit	    \
@@ -101,6 +108,7 @@
 	fp_race_xml.stderr.exp                      \
 	fp_race_xml.stderr.exp-mips32-be            \
 	fp_race_xml.stderr.exp-mips32-le            \
+	fp_race_xml.stderr.exp-solaris              \
 	fp_race_xml.vgtest                          \
 	free_is_write.stderr.exp		    \
 	free_is_write.vgtest			    \
@@ -170,6 +178,7 @@
 	pth_cleanup_handler.stderr.exp		    \
 	pth_cleanup_handler.vgtest		    \
 	pth_cond_destroy_busy.stderr.exp            \
+	pth_cond_destroy_busy.stderr.exp-solaris    \
 	pth_cond_destroy_busy.vgtest                \
 	pth_cond_race.stderr.exp                    \
 	pth_cond_race.vgtest                        \
@@ -210,6 +219,7 @@
 	read_and_free_race.vgtest		    \
 	recursive_mutex.stderr.exp-linux            \
 	recursive_mutex.stderr.exp-darwin           \
+	recursive_mutex.stderr.exp-solaris          \
 	recursive_mutex.vgtest                      \
 	rwlock_race.stderr.exp	                    \
 	rwlock_race.stderr.exp2	                    \
@@ -283,6 +293,7 @@
 	tc09_bad_unlock.stderr.exp-ppc              \
 	tc09_bad_unlock.stderr.exp-glibc2.8         \
 	tc09_bad_unlock.stderr.exp-s390             \
+	tc09_bad_unlock.stderr.exp-solaris          \
 	tc09_bad_unlock.vgtest                      \
 	tc10_rec_lock.stderr.exp                    \
 	tc10_rec_lock.vgtest                        \
@@ -299,6 +310,7 @@
 	tc17_sembar.stderr.exp                      \
 	tc17_sembar.vgtest                          \
 	tc18_semabuse.stderr.exp                    \
+	tc18_semabuse.stderr.exp-solaris            \
 	tc18_semabuse.vgtest                        \
 	tc19_shadowmem.stderr.exp-32bit             \
 	tc19_shadowmem.stderr.exp-64bit             \
@@ -441,8 +453,21 @@
 concurrent_close_SOURCES    = concurrent_close.cpp
 monitor_example_SOURCES     = monitor_example.cpp
 new_delete_SOURCES          = new_delete.cpp
+new_delete_CXXFLAGS         = $(AM_CXXFLAGS) @FLAG_W_NO_MISMATCHED_NEW_DELETE@
 
-pth_cleanup_handler_CFLAGS  = $(AM_CFLAGS) @FLAG_W_NO_EMPTY_BODY@
+free_is_write_CFLAGS        = $(AM_CFLAGS)
+pth_barrier_CFLAGS          = $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+free_is_write_CFLAGS        += -D__EXTENSIONS__
+pth_barrier_CFLAGS          += -D__EXTENSIONS__
+endif
+
+pth_create_chain_CFLAGS     = $(AM_CFLAGS)
+pth_detached_CFLAGS         = $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+pth_create_chain_CFLAGS     += -D__EXTENSIONS__
+pth_detached_CFLAGS         += -D__EXTENSIONS__
+endif
 
 tsan_unittest_SOURCES       = tsan_unittest.cpp
 tsan_unittest_CXXFLAGS      = $(AM_CXXFLAGS) \
@@ -476,6 +501,10 @@
 omp_matinv_LDFLAGS          = -fopenmp
 omp_matinv_LDADD            = $(LDADD) -lm
 
+if VGCONF_OS_IS_SOLARIS
+omp_matinv_CFLAGS           += -std=gnu99
+endif
+
 omp_prime_CFLAGS            = $(AM_CFLAGS) -fopenmp
 omp_prime_LDFLAGS           = -fopenmp
 omp_prime_LDADD             = $(LDADD) -lm
@@ -485,10 +514,19 @@
 omp_printf_LDADD            = $(LDADD) -lm
 endif
 
+matinv_CFLAGS               = $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+matinv_CFLAGS               += -std=gnu99 -D__EXTENSIONS__
+endif
 if HAVE_PTHREAD_BARRIER
 matinv_LDADD                = $(LDADD) -lm
 endif
 
+rwlock_test_CFLAGS          = $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+rwlock_test_CFLAGS          += -D__EXTENSIONS__
+endif
+
 std_atomic_SOURCES          = std_atomic.cpp
 std_atomic_CXXFLAGS         = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
 
@@ -503,10 +541,14 @@
 
 std_thread_SOURCES          = std_thread.cpp
 std_thread_CXXFLAGS         = $(AM_CXXFLAGS) -std=c++0x
+if !VGCONF_OS_IS_SOLARIS
 std_thread_LDFLAGS          = -Wl,--no-as-needed
+endif
 
 std_thread2_SOURCES          = std_thread2.cpp
 std_thread2_CXXFLAGS         = $(AM_CXXFLAGS) -std=c++0x
+if !VGCONF_OS_IS_SOLARIS
 std_thread2_LDFLAGS          = -Wl,--no-as-needed
+endif
 
 sem_wait_SOURCES            = sem_wait.cpp
diff --git a/drd/tests/annotate_ignore_rw2.stderr.exp-solaris b/drd/tests/annotate_ignore_rw2.stderr.exp-solaris
new file mode 100644
index 0000000..a35389f
--- /dev/null
+++ b/drd/tests/annotate_ignore_rw2.stderr.exp-solaris
@@ -0,0 +1,25 @@
+
+Thread 2:
+Conflicting load by thread 2 at 0x........ size 1
+   at 0x........: thread_func (annotate_ignore_rw.c:?)
+   by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+   by 0x........: (within libpthread-?.?.so)
+Location 0x........ is 0 bytes inside global var "s_a"
+declared at annotate_ignore_rw.c:10
+
+Conflicting store by thread 2 at 0x........ size 1
+   at 0x........: thread_func (annotate_ignore_rw.c:?)
+   by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+   by 0x........: (within libpthread-?.?.so)
+Location 0x........ is 0 bytes inside global var "s_b"
+declared at annotate_ignore_rw.c:11
+
+Thread 1:
+Conflicting load by thread 1 at 0x........ size 1
+   at 0x........: main (annotate_ignore_rw.c:?)
+Location 0x........ is 0 bytes inside global var "s_c"
+declared at annotate_ignore_rw.c:12
+
+Finished.
+
+ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/annotate_ignore_write.stderr.exp-solaris b/drd/tests/annotate_ignore_write.stderr.exp-solaris
new file mode 100644
index 0000000..fa61979
--- /dev/null
+++ b/drd/tests/annotate_ignore_write.stderr.exp-solaris
@@ -0,0 +1,23 @@
+
+Thread 2:
+Conflicting store by thread 2 at 0x........ size 1
+   at 0x........: thread_func (annotate_ignore_write.c:?)
+   by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+   by 0x........: (within libpthread-?.?.so)
+Location 0x........ is 0 bytes inside global var "s_b"
+declared at annotate_ignore_write.c:11
+
+Thread 1:
+Conflicting load by thread 1 at 0x........ size 1
+   at 0x........: main (annotate_ignore_write.c:?)
+Location 0x........ is 0 bytes inside global var "s_c"
+declared at annotate_ignore_write.c:12
+
+Conflicting store by thread 1 at 0x........ size 1
+   at 0x........: main (annotate_ignore_write.c:?)
+Location 0x........ is 0 bytes inside global var "s_a"
+declared at annotate_ignore_write.c:10
+
+Finished.
+
+ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/annotate_ignore_write2.stderr.exp-solaris b/drd/tests/annotate_ignore_write2.stderr.exp-solaris
new file mode 100644
index 0000000..2511ff1
--- /dev/null
+++ b/drd/tests/annotate_ignore_write2.stderr.exp-solaris
@@ -0,0 +1,30 @@
+
+Thread 2:
+Conflicting load by thread 2 at 0x........ size 1
+   at 0x........: thread_func (annotate_ignore_write.c:?)
+   by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+   by 0x........: (within libpthread-?.?.so)
+Location 0x........ is 0 bytes inside global var "s_a"
+declared at annotate_ignore_write.c:10
+
+Conflicting store by thread 2 at 0x........ size 1
+   at 0x........: thread_func (annotate_ignore_write.c:?)
+   by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+   by 0x........: (within libpthread-?.?.so)
+Location 0x........ is 0 bytes inside global var "s_b"
+declared at annotate_ignore_write.c:11
+
+Thread 1:
+Conflicting load by thread 1 at 0x........ size 1
+   at 0x........: main (annotate_ignore_write.c:?)
+Location 0x........ is 0 bytes inside global var "s_c"
+declared at annotate_ignore_write.c:12
+
+Conflicting store by thread 1 at 0x........ size 1
+   at 0x........: main (annotate_ignore_write.c:?)
+Location 0x........ is 0 bytes inside global var "s_a"
+declared at annotate_ignore_write.c:10
+
+Finished.
+
+ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/filter_stderr b/drd/tests/filter_stderr
index a66a149..9347e4e 100755
--- a/drd/tests/filter_stderr
+++ b/drd/tests/filter_stderr
@@ -6,6 +6,13 @@
 
 $dir/../../tests/filter_stderr_basic |
 
+# Perform Solaris-specific filtering.
+if $dir/../../tests/os_test solaris; then
+   perl -p $dir/filter_stderr_solaris
+else
+   cat
+fi |
+
 # Remove "drd, ..." line and the following copyright line.
 # Remove line numbers referring to drd's source code.
 # Remove libpthread's version number.
diff --git a/drd/tests/filter_stderr_solaris b/drd/tests/filter_stderr_solaris
new file mode 100755
index 0000000..781f97e
--- /dev/null
+++ b/drd/tests/filter_stderr_solaris
@@ -0,0 +1,55 @@
+#!/usr/bin/perl
+
+# Replace stack frame for a thread created by pthread_create():
+#     by 0x........: _thrp_setup (in /lib/libc.so.1)
+# with a stack frame expected on Linux:
+#     by 0x........: start_thread (pthread_create.c:123)
+# It will be further reduced and mangled by the main filter_stderr script.
+# This needs to be done first.
+s/_thrp_setup \(in .*libc.*\)/start_thread \(pthread_create.c:123\)/g;
+
+# We need to filter out the Solaris libc's stack frame which looks like:
+#     by 0x........: pthread_mutex_init (in /...libc...)
+# to be consistent with the expected output of test cases.
+#
+# Stack frames for synchronization functions are missing on Linux because
+# of optimalization. 
+# 
+s/.*\(in \/...libc...\)\R//m;
+
+# We need to replace Solaris threading and sychronization function
+# names with POSIX ones for drd_pthread_intercepts.c stack frame:
+#     by 0x........: cond_init (drd_pthread_intercepts.c:123)
+# See also comments in drd_pthread_intercepts.c.
+my %regex = (
+    'thr_create'     => 'pthread_create',
+    'thr_join'       => 'pthread_join',
+    'mutex_init'     => 'pthread_mutex_init',
+    'mutex_destroy'  => 'pthread_mutex_destroy',
+    'mutex_lock'     => 'pthread_mutex_lock',
+    'mutex_trylock'  => 'pthread_mutex_trylock',
+    'mutex_unlock'   => 'pthread_mutex_unlock',
+    'cond_init'      => 'pthread_cond_init',
+    'cond_destroy'   => 'pthread_cond_destroy',
+    'cond_wait'      => 'pthread_cond_wait',
+    'cond_timedwait' => 'pthread_cond_timedwait',
+    'cond_signal'    => 'pthread_cond_signal',
+    'cond_broadcast' => 'pthread_cond_broadcast',
+    'sema_init'      => 'sem_init',
+    'sema_destroy'   => 'sem_destroy',
+    'sema_wait'      => 'sem_wait',
+    'sema_trywait'   => 'sem_trywait',
+    'sema_timedwait' => 'sem_timedwait',
+    'sema_post'      => 'sem_post',
+    'rwlock_init'    => 'pthread_rwlock_init',
+    'rwlock_destroy' => 'pthread_rwlock_destroy',
+    'rw_rdlock'      => 'pthread_rwlock_rdlock',
+    'rw_wrlock'      => 'pthread_rwlock_wrlock',
+    'rw_tryrdlock'   => 'pthread_rwlock_tryrdlock',
+    'rw_trywrlock'   => 'pthread_rwlock_trywrlock',
+    'rw_unlock'      => 'pthread_rwlock_unlock'
+);
+my $check = join "|", keys %regex;
+if (! /: pthread_/) {
+    s/($check)(.*drd_pthread_intercepts.c)/$regex{$1}$2/g;
+}
diff --git a/drd/tests/filter_thread_name_xml b/drd/tests/filter_thread_name_xml
new file mode 100755
index 0000000..458b5b6
--- /dev/null
+++ b/drd/tests/filter_thread_name_xml
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+dir=`dirname $0`
+
+$dir/../../memcheck/tests/filter_xml |
+
+# Perform Solaris-specific filtering (see filter_stderr_solaris).
+if $dir/../../tests/os_test solaris; then
+   sed -e 's/mutex_unlock/pthread_mutex_unlock/'
+else
+   cat
+fi
diff --git a/drd/tests/fp_race_xml.stderr.exp-solaris b/drd/tests/fp_race_xml.stderr.exp-solaris
new file mode 100644
index 0000000..05ffe71
--- /dev/null
+++ b/drd/tests/fp_race_xml.stderr.exp-solaris
@@ -0,0 +1,104 @@
+<?xml version="1.0"?>
+
+<valgrindoutput>
+
+<protocolversion>4</protocolversion>
+<protocoltool>drd</protocoltool>
+
+<preamble>
+  <line>...</line>
+  <line>...</line>
+  <line>...</line>
+  <line>...</line>
+</preamble>
+
+<pid>...</pid>
+<ppid>...</ppid>
+<tool>drd</tool>
+
+<args>
+  <vargv>...</vargv>
+  <argv>
+    <exe>./fp_race</exe>
+  </argv>
+</args>
+
+<status>
+  <state>RUNNING</state>
+  <time>...</time>
+</status>
+
+  <trace><text>drd_pre_thread_create creator = 0, created = 1</text></trace>
+  <trace><text>drd_post_thread_create created = 1</text></trace>
+  <trace><text>drd_pre_thread_create creator = 1, created = 2</text></trace>
+  <trace><text>drd_post_thread_create created = 2</text></trace>
+  <trace><text>drd_thread_finished tid = 2</text></trace>
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting load by thread x at 0x........ size 8</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 0 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting store by thread x at 0x........ size 8</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 0 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+  <trace><text>drd_post_thread_join joiner = 1, joinee = 2, new vc: [ ... ]</text></trace>
+  <trace><text>drd_thread_finished tid = 1</text></trace>
+
+<status>
+  <state>FINISHED</state>
+  <time>...</time>
+</status>
+
+<errorcounts>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+</errorcounts>
+
+<suppcounts>...</suppcounts>
+
+</valgrindoutput>
+
diff --git a/drd/tests/matinv.vgtest b/drd/tests/matinv.vgtest
index da2a6e4..4deae67 100644
--- a/drd/tests/matinv.vgtest
+++ b/drd/tests/matinv.vgtest
@@ -1,3 +1,3 @@
 prereq: test -e matinv && ./supported_libpthread
 prog: matinv
-args: 30 -t 15 -q
+args: -t 15 -q 30
diff --git a/drd/tests/omp_matinv.vgtest b/drd/tests/omp_matinv.vgtest
index c9d5ec1..5a32480 100644
--- a/drd/tests/omp_matinv.vgtest
+++ b/drd/tests/omp_matinv.vgtest
@@ -1,4 +1,4 @@
 prereq: ./run_openmp_test ./omp_matinv
 prog: omp_matinv
 vgopts: --check-stack-var=yes --read-var-info=yes
-args: 30 -t 15 -q
+args: -t 15 -q 30
diff --git a/drd/tests/omp_matinv_racy.vgtest b/drd/tests/omp_matinv_racy.vgtest
index 96a0f0f..327bccc 100644
--- a/drd/tests/omp_matinv_racy.vgtest
+++ b/drd/tests/omp_matinv_racy.vgtest
@@ -1,5 +1,5 @@
 prereq: ./run_openmp_test ./omp_matinv
 prog: omp_matinv
 vgopts: --check-stack-var=yes --read-var-info=yes
-args: 3 -t 2 -q -r
+args: -t 2 -q -r 3
 stderr_filter: filter_error_summary
diff --git a/drd/tests/omp_prime_racy.vgtest b/drd/tests/omp_prime_racy.vgtest
index 59381c9..e4f727b 100644
--- a/drd/tests/omp_prime_racy.vgtest
+++ b/drd/tests/omp_prime_racy.vgtest
@@ -1,5 +1,5 @@
 prereq: ./run_openmp_test ./omp_prime
 prog: omp_prime
 vgopts: --check-stack-var=yes --read-var-info=yes
-args: 4 -q
+args: -q 4
 stderr_filter: filter_error_summary
diff --git a/drd/tests/pth_barrier.c b/drd/tests/pth_barrier.c
index 854ee34..7fdffe1 100644
--- a/drd/tests/pth_barrier.c
+++ b/drd/tests/pth_barrier.c
@@ -50,13 +50,13 @@
   int8_t* const array = p->array;
   pthread_barrier_t* const b = p->b;
   if (! s_silent)
-    printf("thread %lx iteration 0\n", pthread_self());
+    printf("thread %lx iteration 0\n", (long) pthread_self());
   pthread_barrier_wait(b);
   for (i = 0; i < p->iterations; i++)
   {
     if (! s_silent)
       printf("thread %lx iteration %d; writing to %p\n",
-             pthread_self(), i + 1, &array[i]);
+             (long) pthread_self(), i + 1, &array[i]);
     array[i] = i;
     pthread_barrier_wait(b);
   }
diff --git a/drd/tests/pth_cond_destroy_busy.stderr.exp-solaris b/drd/tests/pth_cond_destroy_busy.stderr.exp-solaris
new file mode 100644
index 0000000..392bc1d
--- /dev/null
+++ b/drd/tests/pth_cond_destroy_busy.stderr.exp-solaris
@@ -0,0 +1,35 @@
+
+destruction of condition variable being waited upon: cond 0x........
+   at 0x........: pthread_cond_destroy (drd_pthread_intercepts.c:?)
+   by 0x........: main (pth_cond_destroy_busy.c:?)
+cond 0x........ was first observed at:
+   at 0x........: pthread_cond_init (drd_pthread_intercepts.c:?)
+   by 0x........: main (pth_cond_destroy_busy.c:?)
+
+Destroying condition variable that is being waited upon: cond 0x........, mutex 0x........ locked by thread 1
+   at 0x........: pthread_cond_destroy (drd_pthread_intercepts.c:?)
+   by 0x........: main (pth_cond_destroy_busy.c:?)
+mutex 0x........ was first observed at:
+   at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+   by 0x........: main (pth_cond_destroy_busy.c:?)
+
+First pthread_cond_destroy() call returned success.
+condition variable has not been initialized: cond 0x........
+   at 0x........: pthread_cond_signal (drd_pthread_intercepts.c:?)
+   by 0x........: main (pth_cond_destroy_busy.c:?)
+
+Thread 2:
+condition variable has been destroyed while being waited upon: cond 0x........, mutex 0x........ locked by thread 0
+   at 0x........: pthread_cond_wait (drd_pthread_intercepts.c:?)
+   by 0x........: thread_func (pth_cond_destroy_busy.c:?)
+   by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+   by 0x........: (within libpthread-?.?.so)
+
+Thread 1:
+not a condition variable: cond 0x........
+   at 0x........: pthread_cond_destroy (drd_pthread_intercepts.c:?)
+   by 0x........: main (pth_cond_destroy_busy.c:?)
+
+Second pthread_cond_destroy() call returned success.
+
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/pth_inconsistent_cond_wait.c b/drd/tests/pth_inconsistent_cond_wait.c
index fb95fd8..6691e84 100644
--- a/drd/tests/pth_inconsistent_cond_wait.c
+++ b/drd/tests/pth_inconsistent_cond_wait.c
@@ -107,7 +107,8 @@
   }
 
   /* Initialize synchronization objects. */
-  snprintf(semaphore_name, sizeof(semaphore_name), "semaphore-%d", getpid());
+  snprintf(semaphore_name, sizeof(semaphore_name), "semaphore-%ld",
+           (long) getpid());
   s_sem = create_semaphore(semaphore_name);
   PTH_CALL(pthread_cond_init(&s_cond, 0));
   PTH_CALL(pthread_mutex_init(&s_mutex1, 0));
diff --git a/drd/tests/recursive_mutex.stderr.exp-solaris b/drd/tests/recursive_mutex.stderr.exp-solaris
new file mode 100644
index 0000000..146b095
--- /dev/null
+++ b/drd/tests/recursive_mutex.stderr.exp-solaris
@@ -0,0 +1,18 @@
+
+Recursive mutex (statically initialized).
+
+Non-recursive mutex.
+second lock call failed !
+Mutex not locked by calling thread: mutex 0x........, recursion count 0, owner 1.
+   at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
+   by 0x........: lock_twice (recursive_mutex.c:?)
+   by 0x........: main (recursive_mutex.c:?)
+mutex 0x........ was first observed at:
+   at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+   by 0x........: lock_twice (recursive_mutex.c:?)
+   by 0x........: main (recursive_mutex.c:?)
+
+
+Done.
+
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/sem_open.c b/drd/tests/sem_open.c
index 958bc6b..7f00ca0 100644
--- a/drd/tests/sem_open.c
+++ b/drd/tests/sem_open.c
@@ -58,8 +58,8 @@
    * Use the ipcs and ipcrm commands to clean up named semaphores left by
    * aborted instances of this process.
    */
-  snprintf(semaphore_name, sizeof(semaphore_name), "/drd-sem-open-test-%d",
-	   getpid());
+  snprintf(semaphore_name, sizeof(semaphore_name), "/drd-sem-open-test-%ld",
+	   (long) getpid());
   s_sem = sem_open(semaphore_name, O_CREAT | O_EXCL, 0600, 1);
   if (s_sem == SEM_FAILED)
   {
diff --git a/drd/tests/sigalrm.c b/drd/tests/sigalrm.c
index 85987ab..2484a6d 100644
--- a/drd/tests/sigalrm.c
+++ b/drd/tests/sigalrm.c
@@ -32,8 +32,8 @@
   {
     char msg[256];
     snprintf(msg, sizeof(msg),
-             "%spid %d / kernel thread ID %d / Valgrind thread ID %d\n",
-             label, getpid(), getktid(), DRD_GET_VALGRIND_THREADID);
+             "%spid %ld / kernel thread ID %d / Valgrind thread ID %d\n",
+             label, (long) getpid(), getktid(), DRD_GET_VALGRIND_THREADID);
     write(STDOUT_FILENO, msg, strlen(msg));
   }
 }
diff --git a/drd/tests/std_string.cpp b/drd/tests/std_string.cpp
index 8a35fb3..266c93f 100644
--- a/drd/tests/std_string.cpp
+++ b/drd/tests/std_string.cpp
@@ -8,6 +8,7 @@
 #include <string>
 #include <cstring>
 #include <pthread.h>
+#include <stdlib.h>
 #include <unistd.h>
 
 char* list2byteArray()
diff --git a/drd/tests/tc09_bad_unlock.stderr.exp-solaris b/drd/tests/tc09_bad_unlock.stderr.exp-solaris
new file mode 100644
index 0000000..a517b71
--- /dev/null
+++ b/drd/tests/tc09_bad_unlock.stderr.exp-solaris
@@ -0,0 +1,54 @@
+
+Mutex not locked by calling thread: mutex 0x........, recursion count 0, owner 1.
+   at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
+   by 0x........: nearly_main (tc09_bad_unlock.c:27)
+   by 0x........: main (tc09_bad_unlock.c:49)
+mutex 0x........ was first observed at:
+   at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+   by 0x........: nearly_main (tc09_bad_unlock.c:23)
+
+Thread 2:
+Mutex not locked by calling thread: mutex 0x........, recursion count 1, owner 1.
+   at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
+   by 0x........: child_fn (tc09_bad_unlock.c:11)
+   by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+mutex 0x........ was first observed at:
+   at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+   by 0x........: nearly_main (tc09_bad_unlock.c:31)
+
+Thread 1:
+The object at address 0x........ is not a mutex.
+   at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
+   by 0x........: nearly_main (tc09_bad_unlock.c:41)
+   by 0x........: main (tc09_bad_unlock.c:49)
+
+Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
+   at 0x........: nearly_main (tc09_bad_unlock.c:45)
+   by 0x........: main (tc09_bad_unlock.c:49)
+mutex 0x........ was first observed at:
+   at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+   by 0x........: nearly_main (tc09_bad_unlock.c:31)
+
+---------------------
+Mutex not locked by calling thread: mutex 0x........, recursion count 0, owner 1.
+   at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
+   by 0x........: nearly_main (tc09_bad_unlock.c:27)
+   by 0x........: main (tc09_bad_unlock.c:50)
+mutex 0x........ was first observed at:
+   at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+   by 0x........: nearly_main (tc09_bad_unlock.c:23)
+
+The object at address 0x........ is not a mutex.
+   at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
+   by 0x........: nearly_main (tc09_bad_unlock.c:41)
+   by 0x........: main (tc09_bad_unlock.c:50)
+
+Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
+   at 0x........: nearly_main (tc09_bad_unlock.c:45)
+   by 0x........: main (tc09_bad_unlock.c:50)
+mutex 0x........ was first observed at:
+   at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+   by 0x........: nearly_main (tc09_bad_unlock.c:31)
+
+
+ERROR SUMMARY: 8 errors from 7 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/tc12_rwl_trivial.stderr.exp b/drd/tests/tc12_rwl_trivial.stderr.exp
index 6ba7b18..73163e7 100644
--- a/drd/tests/tc12_rwl_trivial.stderr.exp
+++ b/drd/tests/tc12_rwl_trivial.stderr.exp
@@ -1,10 +1,11 @@
 
 Reader-writer lock not locked by calling thread: rwlock 0x.........
    at 0x........: pthread_rwlock_unlock (drd_pthread_intercepts.c:?)
-   by 0x........: main (tc12_rwl_trivial.c:35)
+   by 0x........: safe_pthread_rwlock_unlock (safe-pthread.h:58)
+   by 0x........: main (tc12_rwl_trivial.c:29)
 rwlock 0x........ was first observed at:
    at 0x........: pthread_rwlock_init (drd_pthread_intercepts.c:?)
-   by 0x........: main (tc12_rwl_trivial.c:24)
+   by 0x........: main (tc12_rwl_trivial.c:18)
 
 
 ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/tc12_rwl_trivial.vgtest b/drd/tests/tc12_rwl_trivial.vgtest
index 0cb3825..21e6981 100644
--- a/drd/tests/tc12_rwl_trivial.vgtest
+++ b/drd/tests/tc12_rwl_trivial.vgtest
@@ -1,2 +1,3 @@
 prereq: ./supported_libpthread
+vgopts: --sigill-diagnostics=no
 prog: ../../helgrind/tests/tc12_rwl_trivial
diff --git a/drd/tests/tc18_semabuse.stderr.exp-solaris b/drd/tests/tc18_semabuse.stderr.exp-solaris
new file mode 100644
index 0000000..9c2b278
--- /dev/null
+++ b/drd/tests/tc18_semabuse.stderr.exp-solaris
@@ -0,0 +1,10 @@
+
+Semaphore reinitialization: semaphore 0x........
+   at 0x........: sem_init (drd_pthread_intercepts.c:?)
+   by 0x........: main (tc18_semabuse.c:26)
+semaphore 0x........ was first observed at:
+   at 0x........: sem_init (drd_pthread_intercepts.c:?)
+   by 0x........: main (tc18_semabuse.c:23)
+
+
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/thread_name_xml.vgtest b/drd/tests/thread_name_xml.vgtest
index f931e48..c6cd1ca 100644
--- a/drd/tests/thread_name_xml.vgtest
+++ b/drd/tests/thread_name_xml.vgtest
@@ -1,4 +1,4 @@
 prereq: test -e thread_name && ./supported_libpthread
 vgopts: --read-var-info=yes --check-stack-var=yes --num-callers=3 --xml=yes --xml-fd=2
 prog: thread_name
-stderr_filter: ../../memcheck/tests/filter_xml
+stderr_filter: filter_thread_name_xml
diff --git a/drd/tests/tsan_unittest.cpp b/drd/tests/tsan_unittest.cpp
index 57bb310..79fea6b 100644
--- a/drd/tests/tsan_unittest.cpp
+++ b/drd/tests/tsan_unittest.cpp
@@ -97,6 +97,10 @@
 #include <malloc.h>
 #endif
 
+#ifdef VGO_solaris
+#include <strings.h> // index(), rindex()
+#endif
+
 // The tests are
 // - Stability tests (marked STAB)
 // - Performance tests (marked PERF)
@@ -4786,13 +4790,13 @@
   char out_name[100];
   // we open two files, on for reading and one for writing, 
   // but the files are actually the same (symlinked).
-  sprintf(out_name, "/tmp/racecheck_unittest_out.%d", getpid());
+  sprintf(out_name, "/tmp/racecheck_unittest_out.%ld", (long) getpid());
   fd_out = creat(out_name, O_WRONLY | S_IRWXU);
 #ifdef VGO_darwin
   // symlink() is not supported on Darwin. Copy the output file name.
   strcpy(in_name, out_name);
 #else
-  sprintf(in_name,  "/tmp/racecheck_unittest_in.%d", getpid());
+  sprintf(in_name,  "/tmp/racecheck_unittest_in.%ld", (long) getpid());
   IGNORE_RETURN_VALUE(symlink(out_name, in_name));
 #endif
   fd_in  = open(in_name, 0, O_RDONLY);
diff --git a/exp-bbv/bbv_main.c b/exp-bbv/bbv_main.c
index db7835f..5a55593 100644
--- a/exp-bbv/bbv_main.c
+++ b/exp-bbv/bbv_main.c
@@ -8,10 +8,10 @@
    This file is part of BBV, a Valgrind tool for generating SimPoint
    basic block vectors.
 
-   Copyright (C) 2006-2013 Vince Weaver
+   Copyright (C) 2006-2015 Vince Weaver
       vince _at_ csl.cornell.edu
 
-   pcfile code is Copyright (C) 2006-2013 Oriol Prat
+   pcfile code is Copyright (C) 2006-2015 Oriol Prat
       oriol.prat _at _ bsc.es
 
    This program is free software; you can redistribute it and/or
@@ -116,8 +116,8 @@
       /*    and function name for each basic block             */
    VG_(OSetGen_ResetIter)(instr_info_table);
    while ( (bb_elem = VG_(OSetGen_Next)(instr_info_table)) ) {
-      VG_(fprintf)( fp, "F:%d:%x:%s\n", bb_elem->block_num,
-                    (Int)bb_elem->BB_addr, bb_elem->fn_name);
+      VG_(fprintf)( fp, "F:%d:%lx:%s\n", bb_elem->block_num,
+                    bb_elem->BB_addr, bb_elem->fn_name);
    }
 
    VG_(fclose)(fp);
@@ -565,10 +565,10 @@
          VG_(sprintf)(buf,"\n\n"
                           "# Thread %d\n"
                           "#   Total intervals: %d (Interval Size %d)\n"
-                          "#   Total instructions: %lld\n"
-                          "#   Total reps: %lld\n"
-                          "#   Unique reps: %lld\n"
-                          "#   Total fldcw instructions: %lld\n\n",
+                          "#   Total instructions: %llu\n"
+                          "#   Total reps: %llu\n"
+                          "#   Unique reps: %llu\n"
+                          "#   Total fldcw instructions: %llu\n\n",
                 i,
                 (Int)(bbv_thread[i].total_instr/(ULong)interval_size),
                 interval_size,
@@ -597,7 +597,7 @@
    VG_(details_version)         (NULL);
    VG_(details_description)     ("a SimPoint basic block vector generator");
    VG_(details_copyright_author)(
-      "Copyright (C) 2006-2013 Vince Weaver");
+      "Copyright (C) 2006-2015 Vince Weaver");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
 
    VG_(basic_tool_funcs)          (bbv_post_clo_init,
diff --git a/exp-bbv/tests/x86/complex_rep.S b/exp-bbv/tests/x86/complex_rep.S
index fca36e5..595f369 100644
--- a/exp-bbv/tests/x86/complex_rep.S
+++ b/exp-bbv/tests/x86/complex_rep.S
@@ -48,12 +48,18 @@
 	#================================
 exit:
      	mov	$1,%eax
-#ifdef VGO_darwin
-	pushl	$0
-#else	
+#if defined(VGO_darwin)
+	pushl   $0			# we return 0
+	int     $0x80          		# and exit
+#elif defined(VGO_linux)
 	xor     %ebx,%ebx		# we return 0
-#endif	
 	int	$0x80          		# and exit
+#elif defined(VGO_solaris)
+	pushl   $0			# we return 0
+	int     $0x91          		# and exit
+#else
+#  error "Unknown OS"
+#endif
 
 
 #.bss
diff --git a/exp-bbv/tests/x86/fldcw_check.S b/exp-bbv/tests/x86/fldcw_check.S
index ef4c3a7..52f9433 100644
--- a/exp-bbv/tests/x86/fldcw_check.S
+++ b/exp-bbv/tests/x86/fldcw_check.S
@@ -99,26 +99,39 @@
 	
 print_error:
 	mov 	$4,%eax			# write syscall
-#ifdef VGO_darwin
-	pushl	$1
-	pushl	$error
+#if defined(VGO_darwin)
 	pushl	$22
-#else	
+	pushl	$error
+	pushl	$1
+	int 	$0x80
+#elif defined(VGO_linux)
 	mov	$1,%ebx			# stdout
 	mov	$error,%ecx		# string	
 	mov 	$22,%edx		# length of string
-#endif	
 	int 	$0x80
-	
+#elif defined(VGO_solaris)
+	pushl	$22
+	pushl	$error
+	pushl	$1
+	int 	$0x91
+#else
+#  error "Unknown OS"
+#endif
+
 exit:
-#ifdef VGO_darwin
-	pushl	result
-#else	
-	movl	result, %ebx		# load converted value
-#endif	
 	movl	$1,	%eax		# SYSCALL_EXIT
+#if defined(VGO_darwin)
+	pushl	result
 	int	$0x80
-	
+#elif defined(VGO_linux)
+	movl	result, %ebx		# load converted value
+	int	$0x80
+#elif defined(VGO_solaris)
+	pushl	result
+	int	$0x91
+#else
+#  error "Unknown OS"
+#endif
 
 
 .data
@@ -127,4 +140,4 @@
 result: .long	0
 three:	.long	0			# a floating point 3.0
 	.long	1074266112
-error:	.asciz  "Error!  Wrong result!\n"
+error:	.ascii  "Error!  Wrong result!\n\0"
diff --git a/exp-bbv/tests/x86/million.S b/exp-bbv/tests/x86/million.S
index 0d72b00..e034cc8 100644
--- a/exp-bbv/tests/x86/million.S
+++ b/exp-bbv/tests/x86/million.S
@@ -20,14 +20,17 @@
 	#                 in arc/x86/include/asm/unistd_32.h on Linux
 	# disassemble on OSX otool -tV
 exit:
-#ifdef VGO_darwin
-	pushl   $0			# we return 0
 	xor	%eax,%eax
 	inc	%eax	 		# put exit syscall number (1) in eax
-	int     $0x80             	# and exit
-#else	
+#if defined(VGO_darwin)
+	pushl	$0			# we return 0
+	int     $0x80			# and exit
+#elif defined(VGO_linux)
 	xor     %ebx,%ebx		# we return 0
-	xor	%eax,%eax
-	inc	%eax	 		# put exit syscall number (1) in eax
-	int     $0x80             	# and exit
+	int     $0x80			# and exit
+#elif defined(VGO_solaris)
+	pushl	$0			# we return 0
+	int     $0x91			# and exit
+#else
+#  error "Unknown OS"
 #endif
diff --git a/exp-bbv/tests/x86/rep_prefix.S b/exp-bbv/tests/x86/rep_prefix.S
index 346248c..4588815 100644
--- a/exp-bbv/tests/x86/rep_prefix.S
+++ b/exp-bbv/tests/x86/rep_prefix.S
@@ -246,33 +246,47 @@
 print_error:
 	    
 	mov 	$4, %eax		# Write syscall
-#ifdef VGO_darwin
-	pushl	$1
-	pushl	$error_string
+#if defined(VGO_darwin)
 	pushl	$16
-#else	
+	pushl	$error_string
+	pushl	$1
+	int 	$0x80
+#elif defined(VGO_linux)
 	mov	$1, %ebx		# print to stdout
 	mov	$error_string, %ecx	# string to print
 	mov	$16, %edx      	   	# strlen
-#endif	
-	int	$0x80	 		# call syscall
+	int 	$0x80
+#elif defined(VGO_solaris)
+	pushl	$16
+	pushl	$error_string
+	pushl	$1
+	int 	$0x91
+#else
+#  error "Unknown OS"
+#endif
 
 	#================================
 	# Exit
 	#================================
 exit:
-#ifdef VGO_darwin	
-	xor     %ebx,%ebx		# we return 0
-#else
-	pushl	$0			# we return 0
-#endif	
 	xor	%eax,%eax
 	inc	%eax	 		# put exit syscall number (1) in eax
+#if defined(VGO_darwin)
+	pushl   $0			# we return 0
 	int     $0x80             	# and exit
+#elif defined(VGO_linux)
+	xor     %ebx,%ebx		# we return 0
+	int     $0x80             	# and exit
+#elif defined(VGO_solaris)
+	pushl   $0			# we return 0
+	int     $0x91             	# and exit
+#else
+#  error "Unknown OS"
+#endif
 
 
 .data
-error_string:	.asciz "Error detected!\n"
+error_string:	.ascii "Error detected!\n\0"
 
 #.bss
 
diff --git a/exp-dhat/dh_main.c b/exp-dhat/dh_main.c
index 471c3ed..e636ccb 100644
--- a/exp-dhat/dh_main.c
+++ b/exp-dhat/dh_main.c
@@ -7,7 +7,7 @@
    This file is part of DHAT, a Valgrind tool for profiling the
    heap usage of programs.
 
-   Copyright (C) 2010-2013 Mozilla Inc
+   Copyright (C) 2010-2015 Mozilla Inc
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -494,7 +494,7 @@
 
    intro_Block(bk);
 
-   if (0) VG_(printf)("ALLOC %ld -> %p\n", req_szB, p);
+   if (0) VG_(printf)("ALLOC %lu -> %p\n", req_szB, p);
 
    return p;
 }
@@ -537,7 +537,7 @@
 static
 void* renew_block ( ThreadId tid, void* p_old, SizeT new_req_szB )
 {
-   if (0) VG_(printf)("REALL %p %ld\n", p_old, new_req_szB);
+   if (0) VG_(printf)("REALL %p %lu\n", p_old, new_req_szB);
    void* p_new = NULL;
 
    tl_assert(new_req_szB > 0); // map 0 to 1
@@ -1348,7 +1348,7 @@
    VG_(details_version)         (NULL);
    VG_(details_description)     ("a dynamic heap analysis tool");
    VG_(details_copyright_author)(
-      "Copyright (C) 2010-2013, and GNU GPL'd, by Mozilla Inc");
+      "Copyright (C) 2010-2015, and GNU GPL'd, by Mozilla Inc");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
 
    // Basic functions.
diff --git a/exp-sgcheck/h_intercepts.c b/exp-sgcheck/h_intercepts.c
index 64bc7f7..2ec1836 100644
--- a/exp-sgcheck/h_intercepts.c
+++ b/exp-sgcheck/h_intercepts.c
@@ -7,7 +7,7 @@
    This file is part of Ptrcheck, a Valgrind tool for checking pointer
    use in programs.
 
-   Copyright (C) 2003-2013 Nicholas Nethercote
+   Copyright (C) 2003-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -68,6 +68,8 @@
 #elif defined(VGO_darwin)
 STRRCHR(VG_Z_DYLD,          strrchr)
 STRRCHR(VG_Z_DYLD,          rindex)
+#elif defined(VGO_solaris)
+STRRCHR(VG_Z_LD_SO_1,       strrchr)
 #endif
 
 
@@ -96,6 +98,8 @@
 #elif defined(VGO_darwin)
 STRCHR(VG_Z_DYLD,                 strchr)
 STRCHR(VG_Z_DYLD,                 index)
+#elif defined(VGO_solaris)
+STRCHR(VG_Z_LD_SO_1,              strchr)
 #endif
 
 
@@ -130,6 +134,8 @@
 STRLEN(VG_Z_LD_LINUX_SO_2,        strlen)
 STRLEN(VG_Z_LD_LINUX_X86_64_SO_2, strlen)
 STRLEN(VG_Z_LD_SO_1,              strlen)
+#elif defined(VGO_solaris)
+STRLEN(VG_Z_LD_SO_1,              strlen)
 #endif
 
 
@@ -150,6 +156,8 @@
 STRCPY(VG_Z_LIBC_SONAME, __GI_strcpy)
 #elif defined(VGO_darwin)
 STRCPY(VG_Z_DYLD,        strcpy)
+#elif defined(VGO_solaris)
+STRCPY(VG_Z_LD_SO_1,     strcpy)
 #endif
 
 
@@ -206,6 +214,8 @@
 STRCMP(VG_Z_LIBC_SONAME,          __GI_strcmp)
 STRCMP(VG_Z_LD_LINUX_X86_64_SO_2, strcmp)
 STRCMP(VG_Z_LD64_SO_1,            strcmp)
+#elif defined(VGO_solaris)
+STRCMP(VG_Z_LD_SO_1,              strcmp)
 #endif
 
 
@@ -301,6 +311,8 @@
 #if defined(VGO_linux)
 MEMCPY(VG_Z_LD_SO_1,     memcpy) /* ld.so.1 */
 MEMCPY(VG_Z_LD64_SO_1,   memcpy) /* ld64.so.1 */
+#elif defined(VGO_solaris)
+MEMCPY(VG_Z_LD_SO_1,      memcpy)
 #endif
 
 
@@ -381,6 +393,8 @@
 
 #if defined(VGO_linux)
 STRSTR(VG_Z_LIBC_SONAME,          strstr)
+#elif defined(VGO_solaris)
+STRSTR(VG_Z_LIBC_SONAME,          strstr)
 #endif
 
 
@@ -418,6 +432,8 @@
 
 #if defined(VGO_linux)
 STRPBRK(VG_Z_LIBC_SONAME,          strpbrk)
+#elif defined(VGO_solaris)
+STRPBRK(VG_Z_LIBC_SONAME,          strpbrk)
 #endif
 
 
diff --git a/exp-sgcheck/h_main.c b/exp-sgcheck/h_main.c
index fc2650d..84a3cfc 100644
--- a/exp-sgcheck/h_main.c
+++ b/exp-sgcheck/h_main.c
@@ -11,12 +11,12 @@
 
    Initial version (Annelid):
 
-   Copyright (C) 2003-2013 Nicholas Nethercote
+   Copyright (C) 2003-2015 Nicholas Nethercote
       njn@valgrind.org
 
    Valgrind-3.X port:
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/exp-sgcheck/h_main.h b/exp-sgcheck/h_main.h
index b52af8c..ddba8a5 100644
--- a/exp-sgcheck/h_main.h
+++ b/exp-sgcheck/h_main.h
@@ -9,9 +9,9 @@
    This file is part of Ptrcheck, a Valgrind tool for checking pointer
    use in programs.
 
-   Copyright (C) 2003-2013 Nicholas Nethercote
+   Copyright (C) 2003-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/exp-sgcheck/pc_common.c b/exp-sgcheck/pc_common.c
index de6bb16..d891d44 100644
--- a/exp-sgcheck/pc_common.c
+++ b/exp-sgcheck/pc_common.c
@@ -9,7 +9,7 @@
    This file is part of Ptrcheck, a Valgrind tool for checking pointer
    use in programs.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -564,8 +564,8 @@
                   what, s );
             VG_(pp_ExeContext)( VG_(get_error_where)(err) );
    
-            emit( "  <auxwhat>Address %#lx is %ld bytes inside a "
-                  "%ld-byte block free'd</auxwhat>\n",
+            emit( "  <auxwhat>Address %#lx is %lu bytes inside a "
+                  "%lu-byte block free'd</auxwhat>\n",
                   lo, lo-Seg__addr(seglo), Seg__size(seglo) );
             VG_(pp_ExeContext)(Seg__where(seglo));
 
@@ -575,8 +575,8 @@
                   what, s );
             VG_(pp_ExeContext)( VG_(get_error_where)(err) );
    
-            emit( " Address %#lx is %ld bytes inside a "
-                  "%ld-byte block free'd\n",
+            emit( " Address %#lx is %lu bytes inside a "
+                  "%lu-byte block free'd\n",
                   lo, lo-Seg__addr(seglo), Seg__size(seglo) );
             VG_(pp_ExeContext)(Seg__where(seglo));
 
@@ -595,8 +595,8 @@
                emit( "  <auxwhat>First byte is "
                         "not inside a known block</auxwhat>\n" );
             } else {
-               emit( "  <auxwhat>First byte (%#lx) is %ld bytes inside a "
-                     "%ld-byte block alloc'd</auxwhat>\n",
+               emit( "  <auxwhat>First byte (%#lx) is %lu bytes inside a "
+                     "%lu-byte block alloc'd</auxwhat>\n",
                      lo, lo-Seg__addr(seglo), Seg__size(seglo) );
                VG_(pp_ExeContext)(Seg__where(seglo));
             }
@@ -605,8 +605,8 @@
                emit( "  <auxwhat>Last byte is "
                         "not inside a known block</auxwhat>\n" );
             } else {
-               emit( "  <auxwhat>Last byte (%#lx) is %ld bytes inside a "
-                     "%ld-byte block alloc'd</auxwhat>\n",
+               emit( "  <auxwhat>Last byte (%#lx) is %lu bytes inside a "
+                     "%lu-byte block alloc'd</auxwhat>\n",
                      hi, hi-Seg__addr(seghi), Seg__size(seghi) );
                VG_(pp_ExeContext)(Seg__where(seghi));
             }
@@ -620,8 +620,8 @@
             if (UNKNOWN == seglo) {
                emit( " First byte is not inside a known block\n" );
             } else {
-               emit( " First byte (%#lx) is %ld bytes inside a "
-                     "%ld-byte block alloc'd\n",
+               emit( " First byte (%#lx) is %lu bytes inside a "
+                     "%lu-byte block alloc'd\n",
                      lo, lo-Seg__addr(seglo), Seg__size(seglo) );
                VG_(pp_ExeContext)(Seg__where(seglo));
             }
@@ -629,8 +629,8 @@
             if (UNKNOWN == seghi) {
                emit( " Last byte is not inside a known block\n" );
             } else {
-               emit( " Last byte (%#lx) is %ld bytes inside a "
-                     "%ld-byte block alloc'd\n",
+               emit( " Last byte (%#lx) is %lu bytes inside a "
+                     "%lu-byte block alloc'd\n",
                      hi, hi-Seg__addr(seghi), Seg__size(seghi) );
                VG_(pp_ExeContext)(Seg__where(seghi));
             }
diff --git a/exp-sgcheck/pc_common.h b/exp-sgcheck/pc_common.h
index 932e850..22e87b4 100644
--- a/exp-sgcheck/pc_common.h
+++ b/exp-sgcheck/pc_common.h
@@ -9,7 +9,7 @@
    This file is part of Ptrcheck, a Valgrind tool for checking pointer
    use in programs.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/exp-sgcheck/pc_main.c b/exp-sgcheck/pc_main.c
index 19d78d4..f3f5907 100644
--- a/exp-sgcheck/pc_main.c
+++ b/exp-sgcheck/pc_main.c
@@ -9,7 +9,7 @@
    This file is part of Ptrcheck, a Valgrind tool for checking pointer
    use in programs.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -89,7 +89,7 @@
    VG_(details_description)     ("a stack and global array "
                                  "overrun detector");
    VG_(details_copyright_author)(
-      "Copyright (C) 2003-2013, and GNU GPL'd, by OpenWorks Ltd et al.");
+      "Copyright (C) 2003-2015, and GNU GPL'd, by OpenWorks Ltd et al.");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
    VG_(details_avg_translation_sizeB) ( 496 );
 
diff --git a/exp-sgcheck/sg_main.c b/exp-sgcheck/sg_main.c
index 0b2c50e..d961abf 100644
--- a/exp-sgcheck/sg_main.c
+++ b/exp-sgcheck/sg_main.c
@@ -9,7 +9,7 @@
    This file is part of Ptrcheck, a Valgrind tool for checking pointer
    use in programs.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -631,7 +631,7 @@
 
 static void GlobalTreeNode__pp ( GlobalTreeNode* nd ) {
    tl_assert(nd->descr);
-   VG_(printf)("GTNode [%#lx,+%ld) %s", 
+   VG_(printf)("GTNode [%#lx,+%lu) %s", 
                nd->addr, nd->szB, nd->descr->name);
 }
 
@@ -1648,7 +1648,7 @@
            sKey.szB  = szB;
            gKey.addr = ea;
            gKey.szB  = szB;
-           if (0) VG_(printf)("Tree sizes %ld %ld\n",
+           if (0) VG_(printf)("Tree sizes %lu %lu\n",
                               VG_(sizeFM)(siTrees[tid]), VG_(sizeFM)(giTree));
            sOK = VG_(findBoundsFM)( siTrees[tid], 
                                     (UWord*)&sLB,    NULL/*unused*/,
@@ -1896,7 +1896,7 @@
          if (0 && (sb || gb))
             VG_(message)(Vg_DebugMsg, 
                          "exp-sgcheck: new max tree sizes: "
-                         "StackTree %ld, GlobalTree %ld\n",
+                         "StackTree %lu, GlobalTree %lu\n",
                          stats__max_sitree_size, stats__max_gitree_size );
       }
    } else {
diff --git a/exp-sgcheck/sg_main.h b/exp-sgcheck/sg_main.h
index 007c63b..2d3d846 100644
--- a/exp-sgcheck/sg_main.h
+++ b/exp-sgcheck/sg_main.h
@@ -9,7 +9,7 @@
    This file is part of Ptrcheck, a Valgrind tool for checking pointer
    use in programs.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/exp-sgcheck/tests/bad_percentify.vgtest b/exp-sgcheck/tests/bad_percentify.vgtest
index fbc0a83..a0e50bf 100644
--- a/exp-sgcheck/tests/bad_percentify.vgtest
+++ b/exp-sgcheck/tests/bad_percentify.vgtest
@@ -1,2 +1,2 @@
-prereq: ./is_arch_supported && ../../tests/os_test linux
+prereq: ./is_arch_supported && (../../tests/os_test linux || ../../tests/os_test solaris)
 prog: bad_percentify
diff --git a/exp-sgcheck/tests/globalerr.vgtest b/exp-sgcheck/tests/globalerr.vgtest
index a679a82..0f92ab3 100644
--- a/exp-sgcheck/tests/globalerr.vgtest
+++ b/exp-sgcheck/tests/globalerr.vgtest
@@ -1,2 +1,2 @@
-prereq: ./is_arch_supported && ../../tests/os_test linux
+prereq: ./is_arch_supported && (../../tests/os_test linux || ../../tests/os_test solaris)
 prog: globalerr
diff --git a/exp-sgcheck/tests/hackedbz2.vgtest b/exp-sgcheck/tests/hackedbz2.vgtest
index b84d395..95a2829 100644
--- a/exp-sgcheck/tests/hackedbz2.vgtest
+++ b/exp-sgcheck/tests/hackedbz2.vgtest
@@ -1,2 +1,2 @@
-prereq: ./is_arch_supported && ../../tests/os_test linux
+prereq: ./is_arch_supported && (../../tests/os_test linux || ../../tests/os_test solaris)
 prog: hackedbz2
diff --git a/exp-sgcheck/tests/hsg.vgtest b/exp-sgcheck/tests/hsg.vgtest
index b03f438..cdf35ba 100644
--- a/exp-sgcheck/tests/hsg.vgtest
+++ b/exp-sgcheck/tests/hsg.vgtest
@@ -1,4 +1,4 @@
-prereq: ./is_arch_supported && ../../tests/os_test linux
+prereq: ./is_arch_supported && (../../tests/os_test linux || ../../tests/os_test solaris)
 prog: hsg
 vgopts: --xml=yes --xml-fd=2 --log-file=/dev/null
 stderr_filter: ../../memcheck/tests/filter_xml
diff --git a/exp-sgcheck/tests/preen_invars.vgtest b/exp-sgcheck/tests/preen_invars.vgtest
index 3c880bc..cbd0d52 100644
--- a/exp-sgcheck/tests/preen_invars.vgtest
+++ b/exp-sgcheck/tests/preen_invars.vgtest
@@ -1,2 +1,2 @@
-prereq: ./is_arch_supported && ../../tests/os_test linux
+prereq: ./is_arch_supported && (../../tests/os_test linux || ../../tests/os_test solaris)
 prog: preen_invars
diff --git a/exp-sgcheck/tests/stackerr.vgtest b/exp-sgcheck/tests/stackerr.vgtest
index 80481eb..8f20a4f 100644
--- a/exp-sgcheck/tests/stackerr.vgtest
+++ b/exp-sgcheck/tests/stackerr.vgtest
@@ -1,3 +1,3 @@
-prereq: ./is_arch_supported && ../../tests/os_test linux
+prereq: ./is_arch_supported && (../../tests/os_test linux || ../../tests/os_test solaris)
 vgopts: --num-callers=3
 prog: stackerr
diff --git a/gdbserver_tests/Makefile.am b/gdbserver_tests/Makefile.am
index d5a0306..bdf0c5b 100644
--- a/gdbserver_tests/Makefile.am
+++ b/gdbserver_tests/Makefile.am
@@ -1,11 +1,22 @@
 
 include $(top_srcdir)/Makefile.tool-tests.am
 
+SUBDIRS = .
+
+# OS-specific tests 
+if VGCONF_OS_IS_SOLARIS
+SUBDIRS += solaris
+endif
+
+DIST_SUBDIRS = solaris
+
 dist_noinst_SCRIPTS = \
 	invoker simulate_control_c make_local_links \
 	filter_gdb filter_make_empty \
 	filter_memcheck_monitor filter_stderr filter_vgdb \
-	filter_helgrind_monitor send_signal
+	filter_helgrind_monitor filter_helgrind_monitor_solaris \
+	filter_passsigalrm \
+	send_signal
 
 EXTRA_DIST = \
 	README_DEVELOPERS \
@@ -61,6 +72,7 @@
 	mcleak.vgtest \
 	mcmain_pic.stderrB.exp \
 	mcmain_pic.stderr.exp \
+	mcmain_pic.stderr.exp-solaris \
 	mcmain_pic.stdinB.gdb \
 	mcmain_pic.stdoutB.exp \
 	mcmain_pic.stdout.exp \
@@ -135,7 +147,9 @@
 	nlvgdbsigqueue.stderrB.exp \
 	nlvgdbsigqueue.stderr.exp \
 	nlvgdbsigqueue.stdinB.gdb \
-	nlvgdbsigqueue.stdoutB.exp
+	nlvgdbsigqueue.stdoutB.exp \
+	nlvgdbsigqueue.stdoutB.exp-solaris1 \
+	nlvgdbsigqueue.stdoutB.exp-solaris2
 
 check_PROGRAMS = \
 	clean_after_fork \
diff --git a/gdbserver_tests/filter_gdb b/gdbserver_tests/filter_gdb
index 239e76f..df9479f 100755
--- a/gdbserver_tests/filter_gdb
+++ b/gdbserver_tests/filter_gdb
@@ -44,6 +44,8 @@
 #       and cleanup some lines for a system call (on ubuntu 10 64 bits)
 #           (pay attention : there are tab characters there in)
 #           + yet another way to get a select system call
+#       and yet another (Solaris way) to get a poll system call
+#             (on 32 bits, we have /lib/libc.so.*, on 64 bits, /lib/64/libc.so.*)
 #       which registers can't be modified
 #       special transform for arm/ppc watchpoints which have an additional address
 #              at the beginning
@@ -73,7 +75,7 @@
     -e 's/\(\[Switching to thread [1234] (Thread ....)\]\)#0/\1\n#0/'                                 \
     -e 's/^\([ \* ] [0-9] Thread .... (tid [0-9] VgTs_WaitSys)  0x........ in\).*$/\1 syscall .../'   \
     -e 's/#[0-9]\(  0x........ in sleeper_or_burner\)/#.\1/'                                          \
-    -e 's/\(#0  0x........ in do_burn ()\) at sleepers.c:39/\1/'                                      \
+    -e 's/\(#0  0x........ in do_burn ()\) at sleepers.c:41/\1/'                                      \
     -e '/^Reading symbols from .*\.\.\.done\./d'                                                      \
     -e '/^Loaded symbols for .*$/d'                                                                   \
     -e '/^Current language.*/d'                                                                       \
@@ -102,6 +104,8 @@
     -e '/^[1-9][0-9]*[ 	]*\.\.\/sysdeps\/unix\/syscall-template\.S/d'                                 \
     -e '/^[1-9][0-9]*[ 	]in *\.\.\/sysdeps\/unix\/syscall-template\.S/d'                              \
     -e '/^[1-9][0-9]*[ 	]T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)/d'                    \
+    -e 's/in __pollsys () from \/.*$/in syscall .../'                                                 \
+    -e '/^   from \/lib\/64\/libc.so.*$/d'                                                            \
     -e 's/\(Could not write register \)".*"/\1 "xxx"/'                                                \
     -e 's/\(ERROR changing register \).*$/\1 xxx regno y/'                                            \
     -e 's/0x........ in \(main (argc=1, argv=0x........) at watchpoints.c:[24][3689]\)/\1/'           \
@@ -113,6 +117,7 @@
     -e 's/^\([ \*] [1234] \) *Thread /\1Thread /'                                                     \
     -e 's/VgTs_WaitSys) 0x/VgTs_WaitSys)  0x/'                                                        \
     -e '/Cannot access memory at address 0x......../d'                                                \
+    -e '/\[New Thread/d'                                                                              \
     -e '/^$/d'                                                                                     |
 
 # remove all the lines telling where the SIGFPE was trapped.
diff --git a/gdbserver_tests/filter_helgrind_monitor b/gdbserver_tests/filter_helgrind_monitor
index bba9454..dc86480 100755
--- a/gdbserver_tests/filter_helgrind_monitor
+++ b/gdbserver_tests/filter_helgrind_monitor
@@ -9,5 +9,12 @@
 # filter vgdb messages
 $dir/filter_vgdb |
 
+# Perform Solaris-specific filtering.
+if $dir/../tests/os_test solaris; then
+   $dir/filter_helgrind_monitor_solaris
+else
+   cat
+fi |
+
 # and remove any remaining empty lines
 sed -e '/^$/d'
diff --git a/gdbserver_tests/filter_helgrind_monitor_solaris b/gdbserver_tests/filter_helgrind_monitor_solaris
new file mode 100755
index 0000000..f3cded0
--- /dev/null
+++ b/gdbserver_tests/filter_helgrind_monitor_solaris
@@ -0,0 +1,42 @@
+#!/usr/bin/env perl
+
+#
+# Filter out all helgrind information about locks except the one named "mx".
+# One lock record looks like:
+# Lock ga 0x........ {
+#  Address 0x........ is 9728 bytes inside data symbol "_uberdata"
+#   kind   mbRec
+# }
+
+use strict;
+use warnings;
+
+my $lock_start_line = undef;
+my $skip_to_closing_line = 0;
+while (<STDIN>) {
+    my $line = $_;
+    chomp($line);
+    if ($line =~ /^Lock ga 0x[\.]+\s+{$/) {
+        $lock_start_line = $line;
+        $skip_to_closing_line = 1;
+    } elsif (($lock_start_line) &&
+             ($line =~ /\s*Address 0x[\.]+ is \d+ bytes inside data symbol "(\S+)"/)) {
+        if ($1 eq "mx") {
+           print "$lock_start_line\n";
+           print "$line\n";
+           $skip_to_closing_line = 0;
+        }
+    } elsif ($line =~ /^}$/) {
+        if ($skip_to_closing_line == 0) {
+            print "$line\n";
+        }
+        undef($lock_start_line);
+        $skip_to_closing_line = 0;
+    } else {
+        if ($skip_to_closing_line == 0) {
+            print "$line\n";
+        }
+    }
+}
+
+exit 0;
diff --git a/gdbserver_tests/filter_passsigalrm b/gdbserver_tests/filter_passsigalrm
new file mode 100755
index 0000000..6b86f38
--- /dev/null
+++ b/gdbserver_tests/filter_passsigalrm
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+dir=`dirname $0`
+
+$dir/filter_gdb |
+
+# Filter the number of real-time signal SIGRTMIN which
+# varies accross systems.
+
+sed 's/Program received signal SIG[0-9]*, Real-time event [0-9]*./Program received signal SIGxx, Real-time event xx./'
diff --git a/gdbserver_tests/filter_stderr b/gdbserver_tests/filter_stderr
index 8664577..a80883e 100755
--- a/gdbserver_tests/filter_stderr
+++ b/gdbserver_tests/filter_stderr
@@ -10,4 +10,5 @@
     -e '/\/path\/to\/gdb/d' \
     -e '/and then give GDB the following command/d' \
     -e '/target remote |/d' \
-    -e '/pid is optional if only one valgrind process is running/d'
+    -e '/pid is optional if only one valgrind process is running/d' \
+    -e '/warning: remote target does not support file transfer, attempting to access files from local filesystem./d'
diff --git a/gdbserver_tests/hginfo.stdoutB.exp b/gdbserver_tests/hginfo.stdoutB.exp
index 92d878d..ed8863b 100644
--- a/gdbserver_tests/hginfo.stdoutB.exp
+++ b/gdbserver_tests/hginfo.stdoutB.exp
@@ -1,10 +1,8 @@
 Breakpoint 1 at 0x........: file hg01_all_ok.c, line 13.
 Continuing.
-[New Thread ....]
 Breakpoint 1, breakme () at hg01_all_ok.c:13
 13	   if (shared == 1)
 Continuing.
-[New Thread ....]
 Breakpoint 1, breakme () at hg01_all_ok.c:13
 13	   if (shared == 1)
 Continuing.
diff --git a/gdbserver_tests/hgtls.stdoutB.exp b/gdbserver_tests/hgtls.stdoutB.exp
index 1fb3f20..e8e621b 100644
--- a/gdbserver_tests/hgtls.stdoutB.exp
+++ b/gdbserver_tests/hgtls.stdoutB.exp
@@ -1,58 +1,44 @@
 Breakpoint 1 at 0x........: file tls.c, line 55.
 Continuing.
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test race tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test race tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test local tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test local tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test global tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test global tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test static_extern tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test static_extern tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test so_extern tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test so_extern tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test so_local tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test so_local tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test so_global tls_ip 0x........ ip 0x........ equal 1
-[New Thread ....]
 Breakpoint 1, tls_ptr (p=0x........) at tls.c:55
 55		int here = 0;
 test so_global tls_ip 0x........ ip 0x........ equal 1
diff --git a/gdbserver_tests/main_pic.c b/gdbserver_tests/main_pic.c
index e452b30..6d7e3bb 100644
--- a/gdbserver_tests/main_pic.c
+++ b/gdbserver_tests/main_pic.c
@@ -1,3 +1,4 @@
+#include <inttypes.h>
 #include <stdio.h>
 
 static void another_func(char *msg)
@@ -7,8 +8,8 @@
 
 int main (int argc, char *argv[])
 {
-   printf("address of main %p\n", &main);
-   printf("address of another_func %p\n", &another_func);
+   printf("address of main %#" PRIxPTR "\n", (uintptr_t) main);
+   printf("address of another_func %#" PRIxPTR "\n", (uintptr_t) another_func);
    another_func("called from main");
    return 0;
 }
diff --git a/gdbserver_tests/make_local_links b/gdbserver_tests/make_local_links
index cbdfef5..001609a 100755
--- a/gdbserver_tests/make_local_links
+++ b/gdbserver_tests/make_local_links
@@ -95,6 +95,7 @@
 fi
 
 ln -f -s ../coregrind/vgdb gdbserver_tests/vgdb
+ln -f -s ../../coregrind/vgdb gdbserver_tests/solaris/vgdb
 
 # if ptrace not implemented in vgdb or OS restricts the initial attach,
 # some tests would block for a loooonnnng time.
@@ -108,3 +109,4 @@
 
 # cleanup the possibly big garbage previously collected output
 rm -f gdbserver_tests/garbage.filtered.out
+rm -f gdbserver_tests/solaris/garbage.filtered.out 
diff --git a/gdbserver_tests/mcbreak.stdinB.gdb b/gdbserver_tests/mcbreak.stdinB.gdb
index 4f932e6..556da9e 100644
--- a/gdbserver_tests/mcbreak.stdinB.gdb
+++ b/gdbserver_tests/mcbreak.stdinB.gdb
@@ -16,8 +16,8 @@
 end
 #
 # break1 and break2
-break t.c:112
-break t.c:117
+break t.c:113
+break t.c:118
 #
 continue
 # first break encountered.
@@ -51,9 +51,9 @@
 print whoami("after next: inferior call pushed from mcbreak.stdinB.gdb")
 continue
 #
-# encountered second break
-step
-finish
+# encountered second break. Ensure we stop on line 120 : if (argc > 1)
+break 120
+continue
 # delete all breaks
 delete
 continue
diff --git a/gdbserver_tests/mcbreak.stdoutB.exp b/gdbserver_tests/mcbreak.stdoutB.exp
index e12d2e4..ba526da 100644
--- a/gdbserver_tests/mcbreak.stdoutB.exp
+++ b/gdbserver_tests/mcbreak.stdoutB.exp
@@ -1,54 +1,53 @@
-Breakpoint 1 at 0x........: file t.c, line 112.
-Breakpoint 2 at 0x........: file t.c, line 117.
+Breakpoint 1 at 0x........: file t.c, line 113.
+Breakpoint 2 at 0x........: file t.c, line 118.
 Continuing.
-Breakpoint 1, main (argc=1, argv=0x........) at t.c:112
-112	  breakme(__LINE__); //break1
-breakme (line=112) at t.c:100
-100	   if (line > 1000)
+Breakpoint 1, main (argc=1, argv=0x........) at t.c:113
+113	  breakme(__LINE__); //break1
+breakme (line=113) at t.c:101
+101	   if (line > 1000)
 old_pc has changed after step
-102	}
+103	}
 old_pc has changed after step
-main (argc=1, argv=0x........) at t.c:113
-113	  for (i = len-1; i >= 0; i=i-2)
+main (argc=1, argv=0x........) at t.c:114
+114	  for (i = len-1; i >= 0; i=i-2)
 old_pc has changed after step
-114	     undefined[i] = undef;
+115	     undefined[i] = undef;
 $1 = void
 $2 = "undefined"
 $3 = 8
-113	  for (i = len-1; i >= 0; i=i-2)
+114	  for (i = len-1; i >= 0; i=i-2)
 old_pc has changed after step
-114	     undefined[i] = undef;
+115	     undefined[i] = undef;
 old_pc has changed after step
-113	  for (i = len-1; i >= 0; i=i-2)
+114	  for (i = len-1; i >= 0; i=i-2)
 $4 = void
 $5 = "undefi?e?"
 $6 = 6
-114	     undefined[i] = undef;
+115	     undefined[i] = undef;
 $7 = void
 $8 = "undefi?e?"
 $9 = 4
-113	  for (i = len-1; i >= 0; i=i-2)
+114	  for (i = len-1; i >= 0; i=i-2)
 $10 = void
 $11 = "unde?i?e?"
 $12 = 4
 $13 = 1
 $14 = void
 Continuing.
-Breakpoint 2, main (argc=1, argv=0x........) at t.c:117
-117	  breakme(__LINE__); //break2
-breakme (line=117) at t.c:100
-100	   if (line > 1000)
-Run till exit from #0  breakme (line=117) at t.c:100
-main (argc=1, argv=0x........) at t.c:119
-119	  if (argc > 1)
+Breakpoint 2, main (argc=1, argv=0x........) at t.c:118
+118	  breakme(__LINE__); //break2
+Breakpoint 3 at 0x........: file t.c, line 120.
+Continuing.
+Breakpoint 3, main (argc=1, argv=0x........) at t.c:120
+120	  if (argc > 1)
 Delete all breakpoints? (y or n) [answered Y; input not from terminal]
 Continuing.
 Program received signal SIGTRAP, Trace/breakpoint trap.
-0x........ in make_error (s=0x........ "called from level") at t.c:40
-40	  if (int_und == 0)
-43	     printf ("%s int_und is not zero\n", s);
+0x........ in make_error (s=0x........ "called from level") at t.c:41
+41	  if (int_und == 0)
+44	     printf ("%s int_und is not zero\n", s);
 old_pc has changed after step
 Continuing.
 Program received signal SIGTRAP, Trace/breakpoint trap.
-0x........ in make_error (s=0x........ "called from main") at t.c:40
-40	  if (int_und == 0)
+0x........ in make_error (s=0x........ "called from main") at t.c:41
+41	  if (int_und == 0)
diff --git a/gdbserver_tests/mchelp.stdoutB.exp b/gdbserver_tests/mchelp.stdoutB.exp
index d3c61a1..6d6bdb1 100644
--- a/gdbserver_tests/mchelp.stdoutB.exp
+++ b/gdbserver_tests/mchelp.stdoutB.exp
@@ -13,10 +13,14 @@
   v.set merge-recursive-frames <num> : merge recursive calls in max <num> frames
   v.set vgdb-error <errornr> : debug me at error >= <errornr> 
 memcheck monitor commands:
-  get_vbits <addr> [<len>]
-        returns validity bits for <len> (or 1) bytes at <addr>
+  xb <addr> [<len>]
+        prints validity bits for <len> (or 1) bytes at <addr>
             bit values 0 = valid, 1 = invalid, __ = unaddressable byte
-        Example: get_vbits 0x........ 10
+        Then prints the bytes values below the corresponding validity bits
+        in a layout similar to the gdb command 'x /<len>xb <addr>'
+        Example: xb 0x........ 10
+  get_vbits <addr> [<len>]
+        Similar to xb, but only prints the validity bytes by group of 4.
   make_memory [noaccess|undefined
                      |defined|Definedifaddressable] <addr> [<len>]
         mark <len> (or 1) bytes at <addr> with the given accessibility
@@ -37,8 +41,13 @@
                  leak_check summary any
                  leak_check full kinds indirect,possible
                  leak_check full reachable any limited 100
-  block_list <loss_record_nr>
+  block_list <loss_record_nr>|<loss_record_nr_from>..<loss_record_nr_to>
+                [unlimited*|limited <max_blocks>]
+                [heuristics heur1,heur2,...]
         after a leak search, shows the list of blocks of <loss_record_nr>
+        (or of the range <loss_record_nr_from>..<loss_record_nr_to>).
+        With heuristics, only shows the blocks found via heur1,heur2,...
+            * = defaults
   who_points_at <addr> [<len>]
         shows places pointing inside <len> (default 1) bytes at <addr>
         (with len 1, only shows "start pointers" pointing exactly to <addr>,
@@ -61,10 +70,11 @@
   v.do   expensive_sanity_check_general : do an expensive sanity check now
   v.info gdbserver_status : show gdbserver status
   v.info memory [aspacemgr] : show valgrind heap memory stats
-     (with aspacemgr arg, also shows valgrind segments on log ouput)
+     (with aspacemgr arg, also shows valgrind segments on log output)
   v.info exectxt          : show stacktraces and stats of all execontexts
   v.info scheduler        : show valgrind thread state and stacktrace
   v.info stats            : show various valgrind and tool stats
+  v.info unwind <addr> [<len>] : show unwind debug info for <addr> .. <addr+len>
   v.set debuglog <level>  : set valgrind debug log level to <level>
   v.set hostvisibility [yes*|no] : (en/dis)ables access by gdb/gdbserver to
     Valgrind internal host status/memory
@@ -72,10 +82,14 @@
     (default traceflags 0b00100000 : show after instrumentation)
    An additional flag  0b100000000 allows to show gdbserver instrumentation
 memcheck monitor commands:
-  get_vbits <addr> [<len>]
-        returns validity bits for <len> (or 1) bytes at <addr>
+  xb <addr> [<len>]
+        prints validity bits for <len> (or 1) bytes at <addr>
             bit values 0 = valid, 1 = invalid, __ = unaddressable byte
-        Example: get_vbits 0x........ 10
+        Then prints the bytes values below the corresponding validity bits
+        in a layout similar to the gdb command 'x /<len>xb <addr>'
+        Example: xb 0x........ 10
+  get_vbits <addr> [<len>]
+        Similar to xb, but only prints the validity bytes by group of 4.
   make_memory [noaccess|undefined
                      |defined|Definedifaddressable] <addr> [<len>]
         mark <len> (or 1) bytes at <addr> with the given accessibility
@@ -96,8 +110,13 @@
                  leak_check summary any
                  leak_check full kinds indirect,possible
                  leak_check full reachable any limited 100
-  block_list <loss_record_nr>
+  block_list <loss_record_nr>|<loss_record_nr_from>..<loss_record_nr_to>
+                [unlimited*|limited <max_blocks>]
+                [heuristics heur1,heur2,...]
         after a leak search, shows the list of blocks of <loss_record_nr>
+        (or of the range <loss_record_nr_from>..<loss_record_nr_to>).
+        With heuristics, only shows the blocks found via heur1,heur2,...
+            * = defaults
   who_points_at <addr> [<len>]
         shows places pointing inside <len> (default 1) bytes at <addr>
         (with len 1, only shows "start pointers" pointing exactly to <addr>,
diff --git a/gdbserver_tests/mcinfcallRU.vgtest b/gdbserver_tests/mcinfcallRU.vgtest
index a193acf..0c7b079 100644
--- a/gdbserver_tests/mcinfcallRU.vgtest
+++ b/gdbserver_tests/mcinfcallRU.vgtest
@@ -7,7 +7,7 @@
 # filter_gdb to replace pid and Thread numbers in the output of the program:
 stderr_filter: filter_gdb
 # Disable on Darwin: inferior call rejected as it cannot find malloc.
-prereq: test -e gdb && ../tests/os_test linux
+prereq: test -e gdb && ! ../tests/os_test darwin
 progB: gdb
 argsB:  --quiet -l 60 --nx ./sleepers
 stdinB: mcinfcallRU.stdinB.gdb
diff --git a/gdbserver_tests/mcinfcallWSRU.stderrB.exp b/gdbserver_tests/mcinfcallWSRU.stderrB.exp
index 5710545..7789123 100644
--- a/gdbserver_tests/mcinfcallWSRU.stderrB.exp
+++ b/gdbserver_tests/mcinfcallWSRU.stderrB.exp
@@ -1,28 +1,25 @@
 relaying data between gdb and process ....
 vgdb-error value changed from 0 to 999999
-Breakpoint 1 at 0x........: file sleepers.c, line 72.
+Breakpoint 1 at 0x........: file sleepers.c, line 74.
 Continuing.
-[New Thread ....]
-Breakpoint 1, sleeper_or_burner (v=0x........) at sleepers.c:72
-72	   int i = 0;
+Breakpoint 1, sleeper_or_burner (v=0x........) at sleepers.c:74
+74	   int i = 0;
 Continuing.
-[New Thread ....]
-Breakpoint 1, sleeper_or_burner (v=0x........) at sleepers.c:72
-72	   int i = 0;
+Breakpoint 1, sleeper_or_burner (v=0x........) at sleepers.c:74
+74	   int i = 0;
 Continuing.
-[New Thread ....]
-Breakpoint 1, sleeper_or_burner (v=0x........) at sleepers.c:72
-72	   int i = 0;
+Breakpoint 1, sleeper_or_burner (v=0x........) at sleepers.c:74
+74	   int i = 0;
 Continuing.
-Breakpoint 1, sleeper_or_burner (v=0x........) at sleepers.c:72
-72	   int i = 0;
+Breakpoint 1, sleeper_or_burner (v=0x........) at sleepers.c:74
+74	   int i = 0;
 Continuing.
 Program received signal SIGTRAP, Trace/breakpoint trap.
-0x........ in do_burn () at sleepers.c:39
-39	   for (i = 0; i < burn; i++) loopnr++;
+0x........ in do_burn () at sleepers.c:41
+41	   for (i = 0; i < burn; i++) loopnr++;
 [Switching to thread 1 (Thread ....)]
 #0  0x........ in do_burn ()
-39	   for (i = 0; i < burn; i++) loopnr++;
+41	   for (i = 0; i < burn; i++) loopnr++;
 $1 = void
 [Switching to thread 2 (Thread ....)]
 #0  0x........ in syscall ...
diff --git a/gdbserver_tests/mcinfcallWSRU.vgtest b/gdbserver_tests/mcinfcallWSRU.vgtest
index f9c1983..fd3922f 100644
--- a/gdbserver_tests/mcinfcallWSRU.vgtest
+++ b/gdbserver_tests/mcinfcallWSRU.vgtest
@@ -7,7 +7,7 @@
 vgopts: --tool=memcheck --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mcinfcallWSRU
 # We need a non buggy gdb.step on arm thumb.
 # Disable on Darwin: inferior call rejected as it cannot find malloc.
-prereq: test -e gdb -a -f gdb.step && ../tests/os_test linux
+prereq: test -e gdb -a -f gdb.step && ! ../tests/os_test darwin
 # filter_gdb to replace pid and Thread numbers in the output of the program:
 stderr_filter: filter_gdb
 progB: gdb
diff --git a/gdbserver_tests/mcmain_pic.stderr.exp-solaris b/gdbserver_tests/mcmain_pic.stderr.exp-solaris
new file mode 100644
index 0000000..cd16393
--- /dev/null
+++ b/gdbserver_tests/mcmain_pic.stderr.exp-solaris
@@ -0,0 +1,7 @@
+(action at startup) vgdb me ... 
+HEAP SUMMARY:
+    in use at exit: 131,080 bytes in 1 blocks
+  total heap usage: 1 allocs, 0 frees, 131,080 bytes allocated
+For a detailed leak analysis, rerun with: --leak-check=full
+For counts of detected and suppressed errors, rerun with: -v
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/gdbserver_tests/mcmain_pic.stdinB.gdb b/gdbserver_tests/mcmain_pic.stdinB.gdb
index 46e19f9..8ec0a6f 100644
--- a/gdbserver_tests/mcmain_pic.stdinB.gdb
+++ b/gdbserver_tests/mcmain_pic.stdinB.gdb
@@ -4,7 +4,7 @@
 monitor v.set vgdb-error 999999
 #
 # break
-break main_pic.c:11
+break main_pic.c:12
 #
 continue
 # first break encountered.
diff --git a/gdbserver_tests/mcmain_pic.stdoutB.exp b/gdbserver_tests/mcmain_pic.stdoutB.exp
index ffac737..e0a46c5 100644
--- a/gdbserver_tests/mcmain_pic.stdoutB.exp
+++ b/gdbserver_tests/mcmain_pic.stdoutB.exp
@@ -1,7 +1,7 @@
-Breakpoint 1 at 0x........: file main_pic.c, line 11.
+Breakpoint 1 at 0x........: file main_pic.c, line 12.
 Continuing.
-Breakpoint 1, main (argc=1, argv=0x........) at main_pic.c:11
-11	   printf("address of another_func %p\n", &another_func);
+Breakpoint 1, main (argc=1, argv=0x........) at main_pic.c:12
+12	   printf("address of another_func %#" PRIxPTR "\n", (uintptr_t) another_func);
 $1 = void
 $2 = (int (*)(int, char **)) 0x........ <main>
 $3 = (void (*)(char *)) 0x........ <another_func>
diff --git a/gdbserver_tests/mcsignopass.stderr.exp b/gdbserver_tests/mcsignopass.stderr.exp
index 3708ffb..7b0a80e 100644
--- a/gdbserver_tests/mcsignopass.stderr.exp
+++ b/gdbserver_tests/mcsignopass.stderr.exp
@@ -1,7 +1,7 @@
 (action at startup) vgdb me ... 
 Test 1: Invalid write of size 4
-   at 0x........: test1 (faultstatus.c:105)
-   by 0x........: main (faultstatus.c:168)
+   at 0x........: test1 (faultstatus.c:116)
+   by 0x........: main (faultstatus.c:179)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
   PASS
 Test 2:   PASS
diff --git a/gdbserver_tests/mcsignopass.stdoutB.exp b/gdbserver_tests/mcsignopass.stdoutB.exp
index e349941..d77f983 100644
--- a/gdbserver_tests/mcsignopass.stdoutB.exp
+++ b/gdbserver_tests/mcsignopass.stdoutB.exp
@@ -6,54 +6,54 @@
 SIGFPE        Yes	Yes	Yes		Arithmetic exception
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Signal        Stop	Print	Pass to program	Description
 SIGSEGV       No	Yes	Yes		Segmentation fault
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
 Program received signal SIGBUS, Bus error.
-0x........ in test3 () at faultstatus.c:115
-115		mapping[FILESIZE+10];
+0x........ in test3 () at faultstatus.c:126
+126		mapping[FILESIZE+10];
 Continuing.
 Program received signal SIGFPE, Arithmetic exception.
diff --git a/gdbserver_tests/mcsigpass.stderr.exp b/gdbserver_tests/mcsigpass.stderr.exp
index 80659b8..bd67a7e 100644
--- a/gdbserver_tests/mcsigpass.stderr.exp
+++ b/gdbserver_tests/mcsigpass.stderr.exp
@@ -1,7 +1,7 @@
 (action at startup) vgdb me ... 
 Test 1: Invalid write of size 4
-   at 0x........: test1 (faultstatus.c:105)
-   by 0x........: main (faultstatus.c:168)
+   at 0x........: test1 (faultstatus.c:116)
+   by 0x........: main (faultstatus.c:179)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
   PASS
 Test 2:   PASS
diff --git a/gdbserver_tests/mcsigpass.stdoutB.exp b/gdbserver_tests/mcsigpass.stdoutB.exp
index 4c2d799..de6c263 100644
--- a/gdbserver_tests/mcsigpass.stdoutB.exp
+++ b/gdbserver_tests/mcsigpass.stdoutB.exp
@@ -1,14 +1,14 @@
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test1 () at faultstatus.c:105
-105		*BADADDR = 'x';
+0x........ in test1 () at faultstatus.c:116
+116		*BADADDR = 'x';
 Continuing.
 Program received signal SIGSEGV, Segmentation fault.
-0x........ in test2 () at faultstatus.c:110
-110		mapping[0] = 'x';
+0x........ in test2 () at faultstatus.c:121
+121		mapping[0] = 'x';
 Continuing.
 Program received signal SIGBUS, Bus error.
-0x........ in test3 () at faultstatus.c:115
-115		mapping[FILESIZE+10];
+0x........ in test3 () at faultstatus.c:126
+126		mapping[FILESIZE+10];
 Continuing.
 Program received signal SIGFPE, Arithmetic exception.
diff --git a/gdbserver_tests/mcvabits.stderrB.exp b/gdbserver_tests/mcvabits.stderrB.exp
index 6b4635e..bdabb1e 100644
--- a/gdbserver_tests/mcvabits.stderrB.exp
+++ b/gdbserver_tests/mcvabits.stderrB.exp
@@ -5,6 +5,10 @@
 Address 0x........ len 10 defined
  Address 0x........ is 0 bytes inside data symbol "undefined"
 00000000 00000000 0000
+		  00	  00	  00	  00	  00	  00	  00	  00
+0x........:	0x........	0x........	0x........	0x........	0x........	0x........	0x........	0x........
+		  00	  00
+0x........:	0x........	0x........
 Address 0x........ len 10 addressable
  Address 0x........ is 0 bytes inside data symbol "undefined"
 Address 0x........ len 10 not defined:
diff --git a/gdbserver_tests/mcvabits.stdinB.gdb b/gdbserver_tests/mcvabits.stdinB.gdb
index 21c7d0d..f0e480b 100644
--- a/gdbserver_tests/mcvabits.stdinB.gdb
+++ b/gdbserver_tests/mcvabits.stdinB.gdb
@@ -23,6 +23,7 @@
 eval "monitor check_memory addressable 0x%lx 10", $0xundefined
 eval "monitor check_memory defined     0x%lx 10", $0xundefined
 eval "monitor get_vbits                0x%lx 10", $0xundefined
+eval "monitor xb                       0x%lx 10", $0xundefined
 #
 # continue till //2break:
 continue
diff --git a/gdbserver_tests/mcvabits.stdoutB.exp b/gdbserver_tests/mcvabits.stdoutB.exp
index e8d3661..c0aadc8 100644
--- a/gdbserver_tests/mcvabits.stdoutB.exp
+++ b/gdbserver_tests/mcvabits.stdoutB.exp
@@ -1,11 +1,11 @@
-Breakpoint 1 at 0x........: file t.c, line 100.
+Breakpoint 1 at 0x........: file t.c, line 101.
 Continuing.
-Breakpoint 1, breakme (line=112) at t.c:100
-100	   if (line > 1000)
-#1  0x........ in main (argc=1, argv=0x........) at t.c:112
-112	  breakme(__LINE__); //break1
+Breakpoint 1, breakme (line=113) at t.c:101
+101	   if (line > 1000)
+#1  0x........ in main (argc=1, argv=0x........) at t.c:113
+113	  breakme(__LINE__); //break1
 $1 = 0x........ "main name"
 $2 = "undefined"
 Continuing.
-Breakpoint 1, breakme (line=117) at t.c:100
-100	   if (line > 1000)
+Breakpoint 1, breakme (line=118) at t.c:101
+101	   if (line > 1000)
diff --git a/gdbserver_tests/mssnapshot.stdoutB.exp b/gdbserver_tests/mssnapshot.stdoutB.exp
index a2a7c55..ba43997 100644
--- a/gdbserver_tests/mssnapshot.stdoutB.exp
+++ b/gdbserver_tests/mssnapshot.stdoutB.exp
@@ -1,4 +1,4 @@
-Breakpoint 1 at 0x........: file t.c, line 105.
+Breakpoint 1 at 0x........: file t.c, line 106.
 Continuing.
-Breakpoint 1, main (argc=1, argv=0x........) at t.c:105
-105	  char *main_name __attribute__((unused)) = "main name";
+Breakpoint 1, main (argc=1, argv=0x........) at t.c:106
+106	  char *main_name __attribute__((unused)) = "main name";
diff --git a/gdbserver_tests/nlcontrolc.stdoutB.exp b/gdbserver_tests/nlcontrolc.stdoutB.exp
index 70f355b..a1013ce 100644
--- a/gdbserver_tests/nlcontrolc.stdoutB.exp
+++ b/gdbserver_tests/nlcontrolc.stdoutB.exp
@@ -1,9 +1,6 @@
 Continuing.
 Program received signal SIGTRAP, Trace/breakpoint trap.
 0x........ in syscall ...
-[New Thread ....]
-[New Thread ....]
-[New Thread ....]
   4 Thread .... (tid 4 VgTs_WaitSys)  0x........ in syscall ...
   3 Thread .... (tid 3 VgTs_WaitSys)  0x........ in syscall ...
   2 Thread .... (tid 2 VgTs_WaitSys)  0x........ in syscall ...
@@ -15,8 +12,8 @@
 changed burning parameters
 Continuing.
 Program received signal SIGTRAP, Trace/breakpoint trap.
-0x........ in do_burn () at sleepers.c:39
-39	   for (i = 0; i < burn; i++) loopnr++;
+0x........ in do_burn () at sleepers.c:41
+41	   for (i = 0; i < burn; i++) loopnr++;
 $5 = 0
 $6 = 0
 $7 = 0
diff --git a/gdbserver_tests/nlcontrolc.vgtest b/gdbserver_tests/nlcontrolc.vgtest
index e18c468..077b2bb 100644
--- a/gdbserver_tests/nlcontrolc.vgtest
+++ b/gdbserver_tests/nlcontrolc.vgtest
@@ -6,12 +6,14 @@
 #          and modify some variables
 # sleepers is started with argument so that it will compute during ages.
 # The variable modifications means it will exit in a reasonable time.
+# This test is disabled on Solaris because modifying select/poll/ppoll timeout
+# has no effect if a thread is already blocked in that syscall.
 prog: sleepers
 args: 1000000000 1000000000 1000000000 BSBSBSBS
 vgopts: --tool=none --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-nlcontrolc
 stderr_filter: filter_stderr
 # Bug 338633 nlcontrol hangs on arm64 currently.
-prereq: test -e gdb -a -f vgdb.invoker && ! ../tests/arch_test arm64 && ! ../tests/arch_test tilegx
+prereq: test -e gdb -a -f vgdb.invoker && ! ../tests/arch_test arm64 && ! ../tests/arch_test tilegx && ! ../tests/os_test solaris
 progB: gdb
 argsB: --quiet -l 60 --nx ./sleepers
 stdinB: nlcontrolc.stdinB.gdb
diff --git a/gdbserver_tests/nlgone_abrt.vgtest b/gdbserver_tests/nlgone_abrt.vgtest
index 86aecfd..e1e9f24 100644
--- a/gdbserver_tests/nlgone_abrt.vgtest
+++ b/gdbserver_tests/nlgone_abrt.vgtest
@@ -10,3 +10,4 @@
 stdinB: nlgone_abrt.stdinB.gdb
 stdoutB_filter: filter_gdb
 stderrB_filter: filter_gdb
+cleanup: rm -f vgcore.*
diff --git a/gdbserver_tests/nlgone_exit.vgtest b/gdbserver_tests/nlgone_exit.vgtest
index 02a20a7..521c19d 100644
--- a/gdbserver_tests/nlgone_exit.vgtest
+++ b/gdbserver_tests/nlgone_exit.vgtest
@@ -7,6 +7,7 @@
 stderr_filter: filter_stderr
 prereq: test -e gdb
 progB: gdb
+envB: LC_ALL=C
 argsB: --quiet -l 60 --nx ./gone
 stdinB: nlgone_exit.stdinB.gdb
 stdoutB_filter: filter_gdb
diff --git a/gdbserver_tests/nlpasssigalrm.stdoutB.exp b/gdbserver_tests/nlpasssigalrm.stdoutB.exp
index 708a3a3..625883e 100644
--- a/gdbserver_tests/nlpasssigalrm.stdoutB.exp
+++ b/gdbserver_tests/nlpasssigalrm.stdoutB.exp
@@ -16,7 +16,7 @@
 55	   sa.sa_handler = sigrtmin_handler;
 $2 = 1
 Continuing.
-Program received signal SIG34, Real-time event 34.
+Program received signal SIGxx, Real-time event xx.
 0x........ in syscall ...
 Continuing.
 Program exited normally.
diff --git a/gdbserver_tests/nlpasssigalrm.vgtest b/gdbserver_tests/nlpasssigalrm.vgtest
index 5c4e395..0450207 100644
--- a/gdbserver_tests/nlpasssigalrm.vgtest
+++ b/gdbserver_tests/nlpasssigalrm.vgtest
@@ -11,5 +11,5 @@
 progB: gdb
 argsB: --quiet -l 60 --nx ./passsigalrm
 stdinB: nlpasssigalrm.stdinB.gdb
-stdoutB_filter: filter_gdb
+stdoutB_filter: filter_passsigalrm
 stderrB_filter: filter_gdb
diff --git a/gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-solaris1 b/gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-solaris1
new file mode 100644
index 0000000..5cd0e75
--- /dev/null
+++ b/gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-solaris1
@@ -0,0 +1,16 @@
+continuing to have vgdb interrupted by simulate_control_c
+Continuing.
+Program received signal SIGTRAP, Trace/breakpoint trap.
+0x........ in syscall ...
+attachedwaitingforsigusr1
+sending signal
+sending signal
+continuing to receive first SIGUSR1
+Continuing.
+Program received signal SIGUSR1, User defined signal 1.
+0x........ in syscall ...
+continuing to receive second SIGUSR1
+Continuing.
+Program received signal SIGTRAP, Trace/breakpoint trap.
+0x........ in syscall ...
+Kill the program being debugged? (y or n) [answered Y; input not from terminal]
diff --git a/gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-solaris2 b/gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-solaris2
new file mode 100644
index 0000000..2eca10b
--- /dev/null
+++ b/gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-solaris2
@@ -0,0 +1,17 @@
+continuing to have vgdb interrupted by simulate_control_c
+Continuing.
+Program received signal SIGTRAP, Trace/breakpoint trap.
+0x........ in syscall ...
+attachedwaitingforsigusr1
+sending signal
+sending signal
+continuing to receive first SIGUSR1
+Continuing.
+[New Thread ....]
+Program received signal SIGUSR1, User defined signal 1.
+0x........ in syscall ...
+continuing to receive second SIGUSR1
+Continuing.
+Program received signal SIGTRAP, Trace/breakpoint trap.
+0x........ in syscall ...
+Kill the program being debugged? (y or n) [answered Y; input not from terminal]
diff --git a/gdbserver_tests/sleepers.c b/gdbserver_tests/sleepers.c
index e06e0cd..64ab0ea 100644
--- a/gdbserver_tests/sleepers.c
+++ b/gdbserver_tests/sleepers.c
@@ -1,4 +1,5 @@
 #define _GNU_SOURCE
+#include <errno.h>
 #include <string.h>
 #include <pthread.h>
 #include <stdlib.h>
@@ -26,7 +27,8 @@
 static void whoami(char *msg) __attribute__((unused));
 static void whoami(char *msg)
 {
-   fprintf(stderr, "pid %d Thread %d %s\n", getpid(), gettid(), msg);
+   fprintf(stderr, "pid %ld Thread %ld %s\n", (long) getpid(), (long) gettid(),
+           msg);
    fflush(stderr);
 }
 
@@ -82,8 +84,8 @@
          t[s->t].tv_sec = sleepms / 1000;
          t[s->t].tv_usec = (sleepms % 1000) * 1000;
          ret = select (0, NULL, NULL, NULL, &t[s->t]);
-         /* We only expect a timeout result from the above. */
-         if (ret != 0)
+         /* We only expect a timeout result or EINTR from the above. */
+         if (ret != 0 && errno != EINTR)
             perror("unexpected result from select");
       }
       if (burn > 0 && s->burn)
diff --git a/gdbserver_tests/solaris/Makefile.am b/gdbserver_tests/solaris/Makefile.am
new file mode 100644
index 0000000..e9ebcc8
--- /dev/null
+++ b/gdbserver_tests/solaris/Makefile.am
@@ -0,0 +1,12 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = \
+	filter_stderr
+
+EXTRA_DIST = \
+	nlcontrolc.stderrB.exp \
+	nlcontrolc.stderr.exp \
+	nlcontrolc.stdinB.gdb \
+	nlcontrolc.stdoutB.exp \
+	nlcontrolc.vgtest
diff --git a/gdbserver_tests/solaris/filter_stderr b/gdbserver_tests/solaris/filter_stderr
new file mode 100755
index 0000000..0ae9313
--- /dev/null
+++ b/gdbserver_tests/solaris/filter_stderr
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr
diff --git a/gdbserver_tests/solaris/nlcontrolc.stderr.exp b/gdbserver_tests/solaris/nlcontrolc.stderr.exp
new file mode 100644
index 0000000..3f06448
--- /dev/null
+++ b/gdbserver_tests/solaris/nlcontrolc.stderr.exp
@@ -0,0 +1,11 @@
+Nulgrind, the minimal Valgrind tool
+
+(action at startup) vgdb me ... 
+
+
+loops/sleep_ms/burn/threads_spec:  1000000000 5000 1000000000 BSBSBSBS
+Brussels ready to sleep and/or burn
+London ready to sleep and/or burn
+Petaouchnok ready to sleep and/or burn
+main ready to sleep and/or burn
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/gdbserver_tests/solaris/nlcontrolc.stderrB.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to gdbserver_tests/solaris/nlcontrolc.stderrB.exp
diff --git a/gdbserver_tests/solaris/nlcontrolc.stdinB.gdb b/gdbserver_tests/solaris/nlcontrolc.stdinB.gdb
new file mode 100644
index 0000000..182834f
--- /dev/null
+++ b/gdbserver_tests/solaris/nlcontrolc.stdinB.gdb
@@ -0,0 +1,31 @@
+# connect gdb to Valgrind gdbserver:
+target remote | ../vgdb --wait=60 --vgdb-prefix=./vgdb-prefix-solaris-nlcontrolc
+echo vgdb launched process attached\n
+monitor v.set vgdb-error 999999
+#
+#
+# simulate control-c in a few seconds
+shell ../simulate_control_c --vgdb-prefix=./vgdb-prefix-solaris-nlcontrolc 1 grep main nlcontrolc.stderr.out
+#
+continue
+#
+# Here, all tasks should be blocked in a loooonnnng select, all in WaitSys
+info threads
+# After the timeout expires, threads will unblock.
+#
+# We will change the burning parameters in a few seconds
+shell ../simulate_control_c --vgdb-prefix=./vgdb-prefix-solaris-nlcontrolc 6 grep CPU nlcontrolc.stdoutB.out
+#
+echo Now threads are burning CPU\n
+continue
+#
+# Threads are burning cpu now
+# We would like to test info threads here, but which thread are Runnable or Yielding
+# is unpredictable.
+# info threads
+p burn = 0
+p loops = 0
+p report_finished = 0
+continue
+# and the process should stop very quickly now
+quit
diff --git a/gdbserver_tests/solaris/nlcontrolc.stdoutB.exp b/gdbserver_tests/solaris/nlcontrolc.stdoutB.exp
new file mode 100644
index 0000000..e952c50
--- /dev/null
+++ b/gdbserver_tests/solaris/nlcontrolc.stdoutB.exp
@@ -0,0 +1,17 @@
+Continuing.
+Program received signal SIGTRAP, Trace/breakpoint trap.
+0x........ in syscall ...
+  4 Thread .... (tid 4 VgTs_WaitSys)  0x........ in __pollsys ()
+  3 Thread .... (tid 3 VgTs_WaitSys)  0x........ in __pollsys ()
+  2 Thread .... (tid 2 VgTs_WaitSys)  0x........ in __pollsys ()
+* 1 Thread .... (tid 1 VgTs_WaitSys)  0x........ in __pollsys ()
+Now threads are burning CPU
+Continuing.
+Program received signal SIGTRAP, Trace/breakpoint trap.
+0x........ in do_burn () at sleepers.c:41
+41	   for (i = 0; i < burn; i++) loopnr++;
+$1 = 0
+$2 = 0
+$3 = 0
+Continuing.
+Program exited normally.
diff --git a/gdbserver_tests/solaris/nlcontrolc.vgtest b/gdbserver_tests/solaris/nlcontrolc.vgtest
new file mode 100644
index 0000000..2723570
--- /dev/null
+++ b/gdbserver_tests/solaris/nlcontrolc.vgtest
@@ -0,0 +1,17 @@
+# test :
+#   info threads valgrind specific output
+#   the user can control-c a process with all threads in WaitSys
+#   the user can control-c a process with all threads in Running/Yielding
+#          and modify some variables
+# sleepers is started with argument so that it will compute during ages.
+# The variable modifications means it will exit in a reasonable time.
+prog: ../sleepers
+args: 1000000000 5000 1000000000 BSBSBSBS
+vgopts: --tool=none --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-solaris-nlcontrolc
+stderr_filter: filter_stderr
+prereq: test -e ../gdb -a -f ../vgdb.invoker
+progB: ../gdb
+argsB: --quiet -l 60 --nx ../sleepers
+stdinB: nlcontrolc.stdinB.gdb
+stdoutB_filter: ../filter_gdb
+stderrB_filter: ../filter_make_empty
diff --git a/gdbserver_tests/t.c b/gdbserver_tests/t.c
index 89ce57d..228d4a4 100644
--- a/gdbserver_tests/t.c
+++ b/gdbserver_tests/t.c
@@ -26,7 +26,8 @@
 }
 static void whoami(char *msg)
 {
-   printf("pid %d Thread %d %s\n", getpid(), gettid(), msg); fflush(stdout);
+   printf("pid %ld Thread %ld %s\n", (long) getpid(), (long) gettid(), msg);
+   fflush(stdout);
 }
 
 static int int_und;
diff --git a/glibc-2.34567-NPTL-helgrind.supp b/glibc-2.34567-NPTL-helgrind.supp
index b61a339..ed105b8 100644
--- a/glibc-2.34567-NPTL-helgrind.supp
+++ b/glibc-2.34567-NPTL-helgrind.supp
@@ -23,6 +23,10 @@
 #   this, then loads of errors to do with stdio are reported, because
 #   H fails to see glibc's internal locking/unlocking of FILE*s
 #   as required by POSIX.  A better solution is needed.
+#
+# - some of the stdio functions in newer glibc manipulate stdio
+#   FILE*s state through mempcpy, which we intercept, so we also need
+#   to suppress such manipulations.
 
 #{
 #   helgrind-glibc2X-001
@@ -41,6 +45,14 @@
 }
 
 {
+   helgrind-glibc-io-xsputn-mempcpy
+   Helgrind:Race
+   fun:__GI_mempcpy
+   fun:_IO_*xsputn*
+   obj:*/lib*/libc-2.*so*
+}
+
+{
    helgrind-glibc2X-005
    Helgrind:Race
    obj:*/lib*/libpthread-2.*so*
diff --git a/helgrind/docs/hg-manual.xml b/helgrind/docs/hg-manual.xml
index c6839fd..28d4d9b 100644
--- a/helgrind/docs/hg-manual.xml
+++ b/helgrind/docs/hg-manual.xml
@@ -1190,6 +1190,51 @@
     </listitem>
   </varlistentry>
 
+  <varlistentry id="opt.ignore-thread-creation"
+                xreflabel="--ignore-thread-creation">
+    <term>
+      <option><![CDATA[--ignore-thread-creation=<yes|no>
+      [default: no]]]></option>
+    </term>
+    <listitem>
+      <para>
+        Controls whether all activities during thread creation should be
+        ignored. By default enabled only on Solaris.
+        Solaris provides higher throughput, parallelism and scalability than
+        other operating systems, at the cost of more fine-grained locking
+        activity. This means for example that when a thread is created under
+        glibc, just one big lock is used for all thread setup. Solaris libc
+        uses several fine-grained locks and the creator thread resumes its
+        activities as soon as possible, leaving for example stack and TLS setup
+        sequence to the created thread.
+        This situation confuses Helgrind as it assumes there is some false
+        ordering in place between creator and created thread; and therefore many
+        types of race conditions in the application would not be reported.
+        To prevent such false ordering, this command line option is set to
+        <computeroutput>yes</computeroutput> by default on Solaris.
+        All activity (loads, stores, client requests) is therefore ignored
+        during:</para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            pthread_create() call in the creator thread
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            thread creation phase (stack and TLS setup) in the created thread
+          </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+         Also new memory allocated during thread creation is untracked,
+         that is race reporting is suppressed there. DRD does the same thing
+         implicitly. This is necessary because Solaris libc caches many objects
+         and reuses them for different threads and that confuses
+         Helgrind.</para>
+    </listitem>
+  </varlistentry>
+
 
 </variablelist>
 <!-- end of xi:include in the manpage -->
diff --git a/helgrind/helgrind.h b/helgrind/helgrind.h
index 7e27f5c..d194c44 100644
--- a/helgrind/helgrind.h
+++ b/helgrind/helgrind.h
@@ -11,7 +11,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks LLP
+   Copyright (C) 2007-2015 OpenWorks LLP
       info@open-works.co.uk
 
    Redistribution and use in source and binary forms, with or without
@@ -80,8 +80,8 @@
       _VG_USERREQ__HG_PTHREAD_MUTEX_DESTROY_PRE,  /* pth_mx_t*, long isInit */
       _VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_PRE,   /* pth_mx_t* */
       _VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_POST,  /* pth_mx_t* */
-      _VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_PRE, /* pth_mx_t*, long isTryLock */
-      _VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,    /* pth_mx_t* */
+      _VG_USERREQ__HG_PTHREAD_MUTEX_ACQUIRE_PRE,  /* void*, long isTryLock */
+      _VG_USERREQ__HG_PTHREAD_MUTEX_ACQUIRE_POST, /* void* */
       _VG_USERREQ__HG_PTHREAD_COND_SIGNAL_PRE,    /* pth_cond_t* */
       _VG_USERREQ__HG_PTHREAD_COND_BROADCAST_PRE, /* pth_cond_t* */
       _VG_USERREQ__HG_PTHREAD_COND_WAIT_PRE,     /* pth_cond_t*, pth_mx_t* */
@@ -90,13 +90,13 @@
       _VG_USERREQ__HG_PTHREAD_RWLOCK_INIT_POST,   /* pth_rwlk_t* */
       _VG_USERREQ__HG_PTHREAD_RWLOCK_DESTROY_PRE, /* pth_rwlk_t* */
       _VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,    /* pth_rwlk_t*, long isW */
-      _VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,   /* pth_rwlk_t*, long isW */
-      _VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_PRE,  /* pth_rwlk_t* */
+      _VG_USERREQ__HG_PTHREAD_RWLOCK_ACQUIRED,    /* void*, long isW */
+      _VG_USERREQ__HG_PTHREAD_RWLOCK_RELEASED,    /* void* */
       _VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_POST, /* pth_rwlk_t* */
       _VG_USERREQ__HG_POSIX_SEM_INIT_POST,        /* sem_t*, ulong value */
       _VG_USERREQ__HG_POSIX_SEM_DESTROY_PRE,      /* sem_t* */
-      _VG_USERREQ__HG_POSIX_SEM_POST_PRE,         /* sem_t* */
-      _VG_USERREQ__HG_POSIX_SEM_WAIT_POST,        /* sem_t* */
+      _VG_USERREQ__HG_POSIX_SEM_RELEASED,         /* void* */
+      _VG_USERREQ__HG_POSIX_SEM_ACQUIRED,         /* void* */
       _VG_USERREQ__HG_PTHREAD_BARRIER_INIT_PRE,   /* pth_bar_t*, ulong, ulong */
       _VG_USERREQ__HG_PTHREAD_BARRIER_WAIT_PRE,   /* pth_bar_t* */
       _VG_USERREQ__HG_PTHREAD_BARRIER_DESTROY_PRE, /* pth_bar_t* */
@@ -118,8 +118,22 @@
       _VG_USERREQ__HG_CLEAN_MEMORY_HEAPBLOCK, /* Addr start_of_block */
       _VG_USERREQ__HG_PTHREAD_COND_INIT_POST,  /* pth_cond_t*, pth_cond_attr_t*/
       _VG_USERREQ__HG_GNAT_MASTER_HOOK,       /* void*d,void*m,Word ml */
-      _VG_USERREQ__HG_GNAT_MASTER_COMPLETED_HOOK,/* void*s,Word ml */
-      _VG_USERREQ__HG_GET_ABITS               /* Addr a,Addr abits, ulong len */
+      _VG_USERREQ__HG_GNAT_MASTER_COMPLETED_HOOK, /* void*s,Word ml */
+      _VG_USERREQ__HG_GET_ABITS,              /* Addr a,Addr abits, ulong len */
+      _VG_USERREQ__HG_PTHREAD_CREATE_BEGIN,
+      _VG_USERREQ__HG_PTHREAD_CREATE_END,
+      _VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_PRE,     /* pth_mx_t*,long isTryLock */
+      _VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,    /* pth_mx_t *,long tookLock */
+      _VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,  /* pth_rwlk_t*,long isW,long */
+      _VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_PRE,  /* pth_rwlk_t* */
+      _VG_USERREQ__HG_POSIX_SEM_POST_PRE,         /* sem_t* */
+      _VG_USERREQ__HG_POSIX_SEM_POST_POST,        /* sem_t* */
+      _VG_USERREQ__HG_POSIX_SEM_WAIT_PRE,         /* sem_t* */
+      _VG_USERREQ__HG_POSIX_SEM_WAIT_POST,        /* sem_t*, long tookLock */
+      _VG_USERREQ__HG_PTHREAD_COND_SIGNAL_POST,   /* pth_cond_t* */
+      _VG_USERREQ__HG_PTHREAD_COND_BROADCAST_POST,/* pth_cond_t* */
+      _VG_USERREQ__HG_RTLD_BIND_GUARD,            /* int flags */
+      _VG_USERREQ__HG_RTLD_BIND_CLEAR             /* int flags */
    } Vg_TCheckClientRequest;
 
 
@@ -239,12 +253,12 @@
 /* Notify here immediately before mutex acquisition.  _isTryLock == 0
    for a normal acquisition, 1 for a "try" style acquisition. */
 #define VALGRIND_HG_MUTEX_LOCK_PRE(_mutex, _isTryLock)       \
-   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_PRE,      \
+   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_ACQUIRE_PRE,   \
                 void*,(_mutex), long,(_isTryLock))
 
 /* Notify here immediately after a successful mutex acquisition. */
 #define VALGRIND_HG_MUTEX_LOCK_POST(_mutex)                  \
-   DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,      \
+   DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_ACQUIRE_POST,   \
                void*,(_mutex))
 
 /* Notify here immediately before a mutex release. */
@@ -274,13 +288,13 @@
 /* Notify here immediately after a semaphore wait (an acquire-style
    operation) */
 #define VALGRIND_HG_SEM_WAIT_POST(_sem)                      \
-   DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_WAIT_POST,          \
+   DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_ACQUIRED,           \
                void*,(_sem))
 
 /* Notify here immediately before semaphore post (a release-style
    operation) */
 #define VALGRIND_HG_SEM_POST_PRE(_sem)                       \
-   DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_POST_PRE,           \
+   DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_RELEASED,           \
                void*,(_sem))
 
 /* Notify here immediately before semaphore destruction. */
@@ -384,12 +398,6 @@
                  unsigned long,(_qzz_len))
 
 
-#define VALGRIND_HG_ENABLE_CHECKING(_qzz_start, _qzz_len)    \
-   DO_CREQ_v_WW(_VG_USERREQ__HG_ARANGE_MAKE_TRACKED,         \
-                 void*,(_qzz_start),                         \
-                 unsigned long,(_qzz_len))
-
-
 /*  Checks the accessibility bits for addresses [zza..zza+zznbytes-1].
     If zzabits array is provided, copy the accessibility bits in zzabits.
    Return values:
@@ -733,12 +741,12 @@
 /* Report that the lock at address LOCK has just been acquired.
    is_w=1 for writer lock, is_w=0 for reader lock. */
 #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w)                 \
-  DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,     \
+  DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_ACQUIRED,      \
                void*,(lock), unsigned long,(is_w))
 
 /* Report that the lock at address LOCK is about to be released. */
 #define ANNOTATE_RWLOCK_RELEASED(lock, is_w)                 \
-  DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_PRE,     \
+  DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_RELEASED,       \
               void*,(lock)) /* is_w is ignored */
 
 
diff --git a/helgrind/hg_addrdescr.c b/helgrind/hg_addrdescr.c
index abf5aa5..53f98fc 100644
--- a/helgrind/hg_addrdescr.c
+++ b/helgrind/hg_addrdescr.c
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2012 OpenWorks Ltd
+   Copyright (C) 2007-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/helgrind/hg_addrdescr.h b/helgrind/hg_addrdescr.h
index 32d7842..14f712a 100644
--- a/helgrind/hg_addrdescr.h
+++ b/helgrind/hg_addrdescr.h
@@ -9,7 +9,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2012 OpenWorks Ltd
+   Copyright (C) 2007-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/helgrind/hg_basics.c b/helgrind/hg_basics.c
index 4a039c9..6794683 100644
--- a/helgrind/hg_basics.c
+++ b/helgrind/hg_basics.c
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks Ltd
+   Copyright (C) 2007-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -77,7 +77,7 @@
 
 UWord HG_(clo_conflict_cache_size) = 2000000;
 
-Word  HG_(clo_sanity_flags) = 0;
+UWord HG_(clo_sanity_flags) = 0;
 
 Bool  HG_(clo_free_is_write) = False;
 
diff --git a/helgrind/hg_basics.h b/helgrind/hg_basics.h
index 737cfa0..040765d 100644
--- a/helgrind/hg_basics.h
+++ b/helgrind/hg_basics.h
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks Ltd
+   Copyright (C) 2007-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -80,7 +80,7 @@
 
    1: "approx": collect one stack trace per (notional) segment, that
       is, collect a stack trace for a thread every time its vector
-      clock changes.  This faciliates showing the bounds of the
+      clock changes.  This facilitates showing the bounds of the
       conflicting segment(s), with relatively small overhead.
 
    2: "full": collect a stack trace every time the constraints for a
@@ -101,7 +101,7 @@
 
 /* Sanity check level.  This is an or-ing of
    SCE_{THREADS,LOCKS,BIGRANGE,ACCESS,LAOG}. */
-extern Word HG_(clo_sanity_flags);
+extern UWord HG_(clo_sanity_flags);
 
 /* Treat heap frees as if the memory was written immediately prior to
    the free.  This shakes out races in which memory is referenced by
diff --git a/helgrind/hg_errors.c b/helgrind/hg_errors.c
index d2058d5..dcb502a 100644
--- a/helgrind/hg_errors.c
+++ b/helgrind/hg_errors.c
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks Ltd
+   Copyright (C) 2007-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -1212,7 +1212,7 @@
             if (xe->XE.Race.h1_ct_mbsegendEC) {
                VG_(pp_ExeContext)( xe->XE.Race.h1_ct_mbsegendEC );
             } else {
-               emit( "  <auxwhat>(the end of the the thread)</auxwhat>\n" );
+               emit( "  <auxwhat>(the end of the thread)</auxwhat>\n" );
             }
          }
 
@@ -1256,7 +1256,7 @@
             if (xe->XE.Race.h1_ct_mbsegendEC) {
                VG_(pp_ExeContext)( xe->XE.Race.h1_ct_mbsegendEC );
             } else {
-               emit( "   (the end of the the thread)\n" );
+               emit( "   (the end of the thread)\n" );
             }
          }
 
@@ -1296,7 +1296,7 @@
    if (threadp->coretid == VG_INVALID_THREADID) 
       VG_(printf)(" tid (exited)\n");
    else
-      VG_(printf)(" tid %d\n", threadp->coretid);
+      VG_(printf)(" tid %u\n", threadp->coretid);
    {
       Lock** locksHeldW_P;
       locksHeldW_P = enumerate_WordSet_into_LockP_vector(
diff --git a/helgrind/hg_errors.h b/helgrind/hg_errors.h
index 3c4dd3b..e8b0e57 100644
--- a/helgrind/hg_errors.h
+++ b/helgrind/hg_errors.h
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks Ltd
+   Copyright (C) 2007-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/helgrind/hg_intercepts.c b/helgrind/hg_intercepts.c
index f109bf3..fd53208 100644
--- a/helgrind/hg_intercepts.c
+++ b/helgrind/hg_intercepts.c
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks LLP
+   Copyright (C) 2007-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -58,6 +58,18 @@
 #include "helgrind.h"
 #include "config.h"
 
+
+#if defined(VGO_solaris)
+/* See porting comments in drd/drd_pthread_intercepts.c
+   However when a POSIX threads API function (for example pthread_cond_init)
+   is built upon the Solaris one (cond_init), intercept only the bottom one.
+   Helgrind does not contain generic synchronization nesting like DRD
+   and double intercept confuses it. */
+#include <synch.h>
+#include <thread.h>
+#endif /* VGO_solaris */
+
+
 #define TRACE_PTH_FNS 0
 #define TRACE_QT4_FNS 0
 #define TRACE_GNAT_FNS 0
@@ -67,9 +79,26 @@
 /*---                                                          ---*/
 /*----------------------------------------------------------------*/
 
+#if defined(VGO_solaris)
+/* On Solaris, libpthread is just a filter library on top of libc.
+ * Threading and synchronization functions in runtime linker are not
+ * intercepted.
+ */
+#define PTH_FUNC(ret_ty, f, args...) \
+   ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args); \
+   ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args)
+
+/* pthread_t is typedef'd to 'unsigned int' but in DO_CREQ_* macros
+   sizeof(Word) is expected. */
+#define CREQ_PTHREAD_T Word
+#define SEM_ERROR ret
+#else
 #define PTH_FUNC(ret_ty, f, args...) \
    ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args); \
    ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args)
+#define CREQ_PTHREAD_T pthread_t
+#define SEM_ERROR errno
+#endif /* VGO_solaris */
 
 // Do a client request.  These are macros rather than a functions so
 // as to avoid having an extra frame in stack traces.
@@ -133,6 +162,22 @@
                                  _arg1,_arg2,_arg3,0,0); \
    } while (0)
 
+#define DO_CREQ_v_WWWW(_creqF, _ty1F,_arg1F,             \
+                       _ty2F, _arg2F, _ty3F, _arg3F,     \
+                       _ty4F, _arg4F)                    \
+   do {                                                  \
+      Word _arg1, _arg2, _arg3, _arg4;                   \
+      assert(sizeof(_ty1F) == sizeof(Word));             \
+      assert(sizeof(_ty2F) == sizeof(Word));             \
+      assert(sizeof(_ty3F) == sizeof(Word));             \
+      assert(sizeof(_ty4F) == sizeof(Word));             \
+      _arg1 = (Word)(_arg1F);                            \
+      _arg2 = (Word)(_arg2F);                            \
+      _arg3 = (Word)(_arg3F);                            \
+      _arg4 = (Word)(_arg4F);                            \
+      VALGRIND_DO_CLIENT_REQUEST_STMT((_creqF),          \
+                             _arg1,_arg2,_arg3,_arg4,0); \
+   } while (0)
 
 #define DO_PthAPIerror(_fnnameF, _errF)                  \
    do {                                                  \
@@ -196,11 +241,121 @@
       case EDEADLK:     return "EDEADLK: Resource deadlock would occur";
       case EOPNOTSUPP:  return "EOPNOTSUPP: Operation not supported on "
                                "transport endpoint"; /* honest, guv */
-      default:          return "tc_intercepts.c: lame_strerror(): "
+      case ETIME:       return "ETIME: Timer expired";
+      default:          return "hg_intercepts.c: lame_strerror(): "
                                "unhandled case -- please fix me!";
    }
 }
 
+#if defined(VGO_solaris)
+/*
+ * Solaris provides higher throughput, parallelism and scalability than other
+ * operating systems, at the cost of more fine-grained locking activity.
+ * This means for example that when a thread is created under Linux, just one
+ * big lock in glibc is used for all thread setup. Solaris libc uses several
+ * fine-grained locks and the creator thread resumes its activities as soon
+ * as possible, leaving for example stack and TLS setup activities to the
+ * created thread.
+ *
+ * This situation confuses Helgrind as it assumes there is some false ordering
+ * in place between creator and created thread; and therefore many types of
+ * race conditions in the application would not be reported. To prevent such
+ * false ordering, command line option --ignore-thread-creation is set to
+ * 'yes' by default on Solaris. All activity (loads, stores, client requests)
+ * is therefore ignored during:
+ * - pthread_create() call in the creator thread [libc.so]
+ * - thread creation phase (stack and TLS setup) in the created thread [libc.so]
+ *
+ * As explained in the comments for _ti_bind_guard(), whenever the runtime
+ * linker has to perform any activity (such as resolving a symbol), it protects
+ * its data structures by calling into rt_bind_guard() which in turn invokes
+ * _ti_bind_guard() in libc. Pointers to _ti_bind_guard() and _ti_bind_clear()
+ * are passed from libc to runtime linker in _ld_libc() call during libc_init().
+ * All activity is also ignored during:
+ * - runtime dynamic linker work between rt_bind_guard() and rt_bind_clear()
+ *   calls [ld.so]
+ *
+ * This also means that Helgrind does not report race conditions in libc (when
+ * --ignore-thread-creation=yes) and runtime linker itself (unconditionally)
+ * during these ignored sequences.
+ */
+
+#include "pub_tool_libcassert.h"
+#include "pub_tool_vki.h"
+
+/*
+ * Original function pointers for _ti_bind_guard() and _ti_bind_clear()
+ * from libc. They are intercepted in function wrapper of _ld_libc().
+ */
+typedef int (*hg_rtld_guard_fn)(int flags);
+static hg_rtld_guard_fn hg_rtld_bind_guard = NULL;
+static hg_rtld_guard_fn hg_rtld_bind_clear = NULL;
+
+static void hg_init(void) __attribute__((constructor));
+static void hg_init(void)
+{
+   if ((hg_rtld_bind_guard == NULL) || (hg_rtld_bind_clear == NULL)) {
+      fprintf(stderr,
+"Bind guard functions for the runtime linker (ld.so.1) were not intercepted.\n"
+"This means the interface between libc and runtime linker changed\n"
+"and Helgrind needs to be ported properly. Giving up.\n");
+      tl_assert(0);
+   }
+}
+
+/*
+ * Intercepts for _ti_bind_guard() and _ti_bind_clear() functions from libc.
+ * These are intercepted during _ld_libc() call by identifying CI_BIND_GUARD
+ * and CI_BIND_CLEAR, to provide resilience against function renaming.
+ */
+static int _ti_bind_guard_intercept_WRK(int flags)
+{
+   VALGRIND_DO_CLIENT_REQUEST_STMT(_VG_USERREQ__HG_RTLD_BIND_GUARD,
+                                   flags, 0, 0, 0, 0);
+   return hg_rtld_bind_guard(flags);
+}
+
+static int _ti_bind_clear_intercept_WRK(int flags)
+{
+   int ret = hg_rtld_bind_clear(flags);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(_VG_USERREQ__HG_RTLD_BIND_CLEAR,
+                                   flags, 0, 0, 0, 0);
+   return ret;
+}
+
+/*
+ * Wrapped _ld_libc() from the runtime linker ld.so.1.
+ */
+void I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LD_SO_1, ZuldZulibc)(vki_Lc_interface *ptr);
+void I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LD_SO_1, ZuldZulibc)(vki_Lc_interface *ptr)
+{
+   OrigFn fn;
+   int    tag;
+
+   VALGRIND_GET_ORIG_FN(fn);
+
+   vki_Lc_interface *funcs = ptr;
+   for (tag = funcs->ci_tag; tag != 0; tag = (++funcs)->ci_tag) {
+      switch (tag) {
+      case VKI_CI_BIND_GUARD:
+         if (funcs->vki_ci_un.ci_func != _ti_bind_guard_intercept_WRK) {
+            hg_rtld_bind_guard = funcs->vki_ci_un.ci_func;
+            funcs->vki_ci_un.ci_func = _ti_bind_guard_intercept_WRK;
+         }
+         break;
+      case VKI_CI_BIND_CLEAR:
+         if (funcs->vki_ci_un.ci_func != _ti_bind_clear_intercept_WRK) {
+            hg_rtld_bind_clear = funcs->vki_ci_un.ci_func;
+            funcs->vki_ci_un.ci_func = _ti_bind_clear_intercept_WRK;
+         }
+         break;
+      }
+   }
+
+   CALL_FN_v_W(fn, ptr);
+}
+#endif /* VGO_solaris */
+
 
 /*----------------------------------------------------------------*/
 /*--- pthread_create, pthread_join, pthread_exit               ---*/
@@ -213,7 +368,7 @@
    void* arg         = (void*)xargs[1];
    pthread_t me = pthread_self();
    /* Tell the tool what my pthread_t is. */
-   DO_CREQ_v_W(_VG_USERREQ__HG_SET_MY_PTHREAD_T, pthread_t,me);
+   DO_CREQ_v_W(_VG_USERREQ__HG_SET_MY_PTHREAD_T, CREQ_PTHREAD_T, me);
    /* allow the parent to proceed.  We can't let it proceed until
       we're ready because (1) we need to make sure it doesn't exit and
       hence deallocate xargs[] while we still need it, and (2) we
@@ -267,7 +422,11 @@
       comes to re-use this piece of stack in some other frame. */
    VALGRIND_HG_DISABLE_CHECKING(&xargs, sizeof(xargs));
 
+   VALGRIND_DO_CLIENT_REQUEST_STMT(_VG_USERREQ__HG_PTHREAD_CREATE_BEGIN,
+                                   0, 0, 0, 0, 0);
    CALL_FN_W_WWWW(ret, fn, thread,attr,mythread_wrapper,&xargs[0]);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(_VG_USERREQ__HG_PTHREAD_CREATE_END,
+                                   0, 0, 0, 0, 0);
 
    if (ret == 0) {
       /* we have to wait for the child to notify the tool of its
@@ -312,10 +471,69 @@
       // trap anything else
       assert(0);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, pthreadZucreate, // pthread_create
+                 pthread_t *thread, const pthread_attr_t *attr,
+                 void *(*start) (void *), void *arg) {
+      return pthread_create_WRK(thread, attr, start, arg);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
+#if defined(VGO_solaris)
+/* Solaris also provides thr_create() in addition to pthread_create().
+ * Both pthread_create(3C) and thr_create(3C) are based on private
+ * _thrp_create().
+ */
+__attribute__((noinline))
+static int thr_create_WRK(void *stk, size_t stksize, void *(*start)(void *),
+                          void *arg, long flags, thread_t *new_thread)
+{
+   int    ret;
+   OrigFn fn;
+   volatile Word xargs[3];
+
+   VALGRIND_GET_ORIG_FN(fn);
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< thr_create wrapper"); fflush(stderr);
+   }
+   xargs[0] = (Word)start;
+   xargs[1] = (Word)arg;
+   xargs[2] = 1; /* serves as a spinlock -- sigh */
+   /* See comments in pthread_create_WRK() */
+   VALGRIND_HG_DISABLE_CHECKING(&xargs, sizeof(xargs));
+
+   VALGRIND_DO_CLIENT_REQUEST_STMT(_VG_USERREQ__HG_PTHREAD_CREATE_BEGIN,
+                                   0, 0, 0, 0, 0);
+   CALL_FN_W_6W(ret, fn, stk, stksize, mythread_wrapper, start, flags,
+                new_thread);
+   VALGRIND_DO_CLIENT_REQUEST_STMT(_VG_USERREQ__HG_PTHREAD_CREATE_END,
+                                   0, 0, 0, 0, 0);
+
+   if (ret == 0) {
+      while (xargs[2] != 0) {
+         /* See comments in pthread_create_WRK(). */
+         sched_yield();
+      }
+   } else {
+      DO_PthAPIerror("thr_create", ret);
+   }
+
+   VALGRIND_HG_ENABLE_CHECKING(&xargs, sizeof(xargs));
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " :: thr_create -> %d >>\n", ret);
+   }
+   return ret;
+}
+   PTH_FUNC(int, thrZucreate, // thr_create
+                 void *stk, size_t stksize, void *(*start)(void *),
+                 void *arg, long flags, thread_t *new_thread) {
+      return thr_create_WRK(stk, stksize, start, arg, flags, new_thread);
+   }
+#endif /* VGO_solaris */
+
 
 //-----------------------------------------------------------
 // glibc:  pthread_join
@@ -338,7 +556,7 @@
       it is guaranteed (by NPTL) that the joiner will completely gone
       before pthread_join (the original) returns.  See email below.*/
    if (ret == 0 /*success*/) {
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_JOIN_POST, pthread_t,thread);
+      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_JOIN_POST, CREQ_PTHREAD_T, thread);
    } else { 
       DO_PthAPIerror( "pthread_join", ret );
    }
@@ -358,6 +576,11 @@
             pthread_t thread, void** value_pointer) {
       return pthread_join_WRK(thread, value_pointer);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, pthreadZujoin, // pthread_join
+            pthread_t thread, void** value_pointer) {
+      return pthread_join_WRK(thread, value_pointer);
+   }
 #else
 #  error "Unsupported OS"
 #endif
@@ -404,6 +627,43 @@
 done.  No way the joiner can return before the thread is gone.
 */
 
+#if defined(VGO_solaris)
+/* Solaris also provides thr_join() in addition to pthread_join().
+ * Both pthread_join(3C) and thr_join(3C) are based on private _thrp_join().
+ *
+ * :TODO: No functionality is currently provided for joinee == 0 and departed.
+ *        This would require another client request, of course.
+ */
+__attribute__((noinline))
+static int thr_join_WRK(thread_t joinee, thread_t *departed, void **thread_return)
+{
+   int ret;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< thr_join wrapper"); fflush(stderr);
+   }
+
+   CALL_FN_W_WWW(ret, fn, joinee, departed, thread_return);
+
+   if (ret == 0 /*success*/) {
+      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_JOIN_POST, CREQ_PTHREAD_T, joinee);
+   } else {
+      DO_PthAPIerror("thr_join", ret);
+   }
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " :: thr_join -> %d >>\n", ret);
+   }
+   return ret;
+}
+   PTH_FUNC(int, thrZujoin, // thr_join
+            thread_t joinee, thread_t *departed, void **thread_return) {
+      return thr_join_WRK(joinee, departed, thread_return);
+   }
+#endif /* VGO_solaris */
+
+
 //-----------------------------------------------------------
 // Ada gcc gnat runtime:
 // The gnat gcc Ada runtime does not use pthread_join. Instead, it uses
@@ -490,6 +750,7 @@
 */
 
 //-----------------------------------------------------------
+#if !defined(VGO_solaris)
 // glibc:  pthread_mutex_init
 // darwin: pthread_mutex_init
 PTH_FUNC(int, pthreadZumutexZuinit, // pthread_mutex_init
@@ -527,12 +788,45 @@
    return ret;
 }
 
+#else /* VGO_solaris */
+
+// Solaris: mutex_init (pthread_mutex_init calls here)
+PTH_FUNC(int, mutexZuinit, // mutex_init
+              mutex_t *mutex, int type, void *arg)
+{
+   int    ret;
+   long   mbRec;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< mxinit %p", mutex); fflush(stderr);
+   }
+
+   mbRec = ((type & LOCK_RECURSIVE) != 0) ? 1 : 0;
+
+   CALL_FN_W_WWW(ret, fn, mutex, type, arg);
+
+   if (ret == 0 /*success*/) {
+      DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_INIT_POST,
+                   mutex_t *, mutex, long, mbRec);
+   } else {
+      DO_PthAPIerror("mutex_init", ret);
+   }
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " :: mxinit -> %d >>\n", ret);
+   }
+   return ret;
+}
+#endif /* VGO_solaris */
+
 
 //-----------------------------------------------------------
-// glibc:  pthread_mutex_destroy
-// darwin: pthread_mutex_destroy
-PTH_FUNC(int, pthreadZumutexZudestroy, // pthread_mutex_destroy
-              pthread_mutex_t *mutex)
+// glibc:   pthread_mutex_destroy
+// darwin:  pthread_mutex_destroy
+// Solaris: mutex_destroy (pthread_mutex_destroy is a weak alias)
+__attribute__((noinline))
+static int mutex_destroy_WRK(pthread_mutex_t *mutex)
 {
    int    ret;
    unsigned long mutex_is_init;
@@ -565,12 +859,27 @@
    return ret;
 }
 
+#if defined(VGO_linux) || defined(VGO_darwin)
+   PTH_FUNC(int, pthreadZumutexZudestroy, // pthread_mutex_destroy
+            pthread_mutex_t *mutex) {
+      return mutex_destroy_WRK(mutex);
+   }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, mutexZudestroy, // mutex_destroy
+            pthread_mutex_t *mutex) {
+      return mutex_destroy_WRK(mutex);
+   }
+#else
+#  error "Unsupported OS"
+#endif
+
 
 //-----------------------------------------------------------
-// glibc:  pthread_mutex_lock
-// darwin: pthread_mutex_lock
-PTH_FUNC(int, pthreadZumutexZulock, // pthread_mutex_lock
-              pthread_mutex_t *mutex)
+// glibc:   pthread_mutex_lock
+// darwin:  pthread_mutex_lock
+// Solaris: mutex_lock (pthread_mutex_lock is a weak alias)
+__attribute__((noinline))
+static int mutex_lock_WRK(pthread_mutex_t *mutex)
 {
    int    ret;
    OrigFn fn;
@@ -589,10 +898,10 @@
       that the lock has been acquired by someone (this thread).  Does
       this matter?  Not sure, but I don't think so. */
 
-   if (ret == 0 /*success*/) {
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
-                  pthread_mutex_t*,mutex);
-   } else { 
+   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+                pthread_mutex_t *, mutex, long, (ret == 0) ? True : False);
+
+   if (ret != 0) {
       DO_PthAPIerror( "pthread_mutex_lock", ret );
    }
 
@@ -602,10 +911,51 @@
    return ret;
 }
 
+#if defined(VGO_linux) || defined(VGO_darwin)
+   PTH_FUNC(int, pthreadZumutexZulock, // pthread_mutex_lock
+            pthread_mutex_t *mutex) {
+      return mutex_lock_WRK(mutex);
+   }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, mutexZulock, // mutex_lock
+            pthread_mutex_t *mutex) {
+      return mutex_lock_WRK(mutex);
+   }
+#else
+#  error "Unsupported OS"
+#endif
+
+#if defined(VGO_solaris)
+/* Internal to libc. Mutex is usually initialized only implicitly,
+ * by zeroing mutex_t structure.
+ */
+__attribute__((noinline))
+PTH_FUNC(void, lmutexZulock, // lmutex_lock
+               mutex_t *mutex)
+{
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< lmxlock %p", mutex); fflush(stderr);
+   }
+
+   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_PRE,
+                mutex_t *, mutex, long, 0 /*!isTryLock*/);
+   CALL_FN_v_W(fn, mutex);
+   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+                mutex_t *, mutex, long, True);
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " :: lmxlock >>\n");
+   }
+}
+#endif /* VGO_solaris */
+
 
 //-----------------------------------------------------------
-// glibc:  pthread_mutex_trylock
-// darwin: pthread_mutex_trylock
+// glibc:   pthread_mutex_trylock
+// darwin:  pthread_mutex_trylock
+// Solaris: mutex_trylock (pthread_mutex_trylock is a weak alias)
 //
 // pthread_mutex_trylock.  The handling needed here is very similar
 // to that for pthread_mutex_lock, except that we need to tell
@@ -613,8 +963,8 @@
 // therefore not to complain if the lock is nonrecursive and 
 // already locked by this thread -- because then it'll just fail
 // immediately with EBUSY.
-PTH_FUNC(int, pthreadZumutexZutrylock, // pthread_mutex_trylock
-              pthread_mutex_t *mutex)
+__attribute__((noinline))
+static int mutex_trylock_WRK(pthread_mutex_t *mutex)
 {
    int    ret;
    OrigFn fn;
@@ -633,10 +983,10 @@
       that the lock has been acquired by someone (this thread).  Does
       this matter?  Not sure, but I don't think so. */
 
-   if (ret == 0 /*success*/) {
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
-                  pthread_mutex_t*,mutex);
-   } else { 
+   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+               pthread_mutex_t *, mutex, long, (ret == 0) ? True : False);
+
+   if (ret != 0) {
       if (ret != EBUSY)
          DO_PthAPIerror( "pthread_mutex_trylock", ret );
    }
@@ -647,15 +997,30 @@
    return ret;
 }
 
+#if defined(VGO_linux) || defined(VGO_darwin)
+   PTH_FUNC(int, pthreadZumutexZutrylock, // pthread_mutex_trylock
+            pthread_mutex_t *mutex) {
+      return mutex_trylock_WRK(mutex);
+   }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, mutexZutrylock, // mutex_trylock
+            pthread_mutex_t *mutex) {
+      return mutex_trylock_WRK(mutex);
+   }
+#else
+#  error "Unsupported OS"
+#endif
+
 
 //-----------------------------------------------------------
-// glibc:  pthread_mutex_timedlock
-// darwin: (doesn't appear to exist)
+// glibc:   pthread_mutex_timedlock
+// darwin:  (doesn't appear to exist)
+// Solaris: pthread_mutex_timedlock
 //
 // pthread_mutex_timedlock.  Identical logic to pthread_mutex_trylock.
-PTH_FUNC(int, pthreadZumutexZutimedlock, // pthread_mutex_timedlock
-         pthread_mutex_t *mutex,
-         void* timeout)
+__attribute__((noinline))
+static int mutex_timedlock_WRK(pthread_mutex_t *mutex,
+                               void *timeout)
 {
    int    ret;
    OrigFn fn;
@@ -675,10 +1040,10 @@
       that the lock has been acquired by someone (this thread).  Does
       this matter?  Not sure, but I don't think so. */
 
-   if (ret == 0 /*success*/) {
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
-                  pthread_mutex_t*,mutex);
-   } else { 
+   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+                pthread_mutex_t *, mutex, long, (ret == 0) ? True : False);
+
+   if (ret != 0) {
       if (ret != ETIMEDOUT)
          DO_PthAPIerror( "pthread_mutex_timedlock", ret );
    }
@@ -689,12 +1054,26 @@
    return ret;
 }
 
+PTH_FUNC(int, pthreadZumutexZutimedlock, // pthread_mutex_timedlock
+         pthread_mutex_t *mutex,
+         void *timeout) {
+   return mutex_timedlock_WRK(mutex, timeout);
+}
+#if defined(VGO_solaris)
+PTH_FUNC(int, pthreadZumutexZureltimedlock, // pthread_mutex_reltimedlock
+         pthread_mutex_t *mutex,
+         void *timeout) {
+   return mutex_timedlock_WRK(mutex, timeout);
+}
+#endif
+
 
 //-----------------------------------------------------------
-// glibc:  pthread_mutex_unlock
-// darwin: pthread_mutex_unlock
-PTH_FUNC(int, pthreadZumutexZuunlock, // pthread_mutex_unlock
-              pthread_mutex_t *mutex)
+// glibc:   pthread_mutex_unlock
+// darwin:  pthread_mutex_unlock
+// Solaris: mutex_unlock (pthread_mutex_unlock is a weak alias)
+__attribute__((noinline))
+static int mutex_unlock_WRK(pthread_mutex_t *mutex)
 {
    int    ret;
    OrigFn fn;
@@ -709,10 +1088,10 @@
 
    CALL_FN_W_W(ret, fn, mutex);
 
-   if (ret == 0 /*success*/) {
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_POST,
-                  pthread_mutex_t*,mutex);
-   } else { 
+   DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_POST,
+               pthread_mutex_t*,mutex);
+
+   if (ret != 0) {
       DO_PthAPIerror( "pthread_mutex_unlock", ret );
    }
 
@@ -722,6 +1101,46 @@
    return ret;
 }
 
+#if defined(VGO_linux) || defined(VGO_darwin)
+   PTH_FUNC(int, pthreadZumutexZuunlock, // pthread_mutex_unlock
+            pthread_mutex_t *mutex) {
+      return mutex_unlock_WRK(mutex);
+   }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, mutexZuunlock, // mutex_unlock
+            pthread_mutex_t *mutex) {
+      return mutex_unlock_WRK(mutex);
+   }
+#else
+#  error "Unsupported OS"
+#endif
+
+
+#if defined(VGO_solaris)
+/* Internal to libc. */
+__attribute__((noinline))
+PTH_FUNC(void, lmutexZuunlock, // lmutex_unlock
+               mutex_t *mutex)
+{
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< lmxunlk %p", mutex); fflush(stderr);
+   }
+
+   DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_PRE,
+               mutex_t *, mutex);
+   CALL_FN_v_W(fn, mutex);
+   DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_POST,
+               mutex_t*, mutex);
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " lmxunlk >>\n");
+   }
+}
+#endif /* VGO_solaris */
+
 
 /*----------------------------------------------------------------*/
 /*--- pthread_cond_t functions                                 ---*/
@@ -734,11 +1153,12 @@
 */
 
 //-----------------------------------------------------------
-// glibc:  pthread_cond_wait@GLIBC_2.2.5
-// glibc:  pthread_cond_wait@@GLIBC_2.3.2
-// darwin: pthread_cond_wait
-// darwin: pthread_cond_wait$NOCANCEL$UNIX2003
-// darwin: pthread_cond_wait$UNIX2003
+// glibc:   pthread_cond_wait@GLIBC_2.2.5
+// glibc:   pthread_cond_wait@@GLIBC_2.3.2
+// darwin:  pthread_cond_wait
+// darwin:  pthread_cond_wait$NOCANCEL$UNIX2003
+// darwin:  pthread_cond_wait$UNIX2003
+// Solaris: cond_wait (pthread_cond_wait is built atop of cond_wait)
 //
 __attribute__((noinline))
 static int pthread_cond_wait_WRK(pthread_cond_t* cond,
@@ -774,18 +1194,17 @@
 
    CALL_FN_W_WW(ret, fn, cond,mutex);
 
-   /* these conditionals look stupid, but compare w/ same logic for
+   /* this conditional look stupid, but compare w/ same logic for
       pthread_cond_timedwait below */
-   if (ret == 0 && mutex_is_valid) {
-      /* and now we have the mutex again */
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
-                  pthread_mutex_t*,mutex);
+   if (mutex_is_valid) {
+      /* and now we have the mutex again if (ret == 0) */
+      DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+                   pthread_mutex_t *, mutex, long, (ret == 0) ? True : False);
    }
 
-   if (ret == 0 && mutex_is_valid) {
-      DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_COND_WAIT_POST,
-                    pthread_cond_t*,cond, pthread_mutex_t*,mutex, long,0);
-   }
+   DO_CREQ_v_WWWW(_VG_USERREQ__HG_PTHREAD_COND_WAIT_POST,
+                  pthread_cond_t*,cond, pthread_mutex_t*,mutex, long,0,
+                  long, (ret == 0 && mutex_is_valid) ? True : False);
 
    if (ret != 0) {
       DO_PthAPIerror( "pthread_cond_wait", ret );
@@ -807,24 +1226,32 @@
                  pthread_cond_t* cond, pthread_mutex_t* mutex) {
       return pthread_cond_wait_WRK(cond, mutex);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, condZuwait, // cond_wait
+                 pthread_cond_t *cond, pthread_mutex_t *mutex) {
+      return pthread_cond_wait_WRK(cond, mutex);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_cond_timedwait@@GLIBC_2.3.2
-// glibc:  pthread_cond_timedwait@GLIBC_2.2.5
-// glibc:  pthread_cond_timedwait@GLIBC_2.0
-// darwin: pthread_cond_timedwait
-// darwin: pthread_cond_timedwait$NOCANCEL$UNIX2003
-// darwin: pthread_cond_timedwait$UNIX2003
-// darwin: pthread_cond_timedwait_relative_np (trapped)
+// glibc:   pthread_cond_timedwait@@GLIBC_2.3.2
+// glibc:   pthread_cond_timedwait@GLIBC_2.2.5
+// glibc:   pthread_cond_timedwait@GLIBC_2.0
+// darwin:  pthread_cond_timedwait
+// darwin:  pthread_cond_timedwait$NOCANCEL$UNIX2003
+// darwin:  pthread_cond_timedwait$UNIX2003
+// darwin:  pthread_cond_timedwait_relative_np (trapped)
+// Solaris: cond_timedwait (pthread_cond_timedwait is built on cond_timedwait)
+// Solaris: cond_reltimedwait (pthread_cond_reltimedwait_np is built on this)
 //
 __attribute__((noinline))
 static int pthread_cond_timedwait_WRK(pthread_cond_t* cond,
                                       pthread_mutex_t* mutex, 
-                                      struct timespec* abstime)
+                                      struct timespec* abstime,
+                                      int timeout_error)
 {
    int ret;
    OrigFn fn;
@@ -859,25 +1286,26 @@
 
    CALL_FN_W_WWW(ret, fn, cond,mutex,abstime);
 
-   if (!abstime_is_valid && ret != EINVAL) {
+   if (mutex_is_valid && !abstime_is_valid && ret != EINVAL) {
       DO_PthAPIerror("Bug in libpthread: pthread_cond_timedwait "
                      "invalid abstime did not cause"
                      " EINVAL", ret);
    }
 
-   if ((ret == 0 || ret == ETIMEDOUT) && mutex_is_valid) {
-      /* and now we have the mutex again */
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
-                  pthread_mutex_t*,mutex);
+   if (mutex_is_valid && abstime_is_valid) {
+      /* and now we have the mutex again if (ret == 0 || ret == timeout) */
+      DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+                   pthread_mutex_t *, mutex,
+                   long, (ret == 0 || ret == timeout_error) ? True : False);
    }
 
-   if ((ret == 0 || ret == ETIMEDOUT) && mutex_is_valid) {
-      DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_COND_WAIT_POST,
-                    pthread_cond_t*,cond, pthread_mutex_t*,mutex,
-                    long,ret == ETIMEDOUT);
-   }
+   DO_CREQ_v_WWWW(_VG_USERREQ__HG_PTHREAD_COND_WAIT_POST,
+                  pthread_cond_t*,cond, pthread_mutex_t*,mutex,
+                  long,ret == timeout_error,
+                  long, (ret == 0 || ret == timeout_error) && mutex_is_valid
+                        ? True : False);
 
-   if (ret != 0 && ret != ETIMEDOUT) {
+   if (ret != 0 && ret != timeout_error) {
       DO_PthAPIerror( "pthread_cond_timedwait", ret );
    }
 
@@ -891,35 +1319,47 @@
    PTH_FUNC(int, pthreadZucondZutimedwaitZAZa, // pthread_cond_timedwait@*
                  pthread_cond_t* cond, pthread_mutex_t* mutex, 
                  struct timespec* abstime) {
-      return pthread_cond_timedwait_WRK(cond, mutex, abstime);
+      return pthread_cond_timedwait_WRK(cond, mutex, abstime, ETIMEDOUT);
    }
 #elif defined(VGO_darwin)
    PTH_FUNC(int, pthreadZucondZutimedwait, // pthread_cond_timedwait
                  pthread_cond_t* cond, pthread_mutex_t* mutex, 
                  struct timespec* abstime) {
-      return pthread_cond_timedwait_WRK(cond, mutex, abstime);
+      return pthread_cond_timedwait_WRK(cond, mutex, abstime, ETIMEDOUT);
    }
    PTH_FUNC(int, pthreadZucondZutimedwaitZDZa, // pthread_cond_timedwait$*
                  pthread_cond_t* cond, pthread_mutex_t* mutex, 
                  struct timespec* abstime) {
-      return pthread_cond_timedwait_WRK(cond, mutex, abstime);
+      return pthread_cond_timedwait_WRK(cond, mutex, abstime, ETIMEDOUT);
    }
    PTH_FUNC(int, pthreadZucondZutimedwaitZuZa, // pthread_cond_timedwait_*
                  pthread_cond_t* cond, pthread_mutex_t* mutex, 
                  struct timespec* abstime) {
       assert(0);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, condZutimedwait, // cond_timedwait
+                 pthread_cond_t *cond, pthread_mutex_t *mutex,
+                 struct timespec *abstime) {
+      return pthread_cond_timedwait_WRK(cond, mutex, abstime, ETIME);
+   }
+   PTH_FUNC(int, condZureltimedwait, // cond_reltimedwait
+                 pthread_cond_t *cond, pthread_mutex_t *mutex,
+                 struct timespec *reltime) {
+      return pthread_cond_timedwait_WRK(cond, mutex, reltime, ETIME);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_cond_signal@GLIBC_2.0
-// glibc:  pthread_cond_signal@GLIBC_2.2.5
-// glibc:  pthread_cond_signal@@GLIBC_2.3.2
-// darwin: pthread_cond_signal
-// darwin: pthread_cond_signal_thread_np (don't intercept this)
+// glibc:   pthread_cond_signal@GLIBC_2.0
+// glibc:   pthread_cond_signal@GLIBC_2.2.5
+// glibc:   pthread_cond_signal@@GLIBC_2.3.2
+// darwin:  pthread_cond_signal
+// darwin:  pthread_cond_signal_thread_np (don't intercept this)
+// Solaris: cond_signal (pthread_cond_signal is a weak alias)
 //
 __attribute__((noinline))
 static int pthread_cond_signal_WRK(pthread_cond_t* cond)
@@ -938,6 +1378,9 @@
 
    CALL_FN_W_W(ret, fn, cond);
 
+   DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_COND_SIGNAL_POST,
+               pthread_cond_t*,cond);
+
    if (ret != 0) {
       DO_PthAPIerror( "pthread_cond_signal", ret );
    }
@@ -958,16 +1401,22 @@
                  pthread_cond_t* cond) {
       return pthread_cond_signal_WRK(cond);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, condZusignal, // cond_signal
+                 pthread_cond_t *cond) {
+      return pthread_cond_signal_WRK(cond);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_cond_broadcast@GLIBC_2.0
-// glibc:  pthread_cond_broadcast@GLIBC_2.2.5
-// glibc:  pthread_cond_broadcast@@GLIBC_2.3.2
-// darwin: pthread_cond_broadcast
+// glibc:   pthread_cond_broadcast@GLIBC_2.0
+// glibc:   pthread_cond_broadcast@GLIBC_2.2.5
+// glibc:   pthread_cond_broadcast@@GLIBC_2.3.2
+// darwin:  pthread_cond_broadcast
+// Solaris: cond_broadcast (pthread_cond_broadcast is a weak alias)
 //
 // Note, this is pretty much identical, from a dependency-graph
 // point of view, with cond_signal, so the code is duplicated.
@@ -990,6 +1439,9 @@
 
    CALL_FN_W_W(ret, fn, cond);
 
+   DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_COND_BROADCAST_POST,
+               pthread_cond_t*,cond);
+
    if (ret != 0) { 
       DO_PthAPIerror( "pthread_cond_broadcast", ret );
    }
@@ -1010,18 +1462,25 @@
                  pthread_cond_t* cond) {
       return pthread_cond_broadcast_WRK(cond);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, condZubroadcast, // cond_broadcast
+                 pthread_cond_t *cond) {
+      return pthread_cond_broadcast_WRK(cond);
+   }
 #else
 #   error "Unsupported OS"
 #endif
 
-// glibc:  pthread_cond_init@GLIBC_2.0
-// glibc:  pthread_cond_init@GLIBC_2.2.5
-// glibc:  pthread_cond_init@@GLIBC_2.3.2
-// darwin: pthread_cond_init
+// glibc:   pthread_cond_init@GLIBC_2.0
+// glibc:   pthread_cond_init@GLIBC_2.2.5
+// glibc:   pthread_cond_init@@GLIBC_2.3.2
+// darwin:  pthread_cond_init
+// Solaris: cond_init (pthread_cond_init is built atop on this function)
 // Easy way out: Handling of attr could have been messier.
 // It turns out that pthread_cond_init under linux ignores
 // all information in cond_attr, so do we.
 // FIXME: MacOS X?
+#if !defined(VGO_solaris)
 __attribute__((noinline))
 static int pthread_cond_init_WRK(pthread_cond_t* cond, pthread_condattr_t *cond_attr)
 {
@@ -1063,12 +1522,45 @@
 #  error "Unsupported OS"
 #endif
 
+#else /* VGO_solaris */
+__attribute__((noinline))
+PTH_FUNC(int, condZuinit, // cond_init
+              cond_t *cond, int type, void *arg)
+{
+   int ret;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< cond_init %p", cond); fflush(stderr);
+   }
+
+   CALL_FN_W_WWW(ret, fn, cond, type, arg);
+
+   if (ret == 0) {
+      /* Luckily evh__HG_PTHREAD_COND_INIT_POST() ignores cond_attr.
+         See also comment for pthread_cond_init_WRK(). */
+      DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_COND_INIT_POST,
+                   cond_t *, cond, void *, NULL);
+   } else {
+      DO_PthAPIerror("cond_init", ret);
+   }
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " cond_init -> %d >>\n", ret);
+   }
+
+   return ret;
+}
+#endif /* VGO_solaris */
+
 
 //-----------------------------------------------------------
-// glibc:  pthread_cond_destroy@@GLIBC_2.3.2
-// glibc:  pthread_cond_destroy@GLIBC_2.2.5
-// glibc:  pthread_cond_destroy@GLIBC_2.0
-// darwin: pthread_cond_destroy
+// glibc:   pthread_cond_destroy@@GLIBC_2.3.2
+// glibc:   pthread_cond_destroy@GLIBC_2.2.5
+// glibc:   pthread_cond_destroy@GLIBC_2.0
+// darwin:  pthread_cond_destroy
+// Solaris: cond_destroy (pthread_cond_destroy is a weak alias)
 //
 __attribute__((noinline))
 static int pthread_cond_destroy_WRK(pthread_cond_t* cond)
@@ -1116,6 +1608,11 @@
                  pthread_cond_t* cond) {
       return pthread_cond_destroy_WRK(cond);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, condZudestroy, // cond_destroy
+                 pthread_cond_t *cond) {
+      return pthread_cond_destroy_WRK(cond);
+   }
 #else
 #  error "Unsupported OS"
 #endif
@@ -1139,8 +1636,9 @@
 */
 
 //-----------------------------------------------------------
-// glibc:  pthread_barrier_init
-// darwin: (doesn't appear to exist)
+// glibc:   pthread_barrier_init
+// darwin:  (doesn't appear to exist)
+// Solaris: pthread_barrier_init
 PTH_FUNC(int, pthreadZubarrierZuinit, // pthread_barrier_init
          pthread_barrier_t* bar,
          pthread_barrierattr_t* attr, unsigned long count)
@@ -1175,8 +1673,9 @@
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_barrier_wait
-// darwin: (doesn't appear to exist)
+// glibc:   pthread_barrier_wait
+// darwin:  (doesn't appear to exist)
+// Solaris: pthread_barrier_wait
 PTH_FUNC(int, pthreadZubarrierZuwait, // pthread_barrier_wait
               pthread_barrier_t* bar)
 {
@@ -1212,8 +1711,9 @@
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_barrier_destroy
-// darwin: (doesn't appear to exist)
+// glibc:   pthread_barrier_destroy
+// darwin:  (doesn't appear to exist)
+// Solaris: pthread_barrier_destroy
 PTH_FUNC(int, pthreadZubarrierZudestroy, // pthread_barrier_destroy
          pthread_barrier_t* bar)
 {
@@ -1262,12 +1762,16 @@
 /* This is a nasty kludge, in that glibc "knows" that initialising a
    spin lock unlocks it, and pthread_spin_{init,unlock} are names for
    the same function.  Hence we have to have a wrapper which does both
-   things, without knowing which the user intended to happen. */
+   things, without knowing which the user intended to happen.
+   Solaris has distinct functions for init/unlock but client requests
+   are immutable in helgrind.h so follow the glibc lead. */
 
 //-----------------------------------------------------------
-// glibc:  pthread_spin_init
-// glibc:  pthread_spin_unlock
-// darwin: (doesn't appear to exist)
+// glibc:   pthread_spin_init
+// glibc:   pthread_spin_unlock
+// darwin:  (doesn't appear to exist)
+// Solaris: pthread_spin_init
+// Solaris: pthread_spin_unlock
 __attribute__((noinline))
 static int pthread_spin_init_or_unlock_WRK(pthread_spinlock_t* lock,
                                            int pshared) {
@@ -1306,18 +1810,26 @@
       return pthread_spin_init_or_unlock_WRK(lock, 0/*pshared*/);
    }
 #elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, pthreadZuspinZuinit, // pthread_spin_init
+            pthread_spinlock_t *lock, int pshared) {
+      return pthread_spin_init_or_unlock_WRK(lock, pshared);
+   }
+   PTH_FUNC(int, pthreadZuspinZuunlock, // pthread_spin_unlock
+            pthread_spinlock_t *lock) {
+      return pthread_spin_init_or_unlock_WRK(lock, 0/*pshared*/);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_spin_destroy
-// darwin: (doesn't appear to exist)
-#if defined(VGO_linux)
-
-PTH_FUNC(int, pthreadZuspinZudestroy, // pthread_spin_destroy
-              pthread_spinlock_t* lock)
+// glibc:   pthread_spin_destroy
+// darwin:  (doesn't appear to exist)
+// Solaris: pthread_spin_destroy
+__attribute__((noinline))
+static int pthread_spin_destroy_WRK(pthread_spinlock_t *lock)
 {
    int    ret;
    OrigFn fn;
@@ -1341,20 +1853,28 @@
    }
    return ret;
 }
-
+#if defined(VGO_linux)
+   PTH_FUNC(int, pthreadZuspinZusdestroy, // pthread_spin_destroy
+            pthread_spinlock_t *lock) {
+      return pthread_spin_destroy_WRK(lock);
+   }
 #elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, pthreadZuspinZusdestroy, // pthread_spin_destroy
+            pthread_spinlock_t *lock) {
+      return pthread_spin_destroy_WRK(lock);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_spin_lock
-// darwin: (doesn't appear to exist)
-#if defined(VGO_linux)
-
-PTH_FUNC(int, pthreadZuspinZulock, // pthread_spin_lock
-              pthread_spinlock_t* lock)
+// glibc:   pthread_spin_lock
+// darwin:  (doesn't appear to exist)
+// Solaris: pthread_spin_lock
+__attribute__((noinline))
+static int pthread_spin_lock_WRK(pthread_spinlock_t *lock)
 {
    int    ret;
    OrigFn fn;
@@ -1386,20 +1906,28 @@
    }
    return ret;
 }
-
+#if defined(VGO_linux)
+   PTH_FUNC(int, pthreadZuspinZulock, // pthread_spin_lock
+                 pthread_spinlock_t *lock) {
+      return pthread_spin_lock_WRK(lock);
+   }
 #elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, pthreadZuspinZulock, // pthread_spin_lock
+                 pthread_spinlock_t *lock) {
+      return pthread_spin_lock_WRK(lock);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_spin_trylock
-// darwin: (doesn't appear to exist)
-#if defined(VGO_linux)
-
-PTH_FUNC(int, pthreadZuspinZutrylock, // pthread_spin_trylock
-              pthread_spinlock_t* lock)
+// glibc:   pthread_spin_trylock
+// darwin:  (doesn't appear to exist)
+// Solaris: pthread_spin_trylock
+__attribute__((noinline))
+static int pthread_spin_trylock_WRK(pthread_spinlock_t *lock)
 {
    int    ret;
    OrigFn fn;
@@ -1432,8 +1960,17 @@
    }
    return ret;
 }
-
+#if defined(VGO_linux)
+   PTH_FUNC(int, pthreadZuspinZutrylock, // pthread_spin_trylock
+                 pthread_spinlock_t *lock) {
+      return pthread_spin_trylock_WRK(lock);
+   }
 #elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, pthreadZuspinZutrylock, // pthread_spin_trylock
+                 pthread_spinlock_t *lock) {
+      return pthread_spin_trylock_WRK(lock);
+   }
 #else
 #  error "Unsupported OS"
 #endif
@@ -1453,18 +1990,18 @@
               pthread_rwlock_rdlock 
               pthread_rwlock_wrlock
               pthread_rwlock_unlock
+              pthread_rwlock_tryrdlock
+              pthread_rwlock_trywrlock
 
    Unhandled: pthread_rwlock_timedrdlock
-              pthread_rwlock_tryrdlock
-
               pthread_rwlock_timedwrlock
-              pthread_rwlock_trywrlock
 */
 
 //-----------------------------------------------------------
-// glibc:  pthread_rwlock_init
-// darwin: pthread_rwlock_init
-// darwin: pthread_rwlock_init$UNIX2003
+// glibc:   pthread_rwlock_init
+// darwin:  pthread_rwlock_init
+// darwin:  pthread_rwlock_init$UNIX2003
+// Solaris: rwlock_init (pthread_rwlock_init is built atop of rwlock_init)
 __attribute__((noinline))
 static int pthread_rwlock_init_WRK(pthread_rwlock_t *rwl,
                                    pthread_rwlockattr_t* attr)
@@ -1502,15 +2039,49 @@
                  pthread_rwlockattr_t* attr) {
       return pthread_rwlock_init_WRK(rwl, attr);
    }
+#elif defined(VGO_solaris)
+static int pthread_rwlock_init_WRK(pthread_rwlock_t *rwl,
+                                   pthread_rwlockattr_t* attr)
+                                   __attribute__((unused));
 #else
 #  error "Unsupported OS"
 #endif
 
+#if defined(VGO_solaris)
+PTH_FUNC(int, rwlockZuinit, // rwlock_init
+              rwlock_t *rwlock,
+              int type,
+              void *arg)
+{
+   int    ret;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< rwl_init %p", rwlock); fflush(stderr);
+   }
+
+   CALL_FN_W_WWW(ret, fn, rwlock, type, arg);
+
+   if (ret == 0 /*success*/) {
+      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_INIT_POST,
+                  rwlock_t *, rwlock);
+   } else {
+      DO_PthAPIerror("rwlock_init", ret);
+   }
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " :: rwl_init -> %d >>\n", ret);
+   }
+   return ret;
+}
+#endif /* VGO_solaris */
+
 
 //-----------------------------------------------------------
-// glibc:  pthread_rwlock_destroy
-// darwin: pthread_rwlock_destroy
-// darwin: pthread_rwlock_destroy$UNIX2003
+// glibc:   pthread_rwlock_destroy
+// darwin:  pthread_rwlock_destroy
+// darwin:  pthread_rwlock_destroy$UNIX2003
+// Solaris: rwlock_destroy (pthread_rwlock_destroy is a weak alias)
 //
 __attribute__((noinline))
 static int pthread_rwlock_destroy_WRK(pthread_rwlock_t* rwl)
@@ -1546,15 +2117,21 @@
                  pthread_rwlock_t *rwl) {
       return pthread_rwlock_destroy_WRK(rwl);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, rwlockZudestroy, // rwlock_destroy
+                 pthread_rwlock_t *rwl) {
+      return pthread_rwlock_destroy_WRK(rwl);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_rwlock_wrlock
-// darwin: pthread_rwlock_wrlock
-// darwin: pthread_rwlock_wrlock$UNIX2003
+// glibc:   pthread_rwlock_wrlock
+// darwin:  pthread_rwlock_wrlock
+// darwin:  pthread_rwlock_wrlock$UNIX2003
+// Solaris: rw_wrlock (pthread_rwlock_wrlock is a weak alias)
 //
 __attribute__((noinline))
 static int pthread_rwlock_wrlock_WRK(pthread_rwlock_t* rwlock)
@@ -1572,10 +2149,10 @@
 
    CALL_FN_W_W(ret, fn, rwlock);
 
-   if (ret == 0 /*success*/) {
-      DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
-                   pthread_rwlock_t*,rwlock, long,1/*isW*/);
-   } else { 
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+                 pthread_rwlock_t*,rwlock, long,1/*isW*/,
+                 long, (ret == 0) ? True : False);
+   if (ret != 0) {
       DO_PthAPIerror( "pthread_rwlock_wrlock", ret );
    }
 
@@ -1594,15 +2171,47 @@
                  pthread_rwlock_t* rwlock) {
       return pthread_rwlock_wrlock_WRK(rwlock);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, rwZuwrlock, // rw_wrlock
+                 pthread_rwlock_t *rwlock) {
+      return pthread_rwlock_wrlock_WRK(rwlock);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
+#if defined(VGO_solaris)
+/* Internal to libc. */
+PTH_FUNC(void, lrwZuwrlock, // lrw_wrlock
+               rwlock_t *rwlock)
+{
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< lrw_wlk %p", rwlock); fflush(stderr);
+   }
+
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
+                 pthread_rwlock_t *, rwlock,
+                 long, 1/*isW*/, long, 0/*!isTryLock*/);
+
+   CALL_FN_v_W(fn, rwlock);
+
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+                 pthread_rwlock_t *, rwlock, long, 1/*isW*/, long, True);
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " :: lrw_wlk >>\n");
+   }
+}
+#endif /* VGO_solaris */
+
 
 //-----------------------------------------------------------
-// glibc:  pthread_rwlock_rdlock
-// darwin: pthread_rwlock_rdlock
-// darwin: pthread_rwlock_rdlock$UNIX2003
+// glibc:   pthread_rwlock_rdlock
+// darwin:  pthread_rwlock_rdlock
+// darwin:  pthread_rwlock_rdlock$UNIX2003
+// Solaris: rw_rdlock (pthread_rwlock_rdlock is a weak alias)
 //
 __attribute__((noinline))
 static int pthread_rwlock_rdlock_WRK(pthread_rwlock_t* rwlock)
@@ -1620,10 +2229,10 @@
 
    CALL_FN_W_W(ret, fn, rwlock);
 
-   if (ret == 0 /*success*/) {
-      DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
-                   pthread_rwlock_t*,rwlock, long,0/*!isW*/);
-   } else { 
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+                 pthread_rwlock_t*,rwlock, long,0/*!isW*/,
+                 long, (ret == 0) ? True : False);
+   if (ret != 0) {
       DO_PthAPIerror( "pthread_rwlock_rdlock", ret );
    }
 
@@ -1642,15 +2251,47 @@
                  pthread_rwlock_t* rwlock) {
       return pthread_rwlock_rdlock_WRK(rwlock);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, rwZurdlock, // rw_rdlock
+                 pthread_rwlock_t *rwlock) {
+      return pthread_rwlock_rdlock_WRK(rwlock);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
+#if defined(VGO_solaris)
+/* Internal to libc. */
+PTH_FUNC(void, lrwZurdlock, // lrw_rdlock
+               rwlock_t *rwlock)
+{
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< lrw_rlk %p", rwlock); fflush(stderr);
+   }
+
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
+                 pthread_rwlock_t *, rwlock,
+                 long, 0/*!isW*/, long, 0/*!isTryLock*/);
+
+   CALL_FN_v_W(fn, rwlock);
+
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+                 pthread_rwlock_t *, rwlock, long, 0/*!isW*/, long, True);
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " :: lrw_rlk ->>\n");
+   }
+}
+#endif /* VGO_solaris */
+
 
 //-----------------------------------------------------------
-// glibc:  pthread_rwlock_trywrlock
-// darwin: pthread_rwlock_trywrlock
-// darwin: pthread_rwlock_trywrlock$UNIX2003
+// glibc:   pthread_rwlock_trywrlock
+// darwin:  pthread_rwlock_trywrlock
+// darwin:  pthread_rwlock_trywrlock$UNIX2003
+// Solaris: rw_trywrlock (pthread_rwlock_trywrlock is a weak alias)
 //
 __attribute__((noinline))
 static int pthread_rwlock_trywrlock_WRK(pthread_rwlock_t* rwlock)
@@ -1673,10 +2314,10 @@
       that the lock has been acquired by someone (this thread).  Does
       this matter?  Not sure, but I don't think so. */
 
-   if (ret == 0 /*success*/) {
-      DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
-                   pthread_rwlock_t*,rwlock, long,1/*isW*/);
-   } else { 
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+                 pthread_rwlock_t*,rwlock, long,1/*isW*/,
+                 long, (ret == 0) ? True : False);
+   if (ret != 0) {
       if (ret != EBUSY)
          DO_PthAPIerror( "pthread_rwlock_trywrlock", ret );
    }
@@ -1696,15 +2337,21 @@
                  pthread_rwlock_t* rwlock) {
       return pthread_rwlock_trywrlock_WRK(rwlock);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, rwZutrywrlock, // rw_trywrlock
+                 pthread_rwlock_t *rwlock) {
+      return pthread_rwlock_trywrlock_WRK(rwlock);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_rwlock_tryrdlock
-// darwin: pthread_rwlock_trywrlock
-// darwin: pthread_rwlock_trywrlock$UNIX2003
+// glibc:   pthread_rwlock_tryrdlock
+// darwin:  pthread_rwlock_tryrdlock
+// darwin:  pthread_rwlock_tryrdlock$UNIX2003
+// Solaris: rw_tryrdlock (pthread_rwlock_tryrdlock is a weak alias)
 //
 __attribute__((noinline))
 static int pthread_rwlock_tryrdlock_WRK(pthread_rwlock_t* rwlock)
@@ -1727,10 +2374,11 @@
       that the lock has been acquired by someone (this thread).  Does
       this matter?  Not sure, but I don't think so. */
 
-   if (ret == 0 /*success*/) {
-      DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
-                   pthread_rwlock_t*,rwlock, long,0/*!isW*/);
-   } else { 
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+                pthread_rwlock_t*,rwlock, long,0/*!isW*/,
+                long, (ret == 0) ? True : False);
+
+   if (ret != 0) {
       if (ret != EBUSY)
          DO_PthAPIerror( "pthread_rwlock_tryrdlock", ret );
    }
@@ -1750,15 +2398,127 @@
                  pthread_rwlock_t* rwlock) {
       return pthread_rwlock_tryrdlock_WRK(rwlock);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, rwZutryrdlock, // rw_tryrdlock
+                 pthread_rwlock_t *rwlock) {
+      return pthread_rwlock_tryrdlock_WRK(rwlock);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  pthread_rwlock_unlock
-// darwin: pthread_rwlock_unlock
-// darwin: pthread_rwlock_unlock$UNIX2003
+// glibc:   Unhandled
+// darwin:  Unhandled
+// Solaris: pthread_rwlock_timedrdlock
+// Solaris: pthread_rwlock_reltimedrdlock_np
+//
+__attribute__((noinline)) __attribute__((unused))
+static int pthread_rwlock_timedrdlock_WRK(pthread_rwlock_t *rwlock,
+                                          const struct timespec *timeout)
+{
+   int    ret;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< pthread_rwl_timedrdl %p", rwlock); fflush(stderr);
+   }
+
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
+                 pthread_rwlock_t *, rwlock,
+                 long, 0/*isW*/, long, 0/*isTryLock*/);
+
+   CALL_FN_W_WW(ret, fn, rwlock, timeout);
+
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+                 pthread_rwlock_t *, rwlock, long, 0/*isW*/,
+                 long, (ret == 0) ? True : False);
+   if (ret != 0) {
+      DO_PthAPIerror("pthread_rwlock_timedrdlock", ret);
+   }
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " :: rwl_timedrdl -> %d >>\n", ret);
+   }
+   return ret;
+}
+#if defined(VGO_linux)
+#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, pthreadZurwlockZutimedrdlock, // pthread_rwlock_timedrdlock
+                 pthread_rwlock_t *rwlock,
+                 const struct timespec *timeout) {
+      return pthread_rwlock_timedrdlock_WRK(rwlock, timeout);
+   }
+   PTH_FUNC(int, pthreadZurwlockZureltimedrdlockZunp, // pthread_rwlock_timedrdlock_np
+                 pthread_rwlock_t *rwlock,
+                 const struct timespec *timeout) {
+      return pthread_rwlock_timedrdlock_WRK(rwlock, timeout);
+   }
+#else
+#  error "Unsupported OS"
+#endif
+
+
+//-----------------------------------------------------------
+// glibc:   Unhandled
+// darwin:  Unhandled
+// Solaris: pthread_rwlock_timedwrlock
+// Solaris: pthread_rwlock_reltimedwrlock_np
+//
+__attribute__((noinline)) __attribute__((unused))
+static int pthread_rwlock_timedwrlock_WRK(pthread_rwlock_t *rwlock,
+                                          const struct timespec *timeout)
+{
+   int    ret;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, "<< pthread_rwl_timedwrl %p", rwlock); fflush(stderr);
+   }
+
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
+                 pthread_rwlock_t *, rwlock,
+                 long, 1/*isW*/, long, 0/*isTryLock*/);
+
+   CALL_FN_W_WW(ret, fn, rwlock, timeout);
+
+   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+                 pthread_rwlock_t *, rwlock, long, 1/*isW*/,
+                 long, (ret == 0) ? True : False);
+   if (ret != 0) {
+      DO_PthAPIerror("pthread_rwlock_timedwrlock", ret);
+   }
+
+   if (TRACE_PTH_FNS) {
+      fprintf(stderr, " :: rwl_timedwrl -> %d >>\n", ret);
+   }
+   return ret;
+}
+#if defined(VGO_linux)
+#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, pthreadZurwlockZutimedwrlock, // pthread_rwlock_timedwrlock
+                 pthread_rwlock_t *rwlock,
+                 const struct timespec *timeout) {
+      return pthread_rwlock_timedwrlock_WRK(rwlock, timeout);
+   }
+   PTH_FUNC(int, pthreadZurwlockZureltimedwrlockZunp, // pthread_rwlock_timedwrlock_np
+                 pthread_rwlock_t *rwlock,
+                 const struct timespec *timeout) {
+      return pthread_rwlock_timedwrlock_WRK(rwlock, timeout);
+   }
+#else
+#  error "Unsupported OS"
+#endif
+
+
+//-----------------------------------------------------------
+// glibc:   pthread_rwlock_unlock
+// darwin:  pthread_rwlock_unlock
+// darwin:  pthread_rwlock_unlock$UNIX2003
+// Solaris: rw_unlock (pthread_rwlock_unlock is a weak alias)
 __attribute__((noinline))
 static int pthread_rwlock_unlock_WRK(pthread_rwlock_t* rwlock)
 {
@@ -1774,10 +2534,9 @@
 
    CALL_FN_W_W(ret, fn, rwlock);
 
-   if (ret == 0 /*success*/) {
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_POST,
-                  pthread_rwlock_t*,rwlock);
-   } else { 
+   DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_POST,
+               pthread_rwlock_t*,rwlock);
+   if (ret != 0) {
       DO_PthAPIerror( "pthread_rwlock_unlock", ret );
    }
 
@@ -1796,6 +2555,11 @@
                  pthread_rwlock_t* rwlock) {
       return pthread_rwlock_unlock_WRK(rwlock);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, rwZuunlock, // rw_unlock
+                 pthread_rwlock_t *rwlock) {
+      return pthread_rwlock_unlock_WRK(rwlock);
+   }
 #else
 #  error "Unsupported OS"
 #endif
@@ -1829,11 +2593,13 @@
 */
 
 //-----------------------------------------------------------
-// glibc:  sem_init@@GLIBC_2.2.5
-// glibc:  sem_init@@GLIBC_2.1
-// glibc:  sem_init@GLIBC_2.0
-// darwin: sem_init
+// glibc:   sem_init@@GLIBC_2.2.5
+// glibc:   sem_init@@GLIBC_2.1
+// glibc:   sem_init@GLIBC_2.0
+// darwin:  sem_init
+// Solaris: sema_init (sem_init is built on top of sem_init)
 //
+#if !defined(VGO_solaris)
 __attribute__((noinline))
 static int sem_init_WRK(sem_t* sem, int pshared, unsigned long value)
 {
@@ -1876,12 +2642,47 @@
 #  error "Unsupported OS"
 #endif
 
+#else /* VGO_solaris */
+PTH_FUNC(int, semaZuinit, // sema_init
+              sema_t *sem,
+              unsigned int value,
+              int type,
+              void *arg)
+{
+   OrigFn fn;
+   int    ret;
+   VALGRIND_GET_ORIG_FN(fn);
+
+   if (TRACE_SEM_FNS) {
+      fprintf(stderr, "<< sema_init(%p, %d, %u) ", sem, type, value);
+      fflush(stderr);
+   }
+
+   CALL_FN_W_WWWW(ret, fn, sem, value, type, arg);
+
+   if (ret == 0) {
+      DO_CREQ_v_WW(_VG_USERREQ__HG_POSIX_SEM_INIT_POST,
+                   sema_t *, sem, Word, value);
+   } else {
+      DO_PthAPIerror("sema_init", ret);
+   }
+
+   if (TRACE_SEM_FNS) {
+      fprintf(stderr, " sema_init -> %d >>\n", ret);
+      fflush(stderr);
+   }
+
+   return ret;
+}
+#endif /* VGO_solaris */
+
 
 //-----------------------------------------------------------
-// glibc:  sem_destroy@GLIBC_2.0
-// glibc:  sem_destroy@@GLIBC_2.1
-// glibc:  sem_destroy@@GLIBC_2.2.5
-// darwin: sem_destroy
+// glibc:   sem_destroy@GLIBC_2.0
+// glibc:   sem_destroy@@GLIBC_2.1
+// glibc:   sem_destroy@@GLIBC_2.2.5
+// darwin:  sem_destroy
+// Solaris: sema_destroy (sem_destroy is built on top of sema_destroy)
 __attribute__((noinline))
 static int sem_destroy_WRK(sem_t* sem)
 {
@@ -1899,7 +2700,7 @@
    CALL_FN_W_W(ret, fn, sem);
 
    if (ret != 0) {
-      DO_PthAPIerror( "sem_destroy", errno );
+      DO_PthAPIerror( "sem_destroy", SEM_ERROR );
    }
 
    if (TRACE_SEM_FNS) {
@@ -1919,18 +2720,24 @@
                  sem_t* sem) {
       return sem_destroy_WRK(sem);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, semaZudestroy,  // sema_destroy
+                 sem_t *sem) {
+      return sem_destroy_WRK(sem);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  sem_wait
-// glibc:  sem_wait@GLIBC_2.0
-// glibc:  sem_wait@@GLIBC_2.1
-// darwin: sem_wait
-// darwin: sem_wait$NOCANCEL$UNIX2003
-// darwin: sem_wait$UNIX2003
+// glibc:   sem_wait
+// glibc:   sem_wait@GLIBC_2.0
+// glibc:   sem_wait@@GLIBC_2.1
+// darwin:  sem_wait
+// darwin:  sem_wait$NOCANCEL$UNIX2003
+// darwin:  sem_wait$UNIX2003
+// Solaris: sema_wait (sem_wait is built on top of sema_wait)
 //
 /* wait: decrement semaphore - acquire lockage */
 __attribute__((noinline))
@@ -1945,12 +2752,15 @@
       fflush(stderr);
    }
 
+   DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_WAIT_PRE, sem_t*,sem);
+
    CALL_FN_W_W(ret, fn, sem);
 
-   if (ret == 0) {
-      DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_WAIT_POST, sem_t*,sem);
-   } else {
-      DO_PthAPIerror( "sem_wait", errno );
+   DO_CREQ_v_WW(_VG_USERREQ__HG_POSIX_SEM_WAIT_POST, sem_t*,sem,
+                long, (ret == 0) ? True : False);
+
+   if (ret != 0) {
+      DO_PthAPIerror( "sem_wait", SEM_ERROR );
    }
 
    if (TRACE_SEM_FNS) {
@@ -1974,16 +2784,21 @@
    PTH_FUNC(int, semZuwaitZDZa, sem_t* sem) { /* sem_wait$* */
       return sem_wait_WRK(sem);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, semaZuwait, sem_t *sem) { /* sema_wait */
+      return sem_wait_WRK(sem);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  sem_post
-// glibc:  sem_post@GLIBC_2.0
-// glibc:  sem_post@@GLIBC_2.1
-// darwin: sem_post
+// glibc:   sem_post
+// glibc:   sem_post@GLIBC_2.0
+// glibc:   sem_post@@GLIBC_2.1
+// darwin:  sem_post
+// Solaris: sema_post (sem_post is built on top of sema_post)
 //
 /* post: increment semaphore - release lockage */
 __attribute__((noinline))
@@ -2003,8 +2818,10 @@
 
    CALL_FN_W_W(ret, fn, sem);
 
+   DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_POST_POST, sem_t*,sem);
+
    if (ret != 0) {
-      DO_PthAPIerror( "sem_post", errno );
+      DO_PthAPIerror( "sem_post", SEM_ERROR );
    }
 
    if (TRACE_SEM_FNS) {
@@ -2025,14 +2842,19 @@
    PTH_FUNC(int, semZupost, sem_t* sem) { /* sem_post */
       return sem_post_WRK(sem);
    }
+#elif defined(VGO_solaris)
+   PTH_FUNC(int, semaZupost, sem_t *sem) { /* sema_post */
+      return sem_post_WRK(sem);
+   }
 #else
 #  error "Unsupported OS"
 #endif
 
 
 //-----------------------------------------------------------
-// glibc:  sem_open
-// darwin: sem_open
+// glibc:   sem_open
+// darwin:  sem_open
+// Solaris: sem_open
 //
 PTH_FUNC(sem_t*, semZuopen,
                  const char* name, long oflag,
@@ -2069,8 +2891,9 @@
 
 
 //-----------------------------------------------------------
-// glibc:  sem_close
-// darwin: sem_close
+// glibc:   sem_close
+// darwin:  sem_close
+// Solaris: sem_close
 PTH_FUNC(int, sem_close, sem_t* sem)
 {
    OrigFn fn;
@@ -2209,8 +3032,8 @@
 
    CALL_FN_v_W(fn, self);
 
-   DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
-               void*, self);
+   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+                void *, self, long, True);
 
    if (TRACE_QT4_FNS) {
       fprintf(stderr, " :: Q::lock done >>\n");
@@ -2275,10 +3098,8 @@
    CALL_FN_W_W(ret, fn, self);
 
    // assumes that only the low 8 bits of the 'bool' are significant
-   if (ret & 0xFF) {
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
-                  void*, self);
-   }
+   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+                void *, self, long, (ret & 0xFF) ? True : False);
 
    if (TRACE_QT4_FNS) {
       fprintf(stderr, " :: Q::tryLock -> %lu >>\n", ret);
@@ -2314,10 +3135,8 @@
    CALL_FN_W_WW(ret, fn, self,arg2);
 
    // assumes that only the low 8 bits of the 'bool' are significant
-   if (ret & 0xFF) {
-      DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
-                  void*, self);
-   }
+   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+               void *, self, long, (ret & 0xFF) ? True : False);
 
    if (TRACE_QT4_FNS) {
       fprintf(stderr, " :: Q::tryLock(int) -> %lu >>\n", ret);
@@ -2442,8 +3261,8 @@
 //
 //   CALL_FN_v_W(fn, self);
 //
-//   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
-//                void*,self, long,0/*!isW*/);
+//   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+//                 void*,self, long,0/*!isW*/, long, True);
 //
 //   if (TRACE_QT4_FNS) {
 //      fprintf(stderr, " :: Q::lockForRead :: done >>\n");
@@ -2469,8 +3288,8 @@
 //
 //   CALL_FN_v_W(fn, self);
 //
-//   DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
-//                void*,self, long,1/*isW*/);
+//   DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+//                 void*,self, long,1/*isW*/, long, True);
 //
 //   if (TRACE_QT4_FNS) {
 //      fprintf(stderr, " :: Q::lockForWrite :: done >>\n");
diff --git a/helgrind/hg_lock_n_thread.c b/helgrind/hg_lock_n_thread.c
index c2a26ef..a452753 100644
--- a/helgrind/hg_lock_n_thread.c
+++ b/helgrind/hg_lock_n_thread.c
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks Ltd
+   Copyright (C) 2007-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/helgrind/hg_lock_n_thread.h b/helgrind/hg_lock_n_thread.h
index 7626191..9fb4c8a 100644
--- a/helgrind/hg_lock_n_thread.h
+++ b/helgrind/hg_lock_n_thread.h
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks Ltd
+   Copyright (C) 2007-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -94,6 +94,29 @@
       Bool        announced;
       /* Index for generating references in error messages. */
       Int         errmsg_index;
+
+      /* Nesting level of pthread_create(). New memory allocated is untracked
+         when this value is > 0: race reporting is suppressed there. DRD does
+         the same thing implicitly. This is necessary because for example
+         Solaris libc caches many objects and reuses them for different threads
+         and that confuses Helgrind. With libvki it would be possible to
+         explictly use VG_USERREQ__HG_CLEAN_MEMORY on such objects.
+         Also mutex activity is ignored so that they do not impose false
+         ordering between creator and created thread. */
+      Int pthread_create_nesting_level;
+
+      /* Nesting level of synchronization functions called by the client.
+         Loads and stores are ignored when its value > 0.
+         Currently this is used solely for suppressing races of primitive
+         synchronization objects themselves - mutexes, condition variables,
+         read-write locks and their associated sleep queues.
+         See also documentation for command line option
+         --ignore-thread-creation. */
+      Int synchr_nesting;
+
+#if defined(VGO_solaris)
+      Int      bind_guard_flag; /* Bind flag from the runtime linker. */
+#endif /* VGO_solaris */
    }
    Thread;
 
diff --git a/helgrind/hg_main.c b/helgrind/hg_main.c
index ccf1a56..bafa78f 100644
--- a/helgrind/hg_main.c
+++ b/helgrind/hg_main.c
@@ -8,10 +8,10 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks LLP
+   Copyright (C) 2007-2015 OpenWorks LLP
       info@open-works.co.uk
 
-   Copyright (C) 2007-2013 Apple, Inc.
+   Copyright (C) 2007-2015 Apple, Inc.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -53,7 +53,7 @@
 #include "pub_tool_debuginfo.h" // VG_(find_seginfo), VG_(seginfo_soname)
 #include "pub_tool_redir.h"     // sonames for the dynamic linkers
 #include "pub_tool_vki.h"       // VKI_PAGE_SIZE
-#include "pub_tool_libcproc.h"  // VG_(atfork)
+#include "pub_tool_libcproc.h"
 #include "pub_tool_aspacemgr.h" // VG_(am_is_valid_for_client)
 #include "pub_tool_poolalloc.h"
 #include "pub_tool_addrinfo.h"
@@ -160,6 +160,12 @@
 static UWord stats__lockN_acquires = 0;
 static UWord stats__lockN_releases = 0;
 
+#if defined(VGO_solaris)
+Bool HG_(clo_ignore_thread_creation) = True;
+#else
+Bool HG_(clo_ignore_thread_creation) = False;
+#endif /* VGO_solaris */
+
 static
 ThreadId map_threads_maybe_reverse_lookup_SLOW ( Thread* thr ); /*fwds*/
 
@@ -177,6 +183,12 @@
    thread->announced    = False;
    thread->errmsg_index = indx++;
    thread->admin        = admin_threads;
+   thread->synchr_nesting = 0;
+   thread->pthread_create_nesting_level = 0;
+#if defined(VGO_solaris)
+   thread->bind_guard_flag = 0;
+#endif /* VGO_solaris */
+
    admin_threads        = thread;
    return thread;
 }
@@ -508,7 +520,7 @@
             if (thr->coretid == VG_INVALID_THREADID) 
                VG_(printf)("tid (exited) ");
             else
-               VG_(printf)("tid %d ", thr->coretid);
+               VG_(printf)("tid %u ", thr->coretid);
 
          }
       }
@@ -698,6 +710,34 @@
    map_threads[coretid] = NULL;
 }
 
+static void HG_(thread_enter_synchr)(Thread *thr) {
+   tl_assert(thr->synchr_nesting >= 0);
+#if defined(VGO_solaris)
+   thr->synchr_nesting += 1;
+#endif /* VGO_solaris */
+}
+
+static void HG_(thread_leave_synchr)(Thread *thr) {
+#if defined(VGO_solaris)
+   thr->synchr_nesting -= 1;
+#endif /* VGO_solaris */
+   tl_assert(thr->synchr_nesting >= 0);
+}
+
+static void HG_(thread_enter_pthread_create)(Thread *thr) {
+   tl_assert(thr->pthread_create_nesting_level >= 0);
+   thr->pthread_create_nesting_level += 1;
+}
+
+static void HG_(thread_leave_pthread_create)(Thread *thr) {
+   tl_assert(thr->pthread_create_nesting_level > 0);
+   thr->pthread_create_nesting_level -= 1;
+}
+
+static Int HG_(get_pthread_create_nesting_level)(ThreadId tid) {
+   Thread *thr = map_threads_maybe_lookup(tid);
+   return thr->pthread_create_nesting_level;
+}
 
 /*----------------------------------------------------------------*/
 /*--- map_locks :: WordFM guest-Addr-of-lock Lock*             ---*/
@@ -997,7 +1037,7 @@
 static void shadow_mem_make_NoAccess_NoFX ( Thread* thr, Addr aIN, SizeT len )
 {
    if (0 && len > 500)
-      VG_(printf)("make NoAccess_NoFX ( %#lx, %ld )\n", aIN, len );
+      VG_(printf)("make NoAccess_NoFX ( %#lx, %lu )\n", aIN, len );
    // has no effect (NoFX)
    libhb_srange_noaccess_NoFX( thr->hbthr, aIN, len );
 }
@@ -1005,7 +1045,7 @@
 static void shadow_mem_make_NoAccess_AHAE ( Thread* thr, Addr aIN, SizeT len )
 {
    if (0 && len > 500)
-      VG_(printf)("make NoAccess_AHAE ( %#lx, %ld )\n", aIN, len );
+      VG_(printf)("make NoAccess_AHAE ( %#lx, %lu )\n", aIN, len );
    // Actually Has An Effect (AHAE)
    libhb_srange_noaccess_AHAE( thr->hbthr, aIN, len );
 }
@@ -1013,7 +1053,7 @@
 static void shadow_mem_make_Untracked ( Thread* thr, Addr aIN, SizeT len )
 {
    if (0 && len > 500)
-      VG_(printf)("make Untracked ( %#lx, %ld )\n", aIN, len );
+      VG_(printf)("make Untracked ( %#lx, %lu )\n", aIN, len );
    libhb_srange_untrack( thr->hbthr, aIN, len );
 }
 
@@ -1423,40 +1463,52 @@
 
 static
 void evh__new_mem ( Addr a, SizeT len ) {
+   Thread *thr = get_current_Thread();
    if (SHOW_EVENTS >= 2)
       VG_(printf)("evh__new_mem(%p, %lu)\n", (void*)a, len );
-   shadow_mem_make_New( get_current_Thread(), a, len );
+   shadow_mem_make_New( thr, a, len );
    if (len >= SCE_BIGRANGE_T && (HG_(clo_sanity_flags) & SCE_BIGRANGE))
       all__sanity_check("evh__new_mem-post");
+   if (UNLIKELY(thr->pthread_create_nesting_level > 0))
+      shadow_mem_make_Untracked( thr, a, len );
 }
 
 static
 void evh__new_mem_stack ( Addr a, SizeT len ) {
+   Thread *thr = get_current_Thread();
    if (SHOW_EVENTS >= 2)
       VG_(printf)("evh__new_mem_stack(%p, %lu)\n", (void*)a, len );
-   shadow_mem_make_New( get_current_Thread(),
-                        -VG_STACK_REDZONE_SZB + a, len );
+   shadow_mem_make_New( thr, -VG_STACK_REDZONE_SZB + a, len );
    if (len >= SCE_BIGRANGE_T && (HG_(clo_sanity_flags) & SCE_BIGRANGE))
       all__sanity_check("evh__new_mem_stack-post");
+   if (UNLIKELY(thr->pthread_create_nesting_level > 0))
+      shadow_mem_make_Untracked( thr, a, len );
 }
 
 static
 void evh__new_mem_w_tid ( Addr a, SizeT len, ThreadId tid ) {
+   Thread *thr = get_current_Thread();
    if (SHOW_EVENTS >= 2)
       VG_(printf)("evh__new_mem_w_tid(%p, %lu)\n", (void*)a, len );
-   shadow_mem_make_New( get_current_Thread(), a, len );
+   shadow_mem_make_New( thr, a, len );
    if (len >= SCE_BIGRANGE_T && (HG_(clo_sanity_flags) & SCE_BIGRANGE))
       all__sanity_check("evh__new_mem_w_tid-post");
+   if (UNLIKELY(thr->pthread_create_nesting_level > 0))
+      shadow_mem_make_Untracked( thr, a, len );
 }
 
 static
 void evh__new_mem_w_perms ( Addr a, SizeT len, 
                             Bool rr, Bool ww, Bool xx, ULong di_handle ) {
+   Thread *thr = get_current_Thread();
    if (SHOW_EVENTS >= 1)
       VG_(printf)("evh__new_mem_w_perms(%p, %lu, %d,%d,%d)\n",
                   (void*)a, len, (Int)rr, (Int)ww, (Int)xx );
-   if (rr || ww || xx)
-      shadow_mem_make_New( get_current_Thread(), a, len );
+   if (rr || ww || xx) {
+      shadow_mem_make_New( thr, a, len );
+      if (UNLIKELY(thr->pthread_create_nesting_level > 0))
+         shadow_mem_make_Untracked( thr, a, len );
+   }
    if (len >= SCE_BIGRANGE_T && (HG_(clo_sanity_flags) & SCE_BIGRANGE))
       all__sanity_check("evh__new_mem_w_perms-post");
 }
@@ -1518,7 +1570,9 @@
 void evh__copy_mem ( Addr src, Addr dst, SizeT len ) {
    if (SHOW_EVENTS >= 2)
       VG_(printf)("evh__copy_mem(%p, %p, %lu)\n", (void*)src, (void*)dst, len );
-   shadow_mem_scopy_range( get_current_Thread(), src, dst, len );
+   Thread *thr = get_current_Thread();
+   if (LIKELY(thr->synchr_nesting == 0))
+      shadow_mem_scopy_range( thr , src, dst, len );
    if (len >= SCE_BIGRANGE_T && (HG_(clo_sanity_flags) & SCE_BIGRANGE))
       all__sanity_check("evh__copy_mem-post");
 }
@@ -1582,6 +1636,13 @@
 #       endif
         thr_c->created_at = VG_(record_ExeContext)(parent, first_ip_delta);
       }
+
+      if (HG_(clo_ignore_thread_creation)) {
+         HG_(thread_enter_pthread_create)(thr_c);
+         tl_assert(thr_c->synchr_nesting == 0);
+         HG_(thread_enter_synchr)(thr_c);
+         /* Counterpart in _VG_USERREQ__HG_SET_MY_PTHREAD_T. */
+      }
    }
 
    if (HG_(clo_sanity_flags) & SCE_THREADS)
@@ -1752,7 +1813,9 @@
        || (SHOW_EVENTS >= 1 && size != 1))
       VG_(printf)("evh__pre_mem_read(ctid=%d, \"%s\", %p, %lu)\n", 
                   (Int)tid, s, (void*)a, size );
-   shadow_mem_cread_range( map_threads_lookup(tid), a, size);
+   Thread *thr = map_threads_lookup(tid);
+   if (LIKELY(thr->synchr_nesting == 0))
+      shadow_mem_cread_range(thr, a, size);
    if (size >= SCE_BIGRANGE_T && (HG_(clo_sanity_flags) & SCE_BIGRANGE))
       all__sanity_check("evh__pre_mem_read-post");
 }
@@ -1770,8 +1833,10 @@
    // checking the first byte is better than nothing.  See #255009.
    if (!VG_(am_is_valid_for_client) (a, 1, VKI_PROT_READ))
       return;
+   Thread *thr = map_threads_lookup(tid);
    len = VG_(strlen)( (HChar*) a );
-   shadow_mem_cread_range( map_threads_lookup(tid), a, len+1 );
+   if (LIKELY(thr->synchr_nesting == 0))
+      shadow_mem_cread_range( thr, a, len+1 );
    if (len >= SCE_BIGRANGE_T && (HG_(clo_sanity_flags) & SCE_BIGRANGE))
       all__sanity_check("evh__pre_mem_read_asciiz-post");
 }
@@ -1782,7 +1847,9 @@
    if (SHOW_EVENTS >= 1)
       VG_(printf)("evh__pre_mem_write(ctid=%d, \"%s\", %p, %lu)\n", 
                   (Int)tid, s, (void*)a, size );
-   shadow_mem_cwrite_range( map_threads_lookup(tid), a, size);
+   Thread *thr = map_threads_lookup(tid);
+   if (LIKELY(thr->synchr_nesting == 0))
+      shadow_mem_cwrite_range(thr, a, size);
    if (size >= SCE_BIGRANGE_T && (HG_(clo_sanity_flags) & SCE_BIGRANGE))
       all__sanity_check("evh__pre_mem_write-post");
 }
@@ -1811,7 +1878,8 @@
          where memory is referenced by one thread, and freed by
          another, and there's no observable synchronisation event to
          guarantee that the reference happens before the free. */
-      shadow_mem_cwrite_range(thr, a, len);
+      if (LIKELY(thr->synchr_nesting == 0))
+         shadow_mem_cwrite_range(thr, a, len);
    }
    shadow_mem_make_NoAccess_AHAE( thr, a, len );
    /* We used to call instead
@@ -1845,70 +1913,80 @@
 void evh__mem_help_cread_1(Addr a) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CREAD_1(hbthr, a);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CREAD_1(hbthr, a);
 }
 
 static VG_REGPARM(1)
 void evh__mem_help_cread_2(Addr a) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CREAD_2(hbthr, a);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CREAD_2(hbthr, a);
 }
 
 static VG_REGPARM(1)
 void evh__mem_help_cread_4(Addr a) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CREAD_4(hbthr, a);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CREAD_4(hbthr, a);
 }
 
 static VG_REGPARM(1)
 void evh__mem_help_cread_8(Addr a) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CREAD_8(hbthr, a);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CREAD_8(hbthr, a);
 }
 
 static VG_REGPARM(2)
 void evh__mem_help_cread_N(Addr a, SizeT size) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CREAD_N(hbthr, a, size);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CREAD_N(hbthr, a, size);
 }
 
 static VG_REGPARM(1)
 void evh__mem_help_cwrite_1(Addr a) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CWRITE_1(hbthr, a);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CWRITE_1(hbthr, a);
 }
 
 static VG_REGPARM(1)
 void evh__mem_help_cwrite_2(Addr a) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CWRITE_2(hbthr, a);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CWRITE_2(hbthr, a);
 }
 
 static VG_REGPARM(1)
 void evh__mem_help_cwrite_4(Addr a) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CWRITE_4(hbthr, a);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CWRITE_4(hbthr, a);
 }
 
 static VG_REGPARM(1)
 void evh__mem_help_cwrite_8(Addr a) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CWRITE_8(hbthr, a);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CWRITE_8(hbthr, a);
 }
 
 static VG_REGPARM(2)
 void evh__mem_help_cwrite_N(Addr a, SizeT size) {
    Thread*  thr = get_current_Thread_in_C_C();
    Thr*     hbthr = thr->hbthr;
-   LIBHB_CWRITE_N(hbthr, a, size);
+   if (LIKELY(thr->synchr_nesting == 0))
+      LIBHB_CWRITE_N(hbthr, a, size);
 }
 
 
@@ -3310,7 +3388,7 @@
 {
    /* TID declares that any happens-before edges notionally stored in
       USERTAG can be deleted.  If (as would normally be the case) a
-      SO is associated with USERTAG, then the assocation is removed
+      SO is associated with USERTAG, then the association is removed
       and all resources associated with SO are freed.  Importantly,
       that frees up any VTSs stored in SO. */
    if (SHOW_EVENTS >= 1)
@@ -3321,6 +3399,52 @@
 }
 
 
+#if defined(VGO_solaris)
+/* ----------------------------------------------------- */
+/* --- events to do with bind guard/clear intercepts --- */
+/* ----------------------------------------------------- */
+
+static
+void evh__HG_RTLD_BIND_GUARD(ThreadId tid, Int flags)
+{
+   if (SHOW_EVENTS >= 1)
+      VG_(printf)("evh__HG_RTLD_BIND_GUARD"
+                  "(tid=%d, flags=%d)\n",
+                  (Int)tid, flags);
+
+   Thread *thr = map_threads_maybe_lookup(tid);
+   tl_assert(thr != NULL);
+
+   Int bindflag = (flags & VKI_THR_FLG_RTLD);
+   if ((bindflag & thr->bind_guard_flag) == 0) {
+      thr->bind_guard_flag |= bindflag;
+      HG_(thread_enter_synchr)(thr);
+      /* Misuse pthread_create_nesting_level for ignoring mutex activity. */
+      HG_(thread_enter_pthread_create)(thr);
+   }
+}
+
+static
+void evh__HG_RTLD_BIND_CLEAR(ThreadId tid, Int flags)
+{
+   if (SHOW_EVENTS >= 1)
+      VG_(printf)("evh__HG_RTLD_BIND_CLEAR"
+                  "(tid=%d, flags=%d)\n",
+                  (Int)tid, flags);
+
+   Thread *thr = map_threads_maybe_lookup(tid);
+   tl_assert(thr != NULL);
+
+   Int bindflag = (flags & VKI_THR_FLG_RTLD);
+   if ((thr->bind_guard_flag & bindflag) != 0) {
+      thr->bind_guard_flag &= ~bindflag;
+      HG_(thread_leave_synchr)(thr);
+      HG_(thread_leave_pthread_create)(thr);
+   }
+}
+#endif /* VGO_solaris */
+
+
 /*--------------------------------------------------------------*/
 /*--- Lock acquisition order monitoring                      ---*/
 /*--------------------------------------------------------------*/
@@ -4485,6 +4609,8 @@
    if (VG_STREQ(soname, VG_U_LD_LINUX_ARMHF_SO_3))  return True;
 #  elif defined(VGO_darwin)
    if (VG_STREQ(soname, VG_U_DYLD)) return True;
+#  elif defined(VGO_solaris)
+   if (VG_STREQ(soname, VG_U_LD_SO_1)) return True;
 #  else
 #    error "Unsupported OS"
 #  endif
@@ -4895,7 +5021,7 @@
       /* --- --- User-visible client requests --- --- */
 
       case VG_USERREQ__HG_CLEAN_MEMORY:
-         if (0) VG_(printf)("VG_USERREQ__HG_CLEAN_MEMORY(%#lx,%ld)\n",
+         if (0) VG_(printf)("VG_USERREQ__HG_CLEAN_MEMORY(%#lx,%lu)\n",
                             args[1], args[2]);
          /* Call die_mem to (expensively) tidy up properly, if there
             are any held locks etc in the area.  Calling evh__die_mem
@@ -4927,7 +5053,7 @@
       }
 
       case _VG_USERREQ__HG_ARANGE_MAKE_UNTRACKED:
-         if (0) VG_(printf)("HG_ARANGE_MAKE_UNTRACKED(%#lx,%ld)\n",
+         if (0) VG_(printf)("HG_ARANGE_MAKE_UNTRACKED(%#lx,%lu)\n",
                             args[1], args[2]);
          if (args[2] > 0) { /* length */
             evh__untrack_mem(args[1], args[2]);
@@ -4935,7 +5061,7 @@
          break;
 
       case _VG_USERREQ__HG_ARANGE_MAKE_TRACKED:
-         if (0) VG_(printf)("HG_ARANGE_MAKE_TRACKED(%#lx,%ld)\n",
+         if (0) VG_(printf)("HG_ARANGE_MAKE_TRACKED(%#lx,%lu)\n",
                             args[1], args[2]);
          if (args[2] > 0) { /* length */
             evh__new_mem(args[1], args[2]);
@@ -4943,7 +5069,7 @@
          break;
 
       case _VG_USERREQ__HG_GET_ABITS:
-         if (0) VG_(printf)("HG_GET_ABITS(%#lx,%#lx,%ld)\n",
+         if (0) VG_(printf)("HG_GET_ABITS(%#lx,%#lx,%lu)\n",
                             args[1], args[2], args[3]);
          UChar *zzabit = (UChar *) args[2];
          if (zzabit == NULL 
@@ -4983,6 +5109,15 @@
          VG_(printf)("XXXX: bind pthread_t %p to Thread* %p\n",
                      (void*)args[1], (void*)my_thr );
          VG_(addToFM)( map_pthread_t_to_Thread, (UWord)args[1], (UWord)my_thr );
+
+         if (my_thr->coretid != 1) {
+            /* FIXME: hardwires assumption about identity of the root thread. */
+            if (HG_(clo_ignore_thread_creation)) {
+               HG_(thread_leave_pthread_create)(my_thr);
+               HG_(thread_leave_synchr)(my_thr);
+               tl_assert(my_thr->synchr_nesting == 0);
+            }
+         }
          break;
       }
 
@@ -5092,32 +5227,48 @@
          break;
 
       case _VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_PRE:   // pth_mx_t*
-         evh__HG_PTHREAD_MUTEX_UNLOCK_PRE( tid, (void*)args[1] );
+         HG_(thread_enter_synchr)(map_threads_maybe_lookup(tid));
+         if (HG_(get_pthread_create_nesting_level)(tid) == 0)
+            evh__HG_PTHREAD_MUTEX_UNLOCK_PRE( tid, (void*)args[1] );
          break;
 
       case _VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_POST:  // pth_mx_t*
-         evh__HG_PTHREAD_MUTEX_UNLOCK_POST( tid, (void*)args[1] );
+         if (HG_(get_pthread_create_nesting_level)(tid) == 0)
+            evh__HG_PTHREAD_MUTEX_UNLOCK_POST( tid, (void*)args[1] );
+         HG_(thread_leave_synchr)(map_threads_maybe_lookup(tid));
          break;
 
-      case _VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_PRE:     // pth_mx_t*, Word
-         evh__HG_PTHREAD_MUTEX_LOCK_PRE( tid, (void*)args[1], args[2] );
+      case _VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_PRE:     // pth_mx_t*
+         HG_(thread_enter_synchr)(map_threads_maybe_lookup(tid));
+         if (HG_(get_pthread_create_nesting_level)(tid) == 0)
+            evh__HG_PTHREAD_MUTEX_LOCK_PRE( tid, (void*)args[1], args[2] );
          break;
 
-      case _VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST:    // pth_mx_t*
-         evh__HG_PTHREAD_MUTEX_LOCK_POST( tid, (void*)args[1] );
+      case _VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST:    // pth_mx_t*, long
+         if ((args[2] == True) // lock actually taken
+             && (HG_(get_pthread_create_nesting_level)(tid) == 0))
+            evh__HG_PTHREAD_MUTEX_LOCK_POST( tid, (void*)args[1] );
+         HG_(thread_leave_synchr)(map_threads_maybe_lookup(tid));
          break;
 
       /* This thread is about to do pthread_cond_signal on the
          pthread_cond_t* in arg[1].  Ditto pthread_cond_broadcast. */
       case _VG_USERREQ__HG_PTHREAD_COND_SIGNAL_PRE:
       case _VG_USERREQ__HG_PTHREAD_COND_BROADCAST_PRE:
+         HG_(thread_enter_synchr)(map_threads_maybe_lookup(tid));
          evh__HG_PTHREAD_COND_SIGNAL_PRE( tid, (void*)args[1] );
          break;
 
+      case _VG_USERREQ__HG_PTHREAD_COND_SIGNAL_POST:
+      case _VG_USERREQ__HG_PTHREAD_COND_BROADCAST_POST:
+         HG_(thread_leave_synchr)(map_threads_maybe_lookup(tid));
+         break;
+
       /* Entry into pthread_cond_wait, cond=arg[1], mutex=arg[2].
          Returns a flag indicating whether or not the mutex is believed to be
          valid for this operation. */
       case _VG_USERREQ__HG_PTHREAD_COND_WAIT_PRE: {
+         HG_(thread_enter_synchr)(map_threads_maybe_lookup(tid));
          Bool mutex_is_valid
             = evh__HG_PTHREAD_COND_WAIT_PRE( tid, (void*)args[1], 
                                                   (void*)args[2] );
@@ -5137,12 +5288,14 @@
          evh__HG_PTHREAD_COND_DESTROY_PRE( tid, (void*)args[1], args[2] != 0 );
          break;
 
-      /* Thread successfully completed pthread_cond_wait, cond=arg[1],
-         mutex=arg[2] */
+      /* Thread completed pthread_cond_wait, cond=arg[1],
+         mutex=arg[2], timeout=arg[3], successful=arg[4] */
       case _VG_USERREQ__HG_PTHREAD_COND_WAIT_POST:
-         evh__HG_PTHREAD_COND_WAIT_POST( tid,
-                                         (void*)args[1], (void*)args[2],
-                                         (Bool)args[3] );
+         if (args[4] == True)
+            evh__HG_PTHREAD_COND_WAIT_POST( tid,
+                                            (void*)args[1], (void*)args[2],
+                                            (Bool)args[3] );
+         HG_(thread_leave_synchr)(map_threads_maybe_lookup(tid));
          break;
 
       case _VG_USERREQ__HG_PTHREAD_RWLOCK_INIT_POST:
@@ -5155,21 +5308,30 @@
 
       /* rwlock=arg[1], isW=arg[2], isTryLock=arg[3] */
       case _VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE:
-         evh__HG_PTHREAD_RWLOCK_LOCK_PRE( tid, (void*)args[1],
-                                               args[2], args[3] );
+         HG_(thread_enter_synchr)(map_threads_maybe_lookup(tid));
+         if (HG_(get_pthread_create_nesting_level)(tid) == 0)
+            evh__HG_PTHREAD_RWLOCK_LOCK_PRE( tid, (void*)args[1],
+                                             args[2], args[3] );
          break;
 
-      /* rwlock=arg[1], isW=arg[2] */
+      /* rwlock=arg[1], isW=arg[2], tookLock=arg[3] */
       case _VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST:
-         evh__HG_PTHREAD_RWLOCK_LOCK_POST( tid, (void*)args[1], args[2] );
+         if ((args[3] == True)
+             && (HG_(get_pthread_create_nesting_level)(tid) == 0))
+            evh__HG_PTHREAD_RWLOCK_LOCK_POST( tid, (void*)args[1], args[2] );
+         HG_(thread_leave_synchr)(map_threads_maybe_lookup(tid));
          break;
 
       case _VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_PRE:
-         evh__HG_PTHREAD_RWLOCK_UNLOCK_PRE( tid, (void*)args[1] );
+         HG_(thread_enter_synchr)(map_threads_maybe_lookup(tid));
+         if (HG_(get_pthread_create_nesting_level)(tid) == 0)
+            evh__HG_PTHREAD_RWLOCK_UNLOCK_PRE( tid, (void*)args[1] );
          break;
 
       case _VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_POST:
-         evh__HG_PTHREAD_RWLOCK_UNLOCK_POST( tid, (void*)args[1] );
+         if (HG_(get_pthread_create_nesting_level)(tid) == 0)
+            evh__HG_PTHREAD_RWLOCK_UNLOCK_POST( tid, (void*)args[1] );
+         HG_(thread_leave_synchr)(map_threads_maybe_lookup(tid));
          break;
 
       case _VG_USERREQ__HG_POSIX_SEM_INIT_POST: /* sem_t*, unsigned long */
@@ -5181,11 +5343,22 @@
          break;
 
       case _VG_USERREQ__HG_POSIX_SEM_POST_PRE: /* sem_t* */
+         HG_(thread_enter_synchr)(map_threads_maybe_lookup(tid));
          evh__HG_POSIX_SEM_POST_PRE( tid, (void*)args[1] );
          break;
 
-      case _VG_USERREQ__HG_POSIX_SEM_WAIT_POST: /* sem_t* */
-         evh__HG_POSIX_SEM_WAIT_POST( tid, (void*)args[1] );
+      case _VG_USERREQ__HG_POSIX_SEM_POST_POST: /* sem_t* */
+         HG_(thread_leave_synchr)(map_threads_maybe_lookup(tid));
+         break;
+
+      case _VG_USERREQ__HG_POSIX_SEM_WAIT_PRE: /* sem_t* */
+         HG_(thread_enter_synchr)(map_threads_maybe_lookup(tid));
+         break;
+
+      case _VG_USERREQ__HG_POSIX_SEM_WAIT_POST: /* sem_t*, long tookLock */
+         if (args[2] == True)
+            evh__HG_POSIX_SEM_WAIT_POST( tid, (void*)args[1] );
+         HG_(thread_leave_synchr)(map_threads_maybe_lookup(tid));
          break;
 
       case _VG_USERREQ__HG_PTHREAD_BARRIER_INIT_PRE:
@@ -5273,6 +5446,58 @@
          return handled;
       }
 
+      case _VG_USERREQ__HG_PTHREAD_CREATE_BEGIN: {
+         Thread *thr = map_threads_maybe_lookup(tid);
+         if (HG_(clo_ignore_thread_creation)) {
+            HG_(thread_enter_pthread_create)(thr);
+            HG_(thread_enter_synchr)(thr);
+         }
+         break;
+      }
+
+      case _VG_USERREQ__HG_PTHREAD_CREATE_END: {
+         Thread *thr = map_threads_maybe_lookup(tid);
+         if (HG_(clo_ignore_thread_creation)) {
+            HG_(thread_leave_pthread_create)(thr);
+            HG_(thread_leave_synchr)(thr);
+         }
+         break;
+      }
+
+      case _VG_USERREQ__HG_PTHREAD_MUTEX_ACQUIRE_PRE: // pth_mx_t*, long tryLock
+         evh__HG_PTHREAD_MUTEX_LOCK_PRE( tid, (void*)args[1], args[2] );
+         break;
+
+      case _VG_USERREQ__HG_PTHREAD_MUTEX_ACQUIRE_POST:    // pth_mx_t*
+         evh__HG_PTHREAD_MUTEX_LOCK_POST( tid, (void*)args[1] );
+         break;
+
+      case _VG_USERREQ__HG_PTHREAD_RWLOCK_ACQUIRED:       // void*, long isW
+         evh__HG_PTHREAD_RWLOCK_LOCK_POST( tid, (void*)args[1], args[2] );
+         break;
+
+      case _VG_USERREQ__HG_PTHREAD_RWLOCK_RELEASED:       // void*
+         evh__HG_PTHREAD_RWLOCK_UNLOCK_PRE( tid, (void*)args[1] );
+         break;
+
+      case _VG_USERREQ__HG_POSIX_SEM_RELEASED: /* sem_t* */
+         evh__HG_POSIX_SEM_POST_PRE( tid, (void*)args[1] );
+         break;
+
+      case _VG_USERREQ__HG_POSIX_SEM_ACQUIRED: /* sem_t* */
+         evh__HG_POSIX_SEM_WAIT_POST( tid, (void*)args[1] );
+         break;
+
+#if defined(VGO_solaris)
+      case _VG_USERREQ__HG_RTLD_BIND_GUARD:
+         evh__HG_RTLD_BIND_GUARD(tid, args[1]);
+         break;
+
+      case _VG_USERREQ__HG_RTLD_BIND_CLEAR:
+         evh__HG_RTLD_BIND_CLEAR(tid, args[1]);
+         break;
+#endif /* VGO_solaris */
+
       default:
          /* Unhandled Helgrind client request! */
          tl_assert2(0, "unhandled Helgrind client request 0x%lx",
@@ -5339,6 +5564,8 @@
 
    else if VG_BOOL_CLO(arg, "--check-stack-refs",
                             HG_(clo_check_stack_refs)) {}
+   else if VG_BOOL_CLO(arg, "--ignore-thread-creation",
+                            HG_(clo_ignore_thread_creation)) {}
 
    else 
       return VG_(replacement_malloc_process_cmd_line_option)(arg);
@@ -5358,6 +5585,9 @@
 "    --conflict-cache-size=N   size of 'full' history cache [2000000]\n"
 "    --check-stack-refs=no|yes race-check reads and writes on the\n"
 "                              main stack and thread stacks? [yes]\n"
+"    --ignore-thread-creation=yes|no Ignore activities during thread\n"
+"                              creation [%s]\n",
+HG_(clo_ignore_thread_creation) ? "yes" : "no"
    );
 }
 
@@ -5423,7 +5653,7 @@
                HG_(stats__LockN_to_P_queries),
                HG_(stats__LockN_to_P_get_map_size)() );
 
-   VG_(printf)("client malloc-ed blocks: %'8d\n",
+   VG_(printf)("client malloc-ed blocks: %'8u\n",
                VG_(HT_count_nodes)(hg_mallocmeta_table));
                
    VG_(printf)("string table map: %'8llu queries (%llu map size)\n",
@@ -5534,7 +5764,7 @@
    VG_(details_version)         (NULL);
    VG_(details_description)     ("a thread error detector");
    VG_(details_copyright_author)(
-      "Copyright (C) 2007-2013, and GNU GPL'd, by OpenWorks LLP et al.");
+      "Copyright (C) 2007-2015, and GNU GPL'd, by OpenWorks LLP et al.");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
    VG_(details_avg_translation_sizeB) ( 320 );
 
diff --git a/helgrind/hg_wordset.c b/helgrind/hg_wordset.c
index 63066f1..e0f6845 100644
--- a/helgrind/hg_wordset.c
+++ b/helgrind/hg_wordset.c
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks LLP
+   Copyright (C) 2007-2015 OpenWorks LLP
        info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/helgrind/hg_wordset.h b/helgrind/hg_wordset.h
index e7a3b5e..b431a05 100644
--- a/helgrind/hg_wordset.h
+++ b/helgrind/hg_wordset.h
@@ -8,7 +8,7 @@
    This file is part of Helgrind, a Valgrind tool for detecting errors
    in threaded programs.
 
-   Copyright (C) 2007-2013 OpenWorks LLP
+   Copyright (C) 2007-2015 OpenWorks LLP
        info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/helgrind/libhb.h b/helgrind/libhb.h
index 68754e6..963c490 100644
--- a/helgrind/libhb.h
+++ b/helgrind/libhb.h
@@ -9,7 +9,7 @@
    This file is part of LibHB, a library for implementing and checking
    the happens-before relationship in concurrent programs.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/helgrind/libhb_core.c b/helgrind/libhb_core.c
index a66d578..15a57dd 100644
--- a/helgrind/libhb_core.c
+++ b/helgrind/libhb_core.c
@@ -9,7 +9,7 @@
    This file is part of LibHB, a library for implementing and checking
    the happens-before relationship in concurrent programs.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -143,7 +143,7 @@
    a pair, (Thr*, ULong), but that takes 16 bytes on a 64-bit target.
    We pack it into 64 bits by representing the Thr* using a ThrID, a
    small integer (18 bits), and a 46 bit integer for the timestamp
-   number.  The 46/18 split is arbitary, but has the effect that
+   number.  The 46/18 split is arbitrary, but has the effect that
    Helgrind can only handle programs that create 2^18 or fewer threads
    over their entire lifetime, and have no more than 2^46 timestamp
    ticks (synchronisation operations on the same thread).
@@ -1503,7 +1503,7 @@
    sequentialise_CacheLine( csvals, &csvalsUsed, 
                             N_LINE_ARANGE, cl );
    tl_assert(csvalsUsed >= 1 && csvalsUsed <= N_LINE_ARANGE);
-   if (0) VG_(printf)("%lu ", csvalsUsed);
+   if (0) VG_(printf)("%ld ", csvalsUsed);
 
    lineZ->dict[0] = lineZ->dict[1] 
                   = lineZ->dict[2] = lineZ->dict[3] = SVal_INVALID;
@@ -2625,7 +2625,7 @@
    n =  vts->usedTS;
    for (i = 0; i < n; i++) {
       const ScalarTS *st = &vts->ts[i];
-      VG_(printf)(i < n-1 ? "%u:%llu " : "%u:%llu", st->thrid, (ULong)st->tym);
+      VG_(printf)(i < n-1 ? "%d:%llu " : "%d:%llu", st->thrid, (ULong)st->tym);
    }
    VG_(printf)("]");
 }
@@ -3014,7 +3014,7 @@
    /* Now figure out when the next GC should be.  We'll allow the
       number of VTSs to double before GCing again.  Except of course
       that since we can't (or, at least, don't) shrink vts_tab, we
-      can't set the threshhold value smaller than it. */
+      can't set the threshold value smaller than it. */
    tl_assert(nFreed <= nTab);
    nLive = nTab - nFreed;
    tl_assert(nLive >= 0 && nLive <= nTab);
@@ -4306,7 +4306,7 @@
 
 
 /* Find 'ec' in the RCEC list whose head pointer lives at 'headp' and
-   move it one step closer the the front of the list, so as to make
+   move it one step closer to the front of the list, so as to make
    subsequent searches for it cheaper. */
 static void move_RCEC_one_step_forward ( RCEC** headp, RCEC* ec )
 {
@@ -4354,7 +4354,7 @@
    return a pointer to the copy.  The caller can safely have 'example'
    on its stack, since we will always return a pointer to a copy of
    it, not to the original.  Note that the inserted node will have .rc
-   of zero and so the caller must immediatly increment it. */
+   of zero and so the caller must immediately increment it. */
 __attribute__((noinline))
 static RCEC* ctxt__find_or_add ( RCEC* example )
 {
@@ -5050,7 +5050,7 @@
                  (XACmpFn_t)cmp__ULong_n_EC__by_ULong
               );
       if (0) VG_(printf)("record_race_info %u %u %u  confThr %p "
-                         "confTym %llu found %d (%lu,%lu)\n", 
+                         "confTym %llu found %d (%ld,%ld)\n", 
                          Cfailed, Kfailed, Cw,
                          confThr, confTym, found, firstIx, lastIx);
       /* We can't indefinitely collect stack traces at VTS
@@ -5779,7 +5779,7 @@
    stats__cache_make_New_arange += (ULong)len;
 
    if (0 && len > 500)
-      VG_(printf)("make New      ( %#lx, %ld )\n", a, len );
+      VG_(printf)("make New      ( %#lx, %lu )\n", a, len );
 
    if (0) {
       static UWord n_New_in_cache = 0;
@@ -6445,8 +6445,8 @@
                live++;
             hgthread = hgthread->admin;
          }
-         VG_(printf)("   libhb: threads live: %d exit_and_joinedwith %d"
-                     " exit %d joinedwith %d\n",
+         VG_(printf)("   libhb: threads live: %u exit_and_joinedwith %u"
+                     " exit %u joinedwith %u\n",
                      live, llexit_and_joinedwith_done,
                      llexit_done, joinedwith_done);
          VG_(printf)("   libhb: %d verydead_threads, "
@@ -6467,10 +6467,10 @@
       if (VG_(clo_verbosity) > 1)
          VG_(HT_print_stats) (oldrefHT, cmp_oldref_tsw);
       VG_(printf)( "   libhb: oldref bind tsw/rcec "
-                   "==/==:%lu ==/!=:%lu !=/!=:%lu\n",
+                   "==/==:%'lu ==/!=:%'lu !=/!=:%'lu\n",
                    stats__ctxt_eq_tsw_eq_rcec, stats__ctxt_eq_tsw_neq_rcec,
                    stats__ctxt_neq_tsw_neq_rcec);
-      VG_(printf)( "   libhb: ctxt__rcdec calls %lu. rcec gc discards %lu\n",
+      VG_(printf)( "   libhb: ctxt__rcdec calls %'lu. rcec gc discards %'lu\n",
                    stats__ctxt_rcdec_calls, stats__ctxt_rcec_gc_discards);
       VG_(printf)( "   libhb: contextTab: %lu slots,"
                    " %lu cur ents(ref'd %lu),"
@@ -6505,7 +6505,7 @@
                       / (Double)(non0chain ? non0chain : 1));
          for (i = 0; i <= MAXCHAIN; i++) {
             if (chains[i] != 0)
-                VG_(printf)( "[%d%s]=%d ",
+                VG_(printf)( "[%u%s]=%u ",
                              i, i == MAXCHAIN ? "+" : "",
                              chains[i]);
          }
@@ -6860,9 +6860,9 @@
    PlenCONSUME(APC, ARE, 1,               APClen);
 
    if (0)
-      VG_(printf) ("addr %p[%ld] ARE %p"
-                   " BPC %p[%ld] BFC %p[%ld] FSM %p[%ld]"
-                   " AFC %p[%ld] APC %p[%ld]\n",
+      VG_(printf) ("addr %p[%lu] ARE %p"
+                   " BPC %p[%lu] BFC %p[%lu] FSM %p[%lu]"
+                   " AFC %p[%lu] APC %p[%lu]\n",
                    (void*)addr, len, (void*)ARE,
                    (void*)BPC, BPClen, (void*)BFC, BFClen, (void*)FSM, FSMlen,
                    (void*)AFC, AFClen, (void*)APC, APClen);
@@ -7067,7 +7067,7 @@
       do_RCEC_GC();
 
    /* If there are still no entries available (all the table entries are full),
-      and we hit the threshhold point, then do a GC */
+      and we hit the threshold point, then do a GC */
    Bool vts_tab_GC = vts_tab_freelist == VtsID_INVALID
       && VG_(sizeXA)( vts_tab ) >= vts_next_GC_at;
    if (UNLIKELY (vts_tab_GC))
diff --git a/helgrind/tests/Makefile.am b/helgrind/tests/Makefile.am
index 0528fbc..8a0d6e6 100644
--- a/helgrind/tests/Makefile.am
+++ b/helgrind/tests/Makefile.am
@@ -2,6 +2,7 @@
 include $(top_srcdir)/Makefile.tool-tests.am
 
 dist_noinst_SCRIPTS = filter_stderr   \
+		      filter_stderr_solaris \
 		      filter_helgrind \
 		      filter_xml
 
@@ -46,7 +47,8 @@
 	pth_destroy_cond.vgtest \
 		pth_destroy_cond.stdout.exp pth_destroy_cond.stderr.exp \
 	pth_cond_destroy_busy.vgtest pth_cond_destroy_busy.stderr.exp \
-	pth_cond_destroy_busy.stderr.exp-ppc64 \
+		pth_cond_destroy_busy.stderr.exp-ppc64 \
+		pth_cond_destroy_busy.stderr.exp-solaris \
 	pth_spinlock.vgtest pth_spinlock.stdout.exp pth_spinlock.stderr.exp \
 	rwlock_race.vgtest rwlock_race.stdout.exp rwlock_race.stderr.exp \
 	rwlock_test.vgtest rwlock_test.stdout.exp rwlock_test.stderr.exp \
@@ -70,12 +72,13 @@
 	tc07_hbl1.vgtest tc07_hbl1.stdout.exp tc07_hbl1.stderr.exp \
 	tc08_hbl2.vgtest tc08_hbl2.stdout.exp tc08_hbl2.stderr.exp \
 	tc09_bad_unlock.vgtest tc09_bad_unlock.stdout.exp \
-		tc09_bad_unlock.stderr.exp \
+		tc09_bad_unlock.stderr.exp tc09_bad_unlock.stderr.exp-solaris \
 	tc10_rec_lock.vgtest tc10_rec_lock.stdout.exp tc10_rec_lock.stderr.exp \
 	tc11_XCHG.vgtest tc11_XCHG.stdout.exp tc11_XCHG.stderr.exp \
 	tc12_rwl_trivial.vgtest tc12_rwl_trivial.stdout.exp \
 		tc12_rwl_trivial.stderr.exp \
 		tc12_rwl_trivial.stderr.exp-darwin970 \
+		tc12_rwl_trivial.stderr.exp-solaris \
 	tc13_laog1.vgtest tc13_laog1.stdout.exp tc13_laog1.stderr.exp \
 	tc14_laog_dinphils.vgtest tc14_laog_dinphils.stdout.exp \
 		tc14_laog_dinphils.stderr.exp \
@@ -89,18 +92,22 @@
 		tc18_semabuse.stderr.exp \
 		tc18_semabuse.stderr.exp-linux-mips32 \
 		tc18_semabuse.stderr.exp-linux-mips32-b \
+		tc18_semabuse.stderr.exp-solaris \
 	tc19_shadowmem.vgtest tc19_shadowmem.stdout.exp \
 		tc19_shadowmem.stderr.exp tc19_shadowmem.stderr.exp-mips32 \
 	tc20_verifywrap.vgtest tc20_verifywrap.stdout.exp \
 		tc20_verifywrap.stderr.exp \
 		tc20_verifywrap.stderr.exp-glibc-2.18 \
+		tc20_verifywrap.stderr.exp-glibc-2.21 \
 		tc20_verifywrap.stderr.exp-mips32 \
 		tc20_verifywrap.stderr.exp-mips32-b \
 		tc20_verifywrap.stderr.exp-s390x \
+		tc20_verifywrap.stderr.exp-solaris \
 	tc21_pthonce.vgtest tc21_pthonce.stdout.exp tc21_pthonce.stderr.exp \
 	tc22_exit_w_lock.vgtest tc22_exit_w_lock.stdout.exp \
 		tc22_exit_w_lock.stderr.exp \
 		tc22_exit_w_lock.stderr.exp-kfail-x86 \
+		tc22_exit_w_lock.stderr.exp-solaris \
 	tc23_bogus_condwait.vgtest tc23_bogus_condwait.stdout.exp \
 		tc23_bogus_condwait.stderr.exp \
 		tc23_bogus_condwait.stderr.exp-mips32 \
@@ -109,6 +116,9 @@
 	tls_threads.vgtest tls_threads.stdout.exp \
 		tls_threads.stderr.exp
 
+# Wrapper headers used by some check programs.
+noinst_HEADERS = safe-pthread.h safe-semaphore.h
+
 # XXX: tc18_semabuse uses operations that are unsupported on Darwin.  It
 # should be conditionally compiled like tc20_verifywrap is.
 check_PROGRAMS = \
diff --git a/helgrind/tests/annotate_rwlock.c b/helgrind/tests/annotate_rwlock.c
index 8842b3c..8961f3c 100644
--- a/helgrind/tests/annotate_rwlock.c
+++ b/helgrind/tests/annotate_rwlock.c
@@ -74,7 +74,7 @@
     /* Darwin doesn't have an implementation of pthread_yield(). */
     usleep(100 * 1000);
 #else
-    pthread_yield();
+    sched_yield();
 #endif
     (void) __sync_fetch_and_sub(&p->locked, 1);
   }
@@ -99,7 +99,7 @@
     /* Darwin doesn't have an implementation of pthread_yield(). */
     usleep(100 * 1000);
 #else
-    pthread_yield();
+    sched_yield();
 #endif
     (void) __sync_fetch_and_sub(&p->locked, 1);
   }
diff --git a/helgrind/tests/filter_stderr b/helgrind/tests/filter_stderr
index 7b3003d..cfdd894 100755
--- a/helgrind/tests/filter_stderr
+++ b/helgrind/tests/filter_stderr
@@ -7,6 +7,13 @@
 # Anonymise addresses
 $dir/../../tests/filter_addresses                       |
 
+# Perform Solaris-specific filtering.
+if $dir/../../tests/os_test solaris; then
+   perl -p $dir/filter_stderr_solaris
+else
+   cat
+fi |
+
 # get rid of the numbers in bits of text "Thread #n", "thread #n",
 # "Thread n" and "thread n", "tid n"
 # as these make some tests more scheduling sensitive -- those where
@@ -19,6 +26,10 @@
 # Likewise for frame numbers, which depend on compilation.
 sed -e "s/frame #[0-9][0-9]*/frame #x/g" | \
 
+# Remove the message that more than hundred errors have been detected
+# (consists of two lines) and also the empty line above it.
+awk 'BEGIN{begin=1} {if ($0 == "More than 100 errors detected.  Subsequent errors") { getline; getline; } else { if (begin) begin = 0; else print last_line; }; last_line = $0; } END { if (! begin) print last_line; }' |
+
 # Merge sem_wait and sem_wait@*, as either could be used.  Likewise for
 # sem_post.
 sed \
diff --git a/helgrind/tests/filter_stderr_solaris b/helgrind/tests/filter_stderr_solaris
new file mode 100755
index 0000000..41d1f1e
--- /dev/null
+++ b/helgrind/tests/filter_stderr_solaris
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+
+# Replace pthread_create with pthread_create@* which is expected on Linux
+s/pthread_create \(hg_intercepts.c:/pthread_create@* \(hg_intercepts.c:/g;
+
+# We need to remove stack frames containing redundant function
+# names from libc, for example
+#     by 0x........: pthread_mutex_init (in /...libc...)
+my $check = join "|", ('pthread_mutex_init', 'pthread_cond_wait', 'pthread_cond_timedwait');
+s/^\s*by 0x........: (?:$check) \(in \/...libc...\)\s*//;
+
+# We also need to replace Solaris threading and sychronization function
+# names with POSIX ones for hg_intercepts.c stack frame:
+#     at 0x........: mutex_lock (hg_intercepts.c:1234)
+# See also comments in hg_intercepts.c.
+my %regex = (
+    'cond_broadcast' => 'pthread_cond_broadcast@*',
+    'cond_destroy'   => 'pthread_cond_destroy@*',
+    'cond_signal'    => 'pthread_cond_signal@*',
+    'cond_wait'      => 'pthread_cond_wait@*',
+    'cond_timedwait' => 'pthread_cond_timedwait@*',
+    'mutex_destroy'  => 'pthread_mutex_destroy',
+    'mutex_init'     => 'pthread_mutex_init',
+    'mutex_lock'     => 'pthread_mutex_lock',
+    'mutex_trylock'  => 'pthread_mutex_trylock',
+    'mutex_unlock'   => 'pthread_mutex_unlock',
+    'rwlock_init'    => 'pthread_rwlock_init',
+    'rw_unlock'      => 'pthread_rwlock_unlock'
+);
+my $check = join "|", keys %regex;
+if (! /: pthread_/ && ! /WRK/) {
+    s/($check)(.*hg_intercepts.c)/$regex{$1}$2/g;
+}
diff --git a/helgrind/tests/filter_xml b/helgrind/tests/filter_xml
index 282de5c..6de080a 100755
--- a/helgrind/tests/filter_xml
+++ b/helgrind/tests/filter_xml
@@ -39,7 +39,8 @@
     "thread #([0-9]+)"      => "x",
     "0x([0-9a-zA-Z]+)"      => "........",
     "Using Valgrind-([^\\s]*)"    => "X.Y.X",
-    "Copyright \\(C\\) ([0-9]{4}-[0-9]{4}).*" => "XXXX-YYYY"
+    "Copyright \\(C\\) ([0-9]{4}-[0-9]{4}).*" => "XXXX-YYYY",
+    '<fn>pthread_.*(@\*)</fn>'  => ""
 );
 
 # List of XML sections to be ignored.
@@ -97,7 +98,8 @@
 # Massage line by applying PATTERNS.
     foreach my $key (keys %patterns) {
         if ($line =~ $key) {
-                $line =~ s/$1/$patterns{$key}/g;
+           my $matched = quotemeta($1);
+           $line =~ s/$matched/$patterns{$key}/g;
         }
     }
 
diff --git a/helgrind/tests/hg02_deadlock.stderr.exp b/helgrind/tests/hg02_deadlock.stderr.exp
index 9ec5a8b..d9af78c 100644
--- a/helgrind/tests/hg02_deadlock.stderr.exp
+++ b/helgrind/tests/hg02_deadlock.stderr.exp
@@ -11,36 +11,42 @@
 Thread #x: lock order "0x........ before 0x........" violated
 
 Observed (incorrect) order is: acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: t2 (hg02_deadlock.c:19)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
 
  followed by a later acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: t2 (hg02_deadlock.c:20)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
 
 Required order was established by acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: t1 (hg02_deadlock.c:9)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
 
  followed by a later acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: t1 (hg02_deadlock.c:10)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
 
  Lock at 0x........ was first observed
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: main (hg02_deadlock.c:32)
  Address 0x........ is 0 bytes inside data symbol "m1"
 
  Lock at 0x........ was first observed
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: t1 (hg02_deadlock.c:10)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
diff --git a/helgrind/tests/locked_vs_unlocked1_fwd.stderr.exp b/helgrind/tests/locked_vs_unlocked1_fwd.stderr.exp
index 42ff5aa..abe7483 100644
--- a/helgrind/tests/locked_vs_unlocked1_fwd.stderr.exp
+++ b/helgrind/tests/locked_vs_unlocked1_fwd.stderr.exp
@@ -15,7 +15,8 @@
 ----------------------------------------------------------------
 
  Lock at 0x........ was first observed
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: child_fn (locked_vs_unlocked1.c:18)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
diff --git a/helgrind/tests/locked_vs_unlocked1_rev.stderr.exp b/helgrind/tests/locked_vs_unlocked1_rev.stderr.exp
index 4eec562..5aebd88 100644
--- a/helgrind/tests/locked_vs_unlocked1_rev.stderr.exp
+++ b/helgrind/tests/locked_vs_unlocked1_rev.stderr.exp
@@ -15,7 +15,8 @@
 ----------------------------------------------------------------
 
  Lock at 0x........ was first observed
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: child_fn (locked_vs_unlocked1.c:18)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
diff --git a/helgrind/tests/pth_cond_destroy_busy.stderr.exp-solaris b/helgrind/tests/pth_cond_destroy_busy.stderr.exp-solaris
new file mode 100644
index 0000000..1135d4e
--- /dev/null
+++ b/helgrind/tests/pth_cond_destroy_busy.stderr.exp-solaris
@@ -0,0 +1,16 @@
+
+---Thread-Announcement------------------------------------------
+
+Thread #x is the program's root thread
+
+----------------------------------------------------------------
+
+Thread #x: pthread_cond_destroy: destruction of condition variable being waited upon
+   at 0x........: pthread_cond_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_destroy@* (hg_intercepts.c:...)
+   by 0x........: main (pth_cond_destroy_busy.c:52)
+
+First pthread_cond_destroy() call returned success.
+Second pthread_cond_destroy() call returned success.
+
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
diff --git a/helgrind/tests/pth_cond_destroy_busy.vgtest b/helgrind/tests/pth_cond_destroy_busy.vgtest
index c2e380e..45d7853 100644
--- a/helgrind/tests/pth_cond_destroy_busy.vgtest
+++ b/helgrind/tests/pth_cond_destroy_busy.vgtest
@@ -1 +1,2 @@
+prereq: ! ../../tests/os_test darwin
 prog: ../../drd/tests/pth_cond_destroy_busy
diff --git a/helgrind/tests/safe-pthread.h b/helgrind/tests/safe-pthread.h
new file mode 100644
index 0000000..0a2c813
--- /dev/null
+++ b/helgrind/tests/safe-pthread.h
@@ -0,0 +1,69 @@
+#include <pthread.h>
+#include <signal.h>
+#include <setjmp.h>
+#include <errno.h>
+#include <assert.h>
+
+static sigjmp_buf env;
+
+/*
+ * Starting with glibc 2.20 some pthread calls may execute
+ * an xend instruction unconditionally when a lock is used in
+ * a way that is invalid so defined a sigill handler that can
+ * convert these invalid instructions to a normal error.
+ */
+static void sigill_handler( int signum, siginfo_t *siginfo, void *sigcontext ) {
+   unsigned char *pc = siginfo->si_addr;
+   assert( pc[0] == 0x0f && pc[1] == 0x01 && pc[2] == 0xd5 );
+   siglongjmp( env, EPERM );
+}
+
+/*
+ * Same as above, but in case we do recognize the xend,
+ * but detect it is invalid (used outside a transaction)
+ * and generate a segv.  Unfortunately then si_addr is,
+ * just zero, so we cannot add an assert/sanity check.
+ */
+static void segv_handler( int signum, siginfo_t *siginfo, void *sigcontext ) {
+   siglongjmp( env, EPERM );
+}
+
+/*
+ * Wrapper for pthread_rwlock_unlock which may execute xend
+ * unconditionally when used on a lock that is not locked.
+ *
+ * Note that we return 0 instead of EPERM because that is what
+ * glibc normally does - error reporting is optional.
+ */
+static int safe_pthread_rwlock_unlock( pthread_rwlock_t *rwlock ) {
+   struct sigaction sa_ill, sa_segv;
+   struct sigaction oldsa_ill, oldsa_segv;
+   int r;
+
+   sa_ill.sa_handler = NULL;
+   sa_ill.sa_sigaction = sigill_handler;
+   sigemptyset( &sa_ill.sa_mask );
+   sa_ill.sa_flags = SA_SIGINFO;
+   
+   sigaction( SIGILL, &sa_ill, &oldsa_ill );
+
+   sa_segv.sa_handler = NULL;
+   sa_segv.sa_sigaction = segv_handler;
+   sigemptyset( &sa_segv.sa_mask );
+   sa_segv.sa_flags = SA_SIGINFO;
+
+   sigaction( SIGSEGV, &sa_segv, &oldsa_segv );
+
+   if ( ( r = sigsetjmp( env, 1 ) ) == 0 ) {
+     r = pthread_rwlock_unlock( rwlock );
+   } else {
+     r = 0;
+   }
+
+   sigaction( SIGILL, &oldsa_ill, NULL );
+   sigaction( SIGSEGV, &oldsa_segv, NULL );
+
+   return r;
+}
+
+#define pthread_rwlock_unlock safe_pthread_rwlock_unlock
diff --git a/helgrind/tests/safe-semaphore.h b/helgrind/tests/safe-semaphore.h
new file mode 100644
index 0000000..3aa0dc4
--- /dev/null
+++ b/helgrind/tests/safe-semaphore.h
@@ -0,0 +1,41 @@
+#include <semaphore.h>
+#include <signal.h>
+#include <setjmp.h>
+#include <errno.h>
+#include <assert.h>
+
+static sigjmp_buf env;
+
+/*
+ * Newer glibc crashes on really bogus semaphors.
+ * Catch a SIGABRT and turn it into a EINVAL.
+ */
+static void abrt_handler( int signum, siginfo_t *siginfo, void *sigcontext ) {
+   siglongjmp( env, EINVAL );
+}
+
+static int safe_sem_post( sem_t *sem ) {
+   struct sigaction sa;
+   struct sigaction oldsa;
+   int r, e;
+
+   sa.sa_handler = NULL;
+   sa.sa_sigaction = abrt_handler;
+   sigemptyset( &sa.sa_mask );
+   sa.sa_flags = SA_SIGINFO;
+
+   sigaction( SIGABRT, &sa, &oldsa );
+
+   if ( ( e = sigsetjmp( env, 1 ) ) == 0 ) {
+     r = sem_post( sem );
+   } else {
+     r = -1;
+   }
+   errno = e;
+
+   sigaction( SIGABRT, &oldsa, NULL );
+
+   return r;
+}
+
+#define sem_post safe_sem_post
diff --git a/helgrind/tests/tc06_two_races_xml.stderr.exp b/helgrind/tests/tc06_two_races_xml.stderr.exp
index 0fd5cd4..e59809b 100644
--- a/helgrind/tests/tc06_two_races_xml.stderr.exp
+++ b/helgrind/tests/tc06_two_races_xml.stderr.exp
@@ -57,7 +57,7 @@
     <frame>
       <ip>0x........</ip>
       <obj>...</obj>
-      <fn>pthread_create@*</fn>
+      <fn>pthread_create</fn>
       <dir>...</dir>
       <file>hg_intercepts.c</file>
       <line>...</line>
diff --git a/helgrind/tests/tc07_hbl1.c b/helgrind/tests/tc07_hbl1.c
index c66b8ec..e46a405 100644
--- a/helgrind/tests/tc07_hbl1.c
+++ b/helgrind/tests/tc07_hbl1.c
@@ -17,6 +17,8 @@
 #undef PLAT_s390x_linux
 #undef PLAT_mips32_linux
 #undef PLAT_tilegx_linux
+#undef PLAT_x86_solaris
+#undef PLAT_amd64_solaris
 
 #if defined(__APPLE__) && defined(__i386__)
 #  define PLAT_x86_darwin 1
@@ -40,10 +42,15 @@
 #  define PLAT_mips32_linux 1
 #elif defined(__linux__) && defined(__tilegx__)
 #  define PLAT_tilegx_linux 1
+#elif defined(__sun__) && defined(__i386__)
+#  define PLAT_x86_solaris 1
+#elif defined(__sun__) && defined(__x86_64__)
+#  define PLAT_amd64_solaris 1
 #endif
 
 #if defined(PLAT_amd64_linux) || defined(PLAT_x86_linux) \
-    || defined(PLAT_amd64_darwin) || defined(PLAT_x86_darwin)
+    || defined(PLAT_amd64_darwin) || defined(PLAT_x86_darwin) \
+    || defined(PLAT_amd64_solaris) || defined(PLAT_x86_solaris)
 #  define INC(_lval,_lqual) \
       __asm__ __volatile__ ( \
       "lock ; incl (%0)" : /*out*/ : /*in*/"r"(&(_lval)) : "memory", "cc" )
diff --git a/helgrind/tests/tc08_hbl2.c b/helgrind/tests/tc08_hbl2.c
index dde93e8..c3ea44c 100644
--- a/helgrind/tests/tc08_hbl2.c
+++ b/helgrind/tests/tc08_hbl2.c
@@ -34,6 +34,8 @@
 #undef PLAT_mips32_linux
 #undef PLAT_mips64_linux
 #undef PLAT_tilegx_linux
+#undef PLAT_x86_solaris
+#undef PLAT_amd64_solaris
 
 #if defined(__APPLE__) && defined(__i386__)
 #  define PLAT_x86_darwin 1
@@ -61,11 +63,16 @@
 #endif
 #elif defined(__linux__) && defined(__tilegx__)
 #  define PLAT_tilegx_linux 1
+#elif defined(__sun__) && defined(__i386__)
+#  define PLAT_x86_solaris 1
+#elif defined(__sun__) && defined(__x86_64__)
+#  define PLAT_amd64_solaris 1
 #endif
 
 
 #if defined(PLAT_amd64_linux) || defined(PLAT_x86_linux) \
-    || defined(PLAT_amd64_darwin) || defined(PLAT_x86_darwin)
+    || defined(PLAT_amd64_darwin) || defined(PLAT_x86_darwin) \
+    || defined(PLAT_amd64_solaris) || defined(PLAT_x86_solaris)
 #  define INC(_lval,_lqual)	     \
       __asm__ __volatile__ ( \
       "lock ; incl (%0)" : /*out*/ : /*in*/"r"(&(_lval)) : "memory", "cc" )
diff --git a/helgrind/tests/tc09_bad_unlock.stderr.exp b/helgrind/tests/tc09_bad_unlock.stderr.exp
index bb49324..a18450b 100644
--- a/helgrind/tests/tc09_bad_unlock.stderr.exp
+++ b/helgrind/tests/tc09_bad_unlock.stderr.exp
@@ -6,7 +6,8 @@
 ----------------------------------------------------------------
 
 Thread #x unlocked a not-locked lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc09_bad_unlock.c:27)
    by 0x........: main (tc09_bad_unlock.c:49)
  Lock at 0x........ was first observed
@@ -28,7 +29,8 @@
 ----------------------------------------------------------------
 
 Thread #x unlocked lock at 0x........ currently held by thread #x
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: child_fn (tc09_bad_unlock.c:11)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
@@ -43,7 +45,8 @@
 ----------------------------------------------------------------
 
 Thread #x unlocked an invalid lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc09_bad_unlock.c:41)
    by 0x........: main (tc09_bad_unlock.c:49)
 
@@ -51,7 +54,8 @@
 
 Thread #x's call to pthread_mutex_unlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc09_bad_unlock.c:41)
    by 0x........: main (tc09_bad_unlock.c:49)
 
@@ -59,7 +63,8 @@
 ----------------------------------------------------------------
 
 Thread #x unlocked a not-locked lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc09_bad_unlock.c:27)
    by 0x........: main (tc09_bad_unlock.c:50)
  Lock at 0x........ was first observed
@@ -73,18 +78,21 @@
 ----------------------------------------------------------------
 
 Thread #x: Attempt to re-lock a non-recursive lock I already hold
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc09_bad_unlock.c:32)
    by 0x........: main (tc09_bad_unlock.c:50)
  Lock was previously acquired
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc09_bad_unlock.c:32)
    by 0x........: main (tc09_bad_unlock.c:49)
 
 ----------------------------------------------------------------
 
 Thread #x: Bug in libpthread: recursive write lock granted on mutex/wrlock which does not support recursion
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc09_bad_unlock.c:32)
    by 0x........: main (tc09_bad_unlock.c:50)
 
@@ -99,7 +107,8 @@
 ----------------------------------------------------------------
 
 Thread #x unlocked lock at 0x........ currently held by thread #x
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: child_fn (tc09_bad_unlock.c:11)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
@@ -114,7 +123,8 @@
 ----------------------------------------------------------------
 
 Thread #x unlocked an invalid lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc09_bad_unlock.c:41)
    by 0x........: main (tc09_bad_unlock.c:50)
 
@@ -122,7 +132,8 @@
 
 Thread #x's call to pthread_mutex_unlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc09_bad_unlock.c:41)
    by 0x........: main (tc09_bad_unlock.c:50)
 
diff --git a/helgrind/tests/tc09_bad_unlock.stderr.exp-solaris b/helgrind/tests/tc09_bad_unlock.stderr.exp-solaris
new file mode 100644
index 0000000..8baa420
--- /dev/null
+++ b/helgrind/tests/tc09_bad_unlock.stderr.exp-solaris
@@ -0,0 +1,146 @@
+
+---Thread-Announcement------------------------------------------
+
+Thread #x is the program's root thread
+
+----------------------------------------------------------------
+
+Thread #x unlocked a not-locked lock at 0x........
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:27)
+   by 0x........: main (tc09_bad_unlock.c:49)
+ Lock at 0x........ was first observed
+   at 0x........: pthread_mutex_init (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:23)
+   by 0x........: main (tc09_bad_unlock.c:49)
+ Address 0x........ is on thread #x's stack
+ in frame #x, created by nearly_main (tc09_bad_unlock.c:16)
+
+
+---Thread-Announcement------------------------------------------
+
+Thread #x was created
+   ...
+   by 0x........: pthread_create@* (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:35)
+   by 0x........: main (tc09_bad_unlock.c:49)
+
+----------------------------------------------------------------
+
+Thread #x unlocked lock at 0x........ currently held by thread #x
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: child_fn (tc09_bad_unlock.c:11)
+   by 0x........: mythread_wrapper (hg_intercepts.c:...)
+   ...
+ Lock at 0x........ was first observed
+   at 0x........: pthread_mutex_init (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:31)
+   by 0x........: main (tc09_bad_unlock.c:49)
+ Address 0x........ is on thread #x's stack
+ in frame #x, created by nearly_main (tc09_bad_unlock.c:16)
+
+
+----------------------------------------------------------------
+
+Thread #x unlocked an invalid lock at 0x........
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:41)
+   by 0x........: main (tc09_bad_unlock.c:49)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_unlock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:41)
+   by 0x........: main (tc09_bad_unlock.c:49)
+
+---------------------
+----------------------------------------------------------------
+
+Thread #x unlocked a not-locked lock at 0x........
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:27)
+   by 0x........: main (tc09_bad_unlock.c:50)
+ Lock at 0x........ was first observed
+   at 0x........: pthread_mutex_init (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:23)
+   by 0x........: main (tc09_bad_unlock.c:49)
+ Address 0x........ is on thread #x's stack
+ in frame #x, created by nearly_main (tc09_bad_unlock.c:16)
+
+
+----------------------------------------------------------------
+
+Thread #x: Attempt to re-lock a non-recursive lock I already hold
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:32)
+   by 0x........: main (tc09_bad_unlock.c:50)
+ Lock was previously acquired
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:32)
+   by 0x........: main (tc09_bad_unlock.c:49)
+
+----------------------------------------------------------------
+
+Thread #x: Bug in libpthread: recursive write lock granted on mutex/wrlock which does not support recursion
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:32)
+   by 0x........: main (tc09_bad_unlock.c:50)
+
+---Thread-Announcement------------------------------------------
+
+Thread #x was created
+   ...
+   by 0x........: pthread_create@* (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:35)
+   by 0x........: main (tc09_bad_unlock.c:50)
+
+----------------------------------------------------------------
+
+Thread #x unlocked lock at 0x........ currently held by thread #x
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: child_fn (tc09_bad_unlock.c:11)
+   by 0x........: mythread_wrapper (hg_intercepts.c:...)
+   ...
+ Lock at 0x........ was first observed
+   at 0x........: pthread_mutex_init (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:31)
+   by 0x........: main (tc09_bad_unlock.c:49)
+ Address 0x........ is on thread #x's stack
+ in frame #x, created by nearly_main (tc09_bad_unlock.c:16)
+
+
+----------------------------------------------------------------
+
+Thread #x unlocked an invalid lock at 0x........
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:41)
+   by 0x........: main (tc09_bad_unlock.c:50)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_unlock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: nearly_main (tc09_bad_unlock.c:41)
+   by 0x........: main (tc09_bad_unlock.c:50)
+
+----------------------------------------------------------------
+
+Thread #x: Exiting thread still holds 1 lock
+   ...
+
+
+ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
diff --git a/helgrind/tests/tc09_bad_unlock.vgtest b/helgrind/tests/tc09_bad_unlock.vgtest
index d09a702..c2ec336 100644
--- a/helgrind/tests/tc09_bad_unlock.vgtest
+++ b/helgrind/tests/tc09_bad_unlock.vgtest
@@ -1 +1,2 @@
 prog: tc09_bad_unlock
+vgopts: --fair-sched=try
diff --git a/helgrind/tests/tc10_rec_lock.stderr.exp b/helgrind/tests/tc10_rec_lock.stderr.exp
index 0f52b3f..08e9789 100644
--- a/helgrind/tests/tc10_rec_lock.stderr.exp
+++ b/helgrind/tests/tc10_rec_lock.stderr.exp
@@ -13,7 +13,8 @@
 ----------------------------------------------------------------
 
 Thread #x unlocked a not-locked lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc10_rec_lock.c:42)
    by 0x........: main (tc10_rec_lock.c:47)
  Lock at 0x........ was first observed
@@ -28,7 +29,8 @@
 
 Thread #x's call to pthread_mutex_unlock failed
    with error code 1 (EPERM: Operation not permitted)
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
    by 0x........: nearly_main (tc10_rec_lock.c:42)
    by 0x........: main (tc10_rec_lock.c:47)
 
diff --git a/helgrind/tests/tc11_XCHG.c b/helgrind/tests/tc11_XCHG.c
index 481f916..30fccee 100644
--- a/helgrind/tests/tc11_XCHG.c
+++ b/helgrind/tests/tc11_XCHG.c
@@ -19,6 +19,8 @@
 #undef PLAT_s390x_linux
 #undef PLAT_mips32_linux
 #undef PLAT_tilegx_linux
+#undef PLAT_x86_solaris
+#undef PLAT_amd64_solaris
 
 #if defined(__APPLE__) && defined(__i386__)
 #  define PLAT_x86_darwin 1
@@ -42,11 +44,16 @@
 #  define PLAT_mips32_linux 1
 #elif defined(__linux__) && defined(__tilegx__)
 #  define PLAT_tilegx_linux 1
+#elif defined(__sun__) && defined(__i386__)
+#  define PLAT_x86_solaris 1
+#elif defined(__sun__) && defined(__x86_64__)
+#  define PLAT_amd64_solaris 1
 #endif
 
 
 #if defined(PLAT_amd64_linux) || defined(PLAT_x86_linux) \
-    || defined(PLAT_amd64_darwin) || defined(PLAT_x86_darwin)
+    || defined(PLAT_amd64_darwin) || defined(PLAT_x86_darwin) \
+    || defined(PLAT_amd64_solaris) || defined(PLAT_x86_solaris)
 #  define XCHG_M_R(_addr,_lval) \
      __asm__ __volatile__( \
         "xchgl %0, %1" \
diff --git a/helgrind/tests/tc12_rwl_trivial.c b/helgrind/tests/tc12_rwl_trivial.c
index 3fd64c5..a84428e 100644
--- a/helgrind/tests/tc12_rwl_trivial.c
+++ b/helgrind/tests/tc12_rwl_trivial.c
@@ -5,15 +5,9 @@
 #define _GNU_SOURCE 1
 
 #include <stdio.h>
-#include <pthread.h>
+#include "safe-pthread.h"
 #include <assert.h>
 
-#if defined(VGO_darwin)
-#define OS_IS_DARWIN 1
-#else
-#define OS_IS_DARWIN 0
-#endif
-
 /* Do trivial stuff with a reader-writer lock. */
 
 int main ( void )
@@ -32,7 +26,12 @@
   r = pthread_rwlock_unlock( &rwl );      assert(r == 0);
 
   /* this should fail - lock is unowned now */
-  r = pthread_rwlock_unlock( &rwl );      assert(OS_IS_DARWIN || r == 0);
+  r = pthread_rwlock_unlock( &rwl );
+#if defined(VGO_darwin) || defined(VGO_solaris)
+  assert(r != 0);
+#else
+  assert(r == 0);
+#endif
 
   r = pthread_rwlock_destroy( &rwl );     assert(r == 0);
 
diff --git a/helgrind/tests/tc12_rwl_trivial.stderr.exp b/helgrind/tests/tc12_rwl_trivial.stderr.exp
index 361a4d6..76607e0 100644
--- a/helgrind/tests/tc12_rwl_trivial.stderr.exp
+++ b/helgrind/tests/tc12_rwl_trivial.stderr.exp
@@ -8,13 +8,14 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc12_rwl_trivial.c:35)
+   ...
+   by 0x........: main (tc12_rwl_trivial.c:29)
  Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc12_rwl_trivial.c:24)
+   by 0x........: main (tc12_rwl_trivial.c:18)
  Address 0x........ is on thread #x's stack
- in frame #x, created by main (tc12_rwl_trivial.c:20)
+ in frame #x, created by main (tc12_rwl_trivial.c:14)
 
 
 
diff --git a/helgrind/tests/tc12_rwl_trivial.stderr.exp-solaris b/helgrind/tests/tc12_rwl_trivial.stderr.exp-solaris
new file mode 100644
index 0000000..7de2549
--- /dev/null
+++ b/helgrind/tests/tc12_rwl_trivial.stderr.exp-solaris
@@ -0,0 +1,31 @@
+
+---Thread-Announcement------------------------------------------
+
+Thread #x is the program's root thread
+
+----------------------------------------------------------------
+
+Thread #x unlocked a not-locked lock at 0x........
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc12_rwl_trivial.c:29)
+ Lock at 0x........ was first observed
+   at 0x........: pthread_rwlock_init (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc12_rwl_trivial.c:18)
+ Address 0x........ is on thread #x's stack
+ in frame #x, created by main (tc12_rwl_trivial.c:14)
+
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_rwlock_unlock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc12_rwl_trivial.c:29)
+
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
diff --git a/helgrind/tests/tc12_rwl_trivial.vgtest b/helgrind/tests/tc12_rwl_trivial.vgtest
index fdcd644..d0009d8 100644
--- a/helgrind/tests/tc12_rwl_trivial.vgtest
+++ b/helgrind/tests/tc12_rwl_trivial.vgtest
@@ -1 +1,2 @@
+vgopts: --sigill-diagnostics=no
 prog: tc12_rwl_trivial
diff --git a/helgrind/tests/tc13_laog1.stderr.exp b/helgrind/tests/tc13_laog1.stderr.exp
index 3e56f25..d865270 100644
--- a/helgrind/tests/tc13_laog1.stderr.exp
+++ b/helgrind/tests/tc13_laog1.stderr.exp
@@ -8,19 +8,23 @@
 Thread #x: lock order "0x........ before 0x........" violated
 
 Observed (incorrect) order is: acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: main (tc13_laog1.c:23)
 
  followed by a later acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: main (tc13_laog1.c:24)
 
 Required order was established by acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: main (tc13_laog1.c:17)
 
  followed by a later acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: main (tc13_laog1.c:18)
 
  Lock at 0x........ was first observed
diff --git a/helgrind/tests/tc14_laog_dinphils.stderr.exp b/helgrind/tests/tc14_laog_dinphils.stderr.exp
index 3bf02bf..da07ff9 100644
--- a/helgrind/tests/tc14_laog_dinphils.stderr.exp
+++ b/helgrind/tests/tc14_laog_dinphils.stderr.exp
@@ -11,13 +11,15 @@
 Thread #x: lock order "0x........ before 0x........" violated
 
 Observed (incorrect) order is: acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: dine (tc14_laog_dinphils.c:21)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
 
  followed by a later acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: dine (tc14_laog_dinphils.c:22)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
diff --git a/helgrind/tests/tc15_laog_lockdel.stderr.exp b/helgrind/tests/tc15_laog_lockdel.stderr.exp
index 945010e..2644e37 100644
--- a/helgrind/tests/tc15_laog_lockdel.stderr.exp
+++ b/helgrind/tests/tc15_laog_lockdel.stderr.exp
@@ -10,19 +10,23 @@
 Thread #x: lock order "0x........ before 0x........" violated
 
 Observed (incorrect) order is: acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: main (tc15_laog_lockdel.c:35)
 
  followed by a later acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: main (tc15_laog_lockdel.c:36)
 
 Required order was established by acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: main (tc15_laog_lockdel.c:27)
 
  followed by a later acquisition of lock at 0x........
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
    by 0x........: main (tc15_laog_lockdel.c:28)
 
  Lock at 0x........ was first observed
diff --git a/helgrind/tests/tc17_sembar.c b/helgrind/tests/tc17_sembar.c
index 7b22816..88a1fe5 100644
--- a/helgrind/tests/tc17_sembar.c
+++ b/helgrind/tests/tc17_sembar.c
@@ -104,7 +104,7 @@
           my_sem_wait (bar->sem2); // 2 down
         }
       pthread_mutex_unlock (&bar->mutex1);
-      /* «Resultats professionnels!»  First we made this thread have an
+      /* "Resultats professionnels!"  First we made this thread have an
          obvious (Thrcheck-visible) dependency on all other threads
          calling gomp_barrier_wait.  Then, we released them all again,
          so they all have a (visible) dependency on this thread.
@@ -222,7 +222,7 @@
 {
    sem_t* s;
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
    s = malloc(sizeof(*s));
    if (s) {
       if (sem_init(s, pshared, count) < 0) {
diff --git a/helgrind/tests/tc18_semabuse.c b/helgrind/tests/tc18_semabuse.c
index 7395251..62242f1 100644
--- a/helgrind/tests/tc18_semabuse.c
+++ b/helgrind/tests/tc18_semabuse.c
@@ -11,7 +11,7 @@
 #include <stdlib.h>
 #include <assert.h>
 #include <pthread.h>
-#include <semaphore.h>
+#include "safe-semaphore.h"
 #include <string.h>
 void start_watchdog ( void );
 int main ( void )
@@ -32,6 +32,9 @@
      it succeeds. */
   memset(&s1, 0x55, sizeof(s1));
   r= sem_wait(&s1); /* assert(r != 0); */
+#if defined(VGO_solaris)
+  assert(r != 0);
+#endif
 
   /* this only fails with glibc 2.7 and later. */
   r= sem_post(&s1);
diff --git a/helgrind/tests/tc18_semabuse.stderr.exp b/helgrind/tests/tc18_semabuse.stderr.exp
index 95b22e7..506fa72 100644
--- a/helgrind/tests/tc18_semabuse.stderr.exp
+++ b/helgrind/tests/tc18_semabuse.stderr.exp
@@ -24,7 +24,8 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: sem_post_WRK (hg_intercepts.c:...)
    by 0x........: sem_post (hg_intercepts.c:...)
-   by 0x........: main (tc18_semabuse.c:37)
+   ...
+   by 0x........: main (tc18_semabuse.c:40)
 
 
 ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
diff --git a/helgrind/tests/tc18_semabuse.stderr.exp-linux-mips32-b b/helgrind/tests/tc18_semabuse.stderr.exp-linux-mips32-b
index ce83a9b..4e46e5e 100644
--- a/helgrind/tests/tc18_semabuse.stderr.exp-linux-mips32-b
+++ b/helgrind/tests/tc18_semabuse.stderr.exp-linux-mips32-b
@@ -24,7 +24,7 @@
    with error code 89 (ENOSYS: Function not implemented)
    at 0x........: sem_post_WRK (hg_intercepts.c:...)
    by 0x........: sem_post (hg_intercepts.c:...)
-   by 0x........: main (tc18_semabuse.c:37)
+   by 0x........: main (tc18_semabuse.c:40)
 
 
 ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
diff --git a/helgrind/tests/tc18_semabuse.stderr.exp-solaris b/helgrind/tests/tc18_semabuse.stderr.exp-solaris
new file mode 100644
index 0000000..2f74eb8
--- /dev/null
+++ b/helgrind/tests/tc18_semabuse.stderr.exp-solaris
@@ -0,0 +1,15 @@
+
+---Thread-Announcement------------------------------------------
+
+Thread #x is the program's root thread
+
+----------------------------------------------------------------
+
+Thread #x's call to sema_init failed
+   with error code 22 (EINVAL: Invalid argument)
+   at 0x........: sema_init (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc18_semabuse.c:23)
+
+
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
diff --git a/helgrind/tests/tc19_shadowmem.stderr.exp b/helgrind/tests/tc19_shadowmem.stderr.exp
index c113ed6..e5fab6a 100644
--- a/helgrind/tests/tc19_shadowmem.stderr.exp
+++ b/helgrind/tests/tc19_shadowmem.stderr.exp
@@ -3513,9 +3513,6 @@
    by 0x........: main (tc19_shadowmem.c:144)
  Block was alloc'd by thread #x
 
-
-More than 100 errors detected.  Subsequent errors
-will still be recorded, but in less detail than before.
 ---------- short gran, 1 .. 98, skip 1 ----------
 ---Thread-Announcement------------------------------------------
 
diff --git a/helgrind/tests/tc19_shadowmem.stderr.exp-mips32 b/helgrind/tests/tc19_shadowmem.stderr.exp-mips32
index 5d1d896..e652d68 100644
--- a/helgrind/tests/tc19_shadowmem.stderr.exp-mips32
+++ b/helgrind/tests/tc19_shadowmem.stderr.exp-mips32
@@ -3709,9 +3709,6 @@
    at 0x........: malloc (vg_replace_malloc.c:...)
    by 0x........: main (tc19_shadowmem.c:144)
 
-
-More than 100 errors detected.  Subsequent errors
-will still be recorded, but in less detail than before.
 ---------- short gran, 1 .. 98, skip 1 ----------
 ---Thread-Announcement------------------------------------------
 
diff --git a/helgrind/tests/tc20_verifywrap.c b/helgrind/tests/tc20_verifywrap.c
index 8718d0b..f71c7f8 100644
--- a/helgrind/tests/tc20_verifywrap.c
+++ b/helgrind/tests/tc20_verifywrap.c
@@ -15,14 +15,19 @@
 #include <string.h>
 #include <assert.h>
 #include <unistd.h>
-#include <pthread.h>
-#include <semaphore.h>
+#include "safe-pthread.h"
+#include "safe-semaphore.h"
 
 #if !defined(__APPLE__)
 
+#if defined(__sun__)
+/* Fake __GLIBC_PREREQ on Solaris. Pretend glibc >= 2.4. */
+# define __GLIBC_PREREQ
+#else
 #if !defined(__GLIBC_PREREQ)
 # error "This program needs __GLIBC_PREREQ (in /usr/include/features.h)"
 #endif
+#endif /* __sun__ */
 
 short unprotected = 0;
 
@@ -88,7 +93,12 @@
    "\n---------------- pthread_mutex_lock et al ----------------\n\n");
 
    /* make pthread_mutex_init fail */
+#if defined(__sun__)
+   pthread_mutexattr_init( &mxa );
+   memset( mxa.__pthread_mutexattrp, 0xFF, 5 * sizeof(int) );
+#else
    memset( &mxa, 0xFF, sizeof(mxa) );
+#endif
    r= pthread_mutex_init( &mx, &mxa );
 #  if __GLIBC_PREREQ(2,4)
    assert(r); /* glibc >= 2.4: the call should fail */
@@ -193,7 +203,12 @@
    r= pthread_rwlock_unlock( &rwl2 ); assert(!r);
    /* unlock it again, get an error */
    fprintf(stderr, "(3)    ERROR on next line\n");
-   r= pthread_rwlock_unlock( &rwl2 ); assert(!r);
+   r= pthread_rwlock_unlock( &rwl2 );
+#if defined(__sun__)
+   assert(r);
+#else
+   assert(!r);
+#endif
 
    /* same game with r-locks */
    r= pthread_rwlock_init( &rwl2, NULL ); assert(!r);
@@ -209,7 +224,12 @@
    r= pthread_rwlock_unlock( &rwl2 ); assert(!r);
    /* unlock it again, get an error */
    fprintf(stderr, "(8)    ERROR on next line\n");
-   r= pthread_rwlock_unlock( &rwl2 ); assert(!r);
+   r= pthread_rwlock_unlock( &rwl2 );
+#if defined(__sun__)
+   assert(r);
+#else
+   assert(!r);
+#endif
 
    /* Lock rwl3 so the locked-lock-at-dealloc check can complain about
       it. */
diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp b/helgrind/tests/tc20_verifywrap.stderr.exp
index 4d9f4c4..d9019d4 100644
--- a/helgrind/tests/tc20_verifywrap.stderr.exp
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp
@@ -14,21 +14,21 @@
 Thread #x was created
    ...
    by 0x........: pthread_create@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:76)
+   by 0x........: main (tc20_verifywrap.c:81)
 
 ----------------------------------------------------------------
 
 Possible data race during write of size 2 at 0x........ by thread #x
 Locks held: none
-   at 0x........: main (tc20_verifywrap.c:78)
+   at 0x........: main (tc20_verifywrap.c:83)
 
 This conflicts with a previous write of size 2 by thread #x
 Locks held: none
-   at 0x........: racy_child (tc20_verifywrap.c:34)
+   at 0x........: racy_child (tc20_verifywrap.c:39)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
  Location 0x........ is 0 bytes inside global var "unprotected"
- declared at tc20_verifywrap.c:27
+ declared at tc20_verifywrap.c:32
 
 ----------------------------------------------------------------
 
@@ -36,7 +36,7 @@
    with error code 35 (EDEADLK: Resource deadlock would occur)
    at 0x........: pthread_join_WRK (hg_intercepts.c:...)
    by 0x........: pthread_join (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:83)
+   by 0x........: main (tc20_verifywrap.c:88)
 
 
 ---------------- pthread_mutex_lock et al ----------------
@@ -46,54 +46,61 @@
 Thread #x's call to pthread_mutex_init failed
    with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint)
    at 0x........: pthread_mutex_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:92)
+   by 0x........: main (tc20_verifywrap.c:102)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_mutex_destroy of a locked mutex
-   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:102)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_destroy failed
    with error code 16 (EBUSY: Device or resource busy)
-   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:102)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_lock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:108)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:118)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_trylock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:116)
+   at 0x........: mutex_trylock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:126)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_timedlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:121)
+   at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:131)
 
 ----------------------------------------------------------------
 
 Thread #x unlocked an invalid lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_unlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 
 ---------------- pthread_cond_wait et al ----------------
@@ -103,7 +110,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
@@ -111,14 +118,14 @@
    with error code 1 (EPERM: Operation not permitted)
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_signal@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:152)
+   by 0x........: main (tc20_verifywrap.c:162)
 
 
 FIXME: can't figure out how to verify wrap of pthread_cond_signal
@@ -128,7 +135,7 @@
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:158)
+   by 0x........: main (tc20_verifywrap.c:168)
 
 
 FIXME: can't figure out how to verify wrap of pthread_broadcast_signal
@@ -138,7 +145,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 ----------------------------------------------------------------
 
@@ -146,7 +153,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 
 ---------------- pthread_rwlock_* ----------------
@@ -156,13 +163,14 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:179)
+   ...
+   by 0x........: main (tc20_verifywrap.c:189)
  Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:178)
+   by 0x........: main (tc20_verifywrap.c:188)
  Location 0x........ is 0 bytes inside local var "rwl"
- declared at tc20_verifywrap.c:47, in frame #x of thread x
+ declared at tc20_verifywrap.c:52, in frame #x of thread x
 
 
 (1) no error on next line
@@ -173,13 +181,14 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:196)
+   ...
+   by 0x........: main (tc20_verifywrap.c:206)
  Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
  Location 0x........ is 0 bytes inside local var "rwl2"
- declared at tc20_verifywrap.c:48, in frame #x of thread x
+ declared at tc20_verifywrap.c:53, in frame #x of thread x
 
 
 (4) no error on next line
@@ -192,13 +201,14 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:212)
+   ...
+   by 0x........: main (tc20_verifywrap.c:227)
  Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
  Location 0x........ is 0 bytes inside local var "rwl2"
- declared at tc20_verifywrap.c:48, in frame #x of thread x
+ declared at tc20_verifywrap.c:53, in frame #x of thread x
 
 
 
@@ -210,7 +220,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: sem_init_WRK (hg_intercepts.c:...)
    by 0x........: sem_init@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:228)
+   by 0x........: main (tc20_verifywrap.c:248)
 
 
 FIXME: can't figure out how to verify wrap of sem_destroy
@@ -220,7 +230,7 @@
 Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
    at 0x........: sem_wait_WRK (hg_intercepts.c:...)
    by 0x........: sem_wait (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:242)
+   by 0x........: main (tc20_verifywrap.c:262)
 
 ----------------------------------------------------------------
 
@@ -228,7 +238,8 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: sem_post_WRK (hg_intercepts.c:...)
    by 0x........: sem_post (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:245)
+   ...
+   by 0x........: main (tc20_verifywrap.c:265)
 
 
 FIXME: can't figure out how to verify wrap of sem_post
diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18 b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18
index 7df3fa1..f109673 100644
--- a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18
@@ -14,21 +14,21 @@
 Thread #x was created
    ...
    by 0x........: pthread_create@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:76)
+   by 0x........: main (tc20_verifywrap.c:81)
 
 ----------------------------------------------------------------
 
 Possible data race during write of size 2 at 0x........ by thread #x
 Locks held: none
-   at 0x........: main (tc20_verifywrap.c:78)
+   at 0x........: main (tc20_verifywrap.c:83)
 
 This conflicts with a previous write of size 2 by thread #x
 Locks held: none
-   at 0x........: racy_child (tc20_verifywrap.c:34)
+   at 0x........: racy_child (tc20_verifywrap.c:39)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
  Location 0x........ is 0 bytes inside global var "unprotected"
- declared at tc20_verifywrap.c:27
+ declared at tc20_verifywrap.c:32
 
 ----------------------------------------------------------------
 
@@ -36,7 +36,7 @@
    with error code 35 (EDEADLK: Resource deadlock would occur)
    at 0x........: pthread_join_WRK (hg_intercepts.c:...)
    by 0x........: pthread_join (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:83)
+   by 0x........: main (tc20_verifywrap.c:88)
 
 
 ---------------- pthread_mutex_lock et al ----------------
@@ -46,47 +46,53 @@
 Thread #x's call to pthread_mutex_init failed
    with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint)
    at 0x........: pthread_mutex_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:92)
+   by 0x........: main (tc20_verifywrap.c:102)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_mutex_destroy of a locked mutex
-   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:102)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_lock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:108)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:118)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_trylock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:116)
+   at 0x........: mutex_trylock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:126)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_timedlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:121)
+   at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:131)
 
 ----------------------------------------------------------------
 
 Thread #x unlocked an invalid lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_unlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 
 ---------------- pthread_cond_wait et al ----------------
@@ -96,7 +102,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
@@ -104,14 +110,14 @@
    with error code 1 (EPERM: Operation not permitted)
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_signal@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:152)
+   by 0x........: main (tc20_verifywrap.c:162)
 
 
 FIXME: can't figure out how to verify wrap of pthread_cond_signal
@@ -121,7 +127,7 @@
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:158)
+   by 0x........: main (tc20_verifywrap.c:168)
 
 
 FIXME: can't figure out how to verify wrap of pthread_broadcast_signal
@@ -131,7 +137,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 ----------------------------------------------------------------
 
@@ -139,7 +145,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 
 ---------------- pthread_rwlock_* ----------------
@@ -149,11 +155,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:179)
+   ...
+   by 0x........: main (tc20_verifywrap.c:189)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:178)
+   by 0x........: main (tc20_verifywrap.c:188)
 
 (1) no error on next line
 (2) no error on next line
@@ -163,11 +170,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:196)
+   ...
+   by 0x........: main (tc20_verifywrap.c:206)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
 
 (4) no error on next line
 (5) no error on next line
@@ -179,11 +187,11 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:212)
+   by 0x........: main (tc20_verifywrap.c:227)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
 
 
 ---------------- sem_* ----------------
@@ -194,7 +202,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: sem_init_WRK (hg_intercepts.c:...)
    by 0x........: sem_init@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:228)
+   by 0x........: main (tc20_verifywrap.c:243)
 
 
 FIXME: can't figure out how to verify wrap of sem_destroy
@@ -204,7 +212,7 @@
 Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
    at 0x........: sem_wait_WRK (hg_intercepts.c:...)
    by 0x........: sem_wait (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:242)
+   by 0x........: main (tc20_verifywrap.c:257)
 
 ----------------------------------------------------------------
 
@@ -212,7 +220,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: sem_post_WRK (hg_intercepts.c:...)
    by 0x........: sem_post (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:245)
+   by 0x........: main (tc20_verifywrap.c:260)
 
 
 FIXME: can't figure out how to verify wrap of sem_post
diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21 b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21
new file mode 100644
index 0000000..7f4eb21
--- /dev/null
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21
@@ -0,0 +1,247 @@
+
+
+
+------ This is output for >= glibc 2.4 ------
+
+---------------- pthread_create/join ----------------
+
+---Thread-Announcement------------------------------------------
+
+Thread #x is the program's root thread
+
+---Thread-Announcement------------------------------------------
+
+Thread #x was created
+   ...
+   by 0x........: pthread_create@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:81)
+
+----------------------------------------------------------------
+
+Possible data race during write of size 2 at 0x........ by thread #x
+Locks held: none
+   at 0x........: main (tc20_verifywrap.c:83)
+
+This conflicts with a previous write of size 2 by thread #x
+Locks held: none
+   at 0x........: racy_child (tc20_verifywrap.c:39)
+   by 0x........: mythread_wrapper (hg_intercepts.c:...)
+   ...
+ Location 0x........ is 0 bytes inside global var "unprotected"
+ declared at tc20_verifywrap.c:32
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_join failed
+   with error code 35 (EDEADLK: Resource deadlock would occur)
+   at 0x........: pthread_join_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_join (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:88)
+
+
+---------------- pthread_mutex_lock et al ----------------
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_init failed
+   with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint)
+   at 0x........: pthread_mutex_init (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:102)
+
+----------------------------------------------------------------
+
+Thread #x: pthread_mutex_destroy of a locked mutex
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_destroy failed
+   with error code 16 (EBUSY: Device or resource busy)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_lock failed
+   with error code 22 (EINVAL: Invalid argument)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:118)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_trylock failed
+   with error code 22 (EINVAL: Invalid argument)
+   at 0x........: mutex_trylock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:126)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_timedlock failed
+   with error code 22 (EINVAL: Invalid argument)
+   at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:131)
+
+----------------------------------------------------------------
+
+Thread #x unlocked an invalid lock at 0x........
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_unlock failed
+   with error code 22 (EINVAL: Invalid argument)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
+
+
+---------------- pthread_cond_wait et al ----------------
+
+----------------------------------------------------------------
+
+Thread #x: pthread_cond_{timed}wait called with un-held mutex
+   at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:157)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_cond_wait failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:157)
+
+----------------------------------------------------------------
+
+Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
+   at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_signal@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:162)
+
+
+FIXME: can't figure out how to verify wrap of pthread_cond_signal
+
+----------------------------------------------------------------
+
+Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
+   at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:168)
+
+
+FIXME: can't figure out how to verify wrap of pthread_broadcast_signal
+
+----------------------------------------------------------------
+
+Thread #x: pthread_cond_{timed}wait called with un-held mutex
+   at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:175)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_cond_timedwait failed
+   with error code 22 (EINVAL: Invalid argument)
+   at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:175)
+
+
+---------------- pthread_rwlock_* ----------------
+
+----------------------------------------------------------------
+
+Thread #x unlocked a not-locked lock at 0x........
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:189)
+ Lock at 0x........ was first observed
+   at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:188)
+ Location 0x........ is 0 bytes inside local var "rwl"
+ declared at tc20_verifywrap.c:52, in frame #x of thread x
+
+
+(1) no error on next line
+(2) no error on next line
+(3)    ERROR on next line
+----------------------------------------------------------------
+
+Thread #x unlocked a not-locked lock at 0x........
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:206)
+ Lock at 0x........ was first observed
+   at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:196)
+ Location 0x........ is 0 bytes inside local var "rwl2"
+ declared at tc20_verifywrap.c:53, in frame #x of thread x
+
+
+(4) no error on next line
+(5) no error on next line
+(6) no error on next line
+(7) no error on next line
+(8)    ERROR on next line
+----------------------------------------------------------------
+
+Thread #x unlocked a not-locked lock at 0x........
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:227)
+ Lock at 0x........ was first observed
+   at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:196)
+ Location 0x........ is 0 bytes inside local var "rwl2"
+ declared at tc20_verifywrap.c:53, in frame #x of thread x
+
+
+
+---------------- sem_* ----------------
+
+----------------------------------------------------------------
+
+Thread #x's call to sem_init failed
+   with error code 22 (EINVAL: Invalid argument)
+   at 0x........: sem_init_WRK (hg_intercepts.c:...)
+   by 0x........: sem_init@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:248)
+
+
+FIXME: can't figure out how to verify wrap of sem_destroy
+
+----------------------------------------------------------------
+
+Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
+   at 0x........: sem_wait_WRK (hg_intercepts.c:...)
+   by 0x........: sem_wait (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:262)
+
+
+FIXME: can't figure out how to verify wrap of sem_post
+
+
+------------ dealloc of mem holding locks ------------
+
+----------------------------------------------------------------
+
+Thread #x: Exiting thread still holds 1 lock
+   ...
+
+
+ERROR SUMMARY: 22 errors from 22 contexts (suppressed: 0 from 0)
diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-mips32 b/helgrind/tests/tc20_verifywrap.stderr.exp-mips32
index 8628498..52f0b27 100644
--- a/helgrind/tests/tc20_verifywrap.stderr.exp-mips32
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp-mips32
@@ -15,22 +15,22 @@
    ...
    by 0x........: pthread_create_WRK (hg_intercepts.c:...)
    by 0x........: pthread_create@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:76)
+   by 0x........: main (tc20_verifywrap.c:81)
 
 ----------------------------------------------------------------
 
 Possible data race during write of size 2 at 0x........ by thread #x
 Locks held: none
-   at 0x........: main (tc20_verifywrap.c:78)
+   at 0x........: main (tc20_verifywrap.c:83)
 
 This conflicts with a previous write of size 2 by thread #x
 Locks held: none
-   at 0x........: racy_child (tc20_verifywrap.c:34)
+   at 0x........: racy_child (tc20_verifywrap.c:39)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
 
 Location 0x........ is 0 bytes inside global var "unprotected"
-declared at tc20_verifywrap.c:27
+declared at tc20_verifywrap.c:32
 
 ----------------------------------------------------------------
 
@@ -38,7 +38,7 @@
    with error code 45 (EDEADLK: Resource deadlock would occur)
    at 0x........: pthread_join_WRK (hg_intercepts.c:...)
    by 0x........: pthread_join (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:83)
+   by 0x........: main (tc20_verifywrap.c:88)
 
 
 ---------------- pthread_mutex_lock et al ----------------
@@ -48,54 +48,61 @@
 Thread #x's call to pthread_mutex_init failed
    with error code 122 (EOPNOTSUPP: Operation not supported on transport endpoint)
    at 0x........: pthread_mutex_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:92)
+   by 0x........: main (tc20_verifywrap.c:102)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_mutex_destroy of a locked mutex
-   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:102)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_destroy failed
    with error code 16 (EBUSY: Device or resource busy)
-   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:102)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_lock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:108)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:118)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_trylock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:116)
+   at 0x........: mutex_trylock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:126)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_timedlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:121)
+   at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:131)
 
 ----------------------------------------------------------------
 
 Thread #x unlocked an invalid lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_unlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 
 ---------------- pthread_cond_wait et al ----------------
@@ -105,7 +112,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
@@ -113,14 +120,14 @@
    with error code 1 (EPERM: Operation not permitted)
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_signal@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:152)
+   by 0x........: main (tc20_verifywrap.c:162)
 
 
 FIXME: can't figure out how to verify wrap of pthread_cond_signal
@@ -130,7 +137,7 @@
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:158)
+   by 0x........: main (tc20_verifywrap.c:168)
 
 
 FIXME: can't figure out how to verify wrap of pthread_broadcast_signal
@@ -140,7 +147,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 ----------------------------------------------------------------
 
@@ -148,7 +155,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 
 ---------------- pthread_rwlock_* ----------------
@@ -158,11 +165,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:179)
+   ...
+   by 0x........: main (tc20_verifywrap.c:189)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:178)
+   by 0x........: main (tc20_verifywrap.c:188)
 
 (1) no error on next line
 (2) no error on next line
@@ -172,11 +180,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:196)
+   ...
+   by 0x........: main (tc20_verifywrap.c:206)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
 
 (4) no error on next line
 (5) no error on next line
@@ -188,11 +197,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:212)
+   ...
+   by 0x........: main (tc20_verifywrap.c:227)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
 
 
 ---------------- sem_* ----------------
@@ -203,7 +213,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: sem_init_WRK (hg_intercepts.c:...)
    by 0x........: sem_init@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:228)
+   by 0x........: main (tc20_verifywrap.c:243)
 
 
 FIXME: can't figure out how to verify wrap of sem_destroy
@@ -213,7 +223,7 @@
 Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
    at 0x........: sem_wait_WRK (hg_intercepts.c:...)
    by 0x........: sem_wait (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:242)
+   by 0x........: main (tc20_verifywrap.c:257)
 
 
 FIXME: can't figure out how to verify wrap of sem_post
diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-mips32-b b/helgrind/tests/tc20_verifywrap.stderr.exp-mips32-b
index 2a44528..07f8db6 100644
--- a/helgrind/tests/tc20_verifywrap.stderr.exp-mips32-b
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp-mips32-b
@@ -15,22 +15,22 @@
    ...
    by 0x........: pthread_create_WRK (hg_intercepts.c:...)
    by 0x........: pthread_create@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:76)
+   by 0x........: main (tc20_verifywrap.c:81)
 
 ----------------------------------------------------------------
 
 Possible data race during write of size 2 at 0x........ by thread #x
 Locks held: none
-   at 0x........: main (tc20_verifywrap.c:78)
+   at 0x........: main (tc20_verifywrap.c:83)
 
 This conflicts with a previous write of size 2 by thread #x
 Locks held: none
-   at 0x........: racy_child (tc20_verifywrap.c:34)
+   at 0x........: racy_child (tc20_verifywrap.c:39)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
 
 Location 0x........ is 0 bytes inside global var "unprotected"
-declared at tc20_verifywrap.c:27
+declared at tc20_verifywrap.c:32
 
 ----------------------------------------------------------------
 
@@ -38,7 +38,7 @@
    with error code 45 (EDEADLK: Resource deadlock would occur)
    at 0x........: pthread_join_WRK (hg_intercepts.c:...)
    by 0x........: pthread_join (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:83)
+   by 0x........: main (tc20_verifywrap.c:88)
 
 
 ---------------- pthread_mutex_lock et al ----------------
@@ -48,54 +48,61 @@
 Thread #x's call to pthread_mutex_init failed
    with error code 122 (EOPNOTSUPP: Operation not supported on transport endpoint)
    at 0x........: pthread_mutex_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:92)
+   by 0x........: main (tc20_verifywrap.c:102)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_mutex_destroy of a locked mutex
-   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:102)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_destroy failed
    with error code 16 (EBUSY: Device or resource busy)
-   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:102)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_lock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:108)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:118)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_trylock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:116)
+   at 0x........: mutex_trylock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:126)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_timedlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:121)
+   at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:131)
 
 ----------------------------------------------------------------
 
 Thread #x unlocked an invalid lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_unlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 
 ---------------- pthread_cond_wait et al ----------------
@@ -105,7 +112,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
@@ -113,14 +120,14 @@
    with error code 1 (EPERM: Operation not permitted)
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_signal@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:152)
+   by 0x........: main (tc20_verifywrap.c:162)
 
 
 FIXME: can't figure out how to verify wrap of pthread_cond_signal
@@ -130,7 +137,7 @@
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:158)
+   by 0x........: main (tc20_verifywrap.c:168)
 
 
 FIXME: can't figure out how to verify wrap of pthread_broadcast_signal
@@ -140,7 +147,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 ----------------------------------------------------------------
 
@@ -148,7 +155,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 
 ---------------- pthread_rwlock_* ----------------
@@ -158,11 +165,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:179)
+   ...
+   by 0x........: main (tc20_verifywrap.c:189)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:178)
+   by 0x........: main (tc20_verifywrap.c:188)
 
 (1) no error on next line
 (2) no error on next line
@@ -172,11 +180,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:196)
+   ...
+   by 0x........: main (tc20_verifywrap.c:206)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
 
 (4) no error on next line
 (5) no error on next line
@@ -188,11 +197,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:212)
+   ...
+   by 0x........: main (tc20_verifywrap.c:227)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
 
 
 ---------------- sem_* ----------------
@@ -203,7 +213,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: sem_init_WRK (hg_intercepts.c:...)
    by 0x........: sem_init@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:228)
+   by 0x........: main (tc20_verifywrap.c:243)
 
 
 FIXME: can't figure out how to verify wrap of sem_destroy
@@ -213,7 +223,7 @@
 Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
    at 0x........: sem_wait_WRK (hg_intercepts.c:...)
    by 0x........: sem_wait (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:242)
+   by 0x........: main (tc20_verifywrap.c:257)
 
 ----------------------------------------------------------------
 
@@ -221,7 +231,7 @@
    with error code 89 (ENOSYS: Function not implemented)
    at 0x........: sem_post_WRK (hg_intercepts.c:...)
    by 0x........: sem_post (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:245)
+   by 0x........: main (tc20_verifywrap.c:260)
 
 
 FIXME: can't figure out how to verify wrap of sem_post
diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-s390x b/helgrind/tests/tc20_verifywrap.stderr.exp-s390x
index a717d99..3f60f79 100644
--- a/helgrind/tests/tc20_verifywrap.stderr.exp-s390x
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp-s390x
@@ -15,22 +15,22 @@
    ...
    by 0x........: pthread_create_WRK (hg_intercepts.c:...)
    by 0x........: pthread_create@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:76)
+   by 0x........: main (tc20_verifywrap.c:81)
 
 ----------------------------------------------------------------
 
 Possible data race during write of size 2 at 0x........ by thread #x
 Locks held: none
-   at 0x........: main (tc20_verifywrap.c:78)
+   at 0x........: main (tc20_verifywrap.c:83)
 
 This conflicts with a previous write of size 2 by thread #x
 Locks held: none
-   at 0x........: racy_child (tc20_verifywrap.c:34)
+   at 0x........: racy_child (tc20_verifywrap.c:39)
    by 0x........: mythread_wrapper (hg_intercepts.c:...)
    ...
 
 Location 0x........ is 0 bytes inside global var "unprotected"
-declared at tc20_verifywrap.c:27
+declared at tc20_verifywrap.c:32
 
 ----------------------------------------------------------------
 
@@ -38,7 +38,7 @@
    with error code 35 (EDEADLK: Resource deadlock would occur)
    at 0x........: pthread_join_WRK (hg_intercepts.c:...)
    by 0x........: pthread_join (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:83)
+   by 0x........: main (tc20_verifywrap.c:88)
 
 
 ---------------- pthread_mutex_lock et al ----------------
@@ -48,54 +48,61 @@
 Thread #x's call to pthread_mutex_init failed
    with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint)
    at 0x........: pthread_mutex_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:92)
+   by 0x........: main (tc20_verifywrap.c:102)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_mutex_destroy of a locked mutex
-   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:102)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_destroy failed
    with error code 16 (EBUSY: Device or resource busy)
-   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:102)
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_lock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:108)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:118)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_trylock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:116)
+   at 0x........: mutex_trylock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:126)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_timedlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:121)
+   at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:131)
 
 ----------------------------------------------------------------
 
 Thread #x unlocked an invalid lock at 0x........
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 ----------------------------------------------------------------
 
 Thread #x's call to pthread_mutex_unlock failed
    with error code 22 (EINVAL: Invalid argument)
-   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:125)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
 
 
 ---------------- pthread_cond_wait et al ----------------
@@ -105,7 +112,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
@@ -113,14 +120,14 @@
    with error code 1 (EPERM: Operation not permitted)
    at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:147)
+   by 0x........: main (tc20_verifywrap.c:157)
 
 ----------------------------------------------------------------
 
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_signal@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:152)
+   by 0x........: main (tc20_verifywrap.c:162)
 
 
 FIXME: can't figure out how to verify wrap of pthread_cond_signal
@@ -130,7 +137,7 @@
 Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
    at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:158)
+   by 0x........: main (tc20_verifywrap.c:168)
 
 
 FIXME: can't figure out how to verify wrap of pthread_broadcast_signal
@@ -140,7 +147,7 @@
 Thread #x: pthread_cond_{timed}wait called with un-held mutex
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 ----------------------------------------------------------------
 
@@ -148,7 +155,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
    by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:165)
+   by 0x........: main (tc20_verifywrap.c:175)
 
 
 ---------------- pthread_rwlock_* ----------------
@@ -158,11 +165,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:179)
+   ...
+   by 0x........: main (tc20_verifywrap.c:189)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:178)
+   by 0x........: main (tc20_verifywrap.c:188)
 
 (1) no error on next line
 (2) no error on next line
@@ -172,11 +180,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:196)
+   ...
+   by 0x........: main (tc20_verifywrap.c:206)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
 
 (4) no error on next line
 (5) no error on next line
@@ -188,11 +197,12 @@
 Thread #x unlocked a not-locked lock at 0x........
    at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:212)
+   ...
+   by 0x........: main (tc20_verifywrap.c:227)
   Lock at 0x........ was first observed
    at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
    by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:186)
+   by 0x........: main (tc20_verifywrap.c:196)
 
 
 ---------------- sem_* ----------------
@@ -203,7 +213,7 @@
    with error code 22 (EINVAL: Invalid argument)
    at 0x........: sem_init_WRK (hg_intercepts.c:...)
    by 0x........: sem_init@* (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:228)
+   by 0x........: main (tc20_verifywrap.c:243)
 
 
 FIXME: can't figure out how to verify wrap of sem_destroy
@@ -213,7 +223,7 @@
 Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
    at 0x........: sem_wait_WRK (hg_intercepts.c:...)
    by 0x........: sem_wait (hg_intercepts.c:...)
-   by 0x........: main (tc20_verifywrap.c:242)
+   by 0x........: main (tc20_verifywrap.c:257)
 
 
 FIXME: can't figure out how to verify wrap of sem_post
diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-solaris b/helgrind/tests/tc20_verifywrap.stderr.exp-solaris
new file mode 100644
index 0000000..921ebf5
--- /dev/null
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp-solaris
@@ -0,0 +1,259 @@
+
+
+
+------ This is output for >= glibc 2.4 ------
+
+---------------- pthread_create/join ----------------
+
+---Thread-Announcement------------------------------------------
+
+Thread #x is the program's root thread
+
+---Thread-Announcement------------------------------------------
+
+Thread #x was created
+   ...
+   by 0x........: pthread_create@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:81)
+
+----------------------------------------------------------------
+
+Possible data race during write of size 2 at 0x........ by thread #x
+Locks held: none
+   at 0x........: main (tc20_verifywrap.c:83)
+
+This conflicts with a previous write of size 2 by thread #x
+Locks held: none
+   at 0x........: racy_child (tc20_verifywrap.c:39)
+   by 0x........: mythread_wrapper (hg_intercepts.c:...)
+   ...
+ Location 0x........ is 0 bytes inside global var "unprotected"
+ declared at tc20_verifywrap.c:32
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_join failed
+   with error code 45 (EDEADLK: Resource deadlock would occur)
+   at 0x........: pthread_join_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_join (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:88)
+
+
+---------------- pthread_mutex_lock et al ----------------
+
+----------------------------------------------------------------
+
+Thread #x's call to mutex_init failed
+   with error code 22 (EINVAL: Invalid argument)
+   at 0x........: pthread_mutex_init (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:102)
+
+----------------------------------------------------------------
+
+Thread #x: pthread_mutex_destroy of a locked mutex
+   at 0x........: mutex_destroy_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:112)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_lock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: mutex_lock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:118)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_trylock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: mutex_trylock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:126)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_timedlock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:131)
+
+----------------------------------------------------------------
+
+Thread #x unlocked an invalid lock at 0x........
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_mutex_unlock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: mutex_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:135)
+
+
+---------------- pthread_cond_wait et al ----------------
+
+----------------------------------------------------------------
+
+Thread #x: pthread_cond_{timed}wait called with un-held mutex
+   at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:157)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_cond_wait failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:157)
+
+----------------------------------------------------------------
+
+Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
+   at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_signal@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:162)
+
+
+FIXME: can't figure out how to verify wrap of pthread_cond_signal
+
+----------------------------------------------------------------
+
+Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
+   at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:168)
+
+
+FIXME: can't figure out how to verify wrap of pthread_broadcast_signal
+
+----------------------------------------------------------------
+
+Thread #x: pthread_cond_{timed}wait called with un-held mutex
+   at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:175)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_cond_timedwait failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
+   by 0x........: main (tc20_verifywrap.c:175)
+
+
+---------------- pthread_rwlock_* ----------------
+
+----------------------------------------------------------------
+
+Thread #x unlocked a not-locked lock at 0x........
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:189)
+ Lock at 0x........ was first observed
+   at 0x........: pthread_rwlock_init (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:188)
+ Location 0x........ is 0 bytes inside rwl.__pthread_rwlock_readers,
+ declared at tc20_verifywrap.c:52, in frame #x of thread x
+
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_rwlock_unlock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:189)
+
+(1) no error on next line
+(2) no error on next line
+(3)    ERROR on next line
+----------------------------------------------------------------
+
+Thread #x unlocked a not-locked lock at 0x........
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:206)
+ Lock at 0x........ was first observed
+   at 0x........: pthread_rwlock_init (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:196)
+ Location 0x........ is 0 bytes inside rwl2.__pthread_rwlock_readers,
+ declared at tc20_verifywrap.c:53, in frame #x of thread x
+
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_rwlock_unlock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:206)
+
+(4) no error on next line
+(5) no error on next line
+(6) no error on next line
+(7) no error on next line
+(8)    ERROR on next line
+----------------------------------------------------------------
+
+Thread #x unlocked a not-locked lock at 0x........
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:227)
+ Lock at 0x........ was first observed
+   at 0x........: pthread_rwlock_init (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:196)
+ Location 0x........ is 0 bytes inside rwl2.__pthread_rwlock_readers,
+ declared at tc20_verifywrap.c:53, in frame #x of thread x
+
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_rwlock_unlock failed
+   with error code 1 (EPERM: Operation not permitted)
+   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
+   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:227)
+
+
+---------------- sem_* ----------------
+
+----------------------------------------------------------------
+
+Thread #x's call to sema_init failed
+   with error code 22 (EINVAL: Invalid argument)
+   at 0x........: sema_init (hg_intercepts.c:...)
+   ...
+   by 0x........: main (tc20_verifywrap.c:248)
+
+
+FIXME: can't figure out how to verify wrap of sem_destroy
+
+
+FIXME: can't figure out how to verify wrap of sem_post
+
+
+------------ dealloc of mem holding locks ------------
+
+----------------------------------------------------------------
+
+Thread #x: Exiting thread still holds 1 lock
+   ...
+
+
+ERROR SUMMARY: 23 errors from 23 contexts (suppressed: 0 from 0)
diff --git a/helgrind/tests/tc20_verifywrap.vgtest b/helgrind/tests/tc20_verifywrap.vgtest
index 2accc94..0ee9c14 100644
--- a/helgrind/tests/tc20_verifywrap.vgtest
+++ b/helgrind/tests/tc20_verifywrap.vgtest
@@ -1,3 +1,3 @@
 prereq: test -e tc20_verifywrap
 prog: tc20_verifywrap
-vgopts: --read-var-info=yes
+vgopts: --read-var-info=yes --sigill-diagnostics=no
diff --git a/helgrind/tests/tc22_exit_w_lock.stderr.exp-solaris b/helgrind/tests/tc22_exit_w_lock.stderr.exp-solaris
new file mode 100644
index 0000000..7c1256e
--- /dev/null
+++ b/helgrind/tests/tc22_exit_w_lock.stderr.exp-solaris
@@ -0,0 +1,39 @@
+
+---Thread-Announcement------------------------------------------
+
+Thread #x was created
+   ...
+   by 0x........: pthread_create@* (hg_intercepts.c:...)
+   by 0x........: main (tc22_exit_w_lock.c:39)
+
+----------------------------------------------------------------
+
+Thread #x: Exiting thread still holds 2 locks
+   ...
+
+---Thread-Announcement------------------------------------------
+
+Thread #x was created
+   ...
+   by 0x........: pthread_create@* (hg_intercepts.c:...)
+   by 0x........: main (tc22_exit_w_lock.c:42)
+
+----------------------------------------------------------------
+
+Thread #x: Exiting thread still holds 1 lock
+   ...
+
+
+Process terminating with default action of signal 6 (SIGABRT)
+   ...
+---Thread-Announcement------------------------------------------
+
+Thread #x is the program's root thread
+
+----------------------------------------------------------------
+
+Thread #x: Exiting thread still holds 1 lock
+   ...
+
+
+ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
diff --git a/helgrind/tests/tc23_bogus_condwait.c b/helgrind/tests/tc23_bogus_condwait.c
index 6e39768..0a1b5f3 100644
--- a/helgrind/tests/tc23_bogus_condwait.c
+++ b/helgrind/tests/tc23_bogus_condwait.c
@@ -98,7 +98,7 @@
 {
    sem_t* s;
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
    s = malloc(sizeof(*s));
    if (s) {
       if (sem_init(s, pshared, count) < 0) {
diff --git a/helgrind/tests/tc24_nonzero_sem.c b/helgrind/tests/tc24_nonzero_sem.c
index 5e990f5..bcd467c 100644
--- a/helgrind/tests/tc24_nonzero_sem.c
+++ b/helgrind/tests/tc24_nonzero_sem.c
@@ -50,7 +50,7 @@
 {
    sem_t* s;
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
    s = malloc(sizeof(*s));
    if (s) {
       if (sem_init(s, pshared, count) < 0) {
diff --git a/include/Makefile.am b/include/Makefile.am
index 9e5d2b4..ccfcd27 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -46,6 +46,8 @@
 	valgrind.h			\
 	vki/vki-linux.h			\
 	vki/vki-darwin.h		\
+	vki/vki-solaris.h		\
+	vki/vki-solaris-repcache.h	\
 	vki/vki-posixtypes-amd64-linux.h \
 	vki/vki-posixtypes-arm64-linux.h \
 	vki/vki-posixtypes-ppc32-linux.h \
@@ -74,6 +76,7 @@
 	vki/vki-scnums-mips32-linux.h	\
 	vki/vki-scnums-mips64-linux.h	\
 	vki/vki-scnums-darwin.h         \
+	vki/vki-scnums-solaris.h	\
 	vki/vki-xen.h                   \
 	vki/vki-xen-domctl.h		\
 	vki/vki-xen-evtchn.h		\
@@ -81,8 +84,11 @@
 	vki/vki-xen-hvm.h		\
 	vki/vki-xen-memory.h		\
 	vki/vki-xen-mmuext.h		\
+	vki/vki-xen-physdev.h		\
+	vki/vki-xen-schedop.h		\
 	vki/vki-xen-sysctl.h		\
 	vki/vki-xen-tmem.h		\
 	vki/vki-xen-version.h		\
+	vki/vki-xen-xsm.h		\
 	vki/vki-xen-x86.h		\
 	vki/vki-linux-drm.h
diff --git a/include/pub_tool_addrinfo.h b/include/pub_tool_addrinfo.h
index d62bc34..5dc66cd 100644
--- a/include/pub_tool_addrinfo.h
+++ b/include/pub_tool_addrinfo.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_aspacehl.h b/include/pub_tool_aspacehl.h
index acc05a7..4210367 100644
--- a/include/pub_tool_aspacehl.h
+++ b/include/pub_tool_aspacehl.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2009-2013 Julian Seward
+   Copyright (C) 2009-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_aspacemgr.h b/include/pub_tool_aspacemgr.h
index 1de80c9..4a83e35 100644
--- a/include/pub_tool_aspacemgr.h
+++ b/include/pub_tool_aspacemgr.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_basics.h b/include/pub_tool_basics.h
index 09b89d7..413e22a 100644
--- a/include/pub_tool_basics.h
+++ b/include/pub_tool_basics.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -102,7 +102,7 @@
 // used in those cases.
 // Nb: on Linux, off_t is a signed word-sized int.  On Darwin it's
 // always a signed 64-bit int.  So we defined our own Off64T as well.
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 typedef Word                   OffT;      // 32             64
 #elif defined(VGO_darwin)
 typedef Long                   OffT;      // 64             64
@@ -130,11 +130,19 @@
 typedef UInt ThreadId;
 
 /* An abstraction of syscall return values.
-   Linux:
+   Linux/MIPS32 and Linux/MIPS64:
+      When _isError == False, 
+         _val and possible _valEx hold the return value.  Whether
+         _valEx actually holds a valid value depends on which syscall
+         this SysRes holds of the result of.
+      When _isError == True,  
+         _val holds the error code.
+
+   Linux/other:
       When _isError == False, 
          _val holds the return value.
       When _isError == True,  
-         _err holds the error code.
+         _val holds the error code.
 
    Darwin:
       Interpretation depends on _mode:
@@ -149,17 +157,31 @@
          userspace, but we have to record it, so that we can correctly
          update both {R,E}DX and {R,E}AX (in guest state) given a SysRes,
          if we're required to.
+
+   Solaris:
+      When _isError == False,
+         _val and _val2 hold the return value.
+      When _isError == True,
+         _val holds the error code.
 */
-#if defined(VGO_linux)
+#if defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
 typedef
    struct {
       Bool  _isError;
       UWord _val;
-#if defined(VGA_mips64) || defined(VGA_mips32)
       UWord _valEx;
-#endif
    }
    SysRes;
+
+#elif defined(VGO_linux) \
+      && !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux)
+typedef
+   struct {
+      Bool  _isError;
+      UWord _val;
+   }
+   SysRes;
+
 #elif defined(VGO_darwin)
 typedef
    enum { 
@@ -176,6 +198,16 @@
       SysResMode _mode;
    }
    SysRes;
+
+#elif defined(VGO_solaris)
+typedef
+   struct {
+      UWord _val;
+      UWord _val2;
+      Bool  _isError;
+   }
+   SysRes;
+
 #else
 #  error "Unknown OS"
 #endif
@@ -183,7 +215,7 @@
 
 /* ---- And now some basic accessor functions for it. ---- */
 
-#if defined(VGO_linux)
+#if defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
 
 static inline Bool sr_isError ( SysRes sr ) {
    return sr._isError;
@@ -191,18 +223,52 @@
 static inline UWord sr_Res ( SysRes sr ) {
    return sr._isError ? 0 : sr._val;
 }
-#if defined(VGA_mips64) || defined(VGA_mips32)
 static inline UWord sr_ResEx ( SysRes sr ) {
    return sr._isError ? 0 : sr._valEx;
 }
-#endif
 static inline UWord sr_Err ( SysRes sr ) {
    return sr._isError ? sr._val : 0;
 }
-// FIXME: this function needs to be fixed for MIPS
-static inline Bool sr_EQ ( SysRes sr1, SysRes sr2 ) {
+static inline Bool sr_EQ ( UInt sysno, SysRes sr1, SysRes sr2 ) {
+   /* This uglyness of hardcoding syscall numbers is necessary to
+      avoid having this header file be dependant on
+      include/vki/vki-scnums-mips{32,64}-linux.h.  It seems pretty
+      safe given that it is inconceivable that the syscall numbers
+      for such simple syscalls would ever change.  To make it 
+      really safe, coregrind/m_vkiscnums.c static-asserts that these
+      syscall numbers haven't changed, so that the build wil simply
+      fail if they ever do. */
+#  if defined(VGP_mips32_linux)
+   const UInt __nr_Linux = 4000;
+   const UInt __nr_pipe  = __nr_Linux + 42;
+   const UInt __nr_pipe2 = __nr_Linux + 328;
+#  else
+   const UInt __nr_Linux = 5000;
+   const UInt __nr_pipe  = __nr_Linux + 21;
+   const UInt __nr_pipe2 = __nr_Linux + 287;
+#  endif
+   Bool useEx = sysno == __nr_pipe || sysno == __nr_pipe2;
    return sr1._val == sr2._val
-       && sr1._isError == sr2._isError;
+          && (useEx ? (sr1._valEx == sr2._valEx) : True)
+          && sr1._isError == sr2._isError;
+}
+
+#elif defined(VGO_linux) \
+      && !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux)
+
+static inline Bool sr_isError ( SysRes sr ) {
+   return sr._isError;
+}
+static inline UWord sr_Res ( SysRes sr ) {
+   return sr._isError ? 0 : sr._val;
+}
+static inline UWord sr_Err ( SysRes sr ) {
+   return sr._isError ? sr._val : 0;
+}
+static inline Bool sr_EQ ( UInt sysno, SysRes sr1, SysRes sr2 ) {
+   /* sysno is ignored for Linux/not-MIPS */
+   return sr1._val == sr2._val
+          && sr1._isError == sr2._isError;
 }
 
 #elif defined(VGO_darwin)
@@ -259,11 +325,33 @@
    }
 }
 
-static inline Bool sr_EQ ( SysRes sr1, SysRes sr2 ) {
+static inline Bool sr_EQ ( UInt sysno, SysRes sr1, SysRes sr2 ) {
+   /* sysno is ignored for Darwin */
    return sr1._mode == sr2._mode
           && sr1._wLO == sr2._wLO && sr1._wHI == sr2._wHI;
 }
 
+#elif defined(VGO_solaris)
+
+static inline Bool sr_isError ( SysRes sr ) {
+   return sr._isError;
+}
+static inline UWord sr_Res ( SysRes sr ) {
+   return sr._isError ? 0 : sr._val;
+}
+static inline UWord sr_ResHI ( SysRes sr ) {
+   return sr._isError ? 0 : sr._val2;
+}
+static inline UWord sr_Err ( SysRes sr ) {
+   return sr._isError ? sr._val : 0;
+}
+static inline Bool sr_EQ ( UInt sysno, SysRes sr1, SysRes sr2 ) {
+   /* sysno is ignored for Solaris */
+   return sr1._val == sr2._val
+       && sr1._val2 == sr2._val2
+       && sr1._isError == sr2._isError;
+}
+
 #else
 #  error "Unknown OS"
 #endif
diff --git a/include/pub_tool_basics_asm.h b/include/pub_tool_basics_asm.h
index 0173e68..d73c91e 100644
--- a/include/pub_tool_basics_asm.h
+++ b/include/pub_tool_basics_asm.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -48,7 +48,7 @@
 
 #define VGAPPEND(str1,str2) str1##str2
  
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 #  define VG_(str)    VGAPPEND( vgPlain_,          str)
 #  define ML_(str)    VGAPPEND( vgModuleLocal_,    str)
 #elif defined(VGO_darwin)
@@ -58,6 +58,20 @@
 #  error Unknown OS
 #endif
 
+/* Let the linker know we don't need an executable stack.
+   The call to MARK_STACK_NO_EXEC should be put unconditionally
+   at the end of all asm source files.
+*/
+#if defined(VGO_linux)
+#  if defined(VGA_arm)
+#    define MARK_STACK_NO_EXEC .section .note.GNU-stack,"",%progbits
+#  else
+#    define MARK_STACK_NO_EXEC .section .note.GNU-stack,"",@progbits
+#  endif
+#else
+#  define MARK_STACK_NO_EXEC
+#endif
+
 #endif /* __PUB_TOOL_BASICS_ASM_H */
 
 /*--------------------------------------------------------------------*/
diff --git a/include/pub_tool_clientstate.h b/include/pub_tool_clientstate.h
index c5f5b84..af0fbbf 100644
--- a/include/pub_tool_clientstate.h
+++ b/include/pub_tool_clientstate.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_clreq.h b/include/pub_tool_clreq.h
index 94005ca..b3798e0 100644
--- a/include/pub_tool_clreq.h
+++ b/include/pub_tool_clreq.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_debuginfo.h b/include/pub_tool_debuginfo.h
index 91f3751..49ceffb 100644
--- a/include/pub_tool_debuginfo.h
+++ b/include/pub_tool_debuginfo.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -32,6 +32,7 @@
 #define __PUB_TOOL_DEBUGINFO_H
 
 #include "pub_tool_basics.h"   // VG_ macro
+#include "pub_tool_xarray.h"   // XArray
 
 /*====================================================================*/
 /*=== Obtaining debug information                                  ===*/
@@ -113,8 +114,8 @@
    XArray itself.
 */
 Bool VG_(get_data_description)( 
-        /*MOD*/ void* /* really, XArray* of HChar */ dname1v,
-        /*MOD*/ void* /* really, XArray* of HChar */ dname2v,
+        /*MOD*/ XArray* /* of HChar */ dname1v,
+        /*MOD*/ XArray* /* of HChar */ dname2v,
         Addr data_addr
      );
 
@@ -178,8 +179,8 @@
    }
    StackBlock;
 
-extern void* /* really, XArray* of StackBlock */
-             VG_(di_get_stack_blocks_at_ip)( Addr ip, Bool arrays_only );
+extern XArray* /* of StackBlock */
+VG_(di_get_stack_blocks_at_ip)( Addr ip, Bool arrays_only );
 
 
 /* Get an array of GlobalBlock which describe the global blocks owned
@@ -199,7 +200,7 @@
    }
    GlobalBlock;
 
-extern void* /* really, XArray* of GlobalBlock */
+extern XArray* /* of GlobalBlock */
 VG_(di_get_global_blocks_from_dihandle) ( ULong di_handle,
                                           Bool  arrays_only );
 
diff --git a/include/pub_tool_deduppoolalloc.h b/include/pub_tool_deduppoolalloc.h
index e8f8e55..a4c1a09 100644
--- a/include/pub_tool_deduppoolalloc.h
+++ b/include/pub_tool_deduppoolalloc.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Philippe Waroquiers philippe.waroquiers@skynet.be
+   Copyright (C) 2014-2015 Philippe Waroquiers philippe.waroquiers@skynet.be
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/include/pub_tool_errormgr.h b/include/pub_tool_errormgr.h
index ad1f6b0..1b9fdfe 100644
--- a/include/pub_tool_errormgr.h
+++ b/include/pub_tool_errormgr.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_execontext.h b/include/pub_tool_execontext.h
index 39f4a56..9ce3a24 100644
--- a/include/pub_tool_execontext.h
+++ b/include/pub_tool_execontext.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_gdbserver.h b/include/pub_tool_gdbserver.h
index 69e5108..d4c826b 100644
--- a/include/pub_tool_gdbserver.h
+++ b/include/pub_tool_gdbserver.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 Philippe Waroquiers
+   Copyright (C) 2011-2015 Philippe Waroquiers
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/include/pub_tool_guest.h b/include/pub_tool_guest.h
index 8b38283..2178aca 100644
--- a/include/pub_tool_guest.h
+++ b/include/pub_tool_guest.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 OpenWorks LLP
+   Copyright (C) 2014-2015 OpenWorks LLP
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_hashtable.h b/include/pub_tool_hashtable.h
index 6fc6822..e5c41cc 100644
--- a/include/pub_tool_hashtable.h
+++ b/include/pub_tool_hashtable.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -58,7 +58,7 @@
 extern VgHashTable *VG_(HT_construct) ( const HChar* name );
 
 /* Count the number of nodes in a table. */
-extern Int VG_(HT_count_nodes) ( const VgHashTable *table );
+extern UInt VG_(HT_count_nodes) ( const VgHashTable *table );
 
 /* Add a node to the table.  Duplicate keys are permitted. */
 extern void VG_(HT_add_node) ( VgHashTable *t, void* node );
diff --git a/include/pub_tool_libcassert.h b/include/pub_tool_libcassert.h
index 413d6ba..b606d00 100644
--- a/include/pub_tool_libcassert.h
+++ b/include/pub_tool_libcassert.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_libcbase.h b/include/pub_tool_libcbase.h
index 93a19c8..c22bd77 100644
--- a/include/pub_tool_libcbase.h
+++ b/include/pub_tool_libcbase.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_libcfile.h b/include/pub_tool_libcfile.h
index 3df5be5..4a7346e 100644
--- a/include/pub_tool_libcfile.h
+++ b/include/pub_tool_libcfile.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -93,7 +93,7 @@
 
 extern SSizeT VG_(readlink)( const HChar* path, HChar* buf, SizeT bufsiz);
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 extern Int    VG_(getdents64)( Int fd, struct vki_dirent64 *dirp, UInt count );
 #endif
 
diff --git a/include/pub_tool_libcprint.h b/include/pub_tool_libcprint.h
index 5d38127..bda41c2 100644
--- a/include/pub_tool_libcprint.h
+++ b/include/pub_tool_libcprint.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_libcproc.h b/include/pub_tool_libcproc.h
index 0e2afdc..cc1f9a8 100644
--- a/include/pub_tool_libcproc.h
+++ b/include/pub_tool_libcproc.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -51,14 +51,27 @@
 // platforms.
 extern const HChar* VG_(LD_PRELOAD_var_name);
 
+/* Resolves filename of VG_(cl_exec_fd) and copies it to the buffer. 
+   Buffer must not be NULL and buf_size must be at least 1.
+   If buffer is not large enough it is terminated with '\0' only
+   when 'terminate_with_NUL == True'. */
+extern void VG_(client_fname)(HChar *buffer, SizeT buf_size,
+                              Bool terminate_with_NUL);
+
+/* Concatenates client exename and command line arguments into
+   the buffer. Buffer must not be NULL and buf_size must be
+   at least 1. Buffer is always terminated with '\0'. */
+extern void VG_(client_cmd_and_args)(HChar *buffer, SizeT buf_size);
+
 /* ---------------------------------------------------------------------
    Important syscalls
    ------------------------------------------------------------------ */
 
 extern Int  VG_(waitpid)( Int pid, Int *status, Int options );
 extern Int  VG_(system) ( const HChar* cmd );
+extern Int  VG_(spawn)  ( const HChar *filename, const HChar **argv );
 extern Int  VG_(fork)   ( void);
-extern void VG_(execv)  ( const HChar* filename, HChar** argv );
+extern void VG_(execv)  ( const HChar* filename, const HChar** argv );
 extern Int  VG_(sysctl) ( Int *name, UInt namelen, void *oldp, SizeT *oldlenp, void *newp, SizeT newlen );
 
 /* ---------------------------------------------------------------------
diff --git a/include/pub_tool_libcsetjmp.h b/include/pub_tool_libcsetjmp.h
index ff01058..bb94a59 100644
--- a/include/pub_tool_libcsetjmp.h
+++ b/include/pub_tool_libcsetjmp.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 Mozilla Inc
+   Copyright (C) 2010-2015 Mozilla Inc
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/include/pub_tool_libcsignal.h b/include/pub_tool_libcsignal.h
index 8ca9420..88770d8 100644
--- a/include/pub_tool_libcsignal.h
+++ b/include/pub_tool_libcsignal.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -39,6 +39,11 @@
    defines.  Since we're operating right at the kernel interface, glibc's view
    of the world is entirely irrelevant. */
 
+/* --- Signal set ops (only the ops used by tools) --- */
+extern Int  VG_(sigdelset)   ( vki_sigset_t* set, Int signum );
+/* Other Signal set ops are in pub_core_libcsignal.h and must be moved
+   here if needed by tools. */
+
 /* --- Mess with the kernel's sig state --- */
 extern Int VG_(sigprocmask) ( Int how, const vki_sigset_t* set,
                               vki_sigset_t* oldset );
diff --git a/include/pub_tool_machine.h b/include/pub_tool_machine.h
index 1e31179..4ec31ab 100644
--- a/include/pub_tool_machine.h
+++ b/include/pub_tool_machine.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -34,14 +34,14 @@
 #include "pub_tool_basics.h"           // ThreadID
 #include "libvex.h"                    // VexArchInfo
 
-#if defined(VGP_x86_linux)
+#if defined(VGP_x86_linux) || defined(VGP_x86_solaris)
 #  define VG_MIN_INSTR_SZB          1  // min length of native instruction
 #  define VG_MAX_INSTR_SZB         16  // max length of native instruction
 #  define VG_CLREQ_SZB             14  // length of a client request, may
                                        //   be larger than VG_MAX_INSTR_SZB
 #  define VG_STACK_REDZONE_SZB      0  // number of addressable bytes below %RSP
 
-#elif defined(VGP_amd64_linux)
+#elif defined(VGP_amd64_linux) || defined(VGP_amd64_solaris)
 #  define VG_MIN_INSTR_SZB          1
 #  define VG_MAX_INSTR_SZB         16
 #  define VG_CLREQ_SZB             19
diff --git a/include/pub_tool_mallocfree.h b/include/pub_tool_mallocfree.h
index ca69666..0217f67 100644
--- a/include/pub_tool_mallocfree.h
+++ b/include/pub_tool_mallocfree.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_options.h b/include/pub_tool_options.h
index e6dee23..94ed544 100644
--- a/include/pub_tool_options.h
+++ b/include/pub_tool_options.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_oset.h b/include/pub_tool_oset.h
index a52606c..0c97997 100644
--- a/include/pub_tool_oset.h
+++ b/include/pub_tool_oset.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -298,7 +298,7 @@
 //   they will return NULL if VG_(OSetGen_Next)() is called without an
 //   intervening call to VG_(OSetGen_ResetIter)().
 
-extern Word  VG_(OSetGen_Size)         ( const OSet* os );
+extern UInt  VG_(OSetGen_Size)         ( const OSet* os );
 extern void  VG_(OSetGen_Insert)       ( OSet* os, void* elem );
 extern Bool  VG_(OSetGen_Contains)     ( const OSet* os, const void* key );
 extern void* VG_(OSetGen_Lookup)       ( const OSet* os, const void* key );
diff --git a/include/pub_tool_poolalloc.h b/include/pub_tool_poolalloc.h
index 67c1801..549569f 100644
--- a/include/pub_tool_poolalloc.h
+++ b/include/pub_tool_poolalloc.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2011-2013 OpenWorks LLP info@open-works.co.uk,
+   Copyright (C) 2011-2015 OpenWorks LLP info@open-works.co.uk,
                            Philippe Waroquiers philippe.waroquiers@skynet.be
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_rangemap.h b/include/pub_tool_rangemap.h
index 657fad6..208b9dc 100644
--- a/include/pub_tool_rangemap.h
+++ b/include/pub_tool_rangemap.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Mozilla Foundation
+   Copyright (C) 2014-2015 Mozilla Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -71,7 +71,7 @@
                            /*OUT*/UWord* val, const RangeMap* rm, UWord key );
 
 /* How many elements are there in the map? */
-Word VG_(sizeRangeMap) ( const RangeMap* rm );
+UInt VG_(sizeRangeMap) ( const RangeMap* rm );
 
 /* Get the i'th component */
 void VG_(indexRangeMap) ( /*OUT*/UWord* key_min, /*OUT*/UWord* key_max,
diff --git a/include/pub_tool_redir.h b/include/pub_tool_redir.h
index f99ffb7..bac00d7 100644
--- a/include/pub_tool_redir.h
+++ b/include/pub_tool_redir.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -186,6 +186,7 @@
      (         -->  ZL    (left)
      )         -->  ZR    (right)
      Z         -->  ZZ    (Z)
+     /         -->  ZS    (slash)
 
    Everything else is left unchanged.
 */
@@ -240,7 +241,7 @@
 
 /* --- Soname of the standard C library. --- */
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 #  define  VG_Z_LIBC_SONAME  libcZdsoZa              // libc.so*
 
 #elif defined(VGO_darwin) && (DARWIN_VERS <= DARWIN_10_6)
@@ -276,6 +277,8 @@
 #  define  VG_Z_LIBPTHREAD_SONAME  libpthreadZdsoZd0     // libpthread.so.0
 #elif defined(VGO_darwin)
 #  define  VG_Z_LIBPTHREAD_SONAME  libSystemZdZaZddylib  // libSystem.*.dylib
+#elif defined(VGO_solaris)
+#  define  VG_Z_LIBPTHREAD_SONAME  libpthreadZdsoZd1     // libpthread.so.1
 #else
 #  error "Unknown platform"
 #endif
@@ -315,6 +318,27 @@
 
 #endif
 
+/* --- Soname for Solaris run-time linker. --- */
+// Note: run-time linker contains absolute pathname in the SONAME.
+
+#if defined(VGO_solaris)
+
+#if defined(VGP_x86_solaris)
+#  define  VG_Z_LD_SO_1           ZSlibZSldZdsoZd1         // /lib/ld.so.1
+#  define  VG_U_LD_SO_1           "/lib/ld.so.1"
+#elif defined(VGP_amd64_solaris)
+#  define  VG_Z_LD_SO_1           ZSlibZSamd64ZSldZdsoZd1  // /lib/amd64/ld.so.1
+#  define  VG_U_LD_SO_1           "/lib/amd64/ld.so.1"
+#else
+#  error "Unknown platform"
+#endif
+
+/* --- Soname for Solaris libumem allocation interposition. --- */
+
+#define  VG_Z_LIBUMEM_SO_1          libumemZdsoZd1             // libumem.so.1
+#define  VG_U_LIBUMEM_SO_1          "libumem.so.1"
+
+#endif
 
 // Prefix for synonym soname synonym handling
 #define VG_SO_SYN(name)       VgSoSyn##name
diff --git a/include/pub_tool_replacemalloc.h b/include/pub_tool_replacemalloc.h
index bc019f5..2ce7ba5 100644
--- a/include/pub_tool_replacemalloc.h
+++ b/include/pub_tool_replacemalloc.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_seqmatch.h b/include/pub_tool_seqmatch.h
index 61f05cb..3b0b210 100644
--- a/include/pub_tool_seqmatch.h
+++ b/include/pub_tool_seqmatch.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_signals.h b/include/pub_tool_signals.h
index ad79ec0..1bab478 100644
--- a/include/pub_tool_signals.h
+++ b/include/pub_tool_signals.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -36,11 +36,14 @@
 // Register an interest in apparently internal faults; used code which
 // wanders around dangerous memory (ie, leakcheck).  The catcher is
 // not expected to return.
+// Returns the previously set fault_catcher (NULL if there was no fault
+// catcher set)
 //
 // It's frustrating that we need this header for a single function used
 // only by Memcheck during leak checking.  We should find a way to remove
 // the need for this file.
-extern void VG_(set_fault_catcher)(void (*catcher)(Int sig, Addr addr));
+typedef void (*fault_catcher_t)(Int sig, Addr addr);
+extern fault_catcher_t VG_(set_fault_catcher)(fault_catcher_t catcher);
 
 #endif   // __PUB_TOOL_SIGNALS_H
 
diff --git a/include/pub_tool_sparsewa.h b/include/pub_tool_sparsewa.h
index 8e1644d..982bfac 100644
--- a/include/pub_tool_sparsewa.h
+++ b/include/pub_tool_sparsewa.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_stacktrace.h b/include/pub_tool_stacktrace.h
index a5df2ce..57dfbce 100644
--- a/include/pub_tool_stacktrace.h
+++ b/include/pub_tool_stacktrace.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_threadstate.h b/include/pub_tool_threadstate.h
index ccd5d97..7ad176c 100644
--- a/include/pub_tool_threadstate.h
+++ b/include/pub_tool_threadstate.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_tooliface.h b/include/pub_tool_tooliface.h
index 3952f29..8df00b5 100644
--- a/include/pub_tool_tooliface.h
+++ b/include/pub_tool_tooliface.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -631,6 +631,16 @@
 void VG_(track_post_reg_write_clientcall_return)(
       void(*f)(ThreadId tid, PtrdiffT guest_state_offset, SizeT size, Addr f));
 
+/* Mem-to-reg or reg-to-mem copy functions, these ones occur around syscalls
+   and signal handling when the VCPU state is saved to (or restored from) the
+   client memory. */
+void VG_(track_copy_mem_to_reg)(void(*f)(CorePart part, ThreadId tid,
+                                         Addr a, PtrdiffT guest_state_offset,
+                                         SizeT size));
+void VG_(track_copy_reg_to_mem)(void(*f)(CorePart part, ThreadId tid,
+                                         PtrdiffT guest_state_offset,
+                                         Addr a, SizeT size));
+
 
 /* Scheduler events (not exhaustive) */
 
diff --git a/include/pub_tool_transtab.h b/include/pub_tool_transtab.h
index 16908b3..fcfc1e0 100644
--- a/include/pub_tool_transtab.h
+++ b/include/pub_tool_transtab.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2014-2014 Florian Krohm   (florian@eich-krohm.de)
+   Copyright (C) 2014-2015 Florian Krohm   (florian@eich-krohm.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/include/pub_tool_vki.h b/include/pub_tool_vki.h
index 2966ce3..db7b84f 100644
--- a/include/pub_tool_vki.h
+++ b/include/pub_tool_vki.h
@@ -8,11 +8,11 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -50,6 +50,8 @@
 #  include "vki/vki-linux-drm.h"
 #elif defined(VGO_darwin)
 #  include "vki/vki-darwin.h"
+#elif defined(VGO_solaris)
+#  include "vki/vki-solaris.h"
 #else
 #  error Unknown Plat/OS
 #endif
diff --git a/include/pub_tool_vkiscnums.h b/include/pub_tool_vkiscnums.h
index 25dc31c..ff5df58 100644
--- a/include/pub_tool_vkiscnums.h
+++ b/include/pub_tool_vkiscnums.h
@@ -7,9 +7,9 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/include/pub_tool_vkiscnums_asm.h b/include/pub_tool_vkiscnums_asm.h
index 860e8d0..d6ea52a 100644
--- a/include/pub_tool_vkiscnums_asm.h
+++ b/include/pub_tool_vkiscnums_asm.h
@@ -7,9 +7,9 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
       njn@valgrind.org
-   Copyright (C) 2006-2013 OpenWorks LLP
+   Copyright (C) 2006-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
@@ -66,6 +66,9 @@
 #elif defined(VGP_tilegx_linux)
 #  include "vki/vki-scnums-tilegx-linux.h"
 
+#elif defined(VGP_x86_solaris) || (VGP_amd64_solaris)
+#  include "vki/vki-scnums-solaris.h"
+
 #else
 #  error Unknown platform
 #endif
diff --git a/include/pub_tool_wordfm.h b/include/pub_tool_wordfm.h
index 1f1c979..239ae94 100644
--- a/include/pub_tool_wordfm.h
+++ b/include/pub_tool_wordfm.h
@@ -9,13 +9,13 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2007-2013 Julian Seward
+   Copyright (C) 2007-2015 Julian Seward
       jseward@acm.org
 
    This code is based on previous work by Nicholas Nethercote
    (coregrind/m_oset.c) which is
 
-   Copyright (C) 2005-2013 Nicholas Nethercote
+   Copyright (C) 2005-2015 Nicholas Nethercote
        njn@valgrind.org
 
    which in turn was derived partially from:
diff --git a/include/pub_tool_xarray.h b/include/pub_tool_xarray.h
index e3bc84e..2b0fe99 100644
--- a/include/pub_tool_xarray.h
+++ b/include/pub_tool_xarray.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2007-2013 OpenWorks LLP
+   Copyright (C) 2007-2015 OpenWorks LLP
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/include/valgrind.h b/include/valgrind.h
index 613de06..c505f9f 100644
--- a/include/valgrind.h
+++ b/include/valgrind.h
@@ -12,7 +12,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward.  All rights reserved.
+   Copyright (C) 2000-2015 Julian Seward.  All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
@@ -89,7 +89,7 @@
         || (__VALGRIND_MAJOR__ == 3 && __VALGRIND_MINOR__ >= 6))
 */
 #define __VALGRIND_MAJOR__    3
-#define __VALGRIND_MINOR__    10
+#define __VALGRIND_MINOR__    12
 
 
 #include <stdarg.h>
@@ -123,6 +123,8 @@
 #undef PLAT_mips32_linux
 #undef PLAT_mips64_linux
 #undef PLAT_tilegx_linux
+#undef PLAT_x86_solaris
+#undef PLAT_amd64_solaris
 
 
 #if defined(__APPLE__) && defined(__i386__)
@@ -138,7 +140,7 @@
 #  define PLAT_amd64_win64 1
 #elif defined(__linux__) && defined(__i386__)
 #  define PLAT_x86_linux 1
-#elif defined(__linux__) && defined(__x86_64__)
+#elif defined(__linux__) && defined(__x86_64__) && !defined(__ILP32__)
 #  define PLAT_amd64_linux 1
 #elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__)
 #  define PLAT_ppc32_linux 1
@@ -160,6 +162,10 @@
 #  define PLAT_mips32_linux 1
 #elif defined(__linux__) && defined(__tilegx__)
 #  define PLAT_tilegx_linux 1
+#elif defined(__sun) && defined(__i386__)
+#  define PLAT_x86_solaris 1
+#elif defined(__sun) && defined(__x86_64__)
+#  define PLAT_amd64_solaris 1
 #else
 /* If we're not compiling for our target platform, don't generate
    any inline asms.  */
@@ -247,10 +253,11 @@
    inline asm stuff to be useful.
 */
 
-/* ------------------------- x86-{linux,darwin} ---------------- */
+/* ----------------- x86-{linux,darwin,solaris} ---------------- */
 
 #if defined(PLAT_x86_linux)  ||  defined(PLAT_x86_darwin)  \
-    ||  (defined(PLAT_x86_win32) && defined(__GNUC__))
+    ||  (defined(PLAT_x86_win32) && defined(__GNUC__)) \
+    ||  defined(PLAT_x86_solaris)
 
 typedef
    struct { 
@@ -310,7 +317,8 @@
                     );                                           \
  } while (0)
 
-#endif /* PLAT_x86_linux || PLAT_x86_darwin || (PLAT_x86_win32 && __GNUC__) */
+#endif /* PLAT_x86_linux || PLAT_x86_darwin || (PLAT_x86_win32 && __GNUC__)
+          || PLAT_x86_solaris */
 
 /* ------------------------- x86-Win32 ------------------------- */
 
@@ -385,9 +393,10 @@
 
 #endif /* PLAT_x86_win32 */
 
-/* ------------------------ amd64-{linux,darwin} --------------- */
+/* ----------------- amd64-{linux,darwin,solaris} --------------- */
 
 #if defined(PLAT_amd64_linux)  ||  defined(PLAT_amd64_darwin) \
+    ||  defined(PLAT_amd64_solaris) \
     ||  (defined(PLAT_amd64_win64) && defined(__GNUC__))
 
 typedef
@@ -448,7 +457,7 @@
                     );                                           \
  } while (0)
 
-#endif /* PLAT_amd64_linux || PLAT_amd64_darwin */
+#endif /* PLAT_amd64_linux || PLAT_amd64_darwin || PLAT_amd64_solaris */
 
 /* ------------------------- amd64-Win64 ------------------------- */
 
@@ -785,7 +794,8 @@
                      "orr x10, x10, x10\n\t"                      \
                      "mov %0, x3"     /*result*/                  \
                      : "=r" (_zzq_result)                         \
-                     : "r" ((unsigned long int)_zzq_default), "r" (&_zzq_args[0])    \
+                     : "r" ((unsigned long int)(_zzq_default)),   \
+                       "r" (&_zzq_args[0])                        \
                      : "cc","memory", "x3", "x4");                \
     _zzq_result;                                                  \
   })
@@ -1202,9 +1212,10 @@
    do { volatile unsigned long _junk;                             \
         CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0)
 
-/* ------------------------- x86-{linux,darwin} ---------------- */
+/* ----------------- x86-{linux,darwin,solaris} ---------------- */
 
-#if defined(PLAT_x86_linux)  ||  defined(PLAT_x86_darwin)
+#if defined(PLAT_x86_linux)  ||  defined(PLAT_x86_darwin) \
+    ||  defined(PLAT_x86_solaris)
 
 /* These regs are trashed by the hidden call.  No need to mention eax
    as gcc can already see that, plus causes gcc to bomb. */
@@ -1631,11 +1642,12 @@
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
 
-#endif /* PLAT_x86_linux || PLAT_x86_darwin */
+#endif /* PLAT_x86_linux || PLAT_x86_darwin || PLAT_x86_solaris */
 
-/* ------------------------ amd64-{linux,darwin} --------------- */
+/* ---------------- amd64-{linux,darwin,solaris} --------------- */
 
-#if defined(PLAT_amd64_linux)  ||  defined(PLAT_amd64_darwin)
+#if defined(PLAT_amd64_linux)  ||  defined(PLAT_amd64_darwin) \
+    ||  defined(PLAT_amd64_solaris)
 
 /* ARGREGS: rdi rsi rdx rcx r8 r9 (the rest on stack in R-to-L order) */
 
@@ -2184,7 +2196,7 @@
       lval = (__typeof__(lval)) _res;                                  \
    } while (0)
 
-#endif /* PLAT_amd64_linux || PLAT_amd64_darwin */
+#endif /* PLAT_amd64_linux || PLAT_amd64_darwin || PLAT_amd64_solaris */
 
 /* ------------------------ ppc32-linux ------------------------ */
 
@@ -7108,5 +7120,7 @@
 #undef PLAT_mips32_linux
 #undef PLAT_mips64_linux
 #undef PLAT_tilegx_linux
+#undef PLAT_x86_solaris
+#undef PLAT_amd64_solaris
 
 #endif   /* __VALGRIND_H */
diff --git a/include/vki/vki-amd64-linux.h b/include/vki/vki-amd64-linux.h
index 61847a7..db85b92 100644
--- a/include/vki/vki-amd64-linux.h
+++ b/include/vki/vki-amd64-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -691,6 +691,13 @@
 #define	VKI_EOVERFLOW    75  /* Value too large for defined data type */
 
 //----------------------------------------------------------------------
+// From linux-3.19.0/include/uapi/asm-generic/ioctls.h
+//----------------------------------------------------------------------
+
+#define VKI_TIOCGSERIAL     0x541E
+#define VKI_TIOCSSERIAL     0x541F
+
+//----------------------------------------------------------------------
 // And that's it!
 //----------------------------------------------------------------------
 
diff --git a/include/vki/vki-arm-linux.h b/include/vki/vki-arm-linux.h
index 031f528..fe7a171 100644
--- a/include/vki/vki-arm-linux.h
+++ b/include/vki/vki-arm-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -901,6 +901,13 @@
 #define	VKI_EOVERFLOW    75  /* Value too large for defined data type */
 
 //----------------------------------------------------------------------
+// From linux-3.19.0/include/uapi/asm-generic/ioctls.h
+//----------------------------------------------------------------------
+
+#define VKI_TIOCGSERIAL     0x541E
+#define VKI_TIOCSSERIAL     0x541F
+
+//----------------------------------------------------------------------
 // And that's it!
 //----------------------------------------------------------------------
 
diff --git a/include/vki/vki-arm64-linux.h b/include/vki/vki-arm64-linux.h
index 747d0bf..df34dd6 100644
--- a/include/vki/vki-arm64-linux.h
+++ b/include/vki/vki-arm64-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
@@ -684,6 +684,13 @@
 #define	VKI_EOVERFLOW    75  /* Value too large for defined data type */
 
 //----------------------------------------------------------------------
+// From linux-3.19.0/include/uapi/asm-generic/ioctls.h
+//----------------------------------------------------------------------
+
+#define VKI_TIOCGSERIAL     0x541E
+#define VKI_TIOCSSERIAL     0x541F
+
+//----------------------------------------------------------------------
 // And that's it!
 //----------------------------------------------------------------------
  
diff --git a/include/vki/vki-darwin.h b/include/vki/vki-darwin.h
index 9e53f25..49d0d4c 100644
--- a/include/vki/vki-darwin.h
+++ b/include/vki/vki-darwin.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2007-2013 Apple Inc.
+   Copyright (C) 2007-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -34,6 +34,12 @@
 #ifndef __VKI_DARWIN_H
 #define __VKI_DARWIN_H
 
+/* struct __darwin_ucontext isn't fully declared without
+ * this definition.  It's crazy but there it is.  */
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 0500
+#endif
+
 #include <stdint.h>
 
 #define vki_int8_t int8_t
@@ -106,6 +112,8 @@
 
 #define vki_timeval timeval
 #define vki_timeval32 timeval32
+#define vki_tv_sec tv_sec
+#define vki_tv_usec tv_usec
 #define vki_timespec timespec
 #define vki_itimerval itimerval
 #define vki_timezone timezone
@@ -296,6 +304,11 @@
 #if DARWIN_VERS >= DARWIN_10_9
 # define VKI_F_ADDFILESIGS  F_ADDFILESIGS
 #endif
+#if DARWIN_VERS >= DARWIN_10_11
+# define VKI_F_ADDFILESIGS_FOR_DYLD_SIM  F_ADDFILESIGS_FOR_DYLD_SIM
+# define VKI_F_BARRIERFSYNC              F_BARRIERFSYNC
+# define VKI_F_ADDFILESIGS_RETURN        F_ADDFILESIGS_RETURN
+#endif
 #define VKI_F_FULLFSYNC	F_FULLFSYNC
 #define VKI_F_PATHPKG_CHECK	F_PATHPKG_CHECK
 #define VKI_F_FREEZE_FS	F_FREEZE_FS
@@ -995,6 +1008,23 @@
 #define VKI_DTRACEHIOC_ADDDOF   DTRACEHIOC_ADDDOF
 
 
+#include <net/bpf.h>
+
+#define vki_bpf_program bpf_program
+#define vki_bf_len bf_len
+#define vki_bf_insns bf_insns
+#define vki_bpf_dltlist bpf_dltlist
+#define vki_bfl_len bfl_len
+#define vki_bfl_list bfl_list
+
+#define VKI_BIOCSETF        BIOCSETF
+#define VKI_BIOCFLUSH       BIOCFLUSH
+#define VKI_BIOCPROMISC     BIOCPROMISC
+#define VKI_BIOCSETIF       BIOCSETIF
+#define VKI_BIOCSRTIMEOUT   BIOCSRTIMEOUT
+#define VKI_BIOCGDLTLIST    BIOCGDLTLIST
+
+
 #include <sys/ucontext.h>
 
 /* quite why sys/ucontext.h provides a 'struct __darwin_ucontext'
diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h
index 6db92dc..0df24dd 100644
--- a/include/vki/vki-linux.h
+++ b/include/vki/vki-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -838,22 +838,22 @@
 };
 
 #define vki_ifr_name	ifr_ifrn.ifrn_name	/* interface name 	*/
-#define ifr_hwaddr	ifr_ifru.ifru_hwaddr	/* MAC address 		*/
-#define	ifr_addr	ifr_ifru.ifru_addr	/* address		*/
-#define	ifr_dstaddr	ifr_ifru.ifru_dstaddr	/* other end of p-p lnk	*/
-#define	ifr_broadaddr	ifr_ifru.ifru_broadaddr	/* broadcast address	*/
-#define	ifr_netmask	ifr_ifru.ifru_netmask	/* interface net mask	*/
+#define vki_ifr_hwaddr	ifr_ifru.ifru_hwaddr	/* MAC address 		*/
+#define	vki_ifr_addr	ifr_ifru.ifru_addr	/* address		*/
+#define	vki_ifr_dstaddr	ifr_ifru.ifru_dstaddr	/* other end of p-p lnk	*/
+#define	vki_ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address	*/
+#define	vki_ifr_netmask	ifr_ifru.ifru_netmask	/* interface net mask	*/
 #define	vki_ifr_flags	ifr_ifru.ifru_flags	/* flags		*/
 #define	vki_ifr_metric	ifr_ifru.ifru_ivalue	/* metric		*/
-#define	vki_ifr_mtu		ifr_ifru.ifru_mtu	/* mtu			*/
-#define ifr_map		ifr_ifru.ifru_map	/* device map		*/
-#define ifr_slave	ifr_ifru.ifru_slave	/* slave device		*/
+#define	vki_ifr_mtu	ifr_ifru.ifru_mtu	/* mtu			*/
+#define vki_ifr_map	ifr_ifru.ifru_map	/* device map		*/
+#define vki_ifr_slave	ifr_ifru.ifru_slave	/* slave device		*/
 #define	vki_ifr_data	ifr_ifru.ifru_data	/* for use by interface	*/
 #define vki_ifr_ifindex	ifr_ifru.ifru_ivalue	/* interface index	*/
-#define ifr_bandwidth	ifr_ifru.ifru_ivalue    /* link bandwidth	*/
-#define ifr_qlen	ifr_ifru.ifru_ivalue	/* Queue length 	*/
-#define ifr_newname	ifr_ifru.ifru_newname	/* New name		*/
-#define ifr_settings	ifr_ifru.ifru_settings	/* Device/proto settings*/
+#define vki_ifr_bandwidth ifr_ifru.ifru_ivalue  /* link bandwidth	*/
+#define vki_ifr_qlen	ifr_ifru.ifru_ivalue	/* Queue length 	*/
+#define vki_ifr_newname	ifr_ifru.ifru_newname	/* New name		*/
+#define vki_ifr_settings ifr_ifru.ifru_settings	/* Device/proto settings*/
 
 struct vki_ifconf 
 {
@@ -3167,6 +3167,24 @@
 #define VKI_KVM_NMI                   _VKI_IO(KVMIO,   0x9a)
 #define VKI_KVM_KVMCLOCK_CTRL         _VKI_IO(KVMIO,   0xad)
 
+struct vki_kvm_s390_mem_op {
+        /* in */
+        __vki_u64 gaddr;            /* the guest address */
+        __vki_u64 flags;            /* flags */
+        __vki_u32 size;             /* amount of bytes */
+        __vki_u32 op;               /* type of operation */
+        __vki_u64 buf;              /* buffer in userspace */
+        __vki_u8 ar;                /* the access register number */
+        __vki_u8 reserved[31];      /* should be set to 0 */
+};
+
+#define VKI_KVM_S390_MEMOP_LOGICAL_READ		0
+#define VKI_KVM_S390_MEMOP_LOGICAL_WRITE	1
+#define VKI_KVM_S390_MEMOP_F_CHECK_ONLY		(1ULL << 0)
+#define VKI_KVM_S390_MEMOP_F_INJECT_EXCEPTION	(1ULL << 1)
+
+#define VKI_KVM_S390_MEM_OP           _VKI_IOW(KVMIO,  0xb1, struct vki_kvm_s390_mem_op)
+
 //----------------------------------------------------------------------
 // From linux-2.6/include/linux/net_stamp.h
 //----------------------------------------------------------------------
@@ -3294,7 +3312,6 @@
 	_VKI_IOC(_VKI_IOC_NONE, 'E', 0, sizeof(struct vki_xen_ioctl_evtchn_bind_virq))
 struct vki_xen_ioctl_evtchn_bind_virq {
 	vki_uint32_t virq;
-	vki_uint32_t port;
 };
 
 #define VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN			\
@@ -3675,6 +3692,10 @@
 //----------------------------------------------------------------------
 // From Lustre's lustre/include/lustre/lustre_user.h
 //----------------------------------------------------------------------
+#define VKI_LL_IOC_GROUP_LOCK \
+           _VKI_IOW('f', 158, long)
+#define VKI_LL_IOC_GROUP_UNLOCK \
+           _VKI_IOW('f', 159, long)
 #define VKI_LL_IOC_GETPARENT \
            _VKI_IOWR('f', 249, struct vki_getparent)
 
@@ -4223,8 +4244,8 @@
 
 struct vki_v4l2_plane_pix_format {
 	__vki_u32		sizeimage;
-	__vki_u16		bytesperline;
-	__vki_u16		reserved[7];
+	__vki_u32		bytesperline;
+	__vki_u16		reserved[6];
 } __attribute__ ((packed));
 
 #define VKI_VIDEO_MAX_PLANES               8
@@ -4492,7 +4513,8 @@
 	__vki_u32 pad;
 	__vki_u32 index;
 	__vki_u32 code;
-	__vki_u32 reserved[9];
+	__vki_u32 which;
+	__vki_u32 reserved[8];
 };
 
 struct vki_v4l2_subdev_frame_size_enum {
@@ -4503,7 +4525,8 @@
 	__vki_u32 max_width;
 	__vki_u32 min_height;
 	__vki_u32 max_height;
-	__vki_u32 reserved[9];
+	__vki_u32 which;
+	__vki_u32 reserved[8];
 };
 
 struct vki_v4l2_subdev_frame_interval {
@@ -4519,7 +4542,8 @@
 	__vki_u32 width;
 	__vki_u32 height;
 	struct vki_v4l2_fract interval;
-	__vki_u32 reserved[9];
+	__vki_u32 which;
+	__vki_u32 reserved[8];
 };
 
 struct vki_v4l2_subdev_selection {
@@ -4615,6 +4639,9 @@
 #define VKI_MEDIA_IOC_ENUM_LINKS		_VKI_IOWR('|', 0x02, struct vki_media_links_enum)
 #define VKI_MEDIA_IOC_SETUP_LINK		_VKI_IOWR('|', 0x03, struct vki_media_link_desc)
 
+/* DVB demux API */
+#define	VKI_DMX_STOP	_VKI_IO('o', 42)
+
 /* Comparison type */
 enum vki_kcmp_type {
    VKI_KCMP_FILE,
@@ -4639,6 +4666,31 @@
 //----------------------------------------------------------------------
 #define VKI_BINPRM_BUF_SIZE 128
 
+//----------------------------------------------------------------------
+// From linux-3.19.0/include/linux/serial.h
+//----------------------------------------------------------------------
+
+struct vki_serial_struct {
+	int	type;
+	int	line;
+	unsigned int	port;
+	int	irq;
+	int	flags;
+	int	xmit_fifo_size;
+	int	custom_divisor;
+	int	baud_base;
+	unsigned short	close_delay;
+	char	io_type;
+	char	reserved_char[1];
+	int	hub6;
+	unsigned short	closing_wait; /* time to wait before closing */
+	unsigned short	closing_wait2; /* no longer used... */
+	unsigned char	*iomem_base;
+	unsigned short	iomem_reg_shift;
+	unsigned int	port_high;
+	unsigned long	iomap_base;	/* cookie passed into ioremap */
+};
+
 #endif // __VKI_LINUX_H
 
 /*--------------------------------------------------------------------*/
diff --git a/include/vki/vki-mips32-linux.h b/include/vki/vki-mips32-linux.h
index d694f1d..5f8857f 100644
--- a/include/vki/vki-mips32-linux.h
+++ b/include/vki/vki-mips32-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-mips64-linux.h b/include/vki/vki-mips64-linux.h
index c95146e..03b1836 100644
--- a/include/vki/vki-mips64-linux.h
+++ b/include/vki/vki-mips64-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-posixtypes-amd64-linux.h b/include/vki/vki-posixtypes-amd64-linux.h
index e0573e0..e68e214 100644
--- a/include/vki/vki-posixtypes-amd64-linux.h
+++ b/include/vki/vki-posixtypes-amd64-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-posixtypes-arm-linux.h b/include/vki/vki-posixtypes-arm-linux.h
index 7f16420..59943a8 100644
--- a/include/vki/vki-posixtypes-arm-linux.h
+++ b/include/vki/vki-posixtypes-arm-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-posixtypes-arm64-linux.h b/include/vki/vki-posixtypes-arm64-linux.h
index da33bca..7df5345 100644
--- a/include/vki/vki-posixtypes-arm64-linux.h
+++ b/include/vki/vki-posixtypes-arm64-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-posixtypes-mips32-linux.h b/include/vki/vki-posixtypes-mips32-linux.h
index d90d994..4abe38a 100644
--- a/include/vki/vki-posixtypes-mips32-linux.h
+++ b/include/vki/vki-posixtypes-mips32-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-posixtypes-mips64-linux.h b/include/vki/vki-posixtypes-mips64-linux.h
index 9f446fc..4ebd597 100644
--- a/include/vki/vki-posixtypes-mips64-linux.h
+++ b/include/vki/vki-posixtypes-mips64-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-posixtypes-ppc32-linux.h b/include/vki/vki-posixtypes-ppc32-linux.h
index 29b0018..246195b 100644
--- a/include/vki/vki-posixtypes-ppc32-linux.h
+++ b/include/vki/vki-posixtypes-ppc32-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Julian Seward
+   Copyright (C) 2005-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-posixtypes-ppc64-linux.h b/include/vki/vki-posixtypes-ppc64-linux.h
index c3d17f2..afd0a50 100644
--- a/include/vki/vki-posixtypes-ppc64-linux.h
+++ b/include/vki/vki-posixtypes-ppc64-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Julian Seward
+   Copyright (C) 2005-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-posixtypes-s390x-linux.h b/include/vki/vki-posixtypes-s390x-linux.h
index b5ea238..6de95fc 100644
--- a/include/vki/vki-posixtypes-s390x-linux.h
+++ b/include/vki/vki-posixtypes-s390x-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/include/vki/vki-posixtypes-tilegx-linux.h b/include/vki/vki-posixtypes-tilegx-linux.h
index c95e768..49996bc 100644
--- a/include/vki/vki-posixtypes-tilegx-linux.h
+++ b/include/vki/vki-posixtypes-tilegx-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 Tilera Corp.
+   Copyright (C) 2010-2015 Tilera Corp.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/include/vki/vki-posixtypes-x86-linux.h b/include/vki/vki-posixtypes-x86-linux.h
index 16e74a7..dedaa67 100644
--- a/include/vki/vki-posixtypes-x86-linux.h
+++ b/include/vki/vki-posixtypes-x86-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-ppc32-linux.h b/include/vki/vki-ppc32-linux.h
index 6aea179..70c2835 100644
--- a/include/vki/vki-ppc32-linux.h
+++ b/include/vki/vki-ppc32-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Julian Seward
+   Copyright (C) 2005-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -626,8 +626,8 @@
 //#define VKI_TIOCSSOFTCAR	0x541A
 #define VKI_TIOCLINUX		0x541C
 //#define VKI_TIOCCONS		0x541D
-//#define VKI_TIOCGSERIAL	0x541E
-//#define VKI_TIOCSSERIAL	0x541F
+#define VKI_TIOCGSERIAL	0x541E
+#define VKI_TIOCSSERIAL	0x541F
 //#define VKI_TIOCPKT		0x5420
 //# define VKI_TIOCPKT_DATA		 0
 //# define VKI_TIOCPKT_FLUSHREAD	 1
diff --git a/include/vki/vki-ppc64-linux.h b/include/vki/vki-ppc64-linux.h
index 8848b05..b410663 100644
--- a/include/vki/vki-ppc64-linux.h
+++ b/include/vki/vki-ppc64-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Julian Seward
+   Copyright (C) 2005-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -795,6 +795,13 @@
 #define	VKI_EOVERFLOW    75  /* Value too large for defined data type */
 
 //----------------------------------------------------------------------
+// From linux-3.19.0/arch/powerpc/include/uapi/asm/ioctls.h
+//----------------------------------------------------------------------
+
+#define VKI_TIOCGSERIAL     0x541E
+#define VKI_TIOCSSERIAL     0x541F
+
+//----------------------------------------------------------------------
 // end
 //----------------------------------------------------------------------
 
diff --git a/include/vki/vki-s390x-linux.h b/include/vki/vki-s390x-linux.h
index 85c449d..c3f6d00 100644
--- a/include/vki/vki-s390x-linux.h
+++ b/include/vki/vki-s390x-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2013
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -800,12 +800,15 @@
 #define VKI_PTRACE_POKEUSR_AREA       0x5001
 
 //----------------------------------------------------------------------
-// From linux-2.6.16.60/include/asm-s390/elf.h
+// From linux-3.18/include/asm-s390/elf.h
 //----------------------------------------------------------------------
 
 typedef vki_s390_fp_regs vki_elf_fpregset_t;
 typedef vki_s390_regs vki_elf_gregset_t;
 
+#define VKI_HWCAP_S390_TE           1024
+#define VKI_HWCAP_S390_VXRS         2048
+
 
 //----------------------------------------------------------------------
 // From linux-2.6.16.60/include/asm-s390/ucontext.h
@@ -976,6 +979,13 @@
 #define	VKI_ENOSYS       38  /* Function not implemented */
 #define	VKI_EOVERFLOW    75  /* Value too large for defined data type */
 
+//----------------------------------------------------------------------
+// From linux-3.19.0/include/uapi/asm-generic/ioctls.h
+//----------------------------------------------------------------------
+
+#define VKI_TIOCGSERIAL     0x541E
+#define VKI_TIOCSSERIAL     0x541F
+
 #endif // __VKI_S390X_LINUX_H
 
 /*--------------------------------------------------------------------*/
diff --git a/include/vki/vki-scnums-amd64-linux.h b/include/vki/vki-scnums-amd64-linux.h
index c211219..820cd02 100644
--- a/include/vki/vki-scnums-amd64-linux.h
+++ b/include/vki/vki-scnums-amd64-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-scnums-arm-linux.h b/include/vki/vki-scnums-arm-linux.h
index e186a62..df35729 100644
--- a/include/vki/vki-scnums-arm-linux.h
+++ b/include/vki/vki-scnums-arm-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2008-2013 Evan Geller
+   Copyright (C) 2008-2015 Evan Geller
       gaze@bea.ms
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-scnums-arm64-linux.h b/include/vki/vki-scnums-arm64-linux.h
index f8f08f7..f70a2ed 100644
--- a/include/vki/vki-scnums-arm64-linux.h
+++ b/include/vki/vki-scnums-arm64-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2013-2013 OpenWorks
+   Copyright (C) 2013-2015 OpenWorks
       info@open-works.net
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-scnums-darwin.h b/include/vki/vki-scnums-darwin.h
index 60b569e..b75cdce 100644
--- a/include/vki/vki-scnums-darwin.h
+++ b/include/vki/vki-scnums-darwin.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2007-2013 Apple Inc.
+   Copyright (C) 2007-2015 Apple Inc.
       Greg Parker  gparker@apple.com
 
    This program is free software; you can redistribute it and/or
@@ -175,14 +175,15 @@
 #define __NR_semaphore_timedwait_trap         VG_DARWIN_SYSCALL_CONSTRUCT_MACH(38)
 #define __NR_semaphore_timedwait_signal_trap  VG_DARWIN_SYSCALL_CONSTRUCT_MACH(39)
 
-#if defined(VGA_x86)
-#define __NR_init_process                     VG_DARWIN_SYSCALL_CONSTRUCT_MACH(41)
-#define __NR_map_fd                           VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)
-#else
+#if DARWIN_VERS >= DARWIN_10_9
 #define __NR_kernelrpc_mach_port_guard_trap   VG_DARWIN_SYSCALL_CONSTRUCT_MACH(41)
 #define __NR_kernelrpc_mach_port_unguard_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(42)
 #endif
 
+#if defined(VGA_x86) || DARWIN_VERS == DARWIN_10_9
+#define __NR_map_fd                           VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)
+#endif
+
 #define __NR_task_name_for_pid                VG_DARWIN_SYSCALL_CONSTRUCT_MACH(44)
 #define __NR_task_for_pid                     VG_DARWIN_SYSCALL_CONSTRUCT_MACH(45)
 #define __NR_pid_for_task                     VG_DARWIN_SYSCALL_CONSTRUCT_MACH(46)
@@ -508,7 +509,7 @@
 
 #if DARWIN_VERS < DARWIN_10_10
 #define	__NR_sem_getvalue   VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(274)
-#elif DARWIN_VERS == DARWIN_10_10
+#elif DARWIN_VERS >= DARWIN_10_10
 #define	__NR_sysctlbyname   VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(274)
 #endif
 
@@ -535,25 +536,42 @@
 #define	__NR_shared_region_map_np   VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(295)
 #if DARWIN_VERS >= DARWIN_10_6
 #define __NR_vm_pressure_monitor    VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(296)
+#define __NR_psynch_rw_longrdlock   VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(297)
+#define __NR_psynch_rw_yieldwrlock  VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(298)
+#define __NR_psynch_rw_downgrade    VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(299)
+#define __NR_psynch_rw_upgrade      VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(300)
+#define __NR_psynch_mutexwait       VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(301)
+#define __NR_psynch_mutexdrop       VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(302)
+#define __NR_psynch_cvbroad         VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(303)
+#define __NR_psynch_cvsignal        VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(304)
+#define __NR_psynch_cvwait          VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(305)
+#define __NR_psynch_rw_rdlock       VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(306)
+#define __NR_psynch_rw_wrlock       VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(307)
+#define __NR_psynch_rw_unlock       VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(308)
+#define __NR_psynch_rw_unlock2      VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(309)
 #else
 			/* 296  old load_shared_file */
-#endif
 			/* 297  old reset_shared_file */
 			/* 298  old new_system_shared_regions */
 			/* 299  old shared_region_map_file_np */
 			/* 300  old shared_region_make_private_np */
-#define __NR_psynch_mutexwait VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(301)
-#define __NR_psynch_mutexdrop VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(302)
-#define __NR_psynch_cvbroad   VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(303)
-#define __NR_psynch_cvsignal  VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(304)
-#define __NR_psynch_cvwait    VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(305)
-#define __NR_psynch_rw_rdlock VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(306)
-#define __NR_psynch_rw_wrlock VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(307)
-#define __NR_psynch_rw_unlock VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(308)
-			/* 309 */
+#define __NR___pthread_mutex_destroy  VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(301)
+#define __NR___pthread_mutex_init     VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(302)
+#define __NR___pthread_mutex_lock     VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(303)
+#define __NR___pthread_mutex_trylock  VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(304)
+#define __NR___pthread_mutex_unlock   VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(305)
+#define __NR___pthread_cond_init      VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(306)
+#define __NR___pthread_cond_destroy   VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(307)
+#define __NR___pthread_cond_broadcast VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(308)
+#define __NR___pthread_cond_signal    VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(309)
+#endif
 #define	__NR_getsid         VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(310)
 #define	__NR_settid_with_pid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(311)
+#if DARWIN_VERS >= DARWIN_10_7
 #define __NR_psynch_cvclrprepost VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(312)
+#else
+#define __NR___pthread_cond_timedwait VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(312)
+#endif
 #define	__NR_aio_fsync      VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(313)
 #define	__NR_aio_return     VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(314)
 #define	__NR_aio_suspend    VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(315)
@@ -720,7 +738,23 @@
 #define __NR_guarded_write_np       VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(485)
 #define __NR_guarded_pwrite_np      VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(486)
 #define __NR_guarded_writev_np      VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(487)
-#endif
+			/* 488  */
+			/* 489  */
+#endif /* DARWIN_VERS >= DARWIN_10_10 */
+
+// TODO Update with OS X 10.11 kernel (xnu) source code release
+#if DARWIN_VERS >= DARWIN_10_11
+			/* 490  */
+			/* 491  */
+			/* 492  */
+			/* 493  */
+			/* 494  */
+			/* 495  */
+			/* 496  */
+			/* 497  */
+			/* 498  */
+			/* 499  */
+#endif /* DARWIN_VERS >= DARWIN_10_11 */
 
 #if DARWIN_VERS < DARWIN_10_6
 #define	__NR_MAXSYSCALL             VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(427)
@@ -732,6 +766,9 @@
 #define	__NR_MAXSYSCALL             VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(456)
 #elif DARWIN_VERS == DARWIN_10_10
 #define __NR_MAXSYSCALL             VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(490)
+#elif DARWIN_VERS == DARWIN_10_11
+// TODO Confirm against final release
+#define __NR_MAXSYSCALL             VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(500)
 #else
 #error unknown darwin version
 #endif
diff --git a/include/vki/vki-scnums-mips32-linux.h b/include/vki/vki-scnums-mips32-linux.h
index a382a55..5103b43 100644
--- a/include/vki/vki-scnums-mips32-linux.h
+++ b/include/vki/vki-scnums-mips32-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-scnums-mips64-linux.h b/include/vki/vki-scnums-mips64-linux.h
index 2a8081e..79cc553 100644
--- a/include/vki/vki-scnums-mips64-linux.h
+++ b/include/vki/vki-scnums-mips64-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 RT-RK
+   Copyright (C) 2010-2015 RT-RK
       mips-valgrind@rt-rk.com
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-scnums-ppc32-linux.h b/include/vki/vki-scnums-ppc32-linux.h
index 006f48e..644ac8a 100644
--- a/include/vki/vki-scnums-ppc32-linux.h
+++ b/include/vki/vki-scnums-ppc32-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Julian Seward
+   Copyright (C) 2005-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-scnums-ppc64-linux.h b/include/vki/vki-scnums-ppc64-linux.h
index cfc2cc6..2a20161 100644
--- a/include/vki/vki-scnums-ppc64-linux.h
+++ b/include/vki/vki-scnums-ppc64-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2005-2013 Julian Seward
+   Copyright (C) 2005-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-scnums-s390x-linux.h b/include/vki/vki-scnums-s390x-linux.h
index d0a62c6..2a4a8f1 100644
--- a/include/vki/vki-scnums-s390x-linux.h
+++ b/include/vki/vki-scnums-s390x-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright IBM Corp. 2010-2014
+   Copyright IBM Corp. 2010-2015
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/include/vki/vki-scnums-solaris.h b/include/vki/vki-scnums-solaris.h
new file mode 100644
index 0000000..d6fe22c
--- /dev/null
+++ b/include/vki/vki-scnums-solaris.h
@@ -0,0 +1,371 @@
+
+/*--------------------------------------------------------------------*/
+/*--- System call numbers for Solaris.        vki-scnums-solaris.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2011-2015 Petr Pavlu
+      setup@dagobah.cz
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Copyright 2013-2015, Ivo Raisr <ivosh@ivosh.net>. */
+
+/* Copyright 2013, OmniTI Computer Consulting, Inc. All rights reserved. */
+
+#ifndef __VKI_SCNUMS_SOLARIS_H
+#define __VKI_SCNUMS_SOLARIS_H
+
+/* Note: Basic information about Solaris syscalls can be found in the kernel
+   source file uts/common/os/sysent.c.
+ */
+
+/* Include sys/syscall.h to get SYS_* constants (and sys/trap.h to get T_*) to
+   avoid any copyright issues connected with their potential copying out of
+   the header file.
+ */
+#include <sys/syscall.h>
+#include <sys/trap.h>
+
+/* normal syscall (int $0x91) */
+#define VG_SOLARIS_SYSCALL_CLASS_CLASSIC        0
+/* fasttrap syscall (int $0xD2) */
+#define VG_SOLARIS_SYSCALL_CLASS_FASTTRAP       1
+
+#define VG_SOLARIS_SYSCALL_CLASS_SHIFT 24
+#define VG_SOLARIS_SYSCALL_NUMBER_MASK 0x00FFFFFF
+
+#define VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(sysno) \
+   ((VG_SOLARIS_SYSCALL_CLASS_FASTTRAP << VG_SOLARIS_SYSCALL_CLASS_SHIFT) \
+    | (sysno))
+#define VG_SOLARIS_SYSNO_CLASS(sysno) \
+   ((sysno) >> VG_SOLARIS_SYSCALL_CLASS_SHIFT)
+#define VG_SOLARIS_SYSNO_INDEX(sysno) \
+   ((sysno) & VG_SOLARIS_SYSCALL_NUMBER_MASK)
+
+#define __NR_exit                       SYS_exit
+#if defined(SOLARIS_SPAWN_SYSCALL)
+#define __NR_spawn                      SYS_spawn
+#endif /* SOLARIS_SPAWN_SYSCALL */
+#define __NR_read                       SYS_read
+#define __NR_write                      SYS_write
+#define __NR_close                      SYS_close
+#define __NR_linkat                     SYS_linkat
+#define __NR_symlinkat                  SYS_symlinkat
+#define __NR_chdir                      SYS_chdir
+#define __NR_time                       SYS_time
+#define __NR_brk                        SYS_brk
+#define __NR_lseek                      SYS_lseek
+#define __NR_getpid                     SYS_getpid
+#define __NR_mount                      SYS_mount
+#define __NR_readlinkat                 SYS_readlinkat
+#define __NR_setuid                     SYS_setuid
+#define __NR_getuid                     SYS_getuid
+#define __NR_stime                      SYS_stime
+//#define __NR_pcsample                   SYS_pcsample
+#define __NR_alarm                      SYS_alarm
+#define __NR_pause                      SYS_pause
+#if defined(SOLARIS_FREALPATHAT_SYSCALL)
+#define __NR_frealpathat                SYS_frealpathat
+#endif /* SOLARIS_FREALPATHAT_SYSCALL */
+#define __NR_stty                       SYS_stty
+#define __NR_gtty                       SYS_gtty
+//#define __NR_nice                       SYS_nice
+//#define __NR_statfs                     SYS_statfs
+//#define __NR_sync                       SYS_sync
+#define __NR_kill                       SYS_kill
+//#define __NR_fstatfs                    SYS_fstatfs
+#define __NR_pgrpsys                    SYS_pgrpsys
+//#define __NR_uucopystr                  SYS_uucopystr
+#define __NR_pipe                       SYS_pipe
+#define __NR_times                      SYS_times
+//#define __NR_profil                     SYS_profil
+#define __NR_faccessat                  SYS_faccessat
+#define __NR_setgid                     SYS_setgid
+#define __NR_getgid                     SYS_getgid
+#define __NR_mknodat                    SYS_mknodat
+//#define __NR_msgsys                     SYS_msgsys
+#define __NR_sysi86                     SYS_sysi86
+//#define __NR_acct                       SYS_acct
+#define __NR_shmsys                     SYS_shmsys
+#define __NR_semsys                     SYS_semsys
+#define __NR_ioctl                      SYS_ioctl
+//#define __NR_uadmin                     SYS_uadmin
+#define __NR_fchownat                   SYS_fchownat
+//#define __NR_utssys                     SYS_utssys
+#define __NR_fdsync                     SYS_fdsync
+#define __NR_execve                     SYS_execve
+#define __NR_umask                      SYS_umask
+#define __NR_chroot                     SYS_chroot
+#define __NR_fcntl                      SYS_fcntl
+//#define __NR_ulimit                     SYS_ulimit
+#define __NR_renameat                   SYS_renameat
+#define __NR_unlinkat                   SYS_unlinkat
+#define __NR_fstatat                    SYS_fstatat
+#define __NR_fstatat64                  SYS_fstatat64
+#define __NR_openat                     SYS_openat
+#define __NR_openat64                   SYS_openat64
+#define __NR_tasksys                    SYS_tasksys
+//#define __NR_acctctl                    SYS_acctctl
+//#define __NR_exacctsys                  SYS_exacctsys
+#define __NR_getpagesizes               SYS_getpagesizes
+//#define __NR_rctlsys                    SYS_rctlsys
+//#define __NR_sidsys                     SYS_sidsys
+#define __NR_lwp_park                   SYS_lwp_park
+#define __NR_sendfilev                  SYS_sendfilev
+#if defined(SOLARIS_LWP_NAME_SYSCALL)
+#define __NR_lwp_name                   SYS_lwp_name
+#endif /* SOLARIS_LWP_NAME_SYSCALL */
+#define __NR_getdents                   SYS_getdents
+#define __NR_privsys                    SYS_privsys
+#define __NR_ucredsys                   SYS_ucredsys
+//#define __NR_sysfs                      SYS_sysfs
+#define __NR_getmsg                     SYS_getmsg
+#define __NR_putmsg                     SYS_putmsg
+#define __NR_setgroups                  SYS_setgroups
+#define __NR_getgroups                  SYS_getgroups
+#define __NR_sigprocmask                SYS_sigprocmask
+//#define __NR_sigsuspend                 SYS_sigsuspend
+#define __NR_sigaltstack                SYS_sigaltstack
+#define __NR_sigaction                  SYS_sigaction
+#define __NR_sigpending                 SYS_sigpending
+#define __NR_context                    SYS_context
+#define __NR_fchmodat                   SYS_fchmodat
+#define __NR_mkdirat                    SYS_mkdirat
+#define __NR_statvfs                    SYS_statvfs
+#define __NR_fstatvfs                   SYS_fstatvfs
+//#define __NR_getloadavg                 SYS_getloadavg
+#define __NR_nfssys                     SYS_nfssys
+#define __NR_waitid                     SYS_waitid
+#define __NR_waitsys                    SYS_waitsys /* = SYS_waitid (historical) */
+//#define __NR_sigsendsys                 SYS_sigsendsys
+//#define __NR_hrtsys                     SYS_hrtsys
+#if defined(SOLARIS_UTIMESYS_SYSCALL)
+#define __NR_utimesys                   SYS_utimesys
+#endif /* SOLARIS_UTIMESYS_SYSCALL */
+#if defined(SOLARIS_UTIMENSAT_SYSCALL)
+#define __NR_utimensat                  SYS_utimensat
+#endif /* SOLARIS_UTIMENSAT_SYSCALL */
+#define __NR_sigresend                  SYS_sigresend
+#define __NR_priocntlsys                SYS_priocntlsys
+#define __NR_pathconf                   SYS_pathconf
+//#define __NR_mincore                    SYS_mincore
+#define __NR_mmap                       SYS_mmap
+#define __NR_mprotect                   SYS_mprotect
+#define __NR_munmap                     SYS_munmap
+//#define __NR_fpathconf                  SYS_fpathconf
+//#define __NR_vfork                      SYS_vfork
+#define __NR_fchdir                     SYS_fchdir
+#define __NR_readv                      SYS_readv
+#define __NR_writev                     SYS_writev
+#if defined(SOLARIS_UUIDSYS_SYSCALL)
+#define __NR_uuidsys                    SYS_uuidsys
+#endif /* SOLARIS_UUIDSYS_SYSCALL */
+#define __NR_mmapobj                    SYS_mmapobj
+#define __NR_setrlimit                  SYS_setrlimit
+#define __NR_getrlimit                  SYS_getrlimit
+#define __NR_memcntl                    SYS_memcntl
+#define __NR_getpmsg                    SYS_getpmsg
+#define __NR_putpmsg                    SYS_putpmsg
+#define __NR_uname                      SYS_uname
+#define __NR_setegid                    SYS_setegid
+#define __NR_sysconfig                  SYS_sysconfig
+//#define __NR_adjtime                    SYS_adjtime
+#define __NR_systeminfo                 SYS_systeminfo
+//#define __NR_sharefs                    SYS_sharefs
+#define __NR_seteuid                    SYS_seteuid
+#define __NR_forksys                    SYS_forksys
+#define __NR_sigtimedwait               SYS_sigtimedwait
+//#define __NR_lwp_info                   SYS_lwp_info
+#define __NR_yield                      SYS_yield
+#define __NR_lwp_sema_post              SYS_lwp_sema_post
+#define __NR_lwp_sema_trywait           SYS_lwp_sema_trywait
+#define __NR_lwp_detach                 SYS_lwp_detach
+//#define __NR_corectl                    SYS_corectl
+//#define __NR_modctl                     SYS_modctl
+#define __NR_fchroot                    SYS_fchroot
+#if defined(SOLARIS_SYSTEM_STATS_SYSCALL)
+#define __NR_system_stats               SYS_system_stats
+#endif /* SOLARIS_SYSTEM_STATS_SYSCALL */
+//#define __NR_vhangup                    SYS_vhangup
+#define __NR_gettimeofday               SYS_gettimeofday
+#define __NR_getitimer                  SYS_getitimer
+#define __NR_setitimer                  SYS_setitimer
+#define __NR_lwp_create                 SYS_lwp_create
+#define __NR_lwp_exit                   SYS_lwp_exit
+#define __NR_lwp_suspend                SYS_lwp_suspend
+#define __NR_lwp_continue               SYS_lwp_continue
+#if defined(SOLARIS_LWP_SIGQUEUE_SYSCALL)
+#define __NR_lwp_sigqueue               SYS_lwp_sigqueue
+#else
+#define __NR_lwp_kill                   SYS_lwp_kill
+#endif /* SOLARIS_LWP_SIGQUEUE_SYSCALL */
+#define __NR_lwp_self                   SYS_lwp_self
+#define __NR_lwp_sigmask                SYS_lwp_sigmask
+#define __NR_lwp_private                SYS_lwp_private
+#define __NR_lwp_wait                   SYS_lwp_wait
+#define __NR_lwp_mutex_wakeup           SYS_lwp_mutex_wakeup
+#define __NR_lwp_cond_wait              SYS_lwp_cond_wait
+//#define __NR_lwp_cond_signal            SYS_lwp_cond_signal
+#define __NR_lwp_cond_broadcast         SYS_lwp_cond_broadcast
+#define __NR_pread                      SYS_pread
+#define __NR_pwrite                     SYS_pwrite
+#define __NR_llseek                     SYS_llseek
+//#define __NR_inst_sync                  SYS_inst_sync
+//#define __NR_brand                      SYS_brand
+//#define __NR_kaio                       SYS_kaio
+//#define __NR_cpc                        SYS_cpc
+//#define __NR_lgrpsys                    SYS_lgrpsys
+//#define __NR_meminfosys                 SYS_meminfosys /* = SYS_lgrpsys */
+#define __NR_rusagesys                  SYS_rusagesys
+#define __NR_port                       SYS_port
+#define __NR_pollsys                    SYS_pollsys
+#define __NR_labelsys                   SYS_labelsys
+#define __NR_acl                        SYS_acl
+#define __NR_auditsys                   SYS_auditsys
+//#define __NR_processor_bind             SYS_processor_bind
+//#define __NR_processor_info             SYS_processor_info
+#define __NR_p_online                   SYS_p_online
+#define __NR_sigqueue                   SYS_sigqueue
+#define __NR_clock_gettime              SYS_clock_gettime
+#define __NR_clock_settime              SYS_clock_settime
+#define __NR_clock_getres               SYS_clock_getres
+#define __NR_timer_create               SYS_timer_create
+#define __NR_timer_delete               SYS_timer_delete
+#define __NR_timer_settime              SYS_timer_settime
+#define __NR_timer_gettime              SYS_timer_gettime
+#define __NR_timer_getoverrun           SYS_timer_getoverrun
+#define __NR_nanosleep                  SYS_nanosleep
+#define __NR_facl                       SYS_facl
+#define __NR_door                       SYS_door
+#define __NR_setreuid                   SYS_setreuid
+#define __NR_setregid                   SYS_setregid
+//#define __NR_install_utrap              SYS_install_utrap
+//#define __NR_signotify                  SYS_signotify
+#define __NR_schedctl                   SYS_schedctl
+#define __NR_pset                       SYS_pset
+//#define SYS_sparc_utrap_install
+#define __NR_resolvepath                SYS_resolvepath
+#define __NR_lwp_mutex_timedlock        SYS_lwp_mutex_timedlock
+#define __NR_lwp_sema_timedwait         SYS_lwp_sema_timedwait
+#define __NR_lwp_rwlock_sys             SYS_lwp_rwlock_sys
+#define __NR_getdents64                 SYS_getdents64
+#define __NR_mmap64                     SYS_mmap64
+#define __NR_statvfs64                  SYS_statvfs64
+#define __NR_fstatvfs64                 SYS_fstatvfs64
+#define __NR_setrlimit64                SYS_setrlimit64
+#define __NR_getrlimit64                SYS_getrlimit64
+#define __NR_pread64                    SYS_pread64
+#define __NR_pwrite64                   SYS_pwrite64
+//#define __NR_rpcsys                     SYS_rpcsys
+#define __NR_zone                       SYS_zone
+//#define __NR_autofssys                  SYS_autofssys
+#define __NR_getcwd                     SYS_getcwd
+#define __NR_so_socket                  SYS_so_socket
+#define __NR_so_socketpair              SYS_so_socketpair
+#define __NR_bind                       SYS_bind
+#define __NR_listen                     SYS_listen
+#define __NR_accept                     SYS_accept
+#define __NR_connect                    SYS_connect
+#define __NR_shutdown                   SYS_shutdown
+#define __NR_recv                       SYS_recv
+#define __NR_recvfrom                   SYS_recvfrom
+#define __NR_recvmsg                    SYS_recvmsg
+#define __NR_send                       SYS_send
+#define __NR_sendmsg                    SYS_sendmsg
+#define __NR_sendto                     SYS_sendto
+#define __NR_getpeername                SYS_getpeername
+#define __NR_getsockname                SYS_getsockname
+#define __NR_getsockopt                 SYS_getsockopt
+#define __NR_setsockopt                 SYS_setsockopt
+//#define __NR_sockconfig                 SYS_sockconfig
+//#define __NR_ntp_gettime                SYS_ntp_gettime
+//#define __NR_ntp_adjtime                SYS_ntp_adjtime
+//#define __NR_lwp_mutex_unlock           SYS_lwp_mutex_unlock
+//#define __NR_lwp_mutex_trylock          SYS_lwp_mutex_trylock
+#define __NR_lwp_mutex_register         SYS_lwp_mutex_register
+//#define __NR_cladm                      SYS_cladm
+#define __NR_uucopy                     SYS_uucopy
+#define __NR_umount2                    SYS_umount2
+
+/* The following syscalls were removed in Solaris 11 (see
+   https://wikis.oracle.com/display/DTrace/syscall+Provider). Valgrind's core
+   cannot use these syscalls but wrappers have to be provided for them because
+   they are still in use on illumos.
+*/
+#if defined(SOLARIS_OLD_SYSCALLS)
+#define __NR_open                       SYS_open
+#define __NR_link                       SYS_link
+#define __NR_unlink                     SYS_unlink
+#define __NR_mknod                      SYS_mknod
+#define __NR_chmod                      SYS_chmod
+#define __NR_chown                      SYS_chown
+#define __NR_stat                       SYS_stat
+#define __NR_fstat                      SYS_fstat
+#define __NR_access                     SYS_access
+#define __NR_rmdir                      SYS_rmdir
+#define __NR_mkdir                      SYS_mkdir
+#define __NR_lstat                      SYS_lstat
+#define __NR_symlink                    SYS_symlink
+#define __NR_readlink                   SYS_readlink
+#define __NR_fchmod                     SYS_fchmod
+#define __NR_fchown                     SYS_fchown
+#define __NR_lchown                     SYS_lchown
+#define __NR_rename                     SYS_rename
+#define __NR_stat64                     SYS_stat64
+#define __NR_lstat64                    SYS_lstat64
+#define __NR_fstat64                    SYS_fstat64
+#define __NR_open64                     SYS_open64
+#endif /* SOLARIS_OLD_SYSCALLS */
+
+/*
+#define __NR_null \
+   VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(T_FNULL)
+#define __NR_fgetfp \
+   VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(T_FGETFP)
+#define __NR_fsetfp \
+   VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(T_FSETFP)
+*/
+#define __NR_gethrtime \
+   VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(T_GETHRTIME)
+#define __NR_gethrvtime \
+   VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(T_GETHRVTIME)
+#define __NR_gethrestime \
+   VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(T_GETHRESTIME)
+/*
+#define __NR_getlgrp \
+   VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(T_GETLGRP)
+*/
+#if defined(SOLARIS_GETHRT_FASTTRAP)
+#define __NR_gethrt \
+   VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(T_GETHRT)
+#endif /* SOLARIS_GETHRT_FASTTRAP */
+#if defined(SOLARIS_GETZONEOFFSET_FASTTRAP)
+#define __NR_getzoneoffset \
+   VG_SOLARIS_SYSCALL_CONSTRUCT_FASTTRAP(T_GETZONEOFFSET)
+#endif /* SOLARIS_GETZONEOFFSET_FASTTRAP */
+
+#endif /* __VKI_SCNUMS_SOLARIS_H */
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/include/vki/vki-scnums-tilegx-linux.h b/include/vki/vki-scnums-tilegx-linux.h
index 3a78030..cc248b2 100644
--- a/include/vki/vki-scnums-tilegx-linux.h
+++ b/include/vki/vki-scnums-tilegx-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2010-2013 Tilera Corp.
+   Copyright (C) 2010-2015 Tilera Corp.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/include/vki/vki-scnums-x86-linux.h b/include/vki/vki-scnums-x86-linux.h
index eee5964..5479b3e 100644
--- a/include/vki/vki-scnums-x86-linux.h
+++ b/include/vki/vki-scnums-x86-linux.h
@@ -8,7 +8,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/include/vki/vki-solaris-repcache.h b/include/vki/vki-solaris-repcache.h
new file mode 100644
index 0000000..d126b33
--- /dev/null
+++ b/include/vki/vki-solaris-repcache.h
@@ -0,0 +1,333 @@
+/*--------------------------------------------------------------------*/
+/*--- Solaris-specific kernel interface for the repository cache   ---*/
+/*--- protocol.                             vki-solaris-repcache.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2015-2015 Ivo Raisr
+      ivosh@ivosh.net
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Copyright 2015-2015, Tomas Jedlicka <jedlickat@gmail.com>. */
+
+#ifndef __VKI_SOLARIS_REPCACHE_H
+#define __VKI_SOLARIS_REPCACHE_H
+
+/* From <repcache_protocol.h> which is consolidation private. */
+#define VKI_REPOSITORY_DOOR_BASEVER (('R' << 24) | ('e' << 16) | ('p' << 8))
+
+#if (SOLARIS_REPCACHE_PROTOCOL_VERSION == 21)
+#define VKI_REPOSITORY_DOOR_VERSION (21 + VKI_REPOSITORY_DOOR_BASEVER)
+enum vki_rep_protocol_requestid {
+   VKI_REP_PROTOCOL_CLOSE = ('C' << 8),
+   VKI_REP_PROTOCOL_ENTITY_SETUP,
+   VKI_REP_PROTOCOL_ENTITY_NAME,
+   VKI_REP_PROTOCOL_ENTITY_PARENT_TYPE,
+   VKI_REP_PROTOCOL_ENTITY_GET_CHILD,
+   VKI_REP_PROTOCOL_ENTITY_GET_PARENT,
+   VKI_REP_PROTOCOL_ENTITY_GET,
+   VKI_REP_PROTOCOL_ENTITY_UPDATE,
+   VKI_REP_PROTOCOL_ENTITY_CREATE_CHILD,
+   VKI_REP_PROTOCOL_ENTITY_CREATE_PG,
+   VKI_REP_PROTOCOL_ENTITY_DELETE,
+   VKI_REP_PROTOCOL_ENTITY_RESET,
+   VKI_REP_PROTOCOL_ENTITY_TEARDOWN,
+   VKI_REP_PROTOCOL_ITER_SETUP,
+   VKI_REP_PROTOCOL_ITER_START,
+   VKI_REP_PROTOCOL_ITER_READ,
+   VKI_REP_PROTOCOL_ITER_READ_VALUE,
+   VKI_REP_PROTOCOL_ITER_RESET,
+   VKI_REP_PROTOCOL_ITER_TEARDOWN,
+   VKI_REP_PROTOCOL_NEXT_SNAPLEVEL,
+   VKI_REP_PROTOCOL_SNAPSHOT_TAKE,
+   VKI_REP_PROTOCOL_SNAPSHOT_TAKE_NAMED,
+   VKI_REP_PROTOCOL_SNAPSHOT_ATTACH,
+   VKI_REP_PROTOCOL_PROPERTY_GET_TYPE,
+   VKI_REP_PROTOCOL_PROPERTY_GET_VALUE,
+   VKI_REP_PROTOCOL_PROPERTYGRP_SETUP_WAIT,
+   VKI_REP_PROTOCOL_PROPERTYGRP_TX_START,
+   VKI_REP_PROTOCOL_PROPERTYGRP_TX_COMMIT,
+   VKI_REP_PROTOCOL_CLIENT_ADD_NOTIFY,
+   VKI_REP_PROTOCOL_CLIENT_WAIT,
+   VKI_REP_PROTOCOL_BACKUP,
+   VKI_REP_PROTOCOL_SET_AUDIT_ANNOTATION,
+   VKI_REP_PROTOCOL_SWITCH,
+};
+#elif (SOLARIS_REPCACHE_PROTOCOL_VERSION == 23)
+#define VKI_REPOSITORY_DOOR_VERSION (23 + VKI_REPOSITORY_DOOR_BASEVER)
+enum vki_rep_protocol_requestid {
+   VKI_REP_PROTOCOL_CLOSE = ('C' << 8),
+   VKI_REP_PROTOCOL_ENTITY_SETUP,
+   VKI_REP_PROTOCOL_ENTITY_NAME,
+   VKI_REP_PROTOCOL_ENTITY_PARENT_TYPE,
+   VKI_REP_PROTOCOL_ENTITY_GET_CHILD,
+   VKI_REP_PROTOCOL_ENTITY_GET_PARENT,
+   VKI_REP_PROTOCOL_ENTITY_GET,
+   VKI_REP_PROTOCOL_ENTITY_UPDATE,
+   VKI_REP_PROTOCOL_ENTITY_CREATE_CHILD,
+   VKI_REP_PROTOCOL_ENTITY_CREATE_PG,
+   VKI_REP_PROTOCOL_ENTITY_DELETE,
+   VKI_REP_PROTOCOL_ENTITY_UNDELETE,
+   VKI_REP_PROTOCOL_ENTITY_REMOVE,
+   VKI_REP_PROTOCOL_ENTITY_DELCUST,
+   VKI_REP_PROTOCOL_BUNDLE_REMOVE,
+   VKI_REP_PROTOCOL_ENTITY_RESET,
+   VKI_REP_PROTOCOL_ENTITY_TEARDOWN,
+   VKI_REP_PROTOCOL_ITER_SETUP,
+   VKI_REP_PROTOCOL_ITER_START,
+   VKI_REP_PROTOCOL_ITER_READ,
+   VKI_REP_PROTOCOL_ITER_READ_VALUE,
+   VKI_REP_PROTOCOL_ITER_RESET,
+   VKI_REP_PROTOCOL_ITER_TEARDOWN,
+   VKI_REP_PROTOCOL_NEXT_SNAPLEVEL,
+   VKI_REP_PROTOCOL_SNAPSHOT_TAKE,
+   VKI_REP_PROTOCOL_SNAPSHOT_TAKE_NAMED,
+   VKI_REP_PROTOCOL_SNAPSHOT_ATTACH,
+   VKI_REP_PROTOCOL_PROPERTY_GET_TYPE,
+   VKI_REP_PROTOCOL_PROPERTY_GET_VALUE,
+   VKI_REP_PROTOCOL_PG_SETUP_WAIT,
+   VKI_REP_PROTOCOL_PG_TX_START,
+   VKI_REP_PROTOCOL_PG_TX_COMMIT,
+   VKI_REP_PROTOCOL_PROP_BUNDLE_REMOVE,
+   VKI_REP_PROTOCOL_CLIENT_ADD_NOTIFY,
+   VKI_REP_PROTOCOL_CLIENT_WAIT,
+   VKI_REP_PROTOCOL_BACKUP,
+   VKI_REP_PROTOCOL_SET_AUDIT_ANNOTATION,
+   VKI_REP_PROTOCOL_UNSET_AUDIT_ANNOTATION,
+   VKI_REP_PROTOCOL_SET_TX_DECORATION,
+   VKI_REP_PROTOCOL_SWITCH,
+   VKI_REP_PROTOCOL_DECORATION_GET_LAYER,
+   VKI_REP_PROTOCOL_DECORATION_GET_TYPE,
+   VKI_REP_PROTOCOL_DECORATION_GET_VALUE,
+   VKI_REP_PROTOCOL_DECORATION_GET_BUNDLE,
+   VKI_REP_PROTOCOL_ENTITY_INCONFLICT,
+   VKI_REP_PROTOCOL_ENTITY_IS_MASKED,
+   VKI_REP_PROTOCOL_CLIENT_REMOVE_NOTIFY,
+};
+#elif (SOLARIS_REPCACHE_PROTOCOL_VERSION == 25)
+#define VKI_REPOSITORY_DOOR_VERSION (25 + VKI_REPOSITORY_DOOR_BASEVER)
+enum vki_rep_protocol_requestid {
+   VKI_REP_PROTOCOL_CLOSE = ('C' << 8),
+   VKI_REP_PROTOCOL_ENTITY_SETUP,
+   VKI_REP_PROTOCOL_ENTITY_NAME,
+   VKI_REP_PROTOCOL_ENTITY_FMRI,
+   VKI_REP_PROTOCOL_ENTITY_PARENT_TYPE,
+   VKI_REP_PROTOCOL_ENTITY_GET_CHILD,
+   VKI_REP_PROTOCOL_ENTITY_GET_PARENT,
+   VKI_REP_PROTOCOL_ENTITY_GET_ROOT,
+   VKI_REP_PROTOCOL_ENTITY_GET,
+   VKI_REP_PROTOCOL_ENTITY_UPDATE,
+   VKI_REP_PROTOCOL_ENTITY_CREATE_CHILD,
+   VKI_REP_PROTOCOL_ENTITY_CREATE_PG,
+   VKI_REP_PROTOCOL_ENTITY_DELETE,
+   VKI_REP_PROTOCOL_ENTITY_UNDELETE,
+   VKI_REP_PROTOCOL_ENTITY_REMOVE,
+   VKI_REP_PROTOCOL_ENTITY_DELCUST,
+   VKI_REP_PROTOCOL_BUNDLE_REMOVE,
+   VKI_REP_PROTOCOL_ENTITY_RESET,
+   VKI_REP_PROTOCOL_ENTITY_TEARDOWN,
+   VKI_REP_PROTOCOL_ITER_SETUP,
+   VKI_REP_PROTOCOL_ITER_START,
+   VKI_REP_PROTOCOL_ITER_READ,
+   VKI_REP_PROTOCOL_ITER_READ_VALUE,
+   VKI_REP_PROTOCOL_ITER_RESET,
+   VKI_REP_PROTOCOL_ITER_TEARDOWN,
+   VKI_REP_PROTOCOL_NEXT_SNAPLEVEL,
+   VKI_REP_PROTOCOL_SNAPSHOT_TAKE,
+   VKI_REP_PROTOCOL_SNAPSHOT_TAKE_NAMED,
+   VKI_REP_PROTOCOL_SNAPSHOT_ATTACH,
+   VKI_REP_PROTOCOL_PROPERTY_GET_TYPE,
+   VKI_REP_PROTOCOL_PROPERTY_GET_VALUE,
+   VKI_REP_PROTOCOL_PG_SETUP_WAIT,
+   VKI_REP_PROTOCOL_PG_TX_START,
+   VKI_REP_PROTOCOL_PG_TX_COMMIT,
+   VKI_REP_PROTOCOL_PROP_BUNDLE_REMOVE,
+   VKI_REP_PROTOCOL_CLIENT_ADD_NOTIFY,
+   VKI_REP_PROTOCOL_CLIENT_WAIT,
+   VKI_REP_PROTOCOL_BACKUP,
+   VKI_REP_PROTOCOL_SET_AUDIT_ANNOTATION,
+   VKI_REP_PROTOCOL_UNSET_AUDIT_ANNOTATION,
+   VKI_REP_PROTOCOL_SET_TX_DECORATION,
+   VKI_REP_PROTOCOL_SWITCH,
+   VKI_REP_PROTOCOL_DECORATION_GET_LAYER,
+   VKI_REP_PROTOCOL_DECORATION_GET_TYPE,
+   VKI_REP_PROTOCOL_DECORATION_GET_VALUE,
+   VKI_REP_PROTOCOL_DECORATION_GET_BUNDLE,
+   VKI_REP_PROTOCOL_ENTITY_INCONFLICT,
+   VKI_REP_PROTOCOL_ENTITY_IS_MASKED,
+   VKI_REP_PROTOCOL_CLIENT_REMOVE_NOTIFY,
+};
+#elif (SOLARIS_REPCACHE_PROTOCOL_VERSION == 26)
+#define VKI_REPOSITORY_DOOR_VERSION (26 + VKI_REPOSITORY_DOOR_BASEVER)
+enum vki_rep_protocol_requestid {
+   VKI_REP_PROTOCOL_CLOSE = ('C' << 8),
+   VKI_REP_PROTOCOL_ENTITY_SETUP,
+   VKI_REP_PROTOCOL_ENTITY_NAME,
+   VKI_REP_PROTOCOL_ENTITY_FMRI,
+   VKI_REP_PROTOCOL_ENTITY_PARENT_TYPE,
+   VKI_REP_PROTOCOL_ENTITY_GET_CHILD,
+   VKI_REP_PROTOCOL_ENTITY_GET_PARENT,
+   VKI_REP_PROTOCOL_ENTITY_GET_ROOT,
+   VKI_REP_PROTOCOL_ENTITY_GET,
+   VKI_REP_PROTOCOL_ENTITY_UPDATE,
+   VKI_REP_PROTOCOL_ENTITY_CREATE_CHILD,
+   VKI_REP_PROTOCOL_ENTITY_CREATE_PG,
+   VKI_REP_PROTOCOL_ENTITY_DELETE,
+   VKI_REP_PROTOCOL_ENTITY_UNDELETE,
+   VKI_REP_PROTOCOL_ENTITY_REMOVE,
+   VKI_REP_PROTOCOL_ENTITY_DELCUST,
+   VKI_REP_PROTOCOL_BUNDLE_REMOVE,
+   VKI_REP_PROTOCOL_ENTITY_RESET,
+   VKI_REP_PROTOCOL_ENTITY_TEARDOWN,
+   VKI_REP_PROTOCOL_ITER_SETUP,
+   VKI_REP_PROTOCOL_ITER_START,
+   VKI_REP_PROTOCOL_ITER_READ,
+   VKI_REP_PROTOCOL_ITER_READ_VALUE,
+   VKI_REP_PROTOCOL_ITER_RESET,
+   VKI_REP_PROTOCOL_ITER_TEARDOWN,
+   VKI_REP_PROTOCOL_NEXT_SNAPLEVEL,
+   VKI_REP_PROTOCOL_SNAPSHOT_TAKE,
+   VKI_REP_PROTOCOL_SNAPSHOT_TAKE_NAMED,
+   VKI_REP_PROTOCOL_SNAPSHOT_ATTACH,
+   VKI_REP_PROTOCOL_PROPERTY_GET_TYPE,
+   VKI_REP_PROTOCOL_PROPERTY_GET_VALUE,
+   VKI_REP_PROTOCOL_PG_SETUP_WAIT,
+   VKI_REP_PROTOCOL_PG_TX_START,
+   VKI_REP_PROTOCOL_PG_TX_COMMIT,
+   VKI_REP_PROTOCOL_PROP_BUNDLE_REMOVE,
+   VKI_REP_PROTOCOL_CLIENT_ADD_NOTIFY,
+   VKI_REP_PROTOCOL_CLIENT_WAIT,
+   VKI_REP_PROTOCOL_BACKUP,
+   VKI_REP_PROTOCOL_SET_AUDIT_ANNOTATION,
+   VKI_REP_PROTOCOL_UNSET_AUDIT_ANNOTATION,
+   VKI_REP_PROTOCOL_SET_TX_DECORATION,
+   VKI_REP_PROTOCOL_SWITCH,
+   VKI_REP_PROTOCOL_DECORATION_GET_LAYER,
+   VKI_REP_PROTOCOL_DECORATION_GET_TYPE,
+   VKI_REP_PROTOCOL_DECORATION_GET_VALUE,
+   VKI_REP_PROTOCOL_DECORATION_GET_BUNDLE,
+   VKI_REP_PROTOCOL_ENTITY_INCONFLICT,
+   VKI_REP_PROTOCOL_ENTITY_IS_MASKED,
+   VKI_REP_PROTOCOL_CLIENT_REMOVE_NOTIFY,
+   VKI_REP_PROTOCOL_MAX_REQUEST
+};
+#else
+#error Unsupported repcache protocol version
+#endif
+
+#define VKI_REPOSITORY_DOOR_NAME "/system/volatile/repository_door"
+#define VKI_REP_PROTOCOL_NAME_LEN 120
+enum vki_repository_door_requestid {
+   VKI_REPOSITORY_DOOR_REQUEST_CONNECT = (('M' << 8) | 1)
+};
+enum vki_repository_door_statusid {
+   VKI_REPOSITORY_DOOR_SUCCESS                = 0,
+   VKI_REPOSITORY_DOOR_FAIL_BAD_REQUEST       = 1,
+   VKI_REPOSITORY_DOOR_FAIL_VERSION_MISMATCH  = 2,
+   VKI_REPOSITORY_DOOR_FAIL_BAD_FLAG          = 3,
+   VKI_REPOSITORY_DOOR_FAIL_NO_RESOURCES      = 4,
+   VKI_REPOSITORY_DOOR_FAIL_PERMISSION_DENIED = 5
+};
+typedef struct vki_repository_door_request {
+   vki_uint32_t rdr_version;
+   enum vki_repository_door_requestid rdr_request;
+   vki_uint32_t rdr_flags;
+   vki_uint32_t rdr_debug;
+} vki_repository_door_request_t;
+typedef struct vki_repository_door_response {
+   enum vki_repository_door_statusid rdr_status;
+} vki_repository_door_response_t;
+typedef struct vki_rep_protocol_request {
+   enum vki_rep_protocol_requestid rpr_request;
+} vki_rep_protocol_request_t;
+struct vki_rep_protocol_entity_setup {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_entityid;
+   vki_uint32_t rpr_entitytype;
+};
+struct vki_rep_protocol_entity_name {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_entityid;
+   vki_uint32_t rpr_answertype;
+};
+struct vki_rep_protocol_entity_get {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_entityid;
+   vki_uint32_t rpr_object;
+};
+struct vki_rep_protocol_entity_get_child {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_entityid;
+   vki_uint32_t rpr_childid;
+   char rpr_name[VKI_REP_PROTOCOL_NAME_LEN];
+};
+struct vki_rep_protocol_entity_parent {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_entityid;
+   vki_uint32_t rpr_outid;
+};
+struct vki_rep_protocol_entity_root {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_entityid;
+   vki_uint32_t rpr_outid;
+};
+struct vki_rep_protocol_entity_reset {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_entityid;
+};
+struct vki_rep_protocol_entity_teardown {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_entityid;
+};
+struct vki_rep_protocol_iter_read {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_iterid;
+   vki_uint32_t rpr_sequence;
+   vki_uint32_t rpr_entityid;
+};
+struct vki_rep_protocol_iter_read_value {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_iterid;
+   vki_uint32_t rpr_sequence;
+};
+struct vki_rep_protocol_iter_request {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_iterid;
+};
+struct vki_rep_protocol_iter_start {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_iterid;
+   vki_uint32_t rpr_entity;
+   vki_uint32_t rpr_itertype;
+   vki_uint32_t rpr_flags;
+   char rpr_pattern[VKI_REP_PROTOCOL_NAME_LEN];
+};
+struct vki_rep_protocol_property_request {
+   enum vki_rep_protocol_requestid rpr_request;
+   vki_uint32_t rpr_entityid;
+};
+
+
+
+
+#endif /* __VKI_SOLARIS_REPCACHE_21_H */
diff --git a/include/vki/vki-solaris.h b/include/vki/vki-solaris.h
new file mode 100644
index 0000000..cc3b9d9
--- /dev/null
+++ b/include/vki/vki-solaris.h
@@ -0,0 +1,1646 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Solaris-specific kernel interface.             vki-solaris.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2011-2015 Petr Pavlu
+      setup@dagobah.cz
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Copyright 2013-2015, Ivo Raisr <ivosh@ivosh.net> */
+
+/* Copyright 2013, OmniTI Computer Consulting, Inc. All rights reserved. */
+
+/* The purpose of this file is described in vki-linux.h.
+
+   To avoid any copyright issues, vki-solaris.h follows the same approach as
+   vki-darwin.h (not copying anything from kernel header files but instead
+   just including them).
+ */
+
+#ifndef __VKI_SOLARIS_H
+#define __VKI_SOLARIS_H
+
+#include "../../config.h"
+
+/* _XOPEN_SOURCE equal to at least '500' is required so that various system
+   structures have all necessary attributes (for example struct msghdr). */
+#if !defined(_XOPEN_SOURCE)
+/* Compiler versions c99 and higher require _XOPEN_SOURCE at least '600'. */
+#   if (__STDC_VERSION__ - 0 >= 199901L)
+#      define _XOPEN_SOURCE 600
+#   else
+#      define _XOPEN_SOURCE 500
+#   endif
+#elif (_XOPEN_SOURCE - 0 != 500) && (_XOPEN_SOURCE - 0 != 600) && (_XOPEN_SOURCE - 0 != 700)
+#   error "Compiler or options invalid for including this header file."
+#endif /* _XOPEN_SOURCE */
+
+#define __EXTENSIONS__ 1
+/* assert _FILE_OFFSET_BITS == 32 */
+
+#define VKI_PAGE_SHIFT 12
+#define VKI_PAGE_SIZE (1UL << VKI_PAGE_SHIFT)
+#define VKI_PAGEMASK (~VKI_PAGEOFFSET)
+#define VKI_PAGEOFFSET (VKI_PAGE_SIZE - 1)
+#define VKI_MAX_PAGE_SHIFT VKI_PAGE_SHIFT
+#define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE
+
+
+#include <sys/types.h>
+#define VKI_UINT_MAX UINT_MAX
+#define VKI_UINTPTR_MAX UINTPTR_MAX
+#define vki_boolean_t boolean_t
+#define vki_datalink_id_t datalink_id_t
+#define vki_uint_t uint_t
+#define vki_uint32_t uint32_t
+#define vki_uint64_t uint64_t
+#define vki_ulong_t ulong_t
+#define vki_caddr_t caddr_t
+#define vki_dev_t dev_t
+#define vki_off_t off_t
+#define vki_id_t id_t
+#define vki_key_t key_t
+#define vki_mode_t mode_t
+#define vki_o_dev_t o_dev_t
+#define vki_projid_t projid_t
+#define vki_uid_t uid_t
+#define vki_gid_t gid_t
+#define vki_pid_t pid_t
+#define vki_size_t size_t
+#define vki_time_t time_t
+#define vki_timer_t timer_t
+#define vki_uchar_t uchar_t
+
+typedef uint32_t vki_u32;
+
+
+#include <sys/types32.h>
+#define vki_size32_t size32_t
+
+
+#include <fcntl.h>
+#define VKI_SEEK_SET SEEK_SET
+
+
+#include <limits.h>
+#define VKI_NGROUPS_MAX NGROUPS_MAX
+#define VKI_PATH_MAX PATH_MAX
+/* Used in launcher-linux.c which we share with Linux port. */
+#define VKI_BINPRM_BUF_SIZE VKI_PATH_MAX
+
+
+#include <ucred.h>
+#define vki_ucred_t ucred_t
+
+
+#include <unistd.h>
+#define VKI_R_OK R_OK
+#define VKI_W_OK W_OK
+#define VKI_X_OK X_OK
+
+
+#include <bsm/audit.h>
+#define VKI_A_GETAMASK A_GETAMASK
+#define VKI_A_GETCAR A_GETCAR
+#define VKI_A_GETCLASS A_GETCLASS
+#define VKI_A_GETCOND A_GETCOND
+#define VKI_A_GETCWD A_GETCWD
+#define VKI_A_GETKAUDIT A_GETKAUDIT
+#define VKI_A_GETKMASK A_GETKMASK
+#define VKI_A_GETPINFO A_GETPINFO
+#define VKI_A_GETPINFO_ADDR A_GETPINFO_ADDR
+#define VKI_A_GETPOLICY A_GETPOLICY
+#define VKI_A_GETQCTRL A_GETQCTRL
+#define VKI_A_GETSTAT A_GETSTAT
+#define VKI_A_SETAMASK A_SETAMASK
+#define VKI_A_SETCLASS A_SETCLASS
+#define VKI_A_SETCOND A_SETCOND
+#define VKI_A_SETKAUDIT A_SETKAUDIT
+#define VKI_A_SETKMASK A_SETKMASK
+#define VKI_A_SETPMASK A_SETPMASK
+#define VKI_A_SETPOLICY A_SETPOLICY
+#define VKI_A_SETQCTRL A_SETQCTRL
+#define VKI_A_SETSMASK A_SETSMASK
+#define VKI_A_SETSTAT A_SETSTAT
+#define VKI_A_SETUMASK A_SETUMASK
+#define VKI_BSM_AUDIT BSM_AUDIT
+#define VKI_BSM_AUDITCTL BSM_AUDITCTL
+#define VKI_BSM_AUDITDOOR BSM_AUDITDOOR
+#define VKI_BSM_GETAUDIT BSM_GETAUDIT
+#define VKI_BSM_GETAUDIT_ADDR BSM_GETAUDIT_ADDR
+#define VKI_BSM_GETAUID BSM_GETAUID
+#define VKI_BSM_SETAUDIT BSM_SETAUDIT
+#define VKI_BSM_SETAUDIT_ADDR BSM_SETAUDIT_ADDR
+#define VKI_BSM_SETAUID BSM_SETAUID
+#define vki_au_evclass_map_t au_evclass_map_t
+#define vki_au_id_t au_id_t
+#define vki_au_mask_t au_mask_t
+#define vki_au_qctrl au_qctrl
+#define vki_au_stat_t au_stat_t
+#define vki_auditinfo_t auditinfo_t
+#define vki_auditinfo_addr_t auditinfo_addr_t
+#define vki_auditpinfo auditpinfo
+#define vki_auditpinfo_addr auditpinfo_addr
+
+
+#include <sys/psw.h>
+#define VKI_PSL_USER PSL_USER
+
+
+#include <ia32/sys/trap.h>
+#define VKI_T_BPTFLT T_BPTFLT
+
+
+/* From <libc/inc/libc_int.h> which is consolidation private. */
+#define VKI_CI_BIND_GUARD 4
+#define VKI_CI_BIND_CLEAR 5
+#define VKI_THR_FLG_RTLD 0x01
+
+typedef struct {
+   int ci_tag;
+   union {
+      int (*ci_func)(int);
+      long ci_val;
+      char *ci_ptr;
+   } vki_ci_un;
+} vki_Lc_interface;
+
+
+/* From <libc/port/gen/getxby_door.h> which is consolidation private. */
+#if defined(SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE)
+#define VKI_NAME_SERVICE_DOOR "/system/volatile/name_service_door"
+#else
+#define VKI_NAME_SERVICE_DOOR "/var/run/name_service_door"
+#endif /* SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE */
+
+
+#include <nfs/nfs.h>
+#include <nfs/nfssys.h>
+#define VKI_NFS_REVAUTH NFS_REVAUTH
+#define vki_nfs_revauth_args nfs_revauth_args
+
+
+#include <net/if.h>
+#define vki_ifconf ifconf
+#define vki_ifreq ifreq
+#define vki_lifconf lifconf
+#define vki_lifnum lifnum
+#define vki_lifreq lifreq
+
+
+#include <netinet/in.h>
+#define VKI_IPPROTO_TCP IPPROTO_TCP
+#define vki_in_addr in_addr
+#define vki_sockaddr_in sockaddr_in
+#define vki_sockaddr_in6 sockaddr_in6
+
+#include <netinet/tcp.h>
+#define VKI_TCP_NODELAY TCP_NODELAY
+
+
+/* Do not include nss_dbdefs.h if a C++ compiler is used to build a file
+   which includes vki-solaris.h. This cannot be done because the nss_dbdefs.h
+   header file uses 'delete' keyword as a method name. */
+#if !defined(__cplusplus)
+#include <nss_dbdefs.h>
+#define VKI_NSCD_CALLCAT_APP NSCD_CALLCAT_APP
+#define VKI_NSCDV2CATMASK NSCDV2CATMASK
+#define vki_nss_dbd_t nss_dbd_t
+#define vki_nss_pheader_t nss_pheader_t
+#endif /* !__cplusplus */
+
+
+/* From <repcache_protocol.h> which is consolidation private. */
+#include "vki-solaris-repcache.h"
+
+#include <sys/acl.h>
+#define vki_aclent_t aclent_t
+#define vki_ace_t ace_t
+#define VKI_GETACL GETACL
+#define VKI_SETACL SETACL
+#define VKI_GETACLCNT GETACLCNT
+#define VKI_ACE_GETACL ACE_GETACL
+#define VKI_ACE_SETACL ACE_SETACL
+#define VKI_ACE_GETACLCNT ACE_GETACLCNT
+
+
+#include <sys/auxv.h>
+#define vki_auxv_t auxv_t
+#define VKI_AT_NULL AT_NULL
+#define VKI_AT_PHDR AT_PHDR
+#define VKI_AT_PAGESZ AT_PAGESZ
+#define VKI_AT_BASE AT_BASE
+#define VKI_AT_FLAGS AT_FLAGS
+#define VKI_AT_SUN_PLATFORM AT_SUN_PLATFORM
+#define VKI_AT_SUN_HWCAP AT_SUN_HWCAP
+#define VKI_AT_SUN_EXECNAME AT_SUN_EXECNAME
+#define VKI_AT_SUN_AUXFLAGS AT_SUN_AUXFLAGS
+#if defined(SOLARIS_RESERVE_SYSSTAT_ADDR)
+#define VKI_AT_SUN_SYSSTAT_ADDR AT_SUN_SYSSTAT_ADDR
+#endif
+#if defined(SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR)
+#define VKI_AT_SUN_SYSSTAT_ZONE_ADDR AT_SUN_SYSSTAT_ZONE_ADDR
+#endif
+
+#define VKI_AF_SUN_HWCAPVERIFY AF_SUN_HWCAPVERIFY
+
+
+#include <sys/auxv_386.h>
+#define VKI_AV_386_FPU AV_386_FPU
+#define VKI_AV_386_TSC AV_386_TSC
+#define VKI_AV_386_CX8 AV_386_CX8
+#define VKI_AV_386_SEP AV_386_SEP
+#define VKI_AV_386_AMD_SYSC AV_386_AMD_SYSC
+#define VKI_AV_386_CMOV AV_386_CMOV
+#define VKI_AV_386_MMX AV_386_MMX
+#define VKI_AV_386_FXSR AV_386_FXSR
+#define VKI_AV_386_SSE AV_386_SSE
+#define VKI_AV_386_SSE2 AV_386_SSE2
+#define VKI_AV_386_SSE3 AV_386_SSE3
+#define VKI_AV_386_CX16 AV_386_CX16
+#define VKI_AV_386_AHF AV_386_AHF
+#define VKI_AV_386_TSCP AV_386_TSCP
+#define VKI_AV_386_POPCNT AV_386_POPCNT
+#define VKI_AV_386_AMD_LZCNT AV_386_AMD_LZCNT
+#define VKI_AV_386_SSSE3 AV_386_SSSE3
+#define VKI_AV_386_SSE4_1 AV_386_SSE4_1
+#define VKI_AV_386_SSE4_2 AV_386_SSE4_2
+#define VKI_AV_386_AES AV_386_AES
+#define VKI_AV_386_PCLMULQDQ AV_386_PCLMULQDQ
+#define VKI_AV_386_XSAVE AV_386_XSAVE
+
+
+#include <sys/corectl.h>
+#define VKI_CC_CONTENT_ANON CC_CONTENT_ANON
+#define VKI_CC_CONTENT_DATA CC_CONTENT_DATA
+#define VKI_CC_CONTENT_DISM CC_CONTENT_DISM
+#define VKI_CC_CONTENT_HEAP CC_CONTENT_HEAP
+#define VKI_CC_CONTENT_ISM CC_CONTENT_ISM
+#define VKI_CC_CONTENT_RODATA CC_CONTENT_RODATA
+#define VKI_CC_CONTENT_SHANON CC_CONTENT_SHANON
+#define VKI_CC_CONTENT_SHM CC_CONTENT_SHM
+#define VKI_CC_CONTENT_STACK CC_CONTENT_STACK
+#define VKI_CC_CONTENT_TEXT CC_CONTENT_TEXT
+#define vki_core_content_t core_content_t
+
+
+/* From <sys/crypto/elfsign.h> which is consolidation private. */
+#define VKI__PATH_KCFD_DOOR "/system/volatile/kcfd_door"
+typedef enum vki_ELFsign_status_e {
+   VKI_ELFSIGN_UNKNOWN,
+   VKI_ELFSIGN_SUCCESS,
+   VKI_ELFSIGN_FAILED,
+   VKI_ELFSIGN_NOTSIGNED,
+   VKI_ELFSIGN_INVALID_CERTPATH,
+   VKI_ELFSIGN_INVALID_ELFOBJ,
+   VKI_ELFSIGN_UNAVAILABLE
+} vki_ELFsign_status_t;
+typedef struct vki_kcf_door_arg_s {
+   short         da_version;
+   vki_boolean_t da_iskernel;
+   union {
+      char filename[MAXPATHLEN];	/* For request */
+
+      struct vki_kcf_door_result_s {	/* For response */
+         vki_ELFsign_status_t status;
+         vki_uint32_t         siglen;
+         vki_uchar_t          signature[1];
+      } result;
+   } vki_da_u;
+} vki_kcf_door_arg_t;
+
+
+#include <sys/crypto/ioctl.h>
+#define VKI_CRYPTO_SUCCESS CRYPTO_SUCCESS
+#define VKI_CRYPTO_GET_PROVIDER_LIST CRYPTO_GET_PROVIDER_LIST
+#define vki_crypto_provider_id_t crypto_provider_id_t
+#define vki_crypto_provider_entry_t crypto_provider_entry_t
+#define vki_crypto_get_provider_list_t crypto_get_provider_list_t
+
+
+#include <sys/dirent.h>
+#define VKI_MAXGETDENTS_SIZE MAXGETDENTS_SIZE
+#define vki_dirent dirent
+#define vki_dirent64 dirent64
+
+
+#include <sys/door.h>
+#define vki_door_desc_t door_desc_t
+#define vki_door_info_t door_info_t
+#define vki_door_arg_t door_arg_t
+#define vki_door_results door_results
+#define vki_door_return_desc_t door_return_desc_t
+
+#define VKI_DOOR_CREATE DOOR_CREATE
+#define VKI_DOOR_REVOKE DOOR_REVOKE
+#define VKI_DOOR_INFO DOOR_INFO
+#define VKI_DOOR_CALL DOOR_CALL
+#define VKI_DOOR_BIND DOOR_BIND
+#define VKI_DOOR_UNBIND DOOR_UNBIND
+#define VKI_DOOR_UNREFSYS DOOR_UNREFSYS
+#define VKI_DOOR_UCRED DOOR_UCRED
+#define VKI_DOOR_RETURN DOOR_RETURN
+#define VKI_DOOR_GETPARAM DOOR_GETPARAM
+#define VKI_DOOR_SETPARAM DOOR_SETPARAM
+
+
+#include <sys/dtrace.h>
+#define VKI_DTRACEHIOC_REMOVE DTRACEHIOC_REMOVE
+#define VKI_DTRACEHIOC_ADDDOF DTRACEHIOC_ADDDOF
+#define vki_dof_helper_t dof_helper_t
+
+
+#include <sys/elf.h>
+#define VKI_EI_CLASS EI_CLASS
+#define VKI_EI_DATA EI_DATA
+#define VKI_EI_MAG0 EI_MAG0
+#define VKI_EI_MAG1 EI_MAG1
+#define VKI_EI_MAG2 EI_MAG2
+#define VKI_EI_MAG3 EI_MAG3
+#define VKI_EI_VERSION EI_VERSION
+#define VKI_ELFMAG ELFMAG
+#define VKI_ELFMAG ELFMAG
+#define VKI_ELFMAG0 ELFMAG0
+#define VKI_ELFMAG1 ELFMAG1
+#define VKI_ELFMAG2 ELFMAG2
+#define VKI_ELFMAG3 ELFMAG3
+#define VKI_ET_CORE ET_CORE
+#define VKI_ET_DYN ET_DYN
+#define VKI_ET_EXEC ET_EXEC
+#define VKI_EV_CURRENT EV_CURRENT
+#define VKI_NT_AUXV NT_AUXV
+#define VKI_NT_CONTENT NT_CONTENT
+#define VKI_NT_LWPSINFO NT_LWPSINFO
+#define VKI_NT_LWPSTATUS NT_LWPSTATUS
+#define VKI_NT_PLATFORM NT_PLATFORM
+#define VKI_NT_PRCRED NT_PRCRED
+#define VKI_NT_PRFPREG NT_PRFPREG
+#define VKI_NT_PRPRIV NT_PRPRIV
+#define VKI_NT_PRPRIVINFO NT_PRPRIVINFO
+#define VKI_NT_PRPSINFO NT_PRPSINFO
+#define VKI_NT_PRSTATUS NT_PRSTATUS
+#define VKI_NT_PRXREG NT_PRXREG
+#define VKI_NT_PSINFO NT_PSINFO
+#define VKI_NT_PSTATUS NT_PSTATUS
+#define VKI_NT_UTSNAME NT_UTSNAME
+#define VKI_NT_ZONENAME NT_ZONENAME
+#define VKI_PF_R PF_R
+#define VKI_PF_W PF_W
+#define VKI_PF_X PF_X
+#define VKI_PN_XNUM PN_XNUM
+#define VKI_PT_LOAD PT_LOAD
+#define VKI_PT_SUNWBSS PT_SUNWBSS
+#define VKI_SELFMAG SELFMAG
+
+#if	VG_WORDSIZE == 8
+#define VKI_ESZ(x) Elf64_##x
+#elif	VG_WORDSIZE == 4
+#define VKI_ESZ(x) Elf32_##x
+#else
+#error VG_WORDSIZE needs to ==4 or ==8
+#endif
+
+
+#include <sys/errno.h>
+#define VKI_EPERM EPERM
+#define VKI_ENOENT ENOENT
+#define VKI_ESRCH ESRCH
+#define VKI_EINTR EINTR
+#define VKI_EIO EIO
+#define VKI_ENXIO ENXIO
+#define VKI_E2BIG E2BIG
+#define VKI_EBADF EBADF
+#define VKI_ECHILD ECHILD
+#define VKI_ENOEXEC ENOEXEC
+#define VKI_EAGAIN EAGAIN
+#define VKI_ENOMEM ENOMEM
+#define VKI_EACCES EACCES
+#define VKI_EFAULT EFAULT
+#define VKI_ENOTBLK ENOTBLK
+#define VKI_EBUSY EBUSY
+#define VKI_EEXIST EEXIST
+#define VKI_EXDEV EXDEV
+#define VKI_ENODEV ENODEV
+#define VKI_ENOTDIR ENOTDIR
+#define VKI_EISDIR EISDIR
+#define VKI_EINVAL EINVAL
+#define VKI_ENFILE ENFILE
+#define VKI_EMFILE EMFILE
+#define VKI_ENOTTY ENOTTY
+#define VKI_ETXTBSY ETXTBSY
+#define VKI_EFBIG EFBIG
+#define VKI_ENOSPC ENOSPC
+#define VKI_ESPIPE ESPIPE
+#define VKI_EROFS EROFS
+#define VKI_EMLINK EMLINK
+#define VKI_EPIPE EPIPE
+#define VKI_EDOM EDOM
+#define VKI_ERANGE ERANGE
+#define VKI_ENOTSUP ENOTSUP
+#define VKI_ENODATA ENODATA
+#define VKI_EOVERFLOW EOVERFLOW
+#define VKI_ENOSYS ENOSYS
+#define VKI_ERESTART ERESTART
+#define VKI_EADDRINUSE EADDRINUSE
+
+
+#if defined(SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS)
+#include <sys/execx.h>
+#define VKI_EXEC_DESCRIPTOR EXEC_DESCRIPTOR
+#endif /* SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS */
+
+
+#include <sys/fcntl.h>
+#define VKI_O_RDONLY O_RDONLY
+#define VKI_O_WRONLY O_WRONLY
+#define VKI_O_RDWR O_RDWR
+#define VKI_O_APPEND O_APPEND
+#define VKI_O_NONBLOCK O_NONBLOCK
+
+#define VKI_O_CREAT O_CREAT
+#define VKI_O_TRUNC O_TRUNC
+#define VKI_O_EXCL O_EXCL
+#define VKI_O_LARGEFILE O_LARGEFILE
+
+#define VKI_F_DUPFD F_DUPFD
+#define VKI_F_GETFD F_GETFD
+#define VKI_F_SETFD F_SETFD
+#define VKI_F_GETFL F_GETFL
+#define VKI_F_GETXFL F_GETXFL
+#define VKI_F_SETFL F_SETFL
+
+/* SVR3 rfs compability const, declared only if _KERNEL or _KMEMUSER is
+   defined. */
+#if 0
+#define VKI_F_O_GETLK F_O_GETLK
+#endif // 0
+
+#define VKI_F_DUP2FD F_DUP2FD
+
+/* Mostly unused and kernel-unimplemented commands. In case of F_GETOWN and
+   F_GETOWN, they are translated by libc in __fcntl() into other syscalls,
+   that means these two values are never passed to the fcntl handler in the
+   kernel. F_HASREMOTELOCKS is also special, the fcntl kernel handler doesn't
+   know about it but it's used inside the kernel. */
+#if 0
+#define VKI_F_ISSTREAM F_ISSTREAM
+#define VKI_F_PRIV F_PRIV
+#define VKI_F_NPRIV F_NPRIV
+#define VKI_F_QUATACTL F_QUOTACTL
+#define VKI_F_BLOCKS F_BLOCKS
+#define VKI_F_BLKSIZE F_BLKSIZE
+#define VKI_F_GETOWN F_GETOWN
+#define VKI_F_SETOWN F_SETOWN
+#define VKI_F_REVOKE F_REVOKE
+#define VKI_F_HASREMOTELOCKS F_HASREMOTELOCKS
+#endif // 0
+
+#define VKI_F_SETLK F_SETLK
+#define VKI_F_SETLKW F_SETLKW
+#define VKI_F_ALLOCSP F_ALLOCSP
+#define VKI_F_FREESP F_FREESP
+#define VKI_F_GETLK F_GETLK
+#define VKI_F_SETLK_NBMAND F_SETLK_NBMAND
+#if defined(VGP_x86_solaris)
+#define VKI_F_SETLK64 F_SETLK64
+#define VKI_F_SETLKW64 F_SETLKW64
+#define VKI_F_ALLOCSP64 F_ALLOCSP64
+#define VKI_F_FREESP64 F_FREESP64
+#define VKI_F_GETLK64 F_GETLK64
+#define VKI_F_SETLK64_NBMAND F_SETLK64_NBMAND
+#endif // defined(VGP_x86_solaris)
+
+#define VKI_F_SHARE F_SHARE
+#define VKI_F_UNSHARE F_UNSHARE
+#define VKI_F_SHARE_NBMAND F_SHARE_NBMAND
+
+#define VKI_F_BADFD F_BADFD
+
+#define vki_flock flock
+#if defined(VGP_x86_solaris)
+#define vki_flock64 flock64
+#endif // defined(VGP_x86_solaris)
+
+#define VKI_FD_CLOEXEC FD_CLOEXEC
+
+#define vki_fshare fshare
+
+#define VKI_AT_FDCWD AT_FDCWD
+
+
+#include <sys/filio.h>
+#define VKI_FIOSETOWN FIOSETOWN
+#define VKI_FIOGETOWN FIOGETOWN
+
+
+#include <sys/fs/namenode.h>
+#define vki_namefd namefd
+
+
+#include <sys/ioccom.h>
+#define _VKI_IOC_DIR(x) ((x) & (IOC_VOID | IOC_OUT | IOC_IN))
+#define _VKI_IOC_SIZE(x) (((x) >> 16) & IOCPARM_MASK)
+#define _VKI_IOC_NONE 0
+#define _VKI_IOC_READ IOC_OUT
+#define _VKI_IOC_WRITE IOC_IN
+
+
+#include <sys/ipc.h>
+#include <sys/ipc_impl.h>
+#define VKI_IPC_RMID IPC_RMID
+#define VKI_IPC_SET IPC_SET
+#define VKI_IPC_SET64 IPC_SET64
+#define VKI_IPC_STAT IPC_STAT
+#define VKI_IPC_STAT64 IPC_STAT64
+#if defined(SOLARIS_SHM_NEW)
+#define VKI_IPC_XSTAT64 IPC_XSTAT64
+#endif /* SOLARIS_SHM_NEW */
+
+#define vki_semid64_ds semid_ds64
+
+
+#include <sys/loadavg.h>
+#define VKI_LOADAVG_NSTATS LOADAVG_NSTATS
+
+
+#include <sys/lwp.h>
+#define VKI_LWP_DAEMON LWP_DAEMON
+#define VKI_LWP_FSBASE _LWP_FSBASE
+#define VKI_LWP_GSBASE _LWP_GSBASE
+#define VKI_LWP_SETPRIVATE _LWP_SETPRIVATE
+#define VKI_LWP_GETPRIVATE _LWP_GETPRIVATE
+
+
+#include <sys/mman.h>
+#define VKI_PROT_READ PROT_READ
+#define VKI_PROT_WRITE PROT_WRITE
+#define VKI_PROT_EXEC PROT_EXEC
+#define VKI_PROT_NONE PROT_NONE
+
+#define VKI_MAP_SHARED MAP_SHARED
+#define VKI_MAP_PRIVATE MAP_PRIVATE
+#define VKI_MAP_FIXED MAP_FIXED
+#define VKI_MAP_ANONYMOUS MAP_ANONYMOUS
+#define VKI_MAP_ALIGN MAP_ALIGN
+#define VKI_MAP_TEXT MAP_TEXT
+#define VKI_MAP_INITDATA MAP_INITDATA
+
+#define VKI_MMOBJ_ALL_FLAGS MMOBJ_ALL_FLAGS
+#define VKI_MMOBJ_INTERPRET MMOBJ_INTERPRET
+#define VKI_MMOBJ_PADDING MMOBJ_PADDING
+#define VKI_MR_PADDING MR_PADDING
+#define VKI_MR_HDR_ELF MR_HDR_ELF
+#define VKI_MR_GET_TYPE(val) MR_GET_TYPE(val)
+#define vki_mmapobj_result_t mmapobj_result_t
+
+#define vki_memcntl_mha memcntl_mha
+#define VKI_MC_LOCKAS MC_LOCKAS
+#define VKI_MC_UNLOCKAS MC_UNLOCKAS
+#define VKI_MC_HAT_ADVISE MC_HAT_ADVISE
+
+
+#include <sys/mntio.h>
+#define VKI_MNTIOC_GETMNTANY MNTIOC_GETMNTANY
+
+
+#include <sys/mnttab.h>
+#define vki_mntentbuf mntentbuf
+#define vki_mnttab mnttab
+
+
+#include <sys/mount.h>
+#define	VKI_MS_DATA MS_DATA
+#define	VKI_MS_OPTIONSTR MS_OPTIONSTR
+
+
+#include <sys/poll.h>
+#define vki_pollfd pollfd
+#define vki_pollfd_t pollfd_t
+#define vki_nfds_t nfds_t
+
+
+#include <sys/pool_impl.h>
+#define VKI_POOL_STATUSQ POOL_STATUSQ
+#define vki_pool_status_t pool_status_t
+
+
+#include <sys/port.h>
+#include <sys/port_impl.h>
+#define VKI_PORT_SOURCE_FD PORT_SOURCE_FD
+#define VKI_PORT_SOURCE_FILE PORT_SOURCE_FILE
+
+#define vki_port_event_t port_event_t
+#define vki_port_notify_t port_notify_t
+#define vki_file_obj file_obj
+
+#define VKI_PORT_CREATE PORT_CREATE
+#define VKI_PORT_ASSOCIATE PORT_ASSOCIATE
+#define VKI_PORT_DISSOCIATE PORT_DISSOCIATE
+#define VKI_PORT_SEND PORT_SEND
+#define VKI_PORT_SENDN PORT_SENDN
+#define VKI_PORT_GET PORT_GET
+#define VKI_PORT_GETN PORT_GETN
+#define VKI_PORT_ALERT PORT_ALERT
+#define VKI_PORT_DISPATCH PORT_DISPATCH
+
+#define VKI_PORT_SYS_NOPORT PORT_SYS_NOPORT
+#define VKI_PORT_CODE_MASK PORT_CODE_MASK
+
+
+#include <sys/priocntl.h>
+#include <sys/rtpriocntl.h>
+#include <sys/tspriocntl.h>
+#include <sys/iapriocntl.h>
+#include <sys/fsspriocntl.h>
+#include <sys/fxpriocntl.h>
+#define VKI_PC_GETCID PC_GETCID
+#define VKI_PC_GETCLINFO PC_GETCLINFO
+#define VKI_PC_SETPARMS PC_SETPARMS
+#define VKI_PC_GETPARMS PC_GETPARMS
+#define VKI_PC_ADMIN PC_ADMIN
+#define VKI_PC_GETPRIRANGE PC_GETPRIRANGE
+#define VKI_PC_DONICE PC_DONICE
+#define VKI_PC_SETXPARMS PC_SETXPARMS
+#define VKI_PC_GETXPARMS PC_GETXPARMS
+#define VKI_PC_SETDFLCL PC_SETDFLCL
+#define VKI_PC_GETDFLCL PC_GETDFLCL
+#define VKI_PC_DOPRIO PC_DOPRIO
+
+#define VKI_PC_CLNMSZ PC_CLNMSZ
+
+#define VKI_PC_GETNICE PC_GETNICE
+#define VKI_PC_SETNICE PC_SETNICE
+
+#define VKI_PC_GETPRIO PC_GETPRIO
+#define VKI_PC_SETPRIO PC_SETPRIO
+
+#define vki_pcinfo_t pcinfo_t
+#define vki_rtinfo_t rtinfo_t
+#define vki_tsinfo_t tsinfo_t
+#define vki_iainfo_t iainfo_t
+#define vki_fssinfo_t fssinfo_t
+#define vki_fxinfo_t fxinfo_t
+
+#define vki_pcparms_t pcparms_t
+#define vki_pcnice_t pcnice_t
+#define vki_pcprio_t pcprio_t
+#define vki_pc_vaparm_t pc_vaparm_t
+#define vki_pc_vaparms_t pc_vaparms_t
+#define vki_pcpri_t pcpri_t
+
+#define VKI_PC_KY_CLNAME PC_KY_CLNAME
+#define VKI_RT_KY_PRI RT_KY_PRI
+#define VKI_RT_KY_TQSECS RT_KY_TQSECS
+#define VKI_RT_KY_TQNSECS RT_KY_TQNSECS
+#define VKI_RT_KY_TQSIG RT_KY_TQSIG
+#define VKI_TS_KY_UPRILIM TS_KY_UPRILIM
+#define VKI_TS_KY_UPRI TS_KY_UPRI
+#define VKI_IA_KY_UPRILIM IA_KY_UPRILIM
+#define VKI_IA_KY_UPRI IA_KY_UPRI
+#define VKI_IA_KY_MODE IA_KY_MODE
+#define VKI_FSS_KY_UPRILIM FSS_KY_UPRILIM
+#define VKI_FSS_KY_UPRI FSS_KY_UPRI
+#define VKI_FX_KY_UPRILIM FX_KY_UPRILIM
+#define VKI_FX_KY_UPRI FX_KY_UPRI
+#define VKI_FX_KY_TQSECS FX_KY_TQSECS
+#define VKI_FX_KY_TQNSECS FX_KY_TQNSECS
+
+
+#include <sys/priv.h>
+#define vki_priv_impl_info_t priv_impl_info_t
+
+
+#include <sys/proc.h>
+#define VKI_SRUN SRUN
+#define VKI_SSLEEP SSLEEP
+#define VKI_SZOMB SZOMB
+
+
+#include <sys/processor.h>
+#define vki_processorid_t processorid_t
+
+
+/* We want the new /proc definitions. */
+#define _STRUCTURED_PROC 1
+#include <sys/procfs.h>
+#define VKI_MA_READ MA_READ
+#define VKI_MA_WRITE MA_WRITE
+#define VKI_MA_EXEC MA_EXEC
+#define VKI_PRNODEV PRNODEV
+#define VKI_PR_PCINVAL PR_PCINVAL
+#define vki_lwpsinfo_t lwpsinfo_t
+#define vki_lwpstatus_t lwpstatus_t
+#define vki_prcred_t prcred_t
+#define vki_prmap_t prmap_t
+#define vki_prpriv_t prpriv_t
+#define vki_prxmap_t prxmap_t
+#define vki_pstatus_t pstatus_t
+#define vki_psinfo_t psinfo_t
+
+
+#include <sys/procfs_isa.h>
+#if defined(SOLARIS_PRXREGSET_T)
+#define vki_prxregset_t prxregset_t
+#endif /* SOLARIS_PRXREGSET_T */
+
+
+#include <sys/procset.h>
+#define vki_idtype_t idtype_t
+#define VKI_P_PID P_PID
+#define VKI_P_PGID P_PGID
+#define VKI_P_ALL P_ALL
+#define vki_procset_t procset_t
+
+
+#include <sys/pset.h>
+#define VKI_PSET_CREATE PSET_CREATE
+#define VKI_PSET_DESTROY PSET_DESTROY
+#define VKI_PSET_ASSIGN PSET_ASSIGN
+#define VKI_PSET_INFO PSET_INFO
+#define VKI_PSET_BIND PSET_BIND
+#define VKI_PSET_GETLOADAVG PSET_GETLOADAVG
+#define VKI_PSET_LIST PSET_LIST
+#define VKI_PSET_SETATTR PSET_SETATTR
+#define VKI_PSET_GETATTR PSET_GETATTR
+#define VKI_PSET_ASSIGN_FORCED PSET_ASSIGN_FORCED
+#define VKI_PSET_BIND_LWP PSET_BIND_LWP
+#if defined(SOLARIS_PSET_GET_NAME)
+#define VKI_PSET_GET_NAME PSET_GET_NAME
+#endif /* SOLARIS_PSET_GET_NAME */
+#define vki_psetid_t psetid_t
+
+
+#include <sys/regset.h>
+#define vki_prgregset_t prgregset_t
+
+
+#include <sys/resource.h>
+#define VKI_RLIMIT_DATA RLIMIT_DATA
+#define VKI_RLIMIT_STACK RLIMIT_STACK
+#define VKI_RLIMIT_CORE RLIMIT_CORE
+#define VKI_RLIMIT_NOFILE RLIMIT_NOFILE
+#define VKI__RUSAGESYS_GETRUSAGE _RUSAGESYS_GETRUSAGE
+#define VKI__RUSAGESYS_GETRUSAGE_CHLD _RUSAGESYS_GETRUSAGE_CHLD
+#define VKI__RUSAGESYS_GETRUSAGE_LWP _RUSAGESYS_GETRUSAGE_LWP
+#define VKI__RUSAGESYS_GETVMUSAGE _RUSAGESYS_GETVMUSAGE
+#define vki_rlimit rlimit
+#define vki_rlimit64 rlimit64
+#define vki_rusage rusage
+
+
+#include <sys/schedctl.h>
+#define vki_sc_shared sc_shared
+
+
+#include <sys/segments.h>
+#define VKI_GDT_LWPGS GDT_LWPGS
+#if defined(VGP_amd64_solaris)
+/* Values VKI_UCS_SEL/VKI_UDS_SEL can be used only on amd64. On x86, correct
+   %cs/%ds values for a client need to be obtained from the host registers
+   because they are different depending on the running kernel (x86 or amd64).
+ */
+#define VKI_UCS_SEL UCS_SEL
+#define VKI_UDS_SEL UDS_SEL
+#endif
+#define VKI_LWPGS_SEL LWPGS_SEL
+
+
+#include <sys/select.h>
+#define vki_fd_set fd_set
+
+
+#include <sys/priv.h>
+/* Define _KMEMUSER so priv_set is pulled in. */
+#define _KMEMUSER
+#include <sys/priv_impl.h>
+#undef _KMEMUSER
+#define vki_priv_set_t priv_set_t
+#define vki_priv_ptype_t priv_ptype_t
+#define vki_priv_op_t priv_op_t
+
+#define VKI_PRIVSYS_SETPPRIV PRIVSYS_SETPPRIV
+#define VKI_PRIVSYS_GETPPRIV PRIVSYS_GETPPRIV
+#define VKI_PRIVSYS_GETIMPLINFO PRIVSYS_GETIMPLINFO
+#define VKI_PRIVSYS_SETPFLAGS PRIVSYS_SETPFLAGS
+#define VKI_PRIVSYS_GETPFLAGS PRIVSYS_GETPFLAGS
+#define VKI_PRIVSYS_ISSETUGID PRIVSYS_ISSETUGID
+#define VKI_PRIVSYS_PFEXEC_REG PRIVSYS_PFEXEC_REG
+#define VKI_PRIVSYS_PFEXEC_UNREG PRIVSYS_PFEXEC_UNREG
+
+#define vki_priv_impl_info_t priv_impl_info_t
+
+
+#include <sys/sem.h>
+#include <sys/sem_impl.h>
+#define VKI_GETALL GETALL
+#define VKI_GETPID GETPID
+#define VKI_GETNCNT GETNCNT
+#define VKI_GETZCNT GETZCNT
+#define VKI_GETVAL GETVAL
+#define VKI_SEMCTL SEMCTL
+#define VKI_SEMGET SEMGET
+#define VKI_SEMIDS SEMIDS
+#define VKI_SEMOP SEMOP
+#define VKI_SEMTIMEDOP SEMTIMEDOP
+#define VKI_SETALL SETALL
+#define VKI_SETVAL SETVAL
+
+#define vki_semid_ds semid_ds
+#define vki_sembuf sembuf
+
+/* The semun union has to be explicitly declared by the application program
+   (see semctl(2)). */
+union vki_semun {
+   int val;
+   struct semid_ds *buf;
+   ushort_t *array;
+};
+
+
+#include <sys/sendfile.h>
+#define VKI_SENDFILEV SENDFILEV
+#define VKI_SENDFILEV64 SENDFILEV64
+#define VKI_SFV_FD_SELF SFV_FD_SELF
+#define vki_sendfilevec sendfilevec
+#define vki_sendfilevec64 sendfilevec64
+
+
+#include <sys/shm.h>
+#include <sys/shm_impl.h>
+#define VKI_SHMAT SHMAT
+#define VKI_SHMCTL SHMCTL
+#define VKI_SHMDT SHMDT
+#define VKI_SHMGET SHMGET
+#define VKI_SHMIDS SHMIDS
+#if defined(SOLARIS_SHM_NEW)
+#define VKI_SHMADV SHMADV
+#define VKI_SHMGET_OSM SHMGET_OSM
+#define VKI_SHM_ADV_GET SHM_ADV_GET
+#define VKI_SHM_ADV_SET SHM_ADV_SET
+#endif /* SOLARIS_SHM_NEW */
+#define VKI_SHM_LOCK SHM_LOCK
+#define VKI_SHM_RDONLY SHM_RDONLY
+#define VKI_SHM_UNLOCK SHM_UNLOCK
+/* Should be correct, but not really neat. */
+#define VKI_SHMLBA VKI_PAGE_SIZE
+
+#define vki_shmid_ds shmid_ds
+#define vki_shmid_ds64 shmid_ds64
+#define vki_shmid_xds64 shmid_xds64
+
+
+#include <sys/siginfo.h>
+/* This section also contains items defined in sys/machsig.h, this file
+   is directly included in sys/siginfo.h. */
+#define vki_sigevent sigevent
+#define vki_siginfo_t siginfo_t
+
+#define VKI_SI_LWP SI_LWP
+#define VKI_SI_USER SI_USER
+#define VKI_SIGEV_PORT SIGEV_PORT
+#define VKI_SIGEV_THREAD SIGEV_THREAD
+
+/* SIGTRAP signal codes */
+#define VKI_TRAP_BRKPT TRAP_BRKPT
+
+/* SIGCLD signal codes */
+#define VKI_CLD_EXITED CLD_EXITED
+#define VKI_CLD_KILLED CLD_KILLED
+#define VKI_CLD_DUMPED CLD_DUMPED
+#define VKI_CLD_TRAPPED CLD_TRAPPED
+#define VKI_CLD_STOPPED CLD_STOPPED
+#define VKI_CLD_CONTINUED CLD_CONTINUED
+
+/* SIGILL signal codes */
+#define VKI_ILL_ILLOPC ILL_ILLOPC
+#define VKI_ILL_ILLOPN ILL_ILLOPN
+#define VKI_ILL_ILLADR ILL_ILLADR
+#define VKI_ILL_ILLTRP ILL_ILLTRP
+#define VKI_ILL_PRVOPC ILL_PRVOPC
+#define VKI_ILL_PRVREG ILL_PRVREG
+#define VKI_ILL_COPROC ILL_COPROC
+#define VKI_ILL_BADSTK ILL_BADSTK
+
+/* SIGFPE signal codes */
+#define VKI_FPE_INTDIV FPE_INTDIV
+#define VKI_FPE_INTOVF FPE_INTOVF
+#define VKI_FPE_FLTDIV FPE_FLTDIV
+#define VKI_FPE_FLTOVF FPE_FLTOVF
+#define VKI_FPE_FLTUND FPE_FLTUND
+#define VKI_FPE_FLTRES FPE_FLTRES
+#define VKI_FPE_FLTINV FPE_FLTINV
+#define VKI_FPE_FLTSUB FPE_FLTSUB
+#define VKI_FPE_FLTDEN FPE_FLTDEN
+
+/* SIGSEV signal codes */
+#define VKI_SEGV_MAPERR SEGV_MAPERR
+#define VKI_SEGV_ACCERR SEGV_ACCERR
+
+/* SIGBUS signal codes */
+#define VKI_BUS_ADRALN BUS_ADRALN
+#define VKI_BUS_ADRERR BUS_ADRERR
+#define VKI_BUS_OBJERR BUS_OBJERR
+
+
+#include <sys/signal.h>
+/* This section also contains items defined in sys/iso/signal_iso.h, this file
+   is directly included in sys/signal.h. */
+
+/* Next three constants describe the internal representation of sigset_t,
+   there are checks in coregrind/m_vki.c to make sure they are correct. */
+#define _VKI_NSIG 128
+#define _VKI_MAXSIG MAXSIG
+#define _VKI_NSIG_BPW 32
+#define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
+#define vki_sigset_t sigset_t
+#define vki_sigaltstack sigaltstack
+/* sigset_t accessor */
+#define sig __sigbits
+
+/* On Solaris we use the same type for passing sigactions to
+   and from the kernel. Hence: */
+typedef struct sigaction vki_sigaction_toK_t;
+typedef struct sigaction vki_sigaction_fromK_t;
+/* sigaction_t accessor */
+#define ksa_handler sa_handler
+
+#define VKI_SA_ONSTACK SA_ONSTACK
+#define VKI_SA_ONESHOT SA_RESETHAND
+#define VKI_SA_NOMASK SA_NODEFER
+
+#define VKI_MINSIGSTKSZ MINSIGSTKSZ
+
+#define VKI_SS_ONSTACK SS_ONSTACK
+#define VKI_SS_DISABLE SS_DISABLE
+
+#define vki_stack_t stack_t
+
+#define VKI_SA_NOCLDSTOP SA_NOCLDSTOP
+#define VKI_SA_RESTART SA_RESTART
+#define VKI_SA_SIGINFO SA_SIGINFO
+#define VKI_SA_NOCLDWAIT SA_NOCLDWAIT
+#define VKI_SA_RESTORER 0 /* Solaris doesn't have this */
+
+#define VKI_SIGHUP SIGHUP               /*  1 */
+#define VKI_SIGINT SIGINT               /*  2 */
+#define VKI_SIGQUIT SIGQUIT             /*  3 */
+#define VKI_SIGILL SIGILL               /*  4 */
+#define VKI_SIGTRAP SIGTRAP             /*  5 */
+#define VKI_SIGABRT SIGABRT             /*  6 */
+#define VKI_SIGEMT SIGEMT               /*  7 */
+#define VKI_SIGFPE SIGFPE               /*  8 */
+#define VKI_SIGKILL SIGKILL             /*  9 */
+#define VKI_SIGBUS SIGBUS               /* 10 */
+#define VKI_SIGSEGV SIGSEGV             /* 11 */
+#define VKI_SIGSYS SIGSYS               /* 12 */
+#define VKI_SIGPIPE SIGPIPE             /* 13 */
+#define VKI_SIGALRM SIGALRM             /* 14 */
+#define VKI_SIGTERM SIGTERM             /* 15 */
+#define VKI_SIGUSR1 SIGUSR1             /* 16 */
+#define VKI_SIGUSR2 SIGUSR2             /* 17 */
+#define VKI_SIGCHLD SIGCHLD             /* 18 */
+#define VKI_SIGPWR SIGPWR               /* 19 */
+#define VKI_SIGWINCH SIGWINCH           /* 20 */
+#define VKI_SIGURG SIGURG               /* 21 */
+#define VKI_SIGIO SIGIO                 /* 22 */
+#define VKI_SIGSTOP SIGSTOP             /* 23 */
+#define VKI_SIGTSTP SIGTSTP             /* 24 */
+#define VKI_SIGCONT SIGCONT             /* 25 */
+#define VKI_SIGTTIN SIGTTIN             /* 26 */
+#define VKI_SIGTTOU SIGTTOU             /* 27 */
+#define VKI_SIGVTALRM SIGVTALRM         /* 28 */
+#define VKI_SIGPROF SIGPROF             /* 29 */
+#define VKI_SIGXCPU SIGXCPU             /* 30 */
+#define VKI_SIGXFSZ SIGXFSZ             /* 31 */
+#define VKI_SIGWAITING SIGWAITING       /* 32 */
+#define VKI_SIGLWP SIGLWP               /* 33 */
+#define VKI_SIGFREEZE SIGFREEZE         /* 34 */
+#define VKI_SIGTHAW SIGTHAW             /* 35 */
+#define VKI_SIGCANCEL SIGCANCEL         /* 36 */
+#define VKI_SIGLOST SIGLOST             /* 37 */
+#define VKI_SIGXRES SIGXRES             /* 38 */
+#define VKI_SIGJVM1 SIGJVM1             /* 39 */
+#define VKI_SIGJVM2 SIGJVM2             /* 40 */
+/* Note that SIGRTMIN and SIGRTMAX are actually macros calling into
+   libc's sysconf() which in turn calls into kernel. And it returns
+   these _SIGRTM* values. So we are safe until someone rebuilds Solaris
+   kernel with different values... */
+#define VKI_SIGRTMIN _SIGRTMIN          /* 41 */
+#define VKI_SIGRTMAX _SIGRTMAX          /* 72 */
+
+#define VKI_SIG_DFL SIG_DFL
+#define VKI_SIG_IGN SIG_IGN
+
+#define VKI_SIG_BLOCK SIG_BLOCK
+#define VKI_SIG_UNBLOCK SIG_UNBLOCK
+#define VKI_SIG_SETMASK SIG_SETMASK
+
+
+#include <sys/socket.h>
+#define vki_sa_family_t sa_family_t
+#define vki_sockaddr sockaddr
+
+#define vki_socklen_t socklen_t
+
+#define VKI_SOCK_STREAM SOCK_STREAM
+
+#define VKI_SO_TYPE SO_TYPE
+#define VKI_SCM_RIGHTS SCM_RIGHTS
+#define VKI_SOL_SOCKET SOL_SOCKET
+
+#define VKI_AF_UNIX AF_UNIX
+#define VKI_AF_INET AF_INET
+#define VKI_AF_INET6 AF_INET6
+
+#define vki_msghdr msghdr
+#define vki_cmsghdr cmsghdr
+
+#define VKI_CMSG_ALIGN(a) _CMSG_DATA_ALIGN(a)
+#define VKI_CMSG_DATA(cmsg) CMSG_DATA(cmsg)
+#define VKI_CMSG_FIRSTHDR(mhdr) CMSG_FIRSTHDR(mhdr)
+#define VKI_CMSG_NXTHDR(mhdr, cmsg) CMSG_NXTHDR(mhdr, cmsg)
+
+
+#include <sys/socketvar.h>
+#define VKI_SOV_DEFAULT SOV_DEFAULT
+
+
+#include <sys/sockio.h>
+#define VKI_SIOCGIFCONF SIOCGIFCONF
+#define VKI_SIOCGIFFLAGS SIOCGIFFLAGS
+#define VKI_SIOCGIFNETMASK SIOCGIFNETMASK
+#define VKI_SIOCGIFNUM SIOCGIFNUM
+#define VKI_SIOCGLIFBRDADDR SIOCGLIFBRDADDR
+#define VKI_SIOCGLIFCONF SIOCGLIFCONF
+#define VKI_SIOCGLIFFLAGS SIOCGLIFFLAGS
+#define VKI_SIOCGLIFNETMASK SIOCGLIFNETMASK
+#define VKI_SIOCGLIFNUM SIOCGLIFNUM
+
+
+#if defined(SOLARIS_SPAWN_SYSCALL)
+#include <sys/spawn_impl.h>
+#define VKI_FA_CHDIR FA_CHDIR
+#define VKI_FA_CLOSE FA_CLOSE
+#define VKI_FA_CLOSEFROM FA_CLOSEFROM
+#define VKI_FA_DUP2 FA_DUP2
+#define VKI_FA_OPEN FA_OPEN
+#define VKI_POSIX_SPAWN_NOEXECERR_NP POSIX_SPAWN_NOEXECERR_NP
+#define VKI_POSIX_SPAWN_NOSIGCHLD_NP POSIX_SPAWN_NOSIGCHLD_NP
+#define VKI_POSIX_SPAWN_RESETIDS POSIX_SPAWN_RESETIDS
+#define VKI_POSIX_SPAWN_SETPGROUP POSIX_SPAWN_SETPGROUP
+#define VKI_POSIX_SPAWN_SETSCHEDPARAM POSIX_SPAWN_SETSCHEDPARAM
+#define VKI_POSIX_SPAWN_SETSCHEDULER POSIX_SPAWN_SETSCHEDULER
+#define VKI_POSIX_SPAWN_SETSID_NP POSIX_SPAWN_SETSID_NP
+#define VKI_POSIX_SPAWN_SETSIGDEF POSIX_SPAWN_SETSIGDEF
+#define VKI_POSIX_SPAWN_SETSIGIGN_NP POSIX_SPAWN_SETSIGIGN_NP
+#define VKI_POSIX_SPAWN_SETSIGMASK POSIX_SPAWN_SETSIGMASK
+#define VKI_POSIX_SPAWN_SETVAMASK_NP POSIX_SPAWN_SETVAMASK_NP
+#define VKI_POSIX_SPAWN_WAITPID_NP POSIX_SPAWN_WAITPID_NP
+#define VKI_SPAWN_VERSION SPAWN_VERSION
+#define vki_kfile_attr_t kfile_attr_t
+#define vki_kspawn_attr_t kspawn_attr_t
+#define vki_spawn_attr_t spawn_attr_t
+#endif /* SOLARIS_SPAWN_SYSCALL */
+
+
+#include <sys/stat.h>
+#define vki_stat stat
+#define vki_stat64 stat64
+
+#define st_atime_nsec st_atim.tv_nsec
+#define st_mtime_nsec st_mtim.tv_nsec
+#define st_ctime_nsec st_ctim.tv_nsec
+
+#define VKI_S_IFIFO S_IFIFO
+#define VKI_S_ISUID S_ISUID
+#define VKI_S_ISGID S_ISGID
+
+#define VKI_S_IRUSR S_IRUSR
+#define VKI_S_IWUSR S_IWUSR
+#define VKI_S_IXUSR S_IXUSR
+#define VKI_S_IRGRP S_IRGRP
+#define VKI_S_IWGRP S_IWGRP
+#define VKI_S_IXGRP S_IXGRP
+#define VKI_S_IROTH S_IROTH
+#define VKI_S_IWOTH S_IWOTH
+#define VKI_S_IXOTH S_IXOTH
+
+#define VKI_S_ISCHR S_ISCHR
+#define VKI_S_ISDIR S_ISDIR
+#define VKI_S_ISBLK S_ISBLK
+#define VKI_S_ISREG S_ISREG
+#define VKI_S_ISLNK S_ISLNK
+
+
+#include <sys/statfs.h>
+#define vki_statfs statfs
+
+
+#include <sys/statvfs.h>
+#define vki_statvfs statvfs
+#define vki_statvfs64 statvfs64
+
+
+#include <sys/stropts.h>
+#define VKI_I_CANPUT I_CANPUT
+#define VKI_I_PEEK I_PEEK
+#define VKI_I_PUSH I_PUSH
+#define VKI_I_STR I_STR
+#define vki_strbuf strbuf
+#define vki_strioctl strioctl
+#define vki_strpeek strpeek
+
+
+#include <sys/synch.h>
+#define vki_lwp_mutex_t lwp_mutex_t
+#define vki_lwp_cond_t lwp_cond_t
+#define vki_lwp_sema_t lwp_sema_t
+#define vki_lwp_rwlock_t lwp_rwlock_t
+
+/* Defines from the private sys/synch32.h header. */
+#define vki_mutex_flag flags.flag1
+#define vki_mutex_type flags.mbcp_type_un.mtype_rcount.count_type1
+#define vki_mutex_rcount flags.mbcp_type_un.mtype_rcount.count_type2
+#define vki_mutex_owner data
+#define vki_mutex_lockw lock.lock64.pad[7]
+#define vki_mutex_waiters lock.lock64.pad[6]
+#define vki_mutex_ownerpid lock.lock32.ownerpid
+
+#define vki_cond_type flags.type
+#define vki_cond_waiters_kernel flags.flag[3]
+
+#define vki_sema_count count
+#define vki_sema_type type
+#define vki_sema_waiters flags[7]
+
+#define vki_rwlock_readers readers
+#define vki_rwlock_type type
+#define vki_rwlock_owner readercv.data
+#define vki_rwlock_ownerpid writercv.data
+
+
+#include <sys/sysconfig.h>
+#define VKI_CONFIG_OPEN_FILES _CONFIG_OPEN_FILES
+
+
+#include <sys/sysi86.h>
+#define VKI_SI86FPSTART SI86FPSTART
+
+
+#include <sys/systeminfo.h>
+#define VKI_SI_SYSNAME SI_SYSNAME
+#define VKI_SI_HOSTNAME SI_HOSTNAME
+#define VKI_SI_RELEASE SI_RELEASE
+#define VKI_SI_VERSION SI_VERSION
+#define VKI_SI_MACHINE SI_MACHINE
+#define VKI_SI_ARCHITECTURE SI_ARCHITECTURE
+#define VKI_SI_HW_SERIAL SI_HW_SERIAL
+#define VKI_SI_HW_PROVIDER SI_HW_PROVIDER
+#define VKI_SI_SRPC_DOMAIN SI_SRPC_DOMAIN
+
+#define VKI_SI_SET_HOSTNAME SI_SET_HOSTNAME
+#define VKI_SI_SET_SRCP_DOMAIN SI_SET_SRPC_DOMAIN
+
+#define VKI_SI_PLATFORM SI_PLATFORM
+#define VKI_SI_ISALIST SI_ISALIST
+#define VKI_SI_DHCP_CACHE SI_DHCP_CACHE
+#define VKI_SI_ARCHITECTURE_32 SI_ARCHITECTURE_32
+#define VKI_SI_ARCHITECTURE_64 SI_ARCHITECTURE_64
+#define VKI_SI_ARCHITECTURE_K SI_ARCHITECTURE_K
+#define VKI_SI_ARCHITECTURE_NATIVE SI_ARCHITECTURE_NATIVE
+
+
+#include <sys/termio.h>
+#define vki_termio termio
+
+
+#include <sys/termios.h>
+#define vki_termios termios
+#define VKI_TCGETA TCGETA
+#define VKI_TCGETS TCGETS
+#define VKI_TCSETS TCSETS
+#define VKI_TCSETSF TCSETSF
+#define VKI_TCSETSW TCSETSW
+#define VKI_TIOCGPGRP TIOCGPGRP
+#define VKI_TIOCGSID TIOCGSID
+#define VKI_TIOCGWINSZ TIOCGWINSZ
+#define VKI_TIOCNOTTY TIOCNOTTY
+#define VKI_TIOCSCTTY TIOCSCTTY
+#define VKI_TIOCSPGRP TIOCSPGRP
+#define VKI_TIOCSWINSZ TIOCSWINSZ
+#define vki_winsize winsize
+
+
+#include <sys/time.h>
+#define VKI_CLOCK_MONOTONIC CLOCK_MONOTONIC
+
+#define vki_clockid_t clockid_t
+#define vki_timespec timespec
+#define vki_timespec_t timespec_t
+#define vki_timeval timeval
+#define vki_timezone timezone
+#define vki_itimerspec itimerspec
+#define vki_itimerval itimerval
+
+
+#include <sys/times.h>
+#define vki_tms tms
+
+
+#include <sys/tsol/label_macro.h>
+#define vki_bslabel_t bslabel_t
+
+
+/* Do not include sys/tsol/tndb.h if a C++ compiler is used to build a file
+   which includes vki-solaris.h.  This cannot be done because the tndb.h
+   header file uses the template keyword as a member name (on illumos). */
+#if !defined(__cplusplus)
+#include <sys/tsol/tndb.h>
+#define VKI_TNDB_DELETE TNDB_DELETE
+#define VKI_TNDB_FLUSH TNDB_FLUSH
+#define VKI_TNDB_GET TNDB_GET
+#if defined(SOLARIS_TNDB_GET_TNIP)
+#define VKI_TNDB_GET_TNIP TNDB_GET_TNIP
+#endif /* SOLARIS_TNDB_GET_TNIP */
+#define VKI_TNDB_LOAD TNDB_LOAD
+#define vki_tsol_mlpent_t tsol_mlpent_t
+#define vki_tsol_rhent_t tsol_rhent_t
+#define vki_tsol_tpent_t tsol_tpent_t
+#endif /* !__cplusplus */
+
+
+#include <sys/tsol/tsyscall.h>
+#define VKI_TSOL_FGETLABEL TSOL_FGETLABEL
+#define VKI_TSOL_GETLABEL TSOL_GETLABEL
+#define VKI_TSOL_TNMLP TSOL_TNMLP
+#define VKI_TSOL_TNRH TSOL_TNRH
+#define VKI_TSOL_TNRHTP TSOL_TNRHTP
+#define VKI_TSOL_SYSLABELING TSOL_SYSLABELING
+#if defined(SOLARIS_TSOL_CLEARANCE)
+#define VKI_TSOL_GETCLEARANCE TSOL_GETCLEARANCE
+#define VKI_TSOL_SETCLEARANCE TSOL_SETCLEARANCE
+#endif /* SOLARIS_TSOL_CLEARANCE */
+
+
+#include <sys/ttold.h>
+#define vki_sgttyb sgttyb
+
+
+#include <sys/ucontext.h>
+/* This section also contains items defined in sys/regset.h, this file
+   is directly included in sys/ucontext.h. */
+#if defined(VGP_x86_solaris)
+#define VKI_SS SS
+#define VKI_UESP UESP
+#define VKI_EFL EFL
+#define VKI_CS CS
+#define VKI_EIP EIP
+#define VKI_ERR 13 /* ERR */
+#define VKI_TRAPNO TRAPNO
+#define VKI_EAX EAX
+#define VKI_ECX ECX
+#define VKI_EDX EDX
+#define VKI_EBX EBX
+#define VKI_ESP ESP
+#define VKI_EBP EBP
+#define VKI_ESI ESI
+#define VKI_EDI EDI
+#define VKI_DS DS
+#define VKI_ES ES
+#define VKI_FS FS
+#define VKI_GS GS
+
+/* Definitions for compatibility with amd64-solaris. */
+#define VKI_REG_ERR VKI_ERR
+#define VKI_REG_TRAPNO VKI_TRAPNO
+
+#define VKI_EFLAGS_ID_BIT (1 << 21)
+
+#elif defined(VGP_amd64_solaris)
+#define VKI_REG_GSBASE REG_GSBASE
+#define VKI_REG_FSBASE REG_FSBASE
+#define VKI_REG_DS REG_DS
+#define VKI_REG_ES REG_ES
+#define VKI_REG_GS REG_GS
+#define VKI_REG_FS REG_FS
+#define VKI_REG_SS REG_SS
+#define VKI_REG_RSP REG_RSP
+#define VKI_REG_RFL REG_RFL
+#define VKI_REG_CS REG_CS
+#define VKI_REG_RIP REG_RIP
+#define VKI_REG_ERR REG_ERR
+#define VKI_REG_TRAPNO REG_TRAPNO
+#define VKI_REG_RAX REG_RAX
+#define VKI_REG_RCX REG_RCX
+#define VKI_REG_RDX REG_RDX
+#define VKI_REG_RBX REG_RBX
+#define VKI_REG_RBP REG_RBP
+#define VKI_REG_RSI REG_RSI
+#define VKI_REG_RDI REG_RDI
+#define VKI_REG_R8 REG_R8
+#define VKI_REG_R9 REG_R9
+#define VKI_REG_R10 REG_R10
+#define VKI_REG_R11 REG_R11
+#define VKI_REG_R12 REG_R12
+#define VKI_REG_R13 REG_R13
+#define VKI_REG_R14 REG_R14
+#define VKI_REG_R15 REG_R15
+
+#define VKI_RFLAGS_ID_BIT (1 << 21)
+
+#else
+#error "Unknown platform"
+#endif
+
+#define vki_fpregset_t fpregset_t
+
+/* Don't polute global namespace so much. */
+#undef r_r0
+#undef r_r1
+#undef r_fp
+#undef r_sp
+#undef r_pc
+#undef r_ps
+#undef ERR
+
+#if defined(VGP_x86_solaris)
+/* The ucontext structure as defined in the SYSV ABI for Intel386. Illumos
+   contains exactly this definition. Solaris 11 utilizes two uc_filler values
+   -> "xrs_t uc_xrs; long uc_filler[3];". The xrs_t structure is used for the
+   AVX support. We define our own ucontext structure because all five
+   uc_filler values need to be available in VG_(save_context). Note that
+   Valgrind doesn't support AVX on the x86 platform. */
+typedef struct sysv_ucontext sysv_ucontext_t;
+struct sysv_ucontext {
+   unsigned long uc_flags;
+   sysv_ucontext_t *uc_link;
+   sigset_t uc_sigmask;
+   stack_t uc_stack;
+   mcontext_t uc_mcontext;
+   long uc_filler[5];
+};
+#define VKI_UC_GUEST_CC_OP(uc) (*(UWord*)&(uc)->uc_filler[0])
+#define VKI_UC_GUEST_CC_NDEP(uc) (*(UWord*)&(uc)->uc_filler[1])
+#define VKI_UC_GUEST_CC_DEP1(uc) (*(UWord*)&(uc)->uc_filler[2])
+#define VKI_UC_GUEST_CC_DEP2(uc) (*(UWord*)&(uc)->uc_filler[3])
+#define VKI_UC_GUEST_EFLAGS_NEG(uc) \
+   (*(UWord*)&(uc)->uc_mcontext.fpregs.fp_reg_set.fpchip_state.__pad[0])
+#define VKI_UC_GUEST_EFLAGS_CHECKSUM(uc) \
+   (*(UWord*)&(uc)->uc_mcontext.fpregs.fp_reg_set.fpchip_state.__pad[1])
+#define VKI_UC_SIGNO(uc) (*(UWord*)&(uc)->uc_filler[4])
+#define VKI_UC_SIGNO_CONST(uc) (*(const UWord*)&(uc)->uc_filler[4])
+
+#define vki_ucontext_t sysv_ucontext_t
+#define vki_ucontext sysv_ucontext
+
+#elif defined(VGP_amd64_solaris)
+/* The ucontext structure on Solaris has only 3 elements available in uc_filler
+   which is not enough to store all required information. Therefore padding
+   area in mcontext's FPU regset is used. */
+#define vki_ucontext ucontext
+#define vki_ucontext_t ucontext_t
+#define VKI_UC_MC_FP_FX_IGN2(uc) \
+    (uc)->uc_mcontext.fpregs.fp_reg_set.fpchip_state.__fx_ign2
+#define VKI_UC_GUEST_CC_OP(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[0])
+#define VKI_UC_GUEST_CC_NDEP(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[1])
+#define VKI_UC_GUEST_CC_DEP1(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[2])
+#define VKI_UC_GUEST_CC_DEP2(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[3])
+#define VKI_UC_GUEST_RFLAGS_NEG(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[4])
+#define VKI_UC_GUEST_RFLAGS_CHECKSUM(uc) \
+   (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[5])
+#define VKI_UC_SIGNO(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[6])
+#define VKI_UC_SIGNO_CONST(uc) (*(const UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[6])
+
+#else
+#error "Unknown platform"
+#endif
+
+#define vki_fpchip_state fpchip_state
+
+#define VKI_GETCONTEXT GETCONTEXT
+#define VKI_SETCONTEXT SETCONTEXT
+#define VKI_GETUSTACK GETUSTACK
+#define VKI_SETUSTACK SETUSTACK
+
+#define VKI_UC_SIGMASK UC_SIGMASK
+#define VKI_UC_STACK UC_STACK
+#define VKI_UC_CPU UC_CPU
+#define VKI_UC_FPU UC_FPU
+#define VKI_UC_ALL UC_ALL
+
+#include <sys/uio.h>
+#define vki_iovec iovec
+
+
+#include <sys/un.h>
+#define vki_sockaddr_un sockaddr_un
+
+
+#if defined(SOLARIS_UUIDSYS_SYSCALL)
+#include <sys/uuid.h>
+#define vki_uuid uuid
+#endif /* SOLARIS_UUIDSYS_SYSCALL */
+
+
+#include <sys/utsname.h>
+#define vki_utsname utsname
+/* Add another alias for utsname, used in syswrap-generic.c. */
+#define vki_new_utsname utsname
+
+
+#include <sys/vm_usage.h>
+#define vki_vmusage_t vmusage_t
+
+
+#include <sys/wait.h>
+#define VKI_WEXITED WEXITED
+#define VKI_WTRAPPED WTRAPPED
+
+#define VKI_WSTOPFLG WSTOPFLG
+#define VKI_WCONTFLG WCONTFLG
+#define VKI_WCOREFLG WCOREFLG
+
+
+#include <sys/zone.h>
+#define VKI_ZONE_ADD_DATALINK ZONE_ADD_DATALINK
+#define VKI_ZONE_ATTR_NAME ZONE_ATTR_NAME
+#define VKI_ZONE_BOOT ZONE_BOOT
+#define VKI_ZONE_CHECK_DATALINK ZONE_CHECK_DATALINK
+#define VKI_ZONE_CREATE ZONE_CREATE
+#define VKI_ZONE_DEL_DATALINK ZONE_DEL_DATALINK
+#define VKI_ZONE_DESTROY ZONE_DESTROY
+#define VKI_ZONE_ENTER ZONE_ENTER
+#define VKI_ZONE_GETATTR ZONE_GETATTR
+#define VKI_ZONE_LIST ZONE_LIST
+#define VKI_ZONE_LIST_DATALINK ZONE_LIST_DATALINK
+#define VKI_ZONE_LOOKUP ZONE_LOOKUP
+#define VKI_ZONE_SETATTR ZONE_SETATTR
+#define VKI_ZONE_SHUTDOWN ZONE_SHUTDOWN
+#if defined(SOLARIS_ZONE_DEFUNCT)
+#define VKI_ZONE_GETATTR_DEFUNCT ZONE_GETATTR_DEFUNCT
+#define VKI_ZONE_LIST_DEFUNCT ZONE_LIST_DEFUNCT
+#endif /* SOLARIS_ZONE_DEFUNCT */
+#define VKI_ZONENAME_MAX ZONENAME_MAX
+#define vki_zone_def zone_def
+#define vki_zoneid_t zoneid_t
+
+
+/* from <sys/ucred.h> which is consolidation private */
+#define VKI_UCREDSYS_UCREDGET 0
+#define VKI_UCREDSYS_GETPEERUCRED 1
+struct ucred_s {
+   vki_uint32_t uc_size;     /* Size of the full structure */
+   vki_uint32_t uc_credoff;  /* Credential offset */
+   vki_uint32_t uc_privoff;  /* Privilege offset */
+   vki_pid_t    uc_pid;      /* Process id */
+   vki_uint32_t uc_audoff;   /* Audit info offset */
+   vki_zoneid_t uc_zoneid;   /* Zone id */
+   vki_projid_t uc_projid;   /* Project id */
+   vki_uint32_t uc_labeloff; /* label offset */
+};
+
+
+/* from sys/old_procfs.h which clashes with sys/procfs.h */
+
+#define VKI_ELF_OLD_PR_PCINVAL 0x0080
+
+typedef struct vki_elf_prpsinfo {
+   char		pr_state;	/* numeric process state (see pr_sname) */
+   char		pr_sname;	/* printable character representing pr_state */
+   char		pr_zomb;	/* !=0: process terminated but not waited for */
+   char		pr_nice;	/* nice for cpu usage */
+   vki_uint_t	pr_flag;	/* process flags */
+   vki_uid_t	pr_uid;		/* real user id */
+   vki_gid_t	pr_gid;		/* real group id */
+   vki_pid_t	pr_pid;		/* unique process id */
+   vki_pid_t	pr_ppid;	/* process id of parent */
+   vki_pid_t	pr_pgrp;	/* pid of process group leader */
+   vki_pid_t	pr_sid;		/* session id */
+   vki_caddr_t	pr_addr;	/* physical address of process */
+   vki_size_t	pr_size;	/* size of process image in pages */
+   vki_size_t	pr_rssize;	/* resident set size in pages */
+   vki_caddr_t	pr_wchan;	/* wait addr for sleeping process */
+   vki_timespec_t pr_start;	/* process start time, sec+nsec since epoch */
+   vki_timespec_t pr_time;	/* usr+sys cpu time for this process */
+   int		pr_pri;		/* priority, high value is high priority */
+   char		pr_oldpri;	/* pre-SVR4, low value is high priority */
+   char		pr_cpu;		/* pre-SVR4, cpu usage for scheduling */
+   vki_o_dev_t	pr_ottydev;	/* short tty device number */
+   vki_dev_t	pr_lttydev;	/* controlling tty device (PRNODEV if none) */
+   char		pr_clname[8];	/* scheduling class name */
+   char		pr_fname[16];	/* last component of execed pathname */
+   char		pr_psargs[80];	/* initial characters of arg list */
+   short	pr_syscall;	/* system call number (if in syscall) */
+   short	pr_fill;
+   vki_timespec_t pr_ctime;	/* usr+sys cpu time for reaped children */
+   vki_size_t	pr_bysize;	/* size of process image in bytes */
+   vki_size_t	pr_byrssize;	/* resident set size in bytes */
+   int		pr_argc;	/* initial argument count */
+   char		**pr_argv;	/* initial argument vector */
+   char		**pr_envp;	/* initial environment vector */
+   int		pr_wstat;	/* if zombie, the wait() status */
+                	        /* The following percent numbers are 16-bit binary */
+                	        /* fractions [0 .. 1] with the binary point to the */
+                	        /* right of the high-order bit (one == 0x8000) */
+   ushort_t 	pr_pctcpu;	/* % of recent cpu time, one or all lwps */
+   ushort_t 	pr_pctmem;	/* % of of system memory used by the process */
+   vki_uid_t	pr_euid;	/* effective user id */
+   vki_gid_t	pr_egid;	/* effective group id */
+   vki_id_t	pr_aslwpid;	/* historical; now always zero */
+   char		pr_dmodel;	/* data model of the process */
+   char		pr_pad[3];
+   int		pr_filler[6];	/* for future expansion */
+} vki_elf_prpsinfo_t;
+
+typedef struct vki_elf_prstatus {
+   int		pr_flags;	/* Flags (see below) */
+   short	pr_why;		/* Reason for process stop (if stopped) */
+   short	pr_what;	/* More detailed reason */
+   vki_siginfo_t pr_info;	/* Info associated with signal or fault */
+   short	pr_cursig;	/* Current signal */
+   ushort_t 	pr_nlwp;	/* Number of lwps in the process */
+   vki_sigset_t pr_sigpend;	/* Set of signals pending to the process */
+   vki_sigset_t pr_sighold;	/* Set of signals held (blocked) by the lwp */
+   struct vki_sigaltstack pr_altstack; /* Alternate signal stack info */
+   struct sigaction pr_action;	/* Signal action for current signal */
+   vki_pid_t	pr_pid;		/* Process id */
+   vki_pid_t	pr_ppid;	/* Parent process id */
+   vki_pid_t	pr_pgrp;	/* Process group id */
+   vki_pid_t	pr_sid;		/* Session id */
+   vki_timespec_t pr_utime;	/* Process user cpu time */
+   vki_timespec_t pr_stime;	/* Process system cpu time */
+   vki_timespec_t pr_cutime;	/* Sum of children's user times */
+   vki_timespec_t pr_cstime;	/* Sum of children's system times */
+   char	pr_clname[PRCLSZ]; 	/* Scheduling class name */
+   short	pr_syscall;	/* System call number (if in syscall) */
+   short	pr_nsysarg;	/* Number of arguments to this syscall */
+   long	pr_sysarg[PRSYSARGS];	/* Arguments to this syscall */
+   vki_id_t	pr_who;		/* Specific lwp identifier */
+   vki_sigset_t pr_lwppend;	/* Set of signals pending to the lwp */
+   struct vki_ucontext *pr_oldcontext; /* Address of previous ucontext */
+   vki_caddr_t	pr_brkbase;	/* Address of the process heap */
+   vki_size_t	pr_brksize;	/* Size of the process heap, in bytes */
+   vki_caddr_t	pr_stkbase;	/* Address of the process stack */
+   vki_size_t	pr_stksize;	/* Size of the process stack, in bytes */
+   short	pr_processor;	/* processor which last ran this LWP */
+   short	pr_bind;	/* processor LWP bound to or PBIND_NONE */
+   long		pr_instr;	/* Current instruction */
+   vki_prgregset_t pr_reg;	/* General registers */
+} vki_elf_prstatus_t;
+
+
+/* Signal frames. */
+#if defined(VGP_x86_solaris)
+struct vki_sigframe {
+   /* First four words look like a call to a 3-arg x86 function. */
+   void *return_addr;
+   int a1_signo;
+   vki_siginfo_t *a2_siginfo;
+   vki_ucontext_t *a3_ucontext;
+   /* Saved ucontext and siginfo. */
+   vki_ucontext_t ucontext;
+   vki_siginfo_t siginfo;
+};
+
+#elif defined(VGP_amd64_solaris)
+struct vki_sigframe {
+   void *return_addr;
+   long a1_signo;
+   vki_siginfo_t *a2_siginfo;
+   /* Saved ucontext and siginfo. */
+   vki_ucontext_t ucontext;
+   vki_siginfo_t siginfo;
+};
+
+#else
+#error "Unknown platform"
+#endif
+typedef struct vki_sigframe vki_sigframe_t;
+
+#endif // __VKI_SOLARIS_H
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/include/vki/vki-tilegx-linux.h b/include/vki/vki-tilegx-linux.h
index 9b0b99b..d243a85 100644
--- a/include/vki/vki-tilegx-linux.h
+++ b/include/vki/vki-tilegx-linux.h
@@ -7,7 +7,7 @@
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.
 
-  Copyright (C) 2010-2013 Tilera Corp.
+  Copyright (C) 2010-2015 Tilera Corp.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
diff --git a/include/vki/vki-x86-linux.h b/include/vki/vki-x86-linux.h
index c34e027..345b8a4 100644
--- a/include/vki/vki-x86-linux.h
+++ b/include/vki/vki-x86-linux.h
@@ -7,7 +7,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -907,6 +907,13 @@
 #define	VKI_EOVERFLOW    75  /* Value too large for defined data type */
 
 //----------------------------------------------------------------------
+// From linux-3.19.0/include/uapi/asm-generic/ioctls.h
+//----------------------------------------------------------------------
+
+#define VKI_TIOCGSERIAL     0x541E
+#define VKI_TIOCSSERIAL     0x541F
+
+//----------------------------------------------------------------------
 // And that's it!
 //----------------------------------------------------------------------
 
diff --git a/include/vki/vki-xen-domctl.h b/include/vki/vki-xen-domctl.h
index b5037f2..d381ee6 100644
--- a/include/vki/vki-xen-domctl.h
+++ b/include/vki/vki-xen-domctl.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_DOMCTL_H
 #define __VKI_XEN_DOMCTL_H
 
@@ -5,9 +32,10 @@
  * The domctl interface is versioned via the interface_version
  * field. This structures in this header supports domctl interfaces:
  *
- * - 00000007: Xen 4.1
- * - 00000008: Xen 4.2
- * - 00000009: Xen 4.3
+ * - 0x00000007: Xen 4.1
+ * - 0x00000008: Xen 4.2
+ * - 0x00000009: Xen 4.3 & 4.4
+ * - 0x0000000a: Xen 4.5
  *
  * When adding a new subop be sure to include the variants used by all
  * of the above, both here and in syswrap-xen.c
@@ -86,6 +114,8 @@
 #define VKI_XEN_DOMCTL_getnodeaffinity               69
 #define VKI_XEN_DOMCTL_set_max_evtchn                70
 #define VKI_XEN_DOMCTL_cacheflush                    71
+#define VKI_XEN_DOMCTL_get_vcpu_msrs                 72
+#define VKI_XEN_DOMCTL_set_vcpu_msrs                 73
 #define VKI_XEN_DOMCTL_gdbsx_guestmemio            1000
 #define VKI_XEN_DOMCTL_gdbsx_pausevcpu             1001
 #define VKI_XEN_DOMCTL_gdbsx_unpausevcpu           1002
@@ -156,6 +186,8 @@
 typedef struct vki_xen_domctl_getdomaininfo_00000009 vki_xen_domctl_getdomaininfo_00000009_t;
 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000009_t);
 
+/* vki_xen_domctl_getdomaininfo_0000000a is the same as 00000009 */
+
 /* Get/set the NUMA node(s) with which the guest has affinity with. */
 /* XEN_DOMCTL_setnodeaffinity */
 /* XEN_DOMCTL_getnodeaffinity */
@@ -170,11 +202,20 @@
     VKI_XEN_GUEST_HANDLE_64(vki_xen_pfn_t) array; /* IN/OUT */
 };
 
-struct vki_xen_domctl_vcpuaffinity {
+struct vki_xen_domctl_vcpuaffinity_00000009 {
     vki_uint32_t  vcpu;              /* IN */
     struct vki_xenctl_bitmap cpumap; /* IN/OUT */
 };
 
+struct vki_xen_domctl_vcpuaffinity_0000000a {
+    vki_uint32_t  vcpu;              /* IN */
+#define VKI_XEN_VCPUAFFINITY_HARD   (1U<<0)
+#define VKI_XEN_VCPUAFFINITY_SOFT   (1U<<1)
+    vki_uint32_t  flags;              /* IN */
+    struct vki_xenctl_bitmap cpumap_hard; /* IN/OUT */
+    struct vki_xenctl_bitmap cpumap_soft; /* IN/OUT */
+};
+
 struct vki_xen_domctl_shadow_op_stats {
     vki_uint32_t fault_count;
     vki_uint32_t dirty_count;
@@ -236,6 +277,7 @@
 #define VKI_XEN_SCHEDULER_CREDIT   5
 #define VKI_XEN_SCHEDULER_CREDIT2  6
 #define VKI_XEN_SCHEDULER_ARINC653 7
+#define VKI_XEN_SCHEDULER_RTDS     8
     vki_uint32_t cmd;       /* VKI_XEN_DOMCTL_SCHEDOP_* */
 #define VKI_XEN_DOMCTL_SCHEDOP_putinfo 0
 #define VKI_XEN_DOMCTL_SCHEDOP_getinfo 1
@@ -254,6 +296,10 @@
         struct xen_domctl_sched_credit2 {
             vki_uint16_t weight;
         } credit2;
+        struct xen_domctl_sched_rtds {
+            vki_uint32_t period;
+            vki_uint32_t budget;
+        } rtds;
     } u;
 };
 
@@ -261,6 +307,18 @@
     vki_uint32_t max;           /* maximum number of vcpus */
 };
 
+/* XEN_DOMCTL_irq_permission */
+struct vki_xen_domctl_irq_permission {
+    vki_uint8_t pirq;
+    vki_uint8_t allow_access;    /* flag to specify enable/disable of IRQ access */
+};
+
+struct vki_xen_domctl_iomem_permission {
+    vki_xen_uint64_aligned_t first_mfn;/* first page (physical page number) in range */
+    vki_xen_uint64_aligned_t nr_mfns;  /* number of pages in range (>0) */
+    vki_uint8_t  allow_access;     /* allow (!0) or deny (0) access to range? */
+};
+
 struct vki_xen_domctl_ioport_permission {
     vki_uint32_t first_port;              /* IN */
     vki_uint32_t nr_ports;                /* IN */
@@ -313,6 +371,49 @@
     vki_xen_guest_tsc_info_t info; /* IN */
 };
 
+struct vki_xen_domctl_pin_mem_cacheattr {
+    vki_xen_uint64_aligned_t start, end; /* IN */
+    vki_uint32_t type;                   /* IN */
+};
+
+struct vki_xen_domctl_ext_vcpucontext_00000008 {
+    vki_uint32_t             vcpu; /* IN */
+
+    /* IN  for XEN_DOMCTL_set_ext_vcpucontext
+     * OUT for XEN_DOMCTL_get_ext_vcpucontext */
+    vki_uint32_t             size;
+#if defined(__i386__) || defined(__x86_64__)
+    vki_xen_uint64_aligned_t syscall32_callback_eip;
+    vki_xen_uint64_aligned_t sysenter_callback_eip;
+    vki_uint16_t             syscall32_callback_cs;
+    vki_uint16_t             sysenter_callback_cs;
+    vki_uint8_t              syscall32_disables_events;
+    vki_uint8_t              sysenter_disables_events;
+    vki_xen_uint64_aligned_t mcg_cap;
+#endif
+};
+
+struct vki_xen_domctl_ext_vcpucontext_00000009 {
+    vki_uint32_t             vcpu; /* IN */
+
+    /* IN  for XEN_DOMCTL_set_ext_vcpucontext
+     * OUT for XEN_DOMCTL_get_ext_vcpucontext */
+    vki_uint32_t             size;
+#if defined(__i386__) || defined(__x86_64__)
+    vki_xen_uint64_aligned_t syscall32_callback_eip;
+    vki_xen_uint64_aligned_t sysenter_callback_eip;
+    vki_uint16_t             syscall32_callback_cs;
+    vki_uint16_t             sysenter_callback_cs;
+    vki_uint8_t              syscall32_disables_events;
+    vki_uint8_t              sysenter_disables_events;
+    vki_uint64_t             caps;
+    vki_uint64_t             mci_ctl2_bank0;
+    vki_uint64_t             mci_ctl2_bank1;
+#endif
+};
+
+/* vki_xen_domctl_ext_vcpucontext_0000000a is the same as 00000009 */
+
 struct vki_xen_domctl_vcpuextstate {
     vki_uint32_t         vcpu;
     vki_xen_uint64_aligned_t         xfeature_mask;
@@ -324,6 +425,10 @@
     vki_uint32_t size;
 };
 
+struct vki_xen_domctl_assign_device {
+    vki_uint32_t  machine_sbdf;   /* machine PCI ID of assigned device */
+};
+
 struct vki_xen_domctl_debug_op {
     vki_uint32_t op;   /* IN */
     vki_uint32_t vcpu; /* IN */
@@ -349,6 +454,20 @@
     vki_xen_pfn_t start_pfn, nr_pfns;
 };
 
+struct vki_xen_domctl_vcpu_msr {
+    vki_uint32_t             index;
+    vki_uint32_t             reserved;
+    vki_xen_uint64_aligned_t value;
+};
+typedef struct vki_xen_domctl_vcpu_msr vki_xen_domctl_vcpu_msr_t;
+DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_vcpu_msr_t);
+
+struct vki_xen_domctl_vcpu_msrs {
+    vki_uint32_t vcpu;
+    vki_uint32_t msr_count;
+    VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_vcpu_msr_t) msrs;
+};
+
 struct vki_xen_domctl {
     vki_uint32_t cmd;
     vki_uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
@@ -363,7 +482,8 @@
         //struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2;
         struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
         struct vki_xen_domctl_nodeaffinity      nodeaffinity;
-        struct vki_xen_domctl_vcpuaffinity      vcpuaffinity;
+        struct vki_xen_domctl_vcpuaffinity_00000009 vcpuaffinity_00000009;
+        struct vki_xen_domctl_vcpuaffinity_0000000a vcpuaffinity_0000000a;
         struct vki_xen_domctl_shadow_op         shadow_op;
         struct vki_xen_domctl_max_mem           max_mem;
         struct vki_xen_domctl_vcpucontext       vcpucontext;
@@ -372,8 +492,8 @@
         struct vki_xen_domctl_scheduler_op      scheduler_op;
         //struct vki_xen_domctl_setdomainhandle   setdomainhandle;
         //struct vki_xen_domctl_setdebugging      setdebugging;
-        //struct vki_xen_domctl_irq_permission    irq_permission;
-        //struct vki_xen_domctl_iomem_permission  iomem_permission;
+        struct vki_xen_domctl_irq_permission    irq_permission;
+        struct vki_xen_domctl_iomem_permission  iomem_permission;
         struct vki_xen_domctl_ioport_permission ioport_permission;
         struct vki_xen_domctl_hypercall_init    hypercall_init;
         //struct vki_xen_domctl_arch_setup        arch_setup;
@@ -386,12 +506,13 @@
         struct vki_xen_domctl_address_size      address_size;
         //struct vki_xen_domctl_sendtrigger       sendtrigger;
         //struct vki_xen_domctl_get_device_group  get_device_group;
-        //struct vki_xen_domctl_assign_device     assign_device;
+        struct vki_xen_domctl_assign_device     assign_device;
         //struct vki_xen_domctl_bind_pt_irq       bind_pt_irq;
         //struct vki_xen_domctl_memory_mapping    memory_mapping;
         //struct vki_xen_domctl_ioport_mapping    ioport_mapping;
-        //struct vki_xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
-        //struct vki_xen_domctl_ext_vcpucontext   ext_vcpucontext;
+        struct vki_xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
+        struct vki_xen_domctl_ext_vcpucontext_00000008 ext_vcpucontext_00000008;
+        struct vki_xen_domctl_ext_vcpucontext_00000009 ext_vcpucontext_00000009;
         //struct vki_xen_domctl_set_target        set_target;
         //struct vki_xen_domctl_subscribe         subscribe;
         struct vki_xen_domctl_debug_op          debug_op;
@@ -400,6 +521,7 @@
 #if defined(__i386__) || defined(__x86_64__)
         struct vki_xen_domctl_cpuid             cpuid;
         struct vki_xen_domctl_vcpuextstate      vcpuextstate;
+        struct vki_xen_domctl_vcpu_msrs         vcpu_msrs;
 #endif
         struct vki_xen_domctl_set_access_required access_required;
         //struct vki_xen_domctl_audit_p2m         audit_p2m;
diff --git a/include/vki/vki-xen-evtchn.h b/include/vki/vki-xen-evtchn.h
index e7a3310..d8ff600 100644
--- a/include/vki/vki-xen-evtchn.h
+++ b/include/vki/vki-xen-evtchn.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_EVTCHN_H
 #define __VKI_XEN_EVTCHN_H
 
diff --git a/include/vki/vki-xen-gnttab.h b/include/vki/vki-xen-gnttab.h
index 97ca6d8..11c4219 100644
--- a/include/vki/vki-xen-gnttab.h
+++ b/include/vki/vki-xen-gnttab.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_GNTTAB_H
 #define __VKI_XEN_GNTTAB_H
 
diff --git a/include/vki/vki-xen-hvm.h b/include/vki/vki-xen-hvm.h
index f26e039..0664b73 100644
--- a/include/vki/vki-xen-hvm.h
+++ b/include/vki/vki-xen-hvm.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_HVM_H
 #define __VKI_XEN_HVM_H
 
@@ -10,6 +37,14 @@
     vki_uint64_t value;    /* IN/OUT */
 };
 
+#define VKI_XEN_HVMOP_set_pci_intx_level  2
+struct vki_xen_hvm_set_pci_intx_level {
+    vki_xen_domid_t  domid;
+    vki_uint8_t  domain, bus, device, intx;
+    vki_uint8_t  level;
+};
+typedef struct vki_xen_hvm_set_pci_intx_level vki_xen_hvm_set_pci_intx_level_t;
+
 #define VKI_XEN_HVMOP_set_isa_irq_level 3
 struct vki_xen_hvm_set_isa_irq_level {
     vki_xen_domid_t  domid;
@@ -26,6 +61,15 @@
 };
 typedef struct vki_xen_hvm_set_pci_link_route vki_xen_hvm_set_pci_link_route_t;
 
+#define VKI_XEN_HVMOP_track_dirty_vram 6
+struct vki_xen_hvm_track_dirty_vram {
+    vki_xen_domid_t  domid;                          /* IN  */
+    vki_xen_uint64_aligned_t first_pfn;              /* IN  */
+    vki_xen_uint64_aligned_t nr;                     /* IN  */
+    VKI_XEN_GUEST_HANDLE_64(vki_uint8) dirty_bitmap; /* OUT */
+};
+typedef struct vki_xen_hvm_track_dirty_vram vki_xen_hvm_track_dirty_vram_t;
+
 #define VKI_XEN_HVMOP_set_mem_type 8
 struct vki_xen_hvm_set_mem_type {
     vki_xen_domid_t  domid;
diff --git a/include/vki/vki-xen-memory.h b/include/vki/vki-xen-memory.h
index 2690c60..c307690 100644
--- a/include/vki/vki-xen-memory.h
+++ b/include/vki/vki-xen-memory.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_MEMORY_H
 #define __VKI_XEN_MEMORY_H
 
@@ -22,6 +49,7 @@
 #define VKI_XENMEM_get_sharing_shared_pages   19
 #define VKI_XENMEM_access_op                  21
 #define VKI_XENMEM_claim_pages                24
+#define VKI_XENMEM_machphys_compat_mfn_list   25
 
 struct vki_xen_memory_map {
     unsigned int nr_entries;
diff --git a/include/vki/vki-xen-mmuext.h b/include/vki/vki-xen-mmuext.h
index e6f06f7..5e758b3 100644
--- a/include/vki/vki-xen-mmuext.h
+++ b/include/vki/vki-xen-mmuext.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_MMUEXT_H
 #define __VKI_XEN_MMUEXT_H
 
diff --git a/include/vki/vki-xen-physdev.h b/include/vki/vki-xen-physdev.h
new file mode 100644
index 0000000..d3111a0
--- /dev/null
+++ b/include/vki/vki-xen-physdev.h
@@ -0,0 +1,67 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
+#ifndef __VKI_XEN_PHYSDEV_H
+#define __VKI_XEN_PHYSDEV_H
+
+#define VKI_XEN_MAP_PIRQ_TYPE_MSI               0x0
+#define VKI_XEN_MAP_PIRQ_TYPE_GSI               0x1
+#define VKI_XEN_MAP_PIRQ_TYPE_UNKNOWN           0x2
+#define VKI_XEN_MAP_PIRQ_TYPE_MSI_SEG           0x3
+#define VKI_XEN_MAP_PIRQ_TYPE_MULTI_MSI         0x4
+
+#define VKI_XEN_PHYSDEVOP_map_pirq               13
+struct vki_xen_physdev_map_pirq {
+    vki_xen_domid_t domid;
+    /* IN */
+    int type;
+    /* IN (ignored for ..._MULTI_MSI) */
+    int index;
+    /* IN or OUT */
+    int pirq;
+    /* IN - high 16 bits hold segment for ..._MSI_SEG and ..._MULTI_MSI */
+    int bus;
+    /* IN */
+    int devfn;
+    /* IN (also OUT for ..._MULTI_MSI) */
+    int entry_nr;
+    /* IN */
+    vki_uint64_t table_base;
+};
+
+#define VKI_XEN_PHYSDEVOP_unmap_pirq             14
+struct vki_xen_physdev_unmap_pirq {
+    vki_xen_domid_t domid;
+    /* IN */
+    int pirq;
+};
+
+#endif // __VKI_XEN_PHYSDEV_H
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/include/vki/vki-xen-schedop.h b/include/vki/vki-xen-schedop.h
new file mode 100644
index 0000000..30f8a33
--- /dev/null
+++ b/include/vki/vki-xen-schedop.h
@@ -0,0 +1,50 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
+#ifndef __VKI_XEN_SCHED_OP_H
+#define __VKI_XEN_SCHED_OP_H
+
+#define VKI_XEN_SCHEDOP_yield           0
+
+#define VKI_XEN_SCHEDOP_block           1
+
+#define VKI_XEN_SCHEDOP_shutdown        2
+
+#define VKI_XEN_SCHEDOP_poll            3
+
+#define VKI_XEN_SCHEDOP_remote_shutdown 4
+struct vki_xen_remote_shutdown {
+    vki_xen_domid_t domain_id;
+    unsigned int reason;
+};
+typedef struct vki_xen_remote_shutdown vki_xen_remote_shutdown_t;
+
+#define VKI_XEN_SCHEDOP_shutdown_code   5
+
+#define VKI_XEN_SCHEDOP_watchdog        6
+
+#endif /* __VKI_XEN_SCHED_OP_H */
diff --git a/include/vki/vki-xen-sysctl.h b/include/vki/vki-xen-sysctl.h
index 1621b7a..8f4eac1 100644
--- a/include/vki/vki-xen-sysctl.h
+++ b/include/vki/vki-xen-sysctl.h
@@ -5,9 +5,10 @@
  * The sysctl interface is versioned via the interface_version
  * field. This structures in this header supports sysctl interfaces:
  *
- * - 00000008: Xen 4.1
- * - 00000009: Xen 4.2
- * - 0000000a: Xen 4.3
+ * - 0x00000008: Xen 4.1
+ * - 0x00000009: Xen 4.2
+ * - 0x0000000a: Xen 4.3 & 4.4
+ * - 0x0000000b: Xen 4.5
  *
  * When adding a new subop be sure to include the variants used by all
  * of the above, both here and in syswrap-xen.c
@@ -86,6 +87,8 @@
     vki_uint32_t              num_domains;
 };
 
+/* vki_xen_sysctl_getdomaininfolist_0000000b is the same as 0000000a */
+
 #define VKI_XEN_SYSCTL_CPUPOOL_OP_CREATE                1  /* C */
 #define VKI_XEN_SYSCTL_CPUPOOL_OP_DESTROY               2  /* D */
 #define VKI_XEN_SYSCTL_CPUPOOL_OP_INFO                  3  /* I */
@@ -156,6 +159,8 @@
     vki_uint32_t capabilities;
 };
 
+/* vki_xen_sysctl_physinfo_0000000b is the same as 0000000a */
+
 struct vki_xen_sysctl_sched_id {
     /* OUT variable. */
     vki_uint32_t              sched_id;
diff --git a/include/vki/vki-xen-tmem.h b/include/vki/vki-xen-tmem.h
index ab402f0..e372ae6 100644
--- a/include/vki/vki-xen-tmem.h
+++ b/include/vki/vki-xen-tmem.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_TMEM_H
 #define __VKI_XEN_TMEM_H
 
diff --git a/include/vki/vki-xen-version.h b/include/vki/vki-xen-version.h
index 6c6cae0..a022c94 100644
--- a/include/vki/vki-xen-version.h
+++ b/include/vki/vki-xen-version.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_VERSION_H
 #define __VKI_XEN_VERSION_H
 
diff --git a/include/vki/vki-xen-x86.h b/include/vki/vki-xen-x86.h
index a2d0fb2..a54a4de 100644
--- a/include/vki/vki-xen-x86.h
+++ b/include/vki/vki-xen-x86.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_X86_H
 #define __VKI_XEN_X86_H
 
diff --git a/include/vki/vki-xen-xsm.h b/include/vki/vki-xen-xsm.h
new file mode 100644
index 0000000..b8eb50d
--- /dev/null
+++ b/include/vki/vki-xen-xsm.h
@@ -0,0 +1,95 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
+#ifndef __VKI_XEN_XSM_H
+#define __VKI_XEN_XSM_H
+
+#define VKI_XEN_FLASK_INTERFACE_VERSION 1
+
+struct vki_xen_flask_sid_context {
+    /* IN/OUT: sid to convert to/from string */
+    vki_uint32_t sid;
+    /* IN: size of the context buffer
+     * OUT: actual size of the output context string
+     */
+    vki_uint32_t size;
+    VKI_XEN_GUEST_HANDLE(char) context;
+};
+
+struct vki_xen_flask_op {
+    vki_uint32_t cmd;
+#define VKI_FLASK_LOAD              1
+#define VKI_FLASK_GETENFORCE        2
+#define VKI_FLASK_SETENFORCE        3
+#define VKI_FLASK_CONTEXT_TO_SID    4
+#define VKI_FLASK_SID_TO_CONTEXT    5
+#define VKI_FLASK_ACCESS            6
+#define VKI_FLASK_CREATE            7
+#define VKI_FLASK_RELABEL           8
+#define VKI_FLASK_USER              9
+#define VKI_FLASK_POLICYVERS        10
+#define VKI_FLASK_GETBOOL           11
+#define VKI_FLASK_SETBOOL           12
+#define VKI_FLASK_COMMITBOOLS       13
+#define VKI_FLASK_MLS               14
+#define VKI_FLASK_DISABLE           15
+#define VKI_FLASK_GETAVC_THRESHOLD  16
+#define VKI_FLASK_SETAVC_THRESHOLD  17
+#define VKI_FLASK_AVC_HASHSTATS     18
+#define VKI_FLASK_AVC_CACHESTATS    19
+#define VKI_FLASK_MEMBER            20
+#define VKI_FLASK_ADD_OCONTEXT      21
+#define VKI_FLASK_DEL_OCONTEXT      22
+#define VKI_FLASK_GET_PEER_SID      23
+#define VKI_FLASK_RELABEL_DOMAIN    24
+    vki_uint32_t interface_version; /* VKI_XEN_FLASK_INTERFACE_VERSION */
+    union {
+        //struct vki_xen_flask_load load;
+        //struct vki_xen_flask_setenforce enforce;
+        /* FLASK_CONTEXT_TO_SID and FLASK_SID_TO_CONTEXT */
+        struct vki_xen_flask_sid_context sid_context;
+        //struct vki_xen_flask_access access;
+        /* FLASK_CREATE, FLASK_RELABEL, FLASK_MEMBER */
+        //struct vki_xen_flask_transition transition;
+        //struct vki_xen_flask_userlist userlist;
+        /* FLASK_GETBOOL, FLASK_SETBOOL */
+        //struct vki_xen_flask_boolean boolean;
+        //struct vki_xen_flask_setavc_threshold setavc_threshold;
+        //struct vki_xen_flask_hash_stats hash_stats;
+        //struct vki_xen_flask_cache_stats cache_stats;
+        /* FLASK_ADD_OCONTEXT, FLASK_DEL_OCONTEXT */
+        //struct vki_xen_flask_ocontext ocontext;
+        //struct vki_xen_flask_peersid peersid;
+        //struct vki_xen_flask_relabel relabel;
+    } u;
+};
+
+#endif // __VKI_XEN_XSM_H
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
diff --git a/include/vki/vki-xen.h b/include/vki/vki-xen.h
index e2f3d81..924a1e9 100644
--- a/include/vki/vki-xen.h
+++ b/include/vki/vki-xen.h
@@ -1,3 +1,30 @@
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2012-2015 Citrix
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
+   and Ian Campbell <ian.campbell@citrix.com> */
+
 #ifndef __VKI_XEN_H
 #define __VKI_XEN_H
 
@@ -80,12 +107,15 @@
 #include <vki/vki-xen-domctl.h>
 #include <vki/vki-xen-sysctl.h>
 #include <vki/vki-xen-mmuext.h>
+#include <vki/vki-xen-schedop.h>
 #include <vki/vki-xen-memory.h>
 #include <vki/vki-xen-evtchn.h>
 #include <vki/vki-xen-gnttab.h>
 #include <vki/vki-xen-version.h>
 #include <vki/vki-xen-hvm.h>
 #include <vki/vki-xen-tmem.h>
+#include <vki/vki-xen-xsm.h>
+#include <vki/vki-xen-physdev.h>
 
 #endif // __VKI_XEN_H
 
diff --git a/lackey/lk_main.c b/lackey/lk_main.c
index bbd4983..bc0f63a 100644
--- a/lackey/lk_main.c
+++ b/lackey/lk_main.c
@@ -7,7 +7,7 @@
    This file is part of Lackey, an example Valgrind tool that does
    some simple program measurement and tracing.
 
-   Copyright (C) 2002-2013 Nicholas Nethercote
+   Copyright (C) 2002-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -1050,7 +1050,7 @@
    VG_(details_version)         (NULL);
    VG_(details_description)     ("an example Valgrind tool");
    VG_(details_copyright_author)(
-      "Copyright (C) 2002-2013, and GNU GPL'd, by Nicholas Nethercote.");
+      "Copyright (C) 2002-2015, and GNU GPL'd, by Nicholas Nethercote.");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
    VG_(details_avg_translation_sizeB) ( 200 );
 
diff --git a/massif/ms_main.c b/massif/ms_main.c
index 5053c4f..e55a774 100644
--- a/massif/ms_main.c
+++ b/massif/ms_main.c
@@ -6,7 +6,7 @@
    This file is part of Massif, a Valgrind tool for profiling memory
    usage of programs.
 
-   Copyright (C) 2003-2013 Nicholas Nethercote
+   Copyright (C) 2003-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -1115,7 +1115,7 @@
    default:
       tl_assert2(0, "VERB_snapshot: unknown snapshot kind: %d", snapshot->kind);
    }
-   VERB(verbosity, "%s S%s%3d (t:%lld, hp:%ld, ex:%ld, st:%ld)\n",
+   VERB(verbosity, "%s S%s%3d (t:%lld, hp:%lu, ex:%lu, st:%lu)\n",
       prefix, suffix, i,
       snapshot->time,
       snapshot->heap_szB,
@@ -1722,7 +1722,8 @@
       }
 
       VERB(3, ">>> (%ld, %ld)\n",
-         new_req_szB - old_req_szB, new_slop_szB - old_slop_szB);
+           (SSizeT)(new_req_szB - old_req_szB),
+           (SSizeT)(new_slop_szB - old_slop_szB));
    }
 
    return p_new;
@@ -1902,7 +1903,7 @@
 static INLINE void new_mem_stack_2(SizeT len, const HChar* what)
 {
    if (have_started_executing_code) {
-      VERB(3, "<<< new_mem_stack (%ld)\n", len);
+      VERB(3, "<<< new_mem_stack (%lu)\n", len);
       n_stack_allocs++;
       update_stack_stats(len);
       maybe_take_snapshot(Normal, what);
@@ -1913,7 +1914,7 @@
 static INLINE void die_mem_stack_2(SizeT len, const HChar* what)
 {
    if (have_started_executing_code) {
-      VERB(3, "<<< die_mem_stack (%ld)\n", -len);
+      VERB(3, "<<< die_mem_stack (-%lu)\n", len);
       n_stack_frees++;
       maybe_take_snapshot(Peak,   "stkPEAK");
       update_stack_stats(-len);
@@ -2149,7 +2150,7 @@
       }
       
       // Do the non-ip_desc part first...
-      FP("%sn%d: %lu ", depth_str, sxpt->Sig.n_children, sxpt->szB);
+      FP("%sn%u: %lu ", depth_str, sxpt->Sig.n_children, sxpt->szB);
 
       // For ip_descs beginning with "0xABCD...:" addresses, we first
       // measure the length of the "0xabcd: " address at the start of the
@@ -2407,7 +2408,7 @@
    STATS("stack allocs:          %u\n", n_stack_allocs);
    STATS("stack frees:           %u\n", n_stack_frees);
    STATS("XPts:                  %u\n", n_xpts);
-   STATS("top-XPts:              %u (%d%%)\n",
+   STATS("top-XPts:              %u (%u%%)\n",
       alloc_xpt->n_children,
       ( n_xpts ? alloc_xpt->n_children * 100 / n_xpts : 0));
    STATS("XPt init expansions:   %u\n", n_xpt_init_expansions);
@@ -2549,7 +2550,7 @@
    VG_(details_version)         (NULL);
    VG_(details_description)     ("a heap profiler");
    VG_(details_copyright_author)(
-      "Copyright (C) 2003-2013, and GNU GPL'd, by Nicholas Nethercote");
+      "Copyright (C) 2003-2015, and GNU GPL'd, by Nicholas Nethercote");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
 
    VG_(details_avg_translation_sizeB) ( 330 );
diff --git a/massif/ms_print.in b/massif/ms_print.in
index 6fa3669..e6fae89 100755
--- a/massif/ms_print.in
+++ b/massif/ms_print.in
@@ -7,7 +7,7 @@
 #  This file is part of Massif, a Valgrind tool for profiling memory
 #  usage of programs.
 #
-#  Copyright (C) 2007-2013 Nicholas Nethercote
+#  Copyright (C) 2007-2015 Nicholas Nethercote
 #     njn@valgrind.org
 #
 #  This program is free software; you can redistribute it and/or
@@ -76,7 +76,7 @@
     --x=<4..1000>         graph width, in columns [72]
     --y=<4..1000>         graph height, in rows [20]
 
-  ms_print is Copyright (C) 2007-2013 Nicholas Nethercote.
+  ms_print is Copyright (C) 2007-2015 Nicholas Nethercote.
   and licensed under the GNU General Public License, version 2.
   Bug reports, feedback, admiration, abuse, etc, to: njn\@valgrind.org.
                                                 
diff --git a/massif/tests/filter_verbose b/massif/tests/filter_verbose
index 5f159c3..745b521 100755
--- a/massif/tests/filter_verbose
+++ b/massif/tests/filter_verbose
@@ -7,6 +7,9 @@
 
 $dir/filter_stderr | 
 
+# Remove any --pid:0: strings (debuglog level zero output)
+sed "/^--[0-9]\{1,7\}:0:*/d" |
+
 # Only print lines that contain "Massif:".  The -n means don't print any
 # lines by default, and the 'p' means do print those that match the pattern.
 sed -n "/Massif:/p" |
diff --git a/massif/tests/malloc_usable.c b/massif/tests/malloc_usable.c
index 1a8b863..0182e6c 100644
--- a/massif/tests/malloc_usable.c
+++ b/massif/tests/malloc_usable.c
@@ -5,7 +5,7 @@
 
 int main(void)
 {
-#  if !defined(VGO_darwin)
+#  if !defined(VGO_darwin) && !defined(VGO_solaris)
    // Because our allocations are in multiples of 8 or 16, 99 will round up
    // to 104 or 112.
    int* x = malloc(99);
diff --git a/memcheck/docs/mc-manual.xml b/memcheck/docs/mc-manual.xml
index 7d84dc5..b54b721 100644
--- a/memcheck/docs/mc-manual.xml
+++ b/memcheck/docs/mc-manual.xml
@@ -811,7 +811,7 @@
 
   <varlistentry id="opt.leak-check-heuristics" xreflabel="--leak-check-heuristics">
     <term>
-      <option><![CDATA[--leak-check-heuristics=<set> [default: none] ]]></option>
+      <option><![CDATA[--leak-check-heuristics=<set> [default: all] ]]></option>
     </term>
     <listitem>
       <para>Specifies the set of leak check heuristics to be used
@@ -947,7 +947,7 @@
 
   <varlistentry id="opt.partial-loads-ok" xreflabel="--partial-loads-ok">
     <term>
-      <option><![CDATA[--partial-loads-ok=<yes|no> [default: no] ]]></option>
+      <option><![CDATA[--partial-loads-ok=<yes|no> [default: yes] ]]></option>
     </term>
     <listitem>
       <para>Controls how Memcheck handles 32-, 64-, 128- and 256-bit
@@ -965,14 +965,31 @@
 
       <para>Note that code that behaves in this way is in violation of
       the ISO C/C++ standards, and should be considered broken.  If
-      at all possible, such code should be fixed.  This option should be
-      used only as a last resort.</para>
+      at all possible, such code should be fixed.</para>
+    </listitem>
+  </varlistentry>
+
+  <varlistentry id="opt.expensive-definedness-checks" xreflabel="--expensive-definedness-checks">
+    <term>
+      <option><![CDATA[--expensive-definedness-checks=<yes|no> [default: no] ]]></option>
+    </term>
+    <listitem>
+      <para>Controls whether Memcheck should employ more precise but also more
+      expensive (time consuming) algorithms when checking the definedness of a
+      value. The default setting is not to do that and it is usually
+      sufficient. However, for highly optimised code valgrind may sometimes
+      incorrectly complain. 
+      Invoking valgrind with <option>--expensive-definedness-checks=yes</option> 
+      helps but comes at a performance cost. Runtime degradation of
+      25% have been observed but the extra cost depends a lot on the
+      application at hand.
+      </para>
     </listitem>
   </varlistentry>
 
   <varlistentry id="opt.keep-stacktraces" xreflabel="--keep-stacktraces">
     <term>
-      <option><![CDATA[--keep-stacktraces=alloc|free|alloc-and-free|alloc-then-free|none [default: alloc-then-free] ]]></option>
+      <option><![CDATA[--keep-stacktraces=alloc|free|alloc-and-free|alloc-then-free|none [default: alloc-and-free] ]]></option>
     </term>
     <listitem>
       <para>Controls which stack trace(s) to keep for malloc'd and/or
@@ -1648,36 +1665,51 @@
 
 <itemizedlist>
   <listitem>
-    <para><varname>get_vbits &lt;addr&gt; [&lt;len&gt;]</varname>
-    shows the definedness (V) bits for &lt;len&gt; (default 1) bytes
-    starting at &lt;addr&gt;.  The definedness of each byte in the
-    range is given using two hexadecimal digits.  These hexadecimal
-    digits encode the validity of each bit of the corresponding byte,
-    using 0 if the bit is defined and 1 if the bit is undefined.
-    If a byte is not addressable, its validity bits are replaced
-    by <varname>__</varname> (a double underscore).
+    <para><varname>xb &lt;addr&gt; [&lt;len&gt;]</varname>
+      shows the definedness (V) bits and values for &lt;len&gt; (default 1)
+      bytes starting at &lt;addr&gt;.
+      For each 8 bytes, two lines are output.
     </para>
     <para>
-    In the following example, <varname>string10</varname> is an array
-    of 10 characters, in which the even numbered bytes are
-    undefined. In the below example, the byte corresponding
-    to <varname>string10[5]</varname> is not addressable.
+      The first line shows the validity bits for 8 bytes.
+      The definedness of each byte in the range is given using two hexadecimal
+      digits.  These hexadecimal digits encode the validity of each bit of the
+      corresponding byte,
+      using 0 if the bit is defined and 1 if the bit is undefined.
+      If a byte is not addressable, its validity bits are replaced
+      by <varname>__</varname> (a double underscore).
+    </para>
+    <para>
+      The second line shows the values of the bytes below the corresponding
+      validity bits. The format used to show the bytes data is similar to the
+      GDB command 'x /&lt;len&gt;xb &lt;addr&gt;'. The value for a non
+      addressable bytes is shown as ?? (two question marks).
+    </para>
+    <para>
+      In the following example, <varname>string10</varname> is an array
+      of 10 characters, in which the even numbered bytes are
+      undefined. In the below example, the byte corresponding
+      to <varname>string10[5]</varname> is not addressable.
     </para>
 <programlisting><![CDATA[
 (gdb) p &string10
-$4 = (char (*)[10]) 0x8049e28
-(gdb) monitor get_vbits 0x8049e28 10
-ff00ff00 ff__ff00 ff00
-(gdb) 
+$4 = (char (*)[10]) 0x804a2f0
+(gdb) mo xb 0x804a2f0 10
+                  ff      00      ff      00      ff      __      ff      00
+0x804A2F0:      0x3f    0x6e    0x3f    0x65    0x3f    0x??     0x3f    0x65
+                  ff      00
+0x804A2F8:      0x3f    0x00
+Address 0x804A2F0 len 10 has 1 bytes unaddressable
+(gdb)
 ]]></programlisting>
 
-    <para> The command get_vbits cannot be used with registers. To get
-    the validity bits of a register, you must start Valgrind with the
-    option <option>--vgdb-shadow-registers=yes</option>. The validity
-    bits of a register can be obtained by printing the 'shadow 1'
-    corresponding register.  In the below x86 example, the register
-    eax has all its bits undefined, while the register ebx is fully
-    defined.
+    <para> The command xb cannot be used with registers. To get
+      the validity bits of a register, you must start Valgrind with the
+      option <option>--vgdb-shadow-registers=yes</option>. The validity
+      bits of a register can then be obtained by printing the 'shadow 1'
+      corresponding register.  In the below x86 example, the register
+      eax has all its bits undefined, while the register ebx is fully
+      defined.
     </para>
 <programlisting><![CDATA[
 (gdb) p /x $eaxs1
@@ -1690,6 +1722,31 @@
   </listitem>
 
   <listitem>
+    <para><varname>get_vbits &lt;addr&gt; [&lt;len&gt;]</varname>
+    shows the definedness (V) bits for &lt;len&gt; (default 1) bytes
+    starting at &lt;addr&gt; using the same convention as the
+    <varname>xb</varname> command. <varname>get_vbits</varname> only
+    shows the V bits (grouped by 4 bytes). It does not show the values.
+    If you want to associate V bits with the corresponding byte values, the
+    <varname>xb</varname> command will be easier to use, in particular
+    on little endian computers when associating undefined parts of an integer
+    with their V bits values.
+    </para>
+    <para>
+    The following example shows the result of <varname>get_vibts</varname>
+    on the <varname>string10</varname> used in the  <varname>xb</varname>
+    command explanation.
+    </para>
+<programlisting><![CDATA[
+(gdb) monitor get_vbits 0x804a2f0 10
+ff00ff00 ff__ff00 ff00
+Address 0x804A2F0 len 10 has 1 bytes unaddressable
+(gdb) 
+]]></programlisting>
+
+  </listitem>
+
+  <listitem>
     <para><varname>make_memory
     [noaccess|undefined|defined|Definedifaddressable] &lt;addr&gt;
     [&lt;len&gt;]</varname> marks the range of &lt;len&gt; (default 1)
@@ -1846,8 +1903,19 @@
   </listitem>
 
   <listitem>
-    <para><varname>block_list &lt;loss_record_nr&gt; </varname>
-    shows the list of blocks belonging to &lt;loss_record_nr&gt;.
+    <para><varname>block_list &lt;loss_record_nr&gt;|&lt;loss_record_nr_from&gt;..&lt;loss_record_nr_to&gt;
+        [unlimited*|limited &lt;max_blocks&gt;]
+        [heuristics heur1,heur2,...]
+      </varname>
+      shows the list of blocks belonging to
+      <varname>&lt;loss_record_nr&gt;</varname> (or to the loss records range
+      <varname>&lt;loss_record_nr_from&gt;..&lt;loss_record_nr_to&gt;</varname>).
+      The nr of blocks to print can be controlled using the
+      <varname>limited</varname> argument followed by the maximum nr
+      of blocks to output.
+      If one or more heuristics are given, only prints the loss records
+      and blocks found via one of the given <varname>heur1,heur2,...</varname>
+      heuristics.
     </para>
 
     <para> A leak search merges the allocated blocks in loss records :
@@ -1857,7 +1925,8 @@
     by a loss record number.
     The <varname>block_list</varname> command shows the loss record information
     followed by the addresses and sizes of the blocks which have been
-    merged in the loss record.
+    merged in the loss record. If a block was found using an heuristic, the block size
+    is followed by the heuristic.
     </para>
 
     <para> If a directly lost block causes some other blocks to be indirectly
diff --git a/memcheck/mc_errors.c b/memcheck/mc_errors.c
index 5781b80..6b763f1 100644
--- a/memcheck/mc_errors.c
+++ b/memcheck/mc_errors.c
@@ -8,7 +8,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -375,8 +375,8 @@
                lr->num_blocks, d_num_blocks,
                str_leak_lossmode(lr->key.state), 
                n_this_record, n_total_records );
-         emit( "    <leakedbytes>%ld</leakedbytes>\n", lr->szB);
-         emit( "    <leakedblocks>%d</leakedblocks>\n", lr->num_blocks);
+         emit( "    <leakedbytes>%lu</leakedbytes>\n", lr->szB);
+         emit( "    <leakedblocks>%u</leakedblocks>\n", lr->num_blocks);
          emit( "  </xwhat>\n" );
       }
       VG_(pp_ExeContext)(lr->key.allocated_at);
@@ -439,7 +439,7 @@
          MC_(any_value_errors) = True;
          if (xml) {
             emit( "  <kind>UninitValue</kind>\n" );
-            emit( "  <what>Use of uninitialised value of size %ld</what>\n",
+            emit( "  <what>Use of uninitialised value of size %lu</what>\n",
                   extra->Err.Value.szB );
             VG_(pp_ExeContext)( VG_(get_error_where)(err) );
             if (extra->Err.Value.origin_ec)
@@ -448,7 +448,7 @@
          } else {
             /* Could also show extra->Err.Cond.otag if debugging origin
                tracking */
-            emit( "Use of uninitialised value of size %ld\n",
+            emit( "Use of uninitialised value of size %lu\n",
                   extra->Err.Value.szB );
             VG_(pp_ExeContext)( VG_(get_error_where)(err) );
             if (extra->Err.Value.origin_ec)
@@ -594,7 +594,7 @@
          if (xml) {
             emit( "  <kind>Invalid%s</kind>\n",
                   extra->Err.Addr.isWrite ? "Write" : "Read"  );
-            emit( "  <what>Invalid %s of size %ld</what>\n",
+            emit( "  <what>Invalid %s of size %lu</what>\n",
                   extra->Err.Addr.isWrite ? "write" : "read",
                   extra->Err.Addr.szB );
             VG_(pp_ExeContext)( VG_(get_error_where)(err) );
@@ -602,7 +602,7 @@
                                  &extra->Err.Addr.ai,
                                  extra->Err.Addr.maybe_gcc );
          } else {
-            emit( "Invalid %s of size %ld\n",
+            emit( "Invalid %s of size %lu\n",
                   extra->Err.Addr.isWrite ? "write" : "read",
                   extra->Err.Addr.szB );
             VG_(pp_ExeContext)( VG_(get_error_where)(err) );
@@ -1256,13 +1256,13 @@
       CoreMemSupp,   // Memory errors in core (pthread ops, signal handling)
 
       // Undefined value errors of given size
-      Value1Supp, Value2Supp, Value4Supp, Value8Supp, Value16Supp,
+      Value1Supp, Value2Supp, Value4Supp, Value8Supp, Value16Supp, Value32Supp,
 
       // Undefined value error in conditional.
       CondSupp,
 
       // Unaddressable read/write attempt at given size
-      Addr1Supp, Addr2Supp, Addr4Supp, Addr8Supp, Addr16Supp,
+      Addr1Supp, Addr2Supp, Addr4Supp, Addr8Supp, Addr16Supp, Addr32Supp,
 
       JumpSupp,      // Jump to unaddressable target
       FreeSupp,      // Invalid or mismatching free
@@ -1285,6 +1285,7 @@
    else if (VG_STREQ(name, "Addr4"))   skind = Addr4Supp;
    else if (VG_STREQ(name, "Addr8"))   skind = Addr8Supp;
    else if (VG_STREQ(name, "Addr16"))  skind = Addr16Supp;
+   else if (VG_STREQ(name, "Addr32"))  skind = Addr32Supp;
    else if (VG_STREQ(name, "Jump"))    skind = JumpSupp;
    else if (VG_STREQ(name, "Free"))    skind = FreeSupp;
    else if (VG_STREQ(name, "Leak"))    skind = LeakSupp;
@@ -1297,6 +1298,7 @@
    else if (VG_STREQ(name, "Value4"))  skind = Value4Supp;
    else if (VG_STREQ(name, "Value8"))  skind = Value8Supp;
    else if (VG_STREQ(name, "Value16")) skind = Value16Supp;
+   else if (VG_STREQ(name, "Value32")) skind = Value32Supp;
    else if (VG_STREQ(name, "FishyValue")) skind = FishyValueSupp;
    else 
       return False;
@@ -1413,6 +1415,7 @@
       case Value4Supp: su_szB = 4; goto value_case;
       case Value8Supp: su_szB = 8; goto value_case;
       case Value16Supp:su_szB =16; goto value_case;
+      case Value32Supp:su_szB =32; goto value_case;
       value_case:
          return (ekind == Err_Value && extra->Err.Value.szB == su_szB);
 
@@ -1424,6 +1427,7 @@
       case Addr4Supp: su_szB = 4; goto addr_case;
       case Addr8Supp: su_szB = 8; goto addr_case;
       case Addr16Supp:su_szB =16; goto addr_case;
+      case Addr32Supp:su_szB =32; goto addr_case;
       addr_case:
          return (ekind == Err_Addr && extra->Err.Addr.szB == su_szB);
 
@@ -1495,6 +1499,7 @@
       case 4:               return "Addr4";
       case 8:               return "Addr8";
       case 16:              return "Addr16";
+      case 32:              return "Addr32";
       default:              VG_(tool_panic)("unexpected size for Addr");
       }
    }
@@ -1506,6 +1511,7 @@
       case 4:               return "Value4";
       case 8:               return "Value8";
       case 16:              return "Value16";
+      case 32:              return "Value32";
       default:              VG_(tool_panic)("unexpected size for Value");
       }
    }
diff --git a/memcheck/mc_include.h b/memcheck/mc_include.h
index f50a079..663cdca 100644
--- a/memcheck/mc_include.h
+++ b/memcheck/mc_include.h
@@ -8,7 +8,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -207,26 +207,129 @@
 
 /* Define to collect detailed performance info. */
 /* #define MC_PROFILE_MEMORY */
-
 #ifdef MC_PROFILE_MEMORY
-#  define N_PROF_EVENTS 500
 
-UInt   MC_(event_ctr)[N_PROF_EVENTS];
-HChar* MC_(event_ctr_name)[N_PROF_EVENTS];
+/* Order of enumerators does not matter. But MCPE_LAST has to be the 
+   last entry in the list as it is used as an array bound. */
+enum {
+   MCPE_LOADV8,
+   MCPE_LOADV8_SLOW1,
+   MCPE_LOADV8_SLOW2,
+   MCPE_LOADV16,
+   MCPE_LOADV16_SLOW1,
+   MCPE_LOADV16_SLOW2,
+   MCPE_LOADV32,
+   MCPE_LOADV32_SLOW1,
+   MCPE_LOADV32_SLOW2,
+   MCPE_LOADV64,
+   MCPE_LOADV64_SLOW1,
+   MCPE_LOADV64_SLOW2,
+   MCPE_LOADV_128_OR_256,
+   MCPE_LOADV_128_OR_256_SLOW_LOOP,
+   MCPE_LOADV_128_OR_256_SLOW1,
+   MCPE_LOADV_128_OR_256_SLOW2,
+   MCPE_LOADVN_SLOW,
+   MCPE_LOADVN_SLOW_LOOP,
+   MCPE_STOREV8,
+   MCPE_STOREV8_SLOW1,
+   MCPE_STOREV8_SLOW2,
+   MCPE_STOREV8_SLOW3,
+   MCPE_STOREV8_SLOW4,
+   MCPE_STOREV16,
+   MCPE_STOREV16_SLOW1,
+   MCPE_STOREV16_SLOW2,
+   MCPE_STOREV16_SLOW3,
+   MCPE_STOREV16_SLOW4,
+   MCPE_STOREV32,
+   MCPE_STOREV32_SLOW1,
+   MCPE_STOREV32_SLOW2,
+   MCPE_STOREV32_SLOW3,
+   MCPE_STOREV32_SLOW4,
+   MCPE_STOREV64,
+   MCPE_STOREV64_SLOW1,
+   MCPE_STOREV64_SLOW2,
+   MCPE_STOREV64_SLOW3,
+   MCPE_STOREV64_SLOW4,
+   MCPE_STOREVN_SLOW,
+   MCPE_STOREVN_SLOW_LOOP,
+   MCPE_MAKE_ALIGNED_WORD32_UNDEFINED,
+   MCPE_MAKE_ALIGNED_WORD32_UNDEFINED_SLOW,
+   MCPE_MAKE_ALIGNED_WORD64_UNDEFINED,
+   MCPE_MAKE_ALIGNED_WORD64_UNDEFINED_SLOW,
+   MCPE_MAKE_ALIGNED_WORD32_NOACCESS,
+   MCPE_MAKE_ALIGNED_WORD32_NOACCESS_SLOW,
+   MCPE_MAKE_ALIGNED_WORD64_NOACCESS,
+   MCPE_MAKE_ALIGNED_WORD64_NOACCESS_SLOW,
+   MCPE_MAKE_MEM_NOACCESS,
+   MCPE_MAKE_MEM_UNDEFINED,
+   MCPE_MAKE_MEM_UNDEFINED_W_OTAG,
+   MCPE_MAKE_MEM_DEFINED,
+   MCPE_CHEAP_SANITY_CHECK,
+   MCPE_EXPENSIVE_SANITY_CHECK,
+   MCPE_COPY_ADDRESS_RANGE_STATE,
+   MCPE_COPY_ADDRESS_RANGE_STATE_LOOP1,
+   MCPE_COPY_ADDRESS_RANGE_STATE_LOOP2,
+   MCPE_CHECK_MEM_IS_NOACCESS,
+   MCPE_CHECK_MEM_IS_NOACCESS_LOOP,
+   MCPE_IS_MEM_ADDRESSABLE,
+   MCPE_IS_MEM_ADDRESSABLE_LOOP,
+   MCPE_IS_MEM_DEFINED,
+   MCPE_IS_MEM_DEFINED_LOOP,
+   MCPE_IS_MEM_DEFINED_COMPREHENSIVE,
+   MCPE_IS_MEM_DEFINED_COMPREHENSIVE_LOOP,
+   MCPE_IS_DEFINED_ASCIIZ,
+   MCPE_IS_DEFINED_ASCIIZ_LOOP,
+   MCPE_FIND_CHUNK_FOR_OLD,
+   MCPE_FIND_CHUNK_FOR_OLD_LOOP,
+   MCPE_SET_ADDRESS_RANGE_PERMS,
+   MCPE_SET_ADDRESS_RANGE_PERMS_SINGLE_SECMAP,
+   MCPE_SET_ADDRESS_RANGE_PERMS_STARTOF_SECMAP,
+   MCPE_SET_ADDRESS_RANGE_PERMS_MULTIPLE_SECMAPS,
+   MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM1,
+   MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM2,
+   MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM1_QUICK,
+   MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM2_QUICK,
+   MCPE_SET_ADDRESS_RANGE_PERMS_LOOP1A,
+   MCPE_SET_ADDRESS_RANGE_PERMS_LOOP1B,
+   MCPE_SET_ADDRESS_RANGE_PERMS_LOOP1C,
+   MCPE_SET_ADDRESS_RANGE_PERMS_LOOP8A,
+   MCPE_SET_ADDRESS_RANGE_PERMS_LOOP8B,
+   MCPE_SET_ADDRESS_RANGE_PERMS_LOOP64K,
+   MCPE_SET_ADDRESS_RANGE_PERMS_LOOP64K_FREE_DIST_SM,
+   MCPE_NEW_MEM_STACK,
+   MCPE_NEW_MEM_STACK_4,
+   MCPE_NEW_MEM_STACK_8,
+   MCPE_NEW_MEM_STACK_12,
+   MCPE_NEW_MEM_STACK_16,
+   MCPE_NEW_MEM_STACK_32,
+   MCPE_NEW_MEM_STACK_112,
+   MCPE_NEW_MEM_STACK_128,
+   MCPE_NEW_MEM_STACK_144,
+   MCPE_NEW_MEM_STACK_160,
+   MCPE_DIE_MEM_STACK,
+   MCPE_DIE_MEM_STACK_4,
+   MCPE_DIE_MEM_STACK_8,
+   MCPE_DIE_MEM_STACK_12,
+   MCPE_DIE_MEM_STACK_16,
+   MCPE_DIE_MEM_STACK_32,
+   MCPE_DIE_MEM_STACK_112,
+   MCPE_DIE_MEM_STACK_128,
+   MCPE_DIE_MEM_STACK_144,
+   MCPE_DIE_MEM_STACK_160,
+   /* Do not add enumerators past this line. */
+   MCPE_LAST
+};
 
-#  define PROF_EVENT(ev, name)                                \
-   do { tl_assert((ev) >= 0 && (ev) < N_PROF_EVENTS);         \
-        /* crude and inaccurate check to ensure the same */   \
-        /* event isn't being used with > 1 name */            \
-        if (MC_(event_ctr_name)[ev])                         \
-           tl_assert(name == MC_(event_ctr_name)[ev]);       \
-        MC_(event_ctr)[ev]++;                                \
-        MC_(event_ctr_name)[ev] = (name);                    \
+extern ULong MC_(event_ctr)[MCPE_LAST];
+
+#  define PROF_EVENT(ev)                           \
+   do { tl_assert((ev) >= 0 && (ev) < MCPE_LAST);  \
+      MC_(event_ctr)[ev]++;                        \
    } while (False);
 
 #else
 
-#  define PROF_EVENT(ev, name) /* */
+#  define PROF_EVENT(ev)    /* */
 
 #endif   /* MC_PROFILE_MEMORY */
 
@@ -357,10 +460,16 @@
 // maintains the lcp.deltamode given in the last call to detect_memory_leaks
 extern LeakCheckDeltaMode MC_(detect_memory_leaks_last_delta_mode);
 
-// prints the list of blocks corresponding to the given loss_record_nr.
-// Returns True if loss_record_nr identifies a correct loss record from last
-// leak search, returns False otherwise.
-Bool MC_(print_block_list) ( UInt loss_record_nr);
+// prints the list of blocks corresponding to the given loss_record_nr slice
+// (from/to) (up to maximum max_blocks)
+// Returns True if loss_record_nr_from identifies a correct loss record
+// from last leak search, returns False otherwise.
+// Note that loss_record_nr_to can be bigger than the nr of loss records. All
+// loss records after from will then be examined and maybe printed.
+// If heuristics != 0, print only the loss records/blocks found via
+// one of the heuristics in the set.
+Bool MC_(print_block_list) ( UInt loss_record_nr_from, UInt loss_record_nr_to,
+                             UInt max_blocks, UInt heuristics);
 
 // Prints the addresses/registers/... at which a pointer to
 // the given range [address, address+szB[ is found.
@@ -533,7 +642,7 @@
 #define HiS(h,s) ((s) & H2S(h))
 
 /* Heuristics set to use for the leak search.
-   Default : no heuristic. */
+   Default : all heuristics. */
 extern UInt MC_(clo_leak_check_heuristics);
 
 /* Assume accesses immediately below %esp are due to gcc-2.96 bugs.
@@ -591,6 +700,9 @@
 /* Should we show mismatched frees?  Default: YES */
 extern Bool MC_(clo_show_mismatched_frees);
 
+/* Should we use expensive definedness checking for add/sub and compare
+   operations? Default: NO */
+extern Bool MC_(clo_expensive_definedness_checks);
 
 /*------------------------------------------------------------*/
 /*--- Instrumentation                                      ---*/
diff --git a/memcheck/mc_leakcheck.c b/memcheck/mc_leakcheck.c
index 791a5c1..d1d1f23 100644
--- a/memcheck/mc_leakcheck.c
+++ b/memcheck/mc_leakcheck.c
@@ -7,7 +7,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -265,9 +265,9 @@
 {
    Int  i;
    Addr a_lo, a_hi;
-   PROF_EVENT(70, "find_chunk_for_OLD");
+   PROF_EVENT(MCPE_FIND_CHUNK_FOR_OLD);
    for (i = 0; i < n_chunks; i++) {
-      PROF_EVENT(71, "find_chunk_for_OLD(loop)");
+      PROF_EVENT(MCPE_FIND_CHUNK_FOR_OLD_LOOP);
       a_lo = chunks[i]->data;
       a_hi = ((Addr)chunks[i]->data) + chunks[i]->szB;
       if (a_lo <= ptr && ptr < a_hi)
@@ -683,6 +683,65 @@
       && MC_(is_valid_aligned_word)(a + 4);
 }
 
+/* The below leak_search_fault_catcher is used to catch memory access
+   errors happening during leak_search.  During the scan, we check
+   with aspacemgr and/or VA bits that each page or dereferenced location is
+   readable and belongs to the client.  However, we still protect
+   against SIGSEGV and SIGBUS e.g. in case aspacemgr is desynchronised
+   with the real page mappings.  Such a desynchronisation could happen
+   due to an aspacemgr bug.  Note that if the application is using
+   mprotect(NONE), then a page can be unreadable but have addressable
+   and defined VA bits (see mc_main.c function mc_new_mem_mprotect).
+   Currently, 2 functions are dereferencing client memory during leak search:
+   heuristic_reachedness and lc_scan_memory.
+   Each such function has its own fault catcher, that will call
+   leak_search_fault_catcher with the proper 'who' and jmpbuf parameters. */
+static volatile Addr bad_scanned_addr;
+static
+void leak_search_fault_catcher ( Int sigNo, Addr addr,
+                                 const HChar *who, VG_MINIMAL_JMP_BUF(jmpbuf) )
+{
+   vki_sigset_t sigmask;
+
+   if (0)
+      VG_(printf)("OUCH! sig=%d addr=%#lx who=%s\n", sigNo, addr, who);
+
+   /* Signal handler runs with the signal masked.
+      Unmask the handled signal before longjmp-ing or return-ing.
+      Note that during leak search, we expect only SIGSEGV or SIGBUS
+      and we do not expect another occurence until we longjmp-ed!return-ed
+      to resume the leak search. So, it is safe to unmask the signal
+      here. */
+   /* First get current mask (by passing NULL as first arg) */
+   VG_(sigprocmask)(VKI_SIG_SETMASK, NULL, &sigmask);
+   /* Then set a new sigmask, with this signal removed from the mask. */
+   VG_(sigdelset)(&sigmask, sigNo);
+   VG_(sigprocmask)(VKI_SIG_SETMASK, &sigmask, NULL);
+
+   if (sigNo == VKI_SIGSEGV || sigNo == VKI_SIGBUS) {
+      bad_scanned_addr = addr;
+      VG_MINIMAL_LONGJMP(jmpbuf);
+   } else {
+      /* ??? During leak search, we are not supposed to receive any
+         other sync signal that these 2.
+         In theory, we should not call VG_(umsg) in a signal handler,
+         but better (try to) report this unexpected behaviour. */
+      VG_(umsg)("leak_search_fault_catcher:"
+                " unexpected signal %d, catcher %s ???\n",
+                sigNo, who);
+   }
+}
+
+// jmpbuf and fault_catcher used during heuristic_reachedness
+static VG_MINIMAL_JMP_BUF(heuristic_reachedness_jmpbuf);
+static
+void heuristic_reachedness_fault_catcher ( Int sigNo, Addr addr )
+{
+   leak_search_fault_catcher (sigNo, addr, 
+                              "heuristic_reachedness_fault_catcher",
+                              heuristic_reachedness_jmpbuf);
+}
+
 // If ch is heuristically reachable via an heuristic member of heur_set,
 // returns this heuristic.
 // If ch cannot be considered reachable using one of these heuristics,
@@ -696,6 +755,17 @@
                                                  MC_Chunk *ch, LC_Extra *ex,
                                                  UInt heur_set)
 {
+
+   fault_catcher_t prev_catcher;
+
+   prev_catcher = VG_(set_fault_catcher)(heuristic_reachedness_fault_catcher);
+
+   // See leak_search_fault_catcher
+   if (VG_MINIMAL_SETJMP(heuristic_reachedness_jmpbuf) != 0) {
+      VG_(set_fault_catcher) (prev_catcher);
+      return LchNone;
+   }
+
    if (HiS(LchStdString, heur_set)) {
       // Detects inner pointers to Std::String for layout being
       //     length capacity refcount char_array[] \0
@@ -717,6 +787,7 @@
                // ??? probably not a good idea, as I guess stdstring
                // ??? allocator can be done via custom allocator
                // ??? or even a call to malloc ????
+               VG_(set_fault_catcher) (prev_catcher);
                return LchStdString;
             }
          }
@@ -735,6 +806,7 @@
           && is_valid_aligned_ULong(ch->data)) {
          const ULong size = *((ULong*)ch->data);
          if (size > 0 && (ch->szB - sizeof(ULong)) == size) {
+            VG_(set_fault_catcher) (prev_catcher);
             return LchLength64;
          }
       }
@@ -761,6 +833,7 @@
          const SizeT nr_elts = *((SizeT*)ch->data);
          if (nr_elts > 0 && (ch->szB - sizeof(SizeT)) % nr_elts == 0) {
             // ??? could check that ch->allockind is MC_AllocNewVec ???
+            VG_(set_fault_catcher) (prev_catcher);
             return LchNewArray;
          }
       }
@@ -792,12 +865,14 @@
                 && aligned_ptr_above_page0_is_vtable_addr(inner_addr)
                 && aligned_ptr_above_page0_is_vtable_addr(first_addr)) {
                // ??? could check that ch->allockind is MC_AllocNew ???
+               VG_(set_fault_catcher) (prev_catcher);
                return LchMultipleInheritance;
             }
          }
       }
    }
 
+   VG_(set_fault_catcher) (prev_catcher);
    return LchNone;
 }
 
@@ -899,11 +974,10 @@
       if (VG_DEBUG_CLIQUE) {
          if (ex->IorC.indirect_szB > 0)
             VG_(printf)("  clique %d joining clique %d adding %lu+%lu\n", 
-                        ch_no, clique, (unsigned long)ch->szB,
-			(unsigned long)ex->IorC.indirect_szB);
+                        ch_no, clique, (SizeT)ch->szB, ex->IorC.indirect_szB);
          else
             VG_(printf)("  block %d joining clique %d adding %lu\n", 
-                        ch_no, clique, (unsigned long)ch->szB);
+                        ch_no, clique, (SizeT)ch->szB);
       }
 
       lc_extras[clique].IorC.indirect_szB += ch->szB;
@@ -924,18 +998,13 @@
 }
 
 
-static VG_MINIMAL_JMP_BUF(memscan_jmpbuf);
-static volatile Addr bad_scanned_addr;
-
+static VG_MINIMAL_JMP_BUF(lc_scan_memory_jmpbuf);
 static
-void scan_all_valid_memory_catcher ( Int sigNo, Addr addr )
+void lc_scan_memory_fault_catcher ( Int sigNo, Addr addr )
 {
-   if (0)
-      VG_(printf)("OUCH! sig=%d addr=%#lx\n", sigNo, addr);
-   if (sigNo == VKI_SIGSEGV || sigNo == VKI_SIGBUS) {
-      bad_scanned_addr = addr;
-      VG_MINIMAL_LONGJMP(memscan_jmpbuf);
-   }
+   leak_search_fault_catcher (sigNo, addr, 
+                              "lc_scan_memory_fault_catcher",
+                              lc_scan_memory_jmpbuf);
 }
 
 // lc_scan_memory has 2 modes:
@@ -943,7 +1012,7 @@
 // 1. Leak check mode (searched == 0).
 // -----------------------------------
 // Scan a block of memory between [start, start+len).  This range may
-// be bogus, inaccessable, or otherwise strange; we deal with it.  For each
+// be bogus, inaccessible, or otherwise strange; we deal with it.  For each
 // valid aligned word we assume it's a pointer to a chunk a push the chunk
 // onto the mark stack if so.
 // clique is the "highest level clique" in which indirectly leaked blocks have
@@ -984,18 +1053,17 @@
 #endif
    Addr ptr = VG_ROUNDUP(start, sizeof(Addr));
    const Addr end = VG_ROUNDDN(start+len, sizeof(Addr));
-   vki_sigset_t sigmask;
+   fault_catcher_t prev_catcher;
 
    if (VG_DEBUG_LEAKCHECK)
       VG_(printf)("scan %#lx-%#lx (%lu)\n", start, end, len);
 
-   VG_(sigprocmask)(VKI_SIG_SETMASK, NULL, &sigmask);
-   VG_(set_fault_catcher)(scan_all_valid_memory_catcher);
+   prev_catcher = VG_(set_fault_catcher)(lc_scan_memory_fault_catcher);
 
    /* Optimisation: the loop below will check for each begin
       of SM chunk if the chunk is fully unaddressable. The idea is to
       skip efficiently such fully unaddressable SM chunks.
-      So, we preferrably start the loop on a chunk boundary.
+      So, we preferably start the loop on a chunk boundary.
       If the chunk is not fully unaddressable, we might be in
       an unaddressable page. Again, the idea is to skip efficiently
       such unaddressable page : this is the "else" part.
@@ -1017,19 +1085,9 @@
       between VKI_PAGE_SIZE, SM_SIZE and sizeof(Addr) which are asserted in
       MC_(detect_memory_leaks). */
 
-   // During scan, we check with aspacemgr that each page is readable and
-   // belongs to client.
-   // We still protect against SIGSEGV and SIGBUS e.g. in case aspacemgr is
-   // desynchronised with the real page mappings.
-   // Such a desynchronisation could happen due to an aspacemgr bug.
-   // Note that if the application is using mprotect(NONE), then
-   // a page can be unreadable but have addressable and defined
-   // VA bits (see mc_main.c function mc_new_mem_mprotect).
-   if (VG_MINIMAL_SETJMP(memscan_jmpbuf) != 0) {
+   // See leak_search_fault_catcher
+   if (VG_MINIMAL_SETJMP(lc_scan_memory_jmpbuf) != 0) {
       // Catch read error ...
-      // We need to restore the signal mask, because we were
-      // longjmped out of a signal handler.
-      VG_(sigprocmask)(VKI_SIG_SETMASK, &sigmask, NULL);
 #     if defined(VGA_s390x)
       // For a SIGSEGV, s390 delivers the page address of the bad address.
       // For a SIGBUS, old s390 kernels deliver a NULL address.
@@ -1110,8 +1168,7 @@
       ptr += sizeof(Addr);
    }
 
-   VG_(sigprocmask)(VKI_SIG_SETMASK, &sigmask, NULL);
-   VG_(set_fault_catcher)(NULL);
+   VG_(set_fault_catcher)(prev_catcher);
 }
 
 
@@ -1178,8 +1235,8 @@
 
 // allocates or reallocates lr_array, and set its elements to the loss records
 // contains in lr_table.
-static Int get_lr_array_from_lr_table(void) {
-   Int          i, n_lossrecords;
+static UInt get_lr_array_from_lr_table(void) {
+   UInt         i, n_lossrecords;
    LossRecord*  lr;
 
    n_lossrecords = VG_(OSetGen_Size)(lr_table);
@@ -1321,7 +1378,7 @@
         if (VG_DEBUG_LEAKCHECK)
            VG_(printf)("heuristic %s %#lx len %lu\n",
                        pp_heuristic(ex->heuristic),
-                       ch->data, (unsigned long)ch->szB);
+                       ch->data, (SizeT)ch->szB);
      }
 
       old_lr = VG_(OSetGen_Lookup)(lr_table, &lrkey);
@@ -1508,21 +1565,22 @@
 }
 
 // print recursively all indirectly leaked blocks collected in clique.
-static void print_clique (Int clique, UInt level)
+// Printing stops when *remaining reaches 0.
+static void print_clique (Int clique, UInt level, UInt *remaining)
 {
    Int ind;
-   Int i,  n_lossrecords;;
+   UInt i,  n_lossrecords;
 
    n_lossrecords = VG_(OSetGen_Size)(lr_table);
 
-   for (ind = 0; ind < lc_n_chunks; ind++) {
+   for (ind = 0; ind < lc_n_chunks && *remaining > 0; ind++) {
       LC_Extra*     ind_ex = &(lc_extras)[ind];
       if (ind_ex->state == IndirectLeak 
           && ind_ex->IorC.clique == (SizeT) clique) {
          MC_Chunk*    ind_ch = lc_chunks[ind];
          LossRecord*  ind_lr;
          LossRecordKey ind_lrkey;
-         Int lr_i;
+         UInt lr_i;
          ind_lrkey.state = ind_ex->state;
          ind_lrkey.allocated_at = MC_(allocated_at)(ind_ch);
          ind_lr = VG_(OSetGen_Lookup)(lr_table, &ind_lrkey);
@@ -1531,22 +1589,29 @@
                break;
          for (i = 0; i < level; i++)
             VG_(umsg)("  ");
-         VG_(umsg)("%p[%lu] indirect loss record %d\n",
-                   (void *)ind_ch->data, (unsigned long)ind_ch->szB,
+         VG_(umsg)("%p[%lu] indirect loss record %u\n",
+                   (void *)ind_ch->data, (SizeT)ind_ch->szB,
                    lr_i+1); // lr_i+1 for user numbering.
+         (*remaining)--;
          if (lr_i >= n_lossrecords)
             VG_(umsg)
                ("error: no indirect loss record found for %p[%lu]?????\n",
-                (void *)ind_ch->data, (unsigned long)ind_ch->szB);
-         print_clique(ind, level+1);
+                (void *)ind_ch->data, (SizeT)ind_ch->szB);
+         print_clique(ind, level+1, remaining);
       }
    }
  }
 
-Bool MC_(print_block_list) ( UInt loss_record_nr)
+Bool MC_(print_block_list) ( UInt loss_record_nr_from,
+                             UInt loss_record_nr_to,
+                             UInt max_blocks,
+                             UInt heuristics)
 {
-   Int          i,  n_lossrecords;
+   UInt loss_record_nr;
+   UInt         i,  n_lossrecords;
    LossRecord*  lr;
+   Bool lr_printed;
+   UInt remaining = max_blocks;
 
    if (lr_table == NULL || lc_chunks == NULL || lc_extras == NULL) {
       VG_(umsg)("Can't print block list : no valid leak search result\n");
@@ -1559,46 +1624,75 @@
    }
 
    n_lossrecords = VG_(OSetGen_Size)(lr_table);
-   if (loss_record_nr >= n_lossrecords)
-      return False; // Invalid loss record nr.
+   if (loss_record_nr_from >= n_lossrecords)
+      return False; // Invalid starting loss record nr.
+
+   if (loss_record_nr_to >= n_lossrecords)
+      loss_record_nr_to = n_lossrecords - 1;
 
    tl_assert (lr_array);
-   lr = lr_array[loss_record_nr];
+
+   for (loss_record_nr = loss_record_nr_from;
+        loss_record_nr <= loss_record_nr_to && remaining > 0;
+        loss_record_nr++) {
+      lr = lr_array[loss_record_nr];
+      lr_printed = False;
+
+      /* If user asks to print a specific loss record, we print
+         the block details, even if no block will be shown for this lr.
+         If user asks to print a range of lr, we only print lr details
+         when at least one block is shown. */
+      if (loss_record_nr_from == loss_record_nr_to) {
+         /* (+1 on loss_record_nr as user numbering for loss records
+            starts at 1). */
+         MC_(pp_LossRecord)(loss_record_nr+1, n_lossrecords, lr);
+         lr_printed = True;
+      }
    
-   // (re-)print the loss record details.
-   // (+1 on loss_record_nr as user numbering for loss records starts at 1).
-   MC_(pp_LossRecord)(loss_record_nr+1, n_lossrecords, lr);
+      // Match the chunks with loss records.
+      for (i = 0; i < lc_n_chunks && remaining > 0; i++) {
+         MC_Chunk*     ch = lc_chunks[i];
+         LC_Extra*     ex = &(lc_extras)[i];
+         LossRecord*   old_lr;
+         LossRecordKey lrkey;
+         lrkey.state        = ex->state;
+         lrkey.allocated_at = MC_(allocated_at)(ch);
 
-   // Match the chunks with loss records.
-   for (i = 0; i < lc_n_chunks; i++) {
-      MC_Chunk*     ch = lc_chunks[i];
-      LC_Extra*     ex = &(lc_extras)[i];
-      LossRecord*   old_lr;
-      LossRecordKey lrkey;
-      lrkey.state        = ex->state;
-      lrkey.allocated_at = MC_(allocated_at)(ch);
+         old_lr = VG_(OSetGen_Lookup)(lr_table, &lrkey);
+         if (old_lr) {
+            // We found an existing loss record matching this chunk.
+            // If this is the loss record we are looking for, output the
+            // pointer.
+            if (old_lr == lr_array[loss_record_nr]
+                && (heuristics == 0 || HiS(ex->heuristic, heuristics))) {
+               if (!lr_printed) {
+                  MC_(pp_LossRecord)(loss_record_nr+1, n_lossrecords, lr);
+                  lr_printed = True;
+               }
 
-      old_lr = VG_(OSetGen_Lookup)(lr_table, &lrkey);
-      if (old_lr) {
-         // We found an existing loss record matching this chunk.
-         // If this is the loss record we are looking for, output the pointer.
-         if (old_lr == lr_array[loss_record_nr]) {
-            VG_(umsg)("%p[%lu]\n",
-                      (void *)ch->data, (unsigned long) ch->szB);
-            if (ex->state != Reachable) {
-               // We can print the clique in all states, except Reachable.
-               // In Unreached state, lc_chunk[i] is the clique leader.
-               // In IndirectLeak, lc_chunk[i] might have been a clique leader
-               // which was later collected in another clique.
-               // For Possible, lc_chunk[i] might be the top of a clique
-               // or an intermediate clique.
-               print_clique(i, 1);
+               if (ex->heuristic)
+                  VG_(umsg)("%p[%lu] (found via heuristic %s)\n",
+                            (void *)ch->data, (SizeT)ch->szB,
+                            pp_heuristic (ex->heuristic));
+               else
+                  VG_(umsg)("%p[%lu]\n",
+                            (void *)ch->data, (SizeT)ch->szB);
+               remaining--;
+               if (ex->state != Reachable) {
+                  // We can print the clique in all states, except Reachable.
+                  // In Unreached state, lc_chunk[i] is the clique leader.
+                  // In IndirectLeak, lc_chunk[i] might have been a clique
+                  // leader which was later collected in another clique.
+                  // For Possible, lc_chunk[i] might be the top of a clique
+                  // or an intermediate clique.
+                  print_clique(i, 1, &remaining);
+               }
             }
+         } else {
+            // No existing loss record matches this chunk ???
+            VG_(umsg)("error: no loss record found for %p[%lu]?????\n",
+                      (void *)ch->data, (SizeT)ch->szB);
          }
-      } else {
-         // No existing loss record matches this chunk ???
-         VG_(umsg)("error: no loss record found for %p[%lu]?????\n",
-                   (void *)ch->data, (unsigned long) ch->szB);
       }
    }
    return True;
@@ -1856,7 +1950,7 @@
          tl_assert(ex->state == Unreached);
       }
    }
-      
+
    print_results( tid, lcp);
 
    VG_(free) ( lc_markstack );
@@ -1875,11 +1969,11 @@
        && addr_in_reg < searched_wpa + searched_szB) {
       if (addr_in_reg == searched_wpa)
          VG_(umsg)
-            ("tid %d register %s pointing at %#lx\n",
+            ("tid %u register %s pointing at %#lx\n",
              tid, regname, searched_wpa);  
       else
          VG_(umsg)
-            ("tid %d register %s interior pointing %lu bytes inside %#lx\n",
+            ("tid %u register %s interior pointing %lu bytes inside %#lx\n",
              tid, regname, (long unsigned) addr_in_reg - searched_wpa,
              searched_wpa);
    }
diff --git a/memcheck/mc_machine.c b/memcheck/mc_machine.c
index 60d5079..91fab00 100644
--- a/memcheck/mc_machine.c
+++ b/memcheck/mc_machine.c
@@ -9,7 +9,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2008-2013 OpenWorks Ltd
+   Copyright (C) 2008-2015 OpenWorks Ltd
       info@open-works.co.uk
 
    This program is free software; you can redistribute it and/or
diff --git a/memcheck/mc_main.c b/memcheck/mc_main.c
index 1fc1561..65fdfcb 100644
--- a/memcheck/mc_main.c
+++ b/memcheck/mc_main.c
@@ -1,3 +1,4 @@
+/* -*- mode: C; c-basic-offset: 3; -*- */
 
 /*--------------------------------------------------------------------*/
 /*--- MemCheck: Maintain bitmaps of memory, tracking the           ---*/
@@ -9,7 +10,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -51,6 +52,10 @@
 #include "memcheck.h"   /* for client requests */
 
 
+/* Set to 1 to enable handwritten assembly helpers on targets for
+   which it is supported. */
+#define ENABLE_ASSEMBLY_HELPERS 1
+
 /* Set to 1 to do a little more sanity checking */
 #define VG_DEBUG_MEMORY 0
 
@@ -251,7 +256,7 @@
 #define VA_BITS16_DEFINED     0xaaaa   // 10_10_10_10b x 2
 
 
-#define SM_CHUNKS             16384
+#define SM_CHUNKS             16384    // Each SM covers 64k of memory.
 #define SM_OFF(aaa)           (((aaa) & 0xffff) >> 2)
 #define SM_OFF_16(aaa)        (((aaa) & 0xffff) >> 3)
 
@@ -1172,17 +1177,17 @@
                    (void*)start, (void*)(start+len-1));
    }
    if (verbose) {
-      VG_(dmsg)("memcheck:   now have %ld ranges:\n",
+      VG_(dmsg)("memcheck:   now have %u ranges:\n",
                 VG_(sizeRangeMap)(gIgnoredAddressRanges));
-      Word i;
+      UInt i;
       for (i = 0; i < VG_(sizeRangeMap)(gIgnoredAddressRanges); i++) {
          UWord val     = IAR_INVALID;
          UWord key_min = ~(UWord)0;
          UWord key_max = (UWord)0;
          VG_(indexRangeMap)( &key_min, &key_max, &val,
                              gIgnoredAddressRanges, i );
-         VG_(dmsg)("memcheck:      [%ld]  %016llx-%016llx  %s\n",
-                   i, (ULong)key_min, (ULong)key_max, showIARKind(val));
+         VG_(dmsg)("memcheck:      [%u]  %016lx-%016lx  %s\n",
+                   i, key_min, key_max, showIARKind(val));
       }
    }
    return True;
@@ -1231,7 +1236,7 @@
       ULong pessim64   = V_BITS64_DEFINED;
       UWord long_index = byte_offset_w(szL, bigendian, j);
       for (i = 8-1; i >= 0; i--) {
-         PROF_EVENT(29, "mc_LOADV_128_or_256_slow(loop)");
+         PROF_EVENT(MCPE_LOADV_128_OR_256_SLOW_LOOP);
          ai = a + 8*long_index + byte_offset_w(8, bigendian, i);
          ok = get_vbits8(ai, &vbits8);
          vbits64 <<= 8;
@@ -1307,9 +1312,12 @@
 
 static
 __attribute__((noinline))
+__attribute__((used))
+VG_REGPARM(3) /* make sure we're using a fixed calling convention, since
+                 this function may get called from hand written assembly. */
 ULong mc_LOADVn_slow ( Addr a, SizeT nBits, Bool bigendian )
 {
-   PROF_EVENT(30, "mc_LOADVn_slow");
+   PROF_EVENT(MCPE_LOADVN_SLOW);
 
    /* ------------ BEGIN semi-fast cases ------------ */
    /* These deal quickly-ish with the common auxiliary primary map
@@ -1363,7 +1371,7 @@
       info can be gleaned from pessim64) but is used as a
       cross-check. */
    for (i = szB-1; i >= 0; i--) {
-      PROF_EVENT(31, "mc_LOADVn_slow(loop)");
+      PROF_EVENT(MCPE_LOADVN_SLOW_LOOP);
       ai = a + byte_offset_w(szB, bigendian, i);
       ok = get_vbits8(ai, &vbits8);
       vbits64 <<= 8; 
@@ -1461,7 +1469,7 @@
    Addr  ai;
    Bool  ok;
 
-   PROF_EVENT(35, "mc_STOREVn_slow");
+   PROF_EVENT(MCPE_STOREVN_SLOW);
 
    /* ------------ BEGIN semi-fast cases ------------ */
    /* These deal quickly-ish with the common auxiliary primary map
@@ -1523,7 +1531,7 @@
    /* Dump vbytes in memory, iterating from least to most significant
       byte.  At the same time establish addressibility of the location. */
    for (i = 0; i < szB; i++) {
-      PROF_EVENT(36, "mc_STOREVn_slow(loop)");
+      PROF_EVENT(MCPE_STOREVN_SLOW_LOOP);
       ai     = a + byte_offset_w(szB, bigendian, i);
       vbits8 = vbytes & 0xff;
       ok     = set_vbits8(ai, vbits8);
@@ -1552,7 +1560,7 @@
    SecMap** sm_ptr;
    SecMap*  example_dsm;
 
-   PROF_EVENT(150, "set_address_range_perms");
+   PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS);
 
    /* Check the V+A bits make sense. */
    tl_assert(VA_BITS16_NOACCESS  == vabits16 ||
@@ -1630,19 +1638,19 @@
    len_to_next_secmap = aNext - a;
    if ( lenT <= len_to_next_secmap ) {
       // Range entirely within one sec-map.  Covers almost all cases.
-      PROF_EVENT(151, "set_address_range_perms-single-secmap");
+      PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_SINGLE_SECMAP);
       lenA = lenT;
       lenB = 0;
    } else if (is_start_of_sm(a)) {
       // Range spans at least one whole sec-map, and starts at the beginning
       // of a sec-map; skip to Part 2.
-      PROF_EVENT(152, "set_address_range_perms-startof-secmap");
+      PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_STARTOF_SECMAP);
       lenA = 0;
       lenB = lenT;
       goto part2;
    } else {
       // Range spans two or more sec-maps, first one is partial.
-      PROF_EVENT(153, "set_address_range_perms-multiple-secmaps");
+      PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_MULTIPLE_SECMAPS);
       lenA = len_to_next_secmap;
       lenB = lenT - lenA;
    }
@@ -1659,11 +1667,11 @@
    if (is_distinguished_sm(*sm_ptr)) {
       if (*sm_ptr == example_dsm) {
          // Sec-map already has the V+A bits that we want, so skip.
-         PROF_EVENT(154, "set_address_range_perms-dist-sm1-quick");
+         PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM1_QUICK);
          a    = aNext;
          lenA = 0;
       } else {
-         PROF_EVENT(155, "set_address_range_perms-dist-sm1");
+         PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM1);
          *sm_ptr = copy_for_writing(*sm_ptr);
       }
    }
@@ -1673,7 +1681,7 @@
    while (True) {
       if (VG_IS_8_ALIGNED(a)) break;
       if (lenA < 1)           break;
-      PROF_EVENT(156, "set_address_range_perms-loop1a");
+      PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_LOOP1A);
       sm_off = SM_OFF(a);
       insert_vabits2_into_vabits8( a, vabits2, &(sm->vabits8[sm_off]) );
       a    += 1;
@@ -1682,7 +1690,7 @@
    // 8-aligned, 8 byte steps
    while (True) {
       if (lenA < 8) break;
-      PROF_EVENT(157, "set_address_range_perms-loop8a");
+      PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_LOOP8A);
       sm_off16 = SM_OFF_16(a);
       ((UShort*)(sm->vabits8))[sm_off16] = vabits16;
       a    += 8;
@@ -1691,7 +1699,7 @@
    // 1 byte steps
    while (True) {
       if (lenA < 1) break;
-      PROF_EVENT(158, "set_address_range_perms-loop1b");
+      PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_LOOP1B);
       sm_off = SM_OFF(a);
       insert_vabits2_into_vabits8( a, vabits2, &(sm->vabits8[sm_off]) );
       a    += 1;
@@ -1712,10 +1720,10 @@
    while (True) {
       if (lenB < SM_SIZE) break;
       tl_assert(is_start_of_sm(a));
-      PROF_EVENT(159, "set_address_range_perms-loop64K");
+      PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_LOOP64K);
       sm_ptr = get_secmap_ptr(a);
       if (!is_distinguished_sm(*sm_ptr)) {
-         PROF_EVENT(160, "set_address_range_perms-loop64K-free-dist-sm");
+         PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_LOOP64K_FREE_DIST_SM);
          // Free the non-distinguished sec-map that we're replacing.  This
          // case happens moderately often, enough to be worthwhile.
          SysRes sres = VG_(am_munmap_valgrind)((Addr)*sm_ptr, sizeof(SecMap));
@@ -1743,10 +1751,10 @@
    if (is_distinguished_sm(*sm_ptr)) {
       if (*sm_ptr == example_dsm) {
          // Sec-map already has the V+A bits that we want, so stop.
-         PROF_EVENT(161, "set_address_range_perms-dist-sm2-quick");
+         PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM2_QUICK);
          return;
       } else {
-         PROF_EVENT(162, "set_address_range_perms-dist-sm2");
+         PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM2);
          *sm_ptr = copy_for_writing(*sm_ptr);
       }
    }
@@ -1755,7 +1763,7 @@
    // 8-aligned, 8 byte steps
    while (True) {
       if (lenB < 8) break;
-      PROF_EVENT(163, "set_address_range_perms-loop8b");
+      PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_LOOP8B);
       sm_off16 = SM_OFF_16(a);
       ((UShort*)(sm->vabits8))[sm_off16] = vabits16;
       a    += 8;
@@ -1764,7 +1772,7 @@
    // 1 byte steps
    while (True) {
       if (lenB < 1) return;
-      PROF_EVENT(164, "set_address_range_perms-loop1c");
+      PROF_EVENT(MCPE_SET_ADDRESS_RANGE_PERMS_LOOP1C);
       sm_off = SM_OFF(a);
       insert_vabits2_into_vabits8( a, vabits2, &(sm->vabits8[sm_off]) );
       a    += 1;
@@ -1777,7 +1785,7 @@
 
 void MC_(make_mem_noaccess) ( Addr a, SizeT len )
 {
-   PROF_EVENT(40, "MC_(make_mem_noaccess)");
+   PROF_EVENT(MCPE_MAKE_MEM_NOACCESS);
    DEBUG("MC_(make_mem_noaccess)(%p, %lu)\n", a, len);
    set_address_range_perms ( a, len, VA_BITS16_NOACCESS, SM_DIST_NOACCESS );
    if (UNLIKELY( MC_(clo_mc_level) == 3 ))
@@ -1786,14 +1794,14 @@
 
 static void make_mem_undefined ( Addr a, SizeT len )
 {
-   PROF_EVENT(41, "make_mem_undefined");
+   PROF_EVENT(MCPE_MAKE_MEM_UNDEFINED);
    DEBUG("make_mem_undefined(%p, %lu)\n", a, len);
    set_address_range_perms ( a, len, VA_BITS16_UNDEFINED, SM_DIST_UNDEFINED );
 }
 
 void MC_(make_mem_undefined_w_otag) ( Addr a, SizeT len, UInt otag )
 {
-   PROF_EVENT(43, "MC_(make_mem_undefined)");
+   PROF_EVENT(MCPE_MAKE_MEM_UNDEFINED_W_OTAG);
    DEBUG("MC_(make_mem_undefined)(%p, %lu)\n", a, len);
    set_address_range_perms ( a, len, VA_BITS16_UNDEFINED, SM_DIST_UNDEFINED );
    if (UNLIKELY( MC_(clo_mc_level) == 3 ))
@@ -1830,13 +1838,19 @@
 
 void MC_(make_mem_defined) ( Addr a, SizeT len )
 {
-   PROF_EVENT(42, "MC_(make_mem_defined)");
+   PROF_EVENT(MCPE_MAKE_MEM_DEFINED);
    DEBUG("MC_(make_mem_defined)(%p, %lu)\n", a, len);
    set_address_range_perms ( a, len, VA_BITS16_DEFINED, SM_DIST_DEFINED );
    if (UNLIKELY( MC_(clo_mc_level) == 3 ))
       ocache_sarp_Clear_Origins ( a, len );
 }
 
+__attribute__((unused))
+static void make_mem_defined_w_tid ( Addr a, SizeT len, ThreadId tid )
+{
+   MC_(make_mem_defined)(a, len);
+}
+
 /* For each byte in [a,a+len), if the byte is addressable, make it be
    defined, but if it isn't addressible, leave it alone.  In other
    words a version of MC_(make_mem_defined) that doesn't mess with
@@ -1884,7 +1898,7 @@
    Bool  aligned, nooverlap;
 
    DEBUG("MC_(copy_address_range_state)\n");
-   PROF_EVENT(50, "MC_(copy_address_range_state)");
+   PROF_EVENT(MCPE_COPY_ADDRESS_RANGE_STATE);
 
    if (len == 0 || src == dst)
       return;
@@ -1934,7 +1948,7 @@
       /* We have to do things the slow way */
       if (src < dst) {
          for (i = 0, j = len-1; i < len; i++, j--) {
-            PROF_EVENT(51, "MC_(copy_address_range_state)(loop)");
+            PROF_EVENT(MCPE_COPY_ADDRESS_RANGE_STATE_LOOP1);
             vabits2 = get_vabits2( src+j );
             set_vabits2( dst+j, vabits2 );
             if (VA_BITS2_PARTDEFINED == vabits2) {
@@ -1945,7 +1959,7 @@
 
       if (src > dst) {
          for (i = 0; i < len; i++) {
-            PROF_EVENT(52, "MC_(copy_address_range_state)(loop)");
+            PROF_EVENT(MCPE_COPY_ADDRESS_RANGE_STATE_LOOP2);
             vabits2 = get_vabits2( src+i );
             set_vabits2( dst+i, vabits2 );
             if (VA_BITS2_PARTDEFINED == vabits2) {
@@ -2257,7 +2271,7 @@
    * Some obscure uses of x86/amd64 byte registers can cause lossage
      or confusion of origins.  %AH .. %DH are treated as different
      from, and unrelated to, their parent registers, %EAX .. %EDX.
-     So some wierd sequences like
+     So some weird sequences like
 
         movb undefined-value, %AH
         movb defined-value, %AL
@@ -2593,7 +2607,7 @@
 
 static INLINE void make_aligned_word32_undefined ( Addr a )
 {
-   PROF_EVENT(300, "make_aligned_word32_undefined");
+  PROF_EVENT(MCPE_MAKE_ALIGNED_WORD32_UNDEFINED);
 
 #ifndef PERF_FAST_STACK2
    make_mem_undefined(a, 4);
@@ -2603,7 +2617,7 @@
       SecMap* sm;
 
       if (UNLIKELY(a > MAX_PRIMARY_ADDRESS)) {
-         PROF_EVENT(301, "make_aligned_word32_undefined-slow1");
+         PROF_EVENT(MCPE_MAKE_ALIGNED_WORD32_UNDEFINED_SLOW);
          make_mem_undefined(a, 4);
          return;
       }
@@ -2636,7 +2650,7 @@
 static INLINE
 void make_aligned_word32_noaccess ( Addr a )
 {
-   PROF_EVENT(310, "make_aligned_word32_noaccess");
+   PROF_EVENT(MCPE_MAKE_ALIGNED_WORD32_NOACCESS);
 
 #ifndef PERF_FAST_STACK2
    MC_(make_mem_noaccess)(a, 4);
@@ -2646,7 +2660,7 @@
       SecMap* sm;
 
       if (UNLIKELY(a > MAX_PRIMARY_ADDRESS)) {
-         PROF_EVENT(311, "make_aligned_word32_noaccess-slow1");
+         PROF_EVENT(MCPE_MAKE_ALIGNED_WORD32_NOACCESS_SLOW);
          MC_(make_mem_noaccess)(a, 4);
          return;
       }
@@ -2677,7 +2691,7 @@
 
 static INLINE void make_aligned_word64_undefined ( Addr a )
 {
-   PROF_EVENT(320, "make_aligned_word64_undefined");
+   PROF_EVENT(MCPE_MAKE_ALIGNED_WORD64_UNDEFINED);
 
 #ifndef PERF_FAST_STACK2
    make_mem_undefined(a, 8);
@@ -2687,7 +2701,7 @@
       SecMap* sm;
 
       if (UNLIKELY(a > MAX_PRIMARY_ADDRESS)) {
-         PROF_EVENT(321, "make_aligned_word64_undefined-slow1");
+         PROF_EVENT(MCPE_MAKE_ALIGNED_WORD64_UNDEFINED_SLOW);
          make_mem_undefined(a, 8);
          return;
       }
@@ -2721,7 +2735,7 @@
 static INLINE
 void make_aligned_word64_noaccess ( Addr a )
 {
-   PROF_EVENT(330, "make_aligned_word64_noaccess");
+   PROF_EVENT(MCPE_MAKE_ALIGNED_WORD64_NOACCESS);
 
 #ifndef PERF_FAST_STACK2
    MC_(make_mem_noaccess)(a, 8);
@@ -2731,7 +2745,7 @@
       SecMap* sm;
 
       if (UNLIKELY(a > MAX_PRIMARY_ADDRESS)) {
-         PROF_EVENT(331, "make_aligned_word64_noaccess-slow1");
+         PROF_EVENT(MCPE_MAKE_ALIGNED_WORD64_NOACCESS_SLOW);
          MC_(make_mem_noaccess)(a, 8);
          return;
       }
@@ -2773,7 +2787,7 @@
 static void VG_REGPARM(2) mc_new_mem_stack_4_w_ECU(Addr new_SP, UInt ecu)
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(110, "new_mem_stack_4");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_4);
    if (VG_IS_4_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word32_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP, otag );
    } else {
@@ -2784,7 +2798,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_new_mem_stack_4(Addr new_SP)
 {
-   PROF_EVENT(110, "new_mem_stack_4");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_4);
    if (VG_IS_4_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word32_undefined ( -VG_STACK_REDZONE_SZB + new_SP );
    } else {
@@ -2795,7 +2809,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_die_mem_stack_4(Addr new_SP)
 {
-   PROF_EVENT(120, "die_mem_stack_4");
+   PROF_EVENT(MCPE_DIE_MEM_STACK_4);
    if (VG_IS_4_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word32_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-4 );
    } else {
@@ -2809,7 +2823,7 @@
 static void VG_REGPARM(2) mc_new_mem_stack_8_w_ECU(Addr new_SP, UInt ecu)
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(111, "new_mem_stack_8");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_8);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP, otag );
    } else if (VG_IS_4_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
@@ -2823,7 +2837,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_new_mem_stack_8(Addr new_SP)
 {
-   PROF_EVENT(111, "new_mem_stack_8");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_8);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP );
    } else if (VG_IS_4_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
@@ -2837,7 +2851,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_die_mem_stack_8(Addr new_SP)
 {
-   PROF_EVENT(121, "die_mem_stack_8");
+   PROF_EVENT(MCPE_DIE_MEM_STACK_8);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-8 );
    } else if (VG_IS_4_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
@@ -2854,7 +2868,7 @@
 static void VG_REGPARM(2) mc_new_mem_stack_12_w_ECU(Addr new_SP, UInt ecu)
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(112, "new_mem_stack_12");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_12);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP  , otag );
       make_aligned_word32_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP+8, otag );
@@ -2872,7 +2886,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_new_mem_stack_12(Addr new_SP)
 {
-   PROF_EVENT(112, "new_mem_stack_12");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_12);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP );
       make_aligned_word32_undefined ( -VG_STACK_REDZONE_SZB + new_SP+8 );
@@ -2890,7 +2904,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_die_mem_stack_12(Addr new_SP)
 {
-   PROF_EVENT(122, "die_mem_stack_12");
+   PROF_EVENT(MCPE_DIE_MEM_STACK_12);
    /* Note the -12 in the test */
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP-12 )) {
       /* We have 8-alignment at -12, hence ok to do 8 at -12 and 4 at
@@ -2914,7 +2928,7 @@
 static void VG_REGPARM(2) mc_new_mem_stack_16_w_ECU(Addr new_SP, UInt ecu)
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(113, "new_mem_stack_16");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_16);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       /* Have 8-alignment at +0, hence do 8 at +0 and 8 at +8. */
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP  , otag );
@@ -2933,7 +2947,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_new_mem_stack_16(Addr new_SP)
 {
-   PROF_EVENT(113, "new_mem_stack_16");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_16);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       /* Have 8-alignment at +0, hence do 8 at +0 and 8 at +8. */
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP );
@@ -2952,7 +2966,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_die_mem_stack_16(Addr new_SP)
 {
-   PROF_EVENT(123, "die_mem_stack_16");
+   PROF_EVENT(MCPE_DIE_MEM_STACK_16);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       /* Have 8-alignment at +0, hence do 8 at -16 and 8 at -8. */
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-16 );
@@ -2973,7 +2987,7 @@
 static void VG_REGPARM(2) mc_new_mem_stack_32_w_ECU(Addr new_SP, UInt ecu)
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(114, "new_mem_stack_32");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_32);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       /* Straightforward */
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP   , otag );
@@ -2996,7 +3010,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_new_mem_stack_32(Addr new_SP)
 {
-   PROF_EVENT(114, "new_mem_stack_32");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_32);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       /* Straightforward */
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP );
@@ -3019,7 +3033,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_die_mem_stack_32(Addr new_SP)
 {
-   PROF_EVENT(124, "die_mem_stack_32");
+   PROF_EVENT(MCPE_DIE_MEM_STACK_32);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       /* Straightforward */
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-32 );
@@ -3045,7 +3059,7 @@
 static void VG_REGPARM(2) mc_new_mem_stack_112_w_ECU(Addr new_SP, UInt ecu)
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(115, "new_mem_stack_112");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_112);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP   , otag );
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP+8 , otag );
@@ -3069,7 +3083,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_new_mem_stack_112(Addr new_SP)
 {
-   PROF_EVENT(115, "new_mem_stack_112");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_112);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP );
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP+8 );
@@ -3093,7 +3107,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_die_mem_stack_112(Addr new_SP)
 {
-   PROF_EVENT(125, "die_mem_stack_112");
+   PROF_EVENT(MCPE_DIE_MEM_STACK_112);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-112);
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-104);
@@ -3120,7 +3134,7 @@
 static void VG_REGPARM(2) mc_new_mem_stack_128_w_ECU(Addr new_SP, UInt ecu)
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(116, "new_mem_stack_128");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_128);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP   , otag );
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP+8 , otag );
@@ -3146,7 +3160,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_new_mem_stack_128(Addr new_SP)
 {
-   PROF_EVENT(116, "new_mem_stack_128");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_128);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP );
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP+8 );
@@ -3172,7 +3186,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_die_mem_stack_128(Addr new_SP)
 {
-   PROF_EVENT(126, "die_mem_stack_128");
+   PROF_EVENT(MCPE_DIE_MEM_STACK_128);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-128);
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-120);
@@ -3201,7 +3215,7 @@
 static void VG_REGPARM(2) mc_new_mem_stack_144_w_ECU(Addr new_SP, UInt ecu)
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(117, "new_mem_stack_144");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_144);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP,     otag );
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP+8,   otag );
@@ -3229,7 +3243,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_new_mem_stack_144(Addr new_SP)
 {
-   PROF_EVENT(117, "new_mem_stack_144");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_144);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP );
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP+8 );
@@ -3257,7 +3271,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_die_mem_stack_144(Addr new_SP)
 {
-   PROF_EVENT(127, "die_mem_stack_144");
+   PROF_EVENT(MCPE_DIE_MEM_STACK_144);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-144);
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-136);
@@ -3288,7 +3302,7 @@
 static void VG_REGPARM(2) mc_new_mem_stack_160_w_ECU(Addr new_SP, UInt ecu)
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(118, "new_mem_stack_160");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_160);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP,     otag );
       make_aligned_word64_undefined_w_otag ( -VG_STACK_REDZONE_SZB + new_SP+8,   otag );
@@ -3318,7 +3332,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_new_mem_stack_160(Addr new_SP)
 {
-   PROF_EVENT(118, "new_mem_stack_160");
+   PROF_EVENT(MCPE_NEW_MEM_STACK_160);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP );
       make_aligned_word64_undefined ( -VG_STACK_REDZONE_SZB + new_SP+8 );
@@ -3348,7 +3362,7 @@
 MAYBE_USED
 static void VG_REGPARM(1) mc_die_mem_stack_160(Addr new_SP)
 {
-   PROF_EVENT(128, "die_mem_stack_160");
+   PROF_EVENT(MCPE_DIE_MEM_STACK_160);
    if (VG_IS_8_ALIGNED( -VG_STACK_REDZONE_SZB + new_SP )) {
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-160);
       make_aligned_word64_noaccess ( -VG_STACK_REDZONE_SZB + new_SP-152);
@@ -3380,19 +3394,19 @@
 static void mc_new_mem_stack_w_ECU ( Addr a, SizeT len, UInt ecu )
 {
    UInt otag = ecu | MC_OKIND_STACK;
-   PROF_EVENT(115, "new_mem_stack_w_otag");
+   PROF_EVENT(MCPE_NEW_MEM_STACK);
    MC_(make_mem_undefined_w_otag) ( -VG_STACK_REDZONE_SZB + a, len, otag );
 }
 
 static void mc_new_mem_stack ( Addr a, SizeT len )
 {
-   PROF_EVENT(115, "new_mem_stack");
+   PROF_EVENT(MCPE_NEW_MEM_STACK);
    make_mem_undefined ( -VG_STACK_REDZONE_SZB + a, len );
 }
 
 static void mc_die_mem_stack ( Addr a, SizeT len )
 {
-   PROF_EVENT(125, "die_mem_stack");
+   PROF_EVENT(MCPE_DIE_MEM_STACK);
    MC_(make_mem_noaccess) ( -VG_STACK_REDZONE_SZB + a, len );
 }
 
@@ -3746,9 +3760,9 @@
    SizeT i;
    UWord vabits2;
 
-   PROF_EVENT(60, "check_mem_is_noaccess");
+   PROF_EVENT(MCPE_CHECK_MEM_IS_NOACCESS);
    for (i = 0; i < len; i++) {
-      PROF_EVENT(61, "check_mem_is_noaccess(loop)");
+      PROF_EVENT(MCPE_CHECK_MEM_IS_NOACCESS_LOOP);
       vabits2 = get_vabits2(a);
       if (VA_BITS2_NOACCESS != vabits2) {
          if (bad_addr != NULL) *bad_addr = a;
@@ -3765,9 +3779,9 @@
    SizeT i;
    UWord vabits2;
 
-   PROF_EVENT(62, "is_mem_addressable");
+   PROF_EVENT(MCPE_IS_MEM_ADDRESSABLE);
    for (i = 0; i < len; i++) {
-      PROF_EVENT(63, "is_mem_addressable(loop)");
+      PROF_EVENT(MCPE_IS_MEM_ADDRESSABLE_LOOP);
       vabits2 = get_vabits2(a);
       if (VA_BITS2_NOACCESS == vabits2) {
          if (bad_addr != NULL) *bad_addr = a;
@@ -3785,13 +3799,13 @@
    SizeT i;
    UWord vabits2;
 
-   PROF_EVENT(64, "is_mem_defined");
+   PROF_EVENT(MCPE_IS_MEM_DEFINED);
    DEBUG("is_mem_defined\n");
 
    if (otag)     *otag = 0;
    if (bad_addr) *bad_addr = 0;
    for (i = 0; i < len; i++) {
-      PROF_EVENT(65, "is_mem_defined(loop)");
+      PROF_EVENT(MCPE_IS_MEM_DEFINED_LOOP);
       vabits2 = get_vabits2(a);
       if (VA_BITS2_DEFINED != vabits2) {
          // Error!  Nb: Report addressability errors in preference to
@@ -3838,13 +3852,13 @@
    UWord vabits2;
    Bool  already_saw_errV = False;
 
-   PROF_EVENT(64, "is_mem_defined"); // fixme
+   PROF_EVENT(MCPE_IS_MEM_DEFINED_COMPREHENSIVE);
    DEBUG("is_mem_defined_comprehensive\n");
 
    tl_assert(!(*errorV || *errorA));
 
    for (i = 0; i < len; i++) {
-      PROF_EVENT(65, "is_mem_defined(loop)"); // fixme
+      PROF_EVENT(MCPE_IS_MEM_DEFINED_COMPREHENSIVE_LOOP);
       vabits2 = get_vabits2(a);
       switch (vabits2) {
          case VA_BITS2_DEFINED: 
@@ -3883,13 +3897,13 @@
 {
    UWord vabits2;
 
-   PROF_EVENT(66, "mc_is_defined_asciiz");
+   PROF_EVENT(MCPE_IS_DEFINED_ASCIIZ);
    DEBUG("mc_is_defined_asciiz\n");
 
    if (otag)     *otag = 0;
    if (bad_addr) *bad_addr = 0;
    while (True) {
-      PROF_EVENT(67, "mc_is_defined_asciiz(loop)");
+      PROF_EVENT(MCPE_IS_DEFINED_ASCIIZ_LOOP);
       vabits2 = get_vabits2(a);
       if (VA_BITS2_DEFINED != vabits2) {
          // Error!  Nb: Report addressability errors in preference to
@@ -4192,6 +4206,140 @@
 
 
 /*------------------------------------------------------------*/
+/*--- Register-memory event handlers                       ---*/
+/*------------------------------------------------------------*/
+
+static void mc_copy_mem_to_reg ( CorePart part, ThreadId tid, Addr a,
+                                 PtrdiffT guest_state_offset, SizeT size )
+{
+   SizeT i;
+   UChar vbits8;
+   Int offset;
+   UInt d32;
+
+   /* Slow loop. */
+   for (i = 0; i < size; i++) {
+      get_vbits8( a+i, &vbits8 );
+      VG_(set_shadow_regs_area)( tid, 1/*shadowNo*/, guest_state_offset+i,
+                                 1, &vbits8 );
+   }
+
+   if (MC_(clo_mc_level) != 3)
+      return;
+
+   /* Track origins. */
+   offset = MC_(get_otrack_shadow_offset)( guest_state_offset, size );
+   if (offset == -1)
+      return;
+
+   switch (size) {
+   case 1:
+      d32 = MC_(helperc_b_load1)( a );
+      break;
+   case 2:
+      d32 = MC_(helperc_b_load2)( a );
+      break;
+   case 4:
+      d32 = MC_(helperc_b_load4)( a );
+      break;
+   case 8:
+      d32 = MC_(helperc_b_load8)( a );
+      break;
+   case 16:
+      d32 = MC_(helperc_b_load16)( a );
+      break;
+   case 32:
+      d32 = MC_(helperc_b_load32)( a );
+      break;
+   default:
+      tl_assert(0);
+   }
+
+   VG_(set_shadow_regs_area)( tid, 2/*shadowNo*/, offset, 4, (UChar*)&d32 );
+}
+
+static void mc_copy_reg_to_mem ( CorePart part, ThreadId tid,
+                                 PtrdiffT guest_state_offset, Addr a,
+                                 SizeT size )
+{
+   SizeT i;
+   UChar vbits8;
+   Int offset;
+   UInt d32;
+
+   /* Slow loop. */
+   for (i = 0; i < size; i++) {
+      VG_(get_shadow_regs_area)( tid, &vbits8, 1/*shadowNo*/,
+                                 guest_state_offset+i, 1 );
+      set_vbits8( a+i, vbits8 );
+   }
+
+   if (MC_(clo_mc_level) != 3)
+      return;
+
+   /* Track origins. */
+   offset = MC_(get_otrack_shadow_offset)( guest_state_offset, size );
+   if (offset == -1)
+      return;
+
+   VG_(get_shadow_regs_area)( tid, (UChar*)&d32, 2/*shadowNo*/, offset, 4 );
+   switch (size) {
+   case 1:
+      MC_(helperc_b_store1)( a, d32 );
+      break;
+   case 2:
+      MC_(helperc_b_store2)( a, d32 );
+      break;
+   case 4:
+      MC_(helperc_b_store4)( a, d32 );
+      break;
+   case 8:
+      MC_(helperc_b_store8)( a, d32 );
+      break;
+   case 16:
+      MC_(helperc_b_store16)( a, d32 );
+      break;
+   case 32:
+      MC_(helperc_b_store32)( a, d32 );
+      break;
+   default:
+      tl_assert(0);
+   }
+}
+
+
+/*------------------------------------------------------------*/
+/*--- Some static assertions                               ---*/
+/*------------------------------------------------------------*/
+
+/* The handwritten assembly helpers below have baked-in assumptions
+   about various constant values.  These assertions attempt to make
+   that a bit safer by checking those values and flagging changes that
+   would make the assembly invalid.  Not perfect but it's better than
+   nothing. */
+
+STATIC_ASSERT(SM_CHUNKS * 4 == 65536);
+
+STATIC_ASSERT(VA_BITS8_DEFINED   == 0xAA);
+STATIC_ASSERT(VA_BITS8_UNDEFINED == 0x55);
+
+STATIC_ASSERT(V_BITS32_DEFINED   == 0x00000000);
+STATIC_ASSERT(V_BITS32_UNDEFINED == 0xFFFFFFFF);
+
+STATIC_ASSERT(VA_BITS4_DEFINED == 0xA);
+STATIC_ASSERT(VA_BITS4_UNDEFINED == 0x5);
+
+STATIC_ASSERT(V_BITS16_DEFINED == 0x0000);
+STATIC_ASSERT(V_BITS16_UNDEFINED == 0xFFFF);
+
+STATIC_ASSERT(VA_BITS2_DEFINED == 2);
+STATIC_ASSERT(VA_BITS2_UNDEFINED == 1);
+
+STATIC_ASSERT(V_BITS8_DEFINED == 0x00);
+STATIC_ASSERT(V_BITS8_UNDEFINED == 0xFF);
+
+
+/*------------------------------------------------------------*/
 /*--- Functions called directly from generated code:       ---*/
 /*--- Load/store handlers.                                 ---*/
 /*------------------------------------------------------------*/
@@ -4281,14 +4429,15 @@
            = 0xFFFF'FFF0'0000'0007
 */
 
-
-/* ------------------------ Size = 16 ------------------------ */
+/*------------------------------------------------------------*/
+/*--- LOADV256 and LOADV128                                ---*/
+/*------------------------------------------------------------*/
 
 static INLINE
 void mc_LOADV_128_or_256 ( /*OUT*/ULong* res,
                            Addr a, SizeT nBits, Bool isBigEndian )
 {
-   PROF_EVENT(200, "mc_LOADV_128_or_256");
+   PROF_EVENT(MCPE_LOADV_128_OR_256);
 
 #ifndef PERF_FAST_LOADV
    mc_LOADV_128_or_256_slow( res, a, nBits, isBigEndian );
@@ -4301,7 +4450,7 @@
       SecMap* sm;
 
       if (UNLIKELY( UNALIGNED_OR_HIGH(a,nBits) )) {
-         PROF_EVENT(201, "mc_LOADV_128_or_256-slow1");
+         PROF_EVENT(MCPE_LOADV_128_OR_256_SLOW1);
          mc_LOADV_128_or_256_slow( res, a, nBits, isBigEndian );
          return;
       }
@@ -4322,7 +4471,7 @@
          } else {
             /* Slow case: some block of 8 bytes are not all-defined or
                all-undefined. */
-            PROF_EVENT(202, "mc_LOADV_128_or_256-slow2");
+            PROF_EVENT(MCPE_LOADV_128_OR_256_SLOW2);
             mc_LOADV_128_or_256_slow( res, a, nBits, isBigEndian );
             return;
          }
@@ -4350,12 +4499,14 @@
    mc_LOADV_128_or_256(&res->w64[0], a, 128, False);
 }
 
-/* ------------------------ Size = 8 ------------------------ */
+/*------------------------------------------------------------*/
+/*--- LOADV64                                              ---*/
+/*------------------------------------------------------------*/
 
 static INLINE
 ULong mc_LOADV64 ( Addr a, Bool isBigEndian )
 {
-   PROF_EVENT(200, "mc_LOADV64");
+   PROF_EVENT(MCPE_LOADV64);
 
 #ifndef PERF_FAST_LOADV
    return mc_LOADVn_slow( a, 64, isBigEndian );
@@ -4365,7 +4516,7 @@
       SecMap* sm;
 
       if (UNLIKELY( UNALIGNED_OR_HIGH(a,64) )) {
-         PROF_EVENT(201, "mc_LOADV64-slow1");
+         PROF_EVENT(MCPE_LOADV64_SLOW1);
          return (ULong)mc_LOADVn_slow( a, 64, isBigEndian );
       }
 
@@ -4382,27 +4533,111 @@
          return V_BITS64_UNDEFINED;
       } else {
          /* Slow case: the 8 bytes are not all-defined or all-undefined. */
-         PROF_EVENT(202, "mc_LOADV64-slow2");
+         PROF_EVENT(MCPE_LOADV64_SLOW2);
          return mc_LOADVn_slow( a, 64, isBigEndian );
       }
    }
 #endif
 }
 
+// Generic for all platforms
 VG_REGPARM(1) ULong MC_(helperc_LOADV64be) ( Addr a )
 {
    return mc_LOADV64(a, True);
 }
+
+// Non-generic assembly for arm32-linux
+#if ENABLE_ASSEMBLY_HELPERS && defined(PERF_FAST_LOADV) \
+    && defined(VGP_arm_linux)
+__asm__( /* Derived from the 32 bit assembly helper */
+".text                                  \n"
+".align 2                               \n"
+".global vgMemCheck_helperc_LOADV64le   \n"
+".type   vgMemCheck_helperc_LOADV64le, %function \n"
+"vgMemCheck_helperc_LOADV64le:          \n"
+"      tst    r0, #7                    \n"
+"      movw   r3, #:lower16:primary_map \n"
+"      bne    .LLV64LEc4                \n" // if misaligned
+"      lsr    r2, r0, #16               \n"
+"      movt   r3, #:upper16:primary_map \n"
+"      ldr    r2, [r3, r2, lsl #2]      \n"
+"      uxth   r1, r0                    \n" // r1 is 0-(16)-0 X-(13)-X 000
+"      movw   r3, #0xAAAA               \n"
+"      lsr    r1, r1, #2                \n" // r1 is 0-(16)-0 00 X-(13)-X 0
+"      ldrh   r1, [r2, r1]              \n"
+"      cmp    r1, r3                    \n" // 0xAAAA == VA_BITS16_DEFINED
+"      bne    .LLV64LEc0                \n" // if !all_defined
+"      mov    r1, #0x0                  \n" // 0x0 == V_BITS32_DEFINED
+"      mov    r0, #0x0                  \n" // 0x0 == V_BITS32_DEFINED
+"      bx     lr                        \n"
+".LLV64LEc0:                            \n"
+"      movw   r3, #0x5555               \n"
+"      cmp    r1, r3                    \n" // 0x5555 == VA_BITS16_UNDEFINED
+"      bne    .LLV64LEc4                \n" // if !all_undefined
+"      mov    r1, #0xFFFFFFFF           \n" // 0xFFFFFFFF == V_BITS32_UNDEFINED
+"      mov    r0, #0xFFFFFFFF           \n" // 0xFFFFFFFF == V_BITS32_UNDEFINED
+"      bx     lr                        \n"
+".LLV64LEc4:                            \n"
+"      push   {r4, lr}                  \n"
+"      mov    r2, #0                    \n"
+"      mov    r1, #64                   \n"
+"      bl     mc_LOADVn_slow            \n"
+"      pop    {r4, pc}                  \n"
+".size vgMemCheck_helperc_LOADV64le, .-vgMemCheck_helperc_LOADV64le \n"
+".previous\n"
+);
+
+#elif ENABLE_ASSEMBLY_HELPERS && defined(PERF_FAST_LOADV) \
+      && (defined(VGP_x86_linux) || defined(VGP_x86_solaris))
+__asm__(
+".text\n"
+".align 16\n"
+".global vgMemCheck_helperc_LOADV64le\n"
+".type   vgMemCheck_helperc_LOADV64le, @function\n"
+"vgMemCheck_helperc_LOADV64le:\n"
+"      test   $0x7,  %eax\n"
+"      jne    .LLV64LE2\n"          /* jump if not aligned */
+"      mov    %eax,  %ecx\n"
+"      movzwl %ax,   %edx\n"
+"      shr    $0x10, %ecx\n"
+"      mov    primary_map(,%ecx,4), %ecx\n"
+"      shr    $0x3,  %edx\n"
+"      movzwl (%ecx,%edx,2), %edx\n"
+"      cmp    $0xaaaa, %edx\n"
+"      jne    .LLV64LE1\n"          /* jump if not all defined */
+"      xor    %eax, %eax\n"         /* return 0 in edx:eax */
+"      xor    %edx, %edx\n"
+"      ret\n"
+".LLV64LE1:\n"
+"      cmp    $0x5555, %edx\n"
+"      jne    .LLV64LE2\n"         /* jump if not all undefined */
+"      or     $0xffffffff, %eax\n" /* else return all bits set in edx:eax */
+"      or     $0xffffffff, %edx\n"
+"      ret\n"
+".LLV64LE2:\n"
+"      xor    %ecx,  %ecx\n"  /* tail call to mc_LOADVn_slow(a, 64, 0) */
+"      mov    $64,   %edx\n"
+"      jmp    mc_LOADVn_slow\n"
+".size vgMemCheck_helperc_LOADV64le, .-vgMemCheck_helperc_LOADV64le\n"
+".previous\n"
+);
+
+#else
+// Generic for all platforms except {arm32,x86}-linux and x86-solaris
 VG_REGPARM(1) ULong MC_(helperc_LOADV64le) ( Addr a )
 {
    return mc_LOADV64(a, False);
 }
+#endif
 
+/*------------------------------------------------------------*/
+/*--- STOREV64                                             ---*/
+/*------------------------------------------------------------*/
 
 static INLINE
 void mc_STOREV64 ( Addr a, ULong vbits64, Bool isBigEndian )
 {
-   PROF_EVENT(210, "mc_STOREV64");
+   PROF_EVENT(MCPE_STOREV64);
 
 #ifndef PERF_FAST_STOREV
    // XXX: this slow case seems to be marginally faster than the fast case!
@@ -4414,7 +4649,7 @@
       SecMap* sm;
 
       if (UNLIKELY( UNALIGNED_OR_HIGH(a,64) )) {
-         PROF_EVENT(211, "mc_STOREV64-slow1");
+         PROF_EVENT(MCPE_STOREV64_SLOW1);
          mc_STOREVn_slow( a, 64, vbits64, isBigEndian );
          return;
       }
@@ -4433,7 +4668,7 @@
             ((UShort*)(sm->vabits8))[sm_off16] = (UShort)VA_BITS16_DEFINED;
             return;
          }
-         PROF_EVENT(232, "mc_STOREV64-slow2");
+         PROF_EVENT(MCPE_STOREV64_SLOW2);
          mc_STOREVn_slow( a, 64, vbits64, isBigEndian );
          return;
       }
@@ -4445,12 +4680,12 @@
             ((UShort*)(sm->vabits8))[sm_off16] = (UShort)VA_BITS16_UNDEFINED;
             return;
          } 
-         PROF_EVENT(232, "mc_STOREV64-slow3");
+         PROF_EVENT(MCPE_STOREV64_SLOW3);
          mc_STOREVn_slow( a, 64, vbits64, isBigEndian );
          return;
       }
 
-      PROF_EVENT(212, "mc_STOREV64-slow4");
+      PROF_EVENT(MCPE_STOREV64_SLOW4);
       mc_STOREVn_slow( a, 64, vbits64, isBigEndian );
    }
 #endif
@@ -4465,13 +4700,14 @@
    mc_STOREV64(a, vbits64, False);
 }
 
-
-/* ------------------------ Size = 4 ------------------------ */
+/*------------------------------------------------------------*/
+/*--- LOADV32                                              ---*/
+/*------------------------------------------------------------*/
 
 static INLINE
 UWord mc_LOADV32 ( Addr a, Bool isBigEndian )
 {
-   PROF_EVENT(220, "mc_LOADV32");
+   PROF_EVENT(MCPE_LOADV32);
 
 #ifndef PERF_FAST_LOADV
    return (UWord)mc_LOADVn_slow( a, 32, isBigEndian );
@@ -4481,7 +4717,7 @@
       SecMap* sm;
 
       if (UNLIKELY( UNALIGNED_OR_HIGH(a,32) )) {
-         PROF_EVENT(221, "mc_LOADV32-slow1");
+         PROF_EVENT(MCPE_LOADV32_SLOW1);
          return (UWord)mc_LOADVn_slow( a, 32, isBigEndian );
       }
 
@@ -4500,27 +4736,104 @@
          return ((UWord)0xFFFFFFFF00000000ULL | (UWord)V_BITS32_UNDEFINED);
       } else {
          /* Slow case: the 4 bytes are not all-defined or all-undefined. */
-         PROF_EVENT(222, "mc_LOADV32-slow2");
+         PROF_EVENT(MCPE_LOADV32_SLOW2);
          return (UWord)mc_LOADVn_slow( a, 32, isBigEndian );
       }
    }
 #endif
 }
 
+// Generic for all platforms
 VG_REGPARM(1) UWord MC_(helperc_LOADV32be) ( Addr a )
 {
    return mc_LOADV32(a, True);
 }
+
+// Non-generic assembly for arm32-linux
+#if ENABLE_ASSEMBLY_HELPERS && defined(PERF_FAST_LOADV) \
+    && defined(VGP_arm_linux)
+__asm__( /* Derived from NCode template */
+".text                                  \n"
+".align 2                               \n"
+".global vgMemCheck_helperc_LOADV32le   \n"
+".type   vgMemCheck_helperc_LOADV32le, %function \n"
+"vgMemCheck_helperc_LOADV32le:          \n"
+"      tst    r0, #3                    \n" // 1
+"      movw   r3, #:lower16:primary_map \n" // 1
+"      bne    .LLV32LEc4                \n" // 2  if misaligned
+"      lsr    r2, r0, #16               \n" // 3
+"      movt   r3, #:upper16:primary_map \n" // 3
+"      ldr    r2, [r3, r2, lsl #2]      \n" // 4
+"      uxth   r1, r0                    \n" // 4
+"      ldrb   r1, [r2, r1, lsr #2]      \n" // 5
+"      cmp    r1, #0xAA                 \n" // 6  0xAA == VA_BITS8_DEFINED
+"      bne    .LLV32LEc0                \n" // 7  if !all_defined
+"      mov    r0, #0x0                  \n" // 8  0x0 == V_BITS32_DEFINED
+"      bx     lr                        \n" // 9
+".LLV32LEc0:                            \n"
+"      cmp    r1, #0x55                 \n" // 0x55 == VA_BITS8_UNDEFINED
+"      bne    .LLV32LEc4                \n" // if !all_undefined
+"      mov    r0, #0xFFFFFFFF           \n" // 0xFFFFFFFF == V_BITS32_UNDEFINED
+"      bx     lr                        \n"
+".LLV32LEc4:                            \n"
+"      push   {r4, lr}                  \n"
+"      mov    r2, #0                    \n"
+"      mov    r1, #32                   \n"
+"      bl     mc_LOADVn_slow            \n"
+"      pop    {r4, pc}                  \n"
+".size vgMemCheck_helperc_LOADV32le, .-vgMemCheck_helperc_LOADV32le \n"
+".previous\n"
+);
+
+#elif ENABLE_ASSEMBLY_HELPERS && defined(PERF_FAST_LOADV) \
+      && (defined(VGP_x86_linux) || defined(VGP_x86_solaris))
+__asm__(
+".text\n"
+".align 16\n"
+".global vgMemCheck_helperc_LOADV32le\n"
+".type   vgMemCheck_helperc_LOADV32le, @function\n"
+"vgMemCheck_helperc_LOADV32le:\n"
+"      test   $0x3,  %eax\n"
+"      jnz    .LLV32LE2\n"         /* jump if misaligned */
+"      mov    %eax,  %edx\n"
+"      shr    $16,   %edx\n"
+"      mov    primary_map(,%edx,4), %ecx\n"
+"      movzwl %ax,   %edx\n"
+"      shr    $2,    %edx\n"
+"      movzbl (%ecx,%edx,1), %edx\n"
+"      cmp    $0xaa, %edx\n"       /* compare to VA_BITS8_DEFINED */
+"      jne    .LLV32LE1\n"         /* jump if not completely defined */
+"      xor    %eax,  %eax\n"       /* else return V_BITS32_DEFINED */
+"      ret\n"
+".LLV32LE1:\n"
+"      cmp    $0x55, %edx\n"       /* compare to VA_BITS8_UNDEFINED */
+"      jne    .LLV32LE2\n"         /* jump if not completely undefined */
+"      or     $0xffffffff, %eax\n" /* else return V_BITS32_UNDEFINED */
+"      ret\n"
+".LLV32LE2:\n"
+"      xor    %ecx,  %ecx\n"       /* tail call mc_LOADVn_slow(a, 32, 0) */
+"      mov    $32,   %edx\n"
+"      jmp    mc_LOADVn_slow\n"
+".size vgMemCheck_helperc_LOADV32le, .-vgMemCheck_helperc_LOADV32le\n"
+".previous\n"
+);
+
+#else
+// Generic for all platforms except {arm32,x86}-linux and x86-solaris
 VG_REGPARM(1) UWord MC_(helperc_LOADV32le) ( Addr a )
 {
    return mc_LOADV32(a, False);
 }
+#endif
 
+/*------------------------------------------------------------*/
+/*--- STOREV32                                             ---*/
+/*------------------------------------------------------------*/
 
 static INLINE
 void mc_STOREV32 ( Addr a, UWord vbits32, Bool isBigEndian )
 {
-   PROF_EVENT(230, "mc_STOREV32");
+   PROF_EVENT(MCPE_STOREV32);
 
 #ifndef PERF_FAST_STOREV
    mc_STOREVn_slow( a, 32, (ULong)vbits32, isBigEndian );
@@ -4530,7 +4843,7 @@
       SecMap* sm;
 
       if (UNLIKELY( UNALIGNED_OR_HIGH(a,32) )) {
-         PROF_EVENT(231, "mc_STOREV32-slow1");
+         PROF_EVENT(MCPE_STOREV32_SLOW1);
          mc_STOREVn_slow( a, 32, (ULong)vbits32, isBigEndian );
          return;
       }
@@ -4549,7 +4862,7 @@
             sm->vabits8[sm_off] = (UInt)VA_BITS8_DEFINED;
             return;
          }
-         PROF_EVENT(232, "mc_STOREV32-slow2");
+         PROF_EVENT(MCPE_STOREV32_SLOW2);
          mc_STOREVn_slow( a, 32, (ULong)vbits32, isBigEndian );
          return;
       }
@@ -4561,12 +4874,12 @@
             sm->vabits8[sm_off] = (UInt)VA_BITS8_UNDEFINED;
             return;
          }
-         PROF_EVENT(233, "mc_STOREV32-slow3");
+         PROF_EVENT(MCPE_STOREV32_SLOW3);
          mc_STOREVn_slow( a, 32, (ULong)vbits32, isBigEndian );
          return;
       }
 
-      PROF_EVENT(234, "mc_STOREV32-slow4");
+      PROF_EVENT(MCPE_STOREV32_SLOW4);
       mc_STOREVn_slow( a, 32, (ULong)vbits32, isBigEndian );
    }
 #endif
@@ -4581,13 +4894,14 @@
    mc_STOREV32(a, vbits32, False);
 }
 
-
-/* ------------------------ Size = 2 ------------------------ */
+/*------------------------------------------------------------*/
+/*--- LOADV16                                              ---*/
+/*------------------------------------------------------------*/
 
 static INLINE
 UWord mc_LOADV16 ( Addr a, Bool isBigEndian )
 {
-   PROF_EVENT(240, "mc_LOADV16");
+   PROF_EVENT(MCPE_LOADV16);
 
 #ifndef PERF_FAST_LOADV
    return (UWord)mc_LOADVn_slow( a, 16, isBigEndian );
@@ -4597,7 +4911,7 @@
       SecMap* sm;
 
       if (UNLIKELY( UNALIGNED_OR_HIGH(a,16) )) {
-         PROF_EVENT(241, "mc_LOADV16-slow1");
+         PROF_EVENT(MCPE_LOADV16_SLOW1);
          return (UWord)mc_LOADVn_slow( a, 16, isBigEndian );
       }
 
@@ -4617,7 +4931,7 @@
          else if (vabits4 == VA_BITS4_UNDEFINED) { return V_BITS16_UNDEFINED; }
          else {
             /* Slow case: the two bytes are not all-defined or all-undefined. */
-            PROF_EVENT(242, "mc_LOADV16-slow2");
+            PROF_EVENT(MCPE_LOADV16_SLOW2);
             return (UWord)mc_LOADVn_slow( a, 16, isBigEndian );
          }
       }
@@ -4625,14 +4939,121 @@
 #endif
 }
 
+// Generic for all platforms
 VG_REGPARM(1) UWord MC_(helperc_LOADV16be) ( Addr a )
 {
    return mc_LOADV16(a, True);
 }
+
+// Non-generic assembly for arm32-linux
+#if ENABLE_ASSEMBLY_HELPERS && defined(PERF_FAST_LOADV) \
+    && defined(VGP_arm_linux)
+__asm__( /* Derived from NCode template */
+".text                                  \n"
+".align 2                               \n"
+".global vgMemCheck_helperc_LOADV16le   \n"
+".type   vgMemCheck_helperc_LOADV16le, %function \n"
+"vgMemCheck_helperc_LOADV16le:          \n" //
+"      tst    r0, #1                    \n" // 
+"      bne    .LLV16LEc12               \n" // if misaligned
+"      lsr    r2, r0, #16               \n" // r2 = pri-map-ix
+"      movw   r3, #:lower16:primary_map \n" //
+"      uxth   r1, r0                    \n" // r1 = sec-map-offB
+"      movt   r3, #:upper16:primary_map \n" //
+"      ldr    r2, [r3, r2, lsl #2]      \n" // r2 = sec-map
+"      ldrb   r1, [r2, r1, lsr #2]      \n" // r1 = sec-map-VABITS8
+"      cmp    r1, #0xAA                 \n" // r1 == VA_BITS8_DEFINED?
+"      bne    .LLV16LEc0                \n" // no, goto .LLV16LEc0
+".LLV16LEh9:                            \n" //
+"      mov    r0, #0xFFFFFFFF           \n" //
+"      lsl    r0, r0, #16               \n" // V_BITS16_DEFINED | top16safe
+"      bx     lr                        \n" //
+".LLV16LEc0:                            \n" //
+"      cmp    r1, #0x55                 \n" // VA_BITS8_UNDEFINED
+"      bne    .LLV16LEc4                \n" //
+".LLV16LEc2:                            \n" //
+"      mov    r0, #0xFFFFFFFF           \n" // V_BITS16_UNDEFINED | top16safe
+"      bx     lr                        \n" //
+".LLV16LEc4:                            \n" //
+       // r1 holds sec-map-VABITS8.  r0 holds the address and is 2-aligned.
+       // Extract the relevant 4 bits and inspect.
+"      and    r2, r0, #2       \n" // addr & 2
+"      add    r2, r2, r2       \n" // 2 * (addr & 2)
+"      lsr    r1, r1, r2       \n" // sec-map-VABITS8 >> (2 * (addr & 2))
+"      and    r1, r1, #15      \n" // (sec-map-VABITS8 >> (2 * (addr & 2))) & 15
+
+"      cmp    r1, #0xA                  \n" // VA_BITS4_DEFINED
+"      beq    .LLV16LEh9                \n" //
+
+"      cmp    r1, #0x5                  \n" // VA_BITS4_UNDEFINED
+"      beq    .LLV16LEc2                \n" //
+
+".LLV16LEc12:                           \n" //
+"      push   {r4, lr}                  \n" //
+"      mov    r2, #0                    \n" //
+"      mov    r1, #16                   \n" //
+"      bl     mc_LOADVn_slow            \n" //
+"      pop    {r4, pc}                  \n" //
+".size vgMemCheck_helperc_LOADV16le, .-vgMemCheck_helperc_LOADV16le \n"
+".previous\n"
+);
+
+#elif ENABLE_ASSEMBLY_HELPERS && defined(PERF_FAST_LOADV) \
+      && (defined(VGP_x86_linux) || defined(VGP_x86_solaris))
+__asm__(
+".text\n"
+".align 16\n"
+".global vgMemCheck_helperc_LOADV16le\n"
+".type   vgMemCheck_helperc_LOADV16le, @function\n"
+"vgMemCheck_helperc_LOADV16le:\n"
+"      test   $0x1,  %eax\n"
+"      jne    .LLV16LE5\n"          /* jump if not aligned */
+"      mov    %eax,  %edx\n"
+"      shr    $0x10, %edx\n"
+"      mov    primary_map(,%edx,4), %ecx\n"
+"      movzwl %ax,   %edx\n"
+"      shr    $0x2,  %edx\n"
+"      movzbl (%ecx,%edx,1), %edx\n"/* edx = VA bits for 32bit */
+"      cmp    $0xaa, %edx\n"        /* compare to VA_BITS8_DEFINED */
+"      jne    .LLV16LE2\n"          /* jump if not all 32bits defined */
+".LLV16LE1:\n"
+"      mov    $0xffff0000,%eax\n"   /* V_BITS16_DEFINED | top16safe */
+"      ret\n"
+".LLV16LE2:\n"
+"      cmp    $0x55, %edx\n"        /* compare to VA_BITS8_UNDEFINED */
+"      jne    .LLV16LE4\n"          /* jump if not all 32bits undefined */
+".LLV16LE3:\n"
+"      or     $0xffffffff,%eax\n"   /* V_BITS16_UNDEFINED | top16safe */
+"      ret\n"
+".LLV16LE4:\n"
+"      mov    %eax,  %ecx\n"
+"      and    $0x2,  %ecx\n"
+"      add    %ecx,  %ecx\n"
+"      sar    %cl,   %edx\n"
+"      and    $0xf,  %edx\n"
+"      cmp    $0xa,  %edx\n"
+"      je     .LLV16LE1\n"          /* jump if all 16bits are defined */
+"      cmp    $0x5,  %edx\n"
+"      je     .LLV16LE3\n"          /* jump if all 16bits are undefined */
+".LLV16LE5:\n"
+"      xor    %ecx,  %ecx\n"        /* tail call mc_LOADVn_slow(a, 16, 0) */
+"      mov    $16,   %edx\n"
+"      jmp    mc_LOADVn_slow\n"
+".size vgMemCheck_helperc_LOADV16le, .-vgMemCheck_helperc_LOADV16le \n"
+".previous\n"
+);
+
+#else
+// Generic for all platforms except {arm32,x86}-linux and x86-solaris
 VG_REGPARM(1) UWord MC_(helperc_LOADV16le) ( Addr a )
 {
    return mc_LOADV16(a, False);
 }
+#endif
+
+/*------------------------------------------------------------*/
+/*--- STOREV16                                             ---*/
+/*------------------------------------------------------------*/
 
 /* True if the vabits4 in vabits8 indicate a and a+1 are accessible. */
 static INLINE
@@ -4650,7 +5071,7 @@
 static INLINE
 void mc_STOREV16 ( Addr a, UWord vbits16, Bool isBigEndian )
 {
-   PROF_EVENT(250, "mc_STOREV16");
+   PROF_EVENT(MCPE_STOREV16);
 
 #ifndef PERF_FAST_STOREV
    mc_STOREVn_slow( a, 16, (ULong)vbits16, isBigEndian );
@@ -4660,7 +5081,7 @@
       SecMap* sm;
 
       if (UNLIKELY( UNALIGNED_OR_HIGH(a,16) )) {
-         PROF_EVENT(251, "mc_STOREV16-slow1");
+         PROF_EVENT(MCPE_STOREV16_SLOW1);
          mc_STOREVn_slow( a, 16, (ULong)vbits16, isBigEndian );
          return;
       }
@@ -4681,7 +5102,7 @@
                                          &(sm->vabits8[sm_off]) );
             return;
          }
-         PROF_EVENT(232, "mc_STOREV16-slow2");
+         PROF_EVENT(MCPE_STOREV16_SLOW2);
          mc_STOREVn_slow( a, 16, (ULong)vbits16, isBigEndian );
       }
       if (V_BITS16_UNDEFINED == vbits16) {
@@ -4694,17 +5115,18 @@
                                          &(sm->vabits8[sm_off]) );
             return;
          }
-         PROF_EVENT(233, "mc_STOREV16-slow3");
+         PROF_EVENT(MCPE_STOREV16_SLOW3);
          mc_STOREVn_slow( a, 16, (ULong)vbits16, isBigEndian );
          return;
       }
 
-      PROF_EVENT(234, "mc_STOREV16-slow4");
+      PROF_EVENT(MCPE_STOREV16_SLOW4);
       mc_STOREVn_slow( a, 16, (ULong)vbits16, isBigEndian );
    }
 #endif
 }
 
+
 VG_REGPARM(2) void MC_(helperc_STOREV16be) ( Addr a, UWord vbits16 )
 {
    mc_STOREV16(a, vbits16, True);
@@ -4714,14 +5136,110 @@
    mc_STOREV16(a, vbits16, False);
 }
 
+/*------------------------------------------------------------*/
+/*--- LOADV8                                               ---*/
+/*------------------------------------------------------------*/
 
-/* ------------------------ Size = 1 ------------------------ */
 /* Note: endianness is irrelevant for size == 1 */
 
+// Non-generic assembly for arm32-linux
+#if ENABLE_ASSEMBLY_HELPERS && defined(PERF_FAST_LOADV) \
+    && defined(VGP_arm_linux)
+__asm__( /* Derived from NCode template */
+".text                                  \n"
+".align 2                               \n"
+".global vgMemCheck_helperc_LOADV8      \n"
+".type   vgMemCheck_helperc_LOADV8, %function \n"
+"vgMemCheck_helperc_LOADV8:             \n" //
+"      lsr    r2, r0, #16               \n" // r2 = pri-map-ix
+"      movw   r3, #:lower16:primary_map \n" //
+"      uxth   r1, r0                    \n" // r1 = sec-map-offB
+"      movt   r3, #:upper16:primary_map \n" //
+"      ldr    r2, [r3, r2, lsl #2]      \n" // r2 = sec-map
+"      ldrb   r1, [r2, r1, lsr #2]      \n" // r1 = sec-map-VABITS8
+"      cmp    r1, #0xAA                 \n" // r1 == VA_BITS8_DEFINED?
+"      bne    .LLV8c0                   \n" // no, goto .LLV8c0
+".LLV8h9:                               \n" //
+"      mov    r0, #0xFFFFFF00           \n" // V_BITS8_DEFINED | top24safe
+"      bx     lr                        \n" //
+".LLV8c0:                               \n" //
+"      cmp    r1, #0x55                 \n" // VA_BITS8_UNDEFINED
+"      bne    .LLV8c4                   \n" //
+".LLV8c2:                               \n" //
+"      mov    r0, #0xFFFFFFFF           \n" // V_BITS8_UNDEFINED | top24safe
+"      bx     lr                        \n" //
+".LLV8c4:                               \n" //
+       // r1 holds sec-map-VABITS8
+       // r0 holds the address.  Extract the relevant 2 bits and inspect.
+"      and    r2, r0, #3       \n" // addr & 3
+"      add    r2, r2, r2       \n" // 2 * (addr & 3)
+"      lsr    r1, r1, r2       \n" // sec-map-VABITS8 >> (2 * (addr & 3))
+"      and    r1, r1, #3       \n" // (sec-map-VABITS8 >> (2 * (addr & 3))) & 3
+
+"      cmp    r1, #2                    \n" // VA_BITS2_DEFINED
+"      beq    .LLV8h9                   \n" //
+
+"      cmp    r1, #1                    \n" // VA_BITS2_UNDEFINED
+"      beq    .LLV8c2                   \n" //
+
+"      push   {r4, lr}                  \n" //
+"      mov    r2, #0                    \n" //
+"      mov    r1, #8                    \n" //
+"      bl     mc_LOADVn_slow            \n" //
+"      pop    {r4, pc}                  \n" //
+".size vgMemCheck_helperc_LOADV8, .-vgMemCheck_helperc_LOADV8 \n"
+".previous\n"
+);
+
+/* Non-generic assembly for x86-linux */
+#elif ENABLE_ASSEMBLY_HELPERS && defined(PERF_FAST_LOADV) \
+      && (defined(VGP_x86_linux) || defined(VGP_x86_solaris))
+__asm__(
+".text\n"
+".align 16\n"
+".global vgMemCheck_helperc_LOADV8\n"
+".type   vgMemCheck_helperc_LOADV8, @function\n"
+"vgMemCheck_helperc_LOADV8:\n"
+"      mov    %eax,  %edx\n"
+"      shr    $0x10, %edx\n"
+"      mov    primary_map(,%edx,4), %ecx\n"
+"      movzwl %ax,   %edx\n"
+"      shr    $0x2,  %edx\n"
+"      movzbl (%ecx,%edx,1), %edx\n"/* edx = VA bits for 32bit */
+"      cmp    $0xaa, %edx\n"        /* compare to VA_BITS8_DEFINED? */
+"      jne    .LLV8LE2\n"           /* jump if not defined */
+".LLV8LE1:\n"
+"      mov    $0xffffff00, %eax\n"  /* V_BITS8_DEFINED | top24safe */
+"      ret\n"
+".LLV8LE2:\n"
+"      cmp    $0x55, %edx\n"        /* compare to VA_BITS8_UNDEFINED */
+"      jne    .LLV8LE4\n"           /* jump if not all 32bits are undefined */
+".LLV8LE3:\n"
+"      or     $0xffffffff, %eax\n"  /* V_BITS8_UNDEFINED | top24safe */
+"      ret\n"
+".LLV8LE4:\n"
+"      mov    %eax,  %ecx\n"
+"      and    $0x3,  %ecx\n"
+"      add    %ecx,  %ecx\n"
+"      sar    %cl,   %edx\n"
+"      and    $0x3,  %edx\n"
+"      cmp    $0x2,  %edx\n"
+"      je     .LLV8LE1\n"           /* jump if all 8bits are defined */
+"      cmp    $0x1,  %edx\n"
+"      je     .LLV8LE3\n"           /* jump if all 8bits are undefined */
+"      xor    %ecx,  %ecx\n"        /* tail call to mc_LOADVn_slow(a, 8, 0) */
+"      mov    $0x8,  %edx\n"
+"      jmp    mc_LOADVn_slow\n"
+".size vgMemCheck_helperc_LOADV8, .-vgMemCheck_helperc_LOADV8\n"
+".previous\n"
+);
+
+#else
+// Generic for all platforms except {arm32,x86}-linux and x86-solaris
 VG_REGPARM(1)
 UWord MC_(helperc_LOADV8) ( Addr a )
 {
-   PROF_EVENT(260, "mc_LOADV8");
+   PROF_EVENT(MCPE_LOADV8);
 
 #ifndef PERF_FAST_LOADV
    return (UWord)mc_LOADVn_slow( a, 8, False/*irrelevant*/ );
@@ -4731,7 +5249,7 @@
       SecMap* sm;
 
       if (UNLIKELY( UNALIGNED_OR_HIGH(a,8) )) {
-         PROF_EVENT(261, "mc_LOADV8-slow1");
+         PROF_EVENT(MCPE_LOADV8_SLOW1);
          return (UWord)mc_LOADVn_slow( a, 8, False/*irrelevant*/ );
       }
 
@@ -4751,19 +5269,23 @@
          else if (vabits2 == VA_BITS2_UNDEFINED) { return V_BITS8_UNDEFINED; }
          else {
             /* Slow case: the byte is not all-defined or all-undefined. */
-            PROF_EVENT(262, "mc_LOADV8-slow2");
+            PROF_EVENT(MCPE_LOADV8_SLOW2);
             return (UWord)mc_LOADVn_slow( a, 8, False/*irrelevant*/ );
          }
       }
    }
 #endif
 }
+#endif
 
+/*------------------------------------------------------------*/
+/*--- STOREV8                                              ---*/
+/*------------------------------------------------------------*/
 
 VG_REGPARM(2)
 void MC_(helperc_STOREV8) ( Addr a, UWord vbits8 )
 {
-   PROF_EVENT(270, "mc_STOREV8");
+   PROF_EVENT(MCPE_STOREV8);
 
 #ifndef PERF_FAST_STOREV
    mc_STOREVn_slow( a, 8, (ULong)vbits8, False/*irrelevant*/ );
@@ -4773,7 +5295,7 @@
       SecMap* sm;
 
       if (UNLIKELY( UNALIGNED_OR_HIGH(a,8) )) {
-         PROF_EVENT(271, "mc_STOREV8-slow1");
+         PROF_EVENT(MCPE_STOREV8_SLOW1);
          mc_STOREVn_slow( a, 8, (ULong)vbits8, False/*irrelevant*/ );
          return;
       }
@@ -4829,7 +5351,7 @@
                                          &(sm->vabits8[sm_off]) );
             return;
          }
-         PROF_EVENT(232, "mc_STOREV8-slow2");
+         PROF_EVENT(MCPE_STOREV8_SLOW2);
          mc_STOREVn_slow( a, 8, (ULong)vbits8, False/*irrelevant*/ );
          return;
       }
@@ -4845,13 +5367,13 @@
                                          &(sm->vabits8[sm_off]) );
             return;
          }
-         PROF_EVENT(233, "mc_STOREV8-slow3");
+         PROF_EVENT(MCPE_STOREV8_SLOW3);
          mc_STOREVn_slow( a, 8, (ULong)vbits8, False/*irrelevant*/ );
          return;
       }
 
       // Partially defined word
-      PROF_EVENT(234, "mc_STOREV8-slow4");
+      PROF_EVENT(MCPE_STOREV8_SLOW4);
       mc_STOREVn_slow( a, 8, (ULong)vbits8, False/*irrelevant*/ );
    }
 #endif
@@ -5062,7 +5584,7 @@
 static Bool mc_cheap_sanity_check ( void )
 {
    n_sanity_cheap++;
-   PROF_EVENT(490, "cheap_sanity_check");
+   PROF_EVENT(MCPE_CHEAP_SANITY_CHECK);
    /* Check for sane operating level */
    if (MC_(clo_mc_level) < 1 || MC_(clo_mc_level) > 3)
       return False;
@@ -5082,7 +5604,7 @@
    if (0) return True;
 
    n_sanity_expensive++;
-   PROF_EVENT(491, "expensive_sanity_check");
+   PROF_EVENT(MCPE_EXPENSIVE_SANITY_CHECK);
 
    /* Check for sane operating level */
    if (MC_(clo_mc_level) < 1 || MC_(clo_mc_level) > 3)
@@ -5167,28 +5689,27 @@
 /*--- Command line args                                    ---*/
 /*------------------------------------------------------------*/
 
-/* --partial-loads-ok: enable by default on MacOS.  The MacOS system
-   graphics libraries are heavily vectorised, and not enabling this by
-   default causes lots of false errors. */
-#if defined(VGO_darwin)
+/* 31 Aug 2015: Vectorised code is now so widespread that
+   --partial-loads-ok needs to be enabled by default on all platforms.
+   Not doing so causes lots of false errors. */
 Bool          MC_(clo_partial_loads_ok)       = True;
-#else
-Bool          MC_(clo_partial_loads_ok)       = False;
-#endif
-
 Long          MC_(clo_freelist_vol)           = 20*1000*1000LL;
 Long          MC_(clo_freelist_big_blocks)    =  1*1000*1000LL;
 LeakCheckMode MC_(clo_leak_check)             = LC_Summary;
 VgRes         MC_(clo_leak_resolution)        = Vg_HighRes;
 UInt          MC_(clo_show_leak_kinds)        = R2S(Possible) | R2S(Unreached);
 UInt          MC_(clo_error_for_leak_kinds)   = R2S(Possible) | R2S(Unreached);
-UInt          MC_(clo_leak_check_heuristics)  = 0;
+UInt          MC_(clo_leak_check_heuristics)  =   H2S(LchStdString)
+                                                | H2S( LchLength64)
+                                                | H2S( LchNewArray)
+                                                | H2S( LchMultipleInheritance);
 Bool          MC_(clo_workaround_gcc296_bugs) = False;
 Int           MC_(clo_malloc_fill)            = -1;
 Int           MC_(clo_free_fill)              = -1;
-KeepStacktraces MC_(clo_keep_stacktraces)     = KS_alloc_then_free;
+KeepStacktraces MC_(clo_keep_stacktraces)     = KS_alloc_and_free;
 Int           MC_(clo_mc_level)               = 2;
 Bool          MC_(clo_show_mismatched_frees)  = True;
+Bool          MC_(clo_expensive_definedness_checks) = False;
 
 static const HChar * MC_(parse_leak_heuristics_tokens) =
    "-,stdstring,length64,newarray,multipleinheritance";
@@ -5298,7 +5819,7 @@
          return False;
       }
       if (gIgnoredAddressRanges) {
-         Word i;
+         UInt i;
          for (i = 0; i < VG_(sizeRangeMap)(gIgnoredAddressRanges); i++) {
             UWord val     = IAR_INVALID;
             UWord key_min = ~(UWord)0;
@@ -5307,11 +5828,11 @@
                                 gIgnoredAddressRanges, i );
             tl_assert(key_min <= key_max);
             UWord limit = 0x4000000; /* 64M - entirely arbitrary limit */
-            if (key_max - key_min > limit) {
+            if (key_max - key_min > limit && val == IAR_CommandLine) {
                VG_(message)(Vg_DebugMsg, 
                   "ERROR: --ignore-ranges: suspiciously large range:\n");
                VG_(message)(Vg_DebugMsg, 
-                   "       0x%lx-0x%lx (size %ld)\n", key_min, key_max,
+                   "       0x%lx-0x%lx (size %lu)\n", key_min, key_max,
                    key_max - key_min + 1);
                return False;
             }
@@ -5335,6 +5856,8 @@
 
    else if VG_BOOL_CLO(arg, "--show-mismatched-frees",
                        MC_(clo_show_mismatched_frees)) {}
+   else if VG_BOOL_CLO(arg, "--expensive-definedness-checks",
+                       MC_(clo_expensive_definedness_checks)) {}
 
    else
       return VG_(replacement_malloc_process_cmd_line_option)(arg);
@@ -5349,11 +5872,6 @@
 
 static void mc_print_usage(void)
 {
-   const HChar* plo_default = "no";
-#  if defined(VGO_darwin)
-   plo_default = "yes";
-#  endif
-
    VG_(printf)(
 "    --leak-check=no|summary|full     search for memory leaks at exit?  [summary]\n"
 "    --leak-resolution=low|med|high   differentiation of leak stack traces [high]\n"
@@ -5364,7 +5882,7 @@
 "        where kind is one of:\n"
 "          definite indirect possible reachable all none\n"
 "    --leak-check-heuristics=heur1,heur2,... which heuristics to use for\n"
-"        improving leak search false positive [none]\n"
+"        improving leak search false positive [all]\n"
 "        where heur is one of:\n"
 "          stdstring length64 newarray multipleinheritance all none\n"
 "    --show-reachable=yes             same as --show-leak-kinds=all\n"
@@ -5374,7 +5892,9 @@
 "                                     same as --show-leak-kinds=definite\n"
 "    --undef-value-errors=no|yes      check for undefined value errors [yes]\n"
 "    --track-origins=no|yes           show origins of undefined values? [no]\n"
-"    --partial-loads-ok=no|yes        too hard to explain here; see manual [%s]\n"
+"    --partial-loads-ok=no|yes        too hard to explain here; see manual [yes]\n"
+"    --expensive-definedness-checks=no|yes\n"
+"                                     Use extra-precise definedness tracking [no]\n"
 "    --freelist-vol=<number>          volume of freed blocks queue     [20000000]\n"
 "    --freelist-big-blocks=<number>   releases first blocks with size>= [1000000]\n"
 "    --workaround-gcc296-bugs=no|yes  self explanatory [no]\n"
@@ -5382,9 +5902,8 @@
 "    --malloc-fill=<hexnumber>        fill malloc'd areas with given value\n"
 "    --free-fill=<hexnumber>          fill free'd areas with given value\n"
 "    --keep-stacktraces=alloc|free|alloc-and-free|alloc-then-free|none\n"
-"        stack trace(s) to keep for malloc'd/free'd areas       [alloc-then-free]\n"
+"        stack trace(s) to keep for malloc'd/free'd areas       [alloc-and-free]\n"
 "    --show-mismatched-frees=no|yes   show frees that don't match the allocator? [yes]\n"
-, plo_default
    );
 }
 
@@ -5488,10 +6007,14 @@
       (
 "\n"
 "memcheck monitor commands:\n"
-"  get_vbits <addr> [<len>]\n"
-"        returns validity bits for <len> (or 1) bytes at <addr>\n"
+"  xb <addr> [<len>]\n"
+"        prints validity bits for <len> (or 1) bytes at <addr>\n"
 "            bit values 0 = valid, 1 = invalid, __ = unaddressable byte\n"
-"        Example: get_vbits 0x8049c78 10\n"
+"        Then prints the bytes values below the corresponding validity bits\n"
+"        in a layout similar to the gdb command 'x /<len>xb <addr>'\n"
+"        Example: xb 0x8049c78 10\n"
+"  get_vbits <addr> [<len>]\n"
+"        Similar to xb, but only prints the validity bytes by group of 4.\n"
 "  make_memory [noaccess|undefined\n"
 "                     |defined|Definedifaddressable] <addr> [<len>]\n"
 "        mark <len> (or 1) bytes at <addr> with the given accessibility\n"
@@ -5512,8 +6035,13 @@
 "                 leak_check summary any\n"
 "                 leak_check full kinds indirect,possible\n"
 "                 leak_check full reachable any limited 100\n"
-"  block_list <loss_record_nr>\n"
+"  block_list <loss_record_nr>|<loss_record_nr_from>..<loss_record_nr_to>\n"
+"                [unlimited*|limited <max_blocks>]\n"
+"                [heuristics heur1,heur2,...]\n"
 "        after a leak search, shows the list of blocks of <loss_record_nr>\n"
+"        (or of the range <loss_record_nr_from>..<loss_record_nr_to>).\n"
+"        With heuristics, only shows the blocks found via heur1,heur2,...\n"
+"            * = defaults\n"
 "  who_points_at <addr> [<len>]\n"
 "        shows places pointing inside <len> (default 1) bytes at <addr>\n"
 "        (with len 1, only shows \"start pointers\" pointing exactly to <addr>,\n"
@@ -5521,6 +6049,103 @@
 "\n");
 }
 
+/* Print szB bytes at address, with a format similar to the gdb command
+   x /<szB>xb address.
+   res[i] == 1 indicates the corresponding byte is addressable. */
+static void gdb_xb (Addr address, SizeT szB, Int res[])
+{
+   UInt i;
+
+   for (i = 0; i < szB; i++) {
+      UInt bnr = i % 8;
+      if (bnr == 0) {
+         if (i != 0)
+            VG_(printf) ("\n"); // Terminate previous line
+         VG_(printf) ("%p:", (void*)(address+i));
+      }
+      if (res[i] == 1)
+         VG_(printf) ("\t0x%02x", *(UChar*)(address+i));
+      else
+         VG_(printf) ("\t0x??");
+   }
+   VG_(printf) ("\n"); // Terminate previous line
+}
+
+
+/* Returns the address of the next non space character,
+   or address of the string terminator. */
+static HChar* next_non_space (HChar *s)
+{
+   while (*s && *s == ' ')
+      s++;
+   return s;
+}
+
+/* Parse an integer slice, i.e. a single integer or a range of integer.
+   Syntax is:
+       <integer>[..<integer> ]
+   (spaces are allowed before and/or after ..).
+   Return True if range correctly parsed, False otherwise. */
+static Bool VG_(parse_slice) (HChar* s, HChar** saveptr,
+                              UInt *from, UInt *to)
+{
+   HChar* wl;
+   HChar *endptr;
+   endptr = NULL;////
+   wl = VG_(strtok_r) (s, " ", saveptr);
+
+   /* slice must start with an integer. */
+   if (wl == NULL) {
+      VG_(gdb_printf) ("expecting integer or slice <from>..<to>\n");
+      return False;
+   }
+   *from = VG_(strtoull10) (wl, &endptr);
+   if (endptr == wl) {
+      VG_(gdb_printf) ("invalid integer or slice <from>..<to>\n");
+      return False;
+   }
+
+   if (*endptr == '\0' && *next_non_space(*saveptr) != '.') {
+      /* wl token is an integer terminating the string
+         or else next token does not start with .
+         In both cases, the slice is a single integer. */
+      *to = *from;
+      return True;
+   }
+
+   if (*endptr == '\0') {
+      // iii ..    => get the next token
+      wl =  VG_(strtok_r) (NULL, " .", saveptr);
+   } else {
+      // It must be iii..
+      if (*endptr != '.' && *(endptr+1) != '.') {
+         VG_(gdb_printf) ("expecting slice <from>..<to>\n");
+         return False;
+      }
+      if ( *(endptr+2) == ' ') {
+         // It must be iii.. jjj  => get the next token
+         wl =  VG_(strtok_r) (NULL, " .", saveptr);
+      } else {
+         // It must be iii..jjj
+         wl = endptr+2;
+      }
+   }
+
+   *to = VG_(strtoull10) (wl, &endptr);
+   if (*endptr != '\0') {
+      VG_(gdb_printf) ("missing/wrong 'to' of slice <from>..<to>\n");
+      return False;
+   }
+
+   if (*from > *to) {
+      VG_(gdb_printf) ("<from> cannot be bigger than <to> "
+                       "in slice <from>..<to>\n");
+      return False;
+   }
+
+   return True;
+}
+
 /* return True if request recognised, False otherwise */
 static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
 {
@@ -5536,7 +6161,7 @@
       command. This ensures a shorter abbreviation for the user. */
    switch (VG_(keyword_id) 
            ("help get_vbits leak_check make_memory check_memory "
-            "block_list who_points_at", 
+            "block_list who_points_at xb", 
             wcmd, kwd_report_duplicated_matches)) {
    case -2: /* multiple matches */
       return True;
@@ -5574,7 +6199,7 @@
          VG_(printf) ("\n");
          if (unaddressable) {
             VG_(printf)
-               ("Address %p len %ld has %d bytes unaddressable\n",
+               ("Address %p len %lu has %d bytes unaddressable\n",
                 (void *)address, szB, unaddressable);
          }
       }
@@ -5669,8 +6294,8 @@
             else if (int_value > 0)
                lcp.max_loss_records_output = (UInt) int_value;
             else
-               VG_(gdb_printf) ("max_loss_records_output must be >= 1, got %d\n",
-                                int_value);
+               VG_(gdb_printf) ("max_loss_records_output must be >= 1,"
+                                " got %d\n", int_value);
             break;
          }
          default:
@@ -5724,11 +6349,11 @@
       case -1: break;
       case  0: /* addressable */
          if (is_mem_addressable ( address, szB, &bad_addr ))
-            VG_(printf) ("Address %p len %ld addressable\n", 
+            VG_(printf) ("Address %p len %lu addressable\n", 
                              (void *)address, szB);
          else
             VG_(printf)
-               ("Address %p len %ld not addressable:\nbad address %p\n",
+               ("Address %p len %lu not addressable:\nbad address %p\n",
                 (void *)address, szB, (void *) bad_addr);
          MC_(pp_describe_addr) (address);
          break;
@@ -5736,7 +6361,7 @@
          res = is_mem_defined ( address, szB, &bad_addr, &otag );
          if (MC_AddrErr == res)
             VG_(printf)
-               ("Address %p len %ld not addressable:\nbad address %p\n",
+               ("Address %p len %lu not addressable:\nbad address %p\n",
                 (void *)address, szB, (void *) bad_addr);
          else if (MC_ValueErr == res) {
             okind = otag & 3;
@@ -5752,7 +6377,7 @@
             default: tl_assert(0);
             }
             VG_(printf) 
-               ("Address %p len %ld not defined:\n"
+               ("Address %p len %lu not defined:\n"
                 "Uninitialised value at %p%s\n",
                 (void *)address, szB, (void *) bad_addr, src);
             ecu = otag & ~3;
@@ -5762,7 +6387,7 @@
             }
          }
          else
-            VG_(printf) ("Address %p len %ld defined\n",
+            VG_(printf) ("Address %p len %lu defined\n",
                          (void *)address, szB);
          MC_(pp_describe_addr) (address);
          break;
@@ -5773,16 +6398,63 @@
 
    case  5: { /* block_list */
       HChar* wl;
-      HChar *endptr;
-      UInt lr_nr = 0;
-      wl = VG_(strtok_r) (NULL, " ", &ssaveptr);
-      if (wl != NULL)
-         lr_nr = VG_(strtoull10) (wl, &endptr);
-      if (wl == NULL || *endptr != '\0') {
-         VG_(gdb_printf) ("malformed or missing integer\n");
-      } else {
-         // lr_nr-1 as what is shown to the user is 1 more than the index in lr_array.
-         if (lr_nr == 0 || ! MC_(print_block_list) (lr_nr-1))
+      HChar *the_end;
+      UInt lr_nr_from = 0;
+      UInt lr_nr_to = 0;
+
+      if (VG_(parse_slice) (NULL, &ssaveptr, &lr_nr_from, &lr_nr_to)) {
+         UInt limit_blocks = 999999999;
+         Int int_value;
+         UInt heuristics = 0;
+         
+         for (wl = VG_(strtok_r) (NULL, " ", &ssaveptr);
+              wl != NULL;
+              wl = VG_(strtok_r) (NULL, " ", &ssaveptr)) {
+            switch (VG_(keyword_id) ("unlimited limited heuristics ", 
+                                     wl,  kwd_report_all)) {
+            case -2: return True;
+            case -1: return True;
+            case  0: /* unlimited */
+               limit_blocks = 999999999; break;
+            case  1: /* limited */
+               wcmd = VG_(strtok_r) (NULL, " ", &ssaveptr);
+               if (wcmd == NULL) {
+                  VG_(gdb_printf) ("missing integer value\n");
+                  return True;
+               }
+               int_value = VG_(strtoll10) (wcmd, &the_end);
+               if (*the_end != '\0') {
+                  VG_(gdb_printf) ("malformed integer value\n");
+                  return True;
+               }
+               if (int_value <= 0) {
+                  VG_(gdb_printf) ("max_blocks must be >= 1,"
+                                   " got %d\n", int_value);
+                  return True;
+               }
+               limit_blocks = (UInt) int_value;
+               break;
+            case  2: /* heuristics */
+               wcmd = VG_(strtok_r) (NULL, " ", &ssaveptr);
+               if (wcmd == NULL 
+                   || !VG_(parse_enum_set)(MC_(parse_leak_heuristics_tokens),
+                                           True,/*allow_all*/
+                                           wcmd,
+                                           &heuristics)) {
+                  VG_(gdb_printf) ("missing or malformed heuristics set\n");
+                  return True;
+               }
+               break;
+            default:
+               tl_assert (0);
+            }
+         }
+         /* substract 1 from lr_nr_from/lr_nr_to  as what is shown to the user
+            is 1 more than the index in lr_array. */
+         if (lr_nr_from == 0 || ! MC_(print_block_list) (lr_nr_from-1,
+                                                         lr_nr_to-1,
+                                                         limit_blocks,
+                                                         heuristics))
             VG_(gdb_printf) ("invalid loss record nr\n");
       }
       return True;
@@ -5802,6 +6474,52 @@
       return True;
    }
 
+   case  7: { /* xb */
+      Addr address;
+      SizeT szB = 1;
+      if (VG_(strtok_get_address_and_size) (&address, &szB, &ssaveptr)) {
+         UChar vbits[8];
+         Int res[8];
+         Int i;
+         Int unaddressable = 0;
+         for (i = 0; i < szB; i++) {
+            Int bnr = i % 8;
+            res[bnr] = mc_get_or_set_vbits_for_client 
+               (address+i, (Addr) &vbits[bnr], 1, 
+                False, /* get them */
+                False  /* is client request */ ); 
+            /* We going to print the first vabits of a new line.
+               Terminate the previous line if needed: prints a line with the
+               address and the data. */
+            if (bnr == 0) {
+               if (i != 0) {
+                  VG_(printf) ("\n");
+                  gdb_xb (address + i - 8, 8, res);
+               }
+               VG_(printf) ("\t"); // To align VABITS with gdb_xb layout
+            }
+            if (res[bnr] == 1) {
+               VG_(printf) ("\t  %02x", vbits[bnr]);
+            } else {
+               tl_assert(3 == res[bnr]);
+               unaddressable++;
+               VG_(printf) ("\t  __");
+            }
+         }
+         VG_(printf) ("\n");
+         if (szB % 8 == 0 && szB > 0)
+            gdb_xb (address + szB - 8, 8, res);
+         else
+            gdb_xb (address + szB - szB % 8, szB % 8, res);
+         if (unaddressable) {
+            VG_(printf)
+               ("Address %p len %lu has %d bytes unaddressable\n",
+                (void *)address, szB, unaddressable);
+         }
+      }
+      return True;
+   }
+
    default: 
       tl_assert(0);
       return False;
@@ -6151,33 +6869,159 @@
 
 #ifdef MC_PROFILE_MEMORY
 
-UInt   MC_(event_ctr)[N_PROF_EVENTS];
-HChar* MC_(event_ctr_name)[N_PROF_EVENTS];
+ULong  MC_(event_ctr)[MCPE_LAST];
+
+/* Event counter names. Use the name of the function that increases the
+   event counter. Drop any MC_() and mc_ prefices. */
+static const HChar* MC_(event_ctr_name)[MCPE_LAST] = {
+   [MCPE_LOADVN_SLOW] = "LOADVn_slow",
+   [MCPE_LOADVN_SLOW_LOOP] = "LOADVn_slow_loop",
+   [MCPE_STOREVN_SLOW] = "STOREVn_slow",
+   [MCPE_STOREVN_SLOW_LOOP] = "STOREVn_slow(loop)",
+   [MCPE_MAKE_ALIGNED_WORD32_UNDEFINED] = "make_aligned_word32_undefined",
+   [MCPE_MAKE_ALIGNED_WORD32_UNDEFINED_SLOW] = 
+        "make_aligned_word32_undefined_slow",
+   [MCPE_MAKE_ALIGNED_WORD64_UNDEFINED] = "make_aligned_word64_undefined",
+   [MCPE_MAKE_ALIGNED_WORD64_UNDEFINED_SLOW] = 
+        "make_aligned_word64_undefined_slow",
+   [MCPE_MAKE_ALIGNED_WORD32_NOACCESS] = "make_aligned_word32_noaccess",
+   [MCPE_MAKE_ALIGNED_WORD32_NOACCESS_SLOW] =
+         "make_aligned_word32_noaccess_slow",
+   [MCPE_MAKE_ALIGNED_WORD64_NOACCESS] = "make_aligned_word64_noaccess",
+   [MCPE_MAKE_ALIGNED_WORD64_NOACCESS_SLOW] =
+        "make_aligned_word64_noaccess_slow",
+   [MCPE_MAKE_MEM_NOACCESS] = "make_mem_noaccess",
+   [MCPE_MAKE_MEM_UNDEFINED] = "make_mem_undefined",
+   [MCPE_MAKE_MEM_UNDEFINED_W_OTAG] = "make_mem_undefined_w_otag",
+   [MCPE_MAKE_MEM_DEFINED] = "make_mem_defined",
+   [MCPE_CHEAP_SANITY_CHECK] = "cheap_sanity_check",
+   [MCPE_EXPENSIVE_SANITY_CHECK] = "expensive_sanity_check",
+   [MCPE_COPY_ADDRESS_RANGE_STATE] = "copy_address_range_state",
+   [MCPE_COPY_ADDRESS_RANGE_STATE_LOOP1] = "copy_address_range_state(loop1)",
+   [MCPE_COPY_ADDRESS_RANGE_STATE_LOOP2] = "copy_address_range_state(loop2)",
+   [MCPE_CHECK_MEM_IS_NOACCESS] = "check_mem_is_noaccess",
+   [MCPE_CHECK_MEM_IS_NOACCESS_LOOP] = "check_mem_is_noaccess(loop)",
+   [MCPE_IS_MEM_ADDRESSABLE] = "is_mem_addressable",
+   [MCPE_IS_MEM_ADDRESSABLE_LOOP] = "is_mem_addressable(loop)",
+   [MCPE_IS_MEM_DEFINED] = "is_mem_defined",
+   [MCPE_IS_MEM_DEFINED_LOOP] = "is_mem_defined(loop)",
+   [MCPE_IS_MEM_DEFINED_COMPREHENSIVE] = "is_mem_defined_comprehensive",
+   [MCPE_IS_MEM_DEFINED_COMPREHENSIVE_LOOP] =
+        "is_mem_defined_comprehensive(loop)",
+   [MCPE_IS_DEFINED_ASCIIZ] = "is_defined_asciiz",
+   [MCPE_IS_DEFINED_ASCIIZ_LOOP] = "is_defined_asciiz(loop)",
+   [MCPE_FIND_CHUNK_FOR_OLD] = "find_chunk_for_OLD",
+   [MCPE_FIND_CHUNK_FOR_OLD_LOOP] = "find_chunk_for_OLD(loop)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS] = "set_address_range_perms",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_SINGLE_SECMAP] =
+        "set_address_range_perms(single-secmap)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_STARTOF_SECMAP] =
+        "set_address_range_perms(startof-secmap)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_MULTIPLE_SECMAPS] =
+   "set_address_range_perms(multiple-secmaps)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM1] =
+        "set_address_range_perms(dist-sm1)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM2] =
+        "set_address_range_perms(dist-sm2)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM1_QUICK] =
+        "set_address_range_perms(dist-sm1-quick)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_DIST_SM2_QUICK] =
+        "set_address_range_perms(dist-sm2-quick)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_LOOP1A] = "set_address_range_perms(loop1a)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_LOOP1B] = "set_address_range_perms(loop1b)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_LOOP1C] = "set_address_range_perms(loop1c)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_LOOP8A] = "set_address_range_perms(loop8a)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_LOOP8B] = "set_address_range_perms(loop8b)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_LOOP64K] = "set_address_range_perms(loop64K)",
+   [MCPE_SET_ADDRESS_RANGE_PERMS_LOOP64K_FREE_DIST_SM] =
+        "set_address_range_perms(loop64K-free-dist-sm)",
+   [MCPE_LOADV_128_OR_256_SLOW_LOOP] = "LOADV_128_or_256_slow(loop)",
+   [MCPE_LOADV_128_OR_256]       = "LOADV_128_or_256",
+   [MCPE_LOADV_128_OR_256_SLOW1] = "LOADV_128_or_256-slow1",
+   [MCPE_LOADV_128_OR_256_SLOW2] = "LOADV_128_or_256-slow2",
+   [MCPE_LOADV64]        = "LOADV64",
+   [MCPE_LOADV64_SLOW1]  = "LOADV64-slow1",
+   [MCPE_LOADV64_SLOW2]  = "LOADV64-slow2",
+   [MCPE_STOREV64]       = "STOREV64",
+   [MCPE_STOREV64_SLOW1] = "STOREV64-slow1",
+   [MCPE_STOREV64_SLOW2] = "STOREV64-slow2",
+   [MCPE_STOREV64_SLOW3] = "STOREV64-slow3",
+   [MCPE_STOREV64_SLOW4] = "STOREV64-slow4",
+   [MCPE_LOADV32]        = "LOADV32",
+   [MCPE_LOADV32_SLOW1]  = "LOADV32-slow1",
+   [MCPE_LOADV32_SLOW2]  = "LOADV32-slow2",
+   [MCPE_STOREV32]       = "STOREV32",
+   [MCPE_STOREV32_SLOW1] = "STOREV32-slow1",
+   [MCPE_STOREV32_SLOW2] = "STOREV32-slow2",
+   [MCPE_STOREV32_SLOW3] = "STOREV32-slow3",
+   [MCPE_STOREV32_SLOW4] = "STOREV32-slow4",
+   [MCPE_LOADV16]        = "LOADV16",
+   [MCPE_LOADV16_SLOW1]  = "LOADV16-slow1",
+   [MCPE_LOADV16_SLOW2]  = "LOADV16-slow2",
+   [MCPE_STOREV16]       = "STOREV16",
+   [MCPE_STOREV16_SLOW1] = "STOREV16-slow1",
+   [MCPE_STOREV16_SLOW2] = "STOREV16-slow2",
+   [MCPE_STOREV16_SLOW3] = "STOREV16-slow3",
+   [MCPE_STOREV16_SLOW4] = "STOREV16-slow4",
+   [MCPE_LOADV8]         = "LOADV8",
+   [MCPE_LOADV8_SLOW1]   = "LOADV8-slow1",
+   [MCPE_LOADV8_SLOW2]   = "LOADV8-slow2",
+   [MCPE_STOREV8]        = "STOREV8",
+   [MCPE_STOREV8_SLOW1]  = "STOREV8-slow1",
+   [MCPE_STOREV8_SLOW2]  = "STOREV8-slow2",
+   [MCPE_STOREV8_SLOW3]  = "STOREV8-slow3",
+   [MCPE_STOREV8_SLOW4]  = "STOREV8-slow4",
+   [MCPE_NEW_MEM_STACK_4]   = "new_mem_stack_4",
+   [MCPE_NEW_MEM_STACK_8]   = "new_mem_stack_8",
+   [MCPE_NEW_MEM_STACK_12]  = "new_mem_stack_12",
+   [MCPE_NEW_MEM_STACK_16]  = "new_mem_stack_16",
+   [MCPE_NEW_MEM_STACK_32]  = "new_mem_stack_32",
+   [MCPE_NEW_MEM_STACK_112] = "new_mem_stack_112",
+   [MCPE_NEW_MEM_STACK_128] = "new_mem_stack_128",
+   [MCPE_NEW_MEM_STACK_144] = "new_mem_stack_144",
+   [MCPE_NEW_MEM_STACK_160] = "new_mem_stack_160",
+   [MCPE_DIE_MEM_STACK_4]   = "die_mem_stack_4",
+   [MCPE_DIE_MEM_STACK_8]   = "die_mem_stack_8",
+   [MCPE_DIE_MEM_STACK_12]  = "die_mem_stack_12",
+   [MCPE_DIE_MEM_STACK_16]  = "die_mem_stack_16",
+   [MCPE_DIE_MEM_STACK_32]  = "die_mem_stack_32",
+   [MCPE_DIE_MEM_STACK_112] = "die_mem_stack_112",
+   [MCPE_DIE_MEM_STACK_128] = "die_mem_stack_128",
+   [MCPE_DIE_MEM_STACK_144] = "die_mem_stack_144",
+   [MCPE_DIE_MEM_STACK_160] = "die_mem_stack_160",
+   [MCPE_NEW_MEM_STACK]     = "new_mem_stack",
+   [MCPE_DIE_MEM_STACK]     = "die_mem_stack",
+};
 
 static void init_prof_mem ( void )
 {
-   Int i;
-   for (i = 0; i < N_PROF_EVENTS; i++) {
+   Int i, name_count = 0;
+
+   for (i = 0; i < MCPE_LAST; i++) {
       MC_(event_ctr)[i] = 0;
-      MC_(event_ctr_name)[i] = NULL;
+      if (MC_(event_ctr_name)[i] != NULL)
+         ++name_count;
    }
+
+   /* Make sure every profiling event has a name */
+   tl_assert(name_count == MCPE_LAST);
 }
 
 static void done_prof_mem ( void )
 {
-   Int  i;
+   Int  i, n;
    Bool spaced = False;
-   for (i = 0; i < N_PROF_EVENTS; i++) {
-      if (!spaced && (i % 10) == 0) {
+   for (i = n = 0; i < MCPE_LAST; i++) {
+      if (!spaced && (n % 10) == 0) {
          VG_(printf)("\n");
          spaced = True;
       }
       if (MC_(event_ctr)[i] > 0) {
          spaced = False;
-         VG_(printf)( "prof mem event %3d: %9d   %s\n", 
+         ++n;
+         VG_(printf)( "prof mem event %3d: %11llu   %s\n", 
                       i, MC_(event_ctr)[i],
-                      MC_(event_ctr_name)[i] 
-                         ? MC_(event_ctr_name)[i] : "unnamed");
+                      MC_(event_ctr_name)[i]);
       }
    }
 }
@@ -6634,10 +7478,16 @@
    // directly with brk(), not with sbrk(), perhaps it would be reasonable to
    // just mark all memory it allocates as defined.]
    //
+#  if !defined(VGO_solaris)
    if (MC_(clo_mc_level) == 3)
       VG_(track_new_mem_brk)         ( mc_new_mem_w_tid_make_ECU );
    else
       VG_(track_new_mem_brk)         ( mc_new_mem_w_tid_no_ECU );
+#  else
+   // On Solaris, brk memory has to be marked as defined, otherwise we get
+   // many false positives.
+   VG_(track_new_mem_brk)         ( make_mem_defined_w_tid );
+#  endif
 
    /* This origin tracking cache is huge (~100M), so only initialise
       if we need it. */
@@ -6665,7 +7515,7 @@
 static void print_SM_info(const HChar* type, Int n_SMs)
 {
    VG_(message)(Vg_DebugMsg,
-      " memcheck: SMs: %s = %d (%ldk, %ldM)\n",
+      " memcheck: SMs: %s = %d (%luk, %luM)\n",
       type,
       n_SMs,
       n_SMs * sizeof(SecMap) / 1024UL,
@@ -6682,18 +7532,18 @@
       " memcheck: sanity checks: %d cheap, %d expensive\n",
       n_sanity_cheap, n_sanity_expensive );
    VG_(message)(Vg_DebugMsg,
-      " memcheck: auxmaps: %lld auxmap entries (%lldk, %lldM) in use\n",
+      " memcheck: auxmaps: %llu auxmap entries (%lluk, %lluM) in use\n",
       n_auxmap_L2_nodes, 
       n_auxmap_L2_nodes * 64, 
       n_auxmap_L2_nodes / 16 );
    VG_(message)(Vg_DebugMsg,
-      " memcheck: auxmaps_L1: %lld searches, %lld cmps, ratio %lld:10\n",
+      " memcheck: auxmaps_L1: %llu searches, %llu cmps, ratio %llu:10\n",
       n_auxmap_L1_searches, n_auxmap_L1_cmps,
       (10ULL * n_auxmap_L1_cmps) 
          / (n_auxmap_L1_searches ? n_auxmap_L1_searches : 1) 
    );   
    VG_(message)(Vg_DebugMsg,
-      " memcheck: auxmaps_L2: %lld searches, %lld nodes\n",
+      " memcheck: auxmaps_L2: %llu searches, %llu nodes\n",
       n_auxmap_L2_searches, n_auxmap_L2_nodes
    );   
 
@@ -6717,7 +7567,7 @@
    max_shmem_szB   = sizeof(primary_map) + max_SMs_szB + max_secVBit_szB;
 
    VG_(message)(Vg_DebugMsg,
-      " memcheck: max sec V bit nodes:    %d (%ldk, %ldM)\n",
+      " memcheck: max sec V bit nodes:    %d (%luk, %luM)\n",
       max_secVBit_nodes, max_secVBit_szB / 1024,
                          max_secVBit_szB / (1024 * 1024));
    VG_(message)(Vg_DebugMsg,
@@ -6725,7 +7575,7 @@
       sec_vbits_new_nodes + sec_vbits_updates,
       sec_vbits_new_nodes, sec_vbits_updates );
    VG_(message)(Vg_DebugMsg,
-      " memcheck: max shadow mem size:   %ldk, %ldM\n",
+      " memcheck: max shadow mem size:   %luk, %luM\n",
       max_shmem_szB / 1024, max_shmem_szB / (1024 * 1024));
 
    if (MC_(clo_mc_level) >= 3) {
@@ -6745,8 +7595,8 @@
                    stats_ocacheL1_found_at_N,
                    stats_ocacheL1_movefwds );
       VG_(message)(Vg_DebugMsg,
-                   " ocacheL1: %'12lu sizeB  %'12u useful\n",
-                   (UWord)sizeof(OCache),
+                   " ocacheL1: %'12lu sizeB  %'12d useful\n",
+                   (SizeT)sizeof(OCache),
                    4 * OC_W32S_PER_LINE * OC_LINES_PER_SET * OC_N_SETS );
       VG_(message)(Vg_DebugMsg,
                    " ocacheL2: %'12lu refs   %'12lu misses\n",
@@ -6809,7 +7659,7 @@
       pertain to hardware mapped into the address space, and so we
       can't expect the client to have got rid of them. */
    if (gIgnoredAddressRanges) {
-      Word i, nBad = 0;
+      UInt i, nBad = 0;
       for (i = 0; i < VG_(sizeRangeMap)(gIgnoredAddressRanges); i++) {
          UWord val     = IAR_INVALID;
          UWord key_min = ~(UWord)0;
@@ -6831,8 +7681,8 @@
                  "VALGRIND_{DISABLE,ENABLE}_ERROR_REPORTING_IN_RANGE macros.\n"
             );
          }
-         VG_(umsg)("   [%ld]  0x%016llx-0x%016llx  %s\n",
-                   i, (ULong)key_min, (ULong)key_max, showIARKind(val));
+         VG_(umsg)("   [%u]  0x%016lx-0x%016lx  %s\n",
+                   i, key_min, key_max, showIARKind(val));
       }
    }
 
@@ -6870,7 +7720,7 @@
    VG_(details_version)         (NULL);
    VG_(details_description)     ("a memory error detector");
    VG_(details_copyright_author)(
-      "Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.");
+      "Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
    VG_(details_avg_translation_sizeB) ( 640 );
 
@@ -6959,6 +7809,11 @@
    VG_(track_post_reg_write)                  ( mc_post_reg_write );
    VG_(track_post_reg_write_clientcall_return)( mc_post_reg_write_clientcall );
 
+   if (MC_(clo_mc_level) >= 2) {
+      VG_(track_copy_mem_to_reg)  ( mc_copy_mem_to_reg );
+      VG_(track_copy_reg_to_mem)  ( mc_copy_reg_to_mem );
+   }
+
    VG_(needs_watchpoint)          ( mc_mark_unaddressable_for_watchpoint );
 
    init_shadow_memory();
diff --git a/memcheck/mc_malloc_wrappers.c b/memcheck/mc_malloc_wrappers.c
index 630c9c7..08fcc2d 100644
--- a/memcheck/mc_malloc_wrappers.c
+++ b/memcheck/mc_malloc_wrappers.c
@@ -8,7 +8,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -680,7 +680,7 @@
    MC_Mempool* mp;
 
    if (VG_(clo_verbosity) > 2) {
-      VG_(message)(Vg_UserMsg, "create_mempool(0x%lx, %d, %d)\n",
+      VG_(message)(Vg_UserMsg, "create_mempool(0x%lx, %u, %d)\n",
                                pool, rzB, is_zeroed);
       VG_(get_and_pp_StackTrace)
          (VG_(get_running_tid)(), MEMPOOL_DEBUG_STACKTRACE_DEPTH);
@@ -779,7 +779,7 @@
 	 }
 	 
          VG_(message)(Vg_UserMsg, 
-                      "Total mempools active: %d pools, %d chunks\n", 
+                      "Total mempools active: %u pools, %u chunks\n", 
 		      total_pools, total_chunks);
 	 tick = 0;
        }
@@ -792,7 +792,7 @@
    for (i = 0; i < n_chunks-1; i++) {
       if (chunks[i]->data > chunks[i+1]->data) {
          VG_(message)(Vg_UserMsg, 
-                      "Mempool chunk %d / %d is out of order "
+                      "Mempool chunk %u / %u is out of order "
                       "wrt. its successor\n", 
                       i+1, n_chunks);
          bad = 1;
@@ -803,7 +803,7 @@
    for (i = 0; i < n_chunks-1; i++) {
       if (chunks[i]->data + chunks[i]->szB > chunks[i+1]->data ) {
          VG_(message)(Vg_UserMsg, 
-                      "Mempool chunk %d / %d overlaps with its successor\n", 
+                      "Mempool chunk %u / %u overlaps with its successor\n", 
                       i+1, n_chunks);
          bad = 1;
       }
@@ -811,11 +811,11 @@
 
    if (bad) {
          VG_(message)(Vg_UserMsg, 
-                "Bad mempool (%d chunks), dumping chunks for inspection:\n",
+                "Bad mempool (%u chunks), dumping chunks for inspection:\n",
                 n_chunks);
          for (i = 0; i < n_chunks; ++i) {
             VG_(message)(Vg_UserMsg, 
-                         "Mempool chunk %d / %d: %ld bytes "
+                         "Mempool chunk %u / %u: %lu bytes "
                          "[%lx,%lx), allocated:\n",
                          i+1, 
                          n_chunks, 
@@ -834,7 +834,7 @@
    MC_Mempool* mp;
 
    if (VG_(clo_verbosity) > 2) {     
-      VG_(message)(Vg_UserMsg, "mempool_alloc(0x%lx, 0x%lx, %ld)\n",
+      VG_(message)(Vg_UserMsg, "mempool_alloc(0x%lx, 0x%lx, %lu)\n",
                                pool, addr, szB);
       VG_(get_and_pp_StackTrace) (tid, MEMPOOL_DEBUG_STACKTRACE_DEPTH);
    }
@@ -884,7 +884,7 @@
 
    if (VG_(clo_verbosity) > 2) {
       VG_(message)(Vg_UserMsg, 
-		   "mempool_free(0x%lx, 0x%lx) freed chunk of %ld bytes\n",
+		   "mempool_free(0x%lx, 0x%lx) freed chunk of %lu bytes\n",
 		   pool, addr, mc->szB + 0UL);
    }
 
@@ -902,7 +902,7 @@
    VgHashNode** chunks;
 
    if (VG_(clo_verbosity) > 2) {
-      VG_(message)(Vg_UserMsg, "mempool_trim(0x%lx, 0x%lx, %ld)\n",
+      VG_(message)(Vg_UserMsg, "mempool_trim(0x%lx, 0x%lx, %lu)\n",
                                pool, addr, szB);
       VG_(get_and_pp_StackTrace) (tid, MEMPOOL_DEBUG_STACKTRACE_DEPTH);
    }
@@ -1036,7 +1036,7 @@
    ThreadId     tid = VG_(get_running_tid)();
 
    if (VG_(clo_verbosity) > 2) {
-      VG_(message)(Vg_UserMsg, "mempool_change(0x%lx, 0x%lx, 0x%lx, %ld)\n",
+      VG_(message)(Vg_UserMsg, "mempool_change(0x%lx, 0x%lx, 0x%lx, %lu)\n",
                    pool, addrA, addrB, szB);
       VG_(get_and_pp_StackTrace) (tid, MEMPOOL_DEBUG_STACKTRACE_DEPTH);
    }
diff --git a/memcheck/mc_replace_strmem.c b/memcheck/mc_replace_strmem.c
index df0b22c..2fddc90 100644
--- a/memcheck/mc_replace_strmem.c
+++ b/memcheck/mc_replace_strmem.c
@@ -9,7 +9,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c
index 892b43b..4358d2e 100644
--- a/memcheck/mc_translate.c
+++ b/memcheck/mc_translate.c
@@ -8,7 +8,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2013 Julian Seward 
+   Copyright (C) 2000-2015 Julian Seward 
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -3785,6 +3785,10 @@
          /* I32(rm) x D128 -> D128 */
          return mkLazy2(mce, Ity_I128, vatom1, vatom2);
 
+      case Iop_RoundF128toInt:
+         /* I32(rm) x F128 -> F128 */
+         return mkLazy2(mce, Ity_I128, vatom1, vatom2);
+
       case Iop_D64toI64S:
       case Iop_D64toI64U:
       case Iop_I64StoD64:
@@ -4728,7 +4732,7 @@
       di->guard = guard;
       /* Ideally the didn't-happen return value here would be all-ones
          (all-undefined), so it'd be obvious if it got used
-         inadvertantly.  We can get by with the IR-mandated default
+         inadvertently.  We can get by with the IR-mandated default
          value (0b01 repeating, 0x55 etc) as that'll still look pretty
          undefined if it ever leaks out. */
    }
@@ -6073,12 +6077,13 @@
    IROp   vwiden   = Iop_INVALID;
    IRType loadedTy = Ity_INVALID;
    switch (lg->cvt) {
-      case ILGop_Ident64: loadedTy = Ity_I64; vwiden = Iop_INVALID; break;
-      case ILGop_Ident32: loadedTy = Ity_I32; vwiden = Iop_INVALID; break;
-      case ILGop_16Uto32: loadedTy = Ity_I16; vwiden = Iop_16Uto32; break;
-      case ILGop_16Sto32: loadedTy = Ity_I16; vwiden = Iop_16Sto32; break;
-      case ILGop_8Uto32:  loadedTy = Ity_I8;  vwiden = Iop_8Uto32;  break;
-      case ILGop_8Sto32:  loadedTy = Ity_I8;  vwiden = Iop_8Sto32;  break;
+      case ILGop_IdentV128: loadedTy = Ity_V128; vwiden = Iop_INVALID; break;
+      case ILGop_Ident64:   loadedTy = Ity_I64;  vwiden = Iop_INVALID; break;
+      case ILGop_Ident32:   loadedTy = Ity_I32;  vwiden = Iop_INVALID; break;
+      case ILGop_16Uto32:   loadedTy = Ity_I16;  vwiden = Iop_16Uto32; break;
+      case ILGop_16Sto32:   loadedTy = Ity_I16;  vwiden = Iop_16Sto32; break;
+      case ILGop_8Uto32:    loadedTy = Ity_I8;   vwiden = Iop_8Uto32;  break;
+      case ILGop_8Sto32:    loadedTy = Ity_I8;   vwiden = Iop_8Sto32;  break;
       default: VG_(tool_panic)("do_shadow_LoadG");
    }
 
@@ -6251,7 +6256,6 @@
                         IRType gWordTy, IRType hWordTy )
 {
    Bool    verboze = 0||False;
-   Bool    bogus;
    Int     i, j, first_stmt;
    IRStmt* st;
    MCEnv   mce;
@@ -6313,33 +6317,36 @@
    }
    tl_assert( VG_(sizeXA)( mce.tmpMap ) == sb_in->tyenv->types_used );
 
-   /* Make a preliminary inspection of the statements, to see if there
-      are any dodgy-looking literals.  If there are, we generate
-      extra-detailed (hence extra-expensive) instrumentation in
-      places.  Scan the whole bb even if dodgyness is found earlier,
-      so that the flatness assertion is applied to all stmts. */
+   if (MC_(clo_expensive_definedness_checks)) {
+      /* For expensive definedness checking skip looking for bogus
+         literals. */
+      mce.bogusLiterals = True;
+   } else {
+      /* Make a preliminary inspection of the statements, to see if there
+         are any dodgy-looking literals.  If there are, we generate
+         extra-detailed (hence extra-expensive) instrumentation in
+         places.  Scan the whole bb even if dodgyness is found earlier,
+         so that the flatness assertion is applied to all stmts. */
+      Bool bogus = False;
 
-   bogus = False;
+      for (i = 0; i < sb_in->stmts_used; i++) {
+         st = sb_in->stmts[i];
+         tl_assert(st);
+         tl_assert(isFlatIRStmt(st));
 
-   for (i = 0; i < sb_in->stmts_used; i++) {
-
-      st = sb_in->stmts[i];
-      tl_assert(st);
-      tl_assert(isFlatIRStmt(st));
-
-      if (!bogus) {
-         bogus = checkForBogusLiterals(st);
-         if (0 && bogus) {
-            VG_(printf)("bogus: ");
-            ppIRStmt(st);
-            VG_(printf)("\n");
+         if (!bogus) {
+            bogus = checkForBogusLiterals(st);
+            if (0 && bogus) {
+               VG_(printf)("bogus: ");
+               ppIRStmt(st);
+               VG_(printf)("\n");
+            }
+            if (bogus) break;
          }
       }
-
+      mce.bogusLiterals = bogus;
    }
 
-   mce.bogusLiterals = bogus;
-
    /* Copy verbatim any IR preamble preceding the first IMark */
 
    tl_assert(mce.sb == sb_out);
@@ -6786,7 +6793,7 @@
       di->guard = guard;
       /* Ideally the didn't-happen return value here would be
          all-zeroes (unknown-origin), so it'd be harmless if it got
-         used inadvertantly.  We slum it out with the IR-mandated
+         used inadvertently.  We slum it out with the IR-mandated
          default value (0b01 repeating, 0x55 etc) as that'll probably
          trump all legitimate otags via Max32, and it's pretty
          obviously bogus. */
@@ -7309,12 +7316,13 @@
 {
    IRType loadedTy = Ity_INVALID;
    switch (lg->cvt) {
-      case ILGop_Ident64: loadedTy = Ity_I64; break;
-      case ILGop_Ident32: loadedTy = Ity_I32; break;
-      case ILGop_16Uto32: loadedTy = Ity_I16; break;
-      case ILGop_16Sto32: loadedTy = Ity_I16; break;
-      case ILGop_8Uto32:  loadedTy = Ity_I8;  break;
-      case ILGop_8Sto32:  loadedTy = Ity_I8;  break;
+      case ILGop_IdentV128: loadedTy = Ity_V128; break;
+      case ILGop_Ident64:   loadedTy = Ity_I64;  break;
+      case ILGop_Ident32:   loadedTy = Ity_I32;  break;
+      case ILGop_16Uto32:   loadedTy = Ity_I16;  break;
+      case ILGop_16Sto32:   loadedTy = Ity_I16;  break;
+      case ILGop_8Uto32:    loadedTy = Ity_I8;   break;
+      case ILGop_8Sto32:    loadedTy = Ity_I8;   break;
       default: VG_(tool_panic)("schemeS.IRLoadG");
    }
    IRAtom* ori_alt
diff --git a/memcheck/memcheck.h b/memcheck/memcheck.h
index 2740578..811930e 100644
--- a/memcheck/memcheck.h
+++ b/memcheck/memcheck.h
@@ -13,7 +13,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2013 Julian Seward.  All rights reserved.
+   Copyright (C) 2000-2015 Julian Seward.  All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am
index f177167..68d9ca1 100644
--- a/memcheck/tests/Makefile.am
+++ b/memcheck/tests/Makefile.am
@@ -27,6 +27,9 @@
 if VGCONF_OS_IS_DARWIN
 SUBDIRS += darwin
 endif
+if VGCONF_OS_IS_SOLARIS
+SUBDIRS += solaris
+endif
 
 # Platform-specific tests
 if VGCONF_PLATFORMS_INCLUDE_X86_LINUX
@@ -35,9 +38,16 @@
 if VGCONF_PLATFORMS_INCLUDE_AMD64_LINUX
 SUBDIRS += amd64-linux
 endif
+if VGCONF_PLATFORMS_INCLUDE_X86_SOLARIS
+SUBDIRS += x86-solaris
+endif
+if VGCONF_PLATFORMS_INCLUDE_AMD64_SOLARIS
+SUBDIRS += amd64-solaris
+endif
 
 DIST_SUBDIRS = x86 amd64 ppc32 ppc64 s390x linux \
-		darwin x86-linux amd64-linux common .
+		darwin solaris x86-linux amd64-linux x86-solaris amd64-solaris \
+		common .
 
 dist_noinst_SCRIPTS = \
 	filter_addressable \
@@ -74,6 +84,7 @@
 		buflen_check.stderr.exp-kfail \
 	bug155125.stderr.exp bug155125.vgtest \
 	bug287260.stderr.exp bug287260.vgtest \
+	bug340392.stderr.exp bug340392.vgtest \
 	calloc-overflow.stderr.exp calloc-overflow.vgtest\
 	client-msg.stderr.exp client-msg.vgtest \
 	client-msg-as-xml.stderr.exp client-msg-as-xml.vgtest \
@@ -98,7 +109,7 @@
 	describe-block.stderr.exp describe-block.vgtest \
 	descr_belowsp.vgtest descr_belowsp.stderr.exp \
 	doublefree.stderr.exp doublefree.vgtest \
-	dw4.vgtest dw4.stderr.exp dw4.stdout.exp \
+	dw4.vgtest dw4.stderr.exp dw4.stderr.exp-solaris dw4.stdout.exp \
 	err_disable1.vgtest err_disable1.stderr.exp \
 	err_disable2.vgtest err_disable2.stderr.exp \
 	err_disable3.vgtest err_disable3.stderr.exp \
@@ -219,13 +230,13 @@
 	resvn_stack.stderr.exp resvn_stack.vgtest \
 	sbfragment.stdout.exp sbfragment.stderr.exp sbfragment.vgtest \
 	sem.stderr.exp sem.vgtest \
-	sendmsg.stderr.exp sendmsg.vgtest \
+	sendmsg.stderr.exp sendmsg.stderr.exp-solaris sendmsg.vgtest \
 	sh-mem.stderr.exp sh-mem.vgtest \
 	sh-mem-random.stderr.exp sh-mem-random.stdout.exp64 \
 	sh-mem-random.stdout.exp sh-mem-random.vgtest \
 	sigaltstack.stderr.exp sigaltstack.vgtest \
 	sigkill.stderr.exp sigkill.stderr.exp-darwin sigkill.stderr.exp-mips32 \
-	sigkill.vgtest \
+	    sigkill.stderr.exp-solaris sigkill.vgtest \
 	signal2.stderr.exp signal2.stdout.exp signal2.vgtest \
 	sigprocmask.stderr.exp sigprocmask.stderr.exp2 sigprocmask.vgtest \
 	static_malloc.stderr.exp static_malloc.vgtest \
@@ -268,7 +279,8 @@
 	vcpu_bz2.stdout.exp vcpu_bz2.stderr.exp vcpu_bz2.vgtest \
 	vcpu_fbench.stdout.exp vcpu_fbench.stderr.exp vcpu_fbench.vgtest \
 	vcpu_fnfns.stdout.exp vcpu_fnfns.stdout.exp-glibc28-amd64 \
-	vcpu_fnfns.stdout.exp-darwin vcpu_fnfns.stderr.exp vcpu_fnfns.vgtest \
+	vcpu_fnfns.stdout.exp-darwin vcpu_fnfns.stdout.exp-solaris \
+	vcpu_fnfns.stderr.exp vcpu_fnfns.vgtest \
 	wcs.vgtest wcs.stderr.exp wcs.stdout.exp \
 	wrap1.vgtest wrap1.stdout.exp wrap1.stderr.exp \
 	wrap2.vgtest wrap2.stdout.exp wrap2.stderr.exp \
@@ -279,7 +291,7 @@
 	wrap7.vgtest wrap7.stdout.exp wrap7.stderr.exp \
 	wrap8.vgtest wrap8.stdout.exp wrap8.stderr.exp \
 	wrap8.stdout.exp-ppc64 wrap8.stderr.exp-ppc64 \
-	writev1.stderr.exp writev1.vgtest \
+	writev1.stderr.exp writev1.stderr.exp-solaris writev1.vgtest \
 	xml1.stderr.exp xml1.stdout.exp xml1.vgtest xml1.stderr.exp-s390x-mvc \
 	threadname.vgtest threadname.stderr.exp \
 	threadname_xml.vgtest threadname_xml.stderr.exp
@@ -297,6 +309,7 @@
 	buflen_check \
 	bug155125 \
 	bug287260 \
+	bug340392 \
 	calloc-overflow \
 	client-msg \
 	clientperm \
@@ -323,7 +336,6 @@
 	leak-pool \
 	leak-tree \
 	leak-segv-jmp \
-	long_namespace_xml \
 	long-supps \
 	mallinfo \
 	malloc_free_fill \
@@ -365,6 +377,11 @@
 	wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 wrap7 wrap7so.so wrap8 \
 	writev1
 
+if !SOLARIS_SUN_STUDIO_AS
+# Sun Studio assembler fails on "IDENT too long"
+check_PROGRAMS += long_namespace_xml
+endif
+
 if DWARF4
 check_PROGRAMS += dw4
 endif
@@ -395,17 +412,26 @@
 atomic_incs_CFLAGS = $(AM_CFLAGS)
 endif
 
+if VGCONF_OS_IS_SOLARIS
+buflen_check_LDADD	= -lsocket -lnsl
+endif
+
 leak_cpp_interior_SOURCES	= leak_cpp_interior.cpp
 
 demangle_SOURCES = demangle.cpp
 
+bug340392_CFLAGS        = $(AM_CFLAGS) -O3
 dw4_CFLAGS		= $(AM_CFLAGS) -gdwarf-4 -fdebug-types-section
 
 descr_belowsp_LDADD     = -lpthread
 err_disable3_LDADD 	= -lpthread
 err_disable4_LDADD 	= -lpthread
+err_disable4_CFLAGS	= $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+err_disable4_CFLAGS	+= -D_XOPEN_SOURCE=500
+endif
 reach_thread_register_CFLAGS	= $(AM_CFLAGS) -O2
-reach_thread_register_LDADD     = -lpthread
+reach_thread_register_LDADD	= -lpthread
 thread_alloca_LDADD     = -lpthread
 threadname_LDADD 	= -lpthread
 
@@ -419,7 +445,7 @@
 
 inits_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
 
-inlinfo_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ @FLAG_W_NO_STATIC_LOCAL_IN_INLINE@
+inlinfo_CFLAGS = $(AM_CFLAGS) -w
 
 inltemplate_SOURCES = inltemplate.cpp
 inltemplate_CXXFLAGS = $(AM_CXXFLAGS) @FLAG_W_NO_UNINITIALIZED@
@@ -428,13 +454,23 @@
 
 manuel1_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
 
+memalign2_CFLAGS	= $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+memalign2_CFLAGS	+= -std=c99 -D__EXTENSIONS__
+endif
+
 memcmptest_CFLAGS	= $(AM_CFLAGS) -fno-builtin-memcmp
 
 mismatches_SOURCES	= mismatches.cpp
+mismatches_CXXFLAGS	= $(AM_CXXFLAGS) @FLAG_W_NO_MISMATCHED_NEW_DELETE@
 
 new_nothrow_SOURCES 	= new_nothrow.cpp
 new_override_SOURCES 	= new_override.cpp
 
+if VGCONF_OS_IS_SOLARIS
+null_socket_LDADD	= -lsocket -lnsl
+endif
+
 origin1_yes_CFLAGS      = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
 
 origin2_not_quite_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
@@ -452,7 +488,16 @@
 # because then we can't intercept it
 overlap_CFLAGS		= $(AM_CFLAGS) -fno-builtin-memcpy -fno-builtin-strcpy
 
-str_tester_CFLAGS	= $(AM_CFLAGS) -Wno-shadow
+resvn_stack_CFLAGS      = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
+
+sendmsg_CFLAGS		= $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+sendmsg_CFLAGS		+= -D_XOPEN_SOURCE=500
+sendmsg_LDADD		= -lsocket -lnsl
+endif
+
+str_tester_CFLAGS	= $(AM_CFLAGS) -Wno-shadow \
+			  @FLAG_W_NO_MEMSET_TRANSPOSED_ARGS@
 
 supp_CFLAGS             = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
 
@@ -525,3 +570,4 @@
 				-Wl,-soname -Wl,wrap7so.so
 endif
 
+xml1_CFLAGS             = $(AM_CFLAGS) -D_GNU_SOURCE
diff --git a/memcheck/tests/amd64-linux/filter_defcfaexpr b/memcheck/tests/amd64-linux/filter_defcfaexpr
index cdb1a6c..97955f9 100755
--- a/memcheck/tests/amd64-linux/filter_defcfaexpr
+++ b/memcheck/tests/amd64-linux/filter_defcfaexpr
@@ -1,6 +1,9 @@
 #! /bin/sh
 
-# change 
+# In case the test binary contains debug line info first change
+# bad0.c:?? to a (bogus) binary path /foobar/tests/amd64-linux/defcfaexpr/
+#
+# then change
 #
 # ==6019==    at 0x400512: bbb (in 
 #           /home/sewardj/VgTRUNK/trunk/memcheck/tests/amd64/defcfaexpr)
@@ -23,6 +26,7 @@
 # stack given the unusual CFAs describing it.
 
 
+sed "s/bad0.c:[0-9]\+/\/foobar\/tests\/amd64-linux\/defcfaexpr/" | \
 ./filter_stderr "$@" | \
 sed "s/\/.*\/tests\/amd64-linux\/defcfaexpr/bogus.S:0/" | \
 sed "s/(in /(/" 
diff --git a/memcheck/tests/amd64-solaris/Makefile.am b/memcheck/tests/amd64-solaris/Makefile.am
new file mode 100644
index 0000000..4d0ea14
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/Makefile.am
@@ -0,0 +1,25 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = filter_stderr
+
+EXTRA_DIST = \
+	context_fpu.stderr.exp context_fpu.stdout.exp context_fpu.vgtest \
+	context_gpr.stderr.exp context_gpr.stdout.exp context_gpr.vgtest \
+	context_rflags.stderr.exp context_rflags.stdout.exp context_rflags.vgtest \
+	context_rflags2.stderr.exp context_rflags2.stdout.exp context_rflags2.vgtest \
+	context_sse.stderr.exp context_sse.stdout.exp context_sse.vgtest \
+	ldsoexec.stderr.exp ldsoexec.vgtest
+
+check_PROGRAMS = \
+	context_fpu \
+	context_gpr \
+	context_rflags \
+	context_rflags2 \
+	context_sse \
+	ldsoexec
+
+AM_CFLAGS    += @FLAG_M64@
+AM_CXXFLAGS  += @FLAG_M64@
+AM_CCASFLAGS += @FLAG_M64@
+
diff --git a/memcheck/tests/amd64-solaris/context_fpu.c b/memcheck/tests/amd64-solaris/context_fpu.c
new file mode 100644
index 0000000..08f8347
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_fpu.c
@@ -0,0 +1,109 @@
+/* Test if x87 FP valus are correctly propagated in and out of a signal
+   handler and also check that the same applies for uninitialised values and
+   their origins. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+static siginfo_t si;
+static ucontext_t uc;
+static float inhandler[8];
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   int i;
+
+   si = *sip;
+   uc = *ucp;
+
+   /* Reset the FP stack so it's possible to push other values onto it.  (It
+      is fully filled in main() before triggering the signal handler).  Note
+      that VEX also clears all FP values when the finit instruction is
+      executed.  This provides another level of validation that the restore
+      code is correct. */
+   __asm__ __volatile__(
+      "finit\n");
+
+   /* Convert 80b values in mcontext to 32b values in the inhandler array. */
+   for (i = 0; i < 8; i++) {
+      __asm__ __volatile__(
+         "fldt   %[in]\n"
+         "fstps  %[out]\n"
+         : [out] "=m" (inhandler[i])
+         : [in] "m" (*(char*)&ucp->uc_mcontext.fpregs.fp_reg_set.fpchip_state.st[i]));
+   }
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   pid_t pid;
+   float out[8];
+   float x0;
+
+   /* Uninitialised, but we know px[0] is 0x0. */
+   float *px = malloc(sizeof(*px));
+   x0 = px[0];
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   pid = getpid();
+
+   __asm__ __volatile__(
+      /* Set values in the FP stack. */
+      "flds   %[x0]\n"
+      "fld1\n"
+      "flds   %[x0]\n"
+      "fld1\n"
+      "flds   %[x0]\n"
+      "fld1\n"
+      "flds   %[x0]\n"
+      "fld1\n"
+
+      /* Trigger the signal handler. */
+      "syscall\n"
+      "fstps  0x00 + %[out]\n"
+      "fstps  0x04 + %[out]\n"
+      "fstps  0x08 + %[out]\n"
+      "fstps  0x0c + %[out]\n"
+      "fstps  0x10 + %[out]\n"
+      "fstps  0x14 + %[out]\n"
+      "fstps  0x18 + %[out]\n"
+      "fstps  0x1c + %[out]\n"
+      : [out] "=m" (out[0])
+      : "a" (SYS_kill), "D" (pid), "S" (SIGUSR1), [x0] "m" (x0)
+      : "rdx", "cc", "memory");
+
+   printf("Values in the signal handler:\n");
+   printf("  fp[0]=%f, fp[2]=%f, fp[4]=%f, fp[6]=%f\n",
+          inhandler[0], inhandler[2], inhandler[4], inhandler[6]);
+   /* Check that inhandler[1], inhandler[3], inhandler[5] and inhandler[7]
+      contain uninitialised values (origin is px[0]). */
+   if (inhandler[1] || inhandler[3] || inhandler[5] || inhandler[7])
+      assert(0);
+
+   printf("Values after the return from the signal handler:\n");
+   printf("  fp[0]=%f, fp[2]=%f, fp[4]=%f, fp[6]=%f\n",
+          out[0], out[2], out[4], out[6]);
+   /* Check that out[1], out[3], out[5] and out[7] contain uninitialised
+      values (origin is px[0]). */
+   if (out[1] || out[3] || out[5] || out[7])
+      assert(0);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/amd64-solaris/context_fpu.stderr.exp b/memcheck/tests/amd64-solaris/context_fpu.stderr.exp
new file mode 100644
index 0000000..46c8731
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_fpu.stderr.exp
@@ -0,0 +1,96 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:96)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:96)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:96)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:96)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:96)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:96)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:96)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:96)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:104)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:104)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:104)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:104)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:104)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:104)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:104)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:104)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:50)
+
diff --git a/memcheck/tests/amd64-solaris/context_fpu.stdout.exp b/memcheck/tests/amd64-solaris/context_fpu.stdout.exp
new file mode 100644
index 0000000..2c3bf1d
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_fpu.stdout.exp
@@ -0,0 +1,4 @@
+Values in the signal handler:
+  fp[0]=1.000000, fp[2]=1.000000, fp[4]=1.000000, fp[6]=1.000000
+Values after the return from the signal handler:
+  fp[0]=1.000000, fp[2]=1.000000, fp[4]=1.000000, fp[6]=1.000000
diff --git a/memcheck/tests/amd64-solaris/context_fpu.vgtest b/memcheck/tests/amd64-solaris/context_fpu.vgtest
new file mode 100644
index 0000000..8a3955d
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_fpu.vgtest
@@ -0,0 +1,2 @@
+prog: context_fpu
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/amd64-solaris/context_gpr.c b/memcheck/tests/amd64-solaris/context_gpr.c
new file mode 100644
index 0000000..d955118
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_gpr.c
@@ -0,0 +1,95 @@
+/* Test if values in rax, rbx, rcx, rdx, rsi and rdi are correctly propagated
+   into and out of a signal handler and also check that the same applies for
+   uninitialised values and their origins. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+static siginfo_t si;
+static ucontext_t uc;
+/* x0 is always zero, but is visible to Valgrind as uninitialised. */
+static long x0;
+
+void break_out(void);
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   si = *sip;
+   uc = *ucp;
+
+   ucp->uc_mcontext.gregs[REG_RCX] = x0;
+
+   /* Break out of the endless loop. */
+   *(uintptr_t*)&ucp->uc_mcontext.gregs[REG_RIP] = (uintptr_t)break_out;
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   long rax, rbx, rcx, rdx, rsi, rdi;
+   long y0;
+
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(*px));
+   x0 = px[0];
+
+   /* Uninitialised, but we know py[0] is 0x0. */
+   long *py = malloc(sizeof(*py));
+   y0 = py[0];
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGALRM, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   alarm(2);
+
+   __asm__ __volatile__(
+      /* Set values in general purpose registers. */
+      "movq   $0xf0, %%rax\n"
+      "movq   %[y0], %%rbx\n"
+      "movq   $0xf1, %%rcx\n"
+      "movq   $0xf2, %%rdx\n"
+      "movq   $0xf3, %%rsi\n"
+      "movq   $0xf4, %%rdi\n"
+
+      /* Loopity loop, this is where the SIGALRM is triggered. */
+      "1:\n"
+      "jmp    1b\n"
+
+      "break_out:\n"
+      : "=a" (rax), "=b" (rbx), "=c" (rcx), "=d" (rdx), "=S" (rsi),
+        "=D" (rdi)
+      : [y0] "m" (y0)
+      : "cc", "memory");
+
+   printf("Values in the signal handler:\n");
+   printf("  rax=%#lx, rcx=%#lx, rdx=%#lx, rsi=%#lx, rdi=%#lx\n",
+          uc.uc_mcontext.gregs[REG_RAX], uc.uc_mcontext.gregs[REG_RCX],
+          uc.uc_mcontext.gregs[REG_RDX], uc.uc_mcontext.gregs[REG_RSI],
+          uc.uc_mcontext.gregs[REG_RDI]);
+   /* Check that rbx contains an uninitialised value (origin is py[0]). */
+   if (uc.uc_mcontext.gregs[REG_RBX])
+      assert(0);
+
+   printf("Values after the return from the signal handler:\n");
+   printf("  rax=%#lx, rdx=%#lx, rsi=%#lx, rdi=%#lx\n", rax, rdx, rsi, rdi);
+   /* Check that rbx and rcx contain uninitialised values (origin is py[0]
+      and px[0], respectively). */
+   if (rbx || rcx)
+      assert(0);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/amd64-solaris/context_gpr.stderr.exp b/memcheck/tests/amd64-solaris/context_gpr.stderr.exp
new file mode 100644
index 0000000..d17f7a3
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_gpr.stderr.exp
@@ -0,0 +1,18 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_gpr.c:83)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_gpr.c:42)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_gpr.c:90)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_gpr.c:42)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_gpr.c:90)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_gpr.c:38)
+
diff --git a/memcheck/tests/amd64-solaris/context_gpr.stdout.exp b/memcheck/tests/amd64-solaris/context_gpr.stdout.exp
new file mode 100644
index 0000000..199db7a
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_gpr.stdout.exp
@@ -0,0 +1,4 @@
+Values in the signal handler:
+  rax=0xf0, rcx=0xf1, rdx=0xf2, rsi=0xf3, rdi=0xf4
+Values after the return from the signal handler:
+  rax=0xf0, rdx=0xf2, rsi=0xf3, rdi=0xf4
diff --git a/memcheck/tests/amd64-solaris/context_gpr.vgtest b/memcheck/tests/amd64-solaris/context_gpr.vgtest
new file mode 100644
index 0000000..df56f58
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_gpr.vgtest
@@ -0,0 +1,2 @@
+prog: context_gpr
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/amd64-solaris/context_rflags.c b/memcheck/tests/amd64-solaris/context_rflags.c
new file mode 100644
index 0000000..b67f039
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_rflags.c
@@ -0,0 +1,67 @@
+/* Test if rflags values are correctly propagated in and out of a signal
+   handler.  Note that we actually test only the propagation of the overflow
+   and sign flags. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+#define OBIT(rflags) (!!((rflags) & (1 << 11)))
+#define SBIT(rflags) (!!((rflags) & (1 << 7)))
+
+static siginfo_t si;
+static ucontext_t uc;
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   si = *sip;
+   uc = *ucp;
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   pid_t pid;
+   long rflags;
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   pid = getpid();
+
+   __asm__ __volatile__(
+      /* Set overflow and sign flags. */
+      "movl   $1, %%edx\n"
+      "addl   $0x7fffffff, %%edx\n"
+
+      /* Trigger the signal handler. */
+      "syscall\n"
+      "pushfq\n"
+      "popq   %%rdx\n"
+      : "=d" (rflags)
+      : "a" (SYS_kill), "D" (pid), "S" (SIGUSR1)
+      : "cc", "memory");
+
+   printf("Values in the signal handler:\n");
+   printf("  overflow=%d, sign=%d\n",
+          OBIT(uc.uc_mcontext.gregs[REG_RFL]),
+          SBIT(uc.uc_mcontext.gregs[REG_RFL]));
+
+   printf("Values after the return from the signal handler:\n");
+   printf("  overflow=%d, sign=%d\n", OBIT(rflags), SBIT(rflags));
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/amd64-solaris/context_rflags.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/amd64-solaris/context_rflags.stderr.exp
diff --git a/memcheck/tests/amd64-solaris/context_rflags.stdout.exp b/memcheck/tests/amd64-solaris/context_rflags.stdout.exp
new file mode 100644
index 0000000..8ad7bac
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_rflags.stdout.exp
@@ -0,0 +1,4 @@
+Values in the signal handler:
+  overflow=1, sign=1
+Values after the return from the signal handler:
+  overflow=1, sign=1
diff --git a/memcheck/tests/amd64-solaris/context_rflags.vgtest b/memcheck/tests/amd64-solaris/context_rflags.vgtest
new file mode 100644
index 0000000..506f6a3
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_rflags.vgtest
@@ -0,0 +1,2 @@
+prog: context_rflags
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/amd64-solaris/context_rflags2.c b/memcheck/tests/amd64-solaris/context_rflags2.c
new file mode 100644
index 0000000..9afceca
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_rflags2.c
@@ -0,0 +1,90 @@
+/* Test if definedness of rflags values is correctly propagated in and out
+   of a signal handler.  Note that actually only the propagation of the
+   overflow and sign flags is tested.
+
+   This test must use alarm(2) to trigger the signal and not kill(2) as other
+   tests do because in the latter case the signal is actually delivered after
+   the syscall finished.  This means that Valgrind had to save a correct carry
+   flag value (indicating if the syscall succeeded) in the rflags.  This save
+   operation unfortunately makes all rflags initialised (due to imprecise
+   simulation). */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+#define OBIT(rflags) (!!((rflags) & (1 << 11)))
+#define SBIT(rflags) (!!((rflags) & (1 << 7)))
+
+static siginfo_t si;
+static ucontext_t uc;
+
+void break_out(void);
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   si = *sip;
+   uc = *ucp;
+
+   /* Break out of the endless loop. */
+   *(uintptr_t*)&ucp->uc_mcontext.gregs[REG_RIP] = (uintptr_t)break_out;
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   long rflags;
+   int x1;
+
+   /* Uninitialised, but we know px[0] is 0x0. */
+   int *px = malloc(sizeof(*px));
+   x1 = px[0] + 1;
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGALRM, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   alarm(2);
+
+   __asm__ __volatile__(
+      /* Set overflow and sign flags. */
+      "movl   %[x1], %%edx\n"
+      "addl   $0x7fffffff, %%edx\n"
+
+      /* Loopity loop, this is where the SIGALRM is triggered. */
+      "1:\n"
+      "jmp    1b\n"
+
+      "break_out:\n"
+      "pushfq\n"
+      "popq   %%rdx\n"
+      : "=d" (rflags)
+      : [x1] "m" (x1)
+      : "cc", "memory");
+
+   /* Check that the overflow and sign flags are uninitialised.
+
+      Note: This actually fails because the rflags are only approximate
+      (always initialised) in the signal handler. */
+   if (!OBIT(uc.uc_mcontext.gregs[REG_RFL]) ||
+       !SBIT(uc.uc_mcontext.gregs[REG_RFL]))
+      assert(0);
+
+   /* Check that the overflow and sign flags are uninitialised. */
+   if (!OBIT(rflags) || !SBIT(rflags))
+      assert(0);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/amd64-solaris/context_rflags2.stderr.exp b/memcheck/tests/amd64-solaris/context_rflags2.stderr.exp
new file mode 100644
index 0000000..5b94f9c
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_rflags2.stderr.exp
@@ -0,0 +1,12 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_rflags2.c:85)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_rflags2.c:44)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_rflags2.c:85)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_rflags2.c:44)
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/amd64-solaris/context_rflags2.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/amd64-solaris/context_rflags2.stdout.exp
diff --git a/memcheck/tests/amd64-solaris/context_rflags2.vgtest b/memcheck/tests/amd64-solaris/context_rflags2.vgtest
new file mode 100644
index 0000000..e42f53f
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_rflags2.vgtest
@@ -0,0 +1,2 @@
+prog: context_rflags2
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/amd64-solaris/context_sse.c b/memcheck/tests/amd64-solaris/context_sse.c
new file mode 100644
index 0000000..f1e381b
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_sse.c
@@ -0,0 +1,100 @@
+/* Test if SSE valus are correctly propagated into and out of a signal handler
+   and also check that the same applies for uninitialised values and their
+   origins. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+static siginfo_t si;
+static ucontext_t uc;
+/* x0 is always zero, but is visible to Valgrind as uninitialised. */
+static upad128_t x0;
+static upad128_t d0 = {0};
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   si = *sip;
+   uc = *ucp;
+
+   ucp->uc_mcontext.fpregs.fp_reg_set.fpchip_state.xmm[0] = d0;
+   ucp->uc_mcontext.fpregs.fp_reg_set.fpchip_state.xmm[1] = x0;
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   pid_t pid;
+   upad128_t out[8];
+   upad128_t y0;
+   struct fpchip_state *fs = &uc.uc_mcontext.fpregs.fp_reg_set.fpchip_state;
+
+   /* Uninitialised, but we know px[0] is 0x0. */
+   upad128_t *px = malloc(sizeof(*px));
+   x0 = px[0];
+
+   /* Uninitialised, but we know py[0] is 0x0. */
+   upad128_t *py = malloc(sizeof(*py));
+   y0 = py[0];
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   pid = getpid();
+
+   __asm__ __volatile__(
+      /* Set values in the SSE registers. */
+      "movups %[y0], %%xmm0\n"
+      "movups %[d0], %%xmm1\n"
+      "movups %[d0], %%xmm2\n"
+      "movups %[y0], %%xmm3\n"
+      "movups %[y0], %%xmm4\n"
+      "movups %[d0], %%xmm5\n"
+      "movups %[d0], %%xmm6\n"
+      "movups %[y0], %%xmm7\n"
+
+      /* Trigger the signal handler. */
+      "syscall\n"
+      "movups %%xmm0, 0x00 + %[out]\n"
+      "movups %%xmm1, 0x10 + %[out]\n"
+      "movups %%xmm2, 0x20 + %[out]\n"
+      "movups %%xmm3, 0x30 + %[out]\n"
+      "movups %%xmm4, 0x40 + %[out]\n"
+      "movups %%xmm5, 0x50 + %[out]\n"
+      "movups %%xmm6, 0x60 + %[out]\n"
+      "movups %%xmm7, 0x70 + %[out]\n"
+      : [out] "=m" (out[0])
+      : "a" (SYS_kill), "D" (pid), "S" (SIGUSR1), [y0] "m" (y0), [d0] "m" (d0)
+      : "rdx", "cc", "memory");
+
+   printf("Values in the signal handler:\n");
+   printf("  xmm1=%Lf, xmm2=%Lf, xmm5=%Lf, xmm6=%Lf\n",
+          fs->xmm[1]._q, fs->xmm[2]._q, fs->xmm[5]._q, fs->xmm[6]._q);
+   /* Check that fs->xmm[0], fs->xmm[3], fs->xmm[4] and fs->xmm[7] contain
+      uninitialised values (origin is py[0]). */
+   if (fs->xmm[0]._q || fs->xmm[3]._q || fs->xmm[4]._q || fs->xmm[7]._q)
+      assert(0);
+
+   printf("Values after the return from the signal handler:\n");
+   printf("  xmm0=%Lf, xmm2=%Lf, xmm5=%Lf, xmm6=%Lf\n",
+          out[0]._q, out[2]._q, out[5]._q, out[6]._q);
+   /* Check that out[1], out[3], out[4] and out[7] contain uninitialised
+      values (origin is px[0]). */
+   if (out[1]._q || out[3]._q || out[4]._q || out[7]._q)
+      assert(0);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/amd64-solaris/context_sse.stderr.exp b/memcheck/tests/amd64-solaris/context_sse.stderr.exp
new file mode 100644
index 0000000..bee96ca
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_sse.stderr.exp
@@ -0,0 +1,96 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:95)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:37)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:95)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:37)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:95)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:95)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:95)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:95)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:95)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:95)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:41)
+
diff --git a/memcheck/tests/amd64-solaris/context_sse.stdout.exp b/memcheck/tests/amd64-solaris/context_sse.stdout.exp
new file mode 100644
index 0000000..2cefcc8
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_sse.stdout.exp
@@ -0,0 +1,4 @@
+Values in the signal handler:
+  xmm1=0.000000, xmm2=0.000000, xmm5=0.000000, xmm6=0.000000
+Values after the return from the signal handler:
+  xmm0=0.000000, xmm2=0.000000, xmm5=0.000000, xmm6=0.000000
diff --git a/memcheck/tests/amd64-solaris/context_sse.vgtest b/memcheck/tests/amd64-solaris/context_sse.vgtest
new file mode 100644
index 0000000..97d6be1
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/context_sse.vgtest
@@ -0,0 +1,2 @@
+prog: context_sse
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/amd64-solaris/filter_stderr b/memcheck/tests/amd64-solaris/filter_stderr
new file mode 100755
index 0000000..a778e97
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/filter_stderr
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr "$@"
diff --git a/memcheck/tests/amd64-solaris/ldsoexec.c b/memcheck/tests/amd64-solaris/ldsoexec.c
new file mode 100644
index 0000000..9b6bdc2
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/ldsoexec.c
@@ -0,0 +1,3 @@
+int main(void) {
+    return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/amd64-solaris/ldsoexec.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/amd64-solaris/ldsoexec.stderr.exp
diff --git a/memcheck/tests/amd64-solaris/ldsoexec.vgtest b/memcheck/tests/amd64-solaris/ldsoexec.vgtest
new file mode 100644
index 0000000..7f6160c
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/ldsoexec.vgtest
@@ -0,0 +1,2 @@
+prog: /lib/64/ld.so.1 ./ldsoexec
+vgopts: -q
diff --git a/memcheck/tests/amd64/Makefile.am b/memcheck/tests/amd64/Makefile.am
index 0e72521..dc48f41 100644
--- a/memcheck/tests/amd64/Makefile.am
+++ b/memcheck/tests/amd64/Makefile.am
@@ -32,7 +32,8 @@
 		sh-mem-vec256-plo-yes.stdout.exp \
 	sse_memory.stderr.exp sse_memory.stdout.exp sse_memory.vgtest \
 	xor-undef-amd64.stderr.exp xor-undef-amd64.stdout.exp \
-	xor-undef-amd64.vgtest
+	xor-undef-amd64.vgtest \
+	xsave-avx.vgtest xsave-avx.stdout.exp xsave-avx.stderr.exp
 
 check_PROGRAMS = \
 	bt_everything \
@@ -45,7 +46,7 @@
 	sse_memory \
 	xor-undef-amd64
 if BUILD_AVX_TESTS
- check_PROGRAMS += sh-mem-vec256
+ check_PROGRAMS += sh-mem-vec256 xsave-avx
 endif
 if HAVE_ASM_CONSTRAINT_P
  check_PROGRAMS += insn-pcmpistri
@@ -59,6 +60,10 @@
 AM_CXXFLAGS  += @FLAG_M64@
 AM_CCASFLAGS += @FLAG_M64@
 
+insn_pcmpistri_CFLAGS	= $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+insn_pcmpistri_CFLAGS	+= --std=c99
+endif
 more_x87_fp_CFLAGS	= $(AM_CFLAGS) -O -ffast-math -mfpmath=387 \
 				-mfancy-math-387
 more_x87_fp_LDADD	= -lm
diff --git a/memcheck/tests/amd64/bt_everything.c b/memcheck/tests/amd64/bt_everything.c
index a010b04..57624a1 100644
--- a/memcheck/tests/amd64/bt_everything.c
+++ b/memcheck/tests/amd64/bt_everything.c
@@ -13,6 +13,18 @@
 
 typedef signed long int  Word;
 
+unsigned long myrandom(void)
+{
+   /* Simple multiply-with-carry random generator. */
+   static unsigned long m_w = 11;
+   static unsigned long m_z = 13;
+
+   m_z = 36969 * (m_z & 65535) + (m_z >> 16);
+   m_w = 18000 * (m_w & 65535) + (m_w >> 16);
+
+   return (m_z << 16) + m_w;
+}
+
 /* ------------ MEM, Q ------------ */
 
 ULong btsq_mem ( char* base, Word bitno )
@@ -418,8 +430,8 @@
    /* Valid bit offsets are -800 .. 799 inclusive. */
 
    for (n = 0; n < 10000; n++) {
-      bitoff = (random() % 1600) - 800;
-      op = random() % 12;
+      bitoff = (myrandom() % 1600) - 800;
+      op = myrandom() % 12;
       c = 2;
       switch (op) {
          case  0: c = btsl_mem(block, bitoff); break;
@@ -457,8 +469,8 @@
    reg = 0;
 
    for (n = 0; n < 1000; n++) {
-      bitoff = (random() % 100) - 50;
-      op = random() % 12;
+      bitoff = (myrandom() % 100) - 50;
+      op = myrandom() % 12;
       c = 2;
       switch (op) {
          case  0: c = btsl_reg(reg, bitoff, &reg); break;
diff --git a/memcheck/tests/amd64/bt_everything.stdout.exp b/memcheck/tests/amd64/bt_everything.stdout.exp
index f22a0a7..370553f 100644
--- a/memcheck/tests/amd64/bt_everything.stdout.exp
+++ b/memcheck/tests/amd64/bt_everything.stdout.exp
@@ -1,2 +1,2 @@
-MEM-L: final res 0xbb05dc8f69ba36dc, carrydep 0x818f336625f01277
-REG-L: final res 0xa15f293e, carrydep 0x6082b5e5befc6a40
+MEM-L: final res 0xf7fadd6c64517c70, carrydep 0x8176a65abd735847
+REG-L: final res 0x35c459ff, carrydep 0x5d837ee10c6c390
diff --git a/memcheck/tests/amd64/fxsave-amd64.c b/memcheck/tests/amd64/fxsave-amd64.c
index de04037..bd214c1 100644
--- a/memcheck/tests/amd64/fxsave-amd64.c
+++ b/memcheck/tests/amd64/fxsave-amd64.c
@@ -1,4 +1,4 @@
-
+#include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "tests/asm.h"
@@ -17,7 +17,7 @@
 __attribute__((noinline))
 void do_fxsave ( void* p, int rexw ) {
    if (rexw) {
-#if defined(VGO_linux)
+#ifdef HAVE_AS_AMD64_FXSAVE64
       asm __volatile__("fxsave64 (%0)" : : "r" (p) : "memory" );
 #else
       asm __volatile__("rex64/fxsave (%0)" : : "r" (p) : "memory" );
@@ -30,7 +30,7 @@
 __attribute__((noinline))
 void do_fxrstor ( void* p, int rexw ) {
    if (rexw) {
-#if defined(VGO_linux)
+#ifdef HAVE_AS_AMD64_FXSAVE64
       asm __volatile__("fxrstor64 (%0)" : : "r" (p) : "memory" );
 #else
       asm __volatile__("rex64/fxrstor (%0)" : : "r" (p) : "memory" );
diff --git a/memcheck/tests/amd64/xsave-avx.c b/memcheck/tests/amd64/xsave-avx.c
new file mode 100644
index 0000000..9a32389
--- /dev/null
+++ b/memcheck/tests/amd64/xsave-avx.c
@@ -0,0 +1,337 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "tests/asm.h"
+#include "tests/malloc.h"
+#include <string.h>
+
+#define XSAVE_AREA_SIZE 832
+
+typedef  unsigned char           UChar;
+typedef  unsigned int            UInt;
+typedef  unsigned long long int  ULong;
+
+typedef  unsigned long int       UWord;
+
+typedef  unsigned char  Bool;
+#define  True   ((Bool)1)
+#define  False  ((Bool)0)
+
+const unsigned int vec0[8]
+   = { 0x12345678, 0x11223344, 0x55667788, 0x87654321,
+       0x15263748, 0x91929394, 0x19293949, 0x48372615 };
+
+const unsigned int vec1[8]
+   = { 0xABCDEF01, 0xAABBCCDD, 0xEEFF0011, 0x10FEDCBA,
+       0xBADCFE10, 0xFFEE9988, 0x11667722, 0x01EFCDAB };
+
+const unsigned int vecZ[8]
+   = { 0, 0, 0, 0, 0, 0, 0, 0 };
+
+/* A version of memset that doesn't use XMM or YMM registers. */
+static __attribute__((noinline))
+void* my_memset(void* s, int c, size_t n)
+{
+   size_t i;
+   for (i = 0; i < n; i++) {
+      ((unsigned char*)s)[i] = (unsigned char)(unsigned int)c;
+      /* Defeat any attempt at autovectorisation */
+      __asm__ __volatile__("" ::: "cc","memory");
+   }
+   return s;
+}
+
+/* Ditto for memcpy */
+static __attribute__((noinline))
+void* my_memcpy(void *dest, const void *src, size_t n)
+{
+   size_t i;
+   for (i = 0; i < n; i++) {
+      ((unsigned char*)dest)[i] = ((unsigned char*)src)[i];
+      __asm__ __volatile__("" ::: "cc","memory");
+   }
+   return dest;
+}
+
+static void* memalign_zeroed64(size_t size)
+{
+   char* p = memalign64(size);
+   if (p && size > 0) {
+      my_memset(p, 0, size);
+   }
+   return p;
+}
+
+__attribute__((noinline))
+static void do_xsave ( void* p, UInt rfbm )
+{
+   assert(rfbm <= 7);
+   __asm__ __volatile__(
+      "movq %0, %%rax;  xorq %%rdx, %%rdx;  xsave (%1)"
+         : /*OUT*/ : /*IN*/ "r"((ULong)rfbm), "r"(p)
+         : /*TRASH*/ "memory", "rax", "rdx"
+   );
+}
+
+__attribute__((noinline))
+static void do_xrstor ( void* p, UInt rfbm )
+{
+   assert(rfbm <= 7);
+   __asm__ __volatile__(
+      "movq %0, %%rax;  xorq %%rdx, %%rdx;  xrstor (%1)"
+         : /*OUT*/ : /*IN*/ "r"((ULong)rfbm), "r"(p)
+         : /*TRASH*/ "rax", "rdx" /* FIXME plus all X87,SSE,AVX regs */
+   );
+}
+
+/* set up the FP, SSE and AVX state, and then dump it. */
+static void do_setup_then_xsave ( void* p, UInt rfbm )
+{
+   __asm__ __volatile__("finit");
+   __asm__ __volatile__("fldpi");
+   __asm__ __volatile__("fld1");
+   __asm__ __volatile__("fldln2");
+   __asm__ __volatile__("fldlg2");
+   __asm__ __volatile__("fld %st(3)");
+   __asm__ __volatile__("fld %st(3)");
+   __asm__ __volatile__("fld1");
+   __asm__ __volatile__("vmovups (%0), %%ymm0" : : "r"(&vec0[0]) : "xmm0" );
+   __asm__ __volatile__("vmovups (%0), %%ymm1" : : "r"(&vec1[0]) : "xmm1" );
+   __asm__ __volatile__("vxorps  %ymm2, %ymm2, %ymm2");
+   __asm__ __volatile__("vmovaps %ymm0, %ymm3");
+   __asm__ __volatile__("vmovaps %ymm1, %ymm4");
+   __asm__ __volatile__("vmovaps %ymm2, %ymm5");
+   __asm__ __volatile__("vmovaps %ymm0, %ymm6");
+   __asm__ __volatile__("vmovaps %ymm1, %ymm7");
+   __asm__ __volatile__("vmovaps %ymm1, %ymm8");
+   __asm__ __volatile__("vmovaps %ymm2, %ymm9");
+   __asm__ __volatile__("vmovaps %ymm0, %ymm10");
+   __asm__ __volatile__("vmovaps %ymm1, %ymm11");
+   __asm__ __volatile__("vmovaps %ymm1, %ymm12");
+   __asm__ __volatile__("vmovaps %ymm2, %ymm13");
+   __asm__ __volatile__("vmovaps %ymm0, %ymm14");
+   __asm__ __volatile__("vmovaps %ymm1, %ymm15");
+   do_xsave(p, rfbm);
+}
+
+static int isFPLsbs ( int i )
+{
+   int q;
+   q = 32; if (i == q || i == q+1) return 1;
+   q = 48; if (i == q || i == q+1) return 1;
+   q = 64; if (i == q || i == q+1) return 1;
+   q = 80; if (i == q || i == q+1) return 1;
+   q = 96; if (i == q || i == q+1) return 1;
+   q = 112; if (i == q || i == q+1) return 1;
+   q = 128; if (i == q || i == q+1) return 1;
+   q = 144; if (i == q || i == q+1) return 1;
+   return 0;
+}
+
+static void show ( unsigned char* buf, Bool hideBits64to79 )
+{
+   int i;
+   for (i = 0; i < XSAVE_AREA_SIZE; i++) {
+      if ((i % 16) == 0)
+         fprintf(stderr, "%3d   ", i);
+      if (hideBits64to79 && isFPLsbs(i))
+	 fprintf(stderr, "xx ");
+      else
+         fprintf(stderr, "%02x ", buf[i]);
+      if (i > 0 && ((i % 16) == 15))
+         fprintf(stderr, "\n");
+   }
+}
+
+static void cpuid ( UInt* eax, UInt* ebx, UInt* ecx, UInt* edx, 
+                    UInt index, UInt ecx_in )
+{
+   UInt a,b,c,d;
+   asm volatile ("cpuid"
+                 : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
+                 : "0" (index), "2"(ecx_in) );
+   *eax = a; *ebx = b; *ecx = c; *edx = d;
+   //fprintf(stderr, "%08x %08x -> %08x %08x %08x %08x\n",
+   //        index,ecx_in, a,b,c,d );
+}
+
+static void xgetbv ( UInt* eax, UInt* edx, UInt ecx_in )
+{
+   UInt a,d;
+   asm volatile ("xgetbv"
+                 : "=a" (a), "=d" (d) \
+                 : "c"(ecx_in) );
+   *eax = a; *edx = d;
+}
+
+static void check_for_xsave ( void )
+{
+   UInt eax, ebx, ecx, edx;
+   Bool ok = True;
+
+   eax = ebx = ecx = edx = 0;
+   cpuid(&eax, &ebx, &ecx, &edx, 1,0);
+   //fprintf(stderr, "cpuid(1).ecx[26=xsave]   = %u\n", (ecx >> 26) & 1);
+   ok = ok && (((ecx >> 26) & 1) == 1);
+
+   eax = ebx = ecx = edx = 0;
+   cpuid(&eax, &ebx, &ecx, &edx, 1,0);
+   //fprintf(stderr, "cpuid(1).ecx[27=osxsave] = %u\n", (ecx >> 27) & 1);
+   ok = ok && (((ecx >> 27) & 1) == 1);
+
+   eax = ebx = ecx = edx = 0;
+   xgetbv(&eax, &edx, 0);
+   //fprintf(stderr, "xgetbv(0) = %u:%u\n", edx, eax);
+   ok = ok && (edx == 0) && (eax == 7);
+
+   if (ok) return;
+
+   fprintf(stderr,
+           "This program must be run on a CPU that supports AVX and XSAVE.\n");
+   exit(1);
+}
+
+
+void test_xsave ( Bool hideBits64to79 )
+{
+   /* Testing XSAVE:
+
+      For RBFM in 0 .. 7 (that is, all combinations): set the x87, SSE
+      and AVX registers with some values, do XSAVE to dump it, and
+      print the resulting buffer. */
+
+   UInt rfbm;
+   for (rfbm = 0; rfbm <= 7; rfbm++) {
+      UChar* saved_img = memalign_zeroed64(XSAVE_AREA_SIZE);
+
+      my_memset(saved_img, 0xAA, XSAVE_AREA_SIZE);
+      saved_img[512] = 0;
+      do_setup_then_xsave(saved_img, rfbm);
+
+      fprintf(stderr, 
+              "------------------ XSAVE, rfbm = %u ------------------\n", rfbm);
+      show(saved_img, hideBits64to79);
+      fprintf(stderr, "\n");
+
+      free(saved_img);
+   }
+}
+
+
+void test_xrstor ( Bool hideBits64to79 )
+{
+   /* Testing XRSTOR is more complex than testing XSAVE, because the
+      loaded value(s) depend not only on what bits are requested (by
+      RBFM) but also on what bits are actually present in the image
+      (defined by XSTATE_BV).  So we have to test all 64 (8 x 8)
+      combinations.
+
+      The approach is to fill a memory buffer with data, do XRSTOR
+      from the buffer, them dump all components with XSAVE in a new
+      buffer, and print the result.  This is complicated by the fact
+      that we need to be able to see which parts of the state (in
+      registers) are neither overwritten nor zeroed by the restore.
+      Hence the registers must be pre-filled with values which are
+      neither zero nor the data to be loaded.  We choose to use 0x55
+      where possible. */
+
+   UChar* fives = memalign_zeroed64(XSAVE_AREA_SIZE);
+   my_memset(fives, 0x55, XSAVE_AREA_SIZE);
+   /* Set MXCSR so that the insn doesn't fault */
+   fives[24] = 0x80;
+   fives[25] = 0x1f;
+   fives[26] = 0;
+   fives[27] = 0;
+   /* Ditto for the XSAVE header area.  Also set XSTATE_BV. */
+   fives[512] = 7;
+   UInt i;
+   for (i = 1; i <= 23; i++) fives[512+i] = 0;
+   /* Fill the x87 register values with something that VEX's
+      80-vs-64-bit kludging won't mess up -- an 80 bit number which is
+      representable also as 64 bit: 123456789.0123 */
+   for (i = 0; i <= 7; i++) {
+      UChar* p = &fives[32 + 16 * i];
+      p[0]=0x00; p[1]=0xf8; p[2]=0xc2; p[3]=0x64; p[4]=0xa0;
+      p[5]=0xa2; p[6]=0x79; p[7]=0xeb; p[8]=0x19; p[9]=0x40;
+   }
+   /* And mark the tags for all 8 dumped regs as "valid". */
+   fives[4/*FTW*/] = 0xFF;
+
+   /* (1) (see comment in loop below) */
+   UChar* standard_test_data = memalign_zeroed64(XSAVE_AREA_SIZE);
+   do_setup_then_xsave(standard_test_data, 7);
+
+   UInt xstate_bv, rfbm;
+   for (xstate_bv = 0; xstate_bv <= 7; xstate_bv++) {
+      for (rfbm = 0; rfbm <= 7; rfbm++) {
+   //{ xstate_bv = 7;
+   //      { rfbm = 6;
+         /* 1.  Copy the "standard test data" into registers, and dump
+                it with XSAVE.  This gives us an image we can try
+                restoring from.
+
+            2.  Set the register state to all-0x55s (as far as is
+                possible), so we can see which parts get overwritten
+                and which parts get zeroed on the test restore.
+
+            3.  Do the restore from the image prepared in (1).
+
+            4.  Dump the state with XSAVE and print it.
+         */
+
+         /* (3a).  We can't use |standard_test_data| directly, since we
+            need to put in the required |xstate_bv| value.  So make a
+            copy and modify that instead. */
+         UChar* img_to_restore_from = memalign_zeroed64(XSAVE_AREA_SIZE);
+         my_memcpy(img_to_restore_from, standard_test_data, XSAVE_AREA_SIZE);
+         img_to_restore_from[512] = xstate_bv;
+
+         /* (4a) */
+         UChar* saved_img = memalign_zeroed64(XSAVE_AREA_SIZE);
+         my_memset(saved_img, 0xAA, XSAVE_AREA_SIZE);
+         saved_img[512] = 0;
+
+         /* (2) */
+         do_xrstor(fives, 7);
+
+         // X87, SSE, AVX state LIVE
+
+         /* (3b) */
+         /* and this is what we're actually trying to test */
+         do_xrstor(img_to_restore_from, rfbm);
+
+         // X87, SSE, AVX state LIVE
+
+         /* (4b) */
+         do_xsave(saved_img, 7);
+
+         fprintf(stderr, 
+                 "---------- XRSTOR, xstate_bv = %u, rfbm = %u ---------\n",
+                xstate_bv, rfbm);
+         show(saved_img, hideBits64to79);
+         fprintf(stderr, "\n");
+
+         free(saved_img);
+         free(img_to_restore_from);
+      }
+   }
+}
+
+
+int main ( int argc, char** argv )
+{
+   Bool hideBits64to79 = argc > 1;
+   fprintf(stderr, "Re-run with any arg to suppress least-significant\n"
+                   "   16 bits of 80-bit FP numbers\n");
+
+   check_for_xsave();
+
+   if (1)
+   test_xsave(hideBits64to79);
+
+   if (1)
+   test_xrstor(hideBits64to79);
+
+   return 0;
+}
diff --git a/memcheck/tests/amd64/xsave-avx.stderr.exp b/memcheck/tests/amd64/xsave-avx.stderr.exp
new file mode 100644
index 0000000..4d15d11
--- /dev/null
+++ b/memcheck/tests/amd64/xsave-avx.stderr.exp
@@ -0,0 +1,3890 @@
+Re-run with any arg to suppress least-significant
+   16 bits of 80-bit FP numbers
+------------------ XSAVE, rfbm = 0 ------------------
+  0   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 16   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 32   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 48   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 64   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 80   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 96   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+112   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+128   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+144   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+160   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+176   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+192   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+208   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+224   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+240   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+256   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+272   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+288   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+304   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+320   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+336   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+352   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+368   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+384   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+400   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   00 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+592   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+608   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+624   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+640   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+656   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+672   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+688   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+704   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+720   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+736   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+752   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+768   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+784   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+800   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+816   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+
+------------------ XSAVE, rfbm = 1 ------------------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 aa aa aa aa aa aa aa aa 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+176   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+192   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+208   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+224   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+240   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+256   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+272   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+288   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+304   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+320   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+336   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+352   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+368   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+384   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+400   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   01 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+592   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+608   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+624   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+640   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+656   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+672   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+688   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+704   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+720   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+736   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+752   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+768   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+784   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+800   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+816   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+
+------------------ XSAVE, rfbm = 2 ------------------
+  0   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 16   aa aa aa aa aa aa aa aa 80 1f 00 00 ff ff 00 00 
+ 32   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 48   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 64   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 80   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 96   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+112   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+128   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+144   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   02 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+592   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+608   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+624   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+640   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+656   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+672   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+688   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+704   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+720   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+736   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+752   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+768   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+784   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+800   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+816   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+
+------------------ XSAVE, rfbm = 3 ------------------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   03 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+592   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+608   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+624   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+640   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+656   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+672   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+688   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+704   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+720   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+736   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+752   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+768   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+784   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+800   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+816   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+
+------------------ XSAVE, rfbm = 4 ------------------
+  0   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 16   aa aa aa aa aa aa aa aa 80 1f 00 00 ff ff 00 00 
+ 32   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 48   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 64   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 80   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 96   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+112   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+128   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+144   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+160   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+176   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+192   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+208   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+224   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+240   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+256   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+272   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+288   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+304   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+320   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+336   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+352   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+368   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+384   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+400   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   04 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+------------------ XSAVE, rfbm = 5 ------------------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+176   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+192   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+208   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+224   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+240   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+256   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+272   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+288   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+304   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+320   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+336   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+352   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+368   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+384   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+400   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   05 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+------------------ XSAVE, rfbm = 6 ------------------
+  0   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 16   aa aa aa aa aa aa aa aa 80 1f 00 00 ff ff 00 00 
+ 32   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 48   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 64   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 80   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+ 96   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+112   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+128   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+144   xx xx aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   06 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+------------------ XSAVE, rfbm = 7 ------------------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 0, rfbm = 0 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 0, rfbm = 1 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 0, rfbm = 2 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 0, rfbm = 3 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 0, rfbm = 4 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 0, rfbm = 5 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 0, rfbm = 6 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 0, rfbm = 7 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 1, rfbm = 0 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 1, rfbm = 1 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 1, rfbm = 2 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 1, rfbm = 3 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 1, rfbm = 4 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 1, rfbm = 5 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 1, rfbm = 6 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 1, rfbm = 7 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 2, rfbm = 0 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 2, rfbm = 1 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 2, rfbm = 2 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 2, rfbm = 3 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 2, rfbm = 4 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 2, rfbm = 5 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 2, rfbm = 6 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 2, rfbm = 7 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 3, rfbm = 0 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 3, rfbm = 1 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 3, rfbm = 2 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 3, rfbm = 3 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 3, rfbm = 4 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 3, rfbm = 5 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 3, rfbm = 6 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 3, rfbm = 7 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+592   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+640   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+688   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+704   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+752   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+768   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+816   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+
+---------- XRSTOR, xstate_bv = 4, rfbm = 0 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 4, rfbm = 1 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 4, rfbm = 2 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 4, rfbm = 3 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 4, rfbm = 4 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 4, rfbm = 5 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 4, rfbm = 6 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 4, rfbm = 7 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 5, rfbm = 0 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 5, rfbm = 1 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 5, rfbm = 2 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 5, rfbm = 3 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 5, rfbm = 4 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 5, rfbm = 5 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 5, rfbm = 6 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 5, rfbm = 7 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+176   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+224   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+272   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+288   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+336   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+352   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+400   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 6, rfbm = 0 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 6, rfbm = 1 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 6, rfbm = 2 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 6, rfbm = 3 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 6, rfbm = 4 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 6, rfbm = 5 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 6, rfbm = 6 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 6, rfbm = 7 ---------
+  0   7f 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 64   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 80   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+ 96   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+128   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 7, rfbm = 0 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 7, rfbm = 1 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 7, rfbm = 2 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 7, rfbm = 3 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+592   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+608   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+624   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+640   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+656   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+672   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+688   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+704   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+720   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+736   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+752   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+768   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+784   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+800   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+816   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+
+---------- XRSTOR, xstate_bv = 7, rfbm = 4 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 7, rfbm = 5 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+176   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+192   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+208   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+224   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+240   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+256   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+272   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+288   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+304   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+320   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+336   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+352   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+368   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+384   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+400   55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 7, rfbm = 6 ---------
+  0   7f 07 00 55 ff 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 48   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 64   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 80   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+ 96   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+112   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+128   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+144   xx xx c2 64 a0 a2 79 eb 19 40 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
+---------- XRSTOR, xstate_bv = 7, rfbm = 7 ---------
+  0   7f 03 00 08 fe 00 00 00 00 00 00 00 00 00 00 00 
+ 16   00 00 00 00 00 00 00 00 80 1f 00 00 ff ff 00 00 
+ 32   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 48   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+ 64   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+ 80   xx xx cf fb 84 9a 20 9a fd 3f 00 00 00 00 00 00 
+ 96   xx xx cf d1 f7 17 72 b1 fe 3f 00 00 00 00 00 00 
+112   xx xx 00 00 00 00 00 80 ff 3f 00 00 00 00 00 00 
+128   xx xx 68 21 a2 da 0f c9 00 40 00 00 00 00 00 00 
+144   xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+160   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+176   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+192   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+208   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+224   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+256   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+272   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+288   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+304   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+320   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+336   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+352   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+368   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+384   78 56 34 12 44 33 22 11 88 77 66 55 21 43 65 87 
+400   01 ef cd ab dd cc bb aa 11 00 ff ee ba dc fe 10 
+416   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+432   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+448   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+464   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+480   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+496   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+512   07 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+528   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+544   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+560   aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 
+576   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+592   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+608   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+624   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+640   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+656   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+672   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+688   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+704   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+720   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+736   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+752   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+768   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+784   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+800   48 37 26 15 94 93 92 91 49 39 29 19 15 26 37 48 
+816   10 fe dc ba 88 99 ee ff 22 77 66 11 ab cd ef 01 
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/amd64/xsave-avx.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/amd64/xsave-avx.stdout.exp
diff --git a/memcheck/tests/amd64/xsave-avx.vgtest b/memcheck/tests/amd64/xsave-avx.vgtest
new file mode 100644
index 0000000..0b2793a
--- /dev/null
+++ b/memcheck/tests/amd64/xsave-avx.vgtest
@@ -0,0 +1,4 @@
+prog: xsave-avx
+prereq: test -x xsave-avx && ../../../tests/x86_amd64_features amd64-avx
+vgopts: -q
+args: x
diff --git a/memcheck/tests/badjump2.c b/memcheck/tests/badjump2.c
index 7e09af5..2085a30 100644
--- a/memcheck/tests/badjump2.c
+++ b/memcheck/tests/badjump2.c
@@ -24,7 +24,7 @@
    /* Install own SIGSEGV handler */
    sigsegv_new.sa_handler  = SIGSEGV_handler;
    sigsegv_new.sa_flags    = 0;
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__sun)
    sigsegv_new.sa_restorer = NULL;
 #endif
    res = sigemptyset( &sigsegv_new.sa_mask );
diff --git a/memcheck/tests/big_blocks_freed_list.stderr.exp b/memcheck/tests/big_blocks_freed_list.stderr.exp
index 3c4c728..d0fd803 100644
--- a/memcheck/tests/big_blocks_freed_list.stderr.exp
+++ b/memcheck/tests/big_blocks_freed_list.stderr.exp
@@ -4,12 +4,18 @@
  Address 0x........ is 1,000 bytes inside a block of size 1,000,015 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (big_blocks_freed_list.c:21)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (big_blocks_freed_list.c:19)
 
 Invalid read of size 1
    at 0x........: main (big_blocks_freed_list.c:23)
  Address 0x........ is 1,000 bytes inside a block of size 900,000 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (big_blocks_freed_list.c:20)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (big_blocks_freed_list.c:18)
 
 Invalid read of size 1
    at 0x........: main (big_blocks_freed_list.c:33)
@@ -20,24 +26,36 @@
  Address 0x........ is 2,000 bytes inside a block of size 900,000 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (big_blocks_freed_list.c:20)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (big_blocks_freed_list.c:18)
 
 Invalid read of size 1
    at 0x........: main (big_blocks_freed_list.c:41)
  Address 0x........ is 10 bytes inside a block of size 10,000 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (big_blocks_freed_list.c:28)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (big_blocks_freed_list.c:27)
 
 Invalid read of size 1
    at 0x........: main (big_blocks_freed_list.c:46)
  Address 0x........ is 10 bytes inside a block of size 1,000,015 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (big_blocks_freed_list.c:40)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (big_blocks_freed_list.c:39)
 
 Invalid read of size 1
    at 0x........: main (big_blocks_freed_list.c:55)
  Address 0x........ is 10 bytes inside a block of size 10,000 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (big_blocks_freed_list.c:28)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (big_blocks_freed_list.c:27)
 
 
 HEAP SUMMARY:
diff --git a/memcheck/tests/bug340392.c b/memcheck/tests/bug340392.c
new file mode 100644
index 0000000..c95bdf9
--- /dev/null
+++ b/memcheck/tests/bug340392.c
@@ -0,0 +1,26 @@
+#include <stdlib.h>
+
+typedef struct {
+  unsigned char c;
+  int i;
+  void *foo;
+} S;
+
+S *make_s (void);
+
+int
+main (int argc, char **argv)
+{
+  S *s = make_s ();
+  if (s->c == 0 && s->i == 1 && s->foo == getenv ("BLAH"))
+    abort();
+  return 0;
+}
+
+S *
+make_s (void)
+{
+  S *res = malloc (sizeof (S));
+  res->c = 1;
+  return res;
+}
diff --git a/none/tests/scripts/shell_nointerp2.stderr.exp b/memcheck/tests/bug340392.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp2.stderr.exp
copy to memcheck/tests/bug340392.stderr.exp
diff --git a/memcheck/tests/bug340392.vgtest b/memcheck/tests/bug340392.vgtest
new file mode 100644
index 0000000..0ae8eab
--- /dev/null
+++ b/memcheck/tests/bug340392.vgtest
@@ -0,0 +1,10 @@
+# When run without --expensive-definedness-checks valgrind
+# produces:
+#
+# ==10953== Conditional jump or move depends on uninitialised value(s)
+# ==10953==    at 0x4004F8: main (bug340392.c:15)
+#
+# Making sure we don't get the message.
+#
+prog: bug340392
+vgopts: -q --expensive-definedness-checks=yes
diff --git a/memcheck/tests/clo_redzone.c b/memcheck/tests/clo_redzone.c
index 5733ffa..78bd119 100644
--- a/memcheck/tests/clo_redzone.c
+++ b/memcheck/tests/clo_redzone.c
@@ -1,3 +1,4 @@
+#include <inttypes.h>
 #include <stdio.h>
 #include <stdlib.h>
 int main()
@@ -5,7 +6,8 @@
    __attribute__((unused)) char *p = malloc (1);
    char *b1 = malloc (128);
    char *b2 = malloc (128);
-   fprintf (stderr, "b1 %p b2 %p\n", b1, b2);
+   fprintf (stderr, "b1 %#" PRIxPTR " b2 %#" PRIxPTR "\n",
+                    (uintptr_t)b1, (uintptr_t)b2);
 
    // Try to land in b2 from b1, causing no error
    // with the default redzone-size, but having
diff --git a/memcheck/tests/cond_ld.vgtest b/memcheck/tests/cond_ld.vgtest
index acc0bfe..5c83e26 100644
--- a/memcheck/tests/cond_ld.vgtest
+++ b/memcheck/tests/cond_ld.vgtest
@@ -1,4 +1,4 @@
 prog: cond_ld_st
 args: loads
-vgopts: -q
+vgopts: -q --keep-stacktraces=alloc-then-free
 stderr_filter_args: cond_ld_st
diff --git a/memcheck/tests/cond_st.vgtest b/memcheck/tests/cond_st.vgtest
index 2ccf00c..fbb8181 100644
--- a/memcheck/tests/cond_st.vgtest
+++ b/memcheck/tests/cond_st.vgtest
@@ -1,4 +1,4 @@
 prog: cond_ld_st
 args: stores
-vgopts: -q
+vgopts: -q --keep-stacktraces=alloc-then-free
 stderr_filter_args: cond_ld_st
diff --git a/memcheck/tests/custom_alloc.vgtest b/memcheck/tests/custom_alloc.vgtest
index 9c7fa41..0472756 100644
--- a/memcheck/tests/custom_alloc.vgtest
+++ b/memcheck/tests/custom_alloc.vgtest
@@ -1,2 +1,2 @@
 prog: custom_alloc
-vgopts: -q
+vgopts: -q --keep-stacktraces=alloc-then-free
diff --git a/memcheck/tests/darwin/aio.c b/memcheck/tests/darwin/aio.c
index 87e7214..8e28292 100644
--- a/memcheck/tests/darwin/aio.c
+++ b/memcheck/tests/darwin/aio.c
@@ -14,6 +14,7 @@
    struct aiocb a;
    struct sigevent s;
 
+   memset(&a, 0, sizeof(struct aiocb));
    // Not sure if the sigevent is even looked at by aio_*... just zero it.
    memset(&s, 0, sizeof(struct sigevent));
 
diff --git a/memcheck/tests/darwin/aio.stderr.exp b/memcheck/tests/darwin/aio.stderr.exp
index fd7bbf9..71222a9 100644
--- a/memcheck/tests/darwin/aio.stderr.exp
+++ b/memcheck/tests/darwin/aio.stderr.exp
@@ -1,14 +1,16 @@
 
 Warning: invalid file descriptor -1 in syscall aio_read()
 Syscall param aio_read(aiocbp->aio_buf) points to unaddressable byte(s)
-   ...
+   at 0x........: aio_read (in /...libc...)
+   by 0x........: main (aio.c:45)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Conditional jump or move depends on uninitialised value(s)
-   at 0x........: main (aio.c:55)
+   at 0x........: main (aio.c:56)
 
 Syscall param aio_write(aiocbp->aio_buf) points to unaddressable byte(s)
-   ...
+   at 0x........: aio_write (in /...libc...)
+   by 0x........: main (aio.c:70)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 
diff --git a/memcheck/tests/darwin/scalar.c b/memcheck/tests/darwin/scalar.c
index 5b8a3fb..af4def4 100644
--- a/memcheck/tests/darwin/scalar.c
+++ b/memcheck/tests/darwin/scalar.c
@@ -589,7 +589,9 @@
    GO(__NR___pthread_kill, 328, "2s 0m");
    SY(__NR___pthread_kill, x0, x0); FAIL;
 
-   // __NR___pthread_sigmask 329
+   GO(__NR___pthread_sigmask, 329, "3s 0m");
+   SY(__NR___pthread_sigmask, x0, x0, x0); SUCC;
+
    // __NR___sigwait 330
    // __NR_sigwait 330) // GrP fixme hack
    // __NR___disable_threadsignal 331
diff --git a/memcheck/tests/darwin/scalar.stderr.exp b/memcheck/tests/darwin/scalar.stderr.exp
index 6278d25..56fd999 100644
--- a/memcheck/tests/darwin/scalar.stderr.exp
+++ b/memcheck/tests/darwin/scalar.stderr.exp
@@ -9,18 +9,23 @@
 -----------------------------------------------------
 Syscall param (syscallno) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:31)
 
 Syscall param read(fd) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:31)
 
 Syscall param read(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:31)
 
 Syscall param read(count) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:31)
 
 Syscall param read(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:31)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -28,15 +33,19 @@
 -----------------------------------------------------
 Syscall param write(fd) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:34)
 
 Syscall param write(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:34)
 
 Syscall param write(count) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:34)
 
 Syscall param write(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:34)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -44,12 +53,15 @@
 -----------------------------------------------------
 Syscall param open(filename) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:38)
 
 Syscall param open(flags) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:38)
 
 Syscall param open(filename) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:38)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -69,22 +81,28 @@
 -----------------------------------------------------
 Syscall param wait4(pid) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:49)
 
 Syscall param wait4(status) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:49)
 
 Syscall param wait4(options) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:49)
 
 Syscall param wait4(rusage) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:49)
 
 Syscall param wait4(status) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:49)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param wait4(rusage) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:49)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -95,16 +113,20 @@
 -----------------------------------------------------
 Syscall param link(oldpath) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:54)
 
 Syscall param link(newpath) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:54)
 
 Syscall param link(oldpath) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:54)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param link(newpath) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:54)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -112,9 +134,11 @@
 -----------------------------------------------------
 Syscall param unlink(pathname) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:57)
 
 Syscall param unlink(pathname) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:57)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -125,9 +149,11 @@
 -----------------------------------------------------
 Syscall param chdir(path) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:62)
 
 Syscall param chdir(path) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:62)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -141,15 +167,19 @@
 -----------------------------------------------------
 Syscall param mknod(pathname) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:68)
 
 Syscall param mknod(mode) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:68)
 
 Syscall param mknod(dev) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:68)
 
 Syscall param mknod(pathname) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:68)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -157,12 +187,15 @@
 -----------------------------------------------------
 Syscall param chmod(path) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:71)
 
 Syscall param chmod(mode) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:71)
 
 Syscall param chmod(path) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:71)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -170,15 +203,19 @@
 -----------------------------------------------------
 Syscall param chown(path) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:74)
 
 Syscall param chown(owner) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:74)
 
 Syscall param chown(group) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:74)
 
 Syscall param chown(path) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:74)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -189,15 +226,19 @@
 -----------------------------------------------------
 Syscall param getfsstat(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:79)
 
 Syscall param getfsstat(bufsize) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:79)
 
 Syscall param getfsstat(flags) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:79)
 
 Syscall param getfsstat(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:79)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -256,15 +297,19 @@
 -----------------------------------------------------
 Syscall param mincore(start) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:165)
 
 Syscall param mincore(length) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:165)
 
 Syscall param mincore(vec) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:165)
 
 Syscall param mincore(vec) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:165)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -272,9 +317,11 @@
 -----------------------------------------------------
 Syscall param setpgid(pid) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:172)
 
 Syscall param setpgid(pgid) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:172)
 
 -----------------------------------------------------
 (78):            old wait
@@ -308,21 +355,27 @@
 -----------------------------------------------------
 Syscall param setsockopt(s) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:213)
 
 Syscall param setsockopt(level) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:213)
 
 Syscall param setsockopt(optname) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:213)
 
 Syscall param setsockopt(optval) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:213)
 
 Syscall param setsockopt(optlen) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:213)
 
 Syscall param socketcall.setsockopt(optval) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:213)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -357,22 +410,28 @@
 -----------------------------------------------------
 Syscall param getsockopt(s) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:242)
 
 Syscall param getsockopt(level) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:242)
 
 Syscall param getsockopt(optname) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:242)
 
 Syscall param getsockopt(optval) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:242)
 
 Syscall param getsockopt(optlen) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:242)
 
 Syscall param socketcall.getsockopt(optlen) points to unaddressable byte(s)
    ...
- Address 0x........ is 0 bytes after a block of size 4 alloc'd
+   by 0x........: main (scalar.c:242)
+ Address 0x........ is 0 bytes after a block of size 8 alloc'd
    at 0x........: malloc (vg_replace_malloc.c:...)
    by 0x........: main (scalar.c:14)
 
@@ -393,11 +452,11 @@
 -----------------------------------------------------
 Syscall param mkfifo(mode) contains uninitialised byte(s)
    ...
-   by 0x........: main (in ./scalar)
+   by 0x........: main (scalar.c:265)
 
 Syscall param mkfifo(path) points to unaddressable byte(s)
    ...
-   by 0x........: main (in ./scalar)
+   by 0x........: main (scalar.c:265)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -445,22 +504,28 @@
 -----------------------------------------------------
 Syscall param mount(type) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:323)
 
 Syscall param mount(dir) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:323)
 
 Syscall param mount(flags) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:323)
 
 Syscall param mount(data) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:323)
 
 Syscall param mount(type) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:323)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param mount(dir) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:323)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -471,18 +536,23 @@
 -----------------------------------------------------
 Syscall param csops(pid) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:328)
 
 Syscall param csops(ops) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:328)
 
 Syscall param csops(useraddr) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:328)
 
 Syscall param csops(usersize) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:328)
 
 Syscall param csops(useraddr) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:328)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -517,19 +587,24 @@
 -----------------------------------------------------
 Syscall param exchangedata(path1) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:398)
 
 Syscall param exchangedata(path2) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:398)
 
 Syscall param exchangedata(options) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:398)
 
 Syscall param exchangedata(path1) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:398)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param exchangedata(path2) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:398)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -549,27 +624,34 @@
 -----------------------------------------------------
 Syscall param shmat(shmid) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:447)
 
 Syscall param shmat(shmaddr) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:447)
 
 Syscall param shmat(shmflg) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:447)
 
 -----------------------------------------------------
 x2000107(263):         __NR_shmctl 3s 1m
 -----------------------------------------------------
 Syscall param shmctl(shmid) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:450)
 
 Syscall param shmctl(cmd) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:450)
 
 Syscall param shmctl(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:450)
 
 Syscall param shmctl(IPC_STAT, buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:450)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -583,24 +665,30 @@
 -----------------------------------------------------
 Syscall param shmget(key) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:456)
 
 Syscall param shmget(size) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:456)
 
 Syscall param shmget(shmflg) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:456)
 
 -----------------------------------------------------
 x200010c(268):       __NR_sem_open 2s 1m
 -----------------------------------------------------
 Syscall param sem_open(name) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:462)
 
 Syscall param sem_open(oflag) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:462)
 
 Syscall param sem_open(name) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:462)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -623,9 +711,11 @@
 -----------------------------------------------------
 Syscall param sem_unlink(name) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:472)
 
 Syscall param sem_unlink(name) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:472)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -649,20 +739,21 @@
 -----------------------------------------------------
 x2000113(275):       __NR_sem_init 3s 1m
 -----------------------------------------------------
-
-More than 100 errors detected.  Subsequent errors
-will still be recorded, but in less detail than before.
 Syscall param sem_init(sem) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:486)
 
 Syscall param sem_init(pshared) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:486)
 
 Syscall param sem_init(value) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:486)
 
 Syscall param sem_init(sem) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:486)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -670,9 +761,11 @@
 -----------------------------------------------------
 Syscall param sem_destroy(sem) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:489)
 
 Syscall param sem_destroy(sem) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:489)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -680,30 +773,48 @@
 -----------------------------------------------------
 Syscall param stat_extended(file_name) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:497)
 
 Syscall param stat_extended(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:497)
 
 Syscall param stat_extended(fsacl) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:497)
 
 Syscall param stat_extended(fsacl_size) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:497)
 
 Syscall param stat_extended(file_name) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:497)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param stat_extended(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:497)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param stat_extended(fsacl_size) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:497)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat_extended(file_name) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c:500)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat_extended(buf) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c:500)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param stat_extended(fsacl) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:500)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -711,30 +822,48 @@
 -----------------------------------------------------
 Syscall param lstat_extended(file_name) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:503)
 
 Syscall param lstat_extended(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:503)
 
 Syscall param lstat_extended(fsacl) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:503)
 
 Syscall param lstat_extended(fsacl_size) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:503)
 
 Syscall param lstat_extended(file_name) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:503)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param lstat_extended(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:503)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param lstat_extended(fsacl_size) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:503)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat_extended(file_name) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c:506)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat_extended(buf) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c:506)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param lstat_extended(fsacl) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:506)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -742,26 +871,48 @@
 -----------------------------------------------------
 Syscall param fstat_extended(fd) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:509)
 
 Syscall param fstat_extended(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:509)
 
 Syscall param fstat_extended(fsacl) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:509)
 
 Syscall param fstat_extended(fsacl_size) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:509)
+
+Syscall param fstat_extended(fd) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c:509)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param fstat_extended(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:509)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param fstat_extended(fsacl_size) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:509)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fstat_extended(fd) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c:512)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fstat_extended(buf) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c:512)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param fstat_extended(fsacl) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:512)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -769,18 +920,23 @@
 -----------------------------------------------------
 Syscall param access_extended(entries) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:521)
 
 Syscall param access_extended(size) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:521)
 
 Syscall param access_extended(results) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:521)
 
 Syscall param access_extended(uid) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:521)
 
 Syscall param access_extended(entries) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:521)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -809,15 +965,19 @@
 -----------------------------------------------------
 Syscall param aio_suspend(aiocbp) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:563)
 
 Syscall param aio_suspend(nent) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:563)
 
 Syscall param aio_suspend(timeout) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:563)
 
 Syscall param aio_suspend(list) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:563)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -831,9 +991,11 @@
 -----------------------------------------------------
 Syscall param aio_read(aiocbp) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:571)
 
 Syscall param aio_read(aiocbp) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:571)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -841,9 +1003,11 @@
 -----------------------------------------------------
 Syscall param aio_write(aiocbp) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:574)
 
 Syscall param aio_write(aiocbp) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:574)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -857,9 +1021,22 @@
 -----------------------------------------------------
 Syscall param __pthread_kill(thread) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:590)
 
 Syscall param __pthread_kill(sig) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:590)
+
+-----------------------------------------------------
+x2000149(329):__NR___pthread_sigmask 3s 0m
+-----------------------------------------------------
+Syscall param __pthread_sigmask(set) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c:593)
+
+Syscall param __pthread_sigmask(oldset) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c:593)
 
 -----------------------------------------------------
 (335):           old utrace
@@ -869,30 +1046,38 @@
 -----------------------------------------------------
 Syscall param stat64_extended(file_name) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:613)
 
 Syscall param stat64_extended(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:613)
 
 Syscall param stat64_extended(fsacl) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:613)
 
 Syscall param stat64_extended(fsacl_size) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:613)
 
 Syscall param stat64_extended(file_name) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:613)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param stat64_extended(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:613)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param stat64_extended(fsacl_size) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:613)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param stat64_extended(fsacl) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:616)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -900,30 +1085,38 @@
 -----------------------------------------------------
 Syscall param lstat64_extended(file_name) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:619)
 
 Syscall param lstat64_extended(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:619)
 
 Syscall param lstat64_extended(fsacl) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:619)
 
 Syscall param lstat64_extended(fsacl_size) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:619)
 
 Syscall param lstat64_extended(file_name) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:619)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param lstat64_extended(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:619)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param lstat64_extended(fsacl_size) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:619)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param lstat64_extended(fsacl) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:622)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -931,26 +1124,33 @@
 -----------------------------------------------------
 Syscall param fstat64_extended(fd) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:625)
 
 Syscall param fstat64_extended(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:625)
 
 Syscall param fstat64_extended(fsacl) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:625)
 
 Syscall param fstat64_extended(fsacl_size) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:625)
 
 Syscall param fstat64_extended(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:625)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param fstat64_extended(fsacl_size) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:625)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 Syscall param fstat64_extended(fsacl) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:628)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -958,15 +1158,19 @@
 -----------------------------------------------------
 Syscall param getfsstat64(buf) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:637)
 
 Syscall param getfsstat64(bufsize) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:637)
 
 Syscall param getfsstat64(flags) contains uninitialised byte(s)
    ...
+   by 0x........: main (scalar.c:637)
 
 Syscall param getfsstat64(buf) points to unaddressable byte(s)
    ...
+   by 0x........: main (scalar.c:637)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
 -----------------------------------------------------
@@ -975,7 +1179,7 @@
 -----------------------------------------------------
 x270f(9999):                9999 1e
 -----------------------------------------------------
-WARNING: unhandled syscall: unix:9999
+WARNING: unhandled amd64-darwin syscall: unix:9999
 You may be able to write your own handler.
 Read the file README_MISSING_SYSCALL_OR_IOCTL.
 Nevertheless we consider this a bug.  Please report
diff --git a/memcheck/tests/deep-backtrace.vgtest b/memcheck/tests/deep-backtrace.vgtest
index ebeccf9..a3fd1df 100644
--- a/memcheck/tests/deep-backtrace.vgtest
+++ b/memcheck/tests/deep-backtrace.vgtest
@@ -1,2 +1,3 @@
 prog: deep-backtrace
 vgopts: -q --num-callers=500
+cleanup: rm -f vgcore.*
diff --git a/memcheck/tests/demangle.stderr.exp b/memcheck/tests/demangle.stderr.exp
index 2124517..6e7467d 100644
--- a/memcheck/tests/demangle.stderr.exp
+++ b/memcheck/tests/demangle.stderr.exp
@@ -1,16 +1,5 @@
-
 Conditional jump or move depends on uninitialised value(s)
    at 0x........: abc::def<int, magic<int> >::xyzzy(int*, magic<int>*) (demangle.cpp:9)
    by 0x........: magic<int>::xyzzy(int*) (demangle.cpp:19)
    by 0x........: main (demangle.cpp:27)
 
-
-HEAP SUMMARY:
-    in use at exit: 6 bytes in 3 blocks
-  total heap usage: 3 allocs, 0 frees, 6 bytes allocated
-
-For a detailed leak analysis, rerun with: --leak-check=full
-
-For counts of detected and suppressed errors, rerun with: -v
-Use --track-origins=yes to see where uninitialised values come from
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
diff --git a/memcheck/tests/demangle.vgtest b/memcheck/tests/demangle.vgtest
index f6ae038..b65b6d3 100644
--- a/memcheck/tests/demangle.vgtest
+++ b/memcheck/tests/demangle.vgtest
@@ -1 +1,2 @@
 prog: demangle
+vgopts: -q
diff --git a/memcheck/tests/doublefree.stderr.exp b/memcheck/tests/doublefree.stderr.exp
index 9ed5375..7560e3a 100644
--- a/memcheck/tests/doublefree.stderr.exp
+++ b/memcheck/tests/doublefree.stderr.exp
@@ -4,4 +4,7 @@
  Address 0x........ is 0 bytes inside a block of size 177 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (doublefree.c:10)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (doublefree.c:8)
 
diff --git a/memcheck/tests/dw4.c b/memcheck/tests/dw4.c
index 574f97c..7d981b6 100644
--- a/memcheck/tests/dw4.c
+++ b/memcheck/tests/dw4.c
@@ -68,8 +68,8 @@
   croak( p);
 
   /* Describe file mmap-ed */
-  snprintf(filename, sizeof(filename), "./valgrind-dw4-test.%d",
-           getpid());
+  snprintf(filename, sizeof(filename), "./valgrind-dw4-test.%ld",
+           (long) getpid());
 
   unlink(filename);
 
diff --git a/memcheck/tests/dw4.stderr.exp-solaris b/memcheck/tests/dw4.stderr.exp-solaris
new file mode 100644
index 0000000..917dcb5
--- /dev/null
+++ b/memcheck/tests/dw4.stderr.exp-solaris
@@ -0,0 +1,49 @@
+Uninitialised byte(s) found during client check request
+   at 0x........: croak (dw4.c:32)
+   by 0x........: main (dw4.c:59)
+ Address 0x........ is 4 bytes inside a block of size ... alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (dw4.c:52)
+
+Uninitialised byte(s) found during client check request
+   at 0x........: croak (dw4.c:32)
+   by 0x........: main (dw4.c:61)
+ Location 0x........ is 0 bytes inside S2[0].i,
+ a global variable declared at dw4.c:47
+
+Uninitialised byte(s) found during client check request
+   at 0x........: croak (dw4.c:32)
+   by 0x........: main (dw4.c:62)
+ Location 0x........ is 0 bytes inside local.i,
+ declared at dw4.c:51, in frame #1 of thread 1
+
+Uninitialised byte(s) found during client check request
+   at 0x........: croak (dw4.c:32)
+   by 0x........: main (dw4.c:68)
+ Address 0x........ is in a rw- anonymous segment
+
+Uninitialised byte(s) found during client check request
+   at 0x........: croak (dw4.c:32)
+   by 0x........: main (dw4.c:82)
+ Address 0x........ is in a rw- mapped file valgrind-dw4-test.PID segment
+
+Unaddressable byte(s) found during client check request
+   at 0x........: croak (dw4.c:25)
+   by 0x........: main (dw4.c:87)
+ Address 0x........ is 0 bytes after the brk data segment limit 0x........
+
+Uninitialised byte(s) found during client check request
+   at 0x........: croak (dw4.c:32)
+   by 0x........: main (dw4.c:89)
+ Address 0x........ is in the brk data segment 0x........-0x........
+
+Uninitialised byte(s) found during client check request
+   at 0x........: croak (dw4.c:32)
+   by 0x........: main (dw4.c:91)
+ Address 0x........ is in the brk data segment 0x........-0x........
+
+Unaddressable byte(s) found during client check request
+   at 0x........: croak (dw4.c:25)
+   by 0x........: main (dw4.c:93)
+ Address 0x........ is 1024 bytes after the brk data segment limit 0x........
+
diff --git a/memcheck/tests/err_disable1.stderr.exp b/memcheck/tests/err_disable1.stderr.exp
index 8762bf1..02bf259 100644
--- a/memcheck/tests/err_disable1.stderr.exp
+++ b/memcheck/tests/err_disable1.stderr.exp
@@ -10,6 +10,9 @@
  Address 0x........ is 5 bytes inside a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable1.c:27)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable1.c:26)
 
 
 --------- disabled (expect 0) ---------
@@ -23,6 +26,9 @@
  Address 0x........ is 5 bytes inside a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable1.c:27)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable1.c:26)
 
 
 --------- MULTI-LEVEL TEST (expect 2) ---------
@@ -33,6 +39,9 @@
  Address 0x........ is 5 bytes inside a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable1.c:27)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable1.c:26)
 
 Invalid read of size 1
    at 0x........: err (err_disable1.c:21)
@@ -40,6 +49,9 @@
  Address 0x........ is 5 bytes inside a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable1.c:27)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable1.c:26)
 
 
 --------- MULTI-LEVEL TEST end ---------
diff --git a/memcheck/tests/err_disable2.stderr.exp b/memcheck/tests/err_disable2.stderr.exp
index 82cd04f..7146da7 100644
--- a/memcheck/tests/err_disable2.stderr.exp
+++ b/memcheck/tests/err_disable2.stderr.exp
@@ -7,6 +7,9 @@
  Address 0x........ is 5 bytes inside a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable2.c:28)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable2.c:27)
 
 
 --------- disabled (expect 0) ---------
diff --git a/memcheck/tests/err_disable3.stderr.exp b/memcheck/tests/err_disable3.stderr.exp
index 0f1f8b7..2b6d74d 100644
--- a/memcheck/tests/err_disable3.stderr.exp
+++ b/memcheck/tests/err_disable3.stderr.exp
@@ -15,6 +15,9 @@
  Address 0x........ is 5 bytes inside a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable3.c:42)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable3.c:41)
 
 
 --------- c: end ---------
@@ -32,4 +35,7 @@
  Address 0x........ is 5 bytes inside a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable3.c:42)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable3.c:41)
 
diff --git a/memcheck/tests/err_disable4.stderr.exp b/memcheck/tests/err_disable4.stderr.exp
index cfacfd7..acc01ad 100644
--- a/memcheck/tests/err_disable4.stderr.exp
+++ b/memcheck/tests/err_disable4.stderr.exp
@@ -1506,6 +1506,9 @@
  Address 0x........ is 5 bytes inside a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable4.c:81)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:80)
 
 
 -------- Got 498 errors (expected 498 ==> PASS) ------
diff --git a/memcheck/tests/err_disable_arange1.stderr.exp b/memcheck/tests/err_disable_arange1.stderr.exp
index 8e979d2..35257d1 100644
--- a/memcheck/tests/err_disable_arange1.stderr.exp
+++ b/memcheck/tests/err_disable_arange1.stderr.exp
@@ -6,6 +6,9 @@
  Address 0x........ is 492 bytes inside a block of size 4,000 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable_arange1.c:15)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable_arange1.c:14)
 
 
 Disabling address error reporting for the range.
@@ -24,6 +27,9 @@
  Address 0x........ is 3,156 bytes inside a block of size 4,000 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (err_disable_arange1.c:15)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable_arange1.c:14)
 
 
 Exiting.  Expect warnings of 2 remaining ranges.
@@ -32,5 +38,5 @@
 WARNING: address error disablement range(s) still in force,
 WARNING: possibly as a result of some mistake in the use of the
 WARNING: VALGRIND_{DISABLE,ENABLE}_ERROR_REPORTING_IN_RANGE macros.
-   [1]  0x........-0x........  ClientReq
-   [3]  0x........-0x........  ClientReq
+   [4]  0x........-0x........  ClientReq
+   [6]  0x........-0x........  ClientReq
diff --git a/memcheck/tests/err_disable_arange1.vgtest b/memcheck/tests/err_disable_arange1.vgtest
index 48ba25f..a437709 100644
--- a/memcheck/tests/err_disable_arange1.vgtest
+++ b/memcheck/tests/err_disable_arange1.vgtest
@@ -1,2 +1,2 @@
 prog: err_disable_arange1
-vgopts: -q
+vgopts: -q --ignore-ranges=0x1000-0x1fff,0x0000-0x00ff
diff --git a/memcheck/tests/execve2.c b/memcheck/tests/execve2.c
index b3d44ec..a5d80f1 100644
--- a/memcheck/tests/execve2.c
+++ b/memcheck/tests/execve2.c
@@ -4,8 +4,10 @@
 int main ( int argc, char** argv, char** envp )
 {
    char* null_filename = NULL;
+   char *const argv_exe[] = {"true", NULL};
 
-   execve(null_filename,      NULL, NULL);
-   execve("../../tests/true", NULL, envp);
+   execve(null_filename, NULL, NULL);
+   // Solaris requires non-NULL argv param (this is not necessary on Linux)
+   execve("../../tests/true", argv_exe, envp);
    assert(0);  // shouldn't get here
 }
diff --git a/memcheck/tests/execve2.stderr.exp b/memcheck/tests/execve2.stderr.exp
index b87bff8..cd98593 100644
--- a/memcheck/tests/execve2.stderr.exp
+++ b/memcheck/tests/execve2.stderr.exp
@@ -1,5 +1,5 @@
 Syscall param execve(filename) points to unaddressable byte(s)
    ...
-   by 0x........: main (execve2.c:8)
+   by 0x........: main (execve2.c:9)
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
diff --git a/memcheck/tests/file_locking.c b/memcheck/tests/file_locking.c
index d99f6b5..35f2995 100644
--- a/memcheck/tests/file_locking.c
+++ b/memcheck/tests/file_locking.c
@@ -81,8 +81,8 @@
   int exitcode = 1;
   char filename[256];
 
-  snprintf(filename, sizeof(filename), "/tmp/valgrind-file-locking-test.%d",
-           getpid());
+  snprintf(filename, sizeof(filename), "/tmp/valgrind-file-locking-test.%ld",
+           (long) getpid());
 
   unlink(filename);
 
diff --git a/memcheck/tests/fprw.c b/memcheck/tests/fprw.c
index 6eb304d..4ef74c7 100644
--- a/memcheck/tests/fprw.c
+++ b/memcheck/tests/fprw.c
@@ -10,7 +10,7 @@
    volatile float f;
    double* dp = malloc(sizeof(double));
    float* fp = malloc(sizeof(float));
-   int* ip = (int*)0x1234567;
+   int* ip = (int*)0x12345678;
    d += 1.0;
    f += 10.0;
    *dp += ( d > 0.1  ? 2.0 : 3.0 );
diff --git a/memcheck/tests/fprw.vgtest b/memcheck/tests/fprw.vgtest
index 6dfbf0c..4179391 100644
--- a/memcheck/tests/fprw.vgtest
+++ b/memcheck/tests/fprw.vgtest
@@ -1,2 +1,2 @@
-vgopts: -q
+vgopts: -q --keep-stacktraces=alloc-then-free
 prog:   fprw
diff --git a/memcheck/tests/leak-segv-jmp.c b/memcheck/tests/leak-segv-jmp.c
index 50ad27b..1d1f84c 100644
--- a/memcheck/tests/leak-segv-jmp.c
+++ b/memcheck/tests/leak-segv-jmp.c
@@ -7,12 +7,14 @@
 #include <sys/mman.h>
 #include <sys/syscall.h>
 
+typedef unsigned int             UInt;
 typedef unsigned long            UWord;
 typedef unsigned long long int   ULong;
+
 // Below code is copied from m_syscall.c
 // Refer to this file for syscall convention.
 #if defined(VGP_x86_linux)
-extern UWord do_syscall_WRK (UWord syscall_no, 
+extern UWord do_syscall_WRK (UWord syscall_no,
                              UWord a1, UWord a2, UWord a3,
                              UWord a4, UWord a5, UWord a6
                              );
@@ -39,6 +41,7 @@
 "	ret\n"
 ".previous\n"
 );
+
 #elif defined(VGP_amd64_linux)
 extern UWord do_syscall_WRK (
           UWord syscall_no, 
@@ -104,6 +107,7 @@
 "         bx      lr\n"
 ".previous\n"
 );
+
 #elif defined(VGP_s390x_linux)
 UWord do_syscall_WRK (
    UWord syscall_no,
@@ -184,6 +188,51 @@
    return out;
 }
 
+#elif defined(VGP_x86_solaris)
+extern ULong
+do_syscall_WRK(UWord a1, UWord a2, UWord a3,
+               UWord a4, UWord a5, UWord a6,
+               UWord a7, UWord a8,
+               UWord syscall_no,
+               UInt *errflag);
+asm(
+".text\n"
+".globl do_syscall_WRK\n"
+"do_syscall_WRK:\n"
+"        movl    40(%esp), %ecx\n"      /* assume syscall success */
+"        movl    $0, (%ecx)\n"
+"        movl    36(%esp), %eax\n"
+"        int     $0x91\n"
+"        jnc     1f\n"                  /* jump if success */
+"        movl    40(%esp), %ecx\n"      /* syscall failed - set *errflag */
+"        movl    $1, (%ecx)\n"
+"1:      ret\n"
+".previous\n"
+);
+
+#elif defined(VGP_amd64_solaris)
+extern ULong
+do_syscall_WRK(UWord a1, UWord a2, UWord a3,
+               UWord a4, UWord a5, UWord a6,
+               UWord a7, UWord a8,
+               UWord syscall_no,
+               UInt *errflag);
+asm(
+".text\n"
+".globl do_syscall_WRK\n"
+"do_syscall_WRK:\n"
+"       movq    %rcx, %r10\n"           /* pass rcx in r10 instead */
+"       movq    32(%rsp), %rcx\n"       /* assume syscall success */
+"       movl    $0, (%rcx)\n"
+"       movq    24(%rsp), %rax\n"
+"       syscall\n"
+"       jnc     1f\n"                   /* jump if success */
+"       movq    32(%rsp), %rcx\n"       /* syscall failed - set *errflag */
+"       movl    $1, (%rcx)\n"
+"1:     ret\n"
+".previous\n"
+);
+
 #else
 // Ensure the file compiles even if the syscall nr is not defined.
 #ifndef __NR_mprotect
@@ -202,12 +251,35 @@
 
 
 char **b10;
+char *interior_ptrs[3];
 int mprotect_result = 0;
 static void non_simd_mprotect (long tid, void* addr, long len)
 {
+#if defined(VGP_x86_solaris) || defined(VGP_amd64_solaris)
+   UInt err = 0;
+   mprotect_result = do_syscall_WRK((UWord) addr, len, PROT_NONE,
+                                    0, 0, 0, 0, 0, SYS_mprotect, 
+                                    &err);
+   if (err)
+      mprotect_result = -1;
+#else
    mprotect_result = do_syscall_WRK(__NR_mprotect,
                                     (UWord) addr, len, PROT_NONE,
                                     0, 0, 0);
+#endif
+}
+
+// can this work without global variable for return value?
+static void my_mprotect_none(void* addr, long len)
+{
+   if (RUNNING_ON_VALGRIND)
+     (void) VALGRIND_NON_SIMD_CALL2(non_simd_mprotect,
+                                    addr,
+                                    len);
+   else
+      mprotect_result = mprotect(addr,
+                                 len,
+                                 PROT_NONE);
 }
 
 void f(void)
@@ -221,7 +293,7 @@
    for (i = 0; i < nr_ptr; i++)
       b10[i] = (char*)b10;
    b10[4000] = malloc (1000);
-   
+
    fprintf(stderr, "expecting no leaks\n");
    fflush(stderr);
    VALGRIND_DO_LEAK_CHECK;
@@ -248,32 +320,44 @@
    if (pagesize == -1)
       perror ("sysconf failed");
    
-   if (RUNNING_ON_VALGRIND)
-     (void) VALGRIND_NON_SIMD_CALL2(non_simd_mprotect, RNDPAGEDOWN(&b10[4000]), 2 * pagesize);
-   else
-      mprotect_result = mprotect((void*) RNDPAGEDOWN(&b10[4000]), 2 * pagesize, PROT_NONE);
+   my_mprotect_none((void*) RNDPAGEDOWN(&b10[4000]), 2 * pagesize);
    fprintf(stderr, "mprotect result %d\n", mprotect_result);
 
    fprintf(stderr, "expecting a leak again\n");
    fflush(stderr);
    VALGRIND_DO_LEAK_CHECK;
 
-   if (RUNNING_ON_VALGRIND)
-     (void) VALGRIND_NON_SIMD_CALL2(non_simd_mprotect,
-                                    RNDPAGEDOWN(&b10[0]),
-                                    RNDPAGEDOWN(&(b10[nr_ptr-1]))
-                                    - RNDPAGEDOWN(&(b10[0])));
-   else
-      mprotect_result = mprotect((void*) RNDPAGEDOWN(&b10[0]),
+   my_mprotect_none((void*) RNDPAGEDOWN(&b10[0]),
                                  RNDPAGEDOWN(&(b10[nr_ptr-1]))
-                                 - RNDPAGEDOWN(&(b10[0])),
-                                 PROT_NONE);
+                                 - RNDPAGEDOWN(&(b10[0])));
    fprintf(stderr, "full mprotect result %d\n", mprotect_result);
 
    fprintf(stderr, "expecting a leak again after full mprotect\n");
    fflush(stderr);
    VALGRIND_DO_LEAK_CHECK;
 
+   // allocate memory but keep only interior pointers to trigger various
+   // heuristics
+   // Allocate some memory:
+   interior_ptrs[0] = calloc (nr_ptr * sizeof(char*), 1);
+
+   // Inner pointer after 3 sizeT: triggers the stdstring heuristic:
+   interior_ptrs[2] = interior_ptrs[0] + 3 * sizeof(size_t);
+
+   // Inner pointer after 1 ULong: triggers the length64 heuristic:
+   interior_ptrs[1] = interior_ptrs[0] + sizeof(unsigned long);
+
+   // Inner pointer after a size: triggers the newarray heuristics.
+   interior_ptrs[0] += sizeof(size_t);
+
+   my_mprotect_none( (void*) RNDPAGEDOWN((interior_ptrs[0] - sizeof(size_t))),
+                     RNDPAGEDOWN(nr_ptr * sizeof(char*)));
+   fprintf(stderr, "mprotect result %d\n", mprotect_result);
+
+   fprintf(stderr, "expecting heuristic not to crash after full mprotect\n");
+   fflush(stderr);
+   VALGRIND_DO_LEAK_CHECK;
+
    fprintf(stderr, "finished\n");
 }
 
diff --git a/memcheck/tests/leak-segv-jmp.stderr.exp b/memcheck/tests/leak-segv-jmp.stderr.exp
index 73f4e11..1ee37cd 100644
--- a/memcheck/tests/leak-segv-jmp.stderr.exp
+++ b/memcheck/tests/leak-segv-jmp.stderr.exp
@@ -14,8 +14,8 @@
 expecting a leak
 1,000 bytes in 1 blocks are definitely lost in loss record ... of ...
    at 0x........: malloc (vg_replace_malloc.c:...)
-   by 0x........: f (leak-segv-jmp.c:223)
-   by 0x........: main (leak-segv-jmp.c:286)
+   by 0x........: f (leak-segv-jmp.c:295)
+   by 0x........: main (leak-segv-jmp.c:370)
 
 LEAK SUMMARY:
    definitely lost: 1,000 bytes in 1 blocks
@@ -30,8 +30,8 @@
 expecting a leak again
 1,000 bytes in 1 blocks are definitely lost in loss record ... of ...
    at 0x........: malloc (vg_replace_malloc.c:...)
-   by 0x........: f (leak-segv-jmp.c:223)
-   by 0x........: main (leak-segv-jmp.c:286)
+   by 0x........: f (leak-segv-jmp.c:295)
+   by 0x........: main (leak-segv-jmp.c:370)
 
 LEAK SUMMARY:
    definitely lost: 1,000 bytes in 1 blocks
@@ -46,8 +46,8 @@
 expecting a leak again after full mprotect
 1,000 bytes in 1 blocks are definitely lost in loss record ... of ...
    at 0x........: malloc (vg_replace_malloc.c:...)
-   by 0x........: f (leak-segv-jmp.c:223)
-   by 0x........: main (leak-segv-jmp.c:286)
+   by 0x........: f (leak-segv-jmp.c:295)
+   by 0x........: main (leak-segv-jmp.c:370)
 
 LEAK SUMMARY:
    definitely lost: 1,000 bytes in 1 blocks
@@ -58,25 +58,46 @@
 Reachable blocks (those to which a pointer was found) are not shown.
 To see them, rerun with: --leak-check=full --show-leak-kinds=all
 
+mprotect result 0
+expecting heuristic not to crash after full mprotect
+1,000 bytes in 1 blocks are definitely lost in loss record ... of ...
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: f (leak-segv-jmp.c:295)
+   by 0x........: main (leak-segv-jmp.c:370)
+
+40,000 bytes in 1 blocks are possibly lost in loss record ... of ...
+   at 0x........: calloc (vg_replace_malloc.c:...)
+   by 0x........: f (leak-segv-jmp.c:342)
+   by 0x........: main (leak-segv-jmp.c:370)
+
+LEAK SUMMARY:
+   definitely lost: 1,000 bytes in 1 blocks
+   indirectly lost: 0 bytes in 0 blocks
+     possibly lost: 40,000 bytes in 1 blocks
+   still reachable: 40,000 bytes in 1 blocks
+        suppressed: 0 bytes in 0 blocks
+Reachable blocks (those to which a pointer was found) are not shown.
+To see them, rerun with: --leak-check=full --show-leak-kinds=all
+
 finished
 LEAK SUMMARY:
    definitely lost: 1,000 bytes in 1 blocks
    indirectly lost: 0 bytes in 0 blocks
-     possibly lost: 0 bytes in 0 blocks
+     possibly lost: 40,000 bytes in 1 blocks
    still reachable: 40,000 bytes in 1 blocks
         suppressed: 0 bytes in 0 blocks
 Rerun with --leak-check=full to see details of leaked memory
 
 leaked:     1000 bytes in  1 blocks
-dubious:      0 bytes in  0 blocks
+dubious:    40000 bytes in  1 blocks
 reachable:  40000 bytes in  1 blocks
 suppressed:   0 bytes in  0 blocks
 
 HEAP SUMMARY:
-    in use at exit: 41,000 bytes in 2 blocks
-  total heap usage: 2 allocs, 0 frees, 41,000 bytes allocated
+    in use at exit: 81,000 bytes in 3 blocks
+  total heap usage: 3 allocs, 0 frees, 81,000 bytes allocated
 
 For a detailed leak analysis, rerun with: --leak-check=full
 
 For counts of detected and suppressed errors, rerun with: -v
-ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
diff --git a/memcheck/tests/leak-segv-jmp.vgtest b/memcheck/tests/leak-segv-jmp.vgtest
index 43cd6d0..52dae91 100644
--- a/memcheck/tests/leak-segv-jmp.vgtest
+++ b/memcheck/tests/leak-segv-jmp.vgtest
@@ -1,2 +1,2 @@
-prereq: test ! `../../tests/os_test darwin` && ! `../../tests/arch_test mips32` && ! `../../tests/arch_test ppc64`
+prereq: ! ../../tests/os_test darwin && ! ../../tests/arch_test mips32 && ! ../../tests/arch_test ppc64
 prog: leak-segv-jmp
diff --git a/memcheck/tests/leak_cpp_interior.cpp b/memcheck/tests/leak_cpp_interior.cpp
index f599eae..f66fc89 100644
--- a/memcheck/tests/leak_cpp_interior.cpp
+++ b/memcheck/tests/leak_cpp_interior.cpp
@@ -1,3 +1,5 @@
+#define __STDC_FORMAT_MACROS
+#include <inttypes.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <stdint.h>
@@ -107,7 +109,8 @@
   
   // prepare the who_points_at cmd we will run.
   // Do it here to avoid having ptr or its exterior ptr kept in a register.
-  sprintf(who_points_at_cmd, "who_points_at %p 20", (char*)ptr - sizeof(void*));
+  sprintf(who_points_at_cmd, "who_points_at %#" PRIxPTR " 20",
+          (uintptr_t) (char*)ptr - sizeof(void*));
 
   ptr2 = new MyClass[0]; // "interior but exterior ptr".
   // ptr2 points after the chunk, is wrongly considered by memcheck as definitely leaked.
diff --git a/memcheck/tests/leak_cpp_interior.stderr.exp b/memcheck/tests/leak_cpp_interior.stderr.exp
index 8531c4e..3228f74 100644
--- a/memcheck/tests/leak_cpp_interior.stderr.exp
+++ b/memcheck/tests/leak_cpp_interior.stderr.exp
@@ -2,8 +2,8 @@
 valgrind output will go to log
 VALGRIND_DO_LEAK_CHECK
 4 bytes in 1 blocks are definitely lost in loss record ... of ...
-   by 0x........: doit() (leak_cpp_interior.cpp:112)
-   by 0x........: main (leak_cpp_interior.cpp:127)
+   by 0x........: doit() (leak_cpp_interior.cpp:115)
+   by 0x........: main (leak_cpp_interior.cpp:130)
 
 LEAK SUMMARY:
    definitely lost: 4 bytes in 1 blocks
diff --git a/memcheck/tests/leak_cpp_interior.stderr.exp-64bit b/memcheck/tests/leak_cpp_interior.stderr.exp-64bit
index 8a025a9..7a862a3 100644
--- a/memcheck/tests/leak_cpp_interior.stderr.exp-64bit
+++ b/memcheck/tests/leak_cpp_interior.stderr.exp-64bit
@@ -2,8 +2,8 @@
 valgrind output will go to log
 VALGRIND_DO_LEAK_CHECK
 8 bytes in 1 blocks are definitely lost in loss record ... of ...
-   by 0x........: doit() (leak_cpp_interior.cpp:112)
-   by 0x........: main (leak_cpp_interior.cpp:127)
+   by 0x........: doit() (leak_cpp_interior.cpp:115)
+   by 0x........: main (leak_cpp_interior.cpp:130)
 
 LEAK SUMMARY:
    definitely lost: 8 bytes in 1 blocks
diff --git a/memcheck/tests/linux/getregset.vgtest b/memcheck/tests/linux/getregset.vgtest
index 8a69bce..1bd6ef0 100644
--- a/memcheck/tests/linux/getregset.vgtest
+++ b/memcheck/tests/linux/getregset.vgtest
@@ -1,4 +1,4 @@
 prog: getregset
 vgopts: -q
-prereq: ../../../tests/os_test linux 2.6.33 && ! ../../../tests/arch_test mips32 && ! `../../../tests/arch_test ppc64`
+prereq: ../../../tests/os_test linux 2.6.33 && ! ../../../tests/arch_test mips32 && ! ../../../tests/arch_test ppc64
 
diff --git a/memcheck/tests/linux/proc-auxv.vgtest b/memcheck/tests/linux/proc-auxv.vgtest
index 4d337b0..d364076 100644
--- a/memcheck/tests/linux/proc-auxv.vgtest
+++ b/memcheck/tests/linux/proc-auxv.vgtest
@@ -1,3 +1,3 @@
-prereq: `LD_SHOW_AUXV=1 /bin/echo | grep AT_PLATFORM > /dev/null`
+prereq: LD_SHOW_AUXV=1 /bin/echo | grep -q AT_PLATFORM
 prog: proc-auxv
 vgopts: -q
diff --git a/memcheck/tests/long_namespace_xml.cpp b/memcheck/tests/long_namespace_xml.cpp
index 91bdeaf..fb8a3dd 100644
--- a/memcheck/tests/long_namespace_xml.cpp
+++ b/memcheck/tests/long_namespace_xml.cpp
@@ -19,6 +19,7 @@
 #define N2 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
 
 #include <iostream>
+#include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
 
@@ -42,5 +43,8 @@
 
 int main() {
   N1::N2::f();
+#if defined(VGO_solaris)
+  fcloseall();
+#endif
   return 0;
 }
diff --git a/memcheck/tests/malloc1.stderr.exp b/memcheck/tests/malloc1.stderr.exp
index b440a83..bbf8041 100644
--- a/memcheck/tests/malloc1.stderr.exp
+++ b/memcheck/tests/malloc1.stderr.exp
@@ -5,6 +5,10 @@
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: really (malloc1.c:19)
    by 0x........: main (malloc1.c:9)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: really (malloc1.c:16)
+   by 0x........: main (malloc1.c:9)
 
 Invalid write of size 1
    at 0x........: really (malloc1.c:23)
diff --git a/memcheck/tests/malloc2.c b/memcheck/tests/malloc2.c
index 44cc7bb..496fdff 100644
--- a/memcheck/tests/malloc2.c
+++ b/memcheck/tests/malloc2.c
@@ -10,6 +10,17 @@
 
 void* test_arr[N_TEST_ARR];
 
+unsigned myrandom(void)
+{
+   /* Simple multiply-with-carry random generator. */
+   static unsigned m_w = 11;
+   static unsigned m_z = 13;
+
+   m_z = 36969 * (m_z & 65535) + (m_z >> 16);
+   m_w = 18000 * (m_w & 65535) + (m_w >> 16);
+   return (m_z << 16) + m_w;
+}
+
 int main ( int argc, char** argv )
 {
    int i, j, k, nbytes;
@@ -19,13 +30,13 @@
       test_arr[i] = NULL;
 
    for (i = 0; i < N_TEST_TRANSACTIONS; i++) {
-      j = random() % N_TEST_ARR;
+      j = myrandom() % N_TEST_ARR;
       if (test_arr[j]) {
          free(test_arr[j]);
          test_arr[j] = NULL;
       } else {
-         nbytes = 1 + random() % M_TEST_MALLOC;
-         if (random()%64 == 32) 
+         nbytes = 1 + myrandom() % M_TEST_MALLOC;
+         if (myrandom()%64 == 32)
             nbytes *= 17;
          test_arr[j] = malloc( nbytes );
          chp = test_arr[j];
diff --git a/memcheck/tests/malloc2.stderr.exp b/memcheck/tests/malloc2.stderr.exp
index 7ba0426..36fb848 100644
--- a/memcheck/tests/malloc2.stderr.exp
+++ b/memcheck/tests/malloc2.stderr.exp
@@ -1,13 +1,19 @@
 Invalid write of size 1
-   at 0x........: main (malloc2.c:39)
- Address 0x........ is 0 bytes inside a block of size 429 free'd
+   at 0x........: main (malloc2.c:50)
+ Address 0x........ is 0 bytes inside a block of size 772 free'd
    at 0x........: free (vg_replace_malloc.c:...)
-   by 0x........: main (malloc2.c:38)
+   by 0x........: main (malloc2.c:49)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (malloc2.c:41)
 
 Invalid free() / delete / delete[] / realloc()
    at 0x........: free (vg_replace_malloc.c:...)
-   by 0x........: main (malloc2.c:43)
- Address 0x........ is 0 bytes inside a block of size 429 free'd
+   by 0x........: main (malloc2.c:54)
+ Address 0x........ is 0 bytes inside a block of size 772 free'd
    at 0x........: free (vg_replace_malloc.c:...)
-   by 0x........: main (malloc2.c:38)
+   by 0x........: main (malloc2.c:49)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (malloc2.c:41)
 
diff --git a/memcheck/tests/malloc_usable.c b/memcheck/tests/malloc_usable.c
index b036b10..78ab8f1 100644
--- a/memcheck/tests/malloc_usable.c
+++ b/memcheck/tests/malloc_usable.c
@@ -5,7 +5,7 @@
 
 int main(void)
 {
-#  if !defined(VGO_darwin)
+#  if !defined(VGO_darwin) && !defined(VGO_solaris)
    // Because Memcheck marks any slop as inaccessible, it doesn't round up
    // sizes for malloc_usable_size().
    int* x = malloc(99);
diff --git a/memcheck/tests/memalign_test.stderr.exp b/memcheck/tests/memalign_test.stderr.exp
index aa8d588..e9dc1af 100644
--- a/memcheck/tests/memalign_test.stderr.exp
+++ b/memcheck/tests/memalign_test.stderr.exp
@@ -4,4 +4,8 @@
  Address 0x........ is 0 bytes inside a block of size 111,110 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (memalign_test.c:23)
+ Block was alloc'd at
+   at 0x........: memalign (vg_replace_malloc.c:...)
+   by 0x........: valloc (vg_replace_malloc.c:...)
+   by 0x........: main (memalign_test.c:16)
 
diff --git a/memcheck/tests/noisy_child.stderr.exp b/memcheck/tests/noisy_child.stderr.exp
index 2f58343..675fc64 100644
--- a/memcheck/tests/noisy_child.stderr.exp
+++ b/memcheck/tests/noisy_child.stderr.exp
@@ -4,6 +4,9 @@
  Address 0x........ is 5 bytes inside a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (noisy_child.c:24)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (noisy_child.c:23)
 
 Invalid write of size 1
    at 0x........: do_parent_badness (noisy_child.c:16)
@@ -11,6 +14,9 @@
  Address 0x........ is 0 bytes after a block of size 10 free'd
    at 0x........: free (vg_replace_malloc.c:...)
    by 0x........: main (noisy_child.c:24)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (noisy_child.c:23)
 
 
 HEAP SUMMARY:
diff --git a/memcheck/tests/partial_load_dflt.stderr.exp b/memcheck/tests/partial_load_dflt.stderr.exp
index 871f651..fdb4a33 100644
--- a/memcheck/tests/partial_load_dflt.stderr.exp
+++ b/memcheck/tests/partial_load_dflt.stderr.exp
@@ -1,11 +1,5 @@
 
 Invalid read of size 4
-   at 0x........: main (partial_load.c:16)
- Address 0x........ is 0 bytes inside a block of size 3 alloc'd
-   at 0x........: calloc (vg_replace_malloc.c:...)
-   by 0x........: main (partial_load.c:14)
-
-Invalid read of size 4
    at 0x........: main (partial_load.c:23)
  Address 0x........ is 1 bytes inside a block of size 4 alloc'd
    at 0x........: calloc (vg_replace_malloc.c:...)
@@ -31,4 +25,4 @@
 For a detailed leak analysis, rerun with: --leak-check=full
 
 For counts of detected and suppressed errors, rerun with: -v
-ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
diff --git a/memcheck/tests/partial_load_dflt.stderr.exp64 b/memcheck/tests/partial_load_dflt.stderr.exp64
index 8873a25..a57d9aa 100644
--- a/memcheck/tests/partial_load_dflt.stderr.exp64
+++ b/memcheck/tests/partial_load_dflt.stderr.exp64
@@ -1,11 +1,5 @@
 
 Invalid read of size 8
-   at 0x........: main (partial_load.c:16)
- Address 0x........ is 0 bytes inside a block of size 7 alloc'd
-   at 0x........: calloc (vg_replace_malloc.c:...)
-   by 0x........: main (partial_load.c:14)
-
-Invalid read of size 8
    at 0x........: main (partial_load.c:23)
  Address 0x........ is 1 bytes inside a block of size 8 alloc'd
    at 0x........: calloc (vg_replace_malloc.c:...)
@@ -31,4 +25,4 @@
 For a detailed leak analysis, rerun with: --leak-check=full
 
 For counts of detected and suppressed errors, rerun with: -v
-ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
diff --git a/memcheck/tests/partial_load_dflt.vgtest b/memcheck/tests/partial_load_dflt.vgtest
index b1c6b27..a95bb62 100644
--- a/memcheck/tests/partial_load_dflt.vgtest
+++ b/memcheck/tests/partial_load_dflt.vgtest
@@ -1,3 +1,4 @@
 prog: partial_load
+vgopts: --keep-stacktraces=alloc-then-free
 stderr_filter: filter_allocs
 stderr_filter_args: partial_load.c
diff --git a/memcheck/tests/partial_load_ok.vgtest b/memcheck/tests/partial_load_ok.vgtest
index d4003a7..0c9caa1 100644
--- a/memcheck/tests/partial_load_ok.vgtest
+++ b/memcheck/tests/partial_load_ok.vgtest
@@ -1,4 +1,4 @@
 prog: partial_load
-vgopts: --partial-loads-ok=yes
+vgopts: --partial-loads-ok=yes --keep-stacktraces=alloc-then-free
 stderr_filter: filter_allocs
 stderr_filter_args: partial_load.c
diff --git a/memcheck/tests/post-syscall.c b/memcheck/tests/post-syscall.c
index cc47350..6655ab4 100644
--- a/memcheck/tests/post-syscall.c
+++ b/memcheck/tests/post-syscall.c
@@ -9,7 +9,7 @@
 /* Check that a syscall's POST function gets called if it completes
    due to being interrupted.  nanosleep is used here, because it
    writes a result even if it fails.  wait*() could also be used,
-   because they successully complete if interrupted by SIGCHLD.
+   because they successfully complete if interrupted by SIGCHLD.
  */
 static void handler(int s)
 {
diff --git a/memcheck/tests/ppc32/power_ISA2_07.vgtest b/memcheck/tests/ppc32/power_ISA2_07.vgtest
index 9a43785..fa34a1e 100644
--- a/memcheck/tests/ppc32/power_ISA2_07.vgtest
+++ b/memcheck/tests/ppc32/power_ISA2_07.vgtest
@@ -1,3 +1,3 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: power_ISA2_07
-vgopts: 
+vgopts:
diff --git a/memcheck/tests/ppc64/power_ISA2_07.vgtest b/memcheck/tests/ppc64/power_ISA2_07.vgtest
index 63ba88f..fa34a1e 100644
--- a/memcheck/tests/ppc64/power_ISA2_07.vgtest
+++ b/memcheck/tests/ppc64/power_ISA2_07.vgtest
@@ -1,3 +1,3 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: power_ISA2_07
 vgopts:
diff --git a/memcheck/tests/sbfragment.c b/memcheck/tests/sbfragment.c
index 16a9e6a..545fe3d 100644
--- a/memcheck/tests/sbfragment.c
+++ b/memcheck/tests/sbfragment.c
@@ -75,7 +75,7 @@
     }
 
   printf ("after %d loops, last size block requested %lu\n", loop, bigsize);
-  // verify if superblock fragmentation occured
+  // verify if superblock fragmentation occurred
   // We consider that an arena of up to 3 times more than bigsize is ok.
   {
 #if defined(HAVE_MALLINFO)
diff --git a/memcheck/tests/sendmsg.c b/memcheck/tests/sendmsg.c
index bd005c8..cbbe181 100644
--- a/memcheck/tests/sendmsg.c
+++ b/memcheck/tests/sendmsg.c
@@ -1,9 +1,10 @@
-#include <netinet/ip.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/ip.h>
 
 #define PORT 12345
 
diff --git a/memcheck/tests/sendmsg.stderr.exp b/memcheck/tests/sendmsg.stderr.exp
index 3a6d156..397a579 100644
--- a/memcheck/tests/sendmsg.stderr.exp
+++ b/memcheck/tests/sendmsg.stderr.exp
@@ -1,7 +1,7 @@
 Syscall param sendmsg(msg) points to uninitialised byte(s)
    at 0x........: sendmsg (in /...libc...)
-   by 0x........: main (sendmsg.c:45)
+   by 0x........: main (sendmsg.c:46)
  Address 0x........ is on thread 1's stack
- in frame #1, created by main (sendmsg.c:12)
+ in frame #1, created by main (sendmsg.c:13)
 
 sendmsg: 6
diff --git a/memcheck/tests/sendmsg.stderr.exp-solaris b/memcheck/tests/sendmsg.stderr.exp-solaris
new file mode 100644
index 0000000..f00e76e
--- /dev/null
+++ b/memcheck/tests/sendmsg.stderr.exp-solaris
@@ -0,0 +1,8 @@
+Syscall param sendmsg(msg) points to uninitialised byte(s)
+   at 0x........: __so_sendmsg (in /...libc...)
+   by 0x........: __xnet_sendmsg (in /...libc...)
+   by 0x........: main (sendmsg.c:46)
+ Address 0x........ is on thread 1's stack
+ in frame #2, created by main (sendmsg.c:13)
+
+sendmsg: 6
diff --git a/memcheck/tests/sh-mem-random.c b/memcheck/tests/sh-mem-random.c
index 5e4361c..ae82248 100644
--- a/memcheck/tests/sh-mem-random.c
+++ b/memcheck/tests/sh-mem-random.c
@@ -102,7 +102,10 @@
    return 0xFF & (randomU4() >> 13);
 }
 
-#define N_BYTES  300000
+// NB!  300000 is really not enough to shake out all failures.
+// Increasing it by a factor of 256 is, but makes the test take
+// the best part of an hour.
+#define N_BYTES  (300000 /* * 256 */)
 #define N_EVENTS (5 * N_BYTES)
 
 
@@ -188,6 +191,16 @@
                "emms"
                : : "r"(arr+dst), "r"(arr+src) : "memory"
             );
+#elif defined(__linux__) && defined(__arm__) && !defined(__aarch64__)
+            /* On arm32, many compilers generate a 64-bit float move
+               using two 32 bit integer registers, which completely
+               defeats this test.  Hence force a 64-bit NEON load and
+               store.  I guess this will break the build on non-NEON
+               capable targets. */
+            __asm__ __volatile__ (
+               "vld1.64 {d7},[%0] ; vst1.64 {d7},[%1] "
+               : : "r"(arr+src), "r"(arr+dst) : "d7","memory"
+            );
 #else
             /* Straightforward.  On amd64, this gives a load/store of
                the bottom half of an xmm register.  On ppc32/64 this
diff --git a/memcheck/tests/sigaltstack.c b/memcheck/tests/sigaltstack.c
index 526a99a..2892ebb 100644
--- a/memcheck/tests/sigaltstack.c
+++ b/memcheck/tests/sigaltstack.c
@@ -1,5 +1,4 @@
-
-
+#include <inttypes.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <signal.h>
@@ -7,7 +6,8 @@
 
 void sig_handler(int sig){
   int var;
-  fprintf(stderr, "caught signal, local var is on %p\n", &var);
+  fprintf(stderr, "caught signal, local var is on %#" PRIxPTR "\n",
+          (uintptr_t)&var);
 }
 
 int main(int argv, char** argc) {
@@ -24,7 +24,8 @@
 
   sigstk.ss_size = size;
   sigstk.ss_flags = 0;
-  fprintf(stderr, "calling sigaltstack, stack base is %p\n", sigstk.ss_sp);
+  fprintf(stderr, "calling sigaltstack, stack base is %#" PRIxPTR "\n",
+          (uintptr_t)sigstk.ss_sp);
   if (sigaltstack(&sigstk,0)<0) perror("sigaltstack");
 
   fprintf(stderr,"setting sigaction\n");
diff --git a/memcheck/tests/sigkill.stderr.exp-solaris b/memcheck/tests/sigkill.stderr.exp-solaris
new file mode 100644
index 0000000..de4a860
--- /dev/null
+++ b/memcheck/tests/sigkill.stderr.exp-solaris
@@ -0,0 +1,197 @@
+
+setting signal 1: Success
+getting signal 1: Success
+
+setting signal 2: Success
+getting signal 2: Success
+
+setting signal 3: Success
+getting signal 3: Success
+
+setting signal 4: Success
+getting signal 4: Success
+
+setting signal 5: Success
+getting signal 5: Success
+
+setting signal 6: Success
+getting signal 6: Success
+
+setting signal 7: Success
+getting signal 7: Success
+
+setting signal 8: Success
+getting signal 8: Success
+
+setting signal 9: Warning: ignored attempt to set SIGKILL handler in sigaction();
+         the SIGKILL signal is uncatchable
+Invalid argument
+getting signal 9: Success
+
+setting signal 10: Success
+getting signal 10: Success
+
+setting signal 11: Success
+getting signal 11: Success
+
+setting signal 12: Success
+getting signal 12: Success
+
+setting signal 13: Success
+getting signal 13: Success
+
+setting signal 14: Success
+getting signal 14: Success
+
+setting signal 15: Success
+getting signal 15: Success
+
+setting signal 16: Success
+getting signal 16: Success
+
+setting signal 17: Success
+getting signal 17: Success
+
+setting signal 18: Success
+getting signal 18: Success
+
+setting signal 19: Success
+getting signal 19: Success
+
+setting signal 20: Success
+getting signal 20: Success
+
+setting signal 21: Success
+getting signal 21: Success
+
+setting signal 22: Success
+getting signal 22: Success
+
+setting signal 23: Warning: ignored attempt to set SIGSTOP handler in sigaction();
+         the SIGSTOP signal is uncatchable
+Invalid argument
+getting signal 23: Success
+
+setting signal 24: Success
+getting signal 24: Success
+
+setting signal 25: Success
+getting signal 25: Success
+
+setting signal 26: Success
+getting signal 26: Success
+
+setting signal 27: Success
+getting signal 27: Success
+
+setting signal 28: Success
+getting signal 28: Success
+
+setting signal 29: Success
+getting signal 29: Success
+
+setting signal 30: Success
+getting signal 30: Success
+
+setting signal 31: Success
+getting signal 31: Success
+
+setting signal 34: Success
+getting signal 34: Success
+
+setting signal 35: Success
+getting signal 35: Success
+
+setting signal 36: Success
+getting signal 36: Success
+
+setting signal 37: Success
+getting signal 37: Success
+
+setting signal 38: Success
+getting signal 38: Success
+
+setting signal 39: Success
+getting signal 39: Success
+
+setting signal 40: Success
+getting signal 40: Success
+
+setting signal 41: Success
+getting signal 41: Success
+
+setting signal 42: Success
+getting signal 42: Success
+
+setting signal 43: Success
+getting signal 43: Success
+
+setting signal 44: Success
+getting signal 44: Success
+
+setting signal 45: Success
+getting signal 45: Success
+
+setting signal 46: Success
+getting signal 46: Success
+
+setting signal 47: Success
+getting signal 47: Success
+
+setting signal 48: Success
+getting signal 48: Success
+
+setting signal 49: Success
+getting signal 49: Success
+
+setting signal 50: Success
+getting signal 50: Success
+
+setting signal 51: Success
+getting signal 51: Success
+
+setting signal 52: Success
+getting signal 52: Success
+
+setting signal 53: Success
+getting signal 53: Success
+
+setting signal 54: Success
+getting signal 54: Success
+
+setting signal 55: Success
+getting signal 55: Success
+
+setting signal 56: Success
+getting signal 56: Success
+
+setting signal 57: Success
+getting signal 57: Success
+
+setting signal 58: Success
+getting signal 58: Success
+
+setting signal 59: Success
+getting signal 59: Success
+
+setting signal 60: Success
+getting signal 60: Success
+
+setting signal 61: Success
+getting signal 61: Success
+
+setting signal 62: Success
+getting signal 62: Success
+
+setting signal 65: Success
+getting signal 65: Success
+
+
+HEAP SUMMARY:
+    in use at exit: ... bytes in ... blocks
+  total heap usage: ... allocs, ... frees, ... bytes allocated
+
+For a detailed leak analysis, rerun with: --leak-check=full
+
+For counts of detected and suppressed errors, rerun with: -v
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/memcheck/tests/solaris/Makefile.am b/memcheck/tests/solaris/Makefile.am
new file mode 100644
index 0000000..4582769
--- /dev/null
+++ b/memcheck/tests/solaris/Makefile.am
@@ -0,0 +1,173 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = \
+	filter_ldynsym \
+	filter_name_service_door \
+	filter_scalar \
+	filter_sendfilev \
+	filter_stderr \
+	filter_syscall_at
+
+noinst_HEADERS = scalar.h
+
+EXTRA_DIST = \
+	brk.stderr.exp brk.stdout.exp brk.vgtest \
+	context_stack_die.stderr.exp context_stack_die.stdout.exp context_stack_die.vgtest \
+	door_data.stderr.exp door_data.stdout.exp door_data.vgtest \
+	door_kill.stderr.exp door_kill.stdout.exp door_kill.vgtest \
+	execx.stderr.exp execx.stdout.exp execx.vgtest \
+	getzoneoffset.stderr.exp getzoneoffset.vgtest \
+	gethrtime.stderr.exp gethrtime.stdout.exp gethrtime.vgtest \
+	gethrusec.stderr.exp gethrusec.stdout.exp gethrusec.vgtest \
+	ioctl.stderr.exp ioctl.stdout.exp ioctl.vgtest \
+	ldynsym.stderr.exp ldynsym.stdout.exp ldynsym.vgtest \
+	lsframe1.stderr.exp lsframe1.stdout.exp lsframe1.vgtest \
+	lsframe2.stderr.exp lsframe2.stdout.exp lsframe2.vgtest \
+	mmapobj_bssonly.stderr.exp mmapobj_bssonly.stdout.exp mmapobj_bssonly.vgtest \
+	name_service_door.stderr.exp-amd64 name_service_door.stderr.exp-x86 \
+	name_service_door.stdout.exp name_service_door.vgtest \
+	pkcs11.stderr.exp-illumos pkcs11.stderr.exp-solaris pkcs11.stdout.exp pkcs11.vgtest \
+	scalar.stderr.exp scalar.stdout.exp scalar.vgtest \
+	scalar_frealpathat.stderr.exp scalar_frealpathat.stdout.exp scalar_frealpathat.vgtest \
+	scalar_ioctl.stderr.exp scalar_ioctl.stdout.exp scalar_ioctl.vgtest \
+	scalar_lwp_kill.stderr.exp scalar_lwp_kill.stdout.exp scalar_lwp_kill.vgtest \
+	scalar_lwp_name.stderr.exp scalar_lwp_name.stdout.exp scalar_lwp_name.vgtest \
+	scalar_lwp_sigqueue.stderr.exp scalar_lwp_sigqueue.stdout.exp scalar_lwp_sigqueue.vgtest \
+	scalar_lwp_sigqueue_pid.stderr.exp scalar_lwp_sigqueue_pid.vgtest \
+	scalar_obsolete.stderr.exp scalar_obsolete.stdout.exp scalar_obsolete.vgtest \
+	scalar_shm_new.stderr.exp scalar_shm_new.stdout.exp scalar_shm_new.vgtest \
+	scalar_spawn.stderr.exp scalar_spawn.stdout.exp scalar_spawn.vgtest \
+	scalar_system_stats.stderr.exp scalar_system_stats.stdout.exp scalar_system_stats.vgtest \
+	scalar_tsol_clearance.stderr.exp scalar_tsol_clearance.vgtest \
+	scalar_utimensat.stderr.exp scalar_utimensat.stdout.exp scalar_utimensat.vgtest \
+	scalar_utimesys.stderr.exp scalar_utimesys.stdout.exp scalar_utimesys.vgtest \
+	scalar_uuidsys.stderr.exp scalar_uuidsys.stdout.exp scalar_uuidsys.vgtest \
+	scalar_zone_defunct.stderr.exp scalar_zone_defunct.stdout.exp scalar_zone_defunct.vgtest \
+	sendfilev.stderr.exp sendfilev.stdout.exp sendfilev.vgtest \
+	shmat.stderr.exp shmat.stdout.exp shmat.vgtest \
+	spawn.stderr.exp spawn.stdout.exp spawn.vgtest \
+	strlcpy.stderr.exp strlcpy.stdout.exp strlcpy.vgtest \
+	supponlyobj.stderr.exp supponlyobj.supp supponlyobj.vgtest \
+	syscall_at.stderr.exp syscall_at.stdout.exp syscall_at.vgtest \
+	thr_daemon_exit_libc.stderr.exp thr_daemon_exit_libc.stdout.exp thr_daemon_exit_libc.vgtest \
+	thr_daemon_exit_standalone.stderr.exp thr_daemon_exit_standalone.stdout.exp thr_daemon_exit_standalone.vgtest
+
+check_PROGRAMS = \
+	brk \
+	context_stack_die \
+	door_data \
+	door_kill \
+	gethrtime \
+	inlinfo \
+	inlinfo_nested.so \
+	ioctl \
+	ldynsym \
+	lsframe1 \
+	lsframe2 \
+	mmapobj_bssonly \
+	mmapobj_bssonly.so \
+	name_service_door \
+	pkcs11 \
+	scalar \
+	scalar_ioctl \
+	sendfilev \
+	shmat \
+	strlcpy \
+	syscall_at \
+	thr_daemon_exit_libc \
+	thr_daemon_exit_standalone
+
+if SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS
+check_PROGRAMS += execx
+endif
+
+if SOLARIS_RESERVE_SYSSTAT_ADDR
+check_PROGRAMS += gethrusec
+endif
+
+if SOLARIS_GETZONEOFFSET_FASTTRAP
+check_PROGRAMS += getzoneoffset
+endif
+
+if SOLARIS_OLD_SYSCALLS
+check_PROGRAMS += scalar_obsolete
+endif
+
+if SOLARIS_FREALPATHAT_SYSCALL
+check_PROGRAMS += scalar_frealpathat
+endif
+
+if SOLARIS_LWP_NAME_SYSCALL
+check_PROGRAMS += scalar_lwp_name
+endif
+
+if SOLARIS_LWP_SIGQUEUE_SYSCALL
+if SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID
+check_PROGRAMS += scalar_lwp_sigqueue_pid
+else
+check_PROGRAMS += scalar_lwp_sigqueue
+endif
+else
+check_PROGRAMS += scalar_lwp_kill
+endif
+
+if SOLARIS_SHM_NEW
+check_PROGRAMS += scalar_shm_new
+endif
+
+if SOLARIS_SPAWN_SYSCALL
+check_PROGRAMS += scalar_spawn spawn
+endif
+
+if SOLARIS_SYSTEM_STATS_SYSCALL
+check_PROGRAMS += scalar_system_stats
+endif
+
+if SOLARIS_TSOL_CLEARANCE
+check_PROGRAMS += scalar_tsol_clearance
+scalar_tsol_clearance_LDADD = -ltsol
+endif
+
+if SOLARIS_UTIMENSAT_SYSCALL
+check_PROGRAMS += scalar_utimensat
+endif
+
+if SOLARIS_UTIMESYS_SYSCALL
+check_PROGRAMS += scalar_utimesys
+endif
+
+if SOLARIS_UUIDSYS_SYSCALL
+check_PROGRAMS += scalar_uuidsys
+endif
+
+if SOLARIS_ZONE_DEFUNCT 
+check_PROGRAMS += scalar_zone_defunct
+endif
+
+AM_CFLAGS   += $(AM_FLAG_M3264_PRI)
+AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
+
+door_kill_LDADD = -lpthread
+ioctl_LDADD = -lsocket
+ldynsym_LDFLAGS = -Wl,--strip-all
+pkcs11_LDADD = -lpkcs11
+sendfilev_LDADD = -lsendfile
+
+inlinfo_SOURCES = inlinfo.c
+inlinfo_DEPENDENCIES = inlinfo_nested.so
+inlinfo_LDFLAGS = -Wl,-rpath,$(top_builddir)/memcheck/tests/solaris
+inlinfo_LDADD = inlinfo_nested.so
+inlinfo_nested_so_SOURCES = inlinfo_nested.c
+inlinfo_nested_so_CFLAGS = $(AM_CFLAGS) -fPIC
+inlinfo_nested_so_LDFLAGS = -Wl,-rpath,$(top_builddir)/memcheck/tests/solaris -shared -fPIC
+
+mmapobj_bssonly_SOURCES = mmapobj_bssonly.c
+mmapobj_bssonly_DEPENDENCIES = mmapobj_bssonly.so
+mmapobj_bssonly_LDFLAGS = -Wl,-rpath,$(top_builddir)/memcheck/tests/solaris
+mmapobj_bssonly_LDADD = mmapobj_bssonly.so
+mmapobj_bssonly_so_SOURCES = mmapobj_bssonly_lib.c
+mmapobj_bssonly_so_CFLAGS = $(AM_CFLAGS) -fPIC
+mmapobj_bssonly_so_LDFLAGS = -nostartfiles -nodefaultlibs -shared
+
+thr_daemon_exit_standalone_LDFLAGS = -nostartfiles -nodefaultlibs
diff --git a/memcheck/tests/solaris/brk.c b/memcheck/tests/solaris/brk.c
new file mode 100644
index 0000000..4ec6bf5
--- /dev/null
+++ b/memcheck/tests/solaris/brk.c
@@ -0,0 +1,83 @@
+/* Test for the brk syscall wrapper. */
+
+#include <assert.h>
+#include <errno.h>
+#include <stddef.h>
+#include <sys/syscall.h>
+
+/* Data segment end. */
+extern int _end;
+static char *begin = (char *)&_end;
+
+__attribute__((noinline))
+static int test_begin(void)
+{
+   int res = 0;
+   int tmp;
+
+   /* Check that a value at the break is inaccessible. */
+   if (*begin)
+      res++;
+
+   /* Allocate one byte and check that the last byte is accessible and
+      initialized. */
+   tmp = syscall(SYS_brk, begin + 1);
+   assert(tmp != -1);
+   if (*begin)
+      res++;
+
+   /* Deallocate one byte and check that the last byte is now inaccessible. */
+   tmp = syscall(SYS_brk, begin);
+   assert(tmp != -1);
+   if (*begin)
+      res++;
+
+   return res;
+}
+
+__attribute__((noinline))
+static void test_updown(void)
+{
+   int tmp;
+   size_t i;
+
+#define MAX_SIZE 8192
+   /* Run up phase. */
+   for (i = 0; i < MAX_SIZE; i++) {
+      tmp = syscall(SYS_brk, begin + i);
+      assert(tmp != -1);
+   }
+
+   /* Run down phase. */
+   for (i = 0; i < MAX_SIZE; i++) {
+      tmp = syscall(SYS_brk, begin + MAX_SIZE - 1 - i);
+      assert(tmp != -1);
+   }
+#undef MAX_SIZE
+}
+
+__attribute__((noinline))
+static void test_range(void)
+{
+   int tmp;
+
+   tmp = syscall(SYS_brk, begin - 1);
+   assert(tmp == -1);
+   assert(errno == ENOMEM);
+
+   /* Unified limit for 64-bit and 32-bit version. */
+   unsigned long long impossible_limit = 0xffffff4fffffffULL;
+   tmp = syscall(SYS_brk, impossible_limit);
+   assert(tmp == -1);
+   assert(errno == ENOMEM);
+}
+
+int main(void)
+{
+   int res;
+   res = test_begin();
+   test_updown();
+   test_range();
+   return res;
+}
+
diff --git a/memcheck/tests/solaris/brk.stderr.exp b/memcheck/tests/solaris/brk.stderr.exp
new file mode 100644
index 0000000..3e981d5
--- /dev/null
+++ b/memcheck/tests/solaris/brk.stderr.exp
@@ -0,0 +1,11 @@
+Invalid read of size 1
+   at 0x........: test_begin (brk.c:19)
+   by 0x........: main (brk.c:78)
+ Address 0x........ is 0 bytes after the brk data segment limit 0x........
+
+Invalid read of size 1
+   at 0x........: test_begin (brk.c:32)
+   by 0x........: main (brk.c:78)
+ Address 0x........ is 0 bytes after the brk data segment limit 0x........
+
+brk segment overflow in thread #1: can't grow to 0x........
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/brk.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/brk.stdout.exp
diff --git a/memcheck/tests/solaris/brk.vgtest b/memcheck/tests/solaris/brk.vgtest
new file mode 100644
index 0000000..1306b77
--- /dev/null
+++ b/memcheck/tests/solaris/brk.vgtest
@@ -0,0 +1,2 @@
+prog: brk
+vgopts: -q
diff --git a/memcheck/tests/solaris/context_stack_die.c b/memcheck/tests/solaris/context_stack_die.c
new file mode 100644
index 0000000..8673a91
--- /dev/null
+++ b/memcheck/tests/solaris/context_stack_die.c
@@ -0,0 +1,43 @@
+/* Test that the stack correctly dies after a setcontext(2) call. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <ucontext.h>
+
+static volatile int *sp;
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   sp = (int *) &ucp->uc_mcontext.gregs[0];
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   /* Always-null value that is used to prevent any possible compiler
+      optimizations. */
+   volatile int zero = 0;
+
+   /* Setup a signal handler. */
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   /* Raise a signal. */
+   raise(SIGUSR1);
+
+   /* Value pointed by sp should be at this point uninitialized. */
+   if (*sp && zero)
+      assert(0);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/context_stack_die.stderr.exp b/memcheck/tests/solaris/context_stack_die.stderr.exp
new file mode 100644
index 0000000..556123e
--- /dev/null
+++ b/memcheck/tests/solaris/context_stack_die.stderr.exp
@@ -0,0 +1,5 @@
+Invalid read of size 4
+   at 0x........: main (context_stack_die.c:38)
+ Address 0x........ is on thread 1's stack
+ .... bytes below stack pointer
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/context_stack_die.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/context_stack_die.stdout.exp
diff --git a/memcheck/tests/solaris/context_stack_die.vgtest b/memcheck/tests/solaris/context_stack_die.vgtest
new file mode 100644
index 0000000..f5c8604
--- /dev/null
+++ b/memcheck/tests/solaris/context_stack_die.vgtest
@@ -0,0 +1,2 @@
+prog: context_stack_die
+vgopts: -q
diff --git a/memcheck/tests/solaris/door_data.c b/memcheck/tests/solaris/door_data.c
new file mode 100644
index 0000000..85209f0
--- /dev/null
+++ b/memcheck/tests/solaris/door_data.c
@@ -0,0 +1,208 @@
+/* Simple door test. */
+
+#include <door.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+static char door_file[] = "/tmp/vgtest_door_data.XXXXXX";
+static volatile int exit_now = 0;
+
+static void child_handler(int sig)
+{
+   if (!exit_now) {
+      fprintf(stderr, "Received premature SIGCHLD.\n");
+      unlink(door_file);
+      exit(1);
+   }
+}
+
+/* SERVER CODE */
+static void server_procedure(void *cookie, char *argp, size_t arg_size,
+                             door_desc_t *dp, uint_t n_desc)
+{
+   char data[] = "Hello from server";
+
+   if (!argp)
+      goto out;
+
+   if (arg_size > INT_MAX) {
+      fprintf(stderr, "Value received from a client is too big.\n");
+      goto out;
+   }
+
+   printf("SERVER: %.*s\n", (int)arg_size, argp);
+   fflush(stdout);
+
+out:
+   /* Let server_main() know that we should exit. */
+   *(int*)cookie = 1;
+
+   door_return(data, strlen(data) + 1, NULL, 0);
+
+   /* Function door_return() should never return. */
+   perror("door_return");
+   exit(1);
+}
+
+static int server_main(void)
+{
+   int res = 1;
+   int did = -1;
+   int attached = 0;
+
+   /* Make sure nothing else is attached. */
+   fdetach(door_file);
+
+   if ((did = door_create(server_procedure, (void*)&exit_now, 0)) < 0) {
+      perror("door_create");
+      return 1;
+   }
+
+   /* Attach to file system. */
+   if (fattach(did, door_file) < 0) {
+      char str[100];
+      snprintf(str, sizeof(str), "fattach %s", door_file);
+      perror(str);
+      goto out;
+   }
+   attached = 1;
+
+   /* Poor man's termination. */
+   while (!exit_now)
+      sleep(1);
+
+   res = 0;
+
+out:
+   if (attached && unlink(door_file)) {
+      char str[100];
+      snprintf(str, sizeof(str), "unlink %s", door_file);
+      perror(str);
+   }
+   if (did >= 0 && door_revoke(did))
+      perror("door_revoke");
+
+   return res;
+}
+
+/* CLIENT CODE */
+static int client_main(void)
+{
+   int did;
+   char buf[128];
+   int tries;
+   door_arg_t params;
+   struct door_info info;
+
+   tries = 0;
+   while (1) {
+      /* Open the door file. */
+      if ((did = open(door_file, O_RDWR)) >= 0)
+         if (!door_info(did, &info))
+            break;
+
+      close(did);
+
+      if (tries > 10) {
+         char str[100];
+         snprintf(str, sizeof(str), "door_info %s", door_file);
+         perror(str);
+         return 1;
+      }
+
+      tries++;
+      sleep(1);
+   }
+
+   /* Set call parameters. */
+   snprintf(buf, sizeof(buf), "Hello from client");
+   params.data_ptr = buf;
+   params.data_size = strlen(buf) + 1;
+   params.desc_ptr = NULL;
+   params.desc_num = 0;
+   params.rbuf = buf;
+   params.rsize = sizeof(buf);
+
+   /* Make the call. */
+   if (door_call(did, &params)) {
+      perror("door_call");
+      close(did);
+      return 1;
+   }
+
+   close(did);
+
+   /* Print a result of the call. */
+   printf("CLIENT: %.*s\n", (int)params.rsize, params.rbuf);
+   fflush(stdout);
+
+   /* It's possible that the system allocated a new memory for rbuf.  Unmap it
+      if it's the case */
+   if (params.rbuf != buf)
+      if (munmap(params.rbuf, params.rsize) != 0) {
+         perror("munmap");
+         return 1;
+      }
+
+   return 0;
+}
+
+/* MAIN CODE */
+int main(void)
+{
+   struct sigaction sa;
+   pid_t pid;
+   int door_fd;
+
+   /* Establish handler for client error exit. */
+   sa.sa_handler = child_handler;
+   sa.sa_flags = SA_NOCLDSTOP;
+   if (sigemptyset(&sa.sa_mask)) {
+      perror("sigemptyset");
+      return 1;
+   }
+   if (sigaction(SIGCHLD, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   door_fd = mkstemp(door_file);
+   if (door_fd < 0) {
+      perror("mkstemp");
+      return 1;
+   }
+   close(door_fd);
+
+   pid = fork();
+   if (pid == -1) {
+      perror("fork");
+      return 1;
+   }
+
+   if (pid == 0) {
+      return client_main();
+   } else {
+      int res = server_main();
+      if (res == 0) {
+         do {
+            if (wait(NULL) == pid)
+               break;
+            if (errno != EINTR) {
+               perror("wait");
+               res = 1;
+            }
+         } while (errno == EINTR);
+      }
+      return res;
+   }
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/door_data.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/door_data.stderr.exp
diff --git a/memcheck/tests/solaris/door_data.stdout.exp b/memcheck/tests/solaris/door_data.stdout.exp
new file mode 100644
index 0000000..0d0ccc3
--- /dev/null
+++ b/memcheck/tests/solaris/door_data.stdout.exp
@@ -0,0 +1,2 @@
+SERVER: Hello from client
+CLIENT: Hello from server
diff --git a/memcheck/tests/solaris/door_data.vgtest b/memcheck/tests/solaris/door_data.vgtest
new file mode 100644
index 0000000..bf93b36
--- /dev/null
+++ b/memcheck/tests/solaris/door_data.vgtest
@@ -0,0 +1,2 @@
+prog: door_data
+vgopts: -q --sim-hints=lax-doors
diff --git a/memcheck/tests/solaris/door_kill.c b/memcheck/tests/solaris/door_kill.c
new file mode 100644
index 0000000..06874c0
--- /dev/null
+++ b/memcheck/tests/solaris/door_kill.c
@@ -0,0 +1,102 @@
+/* Test cancellation of a door_return call. */
+
+#include <assert.h>
+#include <door.h>
+#include <errno.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/lwp.h>
+#include <unistd.h>
+
+static volatile lwpid_t server_lwpid = 0;
+
+static void server_procedure(void *cookie, char *argp, size_t arg_size,
+                             door_desc_t *dp, uint_t n_desc)
+{
+   assert(0);
+}
+
+static void *my_server_thread(void *arg)
+{
+   server_lwpid = _lwp_self();
+   door_return(NULL, 0, NULL, 0);
+   return NULL;
+}
+
+static void create_door_thread(door_info_t *info)
+{
+   static int called = 0;
+   pthread_t thread;
+   int res;
+
+   /* Allow to create only one server door thread. */
+   assert(!called);
+   called = 1;
+
+   res = pthread_create(&thread, NULL, my_server_thread, NULL);
+   if (res) {
+      errno = res;
+      perror("pthread_create");
+      exit(1);
+   }
+}
+
+static void signal_handler(int signo, siginfo_t *info, void *uc)
+{
+   const char str[] = "Signal caught.\n";
+   size_t len = sizeof(str) - 1;
+   ssize_t res;
+
+   res = write(STDOUT_FILENO, str, len);
+   assert(res == len);
+}
+
+int main(void)
+{
+   int res = 1;
+   int did = -1;
+   struct sigaction sa;
+
+   sa.sa_sigaction = signal_handler;
+   sa.sa_flags = SA_RESTART;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGINT, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   door_server_create(create_door_thread);
+
+   if ((did = door_create(server_procedure, NULL, 0)) < 0) {
+      perror("door_create");
+      return 1;
+   }
+
+   /* Let the server thread to run. */
+   sleep(2);
+
+   /* Send a signal to the server thread that should be already created and
+      blocked in door_return. */
+   if (_lwp_kill(server_lwpid, SIGINT)) {
+      perror("_lwp_kill");
+      goto out;
+   }
+
+   /* Let the other thread to run. */
+   sleep(2);
+
+   res = 0;
+
+out:
+   if (did >= 0 && door_revoke(did))
+      perror("door_revoke");
+
+   return res;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/door_kill.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/door_kill.stderr.exp
diff --git a/memcheck/tests/solaris/door_kill.stdout.exp b/memcheck/tests/solaris/door_kill.stdout.exp
new file mode 100644
index 0000000..a49633f
--- /dev/null
+++ b/memcheck/tests/solaris/door_kill.stdout.exp
@@ -0,0 +1 @@
+Signal caught.
diff --git a/memcheck/tests/solaris/door_kill.vgtest b/memcheck/tests/solaris/door_kill.vgtest
new file mode 100644
index 0000000..1c1f58f
--- /dev/null
+++ b/memcheck/tests/solaris/door_kill.vgtest
@@ -0,0 +1,2 @@
+prog: door_kill
+vgopts: -q
diff --git a/memcheck/tests/solaris/execx.c b/memcheck/tests/solaris/execx.c
new file mode 100644
index 0000000..f15d3aa
--- /dev/null
+++ b/memcheck/tests/solaris/execx.c
@@ -0,0 +1,58 @@
+/* Tests variant of SYS_execve where the first argument is a file descriptor. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/execx.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+
+static void test_EFAULT(void) {
+   int ret = syscall(SYS_execve, -1, 0, 0, 0);
+   int error = errno;
+   if ((ret != -1) || (error != EFAULT))
+      fprintf(stderr, "Expecting EFAULT\n");
+}
+
+static void test_EBADF(void) {
+   int ret = syscall(SYS_execve, -1, 0, 0, EXEC_DESCRIPTOR);
+   int error = errno;
+   if ((ret != -1) || (error != EBADF))
+      fprintf(stderr, "Expecting EBADF\n");
+}
+
+static int test_fexecve(char * const *envp) {
+   int fd = open("/usr/bin/printf", O_EXEC);
+   if (fd < 0) {
+      perror("open");
+      return 1;
+   }
+
+   pid_t pid = fork();
+   if (pid == -1) {
+      perror("fork");
+      return 1;
+   } else if (pid > 0) {
+      /* parent */
+   } else {
+      char *argv[] = {"printf", "PASSED\n", NULL};
+
+      if (fexecve(fd, argv, envp) < 0) {
+         perror("fexecve");
+         _exit(1);
+      }
+
+   }
+
+   wait(NULL);
+   return 0;
+}
+
+int main(int argc, const char *argv[], char * const *envp) {
+   /* First exercise the syscall with some invalid input. */
+   test_EFAULT();
+   test_EBADF();
+
+   return test_fexecve(envp);
+}
diff --git a/memcheck/tests/solaris/execx.stderr.exp b/memcheck/tests/solaris/execx.stderr.exp
new file mode 100644
index 0000000..9e86cbd
--- /dev/null
+++ b/memcheck/tests/solaris/execx.stderr.exp
@@ -0,0 +1,4 @@
+Syscall param execve(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/memcheck/tests/solaris/execx.stdout.exp b/memcheck/tests/solaris/execx.stdout.exp
new file mode 100644
index 0000000..53cdf1e
--- /dev/null
+++ b/memcheck/tests/solaris/execx.stdout.exp
@@ -0,0 +1 @@
+PASSED
diff --git a/memcheck/tests/solaris/execx.vgtest b/memcheck/tests/solaris/execx.vgtest
new file mode 100644
index 0000000..3c81690
--- /dev/null
+++ b/memcheck/tests/solaris/execx.vgtest
@@ -0,0 +1,3 @@
+prereq: test -e execx
+prog: execx
+vgopts: -q --trace-children=yes --num-callers=1
diff --git a/memcheck/tests/solaris/filter_ldynsym b/memcheck/tests/solaris/filter_ldynsym
new file mode 100755
index 0000000..6859692
--- /dev/null
+++ b/memcheck/tests/solaris/filter_ldynsym
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+# remove path to ldynsym
+sed "s/(in .*ldynsym)/(in ldynsym)/" |
+
+../filter_stderr "$@"
+
diff --git a/memcheck/tests/solaris/filter_name_service_door b/memcheck/tests/solaris/filter_name_service_door
new file mode 100755
index 0000000..25e5b91
--- /dev/null
+++ b/memcheck/tests/solaris/filter_name_service_door
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+# unify name_service_door location
+sed "s|/system/volatile|...|" |
+sed "s|/var/run|...|" |
+
+./filter_stderr "$@"
+
diff --git a/memcheck/tests/solaris/filter_scalar b/memcheck/tests/solaris/filter_scalar
new file mode 100755
index 0000000..1a3a6eb
--- /dev/null
+++ b/memcheck/tests/solaris/filter_scalar
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+# 'unlinkat' syscall number differs between Illumos and Solaris
+sed "s/[0-9]*:            SYS_unlinkat/xx:            SYS_unlinkat/" |
+
+# Filter out "in frame #x, created by" lines as they differ between x86/amd64.
+# on x86:   in frame #0, created by syscall (???)
+# on amd64: in frame #1, created by *function* (scalar.c:272)
+sed '/in frame #., created by/d' |
+
+./filter_stderr "$@" |
+
+# And finally remove temporary line with frame #0 present to unify
+# stack traces between x86 and amd64.
+sed '/at 0x........: syscall (in \/...libc...)/d'
diff --git a/memcheck/tests/solaris/filter_sendfilev b/memcheck/tests/solaris/filter_sendfilev
new file mode 100755
index 0000000..24a59d8
--- /dev/null
+++ b/memcheck/tests/solaris/filter_sendfilev
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+# Filter the frame number which differs between x86 and amd64
+sed "s/in frame #[0-9]/in frame #./" |
+
+./filter_stderr "$@"
+
diff --git a/memcheck/tests/solaris/filter_stderr b/memcheck/tests/solaris/filter_stderr
new file mode 100755
index 0000000..a778e97
--- /dev/null
+++ b/memcheck/tests/solaris/filter_stderr
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr "$@"
diff --git a/memcheck/tests/solaris/filter_syscall_at b/memcheck/tests/solaris/filter_syscall_at
new file mode 100755
index 0000000..7a074ee
--- /dev/null
+++ b/memcheck/tests/solaris/filter_syscall_at
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+# unify utimesys() and utimensat() syscall names
+sed "s/utimesys/utimeXXX/" |
+sed "s/utimensat/utimeXXX/" |
+
+./filter_stderr "$@"
+
diff --git a/memcheck/tests/solaris/gethrtime.c b/memcheck/tests/solaris/gethrtime.c
new file mode 100644
index 0000000..26bb078
--- /dev/null
+++ b/memcheck/tests/solaris/gethrtime.c
@@ -0,0 +1,39 @@
+/* Test for gethrtime which either issues a classic syscall
+   or leverages fasttrap available on Solaris with tscp hwcap. */
+
+#include "config.h"
+#include <stdio.h>
+#include <sys/time.h>
+#include <sys/trap.h>
+
+int main(void)
+{
+   hrtime_t hrt = gethrtime();
+   if (hrt > 0)
+      printf("PASS\n");
+
+/* Exercise the fasttrap directly if available. When tscp hwcap
+   is not supported, it simply returns NULL. */
+#if defined(SOLARIS_GETHRT_FASTTRAP)
+#if defined(VGP_x86_solaris)
+   __asm__ ( \
+      "movl %[FASTTRAP],%%eax\n"
+      "int $0xd2\n"
+      :
+      : [FASTTRAP] "i" (T_GETHRT)
+      : "eax", "edx", "cc");
+#elif defined(VGP_amd64_solaris)
+   __asm__ ( \
+      "movq %[FASTTRAP],%%rax\n"
+      "int $0xd2\n"
+      :
+      : [FASTTRAP] "i" (T_GETHRT)
+      : "rax", "rdx", "cc");
+#else
+#  error "Unknown platform"
+#endif
+#endif /* SOLARIS_GETHRT_FASTTRAP */
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/gethrtime.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/gethrtime.stderr.exp
diff --git a/memcheck/tests/solaris/gethrtime.stdout.exp b/memcheck/tests/solaris/gethrtime.stdout.exp
new file mode 100644
index 0000000..7ef22e9
--- /dev/null
+++ b/memcheck/tests/solaris/gethrtime.stdout.exp
@@ -0,0 +1 @@
+PASS
diff --git a/memcheck/tests/solaris/gethrtime.vgtest b/memcheck/tests/solaris/gethrtime.vgtest
new file mode 100644
index 0000000..c10414c
--- /dev/null
+++ b/memcheck/tests/solaris/gethrtime.vgtest
@@ -0,0 +1,2 @@
+prog: gethrtime
+vgopts: -q
diff --git a/memcheck/tests/solaris/gethrusec.c b/memcheck/tests/solaris/gethrusec.c
new file mode 100644
index 0000000..221cff7
--- /dev/null
+++ b/memcheck/tests/solaris/gethrusec.c
@@ -0,0 +1,24 @@
+/* Test for gethrusec which depends on the correct emulation of
+   AT_SUN_SYSSTAT_ADDR in the auxiliary vector. */
+
+#include <stdio.h>
+#include <strings.h>
+#include <sys/system_stats.h>
+
+int main(void)
+{
+   hrtime_t t = 0;
+   get_hrusec(&t);
+   printf("get_hrusec(): %s\n", (t == 0) ? "FAIL" : "PASS");
+
+   memtime_sec_t m = 0;
+   memset(&m, 0, sizeof(m));
+   get_sec_fromepoch(&m);
+   printf("get_sec_fromepoch(): %s\n", (m == 0) ? "FAIL" : "PASS");
+
+   t = 0;
+   get_nsec_fromepoch(&t);
+   printf("get_nsec_fromepoch(): %s\n", (t == 0) ? "FAIL" : "PASS");
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/gethrusec.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/gethrusec.stderr.exp
diff --git a/memcheck/tests/solaris/gethrusec.stdout.exp b/memcheck/tests/solaris/gethrusec.stdout.exp
new file mode 100644
index 0000000..bac1b83
--- /dev/null
+++ b/memcheck/tests/solaris/gethrusec.stdout.exp
@@ -0,0 +1,3 @@
+get_hrusec(): PASS
+get_sec_fromepoch(): PASS
+get_nsec_fromepoch(): PASS
diff --git a/memcheck/tests/solaris/gethrusec.vgtest b/memcheck/tests/solaris/gethrusec.vgtest
new file mode 100644
index 0000000..8717ab4
--- /dev/null
+++ b/memcheck/tests/solaris/gethrusec.vgtest
@@ -0,0 +1,3 @@
+prereq: test -e gethrusec
+prog: gethrusec
+vgopts: -q
diff --git a/memcheck/tests/solaris/getzoneoffset.c b/memcheck/tests/solaris/getzoneoffset.c
new file mode 100644
index 0000000..eac0724
--- /dev/null
+++ b/memcheck/tests/solaris/getzoneoffset.c
@@ -0,0 +1,30 @@
+/* Test for get_zone_offset fasttrap. */
+
+#include "config.h"
+#include <stdio.h>
+#include <sys/time.h>
+#include <sys/trap.h>
+
+int main(void)
+{
+#if defined(VGP_x86_solaris)
+   __asm__ ( \
+      "movl %[FASTTRAP],%%eax\n"
+      "int $0xd2\n"
+      :
+      : [FASTTRAP] "i" (T_GETZONEOFFSET)
+      : "eax", "edx", "cc");
+#elif defined(VGP_amd64_solaris)
+   __asm__ ( \
+      "movq %[FASTTRAP],%%rax\n"
+      "int $0xd2\n"
+      :
+      : [FASTTRAP] "i" (T_GETZONEOFFSET)
+      : "rax", "rdx", "cc");
+#else
+#  error "Unknown platform"
+#endif
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/getzoneoffset.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/getzoneoffset.stderr.exp
diff --git a/memcheck/tests/solaris/getzoneoffset.vgtest b/memcheck/tests/solaris/getzoneoffset.vgtest
new file mode 100644
index 0000000..124b643
--- /dev/null
+++ b/memcheck/tests/solaris/getzoneoffset.vgtest
@@ -0,0 +1,3 @@
+prereq: test -e getzoneoffset
+prog: getzoneoffset
+vgopts: -q
diff --git a/memcheck/tests/solaris/inlinfo.c b/memcheck/tests/solaris/inlinfo.c
new file mode 100644
index 0000000..113b0f8
--- /dev/null
+++ b/memcheck/tests/solaris/inlinfo.c
@@ -0,0 +1,11 @@
+/* Function below main (_start) is part of this object.
+ * So we use main() in this object as a marker for
+ * functions in inlinfo_nested.so.
+ */
+
+extern int main_nested(void);
+
+int main() {
+   return main_nested();
+}
+
diff --git a/memcheck/tests/solaris/inlinfo_nested.c b/memcheck/tests/solaris/inlinfo_nested.c
new file mode 100644
index 0000000..88fe09b
--- /dev/null
+++ b/memcheck/tests/solaris/inlinfo_nested.c
@@ -0,0 +1,78 @@
+/* Taken from memcheck/tests/inlinfo.c almost verbatim;
+ * only main() renamed to main_nested().
+ */
+
+#include "../../memcheck.h"
+#define INLINE    inline __attribute__((always_inline))
+
+INLINE int fun_d(int argd) {
+   static int locd = 0;
+   if (argd > 0)
+      locd += argd;
+   return locd;
+}
+
+INLINE int fun_c(int argc) {
+   static int locc = 0;
+   locc += argc;
+   return fun_d(locc);
+}
+
+INLINE int fun_b(int argb) {
+   static int locb = 0;
+   locb += argb;
+   return fun_c(locb);
+}
+
+INLINE int fun_a(int arga) {
+   static int loca = 0;
+   loca += arga;
+   return fun_b(loca);
+}
+
+__attribute__((noinline))
+static int fun_noninline_m(int argm)
+{
+   return fun_d(argm);
+}
+
+__attribute__((noinline))
+static int fun_noninline_o(int argo)
+{
+   static int loco = 0;
+   if (argo > 0)
+      loco += argo;
+   return loco;
+}
+
+INLINE int fun_f(int argf) {
+   static int locf = 0;
+   locf += argf;
+   return fun_noninline_o(locf);
+}
+
+INLINE int fun_e(int arge) {
+   static int loce = 0;
+   loce += arge;
+   return fun_f(loce);
+}
+
+__attribute__((noinline))
+static int fun_noninline_n(int argn)
+{
+   return fun_e(argn);
+}
+
+
+int main_nested(void) {
+   int result;
+   result = fun_a(result);
+   VALGRIND_MAKE_MEM_UNDEFINED(&result, sizeof(result));
+   result += fun_noninline_m(result);
+   VALGRIND_MAKE_MEM_UNDEFINED(&result, sizeof(result));
+   result += fun_d(result);
+   VALGRIND_MAKE_MEM_UNDEFINED(&result, sizeof(result));
+   result += fun_noninline_n(result);
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/ioctl.c b/memcheck/tests/solaris/ioctl.c
new file mode 100644
index 0000000..9f7e53a
--- /dev/null
+++ b/memcheck/tests/solaris/ioctl.c
@@ -0,0 +1,91 @@
+/* Tests for ioctl wrappers.
+   More complicated ones than just trivial ones in scalar_ioctl. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <unistd.h>
+#include <net/if.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+
+/* sockio */
+__attribute__((noinline))
+static int test_SIOCGIFCONF(void)
+{
+   int fd = socket(AF_INET, SOCK_DGRAM, 0);
+   if (fd < 0)
+      perror("socket");
+
+   int n_ifs;
+   if (ioctl(fd, SIOCGIFNUM, &n_ifs) < 0)
+      perror("ioctl(SIOCGIFNUM)");
+
+   struct ifconf ifc;
+   ifc.ifc_len = (n_ifs + 1) * sizeof(struct ifreq);
+   ifc.ifc_buf = malloc((n_ifs + 1) * sizeof(struct ifreq));
+   if (ifc.ifc_buf == NULL)
+      perror("malloc");
+
+   if (ioctl(fd, SIOCGIFCONF, &ifc) < 0)
+      perror("ioctl(SIOCGIFCONF)");
+
+   /* Check definedness of ifc attributes ... */
+   int x = 0;
+   if (ifc.ifc_len != 0) x = -1; else x = -2;
+   if (ifc.ifc_req != NULL) x = -3; else x = -4;
+   if (strcmp(ifc.ifc_req[0].ifr_name, "") != 0) x = -5; else x = -6;
+   /* ... and now one which is not defined. */
+   if (strcmp(ifc.ifc_req[n_ifs].ifr_name, "") != 0) x = -7; else x = -8;
+
+   free(ifc.ifc_buf);
+   close(fd);
+   return x;
+}
+
+__attribute__((noinline))
+static int test_SIOCGLIFCONF(void)
+{
+   int fd = socket(AF_INET, SOCK_DGRAM, 0);
+   if (fd < 0)
+      perror("socket");
+
+   struct lifnum lifn;
+   lifn.lifn_family = AF_INET;
+   lifn.lifn_flags = 0;
+   if (ioctl(fd, SIOCGLIFNUM, &lifn) < 0)
+      perror("ioctl(SIOCGLIFNUM)");
+
+   struct lifconf lifc;
+   lifc.lifc_family = AF_INET;
+   lifc.lifc_flags = 0;
+   lifc.lifc_len = (lifn.lifn_count + 1) * sizeof(struct lifreq);
+   lifc.lifc_buf = malloc((lifn.lifn_count + 1) * sizeof(struct lifreq));
+   if (lifc.lifc_buf == NULL)
+      perror("malloc");
+
+   if (ioctl(fd, SIOCGLIFCONF, &lifc) < 0)
+      perror("ioctl(SIOCGLIFCONF)");
+
+   /* Check definedness of lifc attributes ... */
+   int x = 0;
+   if (lifc.lifc_len != 0) x = -1; else x = -2;
+   if (lifc.lifc_req != NULL) x = -3; else x = -4;
+   if (strcmp(lifc.lifc_req[0].lifr_name, "") != 0) x = -5; else x = -6;
+   /* ... and now one which is not defined. */
+   if (strcmp(lifc.lifc_req[lifn.lifn_count].lifr_name, "") != 0)
+      x = -7; else x = -8;
+
+   free(lifc.lifc_buf);
+   close(fd);
+   return x;
+}
+
+int main(void)
+{
+   /* sockio */
+   test_SIOCGIFCONF();
+   test_SIOCGLIFCONF();
+
+   return 0;
+}
diff --git a/memcheck/tests/solaris/ioctl.stderr.exp b/memcheck/tests/solaris/ioctl.stderr.exp
new file mode 100644
index 0000000..146ea8d
--- /dev/null
+++ b/memcheck/tests/solaris/ioctl.stderr.exp
@@ -0,0 +1,8 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: test_SIOCGIFCONF (ioctl.c:39)
+   by 0x........: main (ioctl.c:87)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: test_SIOCGLIFCONF (ioctl.c:76)
+   by 0x........: main (ioctl.c:88)
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/ioctl.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/ioctl.stdout.exp
diff --git a/memcheck/tests/solaris/ioctl.vgtest b/memcheck/tests/solaris/ioctl.vgtest
new file mode 100644
index 0000000..a0daa78
--- /dev/null
+++ b/memcheck/tests/solaris/ioctl.vgtest
@@ -0,0 +1,2 @@
+prog: ioctl
+vgopts: -q
diff --git a/memcheck/tests/solaris/ldynsym.c b/memcheck/tests/solaris/ldynsym.c
new file mode 100644
index 0000000..df4f8e0
--- /dev/null
+++ b/memcheck/tests/solaris/ldynsym.c
@@ -0,0 +1,29 @@
+/* Test that the .SUNW_ldynsym section is correctly read. */
+
+#include <stdlib.h>
+
+__attribute__((noinline))
+static void function3(size_t size)
+{
+   malloc(size);
+}
+
+__attribute__((noinline))
+static void function2(size_t size)
+{
+   function3(size);
+}
+
+__attribute__((noinline))
+static void function(size_t size)
+{
+   function2(size);
+}
+
+int main(void)
+{
+   function(10);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/ldynsym.stderr.exp b/memcheck/tests/solaris/ldynsym.stderr.exp
new file mode 100644
index 0000000..247b504
--- /dev/null
+++ b/memcheck/tests/solaris/ldynsym.stderr.exp
@@ -0,0 +1,7 @@
+10 bytes in 1 blocks are definitely lost in loss record ... of ...
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: function3 (in ldynsym)
+   by 0x........: function2 (in ldynsym)
+   by 0x........: function (in ldynsym)
+   by 0x........: main (in ldynsym)
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/ldynsym.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/ldynsym.stdout.exp
diff --git a/memcheck/tests/solaris/ldynsym.vgtest b/memcheck/tests/solaris/ldynsym.vgtest
new file mode 100644
index 0000000..71c2820
--- /dev/null
+++ b/memcheck/tests/solaris/ldynsym.vgtest
@@ -0,0 +1,3 @@
+prog: ldynsym
+vgopts: -q --leak-check=yes
+stderr_filter: filter_ldynsym
diff --git a/memcheck/tests/solaris/lsframe1.c b/memcheck/tests/solaris/lsframe1.c
new file mode 100644
index 0000000..71fc9d8
--- /dev/null
+++ b/memcheck/tests/solaris/lsframe1.c
@@ -0,0 +1,23 @@
+/* Demonstrate Memcheck correctly handling a 64M array on the stack.
+   Requires --max-stackframe=67108884 or above.  And since it
+   generates a very large stack, --main-stacksize=67200000
+   (approximately) is also required. */
+
+#include <stdio.h>
+
+#define N_MBYTES 64
+#define N_INTS ((N_MBYTES * 1048576) / sizeof(int))
+
+int main(void)
+{
+   int i, sum;
+   int arr[N_INTS];
+   printf("lsframe1: start\n");
+   for (i = 0; i < N_INTS; i++)
+      arr[i] = i;
+   sum = 0;
+   for (i = 0; i < N_INTS; i++)
+      sum += arr[i];
+   printf("lsframe1: done, result is %d\n", sum);
+   return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/lsframe1.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/lsframe1.stderr.exp
diff --git a/memcheck/tests/solaris/lsframe1.stdout.exp b/memcheck/tests/solaris/lsframe1.stdout.exp
new file mode 100644
index 0000000..e2cb30d
--- /dev/null
+++ b/memcheck/tests/solaris/lsframe1.stdout.exp
@@ -0,0 +1,2 @@
+lsframe1: start
+lsframe1: done, result is -8388608
diff --git a/memcheck/tests/solaris/lsframe1.vgtest b/memcheck/tests/solaris/lsframe1.vgtest
new file mode 100644
index 0000000..ac49677
--- /dev/null
+++ b/memcheck/tests/solaris/lsframe1.vgtest
@@ -0,0 +1,3 @@
+prog: lsframe1
+vgopts: -q --main-stacksize=67200000 --max-stackframe=67200000
+stderr_filter: ../filter_allocs
diff --git a/memcheck/tests/solaris/lsframe2.c b/memcheck/tests/solaris/lsframe2.c
new file mode 100644
index 0000000..db7f1a0
--- /dev/null
+++ b/memcheck/tests/solaris/lsframe2.c
@@ -0,0 +1,31 @@
+/* Demonstrate Memcheck correctly handling chain of 64 recursive
+   calls, each of which allocates a 1 M array on the stack.  Requires
+   --main-stacksize=67117057 (on amd64-linux) or above, but works fine
+   if you specify that. */
+
+#include <stdio.h>
+
+#define N_MBYTES 64
+#define N_INTS_PER_MBYTE (1048576 / sizeof(int))
+
+int rec(int depth)
+{
+   int i, zzz;
+   int arr[N_INTS_PER_MBYTE];
+   if (depth == 0) return 0;
+   for (i = 0; i < N_INTS_PER_MBYTE; i++)
+      arr[i] = i * depth;
+   zzz = rec(depth-1);
+   for (i = 0; i < N_INTS_PER_MBYTE; i++)
+       zzz += arr[i];
+   return zzz;
+}
+
+int main(void)
+{
+   int sum;
+   printf("lsframe2: start\n");
+   sum = rec(N_MBYTES);
+   printf("lsframe2: done, result is %d\n", sum);
+   return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp2.stderr.exp b/memcheck/tests/solaris/lsframe2.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp2.stderr.exp
copy to memcheck/tests/solaris/lsframe2.stderr.exp
diff --git a/memcheck/tests/solaris/lsframe2.stdout.exp b/memcheck/tests/solaris/lsframe2.stdout.exp
new file mode 100644
index 0000000..9905a0d
--- /dev/null
+++ b/memcheck/tests/solaris/lsframe2.stdout.exp
@@ -0,0 +1,2 @@
+lsframe2: start
+lsframe2: done, result is -272629760
diff --git a/memcheck/tests/solaris/lsframe2.vgtest b/memcheck/tests/solaris/lsframe2.vgtest
new file mode 100644
index 0000000..7b1ee56
--- /dev/null
+++ b/memcheck/tests/solaris/lsframe2.vgtest
@@ -0,0 +1,3 @@
+prog: lsframe2
+vgopts: -q --main-stacksize=68500000
+stderr_filter: ../filter_allocs
diff --git a/memcheck/tests/solaris/mmapobj_bssonly.c b/memcheck/tests/solaris/mmapobj_bssonly.c
new file mode 100644
index 0000000..ba702f5
--- /dev/null
+++ b/memcheck/tests/solaris/mmapobj_bssonly.c
@@ -0,0 +1,9 @@
+/* Tests loading of a shared library which contains only BSS section. */
+
+#include <stdio.h>
+
+int main(void)
+{
+   printf("PASS\n");
+   return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/mmapobj_bssonly.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/mmapobj_bssonly.stderr.exp
diff --git a/memcheck/tests/solaris/mmapobj_bssonly.stdout.exp b/memcheck/tests/solaris/mmapobj_bssonly.stdout.exp
new file mode 100644
index 0000000..7ef22e9
--- /dev/null
+++ b/memcheck/tests/solaris/mmapobj_bssonly.stdout.exp
@@ -0,0 +1 @@
+PASS
diff --git a/memcheck/tests/solaris/mmapobj_bssonly.vgtest b/memcheck/tests/solaris/mmapobj_bssonly.vgtest
new file mode 100644
index 0000000..07937c9
--- /dev/null
+++ b/memcheck/tests/solaris/mmapobj_bssonly.vgtest
@@ -0,0 +1,2 @@
+prog: mmapobj_bssonly
+vgopts: -q
diff --git a/memcheck/tests/solaris/mmapobj_bssonly_lib.c b/memcheck/tests/solaris/mmapobj_bssonly_lib.c
new file mode 100644
index 0000000..cc5e277
--- /dev/null
+++ b/memcheck/tests/solaris/mmapobj_bssonly_lib.c
@@ -0,0 +1,3 @@
+/* Contains only uninitialized data which end up in BSS section. */
+
+char dummy[10];
diff --git a/memcheck/tests/solaris/name_service_door.c b/memcheck/tests/solaris/name_service_door.c
new file mode 100644
index 0000000..4afbf70
--- /dev/null
+++ b/memcheck/tests/solaris/name_service_door.c
@@ -0,0 +1,272 @@
+/* Tests for name switch cache daemon (nscd) door wrapper. */
+
+#include "config.h"
+
+#include <assert.h>
+#include <ctype.h>
+#include <door.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <nss_dbdefs.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <unistd.h>
+#include <sys/mman.h>
+
+#if defined(SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE)
+#define DOOR_FILE "/system/volatile/name_service_door"
+#else
+#define DOOR_FILE "/var/run/name_service_door"
+#endif
+
+#define HEADER(file, test_name) \
+   fprintf(file, "---------------------------------------------------------\n"  \
+                 "%s\n"                                                         \
+                 "---------------------------------------------------------\n", \
+                 test_name);
+
+
+static long x0;
+
+/* It's possible that the system allocated a new memory for rbuf.
+   Unmap it if it is the case. */
+static int handle_rbuf(door_arg_t *params, void *buf)
+{
+   if (params->rbuf != buf) {
+      if (munmap(params->rbuf, params->rsize) != 0) {
+         perror("munmap");
+         return EINVAL;
+      }
+   }
+
+   return 0;
+}
+
+__attribute__((noinline))
+static int test_app_small_request(int did)
+{
+   /* Set call parameters. */
+   size_t buf_size = sizeof(uint32_t);
+   char *buf = malloc(buf_size);
+   assert(buf != NULL);
+
+   nss_pheader_t *header = (nss_pheader_t *) buf;
+   header->nsc_callnumber = x0 + NSCD_GETENT;
+
+   door_arg_t params;
+   params.data_ptr = buf;
+   params.data_size = buf_size;
+   params.desc_ptr = NULL;
+   params.desc_num = 0;
+   params.rbuf = buf;
+   params.rsize = buf_size;
+
+   /* Make the call. */
+   if (door_call(did, &params) != 0) {
+      return errno;
+   }
+
+   return handle_rbuf(&params, buf);
+}
+
+__attribute__((noinline))
+static int test_app_uninitialized_request(int did)
+{
+   /* Set call parameters. */
+   size_t buf_size = sizeof(nss_pheader_t) + sizeof(nss_dbd_t);
+   char *buf = malloc(buf_size);
+   assert(buf != NULL);
+
+   nss_pheader_t *header = (nss_pheader_t *) buf;
+   header->nsc_callnumber = x0 + NSCD_GETENT;
+   header->dbd_off = x0 + sizeof(nss_pheader_t);
+   header->dbd_len = x0 + sizeof(nss_dbd_t);
+   nss_dbd_t *dbd = (nss_dbd_t *) (buf + sizeof(nss_pheader_t));
+   dbd->flags = x0;
+   dbd->o_name = x0 + 100;
+   dbd->o_config_name = x0 + 100;
+   dbd->o_default_config = x0 + 100;
+   header->key_off = x0 + sizeof(nss_pheader_t) + sizeof(nss_dbd_t);
+   header->key_len = x0 + 1; // one byte past the end of 'buf'
+   header->pbufsiz = x0 + 10000000;
+
+   door_arg_t params;
+   params.data_ptr = buf;
+   params.data_size = buf_size;
+   params.desc_ptr = NULL;
+   params.desc_num = 0;
+   params.rbuf = buf;
+   params.rsize = buf_size;
+
+   /* Make the call. */
+   if (door_call(did, &params) != 0) {
+      return errno;
+   }
+
+   /* Check definedness of response attributes ... */
+   int x = 0;
+   if (header->p_status != NSS_SUCCESS) x = -1; else x = -2;
+   if (header->p_herrno != 0) x = -2; else x = -3;
+   if (header->key_off != 0) x = -4; else x = -5;
+   if (header->key_len != 0) x = -6; else x = -7;
+   if (header->data_off != 0) x = -8; else x = -9;
+   if (header->data_len != 0) x = -10; else x = -11;
+   /* ... and now one which is not defined. */
+   if (header->reserved1 != 0) x = -12; else x = -13;
+
+   handle_rbuf(&params, buf);
+   return x;
+}
+
+__attribute__((noinline))
+static int test_app_proto_icmp(int did)
+{
+   door_arg_t params;
+   char buf[16384];
+
+   /* Set call parameters. */
+   nss_pheader_t *header = (nss_pheader_t *) buf;
+   header->nsc_callnumber = NSCD_SEARCH;
+   header->p_ruid = getuid();
+   header->p_euid = geteuid();
+   header->p_version = NSCD_HEADER_REV;
+   header->p_status = 0;
+   header->p_errno = 0;
+   header->p_herrno = 0;
+   header->libpriv = 0;
+   header->nss_dbop = NSS_DBOP_PROTOCOLS_BYNAME;
+
+   size_t name_len = strlen(NSS_DBNAM_PROTOCOLS);
+   size_t default_config_len = strlen(NSS_FILES_ONLY);
+   header->dbd_off = sizeof(nss_pheader_t);
+   header->dbd_len = sizeof(nss_dbd_t) + name_len + 1 + default_config_len + 1;
+   nss_dbd_t *dbd = (nss_dbd_t *) (buf + sizeof(nss_pheader_t));
+   dbd->o_name = sizeof(nss_dbd_t);
+   dbd->o_config_name = 0;
+   dbd->o_default_config = dbd->o_name + name_len + 1;
+   dbd->flags = 0;
+   strcpy(buf + header->dbd_off + dbd->o_name, NSS_DBNAM_PROTOCOLS);
+   strcpy(buf + header->dbd_off + dbd->o_default_config,
+          NSS_DEFCONF_PROTOCOLS);
+
+   name_len = strlen("icmp");
+   header->key_off = header->dbd_off + ROUND_UP(header->dbd_len, sizeof(nssuint_t));
+   header->key_len = name_len + 1;
+   strcpy(buf + header->key_off, "icmp");
+
+   header->data_off = header->key_off + ROUND_UP(header->key_len, sizeof(nssuint_t));
+   header->data_len = 0;
+   header->pbufsiz = header->data_off + header->data_len;
+
+   params.data_ptr = buf;
+   params.data_size = header->pbufsiz;
+   params.desc_ptr = NULL;
+   params.desc_num = 0;
+   params.rbuf = buf;
+   params.rsize = sizeof(buf);
+
+   /* Sanity checks on the nss_pheader_t header. */
+   assert(header->p_version == NSCD_HEADER_REV);
+   assert(header->dbd_off == sizeof(nss_pheader_t));
+   assert((params.data_size & 3) == 0);
+   assert((header->dbd_off & 3) == 0);
+   assert((header->key_off & 3) == 0);
+   assert((header->data_off & 3) == 0);
+   assert(header->data_off == params.data_size);
+   nssuint_t l1 = header->key_off - header-> dbd_off;
+   assert(l1 >= header->dbd_len);
+   nssuint_t l2 = header->data_off - header->key_off;
+   assert(l2 >= header->key_len);
+   assert(sizeof(nss_pheader_t) + l1 + l2 == header->data_off);
+   assert(header->data_off + header->data_len == header->pbufsiz);
+
+   /* Make the call. */
+   if (door_call(did, &params) != 0) {
+      return errno;
+   }
+
+   /* Print response attributes. */
+   HEADER(stdout, "app_proto_icmp");
+   printf("status=%u\n", header->p_status);
+   printf("errno=%u\n", header->p_errno);
+   printf("herrno=%u\n", header->p_herrno);
+   printf("bufsiz=%" PRIu64 "\n", header->pbufsiz);
+   printf("dbd_off=%" PRIu64 " dbd_len=%" PRIu64 "\n",
+          header->dbd_off, header->dbd_len);
+   printf("key_off=%" PRIu64 " key_len=%" PRIu64 "\n",
+          header->key_off, header->key_len);
+   printf("data_off=%" PRIu64 " data_len=%" PRIu64 "\n",
+          header->data_off, header->data_len);
+   printf("ext_off=%" PRIu64 " ext_len=%" PRIu64 "\n",
+          header->ext_off, header->ext_len);
+   printf("key=%s\n", buf + header->key_off);
+
+   /* Parse response proto data. */
+   char *p = buf + header->data_off;
+   char *limit = p + header->data_len;
+
+   while ((p < limit) && isspace(*p))
+      p++;
+   char *name_start = p;
+   while ((p < limit) && !isspace(*p))
+      p++; // skip over the name
+   name_len = p - name_start;
+
+   while ((p < limit) && isspace(*p))
+      p++;
+   char *number_start = p;
+   do {
+      p++; // skip over the proto number
+   } while ((p < limit) && !isspace(*p));
+   size_t number_len = p - number_start;
+
+   while ((p < limit) && isspace(*p))
+      p++;
+   char *aliases_start = p;
+   while ((p < limit) && !isspace(*p))
+      p++; // skip over the aliases
+   size_t aliases_len = p - aliases_start;
+
+   printf("data: name=%.*s number=%.*s aliases=%.*s\n",
+      (int) name_len, name_start, (int) number_len, number_start,
+      (int) aliases_len, aliases_start);
+
+   return handle_rbuf(&params, buf);
+}
+
+int main(int argc, const char *argv[])
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   int did = open(DOOR_FILE, O_RDONLY);
+   if (did < 0) {
+      perror("open " DOOR_FILE);
+      fprintf(stderr, "Make sure the name service switch daemon (nscd) "
+              "is running.\n");
+      return 1;
+   }
+
+   struct door_info info;
+   if (door_info(did, &info) != 0) {
+      perror("door_info " DOOR_FILE);
+      close(did);
+      return 1;
+   }
+
+   HEADER(stderr, "app_small_request");
+   test_app_small_request(did);
+
+   HEADER(stderr, "app_uninitialized_request");
+   test_app_uninitialized_request(did);
+
+   HEADER(stderr, "app_proto_icmp");
+   test_app_proto_icmp(did);
+
+   close(did);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/name_service_door.stderr.exp-amd64 b/memcheck/tests/solaris/name_service_door.stderr.exp-amd64
new file mode 100644
index 0000000..9ee4bd9
--- /dev/null
+++ b/memcheck/tests/solaris/name_service_door.stderr.exp-amd64
@@ -0,0 +1,146 @@
+---------------------------------------------------------
+app_small_request
+---------------------------------------------------------
+Syscall param door_call(".../name_service_door", nss_pheader->nsc_callnumber) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 0 bytes inside a block of size 4 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->p_version) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 12 bytes after a block of size 4 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->dbd_off) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 32 bytes before an unallocated block of size 4,194,048 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->dbd_len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 24 bytes before an unallocated block of size 4,194,048 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->key_off) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 16 bytes before an unallocated block of size 4,194,048 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->key_len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 8 bytes before an unallocated block of size 4,194,048 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->data_off) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 0 bytes inside an unallocated block of size 4,194,048 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->data_len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 8 bytes inside an unallocated block of size 4,194,048 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->pbufsiz) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 24 bytes after a block of size 16 in arena "client"
+
+Syscall param door_call(".../name_service_door", pbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 0 bytes after a block of size 4 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_dbd) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 4,194,033 bytes inside an unallocated block of size 4,194,048 in arena "client"
+
+---------------------------------------------------------
+app_uninitialized_request
+---------------------------------------------------------
+Syscall param door_call(".../name_service_door", nss_pheader->nsc_callnumber) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 0 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->p_version) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 16 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->dbd_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 48 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->dbd_len) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 56 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->key_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 64 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->key_len) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 72 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->data_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 80 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->data_len) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 88 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->pbufsiz) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 40 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", pbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 0 bytes after a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_dbd) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 128 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_dbd->o_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 20 bytes inside an unallocated block of size 4,193,840 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_dbd->o_config_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 20 bytes inside an unallocated block of size 4,193,840 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_dbd->o_default_config) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 20 bytes inside an unallocated block of size 4,193,840 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss->key) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 0 bytes after a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+---------------------------------------------------------
+app_proto_icmp
+---------------------------------------------------------
diff --git a/memcheck/tests/solaris/name_service_door.stderr.exp-x86 b/memcheck/tests/solaris/name_service_door.stderr.exp-x86
new file mode 100644
index 0000000..455f9b7
--- /dev/null
+++ b/memcheck/tests/solaris/name_service_door.stderr.exp-x86
@@ -0,0 +1,136 @@
+---------------------------------------------------------
+app_small_request
+---------------------------------------------------------
+Syscall param door_call(".../name_service_door", nss_pheader->nsc_callnumber) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 0 bytes inside a block of size 4 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->p_version) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 12 bytes after a block of size 4 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->dbd_off) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 8 bytes before an unallocated block of size 4,194,128 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->dbd_len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 0 bytes inside an unallocated block of size 4,194,128 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->key_off) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 8 bytes inside an unallocated block of size 4,194,128 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->key_len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 16 bytes inside an unallocated block of size 4,194,128 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->data_off) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 24 bytes inside an unallocated block of size 4,194,128 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->data_len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 32 bytes inside an unallocated block of size 4,194,128 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_pheader->pbufsiz) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 16 bytes before an unallocated block of size 4,194,128 in arena "client"
+
+---------------------------------------------------------
+app_uninitialized_request
+---------------------------------------------------------
+Syscall param door_call(".../name_service_door", nss_pheader->nsc_callnumber) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 0 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->p_version) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 16 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->dbd_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 48 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->dbd_len) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 56 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->key_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 64 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->key_len) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 72 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->data_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 80 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->data_len) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 88 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_pheader->pbufsiz) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 40 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", pbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 0 bytes after a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_dbd) points to uninitialised byte(s)
+   ...
+ Address 0x........ is 128 bytes inside a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Syscall param door_call(".../name_service_door", nss_dbd->o_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 36 bytes inside an unallocated block of size 4,193,936 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_dbd->o_config_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 36 bytes inside an unallocated block of size 4,193,936 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss_dbd->o_default_config) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 36 bytes inside an unallocated block of size 4,193,936 in arena "client"
+
+Syscall param door_call(".../name_service_door", nss->key) points to unaddressable byte(s)
+   ...
+ Address 0x........ is 0 bytes after a block of size 144 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+---------------------------------------------------------
+app_proto_icmp
+---------------------------------------------------------
diff --git a/memcheck/tests/solaris/name_service_door.stdout.exp b/memcheck/tests/solaris/name_service_door.stdout.exp
new file mode 100644
index 0000000..8ad8b72
--- /dev/null
+++ b/memcheck/tests/solaris/name_service_door.stdout.exp
@@ -0,0 +1,13 @@
+---------------------------------------------------------
+app_proto_icmp
+---------------------------------------------------------
+status=0
+errno=0
+herrno=0
+bufsiz=16384
+dbd_off=128 dbd_len=32
+key_off=160 key_len=5
+data_off=168 data_len=12
+ext_off=0 ext_len=0
+key=icmp
+data: name=icmp number=1 aliases=ICMP
diff --git a/memcheck/tests/solaris/name_service_door.vgtest b/memcheck/tests/solaris/name_service_door.vgtest
new file mode 100644
index 0000000..17ab5cb
--- /dev/null
+++ b/memcheck/tests/solaris/name_service_door.vgtest
@@ -0,0 +1,7 @@
+# Tests door wrapper of name switch cache daemon (nscd).
+# The nscd must be running and its door attached.
+prereq: test -e /system/volatile/name_service_door -o -e /var/run/name_service_door
+prog: name_service_door
+vgopts: -q
+stderr_filter: filter_name_service_door
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/pkcs11.c b/memcheck/tests/solaris/pkcs11.c
new file mode 100644
index 0000000..9fed347
--- /dev/null
+++ b/memcheck/tests/solaris/pkcs11.c
@@ -0,0 +1,64 @@
+/* Test for PKCS#11 calls. */ 
+
+#include <stdio.h>
+#include <security/cryptoki.h>
+#include <security/pkcs11.h>
+
+int main(void)
+{
+   CK_RV ret = C_Initialize(NULL);
+   if (ret != CKR_OK) {
+      fprintf(stderr, "Initialize: %lu\n", ret);
+      return 1;
+   }
+
+   CK_ULONG slot_count;
+   ret = C_GetSlotList(0, NULL, &slot_count);
+   if (ret != CKR_OK) {
+      fprintf(stderr, "GetSlotList(NULL): %lu\n", ret);
+      return 1;
+   }
+
+   CK_SLOT_ID_PTR slots = malloc(slot_count * sizeof(CK_SLOT_ID));
+   if (slots == NULL) {
+      fprintf(stderr, "malloc(slots)\n");
+      return 1;
+   }
+
+   ret = C_GetSlotList(0, slots, &slot_count);
+   if (ret != CKR_OK) {
+      fprintf(stderr, "GetSlotList(slots): %lu\n", ret);
+      return 1;
+   }
+
+   CK_ULONG i;
+   for (i = 0; i < slot_count; i++) {
+      CK_SLOT_ID slot_id = slots[i];
+
+      CK_ULONG mech_count;
+      ret = C_GetMechanismList(slot_id, NULL, &mech_count);
+      if (ret != CKR_OK) {
+         fprintf(stderr, "GetMechanismList(NULL): %lu\n", ret);
+         return 1;
+      }
+
+      CK_MECHANISM_TYPE_PTR mechs = malloc(mech_count * sizeof(CK_MECHANISM_TYPE));
+      if (slots == NULL) {
+         fprintf(stderr, "malloc(mechs)\n");
+         return 1;
+      }
+
+      ret = C_GetMechanismList(slot_id, mechs, &mech_count);
+      if (ret != CKR_OK) {
+         fprintf(stderr, "GetMechanismList(mechs): %lu\n", ret);
+         return 1;
+      }
+
+      free(mechs);
+   }
+
+   free(slots);
+   C_Finalize(NULL_PTR);
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/pkcs11.stderr.exp-illumos b/memcheck/tests/solaris/pkcs11.stderr.exp-illumos
new file mode 100644
index 0000000..03976f6
--- /dev/null
+++ b/memcheck/tests/solaris/pkcs11.stderr.exp-illumos
@@ -0,0 +1,6 @@
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/pkcs11.stderr.exp-solaris
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/pkcs11.stderr.exp-solaris
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/pkcs11.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/pkcs11.stdout.exp
diff --git a/memcheck/tests/solaris/pkcs11.vgtest b/memcheck/tests/solaris/pkcs11.vgtest
new file mode 100644
index 0000000..a887d63
--- /dev/null
+++ b/memcheck/tests/solaris/pkcs11.vgtest
@@ -0,0 +1,3 @@
+prog: pkcs11
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar.c b/memcheck/tests/solaris/scalar.c
new file mode 100644
index 0000000..211b39b
--- /dev/null
+++ b/memcheck/tests/solaris/scalar.c
@@ -0,0 +1,2532 @@
+/* Basic syscall test, see memcheck/tests/x86-linux/scalar.c for more info. */
+
+#include "scalar.h"
+
+#include <bsm/audit.h>
+#include <nfs/nfs.h>
+#include <nfs/nfssys.h>
+#include <sys/acl.h>
+#include <sys/door.h>
+#include <sys/fcntl.h>
+#include <sys/lwp.h>
+#include <sys/mman.h>
+#include <sys/mount.h>
+#include <sys/port_impl.h>
+#include <sys/priocntl.h>
+#include <sys/priv.h>
+#include <sys/sem_impl.h>
+#include <sys/sendfile.h>
+#include <sys/shm_impl.h>
+#include <sys/termios.h>
+#include <sys/ucontext.h>
+#include <sys/utsname.h>
+#include <sys/tsol/tndb.h>
+#include <sys/tsol/tsyscall.h>
+
+/* Helper functions.  These are necessary if we've got two tests for a single
+   syscall.  In that case, Memcheck can sometimes merge error messages.  Doing
+   each test in its own function prevents that. */
+__attribute__((noinline))
+static void sys_mount(void)
+{
+   GO(SYS_mount, "(4-arg, table variant) 4s 2m");
+   SY(SYS_mount, x0 + 1, x0, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_mount2(void)
+{
+   GO(SYS_mount, "(4-arg) 4s 3m");
+   SY(SYS_mount, x0 + 1, x0, x0, x0 + 256); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_mount3(void)
+{
+   GO(SYS_mount, "(6-arg) 6s 4m");
+   SY(SYS_mount, x0 + 1, x0, x0 | MS_DATA, x0 + 256, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_mount4(void)
+{
+   GO(SYS_mount, "(8-arg) 8s 5m");
+   SY(SYS_mount, x0 + 1, x0, x0 | MS_OPTIONSTR, x0 + 256, x0 + 1, x0 + 1,
+                 x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pgrpsys(void)
+{
+   GO(SYS_pgrpsys, "(GETPGRP) 1s 0m");
+   SY(SYS_pgrpsys, x0); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_pgrpsys2(void)
+{
+   GO(SYS_pgrpsys, "(GETSID) 2s 0m");
+   SY(SYS_pgrpsys, x0 + 2, x0); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_pgrpsys3(void)
+{
+   GO(SYS_pgrpsys, "(GETPGID) 2s 0m");
+   SY(SYS_pgrpsys, x0 + 4, x0); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_shmsys(void)
+{
+   GO(SYS_shmsys, "(SHMAT) 4s 0m");
+   SY(SYS_shmsys, x0 + SHMAT, x0, x0 - 1, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys2(void)
+{
+   GO(SYS_shmsys, "(SHMCTL,SHM_LOCK) 3s 0m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + SHM_LOCK); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys3(void)
+{
+   GO(SYS_shmsys, "(SHMCTL,SHM_UNLOCK) 3s 0m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + SHM_UNLOCK); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys4(void)
+{
+   GO(SYS_shmsys, "(SHMCTL,IPC_RMID) 3s 0m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + IPC_RMID); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys5(void)
+{
+   GO(SYS_shmsys, "(SHMCTL,IPC_SET) 4s 3m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + IPC_SET, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys6(void)
+{
+   struct shmid_ds buf;
+   buf.shm_perm.uid = x0 + 1;
+   buf.shm_perm.gid = x0 + 1;
+   buf.shm_perm.mode = x0 + 1;
+
+   GO(SYS_shmsys, "(SHMCTL,IPC_SET) 6s 0m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + IPC_SET, &buf); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys7(void)
+{
+   GO(SYS_shmsys, "(SHMCTL,IPC_STAT) 4s 1m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + IPC_STAT, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys8(void)
+{
+   GO(SYS_shmsys, "(SHMCTL,IPC_SET64) 4s 3m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + IPC_SET64, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys9(void)
+{
+   struct shmid_ds64 buf;
+   buf.shmx_perm.ipcx_uid = x0 + 1;
+   buf.shmx_perm.ipcx_gid = x0 + 1;
+   buf.shmx_perm.ipcx_mode = x0 + 1;
+
+   GO(SYS_shmsys, "(SHMCTL,IPC_SET64) 6s 0m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + IPC_SET64, &buf); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys10(void)
+{
+   GO(SYS_shmsys, "(SHMCTL,IPC_STAT64) 4s 1m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + IPC_STAT64, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys11(void)
+{
+   GO(SYS_shmsys, "(SHMDT) 2s 0m");
+   SY(SYS_shmsys, x0 + SHMDT, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys12(void)
+{
+   GO(SYS_shmsys, "(SHMGET) 4s 0m");
+   SY(SYS_shmsys, x0 + SHMGET, x0, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys13(void)
+{
+   GO(SYS_shmsys, "(SHMIDS) 4s 2m");
+   SY(SYS_shmsys, x0 + SHMIDS, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys(void)
+{
+   GO(SYS_semsys, "(SEMCTL,IPC_STAT) 5s 1m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + IPC_STAT, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys2(void)
+{
+   GO(SYS_semsys, "(SEMCTL,IPC_SET) 5s 1m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + IPC_SET, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys3(void)
+{
+   GO(SYS_semsys, "(SEMCTL,IPC_STAT64) 5s 1m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + IPC_STAT64, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys4(void)
+{
+   GO(SYS_semsys, "(SEMCTL,IPC_SET64) 5s 1m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + IPC_SET64, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys5(void)
+{
+   GO(SYS_semsys, "(SEMCTL,IPC_RMID) 3s 0m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + IPC_RMID); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys6(void)
+{
+   GO(SYS_semsys, "(SEMCTL,GETALL) 4s 0m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + GETALL, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys7(void)
+{
+   GO(SYS_semsys, "(SEMCTL,SETALL) 4s 0m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + SETALL, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys8(void)
+{
+   GO(SYS_semsys, "(SEMCTL,GETVAL) 4s 0m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + GETVAL); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys9(void)
+{
+   GO(SYS_semsys, "(SEMCTL,SETVAL) 5s 0m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + SETVAL, x0 + 2); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys10(void)
+{
+   GO(SYS_semsys, "(SEMCTL,GETPID) 4s 0m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + GETPID); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys11(void)
+{
+   GO(SYS_semsys, "(SEMCTL,GETNCNT) 4s 0m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + GETNCNT); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys12(void)
+{
+   GO(SYS_semsys, "(SEMCTL,GETZCNT) 4s 0m");
+   SY(SYS_semsys, x0 + SEMCTL, x0, x0, x0 + GETZCNT); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys13(void)
+{
+   GO(SYS_semsys, "(SEMGET) 4s 0m");
+   SY(SYS_semsys, x0 + SEMGET, x0, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys14(void)
+{
+   GO(SYS_semsys, "(SEMOP) 4s 1m");
+   SY(SYS_semsys, x0 + SEMOP, x0, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys15(void)
+{
+   GO(SYS_semsys, "(SEMIDS) 4s 2m");
+   SY(SYS_semsys, x0 + SEMIDS, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_semsys16(void)
+{
+   GO(SYS_semsys, "(SEMTIMEDOP) 5s 2m");
+   SY(SYS_semsys, x0 + SEMTIMEDOP, x0, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_fcntl(void)
+{
+   GO(SYS_fcntl, "(GETFD) 2s 0m");
+   SY(SYS_fcntl, x0 - 1, x0 + F_GETFD); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_fcntl2(void)
+{
+   GO(SYS_fcntl, "(DUPFD) 3s 0m");
+   SY(SYS_fcntl, x0 - 1, x0 + F_DUPFD, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_fcntl3(void)
+{
+   GO(SYS_fcntl, "(GETLK) 3s 5m");
+   SY(SYS_fcntl, x0 - 1, x0 + F_GETLK, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_openat(void)
+{
+   GO(SYS_openat, "(3-args) 3s 1m");
+   SY(SYS_openat, x0 - 1, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_openat2(void)
+{
+   GO(SYS_openat, "(4-args) 4s 1m");
+   SY(SYS_openat, x0 - 1, x0, x0 | O_CREAT, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_tasksys(void)
+{
+   GO(SYS_tasksys, "(settaskid) 3s 0m");
+   SY(SYS_tasksys, x0 + 0, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_tasksys2(void)
+{
+   GO(SYS_tasksys, "(gettaskid) 1s 0m");
+   SY(SYS_tasksys, x0 + 1); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_tasksys3(void)
+{
+   GO(SYS_tasksys, "(getprojid) 1s 0m");
+   SY(SYS_tasksys, x0 + 2); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_tasksys4(void)
+{
+   GO(SYS_tasksys, "(projlist) 3s 1m");
+   /* ARG2 and ARG3 are ignored */
+   SY(SYS_tasksys, x0 + 3, x0, x0, x0 + 1, x0 + 2); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_sendfilev(void)
+{
+   GO(SYS_sendfilev, "(SENDFILEV) 5s 2m");
+   SY(SYS_sendfilev, x0 + SENDFILEV, x0 - 1, x0 + 1, x0 + 2, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_sendfilev2(void)
+{
+   struct sendfilevec vec[2];
+   vec[0].sfv_fd = SFV_FD_SELF;
+   vec[0].sfv_off = (off_t)(x0 + 1);
+   vec[0].sfv_len = x0 + 1;
+   vec[0].sfv_flag = 0; // should be set to zero according to man page
+   vec[1].sfv_fd = x0 - 1;
+   vec[1].sfv_off = x0;
+   vec[1].sfv_len = x0 + 1;
+   vec[1].sfv_flag = 0; // should be set to zero according to man page
+
+   GO(SYS_sendfilev, "(SENDFILEV) 4s 2m");
+   SY(SYS_sendfilev, x0 + SENDFILEV, x0 - 1, vec, 2, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_sendfilev3(void)
+{
+   GO(SYS_sendfilev, "(SENDFILEV64) 5s 2m");
+   SY(SYS_sendfilev, x0 + SENDFILEV64, x0 - 1, x0 + 1, x0 + 2, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_sendfilev4(void)
+{
+   struct sendfilevec64 vec[2];
+   vec[0].sfv_fd = SFV_FD_SELF;
+   vec[0].sfv_off = (off_t)(x0 + 1);
+   vec[0].sfv_len = x0 + 1;
+   vec[0].sfv_flag = 0; // should be set to zero according to man page
+   vec[1].sfv_fd = x0 - 1;
+   vec[1].sfv_off = x0;
+   vec[1].sfv_len = x0 + 1;
+   vec[1].sfv_flag = 0; // should be set to zero according to man page
+
+   GO(SYS_sendfilev, "(SENDFILEV64) 4s 2m");
+   SY(SYS_sendfilev, x0 + SENDFILEV64, x0 - 1, vec, 2, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_privsys(void)
+{
+   GO(SYS_privsys, "(PRIVSYS_SETPPRIV) 5s 1m");
+   SY(SYS_privsys, x0 + PRIVSYS_SETPPRIV, x0, x0, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_privsys2(void)
+{
+   GO(SYS_privsys, "(PRIVSYS_GETPPRIV) 5s 1m");
+   SY(SYS_privsys, x0 + PRIVSYS_GETPPRIV, x0, x0, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_privsys3(void)
+{
+   GO(SYS_privsys, "(PRIVSYS_GETIMPLINFO) 5s 1m");
+   SY(SYS_privsys, x0 + PRIVSYS_GETIMPLINFO, x0, x0, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_privsys4(void)
+{
+   GO(SYS_privsys, "(PRIVSYS_SETPFLAGS) 3s 0m");
+   SY(SYS_privsys, x0 + PRIVSYS_SETPFLAGS, x0, x0 + 2); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_privsys5(void)
+{
+   GO(SYS_privsys, "(PRIVSYS_GETPFLAGS) 2s 0m");
+   SY(SYS_privsys, x0 + PRIVSYS_GETPFLAGS, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_privsys6(void)
+{
+   GO(SYS_privsys, "(PRIVSYS_ISSETUGID) 1s 0m");
+   SY(SYS_privsys, x0 + PRIVSYS_ISSETUGID); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_privsys7(void)
+{
+   GO(SYS_privsys, "(PRIVSYS_PFEXEC_REG) 2s 0m");
+   SY(SYS_privsys, x0 + PRIVSYS_PFEXEC_REG, x0 - 1); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_privsys8(void)
+{
+   GO(SYS_privsys, "(PRIVSYS_PFEXEC_UNREG) 2s 0m");
+   SY(SYS_privsys, x0 + PRIVSYS_PFEXEC_UNREG, x0 - 1); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_ucredsys(void)
+{
+   GO(SYS_ucredsys, "(UCREDSYS_UCREDGET) 3s 1m");
+   SY(SYS_ucredsys, x0 + 0, x0, x0 + 1 ); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ucredsys2(void)
+{
+   GO(SYS_ucredsys, "(UCREDSYS_GETPEERUCRED) 3s 1m");
+   SY(SYS_ucredsys, x0 + 1, x0 - 1, x0 + 1 ); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_context(void)
+{
+   GO(SYS_context, "(GETCONTEXT) 2s 1m");
+   SY(SYS_context, x0 + GETCONTEXT, x0); FAILx(EFAULT);
+}
+
+__attribute__((noinline))
+static void sys_context2(void)
+{
+   /* The setcontext() wrapper has to call ML_(safe_to_deref) before doing the
+      PRE_READ_*() stuff, therefore the 0m parameter. */
+   GO(SYS_context, "(SETCONTEXT) 2s 0m");
+   SY(SYS_context, x0 + SETCONTEXT, x0 + 1); FAILx(EFAULT);
+}
+
+__attribute__((noinline))
+static void sys_context3(void)
+{
+   GO(SYS_context, "(GETUSTACK) 2s 1m");
+   SY(SYS_context, x0 + GETUSTACK, x0); FAILx(EFAULT);
+}
+
+__attribute__((noinline))
+static void sys_context4(void)
+{
+   GO(SYS_context, "(SETUSTACK) 2s 1m");
+   SY(SYS_context, x0 + SETUSTACK, x0); FAILx(EFAULT);
+}
+
+__attribute__((noinline))
+static void sys_statvfs(void)
+{
+   GO(SYS_statvfs, "2s 2m");
+   SY(SYS_statvfs, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static int sys_statvfs2(void)
+{
+   const char path[] = "/";
+   struct statvfs stats;
+
+   GO(SYS_statvfs, "4s 0m");
+   SY(SYS_statvfs, x0 + path, x0 + &stats); SUCC;
+
+   size_t basetype_len = strlen(stats.f_basetype);
+   size_t fstr_len = strlen(stats.f_fstr);
+
+   /* Now check that memory after the strings is reported uninitialized. */
+   int x = 0;
+   if (stats.f_basetype[basetype_len + 2] != ' ') x = -1; else x = -2;
+   if (stats.f_fstr[fstr_len + 2] != ' ') x = -3; else x = -4;
+   return x;
+}
+
+__attribute__((noinline))
+static void sys_nfssys(void)
+{
+   GO(SYS_nfssys, "(NFS_REVAUTH) 2s 1m");
+   SY(SYS_nfssys, x0 + NFS_REVAUTH, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys(void)
+{
+   pcinfo_t pcinfo;
+   pcinfo.pc_clname[0] = x0 + 'T';
+   pcinfo.pc_clname[1] = x0 + 'S';
+   pcinfo.pc_clname[2] = x0;
+
+   GO(SYS_priocntlsys, "(GETCID) 6s 0m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_GETCID, x0 + &pcinfo, x0); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys2(void)
+{
+   pcinfo_t pcinfo;
+   pcinfo.pc_cid = x0 + 1;
+
+   GO(SYS_priocntlsys, "(GETCLINFO) 6s 0m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_GETCLINFO, x0 + &pcinfo, x0); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys3(void)
+{
+   GO(SYS_priocntlsys, "(SETPARMS) 5s 2m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_SETPARMS, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys4(void)
+{
+   GO(SYS_priocntlsys, "(GETPARMS) 5s 2m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_GETPARMS, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys5(void)
+{
+   GO(SYS_priocntlsys, "(GETPRIRANGE) 5s 2m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_GETPRIRANGE, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys6(void)
+{
+   GO(SYS_priocntlsys, "(DONICE) 5s 2m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_DONICE, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys7(void)
+{
+   GO(SYS_priocntlsys, "(SETXPARMS) 5s 3m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_SETXPARMS, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys8(void)
+{
+   GO(SYS_priocntlsys, "(GETXPARMS) 5s 3m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_GETXPARMS, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys9(void)
+{
+   GO(SYS_priocntlsys, "(SETDFLCL) 5s 1m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_SETDFLCL, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys10(void)
+{
+   GO(SYS_priocntlsys, "(GETDFLCL) 5s 1m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_GETDFLCL, x0 + 1, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_priocntlsys11(void)
+{
+   GO(SYS_priocntlsys, "(DOPRIO) 5s 2m");
+   SY(SYS_priocntlsys, x0 + 1, x0, x0 + PC_DOPRIO, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_uname(void)
+{
+   GO(SYS_uname, "1s 1m");
+   SY(SYS_uname, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static int sys_uname2(void)
+{
+   struct utsname name;
+
+   GO(SYS_uname, "6s 0m");
+   SY(SYS_uname, x0 + &name); SUCC;
+
+   size_t sysname_len = strlen(name.sysname);
+   size_t nodename_len = strlen(name.nodename);
+   size_t release_len = strlen(name.release);
+   size_t version_len = strlen(name.version);
+   size_t machine_len = strlen(name.machine);
+
+   /* Now check that memory after the strings is reported uninitialized. */
+   int x = 0;
+   if (name.sysname[sysname_len + 2] != ' ') x = -1; else x = -2;
+   if (name.nodename[nodename_len + 2] != ' ') x = -3; else x = -4;
+   if (name.release[release_len + 2] != ' ') x = -5; else x = -6;
+   if (name.version[version_len + 2] != ' ') x = -7; else x = -8;
+   if (name.machine[machine_len + 2] != ' ') x = -9; else x = -10;
+   return x;
+}
+
+__attribute__((noinline))
+static void sys_rusagesys(void)
+{
+   GO(SYS_rusagesys, "(_RUSAGESYS_GETRUSAGE) 2s 1m");
+   SY(SYS_rusagesys, x0 + _RUSAGESYS_GETRUSAGE, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_rusagesys2(void)
+{
+   GO(SYS_rusagesys, "(_RUSAGESYS_GETRUSAGE_CHLD) 2s 1m");
+   SY(SYS_rusagesys, x0 + _RUSAGESYS_GETRUSAGE_CHLD, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_rusagesys3(void)
+{
+   GO(SYS_rusagesys, "(_RUSAGESYS_GETRUSAGE_LWP) 2s 1m");
+   SY(SYS_rusagesys, x0 + _RUSAGESYS_GETRUSAGE_LWP, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_rusagesys4(void)
+{
+   GO(SYS_rusagesys, "(_RUSAGESYS_GETVMUSAGE) 5s 1m");
+   SY(SYS_rusagesys, x0 + _RUSAGESYS_GETVMUSAGE, x0, x0, x0 + 1, x0 + 1);
+   FAIL;
+}
+
+__attribute__((noinline))
+static void sys_rusagesys5(void)
+{
+   size_t nres = 10;
+
+   GO(SYS_rusagesys, "(_RUSAGESYS_GETVMUSAGE) 5s 1m");
+   SY(SYS_rusagesys, x0 + _RUSAGESYS_GETVMUSAGE, x0, x0, x0 + 1, x0 + &nres);
+   FAIL;
+}
+
+__attribute__((noinline))
+static void sys_port(void)
+{
+   GO(SYS_port, "(PORT_CREATE) 1s 0m");
+   SY(SYS_port, (x0 + PORT_CREATE) | PORT_SYS_NOPORT); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_port2(void)
+{
+   GO(SYS_port, "(PORT_ASSOCIATE,PORT_SOURCE_FD) 6s 0m");
+   SY(SYS_port, x0 + PORT_ASSOCIATE, x0 - 1, x0 + PORT_SOURCE_FD, x0, x0,
+                x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_port3(void)
+{
+   GO(SYS_port, "(PORT_ASSOCIATE,PORT_SOURCE_FILE) 6s 1m");
+   SY(SYS_port, x0 + PORT_ASSOCIATE, x0 - 1, x0 + PORT_SOURCE_FILE, x0, x0,
+                x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_port4(void)
+{
+   GO(SYS_port, "(PORT_DISSOCIATE,PORT_SOURCE_FD) 6s 0m");
+   SY(SYS_port, x0 + PORT_DISSOCIATE, x0 - 1, x0 + PORT_SOURCE_FD, x0, x0,
+                x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_port5(void)
+{
+   GO(SYS_port, "(PORT_DISSOCIATE,PORT_SOURCE_FILE) 6s 1m");
+   SY(SYS_port, x0 + PORT_DISSOCIATE, x0 - 1, x0 + PORT_SOURCE_FILE, x0, x0,
+                x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_port6(void)
+{
+   GO(SYS_port, "(PORT_SEND) 4s 0m");
+   SY(SYS_port, x0 + PORT_SEND, x0 - 1, x0, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_port7(void)
+{
+   GO(SYS_port, "(PORT_SENDN) 6s 2m");
+   SY(SYS_port, (x0 + PORT_SENDN) | PORT_SYS_NOPORT, x0, x0, x0 + 1, x0,
+                x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_port8(void)
+{
+   GO(SYS_port, "(PORT_GET) 6s 1m");
+   SY(SYS_port, x0 + PORT_GET, x0 - 1, x0, x0, x0, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_port9(void)
+{
+   GO(SYS_port, "(PORT_GETN) 5s 2m");
+   SY(SYS_port, x0 + PORT_GETN, x0 - 1, x0, x0 + 1, x0, x0 + 1); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_port10(void)
+{
+   GO(SYS_port, "(PORT_ALERT) 5s 0m");
+   SY(SYS_port, x0 + PORT_ALERT, x0 - 1, x0, x0, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_port11(void)
+{
+   GO(SYS_port, "(PORT_DISPATCH) 6s 0m");
+   SY(SYS_port, x0 + PORT_DISPATCH, x0 - 1, x0, x0, x0, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_labelsys(void)
+{
+   GO(SYS_labelsys, "(TSOL_SYSLABELING) 1s 0m");
+   SY(SYS_labelsys, x0 + TSOL_SYSLABELING); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_labelsys2(void)
+{
+   GO(SYS_labelsys, "(TSOL_TNRH) 3s 1m");
+   SY(SYS_labelsys, x0 + TSOL_TNRH, x0 + TNDB_GET, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_labelsys3(void)
+{
+   GO(SYS_labelsys, "(TSOL_TNRHTP) 3s 1m");
+   SY(SYS_labelsys, x0 + TSOL_TNRHTP, x0 + TNDB_GET, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_labelsys4(void)
+{
+   GO(SYS_labelsys, "(TSOL_TNMLP) 3s 1m");
+   SY(SYS_labelsys, x0 + TSOL_TNMLP, x0 + TNDB_GET, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_labelsys5(void)
+{
+   GO(SYS_labelsys, "(TSOL_GETLABEL) 3s 2m");
+   SY(SYS_labelsys, x0 + TSOL_GETLABEL, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_labelsys6(void)
+{
+   GO(SYS_labelsys, "(TSOL_FGETLABEL) 3s 1m");
+   SY(SYS_labelsys, x0 + TSOL_FGETLABEL, x0 - 1, x0 + 1); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_acl(void)
+{
+   GO(SYS_acl, "(SETACL) 4s 2m");
+   SY(SYS_acl, x0, x0 + SETACL, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_acl2(void)
+{
+   GO(SYS_acl, "(GETACL) 4s 2m");
+   SY(SYS_acl, x0, x0 + GETACL, x0 + 1, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_acl3(void)
+{
+   GO(SYS_acl, "(GETACLCNT) 4s 1m");
+   SY(SYS_acl, x0, x0 + GETACLCNT, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_acl4(void)
+{
+   GO(SYS_acl, "(ACE_SETACL) 4s 2m");
+   SY(SYS_acl, x0, x0 + ACE_SETACL, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_acl5(void)
+{
+   GO(SYS_acl, "(ACE_GETACL) 4s 2m");
+   SY(SYS_acl, x0, x0 + ACE_GETACL, x0 + 1, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_acl6(void)
+{
+   GO(SYS_acl, "(ACE_GETACLCNT) 4s 1m");
+   SY(SYS_acl, x0, x0 + ACE_GETACLCNT, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys(void)
+{
+   GO(SYS_auditsys, "(BSM_GETAUID) 2s 1m");
+   SY(SYS_auditsys, x0 + BSM_GETAUID, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys2(void)
+{
+   GO(SYS_auditsys, "(BSM_SETAUID) 2s 1m");
+   SY(SYS_auditsys, x0 + BSM_SETAUID, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys3(void)
+{
+   GO(SYS_auditsys, "(BSM_GETAUDIT) 2s 1m");
+   SY(SYS_auditsys, x0 + BSM_GETAUDIT, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys4(void)
+{
+   GO(SYS_auditsys, "(BSM_SETAUDIT) 2s 1m");
+   SY(SYS_auditsys, x0 + BSM_SETAUDIT, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys5(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDIT) 3s 1m");
+   /* The following syscall can succeed if auditing is not enabled. */
+   SY(SYS_auditsys, x0 + BSM_AUDIT, x0, x0 + 1); /*FAIL;*/
+}
+
+__attribute__((noinline))
+static void sys_auditsys6(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETPOLICY) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETPOLICY, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys7(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETPOLICY) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETPOLICY, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys8(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETKMASK) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETKMASK, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys9(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETKMASK) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETKMASK, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys10(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETQCTRL) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETQCTRL, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys11(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETQCTRL) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETQCTRL, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys12(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETCWD) 4s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETCWD, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys13(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETCAR) 4s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETCAR, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys14(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETSTAT) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETSTAT, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys15(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETSTAT) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETSTAT, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys16(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETUMASK) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETUMASK, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys17(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETSMASK) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETSMASK, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys18(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETCOND) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETCOND, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys19(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETCOND) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETCOND, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys20(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETCLASS) 3s 0m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETCLASS, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys21(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETCLASS) 3s 0m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETCLASS, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys22(void)
+{
+   au_evclass_map_t classmap;
+   classmap.ec_number = x0;
+   classmap.ec_class = x0;
+
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETCLASS) 4s 0m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETCLASS, &classmap); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys23(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETPINFO) 3s 0m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETPINFO, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys24(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETPMASK) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETPMASK, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys25(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETPINFO_ADDR) 4s 0m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETPINFO_ADDR, x0,
+                    x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys26(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETKAUDIT) 4s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETKAUDIT, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys27(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETKAUDIT) 4s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETKAUDIT, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys28(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETAMASK) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETAMASK, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys29(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETAMASK) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETAMASK, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys30(void)
+{
+   GO(SYS_auditsys, "(BSM_GETAUDIT_ADDR) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_GETAUDIT_ADDR, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys31(void)
+{
+   GO(SYS_auditsys, "(BSM_SETAUDIT_ADDR) 3s 1m");
+   SY(SYS_auditsys, x0 + BSM_SETAUDIT_ADDR, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_auditsys32(void)
+{
+   GO(SYS_auditsys, "(BSM_AUDITDOOR) 2s 0m");
+   SY(SYS_auditsys, x0 + BSM_AUDITDOOR, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_timer_create(void)
+{
+   GO(SYS_timer_create, "3s 4m");
+   SY(SYS_timer_create, x0, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_timer_create2(void)
+{
+   struct sigevent evp;
+   evp.sigev_notify = x0 + SIGEV_THREAD;
+   evp.sigev_value.sival_ptr = (void *)(x0 + 1);
+
+   GO(SYS_timer_create, "5s 2m");
+   SY(SYS_timer_create, x0, &evp, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_facl(void)
+{
+   GO(SYS_facl, "(SETACL) 4s 1m");
+   SY(SYS_facl, x0 - 1, x0 + SETACL, x0 + 1, x0 + 1); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_facl2(void)
+{
+   GO(SYS_facl, "(GETACL) 4s 1m");
+   SY(SYS_facl, x0 - 1, x0 + GETACL, x0 + 1, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_facl3(void)
+{
+   GO(SYS_facl, "(GETACLCNT) 4s 0m");
+   SY(SYS_facl, x0 - 1, x0 + GETACLCNT, x0, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_facl4(void)
+{
+   GO(SYS_facl, "(ACE_SETACL) 4s 1m");
+   SY(SYS_facl, x0 - 1, x0 + ACE_SETACL, x0 + 1, x0 + 1); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_facl5(void)
+{
+   GO(SYS_facl, "(ACE_GETACL) 4s 1m");
+   SY(SYS_facl, x0 - 1, x0 + ACE_GETACL, x0 + 1, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_facl6(void)
+{
+   GO(SYS_facl, "(ACE_GETACLCNT) 4s 0m");
+   SY(SYS_facl, x0 - 1, x0 + ACE_GETACLCNT, x0, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_door(void)
+{
+   GO(SYS_door, "(DOOR_CREATE) 4s 0m");
+   SY(SYS_door, x0, x0, x0, x0, x0, x0 + DOOR_CREATE); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_door2(void)
+{
+   GO(SYS_door, "(DOOR_REVOKE) 2s 0m");
+   SY(SYS_door, x0, x0, x0, x0, x0, x0 + DOOR_REVOKE); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_door3(void)
+{
+   GO(SYS_door, "(DOOR_INFO) 3s 1m");
+   SY(SYS_door, x0, x0 - 1, x0, x0, x0, x0 + DOOR_INFO); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_door4(void)
+{
+   GO(SYS_door, "(DOOR_CALL) 3s 6m");
+   SY(SYS_door, x0 - 1, x0, x0, x0, x0, x0 + DOOR_CALL); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_door5(void)
+{
+   door_arg_t params;
+   params.data_ptr = (void *)(x0 + 1);
+   params.data_size = x0 + 1;
+   params.desc_ptr = (void *)(x0 + 1);
+   params.desc_num = x0 + 1;
+   params.rbuf = (void *)(x0 + 1);
+   params.rsize = x0 + 1;
+
+   GO(SYS_door, "(DOOR_CALL) 9s 2m");
+   SY(SYS_door, x0, x0 + &params, x0, x0, x0, x0 + DOOR_CALL); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset(void)
+{
+   GO(SYS_pset, "(CREATE) 2s 1m");
+   SY(SYS_pset, x0 + PSET_CREATE, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset2(void)
+{
+   GO(SYS_pset, "(DESTROY) 2s 0m");
+   SY(SYS_pset, x0 + PSET_DESTROY, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset3(void)
+{
+   GO(SYS_pset, "(ASSIGN) 4s 1m");
+   SY(SYS_pset, x0 + PSET_ASSIGN, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset4(void)
+{
+   GO(SYS_pset, "(INFO) 5s 3m");
+   SY(SYS_pset, x0 + PSET_INFO, x0 + 1, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset5(void)
+{
+   int type;
+   uint_t numcpus = x0 + 1;
+
+   GO(SYS_pset, "(INFO) 5s 1m");
+   SY(SYS_pset, x0 + PSET_INFO, x0 + 1, x0 + &type, x0 + &numcpus,
+      x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset6(void)
+{
+   GO(SYS_pset, "(BIND) 5s 1m");
+   SY(SYS_pset, x0 + PSET_BIND, x0 + 1, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset7(void)
+{
+   GO(SYS_pset, "(BIND_LWP) 5s 1m");
+   SY(SYS_pset, x0 + PSET_BIND_LWP, x0 + 1, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset8(void)
+{
+   GO(SYS_pset, "(GETLOADAVG) 4s 1m");
+   SY(SYS_pset, x0 + PSET_GETLOADAVG, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset9(void)
+{
+   GO(SYS_pset, "(LIST) 3s 1m");
+   SY(SYS_pset, x0 + PSET_LIST, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset10(void)
+{
+   uint_t numpsets = x0 + 1;
+
+   GO(SYS_pset, "(LIST) 3s 1m");
+   SY(SYS_pset, x0 + PSET_LIST, x0 + 1, x0 + &numpsets);
+}
+
+__attribute__((noinline))
+static void sys_pset11(void)
+{
+   GO(SYS_pset, "(SETATTR) 3s 0m");
+   SY(SYS_pset, x0 + PSET_SETATTR, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset12(void)
+{
+   GO(SYS_pset, "(GETATTR) 3s 1m");
+   SY(SYS_pset, x0 + PSET_GETATTR, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset13(void)
+{
+   GO(SYS_pset, "(ASSIGN_FORCED) 4s 1m");
+   SY(SYS_pset, x0 + PSET_ASSIGN_FORCED, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_lwp_rwlock(void)
+{
+   GO(SYS_lwp_rwlock_sys, "(RDLOCK) 3s 8m");
+   SY(SYS_lwp_rwlock_sys, x0, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_lwp_rwlock2(void)
+{
+   GO(SYS_lwp_rwlock_sys, "(WRLOCK) 3s 8m");
+   SY(SYS_lwp_rwlock_sys, x0 + 1, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_lwp_rwlock3(void)
+{
+   GO(SYS_lwp_rwlock_sys, "(TRYRDLOCK) 2s 7m");
+   SY(SYS_lwp_rwlock_sys, x0 + 2, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_lwp_rwlock4(void)
+{
+   GO(SYS_lwp_rwlock_sys, "(TRYWRLOCK) 2s 7m");
+   SY(SYS_lwp_rwlock_sys, x0 + 3, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_lwp_rwlock5(void)
+{
+   GO(SYS_lwp_rwlock_sys, "(UNLOCK) 2s 2m");
+   SY(SYS_lwp_rwlock_sys, x0 + 4, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone(void)
+{
+   GO(SYS_zone, "(ZONE_CREATE) 2s 12m");
+   SY(SYS_zone, x0 + ZONE_CREATE, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone2(void)
+{
+   zone_def zd;
+   zd.zone_name = (void *)(x0 + 1);
+   zd.zone_root = (void *)(x0 + 1);
+   zd.zone_privs = (void *)x0;
+   zd.zone_privssz = x0 + 1;
+   zd.rctlbuf = (void *)x0;
+   zd.rctlbufsz = x0 + 1;
+   zd.extended_error = (void *)x0;
+   zd.zfsbuf = (void *)x0;
+   zd.zfsbufsz = x0 + 1;
+   zd.match = x0;
+   zd.doi = x0;
+   zd.label = (void *)(x0 + 1);
+   zd.flags = x0;
+
+   GO(SYS_zone, "(create) 2s 19m");
+   SY(SYS_zone, x0 + ZONE_CREATE, x0 + &zd); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone3(void)
+{
+   GO(SYS_zone, "(ZONE_DESTROY) 2s 0m");
+   SY(SYS_zone, x0 + ZONE_DESTROY, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone4(void)
+{
+   GO(SYS_zone, "(ZONE_GETATTR) 5s 1m");
+   SY(SYS_zone, x0 + ZONE_GETATTR, x0, x0, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone5(void)
+{
+   GO(SYS_zone, "(ZONE_ENTER) 2s 0m");
+   SY(SYS_zone, x0 + ZONE_ENTER, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone6(void)
+{
+   GO(SYS_zone, "(ZONE_LIST) 3s 1m");
+   SY(SYS_zone, x0 + ZONE_LIST, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone7(void)
+{
+   uint_t numzones = x0 + 1;
+
+   GO(SYS_zone, "(ZONE_LIST) 3s 1m");
+   SY(SYS_zone, x0 + ZONE_LIST, x0 + 1, x0 + &numzones); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone8(void)
+{
+   GO(SYS_zone, "(ZONE_SHUTDOWN) 2s 0m");
+   SY(SYS_zone, x0 + ZONE_SHUTDOWN, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone9(void)
+{
+   GO(SYS_zone, "(ZONE_LOOKUP) 2s 1m");
+   SY(SYS_zone, x0 + ZONE_LOOKUP, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone10(void)
+{
+   GO(SYS_zone, "(ZONE_BOOT) 2s 0m");
+   SY(SYS_zone, x0 + ZONE_BOOT, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone11(void)
+{
+   GO(SYS_zone, "(ZONE_SETATTR) 5s 1m");
+   SY(SYS_zone, x0 + ZONE_SETATTR, x0, x0, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone12(void)
+{
+   GO(SYS_zone, "(ZONE_ADD_DATALINK) 3s 0m");
+   SY(SYS_zone, x0 + ZONE_ADD_DATALINK, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone13(void)
+{
+   GO(SYS_zone, "(ZONE_DEL_DATALINK) 3s 0m");
+   SY(SYS_zone, x0 + ZONE_DEL_DATALINK, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone14(void)
+{
+   GO(SYS_zone, "(ZONE_CHECK_DATALINK) 3s 1m");
+   SY(SYS_zone, x0 + ZONE_CHECK_DATALINK, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone15(void)
+{
+   GO(SYS_zone, "(ZONE_LIST_DATALINK) 4s 1m");
+   SY(SYS_zone, x0 + ZONE_LIST_DATALINK, x0, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone16(void)
+{
+   int dlnum = x0 + 1;
+
+   GO(SYS_zone, "(ZONE_LIST_DATALINK) 4s 1m");
+   SY(SYS_zone, x0 + ZONE_LIST_DATALINK, x0, x0 + &dlnum, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_getpeername(void)
+{
+   GO(SYS_getpeername, "4s 1m");
+   SY(SYS_getpeername, x0 - 1, x0 + 1, x0, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_getpeername2(void)
+{
+   socklen_t size = x0 + 10;
+
+   GO(SYS_getpeername, "4s 1m");
+   SY(SYS_getpeername, x0 - 1, x0 + 1, &size, x0); FAILx(EBADF);
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_syscall                 0 */
+   /* SPARC only. */
+
+   /* SYS_exit                    1 */
+   /* Tested below. */
+
+   /* SYS_read                    3 */
+   GO(SYS_read, "3s 0m");
+   SY(SYS_read, x0 - 1, x0, x0 + 1); FAILx(EBADF);
+   /* Note that above should be preferably "3s 1m" test.. */
+
+   /* SYS_write                   4 */
+   GO(SYS_write, "3s 1m");
+   SY(SYS_write, x0 + 1, x0, x0 + 1); FAIL;
+
+   /* SYS_open                    5 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_close                   6 */
+   GO(SYS_close, "1s 0m");
+   SY(SYS_close, x0 - 1); FAILx(EBADF);
+
+   /* SYS_linkat                  7 */
+   GO(SYS_linkat, "5s 2m");
+   SY(SYS_linkat, x0 - 1, x0 + 1, x0 - 1, x0 + 1, x0); FAIL;
+
+   /* SYS_link                    9 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_unlink                 10 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_symlinkat              11 */
+   GO(SYS_symlinkat, "3s 2m");
+   SY(SYS_symlinkat, x0 + 1, x0 - 1, x0 + 1); FAIL;
+
+   /* SYS_chdir                  12 */
+   GO(SYS_chdir, "1s 1m");
+   SY(SYS_chdir, x0); FAIL;
+
+   /* SYS_time                   13 */
+   GO(SYS_time, "0s 0m");
+   SY(SYS_time); SUCC;
+
+   /* SYS_mknod                  14 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_chmod                  15 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_chown                  16 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_brk                    17 */
+   GO(SYS_brk, "1s 0m");
+   SY(SYS_brk, x0); SUCC;
+
+   /* SYS_stat                   18 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_lseek                  19 */
+   GO(SYS_lseek, "3s 0m");
+   SY(SYS_lseek, x0 - 1, x0, x0); FAILx(EBADF);
+
+   /* SYS_getpid                 20 */
+   GO(SYS_getpid, "0s 0m");
+   SY(SYS_getpid); SUCC;
+
+   /* SYS_mount                  21 */
+   sys_mount();
+   sys_mount2();
+   sys_mount3();
+   sys_mount4();
+
+   /* SYS_readlinkat             22 */
+   GO(SYS_readlinkat, "4s 2m");
+   SY(SYS_readlinkat, x0 - 1, x0, x0, x0 + 1); FAIL;
+
+   /* SYS_setuid                 23 */
+   GO(SYS_setuid, "1s 0m");
+   SY(SYS_setuid, x0 - 1); FAIL;
+
+   /* SYS_getuid                 24 */
+   GO(SYS_getuid, "0s 0m");
+   SY(SYS_getuid); SUCC;
+
+   /* SYS_stime                  25 */
+   GO(SYS_stime, "1s 0m");
+   SY(SYS_stime, x0); FAIL;
+
+   /* SYS_pcsample               26 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_alarm                  27 */
+   GO(SYS_alarm, "1s 0m");
+   SY(SYS_alarm, x0); SUCC;
+
+   /* SYS_fstat                  28 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_pause                  29 */
+   /* Don't bother to test this. */
+   GO(SYS_pause, "ignore");
+
+   /* SYS_stty                   31 */
+   GO(SYS_stty, "2s 1m");
+   SY(SYS_stty, x0 - 1, x0 + 1); FAIL;
+
+   /* SYS_gtty                   32 */
+   GO(SYS_gtty, "2s 1m");
+   SY(SYS_gtty, x0 - 1, x0 + 1); FAIL;
+
+   /* SYS_access                 33 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_nice                   34 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_statfs                 35 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_sync                   36 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_kill                   37 */
+   GO(SYS_kill, "2s 0m");
+   SY(SYS_kill, x0, x0); SUCC;
+
+   /* SYS_fstatfs                38 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_pgrpsys                39 */
+   sys_pgrpsys();
+   sys_pgrpsys2();
+   sys_pgrpsys3();
+
+   /* SYS_uucopystr              40 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_pipe                   42 */
+   /* Don't bother to test this. */
+   GO(SYS_pipe, "ignore");
+
+   /* SYS_times                  43 */
+   GO(SYS_times, "1s 1m");
+   SY(SYS_times, x0 + 1); FAIL;
+
+   /* SYS_profil                 44 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_faccessat              45 */
+   GO(SYS_faccessat, "4s 1m");
+   SY(SYS_faccessat, x0 - 1, x0 + 1, x0, x0); FAIL;
+
+   /* SYS_setgid                 46 */
+   GO(SYS_setgid, "1s 0m");
+   SY(SYS_setgid, x0 - 1); FAIL;
+
+   /* SYS_getgid                 47 */
+   GO(SYS_getgid, "0s 0m");
+   SY(SYS_getgid); SUCC;
+
+   /* SYS_mknodat                48 */
+   GO(SYS_mknodat, "4s 1m");
+   SY(SYS_mknodat, x0 - 1, x0 + 1, x0, x0); FAIL;
+
+   /* SYS_msgsys                 49 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_sysi86                 50 */
+   /* TODO Add test. */
+   GO(SYS_sysi86, "incoming");
+
+   /* SYS_acct                   51 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_shmsys                 52 */
+   sys_shmsys();
+   sys_shmsys2();
+   sys_shmsys3();
+   sys_shmsys4();
+   sys_shmsys5();
+   sys_shmsys6();
+   sys_shmsys7();
+   sys_shmsys8();
+   sys_shmsys9();
+   sys_shmsys10();
+   sys_shmsys11();
+   sys_shmsys12();
+   sys_shmsys13();
+
+   /* SYS_semsys                 53 */
+   sys_semsys();
+   sys_semsys2();
+   sys_semsys3();
+   sys_semsys4();
+   sys_semsys5();
+   sys_semsys6();
+   sys_semsys7();
+   sys_semsys8();
+   sys_semsys9();
+   sys_semsys10();
+   sys_semsys11();
+   sys_semsys12();
+   sys_semsys13();
+   sys_semsys14();
+   sys_semsys15();
+   sys_semsys16();
+
+   /* SYS_ioctl                  54 */
+   GO(SYS_ioctl, "3s 1m");
+   SY(SYS_ioctl, x0, x0 + TCGETS, x0); FAIL;
+
+   /* SYS_uadmin                 55 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_fchownat               56 */
+   GO(SYS_fchownat, "5s 1m");
+   SY(SYS_fchownat, x0 - 1, x0 + 1, x0, x0, x0); FAIL;
+
+   /* SYS_utssys                 57 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_fdsync                 58 */
+   GO(SYS_fdsync, "2s 0m");
+   SY(SYS_fdsync, x0 - 1, x0); FAILx(EBADF);
+
+   /* SYS_execve                 59 */
+   /* illumos ignores the fourth argument. */
+   GO(SYS_execve, "3s 1m");
+   SY(SYS_execve, x0, x0, x0, 0); FAIL;
+   /* More cases tested in execx.c */
+
+   /* SYS_umask                  60 */
+   GO(SYS_umask, "1s 0m");
+   SY(SYS_umask, x0 + 022); SUCC;
+
+   /* SYS_chroot                 61 */
+   GO(SYS_chroot, "1s 1m");
+   SY(SYS_chroot, x0 + 1); FAIL;
+
+   /* SYS_fcntl                  62 */
+   sys_fcntl();
+   sys_fcntl2();
+   sys_fcntl3();
+
+   /* SYS_ulimit                 63 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_renameat               64 */
+   GO(SYS_renameat, "4s 2m");
+   SY(SYS_renameat, x0 - 1, x0, x0, x0); FAIL;
+
+   /* SYS_unlinkat               65 */
+   GO(SYS_unlinkat, "3s 1m");
+   SY(SYS_unlinkat, x0 - 1, x0, x0); FAIL;
+
+   /* SYS_fstatat                66 */
+   GO(SYS_fstatat, "4s 2m");
+   SY(SYS_fstatat, x0 - 1, x0 + 1, x0, x0); FAIL;
+
+   /* SYS_fstatat64              67 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_openat                 68 */
+   sys_openat();
+   sys_openat2();
+
+   /* SYS_openat64               69 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_tasksys                70 */
+   sys_tasksys();
+   sys_tasksys2();
+   sys_tasksys3();
+   sys_tasksys4();
+
+   /* SYS_acctctl                71 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_exacctsys              72 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_getpagesizes           73 */
+   GO(SYS_getpagesizes, "3s 1m");
+   SY(SYS_getpagesizes, x0, x0 + 1, x0 + 1); FAIL;
+
+   /* SYS_rctlsys                74 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_sidsys                 75 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_lwp_park               77 */
+   /* Don't bother to test this. */
+   GO(SYS_lwp_park, "ignore");
+
+   /* SYS_sendfilev              78 */
+   sys_sendfilev();
+   sys_sendfilev2();
+   sys_sendfilev3();
+   sys_sendfilev4();
+
+   /* SYS_rmdir                  79 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_mkdir                  80 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_getdents               81 */
+   GO(SYS_getdents, "3s 1m");
+   SY(SYS_getdents, x0, x0, x0 + 1); FAIL;
+
+   /* SYS_Privsys                82 */
+   sys_privsys();
+   sys_privsys2();
+   sys_privsys3();
+   sys_privsys4();
+   sys_privsys5();
+   sys_privsys6();
+   sys_privsys7();
+   sys_privsys8();
+
+   /* SYS_ucredsys               83 */
+   sys_ucredsys();
+   sys_ucredsys2();
+
+   /* SYS_sysfs                  84 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_getmsg                 85 */
+   GO(SYS_getmsg, "4s 1m");
+   SY(SYS_getmsg, x0, x0, x0, x0); FAIL;
+
+   /* SYS_putmsg                 86 */
+   GO(SYS_putmsg, "4s 0m");
+   SY(SYS_putmsg, x0, x0, x0, x0);
+
+   /* SYS_lstat                  88 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_symlink                89 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_readlink               90 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_setgroups              91 */
+   GO(SYS_setgroups, "2s 1m");
+   SY(SYS_setgroups, x0 + 1, x0 + 1); FAIL;
+
+   /* SYS_getgroups              92 */
+   GO(SYS_getgroups, "2s 1m");
+   SY(SYS_getgroups, x0 + 1, x0 + 1); FAIL;
+
+   /* SYS_fchmod                 93 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_fchown                 94 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_sigprocmask            95 */
+   GO(SYS_sigprocmask, "3s 2m");
+   SY(SYS_sigprocmask, x0, x0 + 1, x0 + 1); FAILx(EFAULT);
+
+   /* SYS_sigsuspend             96 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_sigaltstack            97 */
+   GO(SYS_sigaltstack, "2s 2m");
+   SY(SYS_sigaltstack, x0 + 1, x0 + 1); FAILx(EFAULT);
+
+   /* SYS_sigaction              98 */
+   GO(SYS_sigaction, "3s 4m");
+   SY(SYS_sigaction, x0, x0 + 1, x0 + 1); FAILx(EFAULT);
+
+   /* SYS_sigpending             99 */
+   GO(SYS_sigpending, "2s 1m");
+   SY(SYS_sigpending, x0, x0 + 1);
+
+   /* SYS_context               100 */
+   sys_context();
+   sys_context2();
+   sys_context3();
+   sys_context4();
+
+   /* SYS_fchmodat              101 */
+   GO(SYS_fchmodat, "4s 1m");
+   SY(SYS_fchmodat, x0 - 1, x0 + 1, x0, x0); FAIL;
+
+   /* SYS_mkdirat               102 */
+   GO(SYS_mkdirat, "3s 1m");
+   SY(SYS_mkdirat, x0 - 1, x0, x0); FAIL;
+
+   /* SYS_statvfs               103 */
+   sys_statvfs();
+   sys_statvfs2();
+
+   /* SYS_fstatvfs              104 */
+   GO(SYS_fstatvfs, "2s 1m");
+   SY(SYS_fstatvfs, x0 - 1, x0 + 1); FAILx(EBADF);
+
+   /* SYS_getloadavg            105 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_nfssys                106 */
+   sys_nfssys();
+   /* :TODO: Add test cases when other opcodes are implemented. */
+
+   /* SYS_waitid                107 */
+   GO(SYS_waitid, "4s 1m");
+   SY(SYS_waitid, x0 - 1, x0, x0, x0); FAIL;
+
+   /* SYS_sigsendsys            108 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_hrtsys                109 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_utimesys              110 */
+   /* SYS_utimensat             110 */
+   /* Tested in scalar_utimesys and scalar_utimensat. */
+
+   /* SYS_sigresend             111 */
+   GO(SYS_sigresend, "3s 2m");
+   SY(SYS_sigresend, x0, x0 + 1, x0); FAIL;
+
+   /* SYS_priocntlsys           112 */
+   sys_priocntlsys();
+   sys_priocntlsys2();
+   sys_priocntlsys3();
+   sys_priocntlsys4();
+   sys_priocntlsys5();
+   sys_priocntlsys6();
+   sys_priocntlsys7();
+   sys_priocntlsys8();
+   sys_priocntlsys9();
+   sys_priocntlsys10();
+   sys_priocntlsys11();
+
+   /* SYS_pathconf              113 */
+   GO(SYS_pathconf, "2s 1m");
+   SY(SYS_pathconf, x0, x0); FAIL;
+
+   /* SYS_mincore               114 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_mmap                  115 */
+   GO(SYS_mmap, "6s 0m");
+   SY(SYS_mmap, x0, x0, x0, x0, x0, x0); FAILx(EINVAL);
+
+   /* SYS_mprotect              116 */
+   GO(SYS_mprotect, "3s 0m");
+   SY(SYS_mprotect, x0, x0, x0); FAILx(EINVAL);
+
+   /* SYS_munmap                117 */
+   GO(SYS_munmap, "2s 0m");
+   SY(SYS_munmap, x0, x0); FAILx(EINVAL);
+
+   /* SYS_fpathconf             118 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_vfork                 119 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_fchdir                120 */
+   GO(SYS_fchdir, "1s 0m");
+   SY(SYS_fchdir, x0 - 1); FAILx(EBADF);
+
+   /* SYS_readv                 121 */
+   GO(SYS_readv, "3s 1m");
+   SY(SYS_readv, x0, x0, x0 + 1); FAIL;
+
+   /* SYS_writev                122 */
+   GO(SYS_writev, "3s 1m");
+   SY(SYS_writev, x0, x0, x0 + 1); FAIL;
+
+   /* SYS_mmapobj               127 */
+   GO(SYS_mmapobj, "5s 2m");
+   SY(SYS_mmapobj, x0 - 1, x0 | MMOBJ_PADDING, x0, x0, x0); FAILx(EBADF);
+
+   /* SYS_setrlimit             128 */
+   GO(SYS_setrlimit, "2s 1m");
+   SY(SYS_setrlimit, x0, x0); FAIL;
+
+   /* SYS_getrlimit             129 */
+   GO(SYS_getrlimit, "2s 1m");
+   SY(SYS_getrlimit, x0, x0); FAIL;
+
+   /* SYS_lchown                130 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_memcntl               131 */
+   GO(SYS_memcntl, "6s 1m");
+   SY(SYS_memcntl, x0, x0, x0 | MC_HAT_ADVISE, x0, x0, x0); FAIL;
+
+   /* SYS_getpmsg               132 */
+   GO(SYS_getpmsg, "5s 2m");
+   SY(SYS_getpmsg, x0, x0, x0, x0, x0); FAIL;
+
+   /* SYS_putpmsg               133 */
+   GO(SYS_putpmsg, "5s 0m");
+   SY(SYS_putpmsg, x0, x0, x0, x0, x0); FAIL;
+
+   /* SYS_rename                134 */
+   /* Tested in scalar_obsolete.c. */
+
+   /* SYS_uname                 135 */
+   sys_uname();
+   sys_uname2();
+
+   /* SYS_setegid               136 */
+   GO(SYS_setegid, "1s 0m");
+   SY(SYS_setegid, x0 - 1); FAIL;
+
+   /* SYS_sysconfig             137 */
+   GO(SYS_sysconfig, "1s 0m");
+   SY(SYS_sysconfig, x0 - 1); FAIL;
+
+   /* SYS_adjtime               138 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_systeminfo            139 */
+   GO(SYS_systeminfo, "3s 1m");
+   SY(SYS_systeminfo, x0 + 1, x0, x0 + 1); FAIL;
+
+   /* SYS_sharefs               140 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_seteuid               141 */
+   GO(SYS_seteuid, "1s 0m");
+   SY(SYS_seteuid, x0 - 1); FAIL;
+
+   /* SYS_forksys               142 */
+   GO(SYS_forksys, "2s 0m");
+   SY(SYS_forksys, x0, x0 - 1); FAIL;
+
+   /* SYS_sigtimedwait          144 */
+   GO(SYS_sigtimedwait, "3s 3m");
+   SY(SYS_sigtimedwait, x0 - 1, x0 - 1, x0 - 1); FAIL;
+
+   /* SYS_lwp_info              145 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_yield                 146 */
+   GO(SYS_yield, "0s 0m");
+   SY(SYS_yield); SUCC;
+
+   /* SYS_lwp_sema_post         148 */
+   GO(SYS_lwp_sema_post, "1s 3m");
+   SY(SYS_lwp_sema_post, x0); FAIL;
+
+   /* SYS_lwp_sema_trywait      149 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_lwp_detach            150 */
+   GO(SYS_lwp_detach, "1s 0m");
+   SY(SYS_lwp_detach, x0); FAIL;
+
+   /* SYS_corectl               151 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_modctl                152 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_fchroot               153 */
+   GO(SYS_fchroot, "1s 0m");
+   SY(SYS_fchroot, x0 - 1); FAILx(EBADF);
+
+   /* SYS_vhangup               155 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_gettimeofday          156 */
+   GO(SYS_gettimeofday, "1s 1m");
+   SY(SYS_gettimeofday, x0 + 1); FAIL;
+
+   /* SYS_getitimer             157 */
+   GO(SYS_getitimer, "2s 2m");
+   SY(SYS_getitimer, x0, x0 + 1); FAIL;
+
+   /* SYS_setitimer             158 */
+   GO(SYS_setitimer, "3s 4m");
+   SY(SYS_setitimer, x0, x0 + 1, x0 + 1); FAIL;
+
+   /* SYS_lwp_create            159 */
+   /* In the lwp_create() wrapper, we unfortunately have to call
+      ML_(safe_to_deref) before doing the PRE_READ_*() stuff, therefore only 1m
+      parameter. */
+   GO(SYS_lwp_create, "3s 1m");
+   SY(SYS_lwp_create, x0, x0, x0 + 1); FAILx(EINVAL);
+
+   /* SYS_lwp_exit              160 */
+   /* Don't bother to test this. */
+   GO(SYS_lwp_exit, "ignore");
+
+   /* SYS_lwp_suspend           161 */
+   GO(SYS_lwp_suspend, "1s 0m");
+   SY(SYS_lwp_suspend, x0 - 1); FAIL;
+
+   /* SYS_lwp_continue          162 */
+   GO(SYS_lwp_continue, "1s 0m");
+   SY(SYS_lwp_continue, x0 - 1); FAIL;
+
+   /* SYS_lwp_kill              163 */
+   /* SYS_lwp_sigqueue          163 */
+   /* Tested in scalar_lwp_kill and scalar_lwp_sigqueue. */
+
+   /* SYS_lwp_self              164 */
+   GO(SYS_lwp_self, "0s 0m");
+   SY(SYS_lwp_self); SUCC;
+
+   /* SYS_lwp_sigmask           165 */
+   GO(SYS_lwp_sigmask, "5s 0m");
+   SY(SYS_lwp_sigmask, x0, x0, x0, x0, x0); FAIL;
+
+   /* SYS_lwp_private           166 */
+   GO(SYS_lwp_private, "3s 1m");
+#if defined(__i386)
+   SY(SYS_lwp_private, x0 + _LWP_GETPRIVATE, x0 + _LWP_GSBASE, x0); FAIL;
+#elif defined(__amd64)
+   SY(SYS_lwp_private, x0 + _LWP_GETPRIVATE, x0 + _LWP_FSBASE, x0); FAIL;
+#else
+#error Unsupported platform
+#endif
+
+   /* SYS_lwp_wait              167 */
+   GO(SYS_lwp_wait, "2s 1m");
+   SY(SYS_lwp_wait, x0 - 1, x0 + 1); FAIL;
+
+   /* SYS_lwp_mutex_wakeup      168 */
+   GO(SYS_lwp_mutex_wakeup, "2s 2m");
+   SY(SYS_lwp_mutex_wakeup, x0, x0); FAIL;
+
+   /* SYS_lwp_cond_wait         170 */
+   GO(SYS_lwp_cond_wait, "4s 5m");
+   SY(SYS_lwp_cond_wait, x0 + 1, x0 + 1, x0 + 1, x0); FAIL;
+
+   /* SYS_lwp_cond_signal       171 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_lwp_cond_broadcast    172 */
+   GO(SYS_lwp_cond_broadcast, "1s 2m");
+   SY(SYS_lwp_cond_broadcast, x0); FAIL;
+
+   /* SYS_pread                 173 */
+   GO(SYS_pread, "4s 1m");
+   SY(SYS_pread, x0 - 1, x0, x0 + 1, x0); FAILx(EBADF);
+
+   /* SYS_pwrite                174 */
+   GO(SYS_pwrite, "4s 1m");
+   SY(SYS_pwrite, x0 - 1, x0, x0 + 1, x0); FAILx(EBADF);
+
+   /* SYS_llseek                175 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_inst_sync             176 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_brand                 177 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_kaio                  178 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_cpc                   179 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_lgrpsys               180 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_rusagesys             181 */
+   sys_rusagesys();
+   sys_rusagesys2();
+   sys_rusagesys3();
+   sys_rusagesys4();
+   sys_rusagesys5();
+
+   /* SYS_port                  182 */
+   sys_port();
+   sys_port2();
+   sys_port3();
+   sys_port4();
+   sys_port5();
+   sys_port6();
+   sys_port7();
+   sys_port8();
+   sys_port9();
+   sys_port10();
+   sys_port11();
+
+   /* SYS_pollsys               183 */
+   GO(SYS_pollsys, "4s 5m");
+   SY(SYS_pollsys, x0, x0 + 1, x0 + 1, x0 + 1); FAIL;
+
+   /* SYS_labelsys              184 */
+   sys_labelsys();
+   sys_labelsys2();
+   sys_labelsys3();
+   sys_labelsys4();
+   sys_labelsys5();
+   sys_labelsys6();
+
+   /* SYS_acl                   185 */
+   sys_acl();
+   sys_acl2();
+   sys_acl3();
+   sys_acl4();
+   sys_acl5();
+   sys_acl6();
+
+   /* SYS_auditsys              186 */
+   sys_auditsys();
+   sys_auditsys2();
+   sys_auditsys3();
+   sys_auditsys4();
+   sys_auditsys5();
+   sys_auditsys6();
+   sys_auditsys7();
+   sys_auditsys8();
+   sys_auditsys9();
+   sys_auditsys10();
+   sys_auditsys11();
+   sys_auditsys12();
+   sys_auditsys13();
+   sys_auditsys14();
+   sys_auditsys15();
+   sys_auditsys16();
+   sys_auditsys17();
+   sys_auditsys18();
+   sys_auditsys19();
+   sys_auditsys20();
+   sys_auditsys21();
+   sys_auditsys22();
+   sys_auditsys23();
+   sys_auditsys24();
+   sys_auditsys25();
+   sys_auditsys26();
+   sys_auditsys27();
+   sys_auditsys28();
+   sys_auditsys29();
+   sys_auditsys30();
+   sys_auditsys31();
+   sys_auditsys32();
+
+   /* SYS_processor_bind        187 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_processor_info        188 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_p_online              189 */
+   GO(SYS_p_online, "2s 0m");
+   SY(SYS_p_online, x0, x0); FAILx(EINVAL);
+
+   /* SYS_sigqueue              190 */
+   GO(SYS_sigqueue, "5s 1m");
+   SY(SYS_sigqueue, x0 - 1, x0, x0 + 1, x0, x0 - 1); FAIL;
+
+   /* SYS_clock_gettime         191 */
+   GO(SYS_clock_gettime, "2s 1m");
+   SY(SYS_clock_gettime, x0, x0); FAIL;
+
+   /* SYS_clock_settime         192 */
+   GO(SYS_clock_settime, "2s 1m");
+   SY(SYS_clock_settime, x0, x0);  FAIL;
+
+   /* SYS_clock_getres          193 */
+   GO(SYS_clock_getres, "2s 1m");
+   SY(SYS_clock_getres, x0 + 1, x0 + 1); FAIL;
+
+   /* SYS_timer_create          194 */
+   sys_timer_create();
+   sys_timer_create2();
+
+   /* SYS_timer_delete          195 */
+   GO(SYS_timer_delete, "1s 0m");
+   SY(SYS_timer_delete, x0 + 1); FAIL;
+
+   /* SYS_timer_settime         196 */
+   GO(SYS_timer_settime, "4s 2m");
+   SY(SYS_timer_settime, x0, x0, x0 + 1, x0 + 2); FAIL;
+
+   /* SYS_timer_gettime         197 */
+   GO(SYS_timer_gettime, "2s 1m");
+   SY(SYS_timer_gettime, x0, x0 + 1); FAIL;
+
+   /* SYS_timer_getoverrun      198 */
+   GO(SYS_timer_getoverrun, "1s 0m");
+   SY(SYS_timer_getoverrun, x0); FAIL;
+
+   /* SYS_nanosleep             199 */
+   GO(SYS_nanosleep, "2s 2m");
+   SY(SYS_nanosleep, x0, x0 + 1); FAIL;
+
+   /* SYS_facl                  200 */
+   sys_facl();
+   sys_facl2();
+   sys_facl3();
+   sys_facl4();
+   sys_facl5();
+   sys_facl6();
+
+   /* SYS_door                  201 */
+   sys_door();
+   sys_door2();
+   sys_door3();
+   sys_door4();
+   sys_door5();
+   /* XXX Additional sys_door variants still unimplemented. */
+
+   /* SYS_setreuid              202 */
+   GO(SYS_setreuid, "2s 0m");
+   SY(SYS_setreuid, x0 - 1, x0 - 1); SUCC;
+
+   /* SYS_setregid              203 */
+   GO(SYS_setregid, "2s 0m");
+   SY(SYS_setregid, x0 - 1, x0 - 1); SUCC;
+
+   /* SYS_install_utrap         204 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_signotify             205 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_schedctl              206 */
+   GO(SYS_schedctl, "0s 0m");
+   SY(SYS_schedctl); SUCC;
+
+   /* SYS_pset                  207 */
+   sys_pset();
+   sys_pset2();
+   sys_pset3();
+   sys_pset4();
+   sys_pset5();
+   sys_pset6();
+   sys_pset7();
+   sys_pset8();
+   sys_pset9();
+   sys_pset10();
+   sys_pset11();
+   sys_pset12();
+   sys_pset13();
+
+   /* SYS_sparc_utrap_install   208 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_resolvepath           209 */
+   GO(SYS_resolvepath, "3s 2m");
+   SY(SYS_resolvepath, x0, x0, x0 + 1); FAIL;
+
+   /* SYS_lwp_mutex_timedlock   210 */
+   GO(SYS_lwp_mutex_timedlock, "3s 7m");
+   SY(SYS_lwp_mutex_timedlock, x0, x0 + 1, x0); FAIL;
+
+   /* SYS_lwp_sema_timedwait    211 */
+   GO(SYS_lwp_sema_timedwait, "3s 4m");
+   SY(SYS_lwp_sema_timedwait, x0, x0 + 1, x0); FAIL;
+
+   /* SYS_lwp_rwlock_sys        212 */
+   sys_lwp_rwlock();
+   sys_lwp_rwlock2();
+   sys_lwp_rwlock3();
+   sys_lwp_rwlock4();
+   sys_lwp_rwlock5();
+
+   /* SYS_getdents64            213 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_mmap64                214 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_stat64                215 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_lstat64               216 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_fstat64               217 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_statvfs64             218 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_fstatvfs64            219 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_setrlimit64           220 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_getrlimit64           221 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_pread64               222 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_pwrite64              223 */
+   /* Tested in x86-solaris/scalar.c. */
+
+   /* SYS_open64                225 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_rpcsys                226 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_zone                  227 */
+   sys_zone();
+   sys_zone2();
+   sys_zone3();
+   sys_zone4();
+   sys_zone5();
+   sys_zone6();
+   sys_zone7();
+   sys_zone8();
+   sys_zone9();
+   sys_zone10();
+   sys_zone11();
+   /*
+   2013-09-22 Petr Pavlu -- The following test crashes my system because of
+   a kernel bug (illumos), commenting it out for now.
+   sys_zone12();
+   */
+   sys_zone13();
+   /*
+   2013-09-22 Petr Pavlu -- The following test provides an incorrect result
+   because of a kernel bug (illumos), commenting it out for now.
+   sys_zone14();
+   */
+   sys_zone15();
+   /*
+   2013-09-22 Petr Pavlu -- The following test provides an incorrect result
+   because of a kernel bug (illumos), commenting it out for now.
+   sys_zone16();
+   */
+
+   /* SYS_autofssys             228 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_getcwd                229 */
+   GO(SYS_getcwd, "2s 1m");
+   SY(SYS_getcwd, x0, x0 + 1); FAIL;
+
+   /* SYS_so_socket             230 */
+   GO(SYS_so_socket, "5s 1m");
+   SY(SYS_so_socket, x0, x0, x0, x0 + 1, x0); FAIL;
+
+   /* SYS_so_socketpair         231 */
+   GO(SYS_so_socketpair, "1s 1m");
+   SY(SYS_so_socketpair, x0); FAIL;
+
+   /* SYS_bind                  232 */
+   GO(SYS_bind, "4s 0m");
+   SY(SYS_bind, x0, x0, x0, x0); FAIL;
+
+   /* SYS_listen                233 */
+   GO(SYS_listen, "3s 0m");
+   SY(SYS_listen, x0, x0, x0); FAIL;
+
+   /* SYS_accept                234 */
+   /* Illumos added a new version of the accept() syscall which takes an extra
+      flag parameter.  This is trivially handled in the syscall wrapper but it
+      is not tested here so it is not necessary to have two versions of the
+      stderr.exp file. */
+   GO(SYS_accept, "4s 0m");
+   SY(SYS_accept, x0, x0, x0, x0, 0); FAIL;
+
+   /* SYS_connect               235 */
+   GO(SYS_connect, "4s 0m");
+   SY(SYS_connect, x0, x0, x0, x0); FAIL;
+
+   /* SYS_shutdown              236 */
+   GO(SYS_shutdown, "3s 0m");
+   SY(SYS_shutdown, x0 - 1, x0, x0); FAILx(EBADF);
+
+   /* SYS_recv                  237 */
+   GO(SYS_recv, "4s 1m");
+   SY(SYS_recv, x0, x0, x0 + 1, x0); FAIL;
+
+   /* SYS_recvfrom              238 */
+   GO(SYS_recvfrom, "6s 1m");
+   SY(SYS_recvfrom, x0, x0, x0 + 1, x0, x0, x0); FAIL;
+
+   /* SYS_recvmsg               239 */
+   GO(SYS_recvmsg, "3s 0m");
+   SY(SYS_recvmsg, x0, x0, x0); FAIL;
+
+   /* SYS_send                  240 */
+   GO(SYS_send, "4s 1m");
+   SY(SYS_send, x0, x0, x0 + 1, x0); FAIL;
+
+   /* SYS_sendmsg               241 */
+   GO(SYS_sendmsg, "3s 0m");
+   SY(SYS_sendmsg, x0, x0, x0); FAIL;
+
+   /* SYS_sendto                242 */
+   GO(SYS_sendto, "6s 1m");
+   SY(SYS_sendto, x0, x0, x0 + 1, x0, x0, x0); FAIL;
+
+   /* SYS_getpeername           243 */
+   sys_getpeername();
+   sys_getpeername2();
+
+   /* SYS_getsockname           244 */
+   GO(SYS_getsockname, "4s 1m");
+   SY(SYS_getsockname, x0, x0, x0, x0); FAIL;
+
+   /* SYS_getsockopt            245 */
+   GO(SYS_getsockopt, "6s 0m");
+   SY(SYS_getsockopt, x0, x0, x0, x0, x0, x0); FAIL;
+
+   /* SYS_setsockopt            246 */
+   GO(SYS_setsockopt, "6s 1m");
+   SY(SYS_setsockopt, x0, x0, x0, x0, x0 + 1, x0); FAIL;
+
+   /* SYS_sockconfig            247 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_ntp_gettime           248 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_ntp_adjtime           249 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_lwp_mutex_unlock      250 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_lwp_mutex_trylock     251 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_lwp_mutex_register    252 */
+   GO(SYS_lwp_mutex_register, "2s 1m");
+   SY(SYS_lwp_mutex_register, x0, x0); FAIL;
+
+   /* SYS_cladm                 253 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_uucopy                254 */
+   GO(SYS_uucopy, "3s 2m");
+   SY(SYS_uucopy, x0, x0, x0 + 1); FAIL;
+
+   /* SYS_umount2               255 */
+   GO(SYS_umount2, "2s 1m");
+   SY(SYS_umount2, x0, x0); FAIL;
+
+   /* No such syscall... */
+#if 0
+   GO(9999, "1e");
+   SY(9999); FAIL;
+#endif
+
+   /* SYS_exit                    1 */
+   GO(SYS_exit, "1s 0m");
+   SY(SYS_exit, x0); FAIL;
+
+   assert(0);
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar.h b/memcheck/tests/solaris/scalar.h
new file mode 100644
index 0000000..601a46e
--- /dev/null
+++ b/memcheck/tests/solaris/scalar.h
@@ -0,0 +1,38 @@
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/syscall.h>
+
+#define GO(syscall_num, param) \
+   fprintf(stderr, "---------------------------------------------------------\n"  \
+                   "%3d:%24s %s\n"                                                \
+                   "---------------------------------------------------------\n", \
+                   syscall_num, #syscall_num, param);
+
+#define SY res = syscall
+
+#define FAIL assert(res == -1);
+#define SUCC assert(res != -1);
+#define FAILx(E) \
+   do { \
+      int myerrno = errno; \
+      if (res == -1) { \
+         if (myerrno == E) { \
+            /* as expected */ \
+         } \
+         else { \
+            fprintf(stderr, "Expected error %s (%d), got %d\n", #E, E, myerrno); \
+            exit(1); \
+         } \
+      } \
+      else { \
+         fprintf(stderr, "Expected error %s (%d), got success\n", #E, E); \
+         exit(1); \
+      } \
+   } while (0);
+
+/* Module variables. */
+static long x0;
+static long res;
+
diff --git a/memcheck/tests/solaris/scalar.stderr.exp b/memcheck/tests/solaris/scalar.stderr.exp
new file mode 100644
index 0000000..d44723d
--- /dev/null
+++ b/memcheck/tests/solaris/scalar.stderr.exp
@@ -0,0 +1,5366 @@
+---------------------------------------------------------
+  3:                SYS_read 3s 0m
+---------------------------------------------------------
+Syscall param read(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param read(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param read(count) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+  4:               SYS_write 3s 1m
+---------------------------------------------------------
+Syscall param write(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param write(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param write(count) contains uninitialised byte(s)
+   ...
+
+Syscall param write(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+  6:               SYS_close 1s 0m
+---------------------------------------------------------
+Syscall param close(fd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+  7:              SYS_linkat 5s 2m
+---------------------------------------------------------
+Syscall param linkat(fd1) contains uninitialised byte(s)
+   ...
+
+Syscall param linkat(path1) contains uninitialised byte(s)
+   ...
+
+Syscall param linkat(fd2) contains uninitialised byte(s)
+   ...
+
+Syscall param linkat(path2) contains uninitialised byte(s)
+   ...
+
+Syscall param linkat(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param linkat(path1) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param linkat(path2) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 11:           SYS_symlinkat 3s 2m
+---------------------------------------------------------
+Syscall param symlinkat(path1) contains uninitialised byte(s)
+   ...
+
+Syscall param symlinkat(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param symlinkat(path2) contains uninitialised byte(s)
+   ...
+
+Syscall param symlinkat(path1) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param symlinkat(path2) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 12:               SYS_chdir 1s 1m
+---------------------------------------------------------
+Syscall param chdir(path) contains uninitialised byte(s)
+   ...
+
+Syscall param chdir(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 13:                SYS_time 0s 0m
+---------------------------------------------------------
+---------------------------------------------------------
+ 17:                 SYS_brk 1s 0m
+---------------------------------------------------------
+Syscall param brk(end_data_segment) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 19:               SYS_lseek 3s 0m
+---------------------------------------------------------
+Syscall param lseek(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param lseek(offset) contains uninitialised byte(s)
+   ...
+
+Syscall param lseek(whence) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 20:              SYS_getpid 0s 0m
+---------------------------------------------------------
+---------------------------------------------------------
+ 21:               SYS_mount (4-arg, table variant) 4s 2m
+---------------------------------------------------------
+Syscall param mount(spec) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(dir) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(mflag) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(fstype) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(spec) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(dir) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 21:               SYS_mount (4-arg) 4s 3m
+---------------------------------------------------------
+Syscall param mount(spec) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(dir) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(mflag) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(fstype) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(spec) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(dir) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(fstype) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 21:               SYS_mount (6-arg) 6s 4m
+---------------------------------------------------------
+Syscall param mount(spec) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(dir) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(mflag) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(fstype) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(dataptr) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(datalen) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(spec) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(dir) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(fstype) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(dataptr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 21:               SYS_mount (8-arg) 8s 5m
+---------------------------------------------------------
+Syscall param mount(spec) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(dir) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(mflag) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(fstype) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(dataptr) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(datalen) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(optptr) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(optlen) contains uninitialised byte(s)
+   ...
+
+Syscall param mount(spec) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(dir) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(fstype) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(dataptr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mount(optptr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 22:          SYS_readlinkat 4s 2m
+---------------------------------------------------------
+Syscall param readlinkat(dfd) contains uninitialised byte(s)
+   ...
+
+Syscall param readlinkat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param readlinkat(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param readlinkat(bufsiz) contains uninitialised byte(s)
+   ...
+
+Syscall param readlinkat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param readlinkat(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 23:              SYS_setuid 1s 0m
+---------------------------------------------------------
+Syscall param setuid(uid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 24:              SYS_getuid 0s 0m
+---------------------------------------------------------
+---------------------------------------------------------
+ 25:               SYS_stime 1s 0m
+---------------------------------------------------------
+Syscall param stime(time) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 27:               SYS_alarm 1s 0m
+---------------------------------------------------------
+Syscall param alarm(seconds) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 29:               SYS_pause ignore
+---------------------------------------------------------
+---------------------------------------------------------
+ 31:                SYS_stty 2s 1m
+---------------------------------------------------------
+Syscall param stty(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param stty(tty) contains uninitialised byte(s)
+   ...
+
+Syscall param stty(tty) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 32:                SYS_gtty 2s 1m
+---------------------------------------------------------
+Syscall param gtty(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param gtty(tty) contains uninitialised byte(s)
+   ...
+
+Syscall param gtty(tty) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 37:                SYS_kill 2s 0m
+---------------------------------------------------------
+Syscall param kill(pid) contains uninitialised byte(s)
+   ...
+
+Syscall param kill(signal) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 39:             SYS_pgrpsys (GETPGRP) 1s 0m
+---------------------------------------------------------
+Syscall param pgrpsys_getpgrp(flag) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 39:             SYS_pgrpsys (GETSID) 2s 0m
+---------------------------------------------------------
+Syscall param pgrpsys_getsid(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param pgrpsys_getsid(pid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 39:             SYS_pgrpsys (GETPGID) 2s 0m
+---------------------------------------------------------
+Syscall param pgrpsys_getpgid(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param pgrpsys_getpgid(pid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 42:                SYS_pipe ignore
+---------------------------------------------------------
+---------------------------------------------------------
+ 43:               SYS_times 1s 1m
+---------------------------------------------------------
+Syscall param times(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param times(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 45:           SYS_faccessat 4s 1m
+---------------------------------------------------------
+Syscall param faccessat(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param faccessat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param faccessat(amode) contains uninitialised byte(s)
+   ...
+
+Syscall param faccessat(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param faccessat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 46:              SYS_setgid 1s 0m
+---------------------------------------------------------
+Syscall param setgid(gid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 47:              SYS_getgid 0s 0m
+---------------------------------------------------------
+---------------------------------------------------------
+ 48:             SYS_mknodat 4s 1m
+---------------------------------------------------------
+Syscall param mknodat(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param mknodat(fname) contains uninitialised byte(s)
+   ...
+
+Syscall param mknodat(fmode) contains uninitialised byte(s)
+   ...
+
+Syscall param mknodat(dev) contains uninitialised byte(s)
+   ...
+
+Syscall param mknodat(fname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 50:              SYS_sysi86 incoming
+---------------------------------------------------------
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMAT) 4s 0m
+---------------------------------------------------------
+Syscall param shmsys_shmat(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmat(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmat(shmaddr) contains uninitialised byte(s)
+   ...
+
+
+More than 100 errors detected.  Subsequent errors
+will still be recorded, but in less detail than before.
+Syscall param shmsys_shmat(shmflg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,SHM_LOCK) 3s 0m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_lock(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_lock(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_lock(cmd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,SHM_UNLOCK) 3s 0m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_unlock(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_unlock(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_unlock(cmd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,IPC_RMID) 3s 0m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_rmid(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_rmid(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_rmid(cmd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,IPC_SET) 4s 3m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_set(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmctl, ipc_set, buf->shm_perm.uid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param shmsys(shmctl, ipc_set, buf->shm_perm.gid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param shmsys(shmctl, ipc_set, buf->shm_perm.mode) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,IPC_SET) 6s 0m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_set(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmctl, ipc_set, buf->shm_perm.uid) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param shmsys(shmctl, ipc_set, buf->shm_perm.gid) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param shmsys(shmctl, ipc_set, buf->shm_perm.mode) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,IPC_STAT) 4s 1m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_stat(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_stat(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_stat(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_stat(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmctl, ipc_stat, buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,IPC_SET64) 4s 3m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_set64(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set64(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set64(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmctl, ipc_set64, buf->shmx_perm.ipcx_uid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param shmsys(shmctl, ipc_set64, buf->shmx_perm.ipcx_gid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param shmsys(shmctl, ipc_set64, buf->shmx_perm.ipcx_mode) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,IPC_SET64) 6s 0m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_set64(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set64(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_set64(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmctl, ipc_set64, buf->shmx_perm.ipcx_uid) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param shmsys(shmctl, ipc_set64, buf->shmx_perm.ipcx_gid) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param shmsys(shmctl, ipc_set64, buf->shmx_perm.ipcx_mode) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,IPC_STAT64) 4s 1m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_stat64(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_stat64(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_stat64(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_stat64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmctl, ipc_stat64, buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMDT) 2s 0m
+---------------------------------------------------------
+Syscall param shmsys_shmdt(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmdt(shmaddr) contains uninitialised byte(s)
+   ...
+
+Warning: client syscall shmdt tried to modify addresses 0x........-0x........
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMGET) 4s 0m
+---------------------------------------------------------
+Syscall param shmsys_shmget(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmget(key) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmget(size) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmget(shmflg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMIDS) 4s 2m
+---------------------------------------------------------
+Syscall param shmsys_shmids(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmids(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmids(nids) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmids(pnids) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmids, buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param shmsys(shmids, pnids) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,IPC_STAT) 5s 1m
+---------------------------------------------------------
+Syscall param semsys_semctl_stat(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_stat(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_stat(semnum) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_stat(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_stat(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param semctl(IPC_STAT, arg.buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,IPC_SET) 5s 1m
+---------------------------------------------------------
+Syscall param semsys_semctl_set(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_set(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_set(semnum) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_set(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_set(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param semctl(IPC_SET, arg.buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,IPC_STAT64) 5s 1m
+---------------------------------------------------------
+Syscall param semsys_semctl_stat64(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_stat64(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_stat64(semnum) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_stat64(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_stat64(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param semctl(IPC_STAT, arg.buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,IPC_SET64) 5s 1m
+---------------------------------------------------------
+Syscall param semsys_semctl_set64(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_set64(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_set64(semnum) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_set64(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_set64(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param semctl(IPC_SET, arg.buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,IPC_RMID) 3s 0m
+---------------------------------------------------------
+Syscall param semsys_semctl_rmid(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_rmid(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_rmid(cmd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,GETALL) 4s 0m
+---------------------------------------------------------
+Syscall param semsys_semctl_getall(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getall(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getall(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getall(arg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,SETALL) 4s 0m
+---------------------------------------------------------
+Syscall param semsys_semctl_setall(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_setall(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_setall(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_setall(arg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,GETVAL) 4s 0m
+---------------------------------------------------------
+Syscall param semsys_semctl_getval(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getval(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getval(semnum) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getval(cmd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,SETVAL) 5s 0m
+---------------------------------------------------------
+Syscall param semsys_semctl_setval(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_setval(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_setval(semnum) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_setval(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_setval(arg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,GETPID) 4s 0m
+---------------------------------------------------------
+Syscall param semsys_semctl_getpid(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getpid(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getpid(semnum) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getpid(cmd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,GETNCNT) 4s 0m
+---------------------------------------------------------
+Syscall param semsys_semctl_getncnt(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getncnt(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getncnt(semnum) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getncnt(cmd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMCTL,GETZCNT) 4s 0m
+---------------------------------------------------------
+Syscall param semsys_semctl_getzcnt(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getzcnt(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getzcnt(semnum) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semctl_getzcnt(cmd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMGET) 4s 0m
+---------------------------------------------------------
+Syscall param semsys_semget(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semget(key) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semget(nsems) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semget(semflg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMOP) 4s 1m
+---------------------------------------------------------
+Syscall param semsys_semop(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semop(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semop(sops) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semop(nsops) contains uninitialised byte(s)
+   ...
+
+Syscall param semop(sops) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMIDS) 4s 2m
+---------------------------------------------------------
+Syscall param semsys_semids(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semids(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semids(nids) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semids(pnids) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys(semids, buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param semsys(semids, pnids) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 53:              SYS_semsys (SEMTIMEDOP) 5s 2m
+---------------------------------------------------------
+Syscall param semsys_semtimedop(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semtimedop(semid) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semtimedop(sops) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semtimedop(nsops) contains uninitialised byte(s)
+   ...
+
+Syscall param semsys_semtimedop(timeout) contains uninitialised byte(s)
+   ...
+
+Syscall param semtimedop(sops) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param semtimedop(timeout) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TCGETS) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 56:            SYS_fchownat 5s 1m
+---------------------------------------------------------
+Syscall param fchownat(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param fchownat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param fchownat(owner) contains uninitialised byte(s)
+   ...
+
+Syscall param fchownat(group) contains uninitialised byte(s)
+   ...
+
+Syscall param fchownat(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param fchownat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 58:              SYS_fdsync 2s 0m
+---------------------------------------------------------
+Syscall param fdsync(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param fdsync(flag) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 59:              SYS_execve 3s 1m
+---------------------------------------------------------
+Syscall param execve(file) contains uninitialised byte(s)
+   ...
+
+Syscall param execve(argv) contains uninitialised byte(s)
+   ...
+
+Syscall param execve(envp) contains uninitialised byte(s)
+   ...
+
+Syscall param execve(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 60:               SYS_umask 1s 0m
+---------------------------------------------------------
+Syscall param umask(mask) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 61:              SYS_chroot 1s 1m
+---------------------------------------------------------
+Syscall param chroot(path) contains uninitialised byte(s)
+   ...
+
+Syscall param chroot(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 62:               SYS_fcntl (GETFD) 2s 0m
+---------------------------------------------------------
+Syscall param fcntl(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param fcntl(cmd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 62:               SYS_fcntl (DUPFD) 3s 0m
+---------------------------------------------------------
+Syscall param fcntl(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param fcntl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param fcntl(arg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 62:               SYS_fcntl (GETLK) 3s 5m
+---------------------------------------------------------
+Syscall param fcntl(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param fcntl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param fcntl(lock) contains uninitialised byte(s)
+   ...
+
+Syscall param fcntl(lock->l_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fcntl(lock->l_whence) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fcntl(lock->l_start) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fcntl(lock->l_len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fcntl(lock) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 64:            SYS_renameat 4s 2m
+---------------------------------------------------------
+Syscall param renameat(fromfd) contains uninitialised byte(s)
+   ...
+
+Syscall param renameat(old) contains uninitialised byte(s)
+   ...
+
+Syscall param renameat(tofd) contains uninitialised byte(s)
+   ...
+
+Syscall param renameat(new) contains uninitialised byte(s)
+   ...
+
+Syscall param renameat(old) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param renameat(new) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ xx:            SYS_unlinkat 3s 1m
+---------------------------------------------------------
+Syscall param unlinkat(dirfd) contains uninitialised byte(s)
+   ...
+
+Syscall param unlinkat(pathname) contains uninitialised byte(s)
+   ...
+
+Syscall param unlinkat(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param unlinkat(pathname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 66:             SYS_fstatat 4s 2m
+---------------------------------------------------------
+Syscall param fstatat(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatat(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatat(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fstatat(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 68:              SYS_openat (3-args) 3s 1m
+---------------------------------------------------------
+Syscall param openat(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param openat(filename) contains uninitialised byte(s)
+   ...
+
+Syscall param openat(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param openat(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 68:              SYS_openat (4-args) 4s 1m
+---------------------------------------------------------
+Syscall param openat(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param openat(filename) contains uninitialised byte(s)
+   ...
+
+Syscall param openat(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param openat(mode) contains uninitialised byte(s)
+   ...
+
+Syscall param openat(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 70:             SYS_tasksys (settaskid) 3s 0m
+---------------------------------------------------------
+Syscall param tasksys_settaskid(code) contains uninitialised byte(s)
+   ...
+
+Syscall param tasksys_settaskid(projid) contains uninitialised byte(s)
+   ...
+
+Syscall param tasksys_settaskid(flags) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 70:             SYS_tasksys (gettaskid) 1s 0m
+---------------------------------------------------------
+Syscall param tasksys_gettaskid(code) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 70:             SYS_tasksys (getprojid) 1s 0m
+---------------------------------------------------------
+Syscall param tasksys_getprojid(code) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 70:             SYS_tasksys (projlist) 3s 1m
+---------------------------------------------------------
+Syscall param tasksys_projlist(code) contains uninitialised byte(s)
+   ...
+
+Syscall param tasksys_projlist(idbuf) contains uninitialised byte(s)
+   ...
+
+Syscall param tasksys_projlist(idbufsz) contains uninitialised byte(s)
+   ...
+
+Syscall param tasksys(idbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 73:        SYS_getpagesizes 3s 1m
+---------------------------------------------------------
+Syscall param getpagesizes(legacy) contains uninitialised byte(s)
+   ...
+
+Syscall param getpagesizes(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param getpagesizes(nelem) contains uninitialised byte(s)
+   ...
+
+Syscall param getpagesizes(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 77:            SYS_lwp_park ignore
+---------------------------------------------------------
+---------------------------------------------------------
+ 78:           SYS_sendfilev (SENDFILEV) 5s 2m
+---------------------------------------------------------
+Syscall param sendfilev(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(vec) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(sfvcnt) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(xferred) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(vec) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sendfilev(xferred) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 78:           SYS_sendfilev (SENDFILEV) 4s 2m
+---------------------------------------------------------
+Syscall param sendfilev(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(xferred) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(vec) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param sendfilev(xferred) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sendfilev(vec[0].sfv_off points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 78:           SYS_sendfilev (SENDFILEV64) 5s 2m
+---------------------------------------------------------
+Syscall param sendfilev(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(vec) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(sfvcnt) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(xferred) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(vec) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sendfilev(xferred) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 78:           SYS_sendfilev (SENDFILEV64) 4s 2m
+---------------------------------------------------------
+Syscall param sendfilev(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(xferred) contains uninitialised byte(s)
+   ...
+
+Syscall param sendfilev(vec) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param sendfilev(xferred) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sendfilev(vec[0].sfv_off points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 81:            SYS_getdents 3s 1m
+---------------------------------------------------------
+Syscall param getdents(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param getdents(dirp) contains uninitialised byte(s)
+   ...
+
+Syscall param getdents(count) contains uninitialised byte(s)
+   ...
+
+Syscall param getdents(dirp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 82:             SYS_privsys (PRIVSYS_SETPPRIV) 5s 1m
+---------------------------------------------------------
+Syscall param privsys_setppriv(code) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_setppriv(op) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_setppriv(type) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_setppriv(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_setppriv(bufsize) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys(pset) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 82:             SYS_privsys (PRIVSYS_GETPPRIV) 5s 1m
+---------------------------------------------------------
+Syscall param privsys_getppriv(code) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_getppriv(op) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_getppriv(type) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_getppriv(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_getppriv(bufsize) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys(pset) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 82:             SYS_privsys (PRIVSYS_GETIMPLINFO) 5s 1m
+---------------------------------------------------------
+Syscall param privsys_getprivinfo(code) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_getprivinfo(op) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_getprivinfo(type) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_getprivinfo(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_getprivinfo(bufsize) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 82:             SYS_privsys (PRIVSYS_SETPFLAGS) 3s 0m
+---------------------------------------------------------
+Syscall param privsys_setpflags(code) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_setpflags(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_setpflags(val) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 82:             SYS_privsys (PRIVSYS_GETPFLAGS) 2s 0m
+---------------------------------------------------------
+Syscall param privsys_setpflags(code) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_setpflags(flag) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 82:             SYS_privsys (PRIVSYS_ISSETUGID) 1s 0m
+---------------------------------------------------------
+Syscall param privsys_issetugid(code) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 82:             SYS_privsys (PRIVSYS_PFEXEC_REG) 2s 0m
+---------------------------------------------------------
+Syscall param privsys_register_pfexec(code) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_register_pfexec(did) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 82:             SYS_privsys (PRIVSYS_PFEXEC_UNREG) 2s 0m
+---------------------------------------------------------
+Syscall param privsys_unregister_pfexec(code) contains uninitialised byte(s)
+   ...
+
+Syscall param privsys_unregister_pfexec(did) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 83:            SYS_ucredsys (UCREDSYS_UCREDGET) 3s 1m
+---------------------------------------------------------
+Syscall param ucredsys_ucredget(code) contains uninitialised byte(s)
+   ...
+
+Syscall param ucredsys_ucredget(pid) contains uninitialised byte(s)
+   ...
+
+Syscall param ucredsys_ucredget(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param ucredsys(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 83:            SYS_ucredsys (UCREDSYS_GETPEERUCRED) 3s 1m
+---------------------------------------------------------
+Syscall param ucredsys_getpeerucred(code) contains uninitialised byte(s)
+   ...
+
+Syscall param ucredsys_getpeerucred(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ucredsys_getpeerucred(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param ucredsys(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 85:              SYS_getmsg 4s 1m
+---------------------------------------------------------
+Syscall param getmsg(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param getmsg(ctlptr) contains uninitialised byte(s)
+   ...
+
+Syscall param getmsg(dataptr) contains uninitialised byte(s)
+   ...
+
+Syscall param getmsg(flagsp) contains uninitialised byte(s)
+   ...
+
+Syscall param getmsg(flagsp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 86:              SYS_putmsg 4s 0m
+---------------------------------------------------------
+Syscall param putmsg(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param putmsg(ctrlptr) contains uninitialised byte(s)
+   ...
+
+Syscall param putmsg(dataptr) contains uninitialised byte(s)
+   ...
+
+Syscall param putmsg(flags) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 91:           SYS_setgroups 2s 1m
+---------------------------------------------------------
+Syscall param setgroups(size) contains uninitialised byte(s)
+   ...
+
+Syscall param setgroups(list) contains uninitialised byte(s)
+   ...
+
+Syscall param setgroups(list) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 92:           SYS_getgroups 2s 1m
+---------------------------------------------------------
+Syscall param getgroups(size) contains uninitialised byte(s)
+   ...
+
+Syscall param getgroups(list) contains uninitialised byte(s)
+   ...
+
+Syscall param getgroups(list) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 95:         SYS_sigprocmask 3s 2m
+---------------------------------------------------------
+Syscall param sigprocmask(how) contains uninitialised byte(s)
+   ...
+
+Syscall param sigprocmask(set) contains uninitialised byte(s)
+   ...
+
+Syscall param sigprocmask(oset) contains uninitialised byte(s)
+   ...
+
+Syscall param sigprocmask(set) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sigprocmask(oset) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 97:         SYS_sigaltstack 2s 2m
+---------------------------------------------------------
+Syscall param sigaltstack(ss) contains uninitialised byte(s)
+   ...
+
+Syscall param sigaltstack(oss) contains uninitialised byte(s)
+   ...
+
+Syscall param sigaltstack(ss) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sigaltstack(oss) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 98:           SYS_sigaction 3s 4m
+---------------------------------------------------------
+Syscall param sigaction(signal) contains uninitialised byte(s)
+   ...
+
+Syscall param sigaction(act) contains uninitialised byte(s)
+   ...
+
+Syscall param sigaction(oact) contains uninitialised byte(s)
+   ...
+
+Syscall param sigaction(act->sa_flags) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sigaction(act->sa_handler) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sigaction(act->sa_mask) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sigaction(oact) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 99:          SYS_sigpending 2s 1m
+---------------------------------------------------------
+Syscall param sigpending(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param sigpending(setp) contains uninitialised byte(s)
+   ...
+
+Syscall param sigpending(setp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+100:             SYS_context (GETCONTEXT) 2s 1m
+---------------------------------------------------------
+Syscall param getsetcontext_getcontext(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param getsetcontext_getcontext(ucp) contains uninitialised byte(s)
+   ...
+
+Syscall param getsetcontext(ucp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+100:             SYS_context (SETCONTEXT) 2s 0m
+---------------------------------------------------------
+Syscall param getsetcontext_setcontext(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param getsetcontext_setcontext(ucp) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+100:             SYS_context (GETUSTACK) 2s 1m
+---------------------------------------------------------
+Syscall param getsetcontext_getustack(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param getsetcontext_getustack(spp) contains uninitialised byte(s)
+   ...
+
+Syscall param getsetcontext(spp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+100:             SYS_context (SETUSTACK) 2s 1m
+---------------------------------------------------------
+Syscall param getsetcontext_setustack(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param getsetcontext_setustack(sp) contains uninitialised byte(s)
+   ...
+
+Syscall param getsetcontext_setustack(sp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+101:            SYS_fchmodat 4s 1m
+---------------------------------------------------------
+Syscall param fchmodat(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param fchmodat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param fchmodat(mode) contains uninitialised byte(s)
+   ...
+
+Syscall param fchmodat(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param fchmodat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+102:             SYS_mkdirat 3s 1m
+---------------------------------------------------------
+Syscall param mkdirat(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param mkdirat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param mkdirat(mode) contains uninitialised byte(s)
+   ...
+
+Syscall param mkdirat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+103:             SYS_statvfs 2s 2m
+---------------------------------------------------------
+Syscall param statvfs(path) contains uninitialised byte(s)
+   ...
+
+Syscall param statvfs(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param statvfs(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param statvfs(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+103:             SYS_statvfs 4s 0m
+---------------------------------------------------------
+Syscall param statvfs(path) contains uninitialised byte(s)
+   ...
+
+Syscall param statvfs(buf) contains uninitialised byte(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+---------------------------------------------------------
+104:            SYS_fstatvfs 2s 1m
+---------------------------------------------------------
+Syscall param fstatvfs(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatvfs(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatvfs(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+106:              SYS_nfssys (NFS_REVAUTH) 2s 1m
+---------------------------------------------------------
+Syscall param nfssys_nfs_revauth(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param nfssys_nfs_revauth(args) contains uninitialised byte(s)
+   ...
+
+Syscall param nfssys(arg) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+107:              SYS_waitid 4s 1m
+---------------------------------------------------------
+Syscall param waitid(idtype) contains uninitialised byte(s)
+   ...
+
+Syscall param waitid(id) contains uninitialised byte(s)
+   ...
+
+Syscall param waitid(infop) contains uninitialised byte(s)
+   ...
+
+Syscall param waitid(options) contains uninitialised byte(s)
+   ...
+
+Syscall param waitid(infop) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+111:           SYS_sigresend 3s 2m
+---------------------------------------------------------
+Syscall param sigresend(signal) contains uninitialised byte(s)
+   ...
+
+Syscall param sigresend(siginfo) contains uninitialised byte(s)
+   ...
+
+Syscall param sigresend(mask) contains uninitialised byte(s)
+   ...
+
+Syscall param sigresend(siginfo) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sigresend(mask) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (GETCID) 6s 0m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(clname) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (GETCLINFO) 6s 0m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cid) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (SETPARMS) 5s 2m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param priocntlsys(parms) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (GETPARMS) 5s 2m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param priocntlsys(parms) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (GETPRIRANGE) 5s 2m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param priocntlsys(pri) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (DONICE) 5s 2m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param priocntlsys(op) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (SETXPARMS) 5s 3m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param priocntlsys(clname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param priocntlsys(vaparmscnt) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (GETXPARMS) 5s 3m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param priocntlsys(clname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param priocntlsys(vaparmscnt) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (SETDFLCL) 5s 1m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(clname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (GETDFLCL) 5s 1m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(clname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+112:         SYS_priocntlsys (DOPRIO) 5s 2m
+---------------------------------------------------------
+Syscall param priocntlsys(pc_version) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param priocntlsys(psp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param priocntlsys(op) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+113:            SYS_pathconf 2s 1m
+---------------------------------------------------------
+Syscall param pathconf(path) contains uninitialised byte(s)
+   ...
+
+Syscall param pathconf(name) contains uninitialised byte(s)
+   ...
+
+Syscall param pathconf(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+115:                SYS_mmap 6s 0m
+---------------------------------------------------------
+Syscall param mmap(start) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(length) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(prot) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(offset) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+116:            SYS_mprotect 3s 0m
+---------------------------------------------------------
+Syscall param mprotect(addr) contains uninitialised byte(s)
+   ...
+
+Syscall param mprotect(len) contains uninitialised byte(s)
+   ...
+
+Syscall param mprotect(prot) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+117:              SYS_munmap 2s 0m
+---------------------------------------------------------
+Syscall param munmap(start) contains uninitialised byte(s)
+   ...
+
+Syscall param munmap(length) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+120:              SYS_fchdir 1s 0m
+---------------------------------------------------------
+Syscall param fchdir(fd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+121:               SYS_readv 3s 1m
+---------------------------------------------------------
+Syscall param readv(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param readv(vector) contains uninitialised byte(s)
+   ...
+
+Syscall param readv(count) contains uninitialised byte(s)
+   ...
+
+Syscall param readv(vector) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+122:              SYS_writev 3s 1m
+---------------------------------------------------------
+Syscall param writev(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param writev(vector) contains uninitialised byte(s)
+   ...
+
+Syscall param writev(count) contains uninitialised byte(s)
+   ...
+
+Syscall param writev(vector) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+127:             SYS_mmapobj 5s 2m
+---------------------------------------------------------
+Syscall param mmapobj(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param mmapobj(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param mmapobj(storage) contains uninitialised byte(s)
+   ...
+
+Syscall param mmapobj(elements) contains uninitialised byte(s)
+   ...
+
+Syscall param mmapobj(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param mmapobj(elements) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param mmapobj(arg) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+128:           SYS_setrlimit 2s 1m
+---------------------------------------------------------
+Syscall param setrlimit(resource) contains uninitialised byte(s)
+   ...
+
+Syscall param setrlimit(rlim) contains uninitialised byte(s)
+   ...
+
+Syscall param setrlimit(rlim) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+129:           SYS_getrlimit 2s 1m
+---------------------------------------------------------
+Syscall param getrlimit(resource) contains uninitialised byte(s)
+   ...
+
+Syscall param getrlimit(rlim) contains uninitialised byte(s)
+   ...
+
+Syscall param getrlimit(rlim) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+131:             SYS_memcntl 6s 1m
+---------------------------------------------------------
+Syscall param memcntl(addr) contains uninitialised byte(s)
+   ...
+
+Syscall param memcntl(len) contains uninitialised byte(s)
+   ...
+
+Syscall param memcntl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param memcntl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param memcntl(attr) contains uninitialised byte(s)
+   ...
+
+Syscall param memcntl(mask) contains uninitialised byte(s)
+   ...
+
+Syscall param memcntl(arg) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+132:             SYS_getpmsg 5s 2m
+---------------------------------------------------------
+Syscall param getpmsg(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param getpmsg(ctlptr) contains uninitialised byte(s)
+   ...
+
+Syscall param getpmsg(dataptr) contains uninitialised byte(s)
+   ...
+
+Syscall param getpmsg(bandp) contains uninitialised byte(s)
+   ...
+
+Syscall param getpmsg(flagsp) contains uninitialised byte(s)
+   ...
+
+Syscall param getpmsg(bandp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param getpmsg(flagsp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+133:             SYS_putpmsg 5s 0m
+---------------------------------------------------------
+Syscall param putpmsg(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param putpmsg(ctrlptr) contains uninitialised byte(s)
+   ...
+
+Syscall param putpmsg(dataptr) contains uninitialised byte(s)
+   ...
+
+Syscall param putpmsg(band) contains uninitialised byte(s)
+   ...
+
+Syscall param putpmsg(flags) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+135:               SYS_uname 1s 1m
+---------------------------------------------------------
+Syscall param uname(name) contains uninitialised byte(s)
+   ...
+
+Syscall param uname(name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+135:               SYS_uname 6s 0m
+---------------------------------------------------------
+Syscall param uname(name) contains uninitialised byte(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+---------------------------------------------------------
+136:             SYS_setegid 1s 0m
+---------------------------------------------------------
+Syscall param setegid(egid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+137:           SYS_sysconfig 1s 0m
+---------------------------------------------------------
+Syscall param sysconf(name) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+139:          SYS_systeminfo 3s 1m
+---------------------------------------------------------
+Syscall param sysinfo(command) contains uninitialised byte(s)
+   ...
+
+Syscall param sysinfo(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param sysinfo(count) contains uninitialised byte(s)
+   ...
+
+Syscall param sysinfo(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+141:             SYS_seteuid 1s 0m
+---------------------------------------------------------
+Syscall param seteuid(euid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+142:             SYS_forksys 2s 0m
+---------------------------------------------------------
+Syscall param forksys(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param forksys(flags) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+144:        SYS_sigtimedwait 3s 3m
+---------------------------------------------------------
+Syscall param sigtimedwait(set) contains uninitialised byte(s)
+   ...
+
+Syscall param sigtimedwait(info) contains uninitialised byte(s)
+   ...
+
+Syscall param sigtimedwait(timeout) contains uninitialised byte(s)
+   ...
+
+Syscall param sigtimewait(set) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sigtimedwait(info) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sigtimedwait(timeout) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+146:               SYS_yield 0s 0m
+---------------------------------------------------------
+---------------------------------------------------------
+148:       SYS_lwp_sema_post 1s 3m
+---------------------------------------------------------
+Syscall param lwp_sema_post(sema) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sema_post(sema->type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_sema_post(sema->count) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_sema_post(sema->waiters) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+150:          SYS_lwp_detach 1s 0m
+---------------------------------------------------------
+Syscall param lwp_detach(lwpid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+153:             SYS_fchroot 1s 0m
+---------------------------------------------------------
+Syscall param fchroot(fd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+156:        SYS_gettimeofday 1s 1m
+---------------------------------------------------------
+Syscall param gettimeofday(tp) contains uninitialised byte(s)
+   ...
+
+Syscall param gettimeofday(tp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+157:           SYS_getitimer 2s 2m
+---------------------------------------------------------
+Syscall param getitimer(which) contains uninitialised byte(s)
+   ...
+
+Syscall param getitimer(value) contains uninitialised byte(s)
+   ...
+
+Syscall param getitimer(&value->it_interval) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param getitimer(&value->it_value) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+158:           SYS_setitimer 3s 4m
+---------------------------------------------------------
+Syscall param setitimer(which) contains uninitialised byte(s)
+   ...
+
+Syscall param setitimer(value) contains uninitialised byte(s)
+   ...
+
+Syscall param setitimer(ovalue) contains uninitialised byte(s)
+   ...
+
+Syscall param setitimer(&value->it_interval) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param setitimer(&value->it_value) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param setitimer(&ovalue->it_interval) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param setitimer(&ovalue->it_value) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+159:          SYS_lwp_create 3s 1m
+---------------------------------------------------------
+Syscall param lwp_create(ucp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_create(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_create(new_lwp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_create(new_lwp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+160:            SYS_lwp_exit ignore
+---------------------------------------------------------
+---------------------------------------------------------
+161:         SYS_lwp_suspend 1s 0m
+---------------------------------------------------------
+Syscall param lwp_suspend(lwpid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+162:        SYS_lwp_continue 1s 0m
+---------------------------------------------------------
+Syscall param lwp_continue(target_lwp) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+164:            SYS_lwp_self 0s 0m
+---------------------------------------------------------
+---------------------------------------------------------
+165:         SYS_lwp_sigmask 5s 0m
+---------------------------------------------------------
+Syscall param lwp_sigmask(how) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigmask(bits0) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigmask(bits1) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigmask(bits2) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigmask(bits3) contains uninitialised byte(s)
+   ...
+
+sigprocmask: unknown 'how' field 0
+---------------------------------------------------------
+166:         SYS_lwp_private 3s 1m
+---------------------------------------------------------
+Syscall param lwp_private(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_private(which) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_private(base) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_private(base) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+167:            SYS_lwp_wait 2s 1m
+---------------------------------------------------------
+Syscall param lwp_wait(lwpid) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_wait(departed) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_wait(departed) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+168:    SYS_lwp_mutex_wakeup 2s 2m
+---------------------------------------------------------
+Syscall param lwp_mutex_wakeup(lp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_mutex_wakeup(release_all) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_mutex_wakeup(lp->mutex_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_mutex_wakeup(lp->mutex_waiters) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+170:       SYS_lwp_cond_wait 4s 5m
+---------------------------------------------------------
+Syscall param lwp_cond_wait(cvp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_cond_wait(mp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_cond_wait(tsp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_cond_wait(check_part) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_cond_wait(cvp->type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_cond_wait(cvp->waiters_kernel) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_cond_wait(mp->mutex_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_cond_wait(mp->mutex_waiters) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_cond_wait(tsp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+172:  SYS_lwp_cond_broadcast 1s 2m
+---------------------------------------------------------
+Syscall param lwp_cond_broadcast(cvp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_cond_broadcast(cvp->type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_cond_broadcast(cvp->waiters_kernel) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+173:               SYS_pread 4s 1m
+---------------------------------------------------------
+Syscall param pread(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param pread(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param pread(nbyte) contains uninitialised byte(s)
+   ...
+
+Syscall param pread(offset) contains uninitialised byte(s)
+   ...
+
+Syscall param pread(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+174:              SYS_pwrite 4s 1m
+---------------------------------------------------------
+Syscall param pwrite(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param pwrite(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param pwrite(nbyte) contains uninitialised byte(s)
+   ...
+
+Syscall param pwrite(offset) contains uninitialised byte(s)
+   ...
+
+Syscall param pwrite(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+181:           SYS_rusagesys (_RUSAGESYS_GETRUSAGE) 2s 1m
+---------------------------------------------------------
+Syscall param rusagesys_getrusage(code) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getrusage(r_usage) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys(r_usage) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+181:           SYS_rusagesys (_RUSAGESYS_GETRUSAGE_CHLD) 2s 1m
+---------------------------------------------------------
+Syscall param rusagesys_getrusage(code) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getrusage(r_usage) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys(r_usage) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+181:           SYS_rusagesys (_RUSAGESYS_GETRUSAGE_LWP) 2s 1m
+---------------------------------------------------------
+Syscall param rusagesys_getrusage(code) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getrusage(r_usage) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys(r_usage) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+181:           SYS_rusagesys (_RUSAGESYS_GETVMUSAGE) 5s 1m
+---------------------------------------------------------
+Syscall param rusagesys_getvmusage(code) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getvmusage(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getvmusage(age) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getvmusage(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getvmusage(nres) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys(nres) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+181:           SYS_rusagesys (_RUSAGESYS_GETVMUSAGE) 5s 1m
+---------------------------------------------------------
+Syscall param rusagesys_getvmusage(code) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getvmusage(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getvmusage(age) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getvmusage(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys_getvmusage(nres) contains uninitialised byte(s)
+   ...
+
+Syscall param rusagesys(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+182:                SYS_port (PORT_CREATE) 1s 0m
+---------------------------------------------------------
+Syscall param port_create(opcode) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+182:                SYS_port (PORT_ASSOCIATE,PORT_SOURCE_FD) 6s 0m
+---------------------------------------------------------
+Syscall param port_associate(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a2) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a3) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a4) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+182:                SYS_port (PORT_ASSOCIATE,PORT_SOURCE_FILE) 6s 1m
+---------------------------------------------------------
+Syscall param port_associate(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a2) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a3) contains uninitialised byte(s)
+   ...
+
+Syscall param port_associate(a4) contains uninitialised byte(s)
+   ...
+
+Syscall param port(file_obj) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+182:                SYS_port (PORT_DISSOCIATE,PORT_SOURCE_FD) 6s 0m
+---------------------------------------------------------
+Syscall param port_dissociate(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a2) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a3) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a4) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+182:                SYS_port (PORT_DISSOCIATE,PORT_SOURCE_FILE) 6s 1m
+---------------------------------------------------------
+Syscall param port_dissociate(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a2) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a3) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dissociate(a4) contains uninitialised byte(s)
+   ...
+
+Syscall param port(file_obj) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+182:                SYS_port (PORT_SEND) 4s 0m
+---------------------------------------------------------
+Syscall param port_send(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_send(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_send(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_send(a2) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+182:                SYS_port (PORT_SENDN) 6s 2m
+---------------------------------------------------------
+Syscall param port_sendn(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_sendn(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_sendn(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_sendn(a2) contains uninitialised byte(s)
+   ...
+
+Syscall param port_sendn(a3) contains uninitialised byte(s)
+   ...
+
+Syscall param port_sendn(a4) contains uninitialised byte(s)
+   ...
+
+Syscall param port(ports) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param port(errors) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+182:                SYS_port (PORT_GET) 6s 1m
+---------------------------------------------------------
+Syscall param port_get(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_get(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_get(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_get(a2) contains uninitialised byte(s)
+   ...
+
+Syscall param port_get(a3) contains uninitialised byte(s)
+   ...
+
+Syscall param port_get(a4) contains uninitialised byte(s)
+   ...
+
+Syscall param port(uevp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+182:                SYS_port (PORT_GETN) 5s 2m
+---------------------------------------------------------
+Syscall param port_getn(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_getn(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_getn(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_getn(a2) contains uninitialised byte(s)
+   ...
+
+Syscall param port_getn(a3) contains uninitialised byte(s)
+   ...
+
+Syscall param port_getn(a4) contains uninitialised byte(s)
+   ...
+
+Syscall param port(timeout) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param port(uevp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+182:                SYS_port (PORT_ALERT) 5s 0m
+---------------------------------------------------------
+Syscall param port_alert(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_alert(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_alert(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_alert(a2) contains uninitialised byte(s)
+   ...
+
+Syscall param port_alert(a3) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+182:                SYS_port (PORT_DISPATCH) 6s 0m
+---------------------------------------------------------
+Syscall param port_dispatch(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dispatch(a0) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dispatch(a1) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dispatch(a2) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dispatch(a3) contains uninitialised byte(s)
+   ...
+
+Syscall param port_dispatch(a4) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+183:             SYS_pollsys 4s 5m
+---------------------------------------------------------
+Syscall param poll(fds) contains uninitialised byte(s)
+   ...
+
+Syscall param poll(nfds) contains uninitialised byte(s)
+   ...
+
+Syscall param poll(timeout) contains uninitialised byte(s)
+   ...
+
+Syscall param poll(set) contains uninitialised byte(s)
+   ...
+
+Syscall param poll(ufds.fd) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param poll(ufds.events) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param poll(ufds.revents) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param poll(timeout) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param poll(set) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_SYSLABELING) 1s 0m
+---------------------------------------------------------
+Syscall param labelsys_syslabeling(op) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_TNRH) 3s 1m
+---------------------------------------------------------
+Syscall param labelsys_tnrh(op) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_tnrh(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_tnrh(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_TNRHTP) 3s 1m
+---------------------------------------------------------
+Syscall param labelsys_tnrhtp(op) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_tnrhtp(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_tnrhtp(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_TNMLP) 3s 1m
+---------------------------------------------------------
+Syscall param labelsys_tnmlp(op) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_tnmlp(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_tnmlp(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_GETLABEL) 3s 2m
+---------------------------------------------------------
+Syscall param labelsys_getlabel(op) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_getlabel(path) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_getlabel(label) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param labelsys(label) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_FGETLABEL) 3s 1m
+---------------------------------------------------------
+Syscall param labelsys_fgetlabel(op) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_fgetlabel(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_fgetlabel(label) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys(label) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+185:                 SYS_acl (SETACL) 4s 2m
+---------------------------------------------------------
+Syscall param acl(pathp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(pathp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param acl(aclbufp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+185:                 SYS_acl (GETACL) 4s 2m
+---------------------------------------------------------
+Syscall param acl(pathp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(pathp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param acl(aclbufp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+185:                 SYS_acl (GETACLCNT) 4s 1m
+---------------------------------------------------------
+Syscall param acl(pathp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(pathp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+185:                 SYS_acl (ACE_SETACL) 4s 2m
+---------------------------------------------------------
+Syscall param acl(pathp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(pathp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param acl(aclbufp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+185:                 SYS_acl (ACE_GETACL) 4s 2m
+---------------------------------------------------------
+Syscall param acl(pathp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(pathp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param acl(aclbufp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+185:                 SYS_acl (ACE_GETACLCNT) 4s 1m
+---------------------------------------------------------
+Syscall param acl(pathp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param acl(pathp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_GETAUID) 2s 1m
+---------------------------------------------------------
+Syscall param auditsys_getauid(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_getauid(auid) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(auid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_SETAUID) 2s 1m
+---------------------------------------------------------
+Syscall param auditsys_setauid(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_setauid(auid) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(auid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_GETAUDIT) 2s 1m
+---------------------------------------------------------
+Syscall param auditsys_getaudit(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_getaudit(ai) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(ai) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_SETAUDIT) 2s 1m
+---------------------------------------------------------
+Syscall param auditsys_setaudit(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_setaudit(ai) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(ai) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDIT) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_audit(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_audit(record) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_audit(length) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(record) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETPOLICY) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getpolicy(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getpolicy(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getpolicy(policy) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(policy) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETPOLICY) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setpolicy(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setpolicy(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setpolicy(policy) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(policy) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETKMASK) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getkmask(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getkmask(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getkmask(kmask) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(kmask) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETKMASK) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setkmask(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setkmask(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setkmask(kmask) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(kmask) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETQCTRL) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getqctrl(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getqctrl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getqctrl(qctrl) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(qctrl) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETQCTRL) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setqctrl(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setqctrl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setqctrl(qctrl) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(qctrl) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETCWD) 4s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getcwd(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getcwd(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getcwd(data) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getcwd(length) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(data) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETCAR) 4s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getcar(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getcar(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getcar(data) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getcar(length) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(data) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETSTAT) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getstat(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getstat(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getstat(stats) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(stats) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETSTAT) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setstat(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setstat(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setstat(stats) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(stats) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETUMASK) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setumask(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setumask(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setumask(umask) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(umask) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETSMASK) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setsmask(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setsmask(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setsmask(smask) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(smask) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETCOND) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getcond(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getcond(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getcond(cond) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(cond) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETCOND) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setcond(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setcond(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setcond(state) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(cond) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETCLASS) 3s 0m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getclass(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getclass(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getclass(classmap) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETCLASS) 3s 0m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setclass(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setclass(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setclass(classmap) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETCLASS) 4s 0m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setclass(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setclass(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(classmap.ec_number) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param auditsys(classmap.ec_class) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETPINFO) 3s 0m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getpinfo(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getpinfo(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getpinfo(apinfo) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETPMASK) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setpmask(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setpmask(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setpmask(apinfo) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(apinfo) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETPINFO_ADDR) 4s 0m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getpinfo_addr(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getpinfo_addr(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getpinfo_addr(apinfo) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getpinfo_addr(length) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETKAUDIT) 4s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getkaudit(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getkaudit(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getkaudit(kaudit) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getkaudit(length) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(kaudit) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETKAUDIT) 4s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setkaudit(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setkaudit(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setkaudit(kaudit) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setkaudit(length) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(kaudit) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_GETAMASK) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_getamask(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getamask(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_getamask(amask) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(amask) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITCTL,A_SETAMASK) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_auditctl_setamask(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setamask(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_auditctl_setamask(amask) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(amask) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_GETAUDIT_ADDR) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_getaudit_addr(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_getaudit_addr(ai) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_getaudit_addr(len) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(ai) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_SETAUDIT_ADDR) 3s 1m
+---------------------------------------------------------
+Syscall param auditsys_setaudit_addr(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_setaudit_addr(ai) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_setaudit_addr(len) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys(ai) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+186:            SYS_auditsys (BSM_AUDITDOOR) 2s 0m
+---------------------------------------------------------
+Syscall param auditsys_door(code) contains uninitialised byte(s)
+   ...
+
+Syscall param auditsys_door(fd) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+189:            SYS_p_online 2s 0m
+---------------------------------------------------------
+Syscall param p_online(processorid) contains uninitialised byte(s)
+   ...
+
+Syscall param p_online(flag) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+190:            SYS_sigqueue 5s 1m
+---------------------------------------------------------
+Syscall param sigqueue(pid) contains uninitialised byte(s)
+   ...
+
+Syscall param sigqueue(signo) contains uninitialised byte(s)
+   ...
+
+Syscall param sigqueue(value) contains uninitialised byte(s)
+   ...
+
+Syscall param sigqueue(si_code) contains uninitialised byte(s)
+   ...
+
+Syscall param sigqueue(timeout) contains uninitialised byte(s)
+   ...
+
+Syscall param sigqueue(timeout) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+191:       SYS_clock_gettime 2s 1m
+---------------------------------------------------------
+Syscall param clock_gettime(clock_id) contains uninitialised byte(s)
+   ...
+
+Syscall param clock_gettime(tp) contains uninitialised byte(s)
+   ...
+
+Syscall param clock_gettime(tp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+192:       SYS_clock_settime 2s 1m
+---------------------------------------------------------
+Syscall param clock_settime(clock_id) contains uninitialised byte(s)
+   ...
+
+Syscall param clock_settime(tp) contains uninitialised byte(s)
+   ...
+
+Syscall param clock_settime(tp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+193:        SYS_clock_getres 2s 1m
+---------------------------------------------------------
+Syscall param clock_getres(clock_id) contains uninitialised byte(s)
+   ...
+
+Syscall param clock_getres(res) contains uninitialised byte(s)
+   ...
+
+Syscall param clock_getres(res) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+194:        SYS_timer_create 3s 4m
+---------------------------------------------------------
+Syscall param timer_create(clock_id) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_create(evp) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_create(timerid) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_create(evp.sigev_notify) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param timer_create(evp.sigev_signo) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param timer_create(evp.sigev_value.sival_int) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param timer_create(timerid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+194:        SYS_timer_create 5s 2m
+---------------------------------------------------------
+Syscall param timer_create(clock_id) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_create(timerid) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_create(evp.sigev_notify) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param timer_create(evp.sigev_signo) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param timer_create(evp.sigev_value.sival_int) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param timer_create(evp.sigev_value.sival_ptr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param timer_create(timerid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+195:        SYS_timer_delete 1s 0m
+---------------------------------------------------------
+Syscall param timer_delete(timerid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+196:       SYS_timer_settime 4s 2m
+---------------------------------------------------------
+Syscall param timer_settime(timerid) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_settime(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_settime(value) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_settime(ovalue) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_settime(value) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param timer_settime(ovalue) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+197:       SYS_timer_gettime 2s 1m
+---------------------------------------------------------
+Syscall param timer_gettime(timerid) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_gettime(value) contains uninitialised byte(s)
+   ...
+
+Syscall param timer_gettime(value) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+198:    SYS_timer_getoverrun 1s 0m
+---------------------------------------------------------
+Syscall param timer_getoverrun(timerid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+199:           SYS_nanosleep 2s 2m
+---------------------------------------------------------
+Syscall param nanosleep(req) contains uninitialised byte(s)
+   ...
+
+Syscall param nanosleep(rem) contains uninitialised byte(s)
+   ...
+
+Syscall param nanosleep(req) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param nanosleep(rem) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+200:                SYS_facl (SETACL) 4s 1m
+---------------------------------------------------------
+Syscall param facl(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+200:                SYS_facl (GETACL) 4s 1m
+---------------------------------------------------------
+Syscall param facl(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+200:                SYS_facl (GETACLCNT) 4s 0m
+---------------------------------------------------------
+Syscall param facl(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+200:                SYS_facl (ACE_SETACL) 4s 1m
+---------------------------------------------------------
+Syscall param facl(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+200:                SYS_facl (ACE_GETACL) 4s 1m
+---------------------------------------------------------
+Syscall param facl(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+200:                SYS_facl (ACE_GETACLCNT) 4s 0m
+---------------------------------------------------------
+Syscall param facl(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(nentries) contains uninitialised byte(s)
+   ...
+
+Syscall param facl(aclbufp) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+201:                SYS_door (DOOR_CREATE) 4s 0m
+---------------------------------------------------------
+Syscall param door(arg1) contains uninitialised byte(s)
+   ...
+
+Syscall param door(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param door(arg3) contains uninitialised byte(s)
+   ...
+
+Syscall param door(subcode) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+201:                SYS_door (DOOR_REVOKE) 2s 0m
+---------------------------------------------------------
+Syscall param door(arg1) contains uninitialised byte(s)
+   ...
+
+Syscall param door(subcode) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+201:                SYS_door (DOOR_INFO) 3s 1m
+---------------------------------------------------------
+Syscall param door(arg1) contains uninitialised byte(s)
+   ...
+
+Syscall param door(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param door(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param door_info(info) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+201:                SYS_door (DOOR_CALL) 3s 6m
+---------------------------------------------------------
+Syscall param door(arg1) contains uninitialised byte(s)
+   ...
+
+Syscall param door(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param door(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param door_call(params->data_ptr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param door_call(params->data_size) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param door_call(params->desc_ptr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param door_call(params->desc_num) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param door_call(params->rbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param door_call(params->rsize) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+201:                SYS_door (DOOR_CALL) 9s 2m
+---------------------------------------------------------
+Syscall param door(arg1) contains uninitialised byte(s)
+   ...
+
+Syscall param door(arg2) contains uninitialised byte(s)
+   ...
+
+Syscall param door(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param door_call(params->data_ptr) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param door_call(params->data_size) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param door_call(params->desc_ptr) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param door_call(params->desc_num) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param door_call(params->rbuf) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param door_call(params->rsize) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param door_call(params->desc_ptr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param door_call(params->rbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+202:            SYS_setreuid 2s 0m
+---------------------------------------------------------
+Syscall param setreuid(ruid) contains uninitialised byte(s)
+   ...
+
+Syscall param setreuid(euid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+203:            SYS_setregid 2s 0m
+---------------------------------------------------------
+Syscall param setregid(rgid) contains uninitialised byte(s)
+   ...
+
+Syscall param setregid(egid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+206:            SYS_schedctl 0s 0m
+---------------------------------------------------------
+---------------------------------------------------------
+207:                SYS_pset (CREATE) 2s 1m
+---------------------------------------------------------
+Syscall param pset_create(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_create(newpset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(newpset) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (DESTROY) 2s 0m
+---------------------------------------------------------
+Syscall param pset_destroy(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_destroy(pset) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+207:                SYS_pset (ASSIGN) 4s 1m
+---------------------------------------------------------
+Syscall param pset_assign(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_assign(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_assign(cpu) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_assign(opset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(opset) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (INFO) 5s 3m
+---------------------------------------------------------
+Syscall param pset_info(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_info(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_info(type) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_info(numcpus) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_info(cpulist) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param pset(numcpus) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (INFO) 5s 1m
+---------------------------------------------------------
+Syscall param pset_info(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_info(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_info(type) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_info(numcpus) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_info(cpulist) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(cpulist) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (BIND) 5s 1m
+---------------------------------------------------------
+Syscall param pset_bind(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_bind(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_bind(idtype) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_bind(id) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_bind(opset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(opset) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (BIND_LWP) 5s 1m
+---------------------------------------------------------
+Syscall param pset_bind_lwp(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_bind_lwp(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_bind_lwp(id) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_bind_lwp(pid) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_bind_lwp(opset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(opset) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (GETLOADAVG) 4s 1m
+---------------------------------------------------------
+Syscall param pset_getloadavg(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_getloadavg(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_getloadavg(loadavg[]) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_getloadavg(nelem) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(loadavg) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (LIST) 3s 1m
+---------------------------------------------------------
+Syscall param pset_list(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_list(psetlist) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_list(numpsets) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(numpsets) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (LIST) 3s 1m
+---------------------------------------------------------
+Syscall param pset_list(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_list(psetlist) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_list(numpsets) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(psetlist) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (SETATTR) 3s 0m
+---------------------------------------------------------
+Syscall param pset_setattr(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_setattr(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_setattr(attr) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+207:                SYS_pset (GETATTR) 3s 1m
+---------------------------------------------------------
+Syscall param pset_getattr(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_getattr(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_getattr(attr) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(attr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207:                SYS_pset (ASSIGN_FORCED) 4s 1m
+---------------------------------------------------------
+Syscall param pset_assign_forced(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_assign_forced(pset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_assign_forced(cpu) contains uninitialised byte(s)
+   ...
+
+Syscall param pset_assign_forced(opset) contains uninitialised byte(s)
+   ...
+
+Syscall param pset(opset) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+209:         SYS_resolvepath 3s 2m
+---------------------------------------------------------
+Syscall param resolvepath(path) contains uninitialised byte(s)
+   ...
+
+Syscall param resolvepath(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param resolvepath(bufsiz) contains uninitialised byte(s)
+   ...
+
+Syscall param resolvepath(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param resolvepath(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+210: SYS_lwp_mutex_timedlock 3s 7m
+---------------------------------------------------------
+Syscall param lwp_mutex_timedlock(lp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_mutex_timedlock(tsp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_mutex_timedlock(owner) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_mutex_timedlock(lp->mutex_flag) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_mutex_timedlock(lp->mutex_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_mutex_timedlock(lp->mutex_owner) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_mutex_timedlock(lp->mutex_ownerpid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_mutex_timedlock(lp->mutex_lockw) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_mutex_timedlock(lp->mutex_waiters) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_mutex_timedlock(tsp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+211:  SYS_lwp_sema_timedwait 3s 4m
+---------------------------------------------------------
+Syscall param lwp_sema_timedwait(sema) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sema_timedwait(timeout) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sema_timedwait(check_park) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sema_timedwait(sema->type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_sema_timedwait(sema->count) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_sema_timedwait(sema->waiters) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_sema_timedwait(timeout) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+212:      SYS_lwp_rwlock_sys (RDLOCK) 3s 8m
+---------------------------------------------------------
+Syscall param lwp_rwlock_rdlock(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock_rdlock(rwlp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock_rdlock(tsp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock(rwlp->rwlock_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->rwlock_readers) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_owner) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_ownerpid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_lockw) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_waiters) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(tsp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+212:      SYS_lwp_rwlock_sys (WRLOCK) 3s 8m
+---------------------------------------------------------
+Syscall param lwp_rwlock_wrlock(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock_wrlock(rwlp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock_wrlock(tsp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock(rwlp->rwlock_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->rwlock_readers) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_owner) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_ownerpid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_lockw) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_waiters) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(tsp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+212:      SYS_lwp_rwlock_sys (TRYRDLOCK) 2s 7m
+---------------------------------------------------------
+Syscall param lwp_rwlock_tryrdlock(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock_tryrdlock(rwlp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock(rwlp->rwlock_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->rwlock_readers) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_owner) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_ownerpid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_lockw) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_waiters) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+212:      SYS_lwp_rwlock_sys (TRYWRLOCK) 2s 7m
+---------------------------------------------------------
+Syscall param lwp_rwlock_trywrlock(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock_trywrlock(rwlp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock(rwlp->rwlock_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->rwlock_readers) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_owner) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_ownerpid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_lockw) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_waiters) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+212:      SYS_lwp_rwlock_sys (UNLOCK) 2s 2m
+---------------------------------------------------------
+Syscall param lwp_rwlock_unlock(subcode) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock_unlock(rwlp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_rwlock(rwlp->mutex.mutex_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_rwlock(rwlp->rwlock_readers) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_CREATE) 2s 12m
+---------------------------------------------------------
+Syscall param zone_create(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_create(zd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(zd.zone_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.zone_root) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.zone_privs) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.zone_privssz) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.rctlbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.rctlbufsz) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.zfsbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.zfsbufsz) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.extended_error) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.match) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.doi) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.label) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.flags) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (create) 2s 19m
+---------------------------------------------------------
+Syscall param zone_create(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_create(zd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(zd.zone_name) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.zone_root) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.zone_privs) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.zone_privssz) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.rctlbuf) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.rctlbufsz) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.zfsbuf) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.zfsbufsz) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.extended_error) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.match) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.doi) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.label) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.flags) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param zone(zd.zone_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.zone_root) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.zone_privs) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.rctlbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.zfsbuf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(zd.label) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_DESTROY) 2s 0m
+---------------------------------------------------------
+Syscall param zone_destroy(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_destroy(zoneid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_GETATTR) 5s 1m
+---------------------------------------------------------
+Syscall param zone_getattr(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_getattr(zoneid) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_getattr(attr) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_getattr(valp) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_getattr(size) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(valp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_ENTER) 2s 0m
+---------------------------------------------------------
+Syscall param zone_enter(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_enter(zoneid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_LIST) 3s 1m
+---------------------------------------------------------
+Syscall param zone_list(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list(zonelist) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list(numzones) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(numzones) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_LIST) 3s 1m
+---------------------------------------------------------
+Syscall param zone_list(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list(zonelist) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list(numzones) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(zonelist) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_SHUTDOWN) 2s 0m
+---------------------------------------------------------
+Syscall param zone_shutdown(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_shutdown(zoneid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_LOOKUP) 2s 1m
+---------------------------------------------------------
+Syscall param zone_lookup(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_lookup(name) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_BOOT) 2s 0m
+---------------------------------------------------------
+Syscall param zone_boot(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_boot(zoneid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_SETATTR) 5s 1m
+---------------------------------------------------------
+Syscall param zone_setattr(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_setattr(zoneid) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_setattr(attr) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_setattr(valp) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_setattr(size) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(valp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_DEL_DATALINK) 3s 0m
+---------------------------------------------------------
+Syscall param zone_del_datalink(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_del_datalink(zoneid) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_del_datalink(linkid) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_LIST_DATALINK) 4s 1m
+---------------------------------------------------------
+Syscall param zone_list_datalink(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list_datalink(zoneid) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list_datalink(dlnump) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list_datalink(linkids) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(dlnump) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+229:              SYS_getcwd 2s 1m
+---------------------------------------------------------
+Syscall param getcwd(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param getcwd(size) contains uninitialised byte(s)
+   ...
+
+Syscall param getcwd(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+230:           SYS_so_socket 5s 1m
+---------------------------------------------------------
+Syscall param socket(family) contains uninitialised byte(s)
+   ...
+
+Syscall param socket(type) contains uninitialised byte(s)
+   ...
+
+Syscall param socket(protocol) contains uninitialised byte(s)
+   ...
+
+Syscall param socket(devpath) contains uninitialised byte(s)
+   ...
+
+Syscall param socket(version) contains uninitialised byte(s)
+   ...
+
+Syscall param socket(devpath) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+231:       SYS_so_socketpair 1s 1m
+---------------------------------------------------------
+Syscall param socketpair(sv) contains uninitialised byte(s)
+   ...
+
+Syscall param socketpair(sv) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+232:                SYS_bind 4s 0m
+---------------------------------------------------------
+Syscall param bind(s) contains uninitialised byte(s)
+   ...
+
+Syscall param bind(name) contains uninitialised byte(s)
+   ...
+
+Syscall param bind(namelen) contains uninitialised byte(s)
+   ...
+
+Syscall param bind(version) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+233:              SYS_listen 3s 0m
+---------------------------------------------------------
+Syscall param listen(s) contains uninitialised byte(s)
+   ...
+
+Syscall param listen(backlog) contains uninitialised byte(s)
+   ...
+
+Syscall param listen(version) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+234:              SYS_accept 4s 0m
+---------------------------------------------------------
+Syscall param accept(s) contains uninitialised byte(s)
+   ...
+
+Syscall param accept(addr) contains uninitialised byte(s)
+   ...
+
+Syscall param accept(addrlen) contains uninitialised byte(s)
+   ...
+
+Syscall param accept(version) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+235:             SYS_connect 4s 0m
+---------------------------------------------------------
+Syscall param connect(s) contains uninitialised byte(s)
+   ...
+
+Syscall param connect(name) contains uninitialised byte(s)
+   ...
+
+Syscall param connect(namelen) contains uninitialised byte(s)
+   ...
+
+Syscall param connect(version) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+236:            SYS_shutdown 3s 0m
+---------------------------------------------------------
+Syscall param shutdown(sock) contains uninitialised byte(s)
+   ...
+
+Syscall param shutdown(how) contains uninitialised byte(s)
+   ...
+
+Syscall param shutdown(version) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+237:                SYS_recv 4s 1m
+---------------------------------------------------------
+Syscall param recv(s) contains uninitialised byte(s)
+   ...
+
+Syscall param recv(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param recv(len) contains uninitialised byte(s)
+   ...
+
+Syscall param recv(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param socketcall.recv(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+238:            SYS_recvfrom 6s 1m
+---------------------------------------------------------
+Syscall param recvfrom(s) contains uninitialised byte(s)
+   ...
+
+Syscall param recvfrom(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param recvfrom(len) contains uninitialised byte(s)
+   ...
+
+Syscall param recvfrom(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param recvfrom(from) contains uninitialised byte(s)
+   ...
+
+Syscall param recvfrom(fromlen) contains uninitialised byte(s)
+   ...
+
+Syscall param socketcall.recvfrom(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+239:             SYS_recvmsg 3s 0m
+---------------------------------------------------------
+Syscall param recvmsg(s) contains uninitialised byte(s)
+   ...
+
+Syscall param recvmsg(msg) contains uninitialised byte(s)
+   ...
+
+Syscall param recvmsg(flags) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+240:                SYS_send 4s 1m
+---------------------------------------------------------
+Syscall param send(s) contains uninitialised byte(s)
+   ...
+
+Syscall param send(msg) contains uninitialised byte(s)
+   ...
+
+Syscall param send(len) contains uninitialised byte(s)
+   ...
+
+Syscall param send(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param socketcall.send(msg) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+241:             SYS_sendmsg 3s 0m
+---------------------------------------------------------
+Syscall param sendmsg(s) contains uninitialised byte(s)
+   ...
+
+Syscall param sendmsg(msg) contains uninitialised byte(s)
+   ...
+
+Syscall param sendmsg(flags) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+242:              SYS_sendto 6s 1m
+---------------------------------------------------------
+Syscall param sendto(s) contains uninitialised byte(s)
+   ...
+
+Syscall param sendto(msg) contains uninitialised byte(s)
+   ...
+
+Syscall param sendto(len) contains uninitialised byte(s)
+   ...
+
+Syscall param sendto(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param sendto(to) contains uninitialised byte(s)
+   ...
+
+Syscall param sendto(tolen) contains uninitialised byte(s)
+   ...
+
+Syscall param socketcall.sendto(msg) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+243:         SYS_getpeername 4s 1m
+---------------------------------------------------------
+Syscall param getpeername(s) contains uninitialised byte(s)
+   ...
+
+Syscall param getpeername(name) contains uninitialised byte(s)
+   ...
+
+Syscall param getpeername(namelen) contains uninitialised byte(s)
+   ...
+
+Syscall param getpeername(version) contains uninitialised byte(s)
+   ...
+
+Syscall param getpeername(namelen) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+243:         SYS_getpeername 4s 1m
+---------------------------------------------------------
+Syscall param getpeername(s) contains uninitialised byte(s)
+   ...
+
+Syscall param getpeername(name) contains uninitialised byte(s)
+   ...
+
+Syscall param getpeername(version) contains uninitialised byte(s)
+   ...
+
+Syscall param getpeername(namelen) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param getpeername(name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+244:         SYS_getsockname 4s 1m
+---------------------------------------------------------
+Syscall param getsockname(s) contains uninitialised byte(s)
+   ...
+
+Syscall param getsockname(name) contains uninitialised byte(s)
+   ...
+
+Syscall param getsockname(namelen) contains uninitialised byte(s)
+   ...
+
+Syscall param getsockname(version) contains uninitialised byte(s)
+   ...
+
+Syscall param socketcall.getsockname(namelen_in) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+245:          SYS_getsockopt 6s 0m
+---------------------------------------------------------
+Syscall param getsockopt(s) contains uninitialised byte(s)
+   ...
+
+Syscall param getsockopt(level) contains uninitialised byte(s)
+   ...
+
+Syscall param getsockopt(optname) contains uninitialised byte(s)
+   ...
+
+Syscall param getsockopt(optval) contains uninitialised byte(s)
+   ...
+
+Syscall param getsockopt(option) contains uninitialised byte(s)
+   ...
+
+Syscall param getsockopt(version) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+246:          SYS_setsockopt 6s 1m
+---------------------------------------------------------
+Syscall param setsockopt(s) contains uninitialised byte(s)
+   ...
+
+Syscall param setsockopt(level) contains uninitialised byte(s)
+   ...
+
+Syscall param setsockopt(optname) contains uninitialised byte(s)
+   ...
+
+Syscall param setsockopt(optval) contains uninitialised byte(s)
+   ...
+
+Syscall param setsockopt(optlen) contains uninitialised byte(s)
+   ...
+
+Syscall param setsockopt(version) contains uninitialised byte(s)
+   ...
+
+Syscall param socketcall.setsockopt(optval) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+252:  SYS_lwp_mutex_register 2s 1m
+---------------------------------------------------------
+Syscall param lwp_mutex_register(mp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_mutex_register(uaddr) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_mutex_register(mp->mutex_type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+254:              SYS_uucopy 3s 2m
+---------------------------------------------------------
+Syscall param uucopy(s1) contains uninitialised byte(s)
+   ...
+
+Syscall param uucopy(s2) contains uninitialised byte(s)
+   ...
+
+Syscall param uucopy(n) contains uninitialised byte(s)
+   ...
+
+Syscall param uucopy(s1) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param uucopy(s2) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+255:             SYS_umount2 2s 1m
+---------------------------------------------------------
+Syscall param umount2(file) contains uninitialised byte(s)
+   ...
+
+Syscall param umount2(mflag) contains uninitialised byte(s)
+   ...
+
+Syscall param umount2(file) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+  1:                SYS_exit 1s 0m
+---------------------------------------------------------
+Syscall param exit(status) contains uninitialised byte(s)
+   ...
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar.stdout.exp
diff --git a/memcheck/tests/solaris/scalar.vgtest b/memcheck/tests/solaris/scalar.vgtest
new file mode 100644
index 0000000..20d2e6e
--- /dev/null
+++ b/memcheck/tests/solaris/scalar.vgtest
@@ -0,0 +1,10 @@
+prog: scalar
+vgopts: -q --error-limit=no --sim-hints=lax-doors
+stderr_filter: filter_scalar
+# Remove all frames from the stack trace except the first one.
+# This is important because syscall() function on x86 isn't ABI conformant
+# which confuses the Valgrind stack unwinder.
+# Therefore x86 and amd64 stack traces are unified so that they contain only
+# 'syscall (in libc)' stack frame and this is then filtered out completely.
+stderr_filter_args: libc
+
diff --git a/memcheck/tests/solaris/scalar_frealpathat.c b/memcheck/tests/solaris/scalar_frealpathat.c
new file mode 100644
index 0000000..7a4cd76
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_frealpathat.c
@@ -0,0 +1,17 @@
+/* Test for frealpathat syscall which is available on Solaris 11.1. */ 
+
+#include "scalar.h"
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_frealpathat           30 */
+   GO(SYS_frealpathat, "4s 2m");
+   SY(SYS_frealpathat, x0 - 1, x0 + 1, x0 + 2, x0 + 3); FAIL;
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_frealpathat.stderr.exp b/memcheck/tests/solaris/scalar_frealpathat.stderr.exp
new file mode 100644
index 0000000..aca2880
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_frealpathat.stderr.exp
@@ -0,0 +1,23 @@
+---------------------------------------------------------
+ 30:         SYS_frealpathat 4s 2m
+---------------------------------------------------------
+Syscall param frealpathat(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param frealpathat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param frealpathat(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param frealpathat(buflen) contains uninitialised byte(s)
+   ...
+
+Syscall param frealpathat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param frealpathat(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_frealpathat.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_frealpathat.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_frealpathat.vgtest b/memcheck/tests/solaris/scalar_frealpathat.vgtest
new file mode 100644
index 0000000..8f535ae
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_frealpathat.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_frealpathat
+prog: scalar_frealpathat
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_ioctl.c b/memcheck/tests/solaris/scalar_ioctl.c
new file mode 100644
index 0000000..dfc39fb
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_ioctl.c
@@ -0,0 +1,516 @@
+/* Basic ioctl scalar tests. */
+
+#define __EXTENSIONS__ 1
+
+#include "scalar.h"
+
+#include <net/if.h>
+#include <sys/crypto/ioctl.h>
+#include <sys/dtrace.h>
+#include <sys/filio.h>
+#include <sys/stat.h>		/* for _ST_FSTYPSZ */
+#include <sys/mntio.h>
+#include <sys/mnttab.h>
+#include <sys/pool_impl.h>
+#include <sys/sockio.h>
+#include <sys/stropts.h>
+#include <sys/termios.h>
+
+/* pools */
+__attribute__((noinline))
+static void sys_ioctl_POOL_STATUSQ(void)
+{
+   GO(SYS_ioctl, "(POOL_STATUSQ) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + POOL_STATUSQ, x0); FAIL;
+}
+
+/* mntio */
+__attribute__((noinline))
+static void sys_ioctl_MNTIOC_GETMNTANY(void)
+{
+   GO(SYS_ioctl, "(MNTIOC_GETMNTANY) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + MNTIOC_GETMNTANY, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_MNTIOC_GETMNTANY_2(void)
+{
+   struct mntentbuf embuf;
+
+   embuf.mbuf_emp = (void *) (x0 + 1);
+   embuf.mbuf_buf = (void *) (x0 + 1);
+   embuf.mbuf_bufsize = x0 + 1;
+
+   GO(SYS_ioctl, "(MNTIOC_GETMNTANY) 4s 2m");
+   SY(SYS_ioctl, x0 - 1, x0 + MNTIOC_GETMNTANY, &embuf + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_MNTIOC_GETMNTANY_3(void)
+{
+   struct mnttab mnt;
+   struct mntentbuf embuf;
+
+   mnt.mnt_special = (void *) (x0 + 1);
+   mnt.mnt_mountp = (void *) (x0 + 1);
+   mnt.mnt_fstype = (void *) (x0 + 1);
+   mnt.mnt_mntopts = (void *) (x0 + 1);
+   mnt.mnt_time = (void *) (x0 + 1);
+
+   embuf.mbuf_emp = x0 + (struct extmnttab *) &mnt;
+   embuf.mbuf_buf = (void *) (x0 + 1);
+   embuf.mbuf_bufsize = x0 + 1;
+
+   GO(SYS_ioctl, "(MNTIOC_GETMNTANY) 5s 6m");
+   SY(SYS_ioctl, x0 - 1, x0 + MNTIOC_GETMNTANY, &embuf + x0); FAIL;
+}
+
+/* termio/termios */
+__attribute__((noinline))
+static void sys_ioctl_TCGETA(void)
+{
+   GO(SYS_ioctl, "(TCGETA) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TCGETA, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TCGETS(void)
+{
+   GO(SYS_ioctl, "(TCGETS) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TCGETS, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TCSETS(void)
+{
+   GO(SYS_ioctl, "(TCSETS) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TCSETS, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TCSETSW(void)
+{
+   GO(SYS_ioctl, "(TCSETSW) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TCSETSW, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TCSETSF(void)
+{
+   GO(SYS_ioctl, "(TCSETSF) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TCSETSF, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TIOCGWINSZ(void)
+{
+   GO(SYS_ioctl, "(TIOCGWINSZ) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TIOCGWINSZ, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TIOCSWINSZ(void)
+{
+   GO(SYS_ioctl, "(TIOCSWINSZ) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TIOCSWINSZ, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TIOCGPGRP(void)
+{
+   GO(SYS_ioctl, "(TIOCGPGRP) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TIOCGPGRP, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TIOCSPGRP(void)
+{
+   GO(SYS_ioctl, "(TIOCSPGRP) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TIOCSPGRP, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TIOCGSID(void)
+{
+   GO(SYS_ioctl, "(TIOCGSID) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + TIOCGSID, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TIOCNOTTY(void)
+{
+   GO(SYS_ioctl, "(TIOCNOTTY) 2s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + TIOCNOTTY); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_TIOCSCTTY(void)
+{
+   GO(SYS_ioctl, "(TIOCSCTTY) 2s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + TIOCSCTTY); FAIL;
+}
+
+/* STREAMS */
+__attribute__((noinline))
+static void sys_ioctl_I_PUSH(void)
+{
+   GO(SYS_ioctl, "(I_PUSH) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + I_PUSH, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_I_STR(void)
+{
+   GO(SYS_ioctl, "(I_STR) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + I_STR, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_I_STR_2(void)
+{
+   struct strioctl str;
+
+   str.ic_cmd = x0;
+   str.ic_timout = x0;
+   str.ic_len = x0 + 1;
+   str.ic_dp = (void *) (x0 + 1);
+
+   GO(SYS_ioctl, "(I_STR) 4s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + I_STR, &str + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_I_PEEK(void)
+{
+   GO(SYS_ioctl, "(I_PEEK) 3s 7m");
+   SY(SYS_ioctl, x0 - 1, x0 + I_PEEK, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_I_PEEK_2(void)
+{
+   struct strpeek peek;
+
+   peek.ctlbuf.maxlen = x0 + 1;
+   peek.ctlbuf.len = x0;
+   peek.ctlbuf.buf = (void*)(x0 + 1);
+   peek.databuf.maxlen = x0 + 1;
+   peek.databuf.len = x0;
+   peek.databuf.buf = (void*)(x0 + 1);
+   peek.flags = x0;
+
+   GO(SYS_ioctl, "(I_PEEK) 3s 7m");
+   SY(SYS_ioctl, x0 - 1, x0 + I_PEEK, &peek + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_I_CANPUT(void)
+{
+   GO(SYS_ioctl, "(I_CANPUT) 3s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + I_CANPUT, x0); FAIL;
+}
+
+/* sockio */
+__attribute__((noinline))
+static void sys_ioctl_SIOCGIFCONF(void)
+{
+   GO(SYS_ioctl, "(SIOCGIFCONF), 3s 2m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFCONF, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGIFCONF_2(void)
+{
+   struct ifconf ifc;
+   char buf[] = "";
+
+   ifc.ifc_len = x0 + 1;
+   ifc.ifc_buf = (void *) (x0 + buf);
+
+   GO(SYS_ioctl, "(SIOCGIFCONF), 5s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFCONF, &ifc + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGIFFLAGS(void)
+{
+   GO(SYS_ioctl, "(SIOCGIFFLAGS) 3s 2m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFFLAGS, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGIFFLAGS_2(void)
+{
+   struct ifreq ifr;
+
+   ifr.ifr_name[0] = x0 + 'l';
+   ifr.ifr_name[1] = x0 + 'o';
+   ifr.ifr_name[2] = x0 + '0';
+   ifr.ifr_name[3] = x0 + '\0';
+
+   GO(SYS_ioctl, "(SIOCGIFFLAGS), 4s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFFLAGS, &ifr + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGIFNETMASK(void)
+{
+   GO(SYS_ioctl, "(SIOCGIFNETMASK) 3s 2m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFNETMASK, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGIFNETMASK_2(void)
+{
+   struct ifreq ifr;
+
+   ifr.ifr_name[0] = x0 + 'l';
+   ifr.ifr_name[1] = x0 + 'o';
+   ifr.ifr_name[2] = x0 + '0';
+   ifr.ifr_name[3] = x0 + '\0';
+
+   GO(SYS_ioctl, "(SIOCGIFNETMASK), 4s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFNETMASK, &ifr + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGIFNUM(void)
+{
+   int ifnum;
+
+   GO(SYS_ioctl, "(SIOCGIFNUM) 3s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFNUM, &ifnum + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGIFNUM_2(void)
+{
+   GO(SYS_ioctl, "(SIOCGIFNUM) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFNUM, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFBRDADDR(void)
+{
+   GO(SYS_ioctl, "(SIOCGLIFBRDADDR) 3s 2m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFBRDADDR, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFBRDADDR_2(void)
+{
+   struct lifreq lifr;
+
+   lifr.lifr_name[0] = x0 + 'l';
+   lifr.lifr_name[1] = x0 + 'o';
+   lifr.lifr_name[2] = x0 + '0';
+   lifr.lifr_name[3] = x0 + '\0';
+
+   GO(SYS_ioctl, "(SIOCGLIFBRDADDR), 4s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFBRDADDR, &lifr + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFCONF(void)
+{
+   GO(SYS_ioctl, "(SIOCGLIFCONF), 3s 4m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFCONF, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFCONF_2(void)
+{
+   struct lifconf lifc;
+   char buf[] = "";
+
+   lifc.lifc_len = x0 + 1;
+   lifc.lifc_buf = (void *) (x0 + buf);
+   lifc.lifc_family = x0 + 1;
+   lifc.lifc_flags = x0 + 0;
+
+   GO(SYS_ioctl, "(SIOCGLIFCONF), 7s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFCONF, &lifc + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFFLAGS(void)
+{
+   GO(SYS_ioctl, "(SIOCGLIFFLAGS) 3s 2m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFFLAGS, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFFLAGS_2(void)
+{
+   struct lifreq lifr;
+
+   lifr.lifr_name[0] = x0 + 'l';
+   lifr.lifr_name[1] = x0 + 'o';
+   lifr.lifr_name[2] = x0 + '0';
+   lifr.lifr_name[3] = x0 + '\0';
+
+   GO(SYS_ioctl, "(SIOCGLIFFLAGS), 4s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFFLAGS, &lifr + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFNETMASK(void)
+{
+   GO(SYS_ioctl, "(SIOCGLIFNETMASK) 3s 2m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFNETMASK, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFNETMASK_2(void)
+{
+   struct lifreq lifr;
+
+   lifr.lifr_name[0] = x0 + 'l';
+   lifr.lifr_name[1] = x0 + 'o';
+   lifr.lifr_name[2] = x0 + '0';
+   lifr.lifr_name[3] = x0 + '\0';
+
+   GO(SYS_ioctl, "(SIOCGLIFNETMASK), 4s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFNETMASK, &lifr + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFNUM(void)
+{
+   struct lifnum lifn;
+
+   lifn.lifn_family = x0;
+   lifn.lifn_flags = x0;
+
+   GO(SYS_ioctl, "(SIOCGLIFNUM) 4s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFNUM, &lifn + x0); FAIL;
+}
+
+/* filio */
+__attribute__((noinline))
+static void sys_ioctl_FIOSETOWN(void)
+{
+   pid_t pid;
+
+   GO(SYS_ioctl, "(FIOSETOWN) 4s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + FIOSETOWN, &pid + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_FIOGETOWN(void)
+{
+   GO(SYS_ioctl, "(FIOGETOWN) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + FIOGETOWN, x0 + 1); FAIL;
+}
+
+/* crypto */
+__attribute__((noinline))
+static void sys_ioctl_CRYPTO_GET_PROVIDER_LIST(void)
+{
+   GO(SYS_ioctl, "(CRYPTO_GET_PROVIDER_LIST) 3s 1m");
+   SY(SYS_ioctl, x0 - 1, x0 + CRYPTO_GET_PROVIDER_LIST, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_CRYPTO_GET_PROVIDER_LIST_2(void)
+{
+   crypto_get_provider_list_t pl;
+
+   pl.pl_count = x0 + 1;
+
+   GO(SYS_ioctl, "(CRYPTO_GET_PROVIDER_LIST) 4s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + CRYPTO_GET_PROVIDER_LIST, &pl + x0); FAIL;
+}
+
+/* dtrace */
+__attribute__((noinline))
+static void sys_ioctl_DTRACEHIOC_REMOVE(void)
+{
+   GO(SYS_ioctl, "(DTRACEHIOC_REMOVE) 3s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + DTRACEHIOC_REMOVE, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_DTRACEHIOC_ADDDOF(void)
+{
+   dof_helper_t dh;
+
+   dh.dofhp_mod[0] = x0 + 'D';
+   dh.dofhp_mod[1] = x0 + '\0';
+   dh.dofhp_addr = x0;
+   dh.dofhp_dof = x0;
+
+   GO(SYS_ioctl, "(DTRACEHIOC_ADDDOF) 6s 0m");
+   SY(SYS_ioctl, x0 - 1, x0 + DTRACEHIOC_ADDDOF, x0 + &dh); FAIL;
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* pools */
+   sys_ioctl_POOL_STATUSQ();
+
+   /* mntio */
+   sys_ioctl_MNTIOC_GETMNTANY();
+   sys_ioctl_MNTIOC_GETMNTANY_2();
+   sys_ioctl_MNTIOC_GETMNTANY_3();
+
+   /* termio/termios */
+   sys_ioctl_TCGETA();
+   sys_ioctl_TCGETS();
+   sys_ioctl_TCSETS();
+   sys_ioctl_TCSETSW();
+   sys_ioctl_TCSETSF();
+   sys_ioctl_TIOCGWINSZ();
+   sys_ioctl_TIOCSWINSZ();
+   sys_ioctl_TIOCGPGRP();
+   sys_ioctl_TIOCSPGRP();
+   sys_ioctl_TIOCGSID();
+   sys_ioctl_TIOCNOTTY();
+   sys_ioctl_TIOCSCTTY();
+
+   /* STREAMS */
+   sys_ioctl_I_PUSH();
+   sys_ioctl_I_STR();
+   sys_ioctl_I_STR_2();
+   sys_ioctl_I_PEEK();
+   sys_ioctl_I_PEEK_2();
+   sys_ioctl_I_CANPUT();
+
+   /* sockio */
+   sys_ioctl_SIOCGIFCONF();
+   sys_ioctl_SIOCGIFCONF_2();
+   sys_ioctl_SIOCGIFFLAGS();
+   sys_ioctl_SIOCGIFFLAGS_2();
+   sys_ioctl_SIOCGIFNETMASK();
+   sys_ioctl_SIOCGIFNETMASK_2();
+   sys_ioctl_SIOCGIFNUM();
+   sys_ioctl_SIOCGIFNUM_2();
+   sys_ioctl_SIOCGLIFBRDADDR();
+   sys_ioctl_SIOCGLIFBRDADDR_2();
+   sys_ioctl_SIOCGLIFCONF();
+   sys_ioctl_SIOCGLIFCONF_2();
+   sys_ioctl_SIOCGLIFFLAGS();
+   sys_ioctl_SIOCGLIFFLAGS_2();
+   sys_ioctl_SIOCGLIFNETMASK();
+   sys_ioctl_SIOCGLIFNETMASK_2();
+   sys_ioctl_SIOCGLIFNUM();
+
+   /* filio */
+   sys_ioctl_FIOSETOWN();
+   sys_ioctl_FIOGETOWN();
+
+   /* crypto */
+   sys_ioctl_CRYPTO_GET_PROVIDER_LIST();
+   sys_ioctl_CRYPTO_GET_PROVIDER_LIST_2();
+
+   /* dtrace */
+   sys_ioctl_DTRACEHIOC_REMOVE();
+   sys_ioctl_DTRACEHIOC_ADDDOF();
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_ioctl.stderr.exp b/memcheck/tests/solaris/scalar_ioctl.stderr.exp
new file mode 100644
index 0000000..fdb1a56
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_ioctl.stderr.exp
@@ -0,0 +1,849 @@
+---------------------------------------------------------
+ 54:               SYS_ioctl (POOL_STATUSQ) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(POOL_STATUSQ) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (MNTIOC_GETMNTANY) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(MNTIOC_GETMNTANY) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (MNTIOC_GETMNTANY) 4s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(MNTIOC_GETMNTANY) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(MNTIOC_GETMNTANY, embuf->mbuf_emp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(MNTIOC_GETMNTANY, embuf->mbuf_buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (MNTIOC_GETMNTANY) 5s 6m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(MNTIOC_GETMNTANY) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(MNTIOC_GETMNTANY, embuf->mbuf_emp) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(MNTIOC_GETMNTANY, embuf->mbuf_buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(MNTIOC_GETMNTANY, mnt->mnt_special) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(MNTIOC_GETMNTANY, mnt->mnt_mountp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(MNTIOC_GETMNTANY, mnt->mnt_fstype) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(MNTIOC_GETMNTANY, mnt->mnt_mntopts) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(MNTIOC_GETMNTANY, mnt->mnt_time) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TCGETA) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TCGETA) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TCGETS) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TCGETS) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TCSETS) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TCSETS) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TCSETSW) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TCSETSW) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TCSETSF) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TCSETSF) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TIOCGWINSZ) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TIOCGWINSZ) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TIOCSWINSZ) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TIOCSWINSZ) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TIOCGPGRP) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TIOCGPGRP) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TIOCSPGRP) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TIOCSPGRP) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TIOCGSID) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(TIOCGSID) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TIOCNOTTY) 2s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (TIOCSCTTY) 2s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (I_PUSH) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(I_PUSH) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (I_STR) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(I_STR) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (I_STR) 4s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(I_STR) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(I_STR, strioctl->ic_dp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (I_PEEK) 3s 7m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(I_PEEK, strpeek->ctlbuf.maxlen) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(I_PEEK, strpeek->ctlbuf.len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(I_PEEK, strpeek->ctlbuf.buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(I_PEEK, strpeek->databuf.maxlen) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(I_PEEK, strpeek->databuf.len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(I_PEEK, strpeek->databuf.buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(I_PEEK, strpeek->flags) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (I_PEEK) 3s 7m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(I_PEEK, strpeek->ctlbuf.maxlen) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(I_PEEK, strpeek->ctlbuf.buf) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(I_PEEK, strpeek->databuf.maxlen) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(I_PEEK, strpeek->databuf.buf) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(I_PEEK, strpeek->flags) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+
+More than 100 errors detected.  Subsequent errors
+will still be recorded, but in less detail than before.
+Syscall param ioctl(I_PEEK, strpeek->ctlbuf.buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(I_PEEK, strpeek->databuf.buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (I_CANPUT) 3s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGIFCONF), 3s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGIFCONF, ifconf->ifc_len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGIFCONF, ifconf->ifc_buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGIFCONF), 5s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGIFCONF, ifconf->ifc_len) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(SIOCGIFCONF, ifconf->ifc_buf) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGIFFLAGS) 3s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGIFFLAGS, ifreq->ifr_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGIFFLAGS, ifreq->ifr_flags) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGIFFLAGS), 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGIFFLAGS, ifreq->ifr_name) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGIFNETMASK) 3s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGIFFLAGS, ifreq->ifr_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGIFFLAGS, ifreq->ifr_addr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGIFNETMASK), 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGIFFLAGS, ifreq->ifr_name) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGIFNUM) 3s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGIFNUM) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGIFNUM) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGLIFBRDADDR) 3s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGLIFBRDADDR, lifreq->lifr_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFBRDADDR, lifreq->lifr_addr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGLIFBRDADDR), 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGLIFBRDADDR, lifreq->lifr_name) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGLIFCONF), 3s 4m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_len) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_family) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_flags) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGLIFCONF), 7s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_len) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_buf) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_family) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_flags) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGLIFFLAGS) 3s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGLIFFLAGS, lifreq->lifr_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFFLAGS, lifreq->lifr_flags) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGLIFFLAGS), 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGLIFFLAGS, lifreq->lifr_name) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGLIFNETMASK) 3s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGLIFNETMASK, lifreq->lifr_name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFNETMASK, lifreq->lifr_addr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGLIFNETMASK), 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGLIFNETMASK, lifreq->lifr_name) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (SIOCGLIFNUM) 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(SIOCGLIFNUM, lifn->lifn_family) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(SIOCGLIFNUM, lifn->lifn_flags) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (FIOSETOWN) 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(FIOSETOWN) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (FIOGETOWN) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(FIOGETOWN) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (CRYPTO_GET_PROVIDER_LIST) 3s 1m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(CRYPTO_GET_PROVIDER_LIST, pl->pl_count) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (CRYPTO_GET_PROVIDER_LIST) 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(CRYPTO_GET_PROVIDER_LIST, pl->pl_count) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (DTRACEHIOC_REMOVE) 3s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 54:               SYS_ioctl (DTRACEHIOC_ADDDOF) 6s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+   ...
+
+Syscall param ioctl(DTRACEHIOC_ADDDOF, dh->dofhp_mod) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(DTRACEHIOC_ADDDOF, dh->dofhp_addr points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(DTRACEHIOC_ADDDOF, dh->dofhp_dof points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_ioctl.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_ioctl.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_ioctl.vgtest b/memcheck/tests/solaris/scalar_ioctl.vgtest
new file mode 100644
index 0000000..3c85607
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_ioctl.vgtest
@@ -0,0 +1,4 @@
+prog: scalar_ioctl
+vgopts: -q --error-limit=no
+stderr_filter: filter_scalar
+stderr_filter_args: libc
diff --git a/memcheck/tests/solaris/scalar_lwp_kill.c b/memcheck/tests/solaris/scalar_lwp_kill.c
new file mode 100644
index 0000000..929f5cf
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_kill.c
@@ -0,0 +1,20 @@
+/* Test for lwp_kill syscall which is available on illumos
+   and Solaris 11 and 11.1. This syscall has been renamed
+   on Solaris 11.2 to lwp_sigqueue and extra parameters added.
+ */
+
+#include "scalar.h"
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_lwp_kill              163 */
+   GO(SYS_lwp_kill, "2s 0m");
+   SY(SYS_lwp_kill, x0 - 1, x0); FAIL;
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_lwp_kill.stderr.exp b/memcheck/tests/solaris/scalar_lwp_kill.stderr.exp
new file mode 100644
index 0000000..f802402
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_kill.stderr.exp
@@ -0,0 +1,9 @@
+---------------------------------------------------------
+163:            SYS_lwp_kill 2s 0m
+---------------------------------------------------------
+Syscall param lwp_kill(target_lwp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_kill(signal) contains uninitialised byte(s)
+   ...
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_lwp_kill.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_lwp_kill.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_lwp_kill.vgtest b/memcheck/tests/solaris/scalar_lwp_kill.vgtest
new file mode 100644
index 0000000..9b26d9e
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_kill.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_lwp_kill
+prog: scalar_lwp_kill
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_lwp_name.c b/memcheck/tests/solaris/scalar_lwp_name.c
new file mode 100644
index 0000000..54ec2c2
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_name.c
@@ -0,0 +1,31 @@
+/* Test for lwp_name syscall which is available on newer Solaris. */ 
+
+#include "scalar.h"
+
+__attribute__((noinline))
+static void sys_lwp_name(void)
+{
+   GO(SYS_lwp_name, "(lwp_setname) 3s 1m");
+   SY(SYS_lwp_name, x0 + 0, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_lwp_name2(void)
+{  
+   GO(SYS_lwp_name, "(lwp_getname) 4s 1m");
+   SY(SYS_lwp_name, x0 + 1, x0, x0 + 1, x0 + 2); FAIL;
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_lwp_name              79 */
+   sys_lwp_name();
+   sys_lwp_name2();
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_lwp_name.stderr.exp b/memcheck/tests/solaris/scalar_lwp_name.stderr.exp
new file mode 100644
index 0000000..7a16583
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_name.stderr.exp
@@ -0,0 +1,35 @@
+---------------------------------------------------------
+ 79:            SYS_lwp_name (lwp_setname) 3s 1m
+---------------------------------------------------------
+Syscall param lwp_name(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_name(lwpid) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_name(name) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_name(name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 79:            SYS_lwp_name (lwp_getname) 4s 1m
+---------------------------------------------------------
+Syscall param lwp_name(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_name(lwpid) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_name(name) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_name(len) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_name(name) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_lwp_name.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_lwp_name.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_lwp_name.vgtest b/memcheck/tests/solaris/scalar_lwp_name.vgtest
new file mode 100644
index 0000000..50ce4ff
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_name.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_lwp_name
+prog: scalar_lwp_name
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_lwp_sigqueue.c b/memcheck/tests/solaris/scalar_lwp_sigqueue.c
new file mode 100644
index 0000000..26a29af
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_sigqueue.c
@@ -0,0 +1,19 @@
+/* Test for lwp_sigqueue syscall which is available since
+   Solaris 11.2.
+ */
+
+#include "scalar.h"
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_lwp_sigqueue          163 */
+   GO(SYS_lwp_sigqueue, "5s 1m");
+   SY(SYS_lwp_sigqueue, x0 - 1, x0, x0 + 1, x0, x0 - 1); FAIL;
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_lwp_sigqueue.stderr.exp b/memcheck/tests/solaris/scalar_lwp_sigqueue.stderr.exp
new file mode 100644
index 0000000..363100a
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_sigqueue.stderr.exp
@@ -0,0 +1,22 @@
+---------------------------------------------------------
+163:        SYS_lwp_sigqueue 5s 1m
+---------------------------------------------------------
+Syscall param lwp_sigqueue(target_lwp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(signal) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(value) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(si_code) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(timeout) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(timeout) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_lwp_sigqueue.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_lwp_sigqueue.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_lwp_sigqueue.vgtest b/memcheck/tests/solaris/scalar_lwp_sigqueue.vgtest
new file mode 100644
index 0000000..01be952
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_sigqueue.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_lwp_sigqueue
+prog: scalar_lwp_sigqueue
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_lwp_sigqueue_pid.c b/memcheck/tests/solaris/scalar_lwp_sigqueue_pid.c
new file mode 100644
index 0000000..2e0fef0
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_sigqueue_pid.c
@@ -0,0 +1,19 @@
+/* Test for lwp_sigqueue syscall which accepts pid along the thread id.
+   Available since Solaris 12.
+ */
+
+#include "scalar.h"
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_lwp_sigqueue          163 */
+   GO(SYS_lwp_sigqueue, "6s 1m");
+   SY(SYS_lwp_sigqueue, x0 - 1, x0 - 1, x0, x0 + 1, x0, x0 - 1); FAIL;
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_lwp_sigqueue_pid.stderr.exp b/memcheck/tests/solaris/scalar_lwp_sigqueue_pid.stderr.exp
new file mode 100644
index 0000000..56dfe0a
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_sigqueue_pid.stderr.exp
@@ -0,0 +1,25 @@
+---------------------------------------------------------
+163:        SYS_lwp_sigqueue 6s 1m
+---------------------------------------------------------
+Syscall param lwp_sigqueue(target_pid) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(target_lwp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(signal) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(value) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(si_code) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(timeout) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_sigqueue(timeout) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/memcheck/tests/solaris/scalar_lwp_sigqueue_pid.vgtest b/memcheck/tests/solaris/scalar_lwp_sigqueue_pid.vgtest
new file mode 100644
index 0000000..c056c34
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_lwp_sigqueue_pid.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_lwp_sigqueue_pid
+prog: scalar_lwp_sigqueue_pid
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_obsolete.c b/memcheck/tests/solaris/scalar_obsolete.c
new file mode 100644
index 0000000..ea03027
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_obsolete.c
@@ -0,0 +1,113 @@
+/* Test for syscalls that are available on illumos but are removed on
+   Solaris 11.  This test is compiled only on illumos. */
+
+#include "scalar.h"
+
+#include <sys/fcntl.h>
+
+__attribute__((noinline))
+static void sys_open(void)
+{
+   GO(SYS_open, "(2-args) 2s 1m");
+   SY(SYS_open, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_open2(void)
+{
+   GO(SYS_open, "(3-args) 3s 1m");
+   SY(SYS_open, x0, x0 | O_CREAT, x0); FAIL;
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_open                    5 */
+   sys_open();
+   sys_open2();
+
+   /* SYS_link                    9 */
+   GO(SYS_link, "2s 2m");
+   SY(SYS_link, x0, x0); FAIL;
+
+   /* SYS_unlink                 10 */
+   GO(SYS_unlink, "1s 1m");
+   SY(SYS_unlink, x0); FAIL;
+
+   /* SYS_mknod                  14 */
+   /* XXX Missing wrapper. */
+
+   /* SYS_chmod                  15 */
+   GO(SYS_chmod, "2s 1m");
+   SY(SYS_chmod, x0, x0); FAIL;
+
+   /* SYS_chown                  16 */
+   GO(SYS_chown, "3s 1m");
+   SY(SYS_chown, x0, x0, x0); FAIL;
+
+   /* SYS_stat                   18 */
+   GO(SYS_stat, "2s 2m");
+   SY(SYS_stat, x0, x0); FAIL;
+
+   /* SYS_fstat                  28 */
+   GO(SYS_fstat, "2s 1m");
+   SY(SYS_fstat, x0, x0); FAIL;
+
+   /* SYS_access                 33 */
+   GO(SYS_access, "2s 1m");
+   SY(SYS_access, x0, x0); FAIL;
+
+   /* SYS_rmdir                  79 */
+   GO(SYS_rmdir, "1s 1m");
+   SY(SYS_rmdir, x0); FAIL;
+
+   /* SYS_mkdir                  80 */
+   GO(SYS_mkdir, "2s 1m");
+   SY(SYS_mkdir, x0, x0); FAIL;
+
+   /* SYS_lstat                  88 */
+   GO(SYS_lstat, "2s 2m");
+   SY(SYS_lstat, x0, x0); FAIL;
+
+   /* SYS_symlink                89 */
+   GO(SYS_symlink, "2s 2m");
+   SY(SYS_symlink, x0, x0); FAIL;
+
+   /* SYS_readlink               90 */
+   GO(SYS_readlink, "3s 2m");
+   SY(SYS_readlink, x0, x0, x0 + 1); FAIL;
+
+   /* SYS_fchmod                 93 */
+   GO(SYS_fchmod, "2s 0m");
+   SY(SYS_fchmod, x0 - 1, x0); FAIL;
+
+   /* SYS_fchown                 94 */
+   GO(SYS_fchown, "3s 0m");
+   SY(SYS_fchown, x0, x0, x0); FAIL;
+
+   /* SYS_lchown                130 */
+   GO(SYS_lchown, "3s 1m");
+   SY(SYS_lchown, x0, x0, x0); FAIL;
+
+   /* SYS_rename                134 */
+   GO(SYS_rename, "2s 2m");
+   SY(SYS_rename, x0, x0); FAIL;
+
+   /* SYS_stat64                215 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_lstat64               216 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_fstat64               217 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_open64                225 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_obsolete.stderr.exp b/memcheck/tests/solaris/scalar_obsolete.stderr.exp
new file mode 100644
index 0000000..ae2e594
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_obsolete.stderr.exp
@@ -0,0 +1,259 @@
+---------------------------------------------------------
+  5:                SYS_open (2-args) 2s 1m
+---------------------------------------------------------
+Syscall param open(filename) contains uninitialised byte(s)
+   ...
+
+Syscall param open(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param open(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+  5:                SYS_open (3-args) 3s 1m
+---------------------------------------------------------
+Syscall param open(filename) contains uninitialised byte(s)
+   ...
+
+Syscall param open(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param open(mode) contains uninitialised byte(s)
+   ...
+
+Syscall param open(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+  9:                SYS_link 2s 2m
+---------------------------------------------------------
+Syscall param link(oldpath) contains uninitialised byte(s)
+   ...
+
+Syscall param link(newpath) contains uninitialised byte(s)
+   ...
+
+Syscall param link(oldpath) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param link(newpath) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 10:              SYS_unlink 1s 1m
+---------------------------------------------------------
+Syscall param unlink(pathname) contains uninitialised byte(s)
+   ...
+
+Syscall param unlink(pathname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 15:               SYS_chmod 2s 1m
+---------------------------------------------------------
+Syscall param chmod(path) contains uninitialised byte(s)
+   ...
+
+Syscall param chmod(mode) contains uninitialised byte(s)
+   ...
+
+Syscall param chmod(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 16:               SYS_chown 3s 1m
+---------------------------------------------------------
+Syscall param chown(path) contains uninitialised byte(s)
+   ...
+
+Syscall param chown(owner) contains uninitialised byte(s)
+   ...
+
+Syscall param chown(group) contains uninitialised byte(s)
+   ...
+
+Syscall param chown(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 18:                SYS_stat 2s 2m
+---------------------------------------------------------
+Syscall param stat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param stat(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param stat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 28:               SYS_fstat 2s 1m
+---------------------------------------------------------
+Syscall param fstat(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 33:              SYS_access 2s 1m
+---------------------------------------------------------
+Syscall param access(pathname) contains uninitialised byte(s)
+   ...
+
+Syscall param access(mode) contains uninitialised byte(s)
+   ...
+
+Syscall param access(pathname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 79:               SYS_rmdir 1s 1m
+---------------------------------------------------------
+Syscall param rmdir(pathname) contains uninitialised byte(s)
+   ...
+
+Syscall param rmdir(pathname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 80:               SYS_mkdir 2s 1m
+---------------------------------------------------------
+Syscall param mkdir(pathname) contains uninitialised byte(s)
+   ...
+
+Syscall param mkdir(mode) contains uninitialised byte(s)
+   ...
+
+Syscall param mkdir(pathname) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 88:               SYS_lstat 2s 2m
+---------------------------------------------------------
+Syscall param lstat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param lstat(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param lstat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 89:             SYS_symlink 2s 2m
+---------------------------------------------------------
+Syscall param symlink(oldpath) contains uninitialised byte(s)
+   ...
+
+Syscall param symlink(newpath) contains uninitialised byte(s)
+   ...
+
+Syscall param symlink(oldpath) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param symlink(newpath) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 90:            SYS_readlink 3s 2m
+---------------------------------------------------------
+Syscall param readlink(path) contains uninitialised byte(s)
+   ...
+
+Syscall param readlink(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param readlink(bufsiz) contains uninitialised byte(s)
+   ...
+
+Syscall param readlink(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param readlink(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 93:              SYS_fchmod 2s 0m
+---------------------------------------------------------
+Syscall param fchmod(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param fchmod(mode) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+ 94:              SYS_fchown 3s 0m
+---------------------------------------------------------
+Syscall param fchown(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param fchown(owner) contains uninitialised byte(s)
+   ...
+
+Syscall param fchown(group) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+130:              SYS_lchown 3s 1m
+---------------------------------------------------------
+Syscall param lchown(path) contains uninitialised byte(s)
+   ...
+
+Syscall param lchown(owner) contains uninitialised byte(s)
+   ...
+
+Syscall param lchown(group) contains uninitialised byte(s)
+   ...
+
+Syscall param lchown(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+134:              SYS_rename 2s 2m
+---------------------------------------------------------
+Syscall param rename(from) contains uninitialised byte(s)
+   ...
+
+Syscall param rename(to) contains uninitialised byte(s)
+   ...
+
+Syscall param rename(from) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param rename(to) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_obsolete.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_obsolete.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_obsolete.vgtest b/memcheck/tests/solaris/scalar_obsolete.vgtest
new file mode 100644
index 0000000..4541cb9
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_obsolete.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_obsolete
+prog: scalar_obsolete
+vgopts: -q --error-limit=no
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_shm_new.c b/memcheck/tests/solaris/scalar_shm_new.c
new file mode 100644
index 0000000..b2552d7
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_shm_new.c
@@ -0,0 +1,50 @@
+/* Scalar test for new shmsys syscall subcodes available on Solaris 11. */
+
+#include "scalar.h"
+
+#include <sys/shm.h>
+#include <sys/shm_impl.h>
+
+__attribute__((noinline))
+static void sys_shmsys(void)
+{
+   GO(SYS_shmsys, "(SHMCTL,IPC_XSTAT64) 4s 1m");
+   SY(SYS_shmsys, x0 + SHMCTL, x0, x0 + IPC_XSTAT64, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys2(void)
+{
+   GO(SYS_shmsys, "(SHMADV,SHM_ADV_GET) 4s 1m");
+   SY(SYS_shmsys, x0 + SHMADV, x0, x0 + SHM_ADV_GET, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys3(void)
+{
+   GO(SYS_shmsys, "(SHMADV,SHM_ADV_SET) 4s 1m");
+   SY(SYS_shmsys, x0 + SHMADV, x0, x0 + SHM_ADV_SET, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_shmsys4(void)
+{
+   GO(SYS_shmsys, "(SHMGET_OSM) 5s 0m");
+   SY(SYS_shmsys, x0 + SHMGET_OSM, x0, x0, x0, x0); FAIL;
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_shmsys                 52 */
+   sys_shmsys();
+   sys_shmsys2();
+   sys_shmsys3();
+   sys_shmsys4();
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_shm_new.stderr.exp b/memcheck/tests/solaris/scalar_shm_new.stderr.exp
new file mode 100644
index 0000000..6669040
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_shm_new.stderr.exp
@@ -0,0 +1,75 @@
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMCTL,IPC_XSTAT64) 4s 1m
+---------------------------------------------------------
+Syscall param shmsys_shmctl_xstat64(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_xstat64(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_xstat64(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmctl_xstat64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmctl, ipc_xstat64, buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMADV,SHM_ADV_GET) 4s 1m
+---------------------------------------------------------
+Syscall param shmsys_shmadv(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmadv(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmadv(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmadv(advice) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmadv, advice) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMADV,SHM_ADV_SET) 4s 1m
+---------------------------------------------------------
+Syscall param shmsys_shmadv(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmadv(shmid) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmadv(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmadv(advice) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys(shmadv, advice) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 52:              SYS_shmsys (SHMGET_OSM) 5s 0m
+---------------------------------------------------------
+Syscall param shmsys_shmget_osm(opcode) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmget_osm(key) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmget_osm(size) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmget_osm(shmflg) contains uninitialised byte(s)
+   ...
+
+Syscall param shmsys_shmget_osm(granule_sz) contains uninitialised byte(s)
+   ...
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_shm_new.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_shm_new.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_shm_new.vgtest b/memcheck/tests/solaris/scalar_shm_new.vgtest
new file mode 100644
index 0000000..ada1807
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_shm_new.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_shm_new
+prog: scalar_shm_new
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_spawn.c b/memcheck/tests/solaris/scalar_spawn.c
new file mode 100644
index 0000000..401b56e
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_spawn.c
@@ -0,0 +1,72 @@
+/* Scalar test for new spawn syscall available on Solaris 11. */
+
+#include "scalar.h"
+
+#include <sys/spawn_impl.h>
+
+__attribute__((noinline))
+static void sys_spawn(void)
+{
+   GO(SYS_spawn, "5s 7m");
+   SY(SYS_spawn, x0 + 1, x0 + 1, x0 - 1, x0 + 1, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_spawn2(void)
+{
+   kspawn_attr_t ksa;
+   ksa.ksa_version = x0 + SPAWN_VERSION;
+   ksa.ksa_size = x0 + sizeof(ksa);
+   ksa.ksa_attr_off = x0 + 0;
+   ksa.ksa_path_off = x0 + 0;
+   ksa.ksa_shell_off = x0 + 0;
+   char *argenv = "";
+
+   GO(SYS_spawn, "9s 1m");
+   SY(SYS_spawn, x0 + 1, x0 + &ksa, sizeof(ksa), x0 + argenv, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_spawn3(void)
+{
+   kspawn_attr_t ksa;
+   ksa.ksa_version = x0 + SPAWN_VERSION;
+   ksa.ksa_size = x0 + 0xbadcaffe;
+   ksa.ksa_attr_off = x0 + 0xbadcaffe;
+   ksa.ksa_attr_size = x0 + 1;
+   ksa.ksa_path_off = x0 + 0xdeadcaffe;
+   ksa.ksa_path_size = x0 + 2;
+   ksa.ksa_shell_off = x0 + 0xdeadcaffe;
+   ksa.ksa_shell_size = x0 + 3;
+   char *argenv = "\1arg1\0\1arg2\0\1arg3\0\0\1env1\0\1env2\0\0";
+
+   GO(SYS_spawn, "13s 4m");
+   SY(SYS_spawn, x0 + 1, x0 + &ksa, x0 + 0xbadcaffe,
+      x0 + argenv, x0 + sizeof(argenv)); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_spawn4(void)
+{
+   char path[] = "/bin/sh";
+   char *argenv = "\2arg1\0\0";
+
+   GO(SYS_spawn, "4s 0m");
+   SY(SYS_spawn, path, x0, x0, x0 + argenv, x0 + sizeof(argenv));
+   FAILx(EINVAL);
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_spawn                   2 */
+   sys_spawn();
+   sys_spawn2();
+   sys_spawn3();
+   sys_spawn4();
+
+   return 0;
+}
diff --git a/memcheck/tests/solaris/scalar_spawn.stderr.exp b/memcheck/tests/solaris/scalar_spawn.stderr.exp
new file mode 100644
index 0000000..126c429
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_spawn.stderr.exp
@@ -0,0 +1,166 @@
+---------------------------------------------------------
+  2:               SYS_spawn 5s 7m
+---------------------------------------------------------
+Syscall param spawn(path) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(attrs) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(attrsize) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(argenv) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(aesize) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(attrs->ksa_version) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(attrs->ksa_size) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(attrs->ksa_attr_off) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(attrs->ksa_path_off) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(attrs->ksa_shell_off) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(argenv) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+  2:               SYS_spawn 9s 1m
+---------------------------------------------------------
+Syscall param spawn(path) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(attrs) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(argenv) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(aesize) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(attrs->ksa_version) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_size) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_attr_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_path_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_shell_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+  2:               SYS_spawn 13s 4m
+---------------------------------------------------------
+Syscall param spawn(path) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(attrs) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(attrsize) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(argenv) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(aesize) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(attrs->ksa_version) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_size) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_attr_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_path_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_shell_off) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_attr_size) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_attr) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(attrs->ksa_path_size) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param spawn(attrs->ksa_shell_size) points to uninitialised byte(s)
+   ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param spawn(attrs->ksa_shell) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+  2:               SYS_spawn 4s 0m
+---------------------------------------------------------
+Syscall param spawn(attrs) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(attrsize) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(argenv) contains uninitialised byte(s)
+   ...
+
+Syscall param spawn(aesize) contains uninitialised byte(s)
+   ...
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_spawn.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_spawn.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_spawn.vgtest b/memcheck/tests/solaris/scalar_spawn.vgtest
new file mode 100644
index 0000000..c5918b8
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_spawn.vgtest
@@ -0,0 +1,6 @@
+prereq: test -e scalar_spawn
+prog: scalar_spawn
+vgopts: -q
+stderr_filter: filter_scalar
+# See comment in scalar.vgtest.
+stderr_filter_args: libc
diff --git a/memcheck/tests/solaris/scalar_system_stats.c b/memcheck/tests/solaris/scalar_system_stats.c
new file mode 100644
index 0000000..193b6b6
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_system_stats.c
@@ -0,0 +1,18 @@
+/* Test for system_stats syscall which is available on newer Solaris. */ 
+
+#include "scalar.h"
+#include <sys/system_stats.h>
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_system_stats         154 */
+   GO(SYS_system_stats, "1s 0m");
+   SY(SYS_system_stats, x0 + SYSTEM_STATS_START); SUCC;
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_system_stats.stderr.exp b/memcheck/tests/solaris/scalar_system_stats.stderr.exp
new file mode 100644
index 0000000..4c70b0a
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_system_stats.stderr.exp
@@ -0,0 +1,6 @@
+---------------------------------------------------------
+154:        SYS_system_stats 1s 0m
+---------------------------------------------------------
+Syscall param system_stats(flag) contains uninitialised byte(s)
+   ...
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_system_stats.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_system_stats.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_system_stats.vgtest b/memcheck/tests/solaris/scalar_system_stats.vgtest
new file mode 100644
index 0000000..eec4b77
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_system_stats.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_system_stats
+prog: scalar_system_stats
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_tsol_clearance.c b/memcheck/tests/solaris/scalar_tsol_clearance.c
new file mode 100644
index 0000000..7b75559
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_tsol_clearance.c
@@ -0,0 +1,75 @@
+/* Scalar test for new labelsys syscall subcodes TSOL_GETCLEARANCE
+   and TSOL_SETCLEARANCE available on Solaris 11. */
+
+#include "scalar.h"
+
+#include <sys/syscall.h>
+#include <sys/tsol/tsyscall.h>
+#include <tsol/label.h>
+
+__attribute__((noinline))
+static void sys_labelsys(void)
+{
+   GO(SYS_labelsys, "(TSOL_GETCLEARANCE) 2s 1m");
+   SY(SYS_labelsys, x0 + TSOL_GETCLEARANCE, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_labelsys2(void)
+{
+   m_label_t *label = m_label_alloc(USER_CLEAR);
+   if (label == NULL) {
+      perror("m_label_alloc");
+      return;
+   }
+
+   GO(SYS_labelsys, "(TSOL_GETCLEARANCE) 1s 0m");
+   SY(SYS_labelsys, x0 + TSOL_GETCLEARANCE, label); SUCC;
+
+   m_label_free(label);
+}
+
+__attribute__((noinline))
+static void sys_labelsys3(void)
+{
+   GO(SYS_labelsys, "(TSOL_SETCLEARANCE) 2s 1m");
+   SY(SYS_labelsys, x0 + TSOL_SETCLEARANCE, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_labelsys4(void)
+{
+   m_label_t *label = m_label_alloc(USER_CLEAR);
+   if (label == NULL) {
+      perror("m_label_alloc");
+      return;
+   }
+
+   int ret = getclearance(label);
+   if (ret != 0) {
+      perror("getclearance");
+      m_label_free(label);
+      return;
+   }
+
+   GO(SYS_labelsys, "(TSOL_SETCLEARANCE) 1s 0m");
+   SY(SYS_labelsys, x0 + TSOL_SETCLEARANCE, label); SUCC;
+
+   m_label_free(label);
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_labelsys                52 */
+   sys_labelsys();
+   sys_labelsys2();
+   sys_labelsys3();
+   sys_labelsys4();
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_tsol_clearance.stderr.exp b/memcheck/tests/solaris/scalar_tsol_clearance.stderr.exp
new file mode 100644
index 0000000..286f9c0
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_tsol_clearance.stderr.exp
@@ -0,0 +1,38 @@
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_GETCLEARANCE) 2s 1m
+---------------------------------------------------------
+Syscall param labelsys_getclearance(op) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_getclearance(clearance) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys(clearance) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_GETCLEARANCE) 1s 0m
+---------------------------------------------------------
+Syscall param labelsys_getclearance(op) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_SETCLEARANCE) 2s 1m
+---------------------------------------------------------
+Syscall param labelsys_setclearance(op) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys_setclearance(clearance) contains uninitialised byte(s)
+   ...
+
+Syscall param labelsys(clearance) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+184:            SYS_labelsys (TSOL_SETCLEARANCE) 1s 0m
+---------------------------------------------------------
+Syscall param labelsys_setclearance(op) contains uninitialised byte(s)
+   ...
+
diff --git a/memcheck/tests/solaris/scalar_tsol_clearance.vgtest b/memcheck/tests/solaris/scalar_tsol_clearance.vgtest
new file mode 100644
index 0000000..977e28a
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_tsol_clearance.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_tsol_clearance
+prog: scalar_tsol_clearance
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_utimensat.c b/memcheck/tests/solaris/scalar_utimensat.c
new file mode 100644
index 0000000..594a5c9
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_utimensat.c
@@ -0,0 +1,31 @@
+/* Test for utimensat() syscall which is available on newer Solaris. */ 
+
+#include "scalar.h"
+
+__attribute__((noinline))
+static void sys_utimensat(void)
+{
+   GO(SYS_utimensat, "4s 2m");
+   SY(SYS_utimensat, x0 - 1, x0 + 1, x0 + 1, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_utimensat2(void)
+{
+   GO(SYS_utimensat, "4s 0m");
+   SY(SYS_utimensat, x0 - 1, x0 + NULL, x0 + NULL, x0); FAIL;
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_utimensat            110 */
+   sys_utimensat();
+   sys_utimensat2();
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_utimensat.stderr.exp b/memcheck/tests/solaris/scalar_utimensat.stderr.exp
new file mode 100644
index 0000000..4b93d30
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_utimensat.stderr.exp
@@ -0,0 +1,38 @@
+---------------------------------------------------------
+110:           SYS_utimensat 4s 2m
+---------------------------------------------------------
+Syscall param utimensat(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param utimensat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param utimensat(times) contains uninitialised byte(s)
+   ...
+
+Syscall param utimensat(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param utimensat(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param utimensat(times) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+110:           SYS_utimensat 4s 0m
+---------------------------------------------------------
+Syscall param utimensat(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param utimensat(path) contains uninitialised byte(s)
+   ...
+
+Syscall param utimensat(times) contains uninitialised byte(s)
+   ...
+
+Syscall param utimensat(flag) contains uninitialised byte(s)
+   ...
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_utimensat.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_utimensat.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_utimensat.vgtest b/memcheck/tests/solaris/scalar_utimensat.vgtest
new file mode 100644
index 0000000..788f7ea
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_utimensat.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_utimensat
+prog: scalar_utimensat
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_utimesys.c b/memcheck/tests/solaris/scalar_utimesys.c
new file mode 100644
index 0000000..3591d82
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_utimesys.c
@@ -0,0 +1,49 @@
+/* Test for utimesys() syscall which is available on illumos
+   and older Solaris.
+ */
+
+#include "scalar.h"
+
+__attribute__((noinline))
+static void sys_utimesys(void)
+{
+   GO(SYS_utimesys, "(FUTIMENS) 3s 1m");
+   SY(SYS_utimesys, x0 + 0, x0 - 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_utimesys2(void)
+{
+   GO(SYS_utimesys, "(FUTIMENS) 3s 0m");
+   SY(SYS_utimesys, x0 + 0, x0 - 1, x0 + NULL); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_utimesys3(void)
+{
+   GO(SYS_utimesys, "(UTIMENSAT) 5s 2m");
+   SY(SYS_utimesys, x0 + 1, x0 - 1, x0 + 1, x0 + 1, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_utimesys4(void)
+{
+   GO(SYS_utimesys, "(UTIMENSAT) 5s 0m");
+   SY(SYS_utimesys, x0 + 1, x0 - 1, x0 + NULL, x0 + NULL, x0); FAIL;
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_utimesys             110 */
+   sys_utimesys();
+   sys_utimesys2();
+   sys_utimesys3();
+   sys_utimesys4();
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_utimesys.stderr.exp b/memcheck/tests/solaris/scalar_utimesys.stderr.exp
new file mode 100644
index 0000000..5bc76e4
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_utimesys.stderr.exp
@@ -0,0 +1,72 @@
+---------------------------------------------------------
+110:            SYS_utimesys (FUTIMENS) 3s 1m
+---------------------------------------------------------
+Syscall param utimesys(code) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(times) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(times) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+110:            SYS_utimesys (FUTIMENS) 3s 0m
+---------------------------------------------------------
+Syscall param utimesys(code) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(times) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+110:            SYS_utimesys (UTIMENSAT) 5s 2m
+---------------------------------------------------------
+Syscall param utimesys(code) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(path) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(times) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param utimesys(times) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+110:            SYS_utimesys (UTIMENSAT) 5s 0m
+---------------------------------------------------------
+Syscall param utimesys(code) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(path) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(times) contains uninitialised byte(s)
+   ...
+
+Syscall param utimesys(flag) contains uninitialised byte(s)
+   ...
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_utimesys.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_utimesys.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_utimesys.vgtest b/memcheck/tests/solaris/scalar_utimesys.vgtest
new file mode 100644
index 0000000..e8e252d
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_utimesys.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_utimesys
+prog: scalar_utimesys
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_uuidsys.c b/memcheck/tests/solaris/scalar_uuidsys.c
new file mode 100644
index 0000000..fb6abc2
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_uuidsys.c
@@ -0,0 +1,17 @@
+/* Test for uuidsys syscall which is available on newer Solaris. */ 
+
+#include "scalar.h"
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_uuidsys              124 */
+   GO(SYS_uuidsys, "1s 1m");
+   SY(SYS_uuidsys, x0 + 1); FAIL;
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_uuidsys.stderr.exp b/memcheck/tests/solaris/scalar_uuidsys.stderr.exp
new file mode 100644
index 0000000..ab3ecde
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_uuidsys.stderr.exp
@@ -0,0 +1,10 @@
+---------------------------------------------------------
+124:             SYS_uuidsys 1s 1m
+---------------------------------------------------------
+Syscall param uuidsys(uuid) contains uninitialised byte(s)
+   ...
+
+Syscall param uuidsys(uuid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_uuidsys.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_uuidsys.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_uuidsys.vgtest b/memcheck/tests/solaris/scalar_uuidsys.vgtest
new file mode 100644
index 0000000..f08e020
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_uuidsys.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_uuidsys
+prog: scalar_uuidsys
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/scalar_zone_defunct.c b/memcheck/tests/solaris/scalar_zone_defunct.c
new file mode 100644
index 0000000..0ad8978
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_zone_defunct.c
@@ -0,0 +1,44 @@
+/* Scalar test for new zone syscall subcodes available on Solaris 11. */
+
+#include "scalar.h"
+
+#include <sys/zone.h>
+
+__attribute__((noinline))
+static void sys_zone(void)
+{
+   GO(SYS_zone, "(ZONE_LIST_DEFUNCT) 3s 1m");
+   SY(SYS_zone, x0 + ZONE_LIST_DEFUNCT, x0 + 1, x0 + 2); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_zone2(void)
+{
+   uint_t numzones = x0 + 1;
+
+   GO(SYS_zone, "(ZONE_LIST_DEFUNCT) 2s 1m");
+   SY(SYS_zone, x0 + ZONE_LIST_DEFUNCT, x0 + 1, &numzones); SUCC;
+}
+
+__attribute__((noinline))
+static void sys_zone3(void)
+{
+   GO(SYS_zone, "(ZONE_GETATTR_DEFUNCT) 5s 2m");
+   SY(SYS_zone, x0 + ZONE_GETATTR_DEFUNCT, x0 + 1, x0, x0 + 2, x0 + 3);
+   FAIL;
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_zone                  227 */
+   sys_zone();
+   sys_zone2();
+   sys_zone3();
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/scalar_zone_defunct.stderr.exp b/memcheck/tests/solaris/scalar_zone_defunct.stderr.exp
new file mode 100644
index 0000000..db561c8
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_zone_defunct.stderr.exp
@@ -0,0 +1,55 @@
+---------------------------------------------------------
+227:                SYS_zone (ZONE_LIST_DEFUNCT) 3s 1m
+---------------------------------------------------------
+Syscall param zone_list_defunct(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list_defunct(uniqidlist) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list_defunct(numzones) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(numzones) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_LIST_DEFUNCT) 2s 1m
+---------------------------------------------------------
+Syscall param zone_list_defunct(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_list_defunct(uniqidlist) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(uniqidlist) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+227:                SYS_zone (ZONE_GETATTR_DEFUNCT) 5s 2m
+---------------------------------------------------------
+Syscall param zone_getattr_defunct(cmd) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_getattr_defunct(uniqid) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_getattr_defunct(attr) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_getattr_defunct(valp) contains uninitialised byte(s)
+   ...
+
+Syscall param zone_getattr_defunct(size) contains uninitialised byte(s)
+   ...
+
+Syscall param zone(uniqid) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param zone(valp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/scalar_zone_defunct.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/scalar_zone_defunct.stdout.exp
diff --git a/memcheck/tests/solaris/scalar_zone_defunct.vgtest b/memcheck/tests/solaris/scalar_zone_defunct.vgtest
new file mode 100644
index 0000000..88279d8
--- /dev/null
+++ b/memcheck/tests/solaris/scalar_zone_defunct.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_zone_defunct
+prog: scalar_zone_defunct
+vgopts: -q
+stderr_filter_args:
diff --git a/memcheck/tests/solaris/sendfilev.c b/memcheck/tests/solaris/sendfilev.c
new file mode 100644
index 0000000..83d003c
--- /dev/null
+++ b/memcheck/tests/solaris/sendfilev.c
@@ -0,0 +1,88 @@
+/* Tests sendfilev with bogus inputs. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include <unistd.h>
+#include <sys/sendfile.h>
+
+#define CHUNK (8 * 1024)
+#define TEST_FILE "sendfile.test"
+
+int main(int argc, const char *argv[])
+{
+   int test_fd = open(TEST_FILE, O_WRONLY | O_CREAT, 0666);
+   if (test_fd < 0) {
+      int error = errno;
+      fprintf(stderr, "open failed: %s (%d).\n", strerror(error), error);
+      return 1;
+   }
+
+   char chunk1[CHUNK];
+   bzero(&chunk1, sizeof(chunk1));
+   ssize_t nbytes = write(test_fd, &chunk1, sizeof(chunk1));
+   if (nbytes != CHUNK) {
+      int error = errno;
+      fprintf(stderr, "write failed (nbytes=%zd): %s (%d).\n",
+              nbytes, strerror(error), error);
+      return 1;
+   }
+
+   close(test_fd);
+   printf("Test file created.\n"); 
+
+   test_fd = open(TEST_FILE, O_RDWR, 0666);
+   if (test_fd < 0) {
+      int error = errno;
+      fprintf(stderr, "open failed: %s (%d).\n", strerror(error), error);
+      return 1;
+   }
+
+   sendfilevec_t vec[2];
+   vec[0].sfv_fd = SFV_FD_SELF;
+   vec[0].sfv_off = -1;
+   vec[0].sfv_len = 1;
+   vec[0].sfv_flag = 0;
+   vec[1].sfv_fd = test_fd;
+   vec[1].sfv_off = 0;
+   vec[1].sfv_len = CHUNK;
+   vec[1].sfv_flag = 0;
+   size_t xferred;
+
+   nbytes = sendfilev(test_fd, vec, 2, &xferred);
+   if (nbytes < 0) {
+      if (errno == EFAULT) {
+         printf("Received EFAULT as expected.\n");
+      } else {
+         fprintf(stderr, "Expected EFAULT, got %d.\n", errno);
+      }
+   } else {
+      fprintf(stderr, "Error: sendfilev returned a positive value.\n");
+   }
+
+   nbytes = sendfilev(test_fd, vec, -1, &xferred);
+   if (nbytes < 0) {
+      if (errno == EINVAL) {
+         printf("Received EINVAL as expected.\n");
+      } else {
+         fprintf(stderr, "Expected EINVAL, got %d.\n", errno);
+      }
+   } else {
+      fprintf(stderr, "Error: sendfilev returned a positive value.\n");
+   }
+
+   vec[0].sfv_off = (off_t) "HEADER";
+   vec[0].sfv_len = 6;
+   nbytes = sendfilev(test_fd, vec, 1, &xferred);
+   if (nbytes < 0) {
+      int error = errno;
+      fprintf(stderr, "sendfilev failed: %s (%d).\n", strerror(error), error);
+   } else {
+      printf("sendfilev for the first buffer succeeded.\n");
+   }
+
+   unlink(TEST_FILE);
+   return 0;
+}
diff --git a/memcheck/tests/solaris/sendfilev.stderr.exp b/memcheck/tests/solaris/sendfilev.stderr.exp
new file mode 100644
index 0000000..db07a0d
--- /dev/null
+++ b/memcheck/tests/solaris/sendfilev.stderr.exp
@@ -0,0 +1,11 @@
+Syscall param sendfilev(vec[0].sfv_off points to unaddressable byte(s)
+   ...
+   by 0x........: main (sendfilev.c:54)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sendfilev(vec) points to uninitialised byte(s)
+   ...
+   by 0x........: main (sendfilev.c:65)
+ Address 0x........ is on thread 1's stack
+ in frame #., created by main (sendfilev.c:15)
+
diff --git a/memcheck/tests/solaris/sendfilev.stdout.exp b/memcheck/tests/solaris/sendfilev.stdout.exp
new file mode 100644
index 0000000..65dcf64
--- /dev/null
+++ b/memcheck/tests/solaris/sendfilev.stdout.exp
@@ -0,0 +1,4 @@
+Test file created.
+Received EFAULT as expected.
+Received EINVAL as expected.
+sendfilev for the first buffer succeeded.
diff --git a/memcheck/tests/solaris/sendfilev.vgtest b/memcheck/tests/solaris/sendfilev.vgtest
new file mode 100644
index 0000000..98f3433
--- /dev/null
+++ b/memcheck/tests/solaris/sendfilev.vgtest
@@ -0,0 +1,4 @@
+prog: sendfilev
+vgopts: -q
+stderr_filter: filter_sendfilev
+stderr_filter_args: sendfilev.c
diff --git a/memcheck/tests/solaris/shmat.c b/memcheck/tests/solaris/shmat.c
new file mode 100644
index 0000000..de65748
--- /dev/null
+++ b/memcheck/tests/solaris/shmat.c
@@ -0,0 +1,44 @@
+/* Tests simple manipulation with a shared memory segment. */
+
+#include <stdio.h>
+#include <sys/shm.h>
+
+#define SEGMENT_SIZE 167
+
+int main(int argc, const char *argv[])
+{
+   int shmid = shmget(IPC_PRIVATE, SEGMENT_SIZE, IPC_CREAT | SHM_R | SHM_W);
+   if (shmid < 0) {
+      perror("shmget()");
+      return 1;
+   }
+
+   void *addr = shmat(shmid, NULL, 0);
+   if (addr == (void *) -1) {
+      perror("shmat()");
+      return 2;
+   }
+
+   struct shmid_ds stats;
+   int ret = shmctl(shmid, IPC_STAT, &stats);
+   if (ret != 0) {
+      perror("shmctl(IPC_STAT)");
+      return 3;
+   }   
+
+   printf("segment size: %zu\n", stats.shm_segsz);
+
+   ret = shmdt(addr);
+   if (ret != 0) {
+      perror("shmdt()");
+      return 4;
+   }
+
+   ret = shmctl(shmid, IPC_RMID, NULL);
+   if (ret != 0) {
+      perror("shmctl(IPC_RMID)");
+      return 5;
+   }
+
+   return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/shmat.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/shmat.stderr.exp
diff --git a/memcheck/tests/solaris/shmat.stdout.exp b/memcheck/tests/solaris/shmat.stdout.exp
new file mode 100644
index 0000000..b1c5236
--- /dev/null
+++ b/memcheck/tests/solaris/shmat.stdout.exp
@@ -0,0 +1 @@
+segment size: 167
diff --git a/memcheck/tests/solaris/shmat.vgtest b/memcheck/tests/solaris/shmat.vgtest
new file mode 100644
index 0000000..c65e9a9
--- /dev/null
+++ b/memcheck/tests/solaris/shmat.vgtest
@@ -0,0 +1,2 @@
+prog: shmat
+vgopts: -q
diff --git a/memcheck/tests/solaris/spawn.c b/memcheck/tests/solaris/spawn.c
new file mode 100644
index 0000000..f3c0632
--- /dev/null
+++ b/memcheck/tests/solaris/spawn.c
@@ -0,0 +1,112 @@
+/* Functional tests for spawn() syscall invoked indirectly via posix_spawn()
+   or system(). */
+
+#include <assert.h>
+#include <fcntl.h>
+#include <spawn.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <sys/wait.h>
+
+
+#define EXE_NAME "../../../tests/true"
+
+static volatile int sigchld_handled = 0;
+static void sigchld_handler(int sig, siginfo_t *sip, void *ucontext) {
+   assert(sig == SIGCHLD);
+   sigchld_handled = 1;
+}
+
+int main(int argc, char *const argv[], char *const envp[]) {
+   int ret = system(EXE_NAME);
+   if (ret != 0)
+      perror("system");
+
+   /* system() */
+   ret = system(NULL);
+   if (ret == 0)
+      fprintf(stderr, "system() succeeded");
+
+   /* posix_spawn(), no file actions, no attrs */
+   char *const argv_exe[] = {"true", NULL};
+   pid_t child;
+   ret = posix_spawn(&child, EXE_NAME, NULL, NULL, argv_exe, envp);
+   if (ret != 0)
+      perror("posix_spawn");
+   waitpid(child, NULL, 0);
+
+   /* posix_spawn(), file actions, no attrs */
+   posix_spawn_file_actions_t fa;
+   ret = posix_spawn_file_actions_init(&fa);
+   if (ret != 0)
+      perror("posix_spawn_file_actions_init");
+   ret = posix_spawn_file_actions_addopen(&fa, 10, "/dev/null", O_RDONLY, 0);
+   if (ret != 0)
+      perror("posix_spawn_file_actions_addopen");
+   ret = posix_spawn(&child, EXE_NAME, &fa, NULL, argv_exe, envp);
+   if (ret != 0)
+      perror("posix_spawn");
+   waitpid(child, NULL, 0);
+   ret = posix_spawn_file_actions_destroy(&fa);
+   if (ret != 0)
+      perror("posix_spawn_file_actions_destroy");
+
+   /* posix_spawn(), no file actions, attrs */
+   posix_spawnattr_t spa;
+   ret = posix_spawnattr_init(&spa);
+   if (ret != 0)
+      perror("posix_spawnattr_init");
+   ret = posix_spawnattr_setflags(&spa, POSIX_SPAWN_RESETIDS);
+   if (ret != 0)
+      perror("posix_spawnattr_setflags");
+   ret = posix_spawn(&child, EXE_NAME, NULL, &spa, argv_exe, envp);
+   if (ret != 0)
+      perror("posix_spawn");
+   waitpid(child, NULL, 0);
+   ret = posix_spawnattr_destroy(&spa);
+   if (ret != 0)
+      perror("posix_spawnattr_destroy");
+
+   /* posix_spawn(), no file actions, no attrs, test SIGCHLD delivery */
+   struct sigaction act;
+   bzero(&act, sizeof(act));
+   act.sa_sigaction = sigchld_handler;
+   act.sa_flags = SA_SIGINFO;
+   ret = sigaction(SIGCHLD, &act, NULL);
+   if (ret != 0)
+      perror("sigaction");
+   sigchld_handled = 0;
+   ret = posix_spawn(&child, EXE_NAME, NULL, NULL, argv_exe, envp);
+   if (ret != 0)
+      perror("posix_spawn");
+   waitpid(child, NULL, 0);
+   if (sigchld_handled == 1) {
+      printf("PASS\n");
+   } else {
+      printf("FAIL\n");
+   }
+
+   /* posix_spawn(), no file actions, attrs, test *no* SIGCHLD delivery */
+   ret = posix_spawnattr_init(&spa);
+   if (ret != 0)
+      perror("posix_spawnattr_init");
+   ret = posix_spawnattr_setflags(&spa, POSIX_SPAWN_NOSIGCHLD_NP);
+   if (ret != 0)
+      perror("posix_spawnattr_setflags");
+   sigchld_handled = 0;
+   ret = posix_spawn(&child, EXE_NAME, NULL, &spa, argv_exe, envp);
+   if (ret != 0)
+      perror("posix_spawn");
+   waitpid(child, NULL, 0);
+   if (sigchld_handled == 0) {
+      printf("PASS\n");
+   } else {
+      printf("FAIL\n");
+   }
+   ret = posix_spawnattr_destroy(&spa);
+   if (ret != 0)
+      perror("posix_spawnattr_destroy");
+
+   return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/spawn.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/spawn.stderr.exp
diff --git a/memcheck/tests/solaris/spawn.stdout.exp b/memcheck/tests/solaris/spawn.stdout.exp
new file mode 100644
index 0000000..38e0352
--- /dev/null
+++ b/memcheck/tests/solaris/spawn.stdout.exp
@@ -0,0 +1,2 @@
+PASS
+PASS
diff --git a/memcheck/tests/solaris/spawn.vgtest b/memcheck/tests/solaris/spawn.vgtest
new file mode 100644
index 0000000..e40eaa9
--- /dev/null
+++ b/memcheck/tests/solaris/spawn.vgtest
@@ -0,0 +1,3 @@
+prereq: test -e spawn
+prog: spawn
+vgopts: -q --trace-children=yes
diff --git a/memcheck/tests/solaris/strlcpy.c b/memcheck/tests/solaris/strlcpy.c
new file mode 100644
index 0000000..9dd7e13
--- /dev/null
+++ b/memcheck/tests/solaris/strlcpy.c
@@ -0,0 +1,47 @@
+/* Tests for some interesting cases in non-standard strlcpy(). */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+
+int main(void)
+{
+   size_t copied;
+
+   char *src = malloc(100);
+   if (src == NULL) {
+      fprintf(stderr, "Memory allocation failure.\n");
+      return 1;
+   }
+   strcpy(src, "Hey, dude!");
+
+   char *dst = malloc(10);
+   if (dst == NULL) {
+      fprintf(stderr, "Memory allocation failure.\n");
+      return 1;
+   }
+
+   /* This is ok. */
+   copied = strlcpy(dst, src, 10);
+   if (copied != 10)
+      fprintf(stderr, "Expected 10 but got %zu for test #1.\n", copied);
+
+   /* Here dst is not large enough. */
+   copied = strlcpy(dst, src, strlen(src) + 1);
+   if (copied != 10)
+      fprintf(stderr, "Expected 10 but got %zu for test #2.\n", copied);
+
+   /* This is just a fancy way how to write strlen(src).
+      Undocumented but heavily used. */
+   copied = strlcpy(NULL, src, 0);
+   if (copied != 10)
+      fprintf(stderr, "Expected 10 but got %zu for test #3.\n", copied);
+
+   /* Source and destination overlap. */
+   strlcpy(src + 9, src, strlen(src) + 1);
+   /* Return value is not checked because function behaviour
+      is undefined in such case (and valgrind's differs). */
+
+   return 0;
+}
+
diff --git a/memcheck/tests/solaris/strlcpy.stderr.exp b/memcheck/tests/solaris/strlcpy.stderr.exp
new file mode 100644
index 0000000..ad1c373
--- /dev/null
+++ b/memcheck/tests/solaris/strlcpy.stderr.exp
@@ -0,0 +1,11 @@
+Invalid write of size 1
+   at 0x........: strlcpy (vg_replace_strmem.c:...)
+   ...
+ Address 0x........ is 0 bytes after a block of size 10 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   ...
+
+Source and destination overlap in strlcpy(0x........, 0x........, 11)
+   at 0x........: strlcpy (vg_replace_strmem.c:...)
+   ...
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/strlcpy.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/strlcpy.stdout.exp
diff --git a/memcheck/tests/solaris/strlcpy.vgtest b/memcheck/tests/solaris/strlcpy.vgtest
new file mode 100644
index 0000000..fd32702
--- /dev/null
+++ b/memcheck/tests/solaris/strlcpy.vgtest
@@ -0,0 +1,5 @@
+prog: strlcpy
+vgopts: -q
+# The next line causes that all stack traces are completely removed.
+stderr_filter_args:
+stderr_filter: filter_scalar
diff --git a/memcheck/tests/solaris/supponlyobj.stderr.exp b/memcheck/tests/solaris/supponlyobj.stderr.exp
new file mode 100644
index 0000000..25c4159
--- /dev/null
+++ b/memcheck/tests/solaris/supponlyobj.stderr.exp
@@ -0,0 +1,8 @@
+Conditional jump or move depends on uninitialised value(s)
+   ...
+   by 0x........: main (inlinfo.c:9)
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+   by 0x........: main (inlinfo.c:9)
+
diff --git a/memcheck/tests/solaris/supponlyobj.supp b/memcheck/tests/solaris/supponlyobj.supp
new file mode 100644
index 0000000..374cbcd
--- /dev/null
+++ b/memcheck/tests/solaris/supponlyobj.supp
@@ -0,0 +1,16 @@
+{
+   obj2
+   Memcheck:Cond
+   obj:*inlinfo_nested.so
+   obj:*inlinfo_nested.so
+}
+
+{
+   obj5
+   Memcheck:Cond
+   obj:*inlinfo_nested.so
+   obj:*inlinfo_nested.so
+   obj:*inlinfo_nested.so
+   obj:*inlinfo_nested.so
+   obj:*inlinfo_nested.so
+}
diff --git a/memcheck/tests/solaris/supponlyobj.vgtest b/memcheck/tests/solaris/supponlyobj.vgtest
new file mode 100644
index 0000000..565e44e
--- /dev/null
+++ b/memcheck/tests/solaris/supponlyobj.vgtest
@@ -0,0 +1,4 @@
+# Test suppressions with only obj: markers.
+prog: inlinfo
+vgopts: -q --read-inline-info=no --suppressions=supponlyobj.supp
+stderr_filter_args: inlinfo.c
diff --git a/memcheck/tests/solaris/syscall_at.c b/memcheck/tests/solaris/syscall_at.c
new file mode 100644
index 0000000..7aaf34f
--- /dev/null
+++ b/memcheck/tests/solaris/syscall_at.c
@@ -0,0 +1,107 @@
+/* Tests various combinations of dfd and pathname for *at syscalls.
+   In particular, dfd should not be checked when pathname is absolute.
+   See https://bugs.kde.org/show_bug.cgi?id=307103 for more information.
+ */
+
+#include "config.h"
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+
+#define DIRECTORY "/tmp/"
+#define FILENAME "abc123"
+
+int main(void)
+{
+   char buf[1];
+   struct stat stats;
+
+   int dfd = open(DIRECTORY, O_RDONLY);
+
+   /* linkat */
+   linkat(dfd, FILENAME, dfd, FILENAME, 0);
+   linkat(0x9879151, DIRECTORY FILENAME, 0x9879152, DIRECTORY FILENAME, 0);
+   linkat(AT_FDCWD, FILENAME, AT_FDCWD, FILENAME, 0);
+   linkat(0x9879153, FILENAME, 0x9879154, FILENAME, 0); /* warning for this one */
+
+   /* symlinkat */
+   symlinkat(FILENAME, dfd, FILENAME);
+   symlinkat(DIRECTORY FILENAME, 0x26868151, DIRECTORY FILENAME);
+   symlinkat(FILENAME, AT_FDCWD, FILENAME);
+   symlinkat(FILENAME, 0x26868152, FILENAME); /* warning for this one */
+
+   /* readlinkat */
+   readlinkat(dfd, FILENAME, buf, 1);
+   readlinkat(0x4368151, DIRECTORY FILENAME, buf, 1);
+   readlinkat(AT_FDCWD, FILENAME, buf, 1);
+   readlinkat(0x4368152, FILENAME, buf, 1); /* warning for this one */
+
+#if defined(SOLARIS_FREALPATHAT_SYSCALL)
+   /* frealpathat - not available directly */
+   syscall(SYS_frealpathat, dfd, FILENAME, buf, 1);
+   syscall(SYS_frealpathat, 0x443115, DIRECTORY FILENAME, buf, 1);
+   syscall(SYS_frealpathat, AT_FDCWD, FILENAME, buf, 1);
+#endif /* SOLARIS_FREALPATHAT_SYSCALL */
+
+   /* faccessat */
+   faccessat(dfd, FILENAME, F_OK, 0);
+   faccessat(0x4132151, DIRECTORY FILENAME, F_OK, 0);
+   faccessat(AT_FDCWD, FILENAME, F_OK, 0);
+   faccessat(0x4132152, FILENAME, F_OK, 0); /* warning for this one */
+
+   /* fchownat */
+   fchownat(dfd, FILENAME, -1, -1, 0);
+   fchownat(0x4369251, DIRECTORY FILENAME, -1, -1, 0);
+   fchownat(AT_FDCWD, FILENAME, -1, -1, 0);
+   fchownat(0x4369252, FILENAME, -1, -1, 0); /* warning for this one */
+
+   /* renameat */
+   renameat(dfd, FILENAME, dfd, FILENAME);
+   renameat(0x4371151, DIRECTORY FILENAME, 0x4371152, DIRECTORY FILENAME);
+   renameat(AT_FDCWD, FILENAME, AT_FDCWD, FILENAME);
+   renameat(0x4371153, FILENAME, 0x4371154, FILENAME); /* warning for this one */
+
+   /* unlinkat */
+   unlinkat(dfd, FILENAME, 0);
+   unlinkat(0x7608151, DIRECTORY FILENAME, 0);
+   unlinkat(AT_FDCWD, FILENAME, 0);
+   unlinkat(0x7608152, FILENAME, 0); /* warning for this one */
+
+   /* fstatat */
+   fstatat(dfd, FILENAME, &stats, 0);
+   fstatat(0x42515151, DIRECTORY FILENAME, &stats, 0);
+   fstatat(AT_FDCWD, FILENAME, &stats, 0);
+   fstatat(0x42515152, FILENAME, &stats, 0); /* warning for this one */
+
+   /* openat */
+   openat(dfd, FILENAME, O_RDONLY);
+   openat(0x9038151, DIRECTORY FILENAME, O_RDONLY);
+   openat(AT_FDCWD, FILENAME, O_RDONLY);
+   openat(0x9038152, FILENAME, O_RDONLY); /* warning for this one */
+
+   /* fchmodat */
+   fchmodat(dfd, FILENAME, S_IRUSR | S_IWUSR, 0);
+   fchmodat(0x4303151, DIRECTORY FILENAME, S_IRUSR | S_IWUSR, 0);
+   fchmodat(AT_FDCWD, FILENAME, S_IRUSR | S_IWUSR, 0);
+   fchmodat(0x4303152, FILENAME, S_IRUSR | S_IWUSR, 0); /* warning for this one */
+
+   /* mkdirat */
+   mkdirat(dfd, FILENAME, S_IRUSR | S_IWUSR);
+   mkdirat(0x9384151, DIRECTORY FILENAME, S_IRUSR | S_IWUSR);
+   mkdirat(AT_FDCWD, FILENAME, S_IRUSR | S_IWUSR);
+   mkdirat(0x9384152, FILENAME, S_IRUSR | S_IWUSR); /* warning for this one */
+
+   /* utimensat */
+   utimensat(dfd, FILENAME, NULL, 0);
+   utimensat(0x59837215, DIRECTORY FILENAME, NULL, 0);
+   utimensat(AT_FDCWD, FILENAME, NULL, 0);
+   utimensat(0x59837216, FILENAME, NULL, 0); /* warning for this one */
+
+   rmdir(DIRECTORY FILENAME);
+   rmdir(FILENAME);
+   close(dfd);
+   return 0;
+}
diff --git a/memcheck/tests/solaris/syscall_at.stderr.exp b/memcheck/tests/solaris/syscall_at.stderr.exp
new file mode 100644
index 0000000..97b2cd5
--- /dev/null
+++ b/memcheck/tests/solaris/syscall_at.stderr.exp
@@ -0,0 +1,24 @@
+
+Warning: invalid file descriptor 159879507 in syscall linkat()
+Warning: invalid file descriptor 159879508 in syscall linkat()
+Warning: invalid file descriptor 646349138 in syscall symlinkat()
+Warning: invalid file descriptor 70680914 in syscall readlinkat()
+Warning: invalid file descriptor 68362578 in syscall faccessat()
+Warning: invalid file descriptor 70685266 in syscall fchownat()
+Warning: invalid file descriptor 70717779 in syscall renameat()
+Warning: invalid file descriptor 70717780 in syscall renameat()
+Warning: invalid file descriptor 123765074 in syscall unlinkat()
+Warning: invalid file descriptor 1112625490 in syscall fstatat()
+Warning: invalid file descriptor 151224658 in syscall openat()
+Warning: invalid file descriptor 70267218 in syscall fchmodat()
+Warning: invalid file descriptor 154681682 in syscall mkdirat()
+Warning: invalid file descriptor 1501786646 in syscall utimeXXX()
+
+HEAP SUMMARY:
+    in use at exit: 0 bytes in 0 blocks
+  total heap usage: 0 allocs, 0 frees, 0 bytes allocated
+
+For a detailed leak analysis, rerun with: --leak-check=full
+
+For counts of detected and suppressed errors, rerun with: -v
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/syscall_at.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/syscall_at.stdout.exp
diff --git a/memcheck/tests/solaris/syscall_at.vgtest b/memcheck/tests/solaris/syscall_at.vgtest
new file mode 100644
index 0000000..f80366d
--- /dev/null
+++ b/memcheck/tests/solaris/syscall_at.vgtest
@@ -0,0 +1,2 @@
+prog: syscall_at
+stderr_filter: filter_syscall_at
diff --git a/memcheck/tests/solaris/thr_daemon_exit_libc.c b/memcheck/tests/solaris/thr_daemon_exit_libc.c
new file mode 100644
index 0000000..b8c1e9a
--- /dev/null
+++ b/memcheck/tests/solaris/thr_daemon_exit_libc.c
@@ -0,0 +1,72 @@
+/* Creates several daemon threads and non-daemon threads.
+   Tests that the process can exit even if the daemon threads are still running,
+   as per thr_create(3C). */
+
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <thread.h>
+#include <unistd.h>
+
+#define DAEMON_THREADS 5
+#define NON_DAEMON_THREADS 6
+#define SLEEP_100_MS usleep(100 * 1000)
+
+static pthread_barrier_t barrier;
+
+void *daemon_thread_func(void *arg) {
+   size_t index = (size_t) arg;
+   printf("DAEMON thread #%zu running\n", index); fflush(stdout);
+   pthread_barrier_wait(&barrier);
+
+   /* Give the non-daemon threads enough time to exit. */
+   sleep(10);
+   printf("DAEMON thread #%zu still running?!\n", index); fflush(stdout);
+   return NULL;
+}
+
+void *normal_thread_func(void *arg) {
+   size_t index = (size_t) arg;
+   printf("non-daemon thread #%zu running\n", index); fflush(stdout);
+   pthread_barrier_wait(&barrier);
+
+   sleep(2);
+   return NULL;
+}
+
+int main(void) {
+   size_t i;
+   int ret = pthread_barrier_init(&barrier, NULL,
+                                  DAEMON_THREADS + NON_DAEMON_THREADS + 1);
+   if (ret != 0) {
+      fprintf(stderr, "pthread_barrier_init failed: %s\n", strerror(ret));
+      return 1;
+   }
+
+   for (i = 0; i < DAEMON_THREADS; i++) {
+      ret = thr_create(NULL, 0, daemon_thread_func, (void *) i,
+                       THR_DAEMON, NULL);
+      if (ret != 0) {
+         fprintf(stderr, "thr_create failed: %s\n", strerror(ret));
+         return 1;
+      }
+      SLEEP_100_MS;
+   }
+
+   for (i = 0; i < NON_DAEMON_THREADS; i++) {
+      ret = thr_create(NULL, 0, normal_thread_func, (void *) i, 0, NULL);
+      if (ret != 0) {
+         fprintf(stderr, "thr_create failed: %s\n", strerror(ret));
+         return 1;
+      }
+      SLEEP_100_MS;
+   }
+
+   pthread_barrier_wait(&barrier);
+
+   printf("MAIN thread exiting\n");
+   /* Exit only the main thread, not whole process.
+      That is, do not exit(0) or return(0). */
+   thr_exit(NULL);
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/thr_daemon_exit_libc.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/thr_daemon_exit_libc.stderr.exp
diff --git a/memcheck/tests/solaris/thr_daemon_exit_libc.stdout.exp b/memcheck/tests/solaris/thr_daemon_exit_libc.stdout.exp
new file mode 100644
index 0000000..db0afc1
--- /dev/null
+++ b/memcheck/tests/solaris/thr_daemon_exit_libc.stdout.exp
@@ -0,0 +1,12 @@
+DAEMON thread #0 running
+DAEMON thread #1 running
+DAEMON thread #2 running
+DAEMON thread #3 running
+DAEMON thread #4 running
+non-daemon thread #0 running
+non-daemon thread #1 running
+non-daemon thread #2 running
+non-daemon thread #3 running
+non-daemon thread #4 running
+non-daemon thread #5 running
+MAIN thread exiting
diff --git a/memcheck/tests/solaris/thr_daemon_exit_libc.vgtest b/memcheck/tests/solaris/thr_daemon_exit_libc.vgtest
new file mode 100644
index 0000000..8193709
--- /dev/null
+++ b/memcheck/tests/solaris/thr_daemon_exit_libc.vgtest
@@ -0,0 +1,2 @@
+prog: thr_daemon_exit_libc
+vgopts: -q
diff --git a/memcheck/tests/solaris/thr_daemon_exit_standalone.c b/memcheck/tests/solaris/thr_daemon_exit_standalone.c
new file mode 100644
index 0000000..cf1987f
--- /dev/null
+++ b/memcheck/tests/solaris/thr_daemon_exit_standalone.c
@@ -0,0 +1,234 @@
+/* Tests that the process can exit even if daemon thread is still running.
+   This test does *not* use any libc; it interfaces only with kernel. */
+
+#include <sys/lwp.h>
+#include <sys/mman.h>
+#include <sys/segments.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+extern void bzero(void *ptr, size_t n);
+
+#if defined(VGP_x86_solaris)
+asm("\n"
+".text\n"
+".globl bzero\n"
+"bzero:\n"
+"   push %edi\n"
+"   movl $0, %eax\n"
+"   movl 12(%esp), %ecx\n"
+"   movl 8(%esp), %edi\n"
+"   rep  stosb\n"
+"   pop  %edi\n"
+"   ret\n"
+);
+#elif defined(VGP_amd64_solaris)
+asm("\n"
+".text\n"
+".globl bzero\n"
+"bzero:\n"
+"   push %rdi\n"
+"   movq %rsi, %rcx\n"
+"   movq $0, %rax\n"
+"   rep  stosb\n"
+"   pop  %rdi\n"
+"   ret\n"
+);
+#else
+#  error "Unknown platform"
+#endif
+
+static void sleep(unsigned int sec) {
+   timespec_t ts;
+   ts.tv_sec = (time_t)sec;
+   ts.tv_nsec = 0;
+
+#if defined(VGP_x86_solaris)
+   __asm__ __volatile__ (
+      "pushl $0\n"
+      "pushl %[TS]\n"
+      "pushl $0xdeadbeef\n"
+      "movl  %[SYSNO], %%eax\n"
+      "int   $0x91\n"
+      "addl  $12, %%esp\n"
+      :
+      : [TS] "g" (&ts), [SYSNO] "n" (SYS_nanosleep)
+      : "eax", "edx", "cc", "memory");
+#elif defined(VGP_amd64_solaris)
+   __asm__ __volatile__ (
+      "movq %[SYSNO], %%rax\n"
+      "movq %[TS], %%rdi\n"
+      "movq $0, %%rsi\n"
+      "syscall\n"
+      :
+      : [TS] "g" (&ts), [SYSNO] "n" (SYS_nanosleep)
+      : "rax", "rdx", "rdi", "rsi", "cc", "memory");
+#else
+#  error "Unknown platform"
+#endif
+}
+
+static void lwp_exit(void) {
+#if defined(VGP_x86_solaris)
+   __asm__ __volatile__ (
+      "movl %[SYSNO], %%eax\n"
+      "int  $0x91\n"
+      :
+      : [SYSNO] "n" (SYS_lwp_exit)
+      : "eax", "edx", "cc", "memory");
+#elif defined(VGP_amd64_solaris)
+   __asm__ __volatile__ (
+      "movq %[SYSNO], %%rax\n"
+      "syscall\n"
+      :
+      : [SYSNO] "n" (SYS_lwp_exit)
+      : "rax", "rdx", "cc", "memory");
+#else
+#  error "Unknown platform"
+#endif
+}
+
+#define STACK_FLAGS (MAP_PRIVATE | MAP_NORESERVE | MAP_ANON)
+#define STACK_PROT  (PROT_READ | PROT_WRITE)
+static void *allocate_stack(size_t stacksize) {
+   void *address = NULL;
+
+#if defined(VGP_x86_solaris)
+   __asm__ __volatile__ (
+      "pushl $0\n"
+      "pushl $-1\n"
+      "pushl %[FLAGS]\n"
+      "pushl %[PROT]\n"
+      "pushl %[SIZE]\n"
+      "pushl $0\n"
+      "pushl $0xdeadbeef\n"
+      "movl  %[SYSNO], %%eax\n"
+      "int   $0x91\n"
+      "addl  $28, %%esp\n"
+      "movl %%eax, %[ADDRESS]\n"
+      : [ADDRESS] "=r" (address)
+      : [FLAGS] "n" (STACK_FLAGS), [PROT] "n" (STACK_PROT),
+        [SIZE] "g" (stacksize), [SYSNO] "n" (SYS_mmap)
+      : "eax", "edx", "cc", "memory");
+#elif defined(VGP_amd64_solaris)
+   __asm__ __volatile__ (
+      "movq %[SYSNO], %%rax\n"
+      "movq $0, %%rdi\n"
+      "movq %[SIZE], %%rsi\n"
+      "movq %[PROT], %%rdx\n"
+      "movq %[FLAGS], %%r10\n"
+      "movq $-1, %%r8\n"
+      "movq $0, %%r9\n"
+      "syscall\n"
+      "movq %%rax, %[ADDRESS]\n"
+      : [ADDRESS] "=r" (address)
+      : [FLAGS] "n" (STACK_FLAGS), [PROT] "n" (STACK_PROT),
+        [SIZE] "g" (stacksize), [SYSNO] "n" (SYS_mmap)
+      : "rax", "rdx", "rdi", "rsi", "r10", "r8", "r9", "cc", "memory");
+#else
+#  error "Unknown platform"
+#endif
+
+   return address;
+}
+#undef STACK_FLAGS
+#undef STACK_PROT
+
+static void thread_func(void) {
+   sleep(10000);
+}
+
+#define LWP_FLAGS (LWP_SUSPENDED | LWP_DETACHED | LWP_DAEMON)
+static id_t lwp_create(void *stack) {
+   id_t tid;
+
+   ucontext_t ucontext;
+   bzero(&ucontext, sizeof(ucontext));
+   ucontext.uc_flags = UC_CPU;
+
+#if defined(VGP_x86_solaris)
+   __asm__ __volatile__ (
+      "mov %%ss, %[STACK_SEG]\n"
+      : [STACK_SEG] "=r" (ucontext.uc_mcontext.gregs[SS])
+      :
+      :);
+   ucontext.uc_mcontext.gregs[EIP] = (greg_t) thread_func;
+   ucontext.uc_mcontext.gregs[UESP] = (greg_t) stack;
+   ucontext.uc_mcontext.gregs[EBP] = (greg_t) stack;
+#elif defined(VGP_amd64_solaris)
+   ucontext.uc_mcontext.gregs[REG_SS] = UDS_SEL;
+   ucontext.uc_mcontext.gregs[REG_RIP] = (greg_t) thread_func;
+   ucontext.uc_mcontext.gregs[REG_RSP] = (greg_t) stack;
+   ucontext.uc_mcontext.gregs[REG_RBP] = (greg_t) stack;
+#else
+#  error "Unknown platform"
+#endif
+
+#if defined(VGP_x86_solaris)
+   __asm__ __volatile__ (
+      "pushl $0\n"
+      "pushl %[FLAGS]\n"
+      "pushl %[UCONTEXT]\n"
+      "pushl $0xdeadbeef\n"
+      "movl  %[SYSNO], %%eax\n"
+      "int   $0x91\n"
+      "addl  $16, %%esp\n"
+      "movl %%eax, %[TID]\n"
+      : [TID] "=r" (tid)
+      : [FLAGS] "n" (LWP_FLAGS), [UCONTEXT] "g" (&ucontext),
+        [SYSNO] "n" (SYS_lwp_create)
+      : "eax", "edx", "cc", "memory");
+#elif defined(VGP_amd64_solaris)
+   __asm__ __volatile__ (
+      "movq %[SYSNO], %%rax\n"
+      "movq %[UCONTEXT], %%rdi\n"
+      "movq %[FLAGS], %%rsi\n"
+      "movq $0, %%rdx\n"
+      "syscall\n"
+      "movl %%eax, %[TID]\n"
+      : [TID] "=r" (tid)
+      : [FLAGS] "n" (LWP_FLAGS), [UCONTEXT] "g" (&ucontext),
+        [SYSNO] "n" (SYS_lwp_create)
+      : "rax", "rdx", "rdi", "rsi", "cc", "memory");
+#else
+#  error "Unknown platform"
+#endif
+
+   return tid;
+}
+
+static void lwp_continue(id_t tid) {
+#if defined(VGP_x86_solaris)
+   __asm__ __volatile__ (
+      "pushl %[TID]\n"
+      "pushl $0xdeadbeef\n"
+      "movl  %[SYSNO], %%eax\n"
+      "int   $0x91\n"
+      "addl  $8, %%esp\n"
+      :
+      : [TID] "m" (tid), [SYSNO] "n" (SYS_lwp_continue)
+      : "eax", "edx", "cc", "memory");
+#elif defined(VGP_amd64_solaris)
+   __asm__ __volatile__ (
+      "movq %[SYSNO], %%rax\n"
+      "xor %%rdi, %%rdi\n"
+      "movl %[TID], %%edi\n"
+      "syscall\n"
+      :
+      : [TID] "r" (tid), [SYSNO] "n" (SYS_lwp_continue)
+      : "rax", "rdx", "rdi", "cc", "memory");
+#else
+#  error "Unknown platform"
+#endif
+}
+
+#define STACK_SIZE 16384
+void _start(void) {
+   void *stack = allocate_stack(STACK_SIZE);
+   id_t tid = lwp_create((char *) stack + STACK_SIZE);
+   lwp_continue(tid);
+   sleep(5);
+   lwp_exit();
+   return; /* not reached */
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/thr_daemon_exit_standalone.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/thr_daemon_exit_standalone.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/solaris/thr_daemon_exit_standalone.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/solaris/thr_daemon_exit_standalone.stdout.exp
diff --git a/memcheck/tests/solaris/thr_daemon_exit_standalone.vgtest b/memcheck/tests/solaris/thr_daemon_exit_standalone.vgtest
new file mode 100644
index 0000000..9b9061e
--- /dev/null
+++ b/memcheck/tests/solaris/thr_daemon_exit_standalone.vgtest
@@ -0,0 +1,2 @@
+prog: thr_daemon_exit_standalone
+vgopts: -q
diff --git a/memcheck/tests/str_tester.c b/memcheck/tests/str_tester.c
index 85c496a..9f7790a 100644
--- a/memcheck/tests/str_tester.c
+++ b/memcheck/tests/str_tester.c
@@ -504,7 +504,7 @@
 #endif
 
 // DDD: better done by testing for the function.
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__sun)
 static void
 test_rawmemchr (void)
 {
@@ -580,7 +580,7 @@
 }
 
 // DDD: better done by testing for the function.
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__sun)
 static void
 test_memrchr (void)
 {
@@ -1063,7 +1063,7 @@
     }
 }
 
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__sun)
 static void
 test_mempcpy (void)
 {
@@ -1442,7 +1442,7 @@
   test_strchrnul ();
 # endif
 
-# if !defined(__APPLE__)
+# if !defined(__APPLE__) && !defined(__sun)
   /* rawmemchr.  */
   test_rawmemchr ();
 # endif
@@ -1453,7 +1453,7 @@
   /* strrchr.  */
   test_strrchr ();
 
-# if !defined(__APPLE__)
+# if !defined(__APPLE__) && !defined(__sun)
   /* memrchr.  */
   test_memrchr ();
 # endif
@@ -1494,7 +1494,7 @@
   /* memmove - must work on overlap.  */
   test_memmove ();
 
-# if !defined(__APPLE__)
+# if !defined(__APPLE__) && !defined(__sun)
   /* mempcpy */
   test_mempcpy ();
 # endif
diff --git a/memcheck/tests/suppfree.stderr.exp b/memcheck/tests/suppfree.stderr.exp
index 62f5ccc..0340e61 100644
--- a/memcheck/tests/suppfree.stderr.exp
+++ b/memcheck/tests/suppfree.stderr.exp
@@ -12,4 +12,7 @@
    by 0x........: bbb (suppfree.c:17)
    by 0x........: aaa (suppfree.c:22)
    by 0x........: main (suppfree.c:36)
+ Block was alloc'd at
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (suppfree.c:32)
 
diff --git a/memcheck/tests/supponlyobj.vgtest b/memcheck/tests/supponlyobj.vgtest
index bead116..6653d3c 100644
--- a/memcheck/tests/supponlyobj.vgtest
+++ b/memcheck/tests/supponlyobj.vgtest
@@ -1,3 +1,9 @@
+prereq: (! ../../tests/os_test solaris)
+# This test is disabled on Solaris because function below main (_start)
+# is part of the inlinfo object whereas on Linux it is part of libc
+# (__libc_start_main).
+# solaris/supponlyobj test exists to check the Solaris variant.
+#
 # test suppressions with only obj: markers
 prog: inlinfo
 vgopts: -q --read-inline-info=no --suppressions=supponlyobj.supp
diff --git a/memcheck/tests/test-plo-no.vgtest b/memcheck/tests/test-plo-no.vgtest
index 247a134..cbe322c 100644
--- a/memcheck/tests/test-plo-no.vgtest
+++ b/memcheck/tests/test-plo-no.vgtest
@@ -1,2 +1,2 @@
 prog: test-plo
-vgopts: -q
+vgopts: -q --partial-loads-ok=no --keep-stacktraces=alloc-then-free
diff --git a/memcheck/tests/test-plo-yes.vgtest b/memcheck/tests/test-plo-yes.vgtest
index 95c50b2..b37aeb5 100644
--- a/memcheck/tests/test-plo-yes.vgtest
+++ b/memcheck/tests/test-plo-yes.vgtest
@@ -1,3 +1,3 @@
-prereq: test ! `../../tests/arch_test ppc32` && ! `../../tests/arch_test ppc64` && ! `../../tests/arch_test s390x` && ! `../../tests/mips_features mips-be`
+prereq: ! ../../tests/arch_test ppc32 && ! ../../tests/arch_test ppc64 && ! ../../tests/arch_test s390x && ! ../../tests/mips_features mips-be
 prog: test-plo
-vgopts: -q --partial-loads-ok=yes
+vgopts: -q --partial-loads-ok=yes  --keep-stacktraces=alloc-then-free
diff --git a/memcheck/tests/thread_alloca.c b/memcheck/tests/thread_alloca.c
index fa0c185..c30d1dc 100644
--- a/memcheck/tests/thread_alloca.c
+++ b/memcheck/tests/thread_alloca.c
@@ -66,7 +66,7 @@
        assert(i == j+2);
        sprintf (n, "%d",  atoi(argv[1]) - 1);
        // system ("env | wc");
-       execle(argv[0], argv[0], n, NULL, new_env);
+       execle(argv[0], argv[0], n, (char *) NULL, new_env);
        assert(0);
     } else
        return 0;
diff --git a/memcheck/tests/threadname.c b/memcheck/tests/threadname.c
index 91e7f83..d3f6e44 100644
--- a/memcheck/tests/threadname.c
+++ b/memcheck/tests/threadname.c
@@ -1,12 +1,17 @@
+#include "config.h"
+
 #define _GNU_SOURCE
 #include <stdio.h>
 #include <pthread.h>
 #include <string.h>
 #include <stdlib.h>
+#if defined(HAVE_SYS_PRCTL_H)
+#include <sys/prctl.h>
+#endif /* HAVE_SYS_PRCTL_H */
 #include <sys/types.h>
 #include <unistd.h>
 #include <assert.h>
-
+#include "valgrind.h"
 
 static pthread_t children[3];
 
@@ -44,6 +49,7 @@
 #  endif
 
   bad_things(3);
+  VALGRIND_PRINTF("%s", "I am in child_fn_1\n");
 
   r = pthread_create(&children[2], NULL, child_fn_2, NULL);
   assert(!r);
diff --git a/memcheck/tests/threadname.stderr.exp b/memcheck/tests/threadname.stderr.exp
index 1cf2313..60903ee 100644
--- a/memcheck/tests/threadname.stderr.exp
+++ b/memcheck/tests/threadname.stderr.exp
@@ -1,50 +1,51 @@
 Invalid write of size 1
-   at 0x........: bad_things (threadname.c:16)
-   by 0x........: main (threadname.c:76)
+   at 0x........: bad_things (threadname.c:21)
+   by 0x........: main (threadname.c:82)
  Address 0x........ is 0 bytes after a block of size 1 alloc'd
    at 0x........: malloc (vg_replace_malloc.c:...)
-   by 0x........: bad_things (threadname.c:15)
-   by 0x........: main (threadname.c:76)
+   by 0x........: bad_things (threadname.c:20)
+   by 0x........: main (threadname.c:82)
 
 Thread 2:
 Invalid write of size 1
-   at 0x........: bad_things (threadname.c:16)
-   by 0x........: child_fn_0 (threadname.c:61)
+   at 0x........: bad_things (threadname.c:21)
+   by 0x........: child_fn_0 (threadname.c:67)
    ...
  Address 0x........ is 0 bytes after a block of size 2 alloc'd
    at 0x........: malloc (vg_replace_malloc.c:...)
-   by 0x........: bad_things (threadname.c:15)
-   by 0x........: child_fn_0 (threadname.c:61)
+   by 0x........: bad_things (threadname.c:20)
+   by 0x........: child_fn_0 (threadname.c:67)
    ...
 
 Thread 3 try1:
 Invalid write of size 1
-   at 0x........: bad_things (threadname.c:16)
-   by 0x........: child_fn_1 (threadname.c:46)
+   at 0x........: bad_things (threadname.c:21)
+   by 0x........: child_fn_1 (threadname.c:51)
    ...
  Address 0x........ is 0 bytes after a block of size 3 alloc'd
    at 0x........: malloc (vg_replace_malloc.c:...)
-   by 0x........: bad_things (threadname.c:15)
-   by 0x........: child_fn_1 (threadname.c:46)
+   by 0x........: bad_things (threadname.c:20)
+   by 0x........: child_fn_1 (threadname.c:51)
    ...
 
+I am in child_fn_1
 Thread 4 012345678901234:
 Invalid write of size 1
-   at 0x........: bad_things (threadname.c:16)
-   by 0x........: child_fn_2 (threadname.c:30)
+   at 0x........: bad_things (threadname.c:21)
+   by 0x........: child_fn_2 (threadname.c:35)
    ...
  Address 0x........ is 0 bytes after a block of size 4 alloc'd
    at 0x........: malloc (vg_replace_malloc.c:...)
-   by 0x........: bad_things (threadname.c:15)
-   by 0x........: child_fn_2 (threadname.c:30)
+   by 0x........: bad_things (threadname.c:20)
+   by 0x........: child_fn_2 (threadname.c:35)
    ...
 
 Thread 1:
 Invalid write of size 1
-   at 0x........: bad_things (threadname.c:16)
-   by 0x........: main (threadname.c:84)
+   at 0x........: bad_things (threadname.c:21)
+   by 0x........: main (threadname.c:90)
  Address 0x........ is 0 bytes after a block of size 5 alloc'd
    at 0x........: malloc (vg_replace_malloc.c:...)
-   by 0x........: bad_things (threadname.c:15)
-   by 0x........: main (threadname.c:84)
+   by 0x........: bad_things (threadname.c:20)
+   by 0x........: main (threadname.c:90)
 
diff --git a/memcheck/tests/threadname_xml.stderr.exp b/memcheck/tests/threadname_xml.stderr.exp
index 067b2ff..3f9e593 100644
--- a/memcheck/tests/threadname_xml.stderr.exp
+++ b/memcheck/tests/threadname_xml.stderr.exp
@@ -185,6 +185,12 @@
   </stack>
 </error>
 
+<clientmsg>
+  <tid>...</tid>
+  <threadname>try1</threadname>
+  <text>I am in child_fn_1
+  </text>
+</clientmsg>
 <error>
   <unique>0x........</unique>
   <tid>...</tid>
diff --git a/memcheck/tests/unit_libcbase.c b/memcheck/tests/unit_libcbase.c
index 19595f9..63f1d79 100644
--- a/memcheck/tests/unit_libcbase.c
+++ b/memcheck/tests/unit_libcbase.c
@@ -28,7 +28,7 @@
 
 
 #define  CHECK(x) \
-   if (!x) { fprintf(stderr, "failure: %s:%d\n", __FILE__, __LINE__); }
+   if (!(x)) { fprintf(stderr, "failure: %s:%d\n", __FILE__, __LINE__); }
 
 
 void test_VG_STREQ(void)
diff --git a/memcheck/tests/vbit-test/Makefile.am b/memcheck/tests/vbit-test/Makefile.am
index 9888fad..e327a2a 100644
--- a/memcheck/tests/vbit-test/Makefile.am
+++ b/memcheck/tests/vbit-test/Makefile.am
@@ -39,5 +39,5 @@
                          -I$(top_srcdir)/VEX/pub
 vbit_test_CFLAGS       = $(AM_CFLAGS_PRI) -std=c99
 vbit_test_DEPENDENCIES = 
-vbit_test_LDADD        = 
+vbit_test_LDADD        = $(top_srcdir)/VEX/libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
 vbit_test_LDFLAGS      = $(AM_CFLAGS_PRI) -std=c99 @LIB_UBSAN@
diff --git a/memcheck/tests/vbit-test/TODO b/memcheck/tests/vbit-test/TODO
index 9a51e79..13b1d53 100644
--- a/memcheck/tests/vbit-test/TODO
+++ b/memcheck/tests/vbit-test/TODO
@@ -4,6 +4,3 @@
 (2) Add support for IROps with vector operands.
 
 (3) Test floating point operations with various rounding modes.
-
-(4) Iop_CmpORD32U and friends are not supported (ppc only)
-
diff --git a/memcheck/tests/vbit-test/binary.c b/memcheck/tests/vbit-test/binary.c
index 64b43a3..b75e58f 100644
--- a/memcheck/tests/vbit-test/binary.c
+++ b/memcheck/tests/vbit-test/binary.c
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #include <assert.h>
 #include <string.h>  // memset
 #include "vtest.h"
@@ -450,10 +474,20 @@
          won't crash. */
       memset(&opnds[1].value, 0xff, sizeof opnds[1].value);
 
-      /* For immediate shift amounts choose a value of '1'. That should
-         not cause a problem. */
+      /* For immediate shift amounts choose a value of '1'. That value should
+         not cause a problem. Note: we always assign to the u64 member here.
+         The reason is that in ir_inject.c the value_t type is not visible.
+         The value is picked up there by interpreting the memory as an
+         ULong value. So, we rely on 
+         union {
+           ULong   v1;   // value picked up in ir_inject.c
+           value_t v2;   // value assigned here
+         } xx;
+         assert(sizeof xx.v1 == sizeof xx.v2.u64);
+         assert(xx.v1 == xx.v2.u64);
+      */
       if (op->shift_amount_is_immediate)
-         opnds[1].value.u8 = 1;
+         opnds[1].value.u64 = 1;
 
       for (bitpos = 0; bitpos < num_input_bits; ++bitpos) {
          opnds[i].vbits = onehot_vbits(bitpos, bitsof_irtype(opnds[i].type));
diff --git a/memcheck/tests/vbit-test/irops.c b/memcheck/tests/vbit-test/irops.c
index e35b3bf..0395efe 100644
--- a/memcheck/tests/vbit-test/irops.c
+++ b/memcheck/tests/vbit-test/irops.c
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #include <stdio.h>    // fprintf
 #include <stdlib.h>   // exit
 #include "pub_tool_basics.h"   // STATIC_ASSERT
@@ -241,8 +265,9 @@
   { DEFOP(Iop_CosF64,        UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0, .tilegx = 0 },
   { DEFOP(Iop_TanF64,        UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0, .tilegx = 0 },
   { DEFOP(Iop_2xm1F64,       UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0, .tilegx = 0 },
-  { DEFOP(Iop_RoundF64toInt, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1, .tilegx = 0 },
-  { DEFOP(Iop_RoundF32toInt, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1, .tilegx = 0 },
+  { DEFOP(Iop_RoundF128toInt, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0, .tilegx = 0 },
+  { DEFOP(Iop_RoundF64toInt, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1, .tilegx = 0 },
+  { DEFOP(Iop_RoundF32toInt, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1, .tilegx = 0 },
   { DEFOP(Iop_MAddF32,       UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1, .tilegx = 0 },
   { DEFOP(Iop_MSubF32,       UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1, .tilegx = 0 },
   { DEFOP(Iop_MAddF64,       UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1, .tilegx = 0 },
@@ -1125,7 +1150,8 @@
          case Iop_D128toF64:
          case Iop_D128toF128: {
             int rc;
-            /* These IROps require the Perform Floating Point Operation facility */
+            /* These IROps require the Perform Floating Point Operation
+               facility */
             rc = system(S390X_FEATURES " s390x-pfpo");
             // s390x_features returns 1 if feature does not exist
             rc /= 256;
@@ -1142,6 +1168,38 @@
          return p->amd64 ? p : NULL;
 #endif
 #ifdef __powerpc__
+#define  MIN_POWER_ISA  "../../../tests/min_power_isa"
+
+         switch (op) {
+         case Iop_DivS64E:
+         case Iop_DivU64E:
+         case Iop_DivU32E:
+         case Iop_DivS32E:
+         case Iop_F64toI64U:
+         case Iop_F64toI32U:
+         case Iop_I64UtoF64:
+         case Iop_I64UtoF32:
+         case Iop_I64StoD64: {
+            int rc;
+            /* IROps require a processor that supports ISA 2.06 or newer */
+            rc = system(MIN_POWER_ISA " 2.06 ");
+            rc /= 256;
+            /* MIN_POWER_ISA returns 0 if underlying HW supports the
+             * specified ISA or newer. Returns 1 if the HW does not support
+             * the specified ISA.  Returns 2 on error.
+             */
+            if (rc == 1) return NULL;
+            if (rc > 2) {
+               panic(" ERROR, min_power_isa() return code is invalid.\n");
+            }
+         }
+         break;
+
+         /* Other */
+         default:
+         break;
+         }
+
 #ifdef __powerpc64__
          return p->ppc64 ? p : NULL;
 #else
diff --git a/memcheck/tests/vbit-test/main.c b/memcheck/tests/vbit-test/main.c
index 7b9c4de..45f431b 100644
--- a/memcheck/tests/vbit-test/main.c
+++ b/memcheck/tests/vbit-test/main.c
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #include <assert.h>    // assert
 #include <stdio.h>     // printf
 #include <stdlib.h>    // malloc
@@ -75,7 +99,7 @@
       if (strcmp(argv[i], "-v") == 0) ++verbose;
       else if (strcmp(argv[i], "--help") == 0) {
         printf("\nvbit-test [ -v | --help ]\n");
-        printf("\n\t-v       verbose mode; show number of 1, 2, 3 and 4 operand tests\n");
+        printf("\n\t-v       verbose mode; show number of tests\n");
         printf("\n\t-v -v    verbose mode; shows IROps being tested\n");
         printf("\n\t-v -v -v verbose mode, extreme edition\n\n");
         return 0;
@@ -112,14 +136,14 @@
       const irop_t *op = get_irop(opkind);
       if (op == NULL) continue;
 
-      test_data_t *data = new_test_data(op);
-
       if (op->undef_kind == UNDEF_UNKNOWN) {
          fprintf(stderr, "...skipping %s; unknown undef propagation\n",
                  op->name);
          continue;
       }
 
+      test_data_t *data = new_test_data(op);
+
       if (verbose > 1) printf("Testing operator %s\n", op->name);
 
       IRICB iricb = new_iricb(op, data);
@@ -151,8 +175,9 @@
    }
 
    if (verbose) 
-      printf("\nvbit-test ran  %d unary, %d binary, %d ternary and %d qernary tests.\n",
-	  num_unary_tests, num_binary_tests, num_ternary_tests,
-	  num_qernary_tests);
+      printf("\nvbit-test ran  %d unary, %d binary, %d ternary and"
+             " %d qernary tests.\n\n",
+             num_unary_tests, num_binary_tests, num_ternary_tests,
+             num_qernary_tests);
    return 0;
 }
diff --git a/memcheck/tests/vbit-test/qernary.c b/memcheck/tests/vbit-test/qernary.c
index 324bb20..001a543 100644
--- a/memcheck/tests/vbit-test/qernary.c
+++ b/memcheck/tests/vbit-test/qernary.c
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #include <assert.h>
 #include "vtest.h"
 
diff --git a/memcheck/tests/vbit-test/ternary.c b/memcheck/tests/vbit-test/ternary.c
index 77eaa94..f7aa8fe 100644
--- a/memcheck/tests/vbit-test/ternary.c
+++ b/memcheck/tests/vbit-test/ternary.c
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #include <assert.h>
 #include "vtest.h"
 
diff --git a/memcheck/tests/vbit-test/unary.c b/memcheck/tests/vbit-test/unary.c
index 30ba87f..29c7ed5 100644
--- a/memcheck/tests/vbit-test/unary.c
+++ b/memcheck/tests/vbit-test/unary.c
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #include <assert.h>
 #include "vtest.h"
 
diff --git a/memcheck/tests/vbit-test/util.c b/memcheck/tests/vbit-test/util.c
index 170fb8a..29a6883 100644
--- a/memcheck/tests/vbit-test/util.c
+++ b/memcheck/tests/vbit-test/util.c
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #include <stdio.h>     // fprintf
 #include <stdlib.h>    // exit
 #include <assert.h>    // assert
@@ -7,6 +31,14 @@
 #include <machine/endian.h>
 #define __BYTE_ORDER    BYTE_ORDER
 #define __LITTLE_ENDIAN LITTLE_ENDIAN
+#elif defined(__sun)
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN    4321
+#  if defined(_LITTLE_ENDIAN)
+#  define __BYTE_ORDER    __LITTLE_ENDIAN
+#  else
+#  define __BYTE_ORDER    __BIG_ENDIAN
+#  endif
 #else
 #include <endian.h>
 #endif
@@ -159,890 +191,16 @@
 }
 
 
-/* ---------------------------------------------------------------- */
-
-/* The functions below have been imported from VEX/pric/ir_defs.c.
-   This is more convenient because
-   (1) Don't have to figure out the Makefile machinery to pick up the
-       correct VEX library (platform specific)
-   (2) Would have to export typeofIRType in VEX
-   (3) There is no worry that these functions get out of synch because
-       the test harness will iterate over all IROps in libvex_ir.h.
-       So if a new one was added there, we would assert here and elsewhere.
-*/
-
-// Taken from VEX/priv/ir_defs.c: function sizeofIRType
 unsigned
 sizeof_irtype(IRType ty)
 {
-   switch (ty) {
-      case Ity_I8:   return 1;
-      case Ity_I16:  return 2;
-      case Ity_I32:  return 4;
-      case Ity_I64:  return 8;
-      case Ity_I128: return 16;
-      case Ity_F32:  return 4;
-      case Ity_F64:  return 8;
-      case Ity_F128: return 16;
-      case Ity_D32:  return 4;
-      case Ity_D64:  return 8;
-      case Ity_D128: return 16;
-      case Ity_V128: return 16;
-      case Ity_V256: return 32;
-      default:
-         panic(__func__);
-   }
+   return sizeofIRType(ty);
 }
 
 
-// Taken from VEX/priv/ir_defs.c: function typeOfPrimop
-// Modified minimally to break dependencies on VEX infrastructure.
 void
 typeof_primop(IROp op, IRType *t_dst, IRType *t_arg1, IRType *t_arg2, 
               IRType *t_arg3, IRType *t_arg4)
 {
-#  define UNARY(_ta1,_td)                                      \
-      *t_dst = (_td); *t_arg1 = (_ta1); break
-#  define BINARY(_ta1,_ta2,_td)                                \
-     *t_dst = (_td); *t_arg1 = (_ta1); *t_arg2 = (_ta2); break
-#  define TERNARY(_ta1,_ta2,_ta3,_td)                          \
-     *t_dst = (_td); *t_arg1 = (_ta1);                         \
-     *t_arg2 = (_ta2); *t_arg3 = (_ta3); break
-#  define QUATERNARY(_ta1,_ta2,_ta3,_ta4,_td)                  \
-     *t_dst = (_td); *t_arg1 = (_ta1);                         \
-     *t_arg2 = (_ta2); *t_arg3 = (_ta3);                       \
-     *t_arg4 = (_ta4); break
-#  define COMPARISON(_ta)                                      \
-     *t_dst = Ity_I1; *t_arg1 = *t_arg2 = (_ta); break;
-#  define UNARY_COMPARISON(_ta)                                \
-     *t_dst = Ity_I1; *t_arg1 = (_ta); break;
-
-   /* Rounding mode values are always Ity_I32, encoded as per
-      IRRoundingMode */
-   const IRType ity_RMode = Ity_I32;
-
-   *t_dst  = Ity_INVALID;
-   *t_arg1 = Ity_INVALID;
-   *t_arg2 = Ity_INVALID;
-   *t_arg3 = Ity_INVALID;
-   *t_arg4 = Ity_INVALID;
-   switch (op) {
-      case Iop_Add8: case Iop_Sub8: case Iop_Mul8: 
-      case Iop_Or8:  case Iop_And8: case Iop_Xor8:
-         BINARY(Ity_I8,Ity_I8, Ity_I8);
-
-      case Iop_Add16: case Iop_Sub16: case Iop_Mul16:
-      case Iop_Or16:  case Iop_And16: case Iop_Xor16:
-         BINARY(Ity_I16,Ity_I16, Ity_I16);
-
-      case Iop_CmpORD32U:
-      case Iop_CmpORD32S:
-      case Iop_Add32: case Iop_Sub32: case Iop_Mul32:
-      case Iop_Or32:  case Iop_And32: case Iop_Xor32:
-      case Iop_Max32U:
-      case Iop_QAdd32S: case Iop_QSub32S:
-      case Iop_Add16x2: case Iop_Sub16x2:
-      case Iop_QAdd16Sx2: case Iop_QAdd16Ux2:
-      case Iop_QSub16Sx2: case Iop_QSub16Ux2:
-      case Iop_HAdd16Ux2: case Iop_HAdd16Sx2:
-      case Iop_HSub16Ux2: case Iop_HSub16Sx2:
-      case Iop_Add8x4: case Iop_Sub8x4:
-      case Iop_QAdd8Sx4: case Iop_QAdd8Ux4:
-      case Iop_QSub8Sx4: case Iop_QSub8Ux4:
-      case Iop_HAdd8Ux4: case Iop_HAdd8Sx4:
-      case Iop_HSub8Ux4: case Iop_HSub8Sx4:
-      case Iop_Sad8Ux4:
-         BINARY(Ity_I32,Ity_I32, Ity_I32);
-
-      case Iop_Add64: case Iop_Sub64: case Iop_Mul64:
-      case Iop_Or64:  case Iop_And64: case Iop_Xor64:
-      case Iop_CmpORD64U:
-      case Iop_CmpORD64S:
-      case Iop_Avg8Ux8: case Iop_Avg16Ux4:
-      case Iop_Add8x8: case Iop_Add16x4: case Iop_Add32x2:
-      case Iop_Add32Fx2: case Iop_Sub32Fx2:
-      case Iop_CmpEQ8x8: case Iop_CmpEQ16x4: case Iop_CmpEQ32x2:
-      case Iop_CmpGT8Sx8: case Iop_CmpGT16Sx4: case Iop_CmpGT32Sx2:
-      case Iop_CmpGT8Ux8: case Iop_CmpGT16Ux4: case Iop_CmpGT32Ux2:
-      case Iop_CmpGT32Fx2: case Iop_CmpEQ32Fx2: case Iop_CmpGE32Fx2:
-      case Iop_InterleaveHI8x8: case Iop_InterleaveLO8x8:
-      case Iop_InterleaveHI16x4: case Iop_InterleaveLO16x4:
-      case Iop_InterleaveHI32x2: case Iop_InterleaveLO32x2:
-      case Iop_CatOddLanes8x8: case Iop_CatEvenLanes8x8:
-      case Iop_CatOddLanes16x4: case Iop_CatEvenLanes16x4:
-      case Iop_InterleaveOddLanes8x8: case Iop_InterleaveEvenLanes8x8:
-      case Iop_InterleaveOddLanes16x4: case Iop_InterleaveEvenLanes16x4:
-      case Iop_Perm8x8:
-      case Iop_Max8Ux8: case Iop_Max16Ux4: case Iop_Max32Ux2:
-      case Iop_Max8Sx8: case Iop_Max16Sx4: case Iop_Max32Sx2:
-      case Iop_Max32Fx2: case Iop_Min32Fx2:
-      case Iop_PwMax32Fx2: case Iop_PwMin32Fx2:
-      case Iop_Min8Ux8: case Iop_Min16Ux4: case Iop_Min32Ux2:
-      case Iop_Min8Sx8: case Iop_Min16Sx4: case Iop_Min32Sx2:
-      case Iop_PwMax8Ux8: case Iop_PwMax16Ux4: case Iop_PwMax32Ux2:
-      case Iop_PwMax8Sx8: case Iop_PwMax16Sx4: case Iop_PwMax32Sx2:
-      case Iop_PwMin8Ux8: case Iop_PwMin16Ux4: case Iop_PwMin32Ux2:
-      case Iop_PwMin8Sx8: case Iop_PwMin16Sx4: case Iop_PwMin32Sx2:
-      case Iop_Mul8x8: case Iop_Mul16x4: case Iop_Mul32x2:
-      case Iop_Mul32Fx2:
-      case Iop_PolynomialMul8x8:
-      case Iop_MulHi16Sx4: case Iop_MulHi16Ux4:
-      case Iop_QDMulHi16Sx4: case Iop_QDMulHi32Sx2:
-      case Iop_QRDMulHi16Sx4: case Iop_QRDMulHi32Sx2:
-      case Iop_QAdd8Sx8: case Iop_QAdd16Sx4:
-      case Iop_QAdd32Sx2: case Iop_QAdd64Sx1:
-      case Iop_QAdd8Ux8: case Iop_QAdd16Ux4:
-      case Iop_QAdd32Ux2: case Iop_QAdd64Ux1:
-      case Iop_PwAdd8x8: case Iop_PwAdd16x4: case Iop_PwAdd32x2:
-      case Iop_PwAdd32Fx2:
-      case Iop_QNarrowBin32Sto16Sx4:
-      case Iop_QNarrowBin16Sto8Sx8: case Iop_QNarrowBin16Sto8Ux8:
-      case Iop_NarrowBin16to8x8: case Iop_NarrowBin32to16x4:
-      case Iop_Sub8x8: case Iop_Sub16x4: case Iop_Sub32x2:
-      case Iop_QSub8Sx8: case Iop_QSub16Sx4:
-      case Iop_QSub32Sx2: case Iop_QSub64Sx1:
-      case Iop_QSub8Ux8: case Iop_QSub16Ux4:
-      case Iop_QSub32Ux2: case Iop_QSub64Ux1:
-      case Iop_Shl8x8: case Iop_Shl16x4: case Iop_Shl32x2:
-      case Iop_Shr8x8: case Iop_Shr16x4: case Iop_Shr32x2:
-      case Iop_Sar8x8: case Iop_Sar16x4: case Iop_Sar32x2:
-      case Iop_Sal8x8: case Iop_Sal16x4: case Iop_Sal32x2: case Iop_Sal64x1:
-      case Iop_QShl8x8: case Iop_QShl16x4: case Iop_QShl32x2: case Iop_QShl64x1:
-      case Iop_QSal8x8: case Iop_QSal16x4: case Iop_QSal32x2: case Iop_QSal64x1:
-      case Iop_RecipStep32Fx2:
-      case Iop_RSqrtStep32Fx2:
-         BINARY(Ity_I64,Ity_I64, Ity_I64);
-
-      case Iop_ShlN32x2: case Iop_ShlN16x4: case Iop_ShlN8x8:
-      case Iop_ShrN32x2: case Iop_ShrN16x4: case Iop_ShrN8x8:
-      case Iop_SarN32x2: case Iop_SarN16x4: case Iop_SarN8x8:
-      case Iop_QShlNsatUU8x8:  case Iop_QShlNsatUU16x4:
-      case Iop_QShlNsatUU32x2: case Iop_QShlNsatUU64x1:
-      case Iop_QShlNsatSU8x8:  case Iop_QShlNsatSU16x4:
-      case Iop_QShlNsatSU32x2: case Iop_QShlNsatSU64x1:
-      case Iop_QShlNsatSS8x8:  case Iop_QShlNsatSS16x4:
-      case Iop_QShlNsatSS32x2: case Iop_QShlNsatSS64x1:
-         BINARY(Ity_I64,Ity_I8, Ity_I64);
-
-      case Iop_Shl8: case Iop_Shr8: case Iop_Sar8:
-         BINARY(Ity_I8,Ity_I8, Ity_I8);
-      case Iop_Shl16: case Iop_Shr16: case Iop_Sar16:
-         BINARY(Ity_I16,Ity_I8, Ity_I16);
-      case Iop_Shl32: case Iop_Shr32: case Iop_Sar32:
-         BINARY(Ity_I32,Ity_I8, Ity_I32);
-      case Iop_Shl64: case Iop_Shr64: case Iop_Sar64:
-         BINARY(Ity_I64,Ity_I8, Ity_I64);
-
-      case Iop_Not8:
-         UNARY(Ity_I8, Ity_I8);
-      case Iop_Not16:
-         UNARY(Ity_I16, Ity_I16);
-      case Iop_Not32:
-      case Iop_CmpNEZ16x2: case Iop_CmpNEZ8x4:
-         UNARY(Ity_I32, Ity_I32);
-
-      case Iop_Not64:
-      case Iop_CmpNEZ32x2: case Iop_CmpNEZ16x4: case Iop_CmpNEZ8x8:
-      case Iop_Cnt8x8:
-      case Iop_Clz8x8: case Iop_Clz16x4: case Iop_Clz32x2:
-      case Iop_Cls8x8: case Iop_Cls16x4: case Iop_Cls32x2:
-      case Iop_PwAddL8Ux8: case Iop_PwAddL16Ux4: case Iop_PwAddL32Ux2:
-      case Iop_PwAddL8Sx8: case Iop_PwAddL16Sx4: case Iop_PwAddL32Sx2:
-      case Iop_Reverse8sIn64_x1: case Iop_Reverse16sIn64_x1:
-      case Iop_Reverse32sIn64_x1:
-      case Iop_Reverse8sIn32_x2: case Iop_Reverse16sIn32_x2:
-      case Iop_Reverse8sIn16_x4:
-      case Iop_FtoI32Sx2_RZ: case Iop_FtoI32Ux2_RZ:
-      case Iop_I32StoFx2: case Iop_I32UtoFx2:
-      case Iop_RecipEst32Ux2: case Iop_RecipEst32Fx2:
-      case Iop_Abs32Fx2:
-      case Iop_RSqrtEst32Fx2:
-      case Iop_RSqrtEst32Ux2:
-      case Iop_Neg32Fx2:
-      case Iop_Abs8x8: case Iop_Abs16x4: case Iop_Abs32x2:
-         UNARY(Ity_I64, Ity_I64);
-
-      case Iop_CmpEQ8: case Iop_CmpNE8:
-      case Iop_CasCmpEQ8: case Iop_CasCmpNE8:
-         COMPARISON(Ity_I8);
-      case Iop_CmpEQ16: case Iop_CmpNE16:
-      case Iop_CasCmpEQ16: case Iop_CasCmpNE16:
-         COMPARISON(Ity_I16);
-      case Iop_CmpEQ32: case Iop_CmpNE32:
-      case Iop_CasCmpEQ32: case Iop_CasCmpNE32:
-      case Iop_CmpLT32S: case Iop_CmpLE32S:
-      case Iop_CmpLT32U: case Iop_CmpLE32U:
-         COMPARISON(Ity_I32);
-      case Iop_CmpEQ64: case Iop_CmpNE64:
-      case Iop_CasCmpEQ64: case Iop_CasCmpNE64:
-      case Iop_CmpLT64S: case Iop_CmpLE64S:
-      case Iop_CmpLT64U: case Iop_CmpLE64U:
-         COMPARISON(Ity_I64);
-
-      case Iop_CmpNEZ8:  UNARY_COMPARISON(Ity_I8);
-      case Iop_CmpNEZ16: UNARY_COMPARISON(Ity_I16);
-      case Iop_CmpNEZ32: UNARY_COMPARISON(Ity_I32);
-      case Iop_CmpNEZ64: UNARY_COMPARISON(Ity_I64);
-
-      case Iop_Left8:  UNARY(Ity_I8, Ity_I8);
-      case Iop_Left16: UNARY(Ity_I16,Ity_I16);
-      case Iop_CmpwNEZ32: case Iop_Left32: UNARY(Ity_I32,Ity_I32);
-      case Iop_CmpwNEZ64: case Iop_Left64: UNARY(Ity_I64,Ity_I64);
-
-      case Iop_MullU8: case Iop_MullS8:
-         BINARY(Ity_I8,Ity_I8, Ity_I16);
-      case Iop_MullU16: case Iop_MullS16:
-         BINARY(Ity_I16,Ity_I16, Ity_I32);
-      case Iop_MullU32: case Iop_MullS32:
-         BINARY(Ity_I32,Ity_I32, Ity_I64);
-      case Iop_MullU64: case Iop_MullS64:
-         BINARY(Ity_I64,Ity_I64, Ity_I128);
-
-      case Iop_Clz32: case Iop_Ctz32:
-         UNARY(Ity_I32, Ity_I32);
-
-      case Iop_Clz64: case Iop_Ctz64:
-         UNARY(Ity_I64, Ity_I64);
-
-      case Iop_DivU32: case Iop_DivS32: case Iop_DivU32E: case Iop_DivS32E:
-         BINARY(Ity_I32,Ity_I32, Ity_I32);
-
-      case Iop_DivU64: case Iop_DivS64: case Iop_DivS64E: case Iop_DivU64E:
-         BINARY(Ity_I64,Ity_I64, Ity_I64);
-
-      case Iop_DivModU64to32: case Iop_DivModS64to32:
-         BINARY(Ity_I64,Ity_I32, Ity_I64);
-
-      case Iop_DivModU128to64: case Iop_DivModS128to64:
-         BINARY(Ity_I128,Ity_I64, Ity_I128);
-
-      case Iop_DivModS64to64:
-         BINARY(Ity_I64,Ity_I64, Ity_I128);
-
-      case Iop_16HIto8: case Iop_16to8:
-         UNARY(Ity_I16, Ity_I8);
-      case Iop_8HLto16:
-         BINARY(Ity_I8,Ity_I8, Ity_I16);
-
-      case Iop_32HIto16: case Iop_32to16:
-         UNARY(Ity_I32, Ity_I16);
-      case Iop_16HLto32:
-         BINARY(Ity_I16,Ity_I16, Ity_I32);
-
-      case Iop_64HIto32: case Iop_64to32:
-         UNARY(Ity_I64, Ity_I32);
-      case Iop_32HLto64:
-         BINARY(Ity_I32,Ity_I32, Ity_I64);
-
-      case Iop_128HIto64: case Iop_128to64:
-         UNARY(Ity_I128, Ity_I64);
-      case Iop_64HLto128:
-         BINARY(Ity_I64,Ity_I64, Ity_I128);
-
-      case Iop_Not1:   UNARY(Ity_I1, Ity_I1);
-      case Iop_1Uto8:  UNARY(Ity_I1, Ity_I8);
-      case Iop_1Sto8:  UNARY(Ity_I1, Ity_I8);
-      case Iop_1Sto16: UNARY(Ity_I1, Ity_I16);
-      case Iop_1Uto32: case Iop_1Sto32: UNARY(Ity_I1, Ity_I32);
-      case Iop_1Sto64: case Iop_1Uto64: UNARY(Ity_I1, Ity_I64);
-      case Iop_32to1:  UNARY(Ity_I32, Ity_I1);
-      case Iop_64to1:  UNARY(Ity_I64, Ity_I1);
-
-      case Iop_8Uto32: case Iop_8Sto32:
-         UNARY(Ity_I8, Ity_I32);
-
-      case Iop_8Uto16: case Iop_8Sto16:
-         UNARY(Ity_I8, Ity_I16);
-
-      case Iop_16Uto32: case Iop_16Sto32: 
-         UNARY(Ity_I16, Ity_I32);
-
-      case Iop_32Sto64: case Iop_32Uto64:
-         UNARY(Ity_I32, Ity_I64);
-
-      case Iop_8Uto64: case Iop_8Sto64:
-         UNARY(Ity_I8, Ity_I64);
-
-      case Iop_16Uto64: case Iop_16Sto64:
-         UNARY(Ity_I16, Ity_I64);
-      case Iop_64to16:
-         UNARY(Ity_I64, Ity_I16);
-
-      case Iop_32to8: UNARY(Ity_I32, Ity_I8);
-      case Iop_64to8: UNARY(Ity_I64, Ity_I8);
-
-      case Iop_AddF64:    case Iop_SubF64: 
-      case Iop_MulF64:    case Iop_DivF64:
-      case Iop_AddF64r32: case Iop_SubF64r32: 
-      case Iop_MulF64r32: case Iop_DivF64r32:
-         TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_F64);
-
-      case Iop_AddF32: case Iop_SubF32:
-      case Iop_MulF32: case Iop_DivF32:
-         TERNARY(ity_RMode,Ity_F32,Ity_F32, Ity_F32);
-
-      case Iop_NegF64: case Iop_AbsF64: 
-         UNARY(Ity_F64, Ity_F64);
-
-      case Iop_NegF32: case Iop_AbsF32:
-         UNARY(Ity_F32, Ity_F32);
-
-      case Iop_SqrtF64:
-         BINARY(ity_RMode,Ity_F64, Ity_F64);
-
-      case Iop_SqrtF32:
-      case Iop_RoundF32toInt:
-         BINARY(ity_RMode,Ity_F32, Ity_F32);
-
-      case Iop_CmpF32:
-         BINARY(Ity_F32,Ity_F32, Ity_I32);
-
-      case Iop_CmpF64:
-         BINARY(Ity_F64,Ity_F64, Ity_I32);
-
-      case Iop_CmpF128:
-         BINARY(Ity_F128,Ity_F128, Ity_I32);
-
-      case Iop_F64toI16S: BINARY(ity_RMode,Ity_F64, Ity_I16);
-      case Iop_F64toI32S: BINARY(ity_RMode,Ity_F64, Ity_I32);
-      case Iop_F64toI64S: case Iop_F64toI64U:
-         BINARY(ity_RMode,Ity_F64, Ity_I64);
-
-      case Iop_F64toI32U: BINARY(ity_RMode,Ity_F64, Ity_I32);
-
-      case Iop_I32StoF64: UNARY(Ity_I32, Ity_F64);
-      case Iop_I64StoF64: BINARY(ity_RMode,Ity_I64, Ity_F64);
-      case Iop_I64UtoF64: BINARY(ity_RMode,Ity_I64, Ity_F64);
-      case Iop_I64UtoF32: BINARY(ity_RMode,Ity_I64, Ity_F32);
-
-      case Iop_I32UtoF64: UNARY(Ity_I32, Ity_F64);
-
-      case Iop_F32toI32S: BINARY(ity_RMode,Ity_F32, Ity_I32);
-      case Iop_F32toI64S: BINARY(ity_RMode,Ity_F32, Ity_I64);
-      case Iop_F32toI32U: BINARY(ity_RMode,Ity_F32, Ity_I32);
-      case Iop_F32toI64U: BINARY(ity_RMode,Ity_F32, Ity_I64);
- 
-      case Iop_I32UtoF32: BINARY(ity_RMode,Ity_I32, Ity_F32);
-      case Iop_I32StoF32: BINARY(ity_RMode,Ity_I32, Ity_F32);
-      case Iop_I64StoF32: BINARY(ity_RMode,Ity_I64, Ity_F32);
-
-      case Iop_F32toF64: UNARY(Ity_F32, Ity_F64);
-      case Iop_F64toF32: BINARY(ity_RMode,Ity_F64, Ity_F32);
-
-      case Iop_ReinterpI64asF64: UNARY(Ity_I64, Ity_F64);
-      case Iop_ReinterpF64asI64: UNARY(Ity_F64, Ity_I64);
-      case Iop_ReinterpI32asF32: UNARY(Ity_I32, Ity_F32);
-      case Iop_ReinterpF32asI32: UNARY(Ity_F32, Ity_I32);
-
-      case Iop_AtanF64: case Iop_Yl2xF64:  case Iop_Yl2xp1F64: 
-      case Iop_ScaleF64: case Iop_PRemF64: case Iop_PRem1F64:
-         TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_F64);
-
-      case Iop_PRemC3210F64: case Iop_PRem1C3210F64:
-         TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_I32);
-
-      case Iop_SinF64: case Iop_CosF64: case Iop_TanF64: 
-      case Iop_2xm1F64:
-      case Iop_RoundF64toInt: BINARY(ity_RMode,Ity_F64, Ity_F64);
-
-      case Iop_MAddF64: case Iop_MSubF64:
-      case Iop_MAddF64r32: case Iop_MSubF64r32:
-         QUATERNARY(ity_RMode,Ity_F64,Ity_F64,Ity_F64, Ity_F64);
-
-      case Iop_RSqrtEst5GoodF64:
-      case Iop_RoundF64toF64_NEAREST: case Iop_RoundF64toF64_NegINF:
-      case Iop_RoundF64toF64_PosINF: case Iop_RoundF64toF64_ZERO:
-         UNARY(Ity_F64, Ity_F64);
-      case Iop_RoundF64toF32:
-         BINARY(ity_RMode,Ity_F64, Ity_F64);
-      case Iop_TruncF64asF32:
-         UNARY(Ity_F64, Ity_F32);
-
-      case Iop_I32UtoFx4:
-      case Iop_I32StoFx4:
-      case Iop_QFtoI32Ux4_RZ:
-      case Iop_QFtoI32Sx4_RZ:
-      case Iop_FtoI32Ux4_RZ:
-      case Iop_FtoI32Sx4_RZ:
-      case Iop_RoundF32x4_RM:
-      case Iop_RoundF32x4_RP:
-      case Iop_RoundF32x4_RN:
-      case Iop_RoundF32x4_RZ:
-      case Iop_Abs32Fx4:
-      case Iop_RSqrtEst32Fx4:
-      case Iop_RSqrtEst32Ux4:
-         UNARY(Ity_V128, Ity_V128);
-
-      case Iop_64HLtoV128:
-         BINARY(Ity_I64,Ity_I64, Ity_V128);
-
-      case Iop_V128to64: case Iop_V128HIto64:
-      case Iop_NarrowUn16to8x8:
-      case Iop_NarrowUn32to16x4:
-      case Iop_NarrowUn64to32x2:
-      case Iop_QNarrowUn16Uto8Ux8:
-      case Iop_QNarrowUn32Uto16Ux4:
-      case Iop_QNarrowUn64Uto32Ux2:
-      case Iop_QNarrowUn16Sto8Sx8:
-      case Iop_QNarrowUn32Sto16Sx4:
-      case Iop_QNarrowUn64Sto32Sx2:
-      case Iop_QNarrowUn16Sto8Ux8:
-      case Iop_QNarrowUn32Sto16Ux4:
-      case Iop_QNarrowUn64Sto32Ux2:
-      case Iop_F32toF16x4:
-         UNARY(Ity_V128, Ity_I64);
-
-      case Iop_Widen8Uto16x8:
-      case Iop_Widen16Uto32x4:
-      case Iop_Widen32Uto64x2:
-      case Iop_Widen8Sto16x8:
-      case Iop_Widen16Sto32x4:
-      case Iop_Widen32Sto64x2:
-      case Iop_F16toF32x4:
-         UNARY(Ity_I64, Ity_V128);
-
-      case Iop_V128to32:    UNARY(Ity_V128, Ity_I32);
-      case Iop_32UtoV128:   UNARY(Ity_I32, Ity_V128);
-      case Iop_64UtoV128:   UNARY(Ity_I64, Ity_V128);
-      case Iop_SetV128lo32: BINARY(Ity_V128,Ity_I32, Ity_V128);
-      case Iop_SetV128lo64: BINARY(Ity_V128,Ity_I64, Ity_V128);
-
-      case Iop_Dup8x16: UNARY(Ity_I8, Ity_V128);
-      case Iop_Dup16x8: UNARY(Ity_I16, Ity_V128);
-      case Iop_Dup32x4: UNARY(Ity_I32, Ity_V128);
-      case Iop_Dup8x8:  UNARY(Ity_I8, Ity_I64);
-      case Iop_Dup16x4: UNARY(Ity_I16, Ity_I64);
-      case Iop_Dup32x2: UNARY(Ity_I32, Ity_I64);
-
-      case Iop_CmpEQ32Fx4: case Iop_CmpLT32Fx4:
-      case Iop_CmpEQ64Fx2: case Iop_CmpLT64Fx2:
-      case Iop_CmpLE32Fx4: case Iop_CmpUN32Fx4:
-      case Iop_CmpLE64Fx2: case Iop_CmpUN64Fx2:
-      case Iop_CmpGT32Fx4: case Iop_CmpGE32Fx4:
-      case Iop_CmpEQ32F0x4: case Iop_CmpLT32F0x4:
-      case Iop_CmpEQ64F0x2: case Iop_CmpLT64F0x2:
-      case Iop_CmpLE32F0x4: case Iop_CmpUN32F0x4:
-      case Iop_CmpLE64F0x2: case Iop_CmpUN64F0x2:
-      case Iop_Add32Fx4: case Iop_Add32F0x4:
-      case Iop_Add64Fx2: case Iop_Add64F0x2:
-      case Iop_Div32Fx4: case Iop_Div32F0x4:
-      case Iop_Div64Fx2: case Iop_Div64F0x2:
-      case Iop_Max32Fx4: case Iop_Max32F0x4:
-      case Iop_PwMax32Fx4: case Iop_PwMin32Fx4:
-      case Iop_Max64Fx2: case Iop_Max64F0x2:
-      case Iop_Min32Fx4: case Iop_Min32F0x4:
-      case Iop_Min64Fx2: case Iop_Min64F0x2:
-      case Iop_Mul32Fx4: case Iop_Mul32F0x4:
-      case Iop_Mul64Fx2: case Iop_Mul64F0x2:
-      case Iop_Sub32Fx4: case Iop_Sub32F0x4:
-      case Iop_Sub64Fx2: case Iop_Sub64F0x2:
-      case Iop_AndV128: case Iop_OrV128: case Iop_XorV128:
-      case Iop_Add8x16:   case Iop_Add16x8:   
-      case Iop_Add32x4:   case Iop_Add64x2:
-      case Iop_QAdd8Ux16: case Iop_QAdd16Ux8:
-      case Iop_QAdd32Ux4: //case Iop_QAdd64Ux2:
-      case Iop_QAdd8Sx16: case Iop_QAdd16Sx8:
-      case Iop_QAdd32Sx4: case Iop_QAdd64Sx2:
-      case Iop_PwAdd8x16: case Iop_PwAdd16x8: case Iop_PwAdd32x4:
-      case Iop_Sub8x16:   case Iop_Sub16x8:
-      case Iop_Sub32x4:   case Iop_Sub64x2:
-      case Iop_QSub8Ux16: case Iop_QSub16Ux8:
-      case Iop_QSub32Ux4: //case Iop_QSub64Ux2:
-      case Iop_QSub8Sx16: case Iop_QSub16Sx8:
-      case Iop_QSub32Sx4: case Iop_QSub64Sx2:
-      case Iop_Mul8x16: case Iop_Mul16x8: case Iop_Mul32x4:
-      case Iop_PolynomialMul8x16:
-      case Iop_MulHi16Ux8: case Iop_MulHi32Ux4: 
-      case Iop_MulHi16Sx8: case Iop_MulHi32Sx4: 
-      case Iop_QDMulHi16Sx8: case Iop_QDMulHi32Sx4:
-      case Iop_QRDMulHi16Sx8: case Iop_QRDMulHi32Sx4:
-      case Iop_MullEven8Ux16: case Iop_MullEven16Ux8:
-      case Iop_MullEven8Sx16: case Iop_MullEven16Sx8:
-      case Iop_Avg8Ux16: case Iop_Avg16Ux8: case Iop_Avg32Ux4:
-      case Iop_Avg8Sx16: case Iop_Avg16Sx8: case Iop_Avg32Sx4:
-      case Iop_Max8Sx16: case Iop_Max16Sx8: case Iop_Max32Sx4:
-      case Iop_Max8Ux16: case Iop_Max16Ux8: case Iop_Max32Ux4:
-      case Iop_Min8Sx16: case Iop_Min16Sx8: case Iop_Min32Sx4:
-      case Iop_Min8Ux16: case Iop_Min16Ux8: case Iop_Min32Ux4:
-      case Iop_CmpEQ8x16:  case Iop_CmpEQ16x8:  case Iop_CmpEQ32x4:
-      case Iop_CmpEQ64x2:
-      case Iop_CmpGT8Sx16: case Iop_CmpGT16Sx8: case Iop_CmpGT32Sx4:
-      case Iop_CmpGT64Sx2:
-      case Iop_CmpGT8Ux16: case Iop_CmpGT16Ux8: case Iop_CmpGT32Ux4:
-      case Iop_Shl8x16: case Iop_Shl16x8: case Iop_Shl32x4: case Iop_Shl64x2:
-      case Iop_QShl8x16: case Iop_QShl16x8:
-      case Iop_QShl32x4: case Iop_QShl64x2:
-      case Iop_QSal8x16: case Iop_QSal16x8:
-      case Iop_QSal32x4: case Iop_QSal64x2:
-      case Iop_Shr8x16: case Iop_Shr16x8: case Iop_Shr32x4: case Iop_Shr64x2:
-      case Iop_Sar8x16: case Iop_Sar16x8: case Iop_Sar32x4: case Iop_Sar64x2:
-      case Iop_Sal8x16: case Iop_Sal16x8: case Iop_Sal32x4: case Iop_Sal64x2:
-      case Iop_Rol8x16: case Iop_Rol16x8: case Iop_Rol32x4:
-      case Iop_QNarrowBin16Sto8Ux16: case Iop_QNarrowBin32Sto16Ux8:
-      case Iop_QNarrowBin16Sto8Sx16: case Iop_QNarrowBin32Sto16Sx8:
-      case Iop_QNarrowBin16Uto8Ux16: case Iop_QNarrowBin32Uto16Ux8:
-      case Iop_NarrowBin16to8x16:   case Iop_NarrowBin32to16x8:
-      case Iop_InterleaveHI8x16: case Iop_InterleaveHI16x8:
-      case Iop_InterleaveHI32x4: case Iop_InterleaveHI64x2:
-      case Iop_InterleaveLO8x16: case Iop_InterleaveLO16x8:
-      case Iop_InterleaveLO32x4: case Iop_InterleaveLO64x2:
-      case Iop_CatOddLanes8x16: case Iop_CatEvenLanes8x16:
-      case Iop_CatOddLanes16x8: case Iop_CatEvenLanes16x8:
-      case Iop_CatOddLanes32x4: case Iop_CatEvenLanes32x4:
-      case Iop_InterleaveOddLanes8x16: case Iop_InterleaveEvenLanes8x16:
-      case Iop_InterleaveOddLanes16x8: case Iop_InterleaveEvenLanes16x8:
-      case Iop_InterleaveOddLanes32x4: case Iop_InterleaveEvenLanes32x4:
-      case Iop_Perm8x16: case Iop_Perm32x4:
-      case Iop_RecipStep32Fx4:
-      case Iop_RSqrtStep32Fx4:
-         BINARY(Ity_V128,Ity_V128, Ity_V128);
-
-      case Iop_PolynomialMull8x8:
-      case Iop_Mull8Ux8: case Iop_Mull8Sx8:
-      case Iop_Mull16Ux4: case Iop_Mull16Sx4:
-      case Iop_Mull32Ux2: case Iop_Mull32Sx2:
-         BINARY(Ity_I64, Ity_I64, Ity_V128);
-
-      case Iop_NotV128:
-      case Iop_RecipEst32Fx4: case Iop_RecipEst32F0x4:
-      case Iop_RecipEst32Ux4:
-      case Iop_RSqrtEst32F0x4:
-      case Iop_Sqrt32Fx4:  case Iop_Sqrt32F0x4:
-      case Iop_Sqrt64Fx2:  case Iop_Sqrt64F0x2:
-      case Iop_CmpNEZ8x16: case Iop_CmpNEZ16x8:
-      case Iop_CmpNEZ32x4: case Iop_CmpNEZ64x2:
-      case Iop_Cnt8x16:
-      case Iop_Clz8x16: case Iop_Clz16x8: case Iop_Clz32x4:
-      case Iop_Cls8x16: case Iop_Cls16x8: case Iop_Cls32x4:
-      case Iop_PwAddL8Ux16: case Iop_PwAddL16Ux8: case Iop_PwAddL32Ux4:
-      case Iop_PwAddL8Sx16: case Iop_PwAddL16Sx8: case Iop_PwAddL32Sx4:
-      case Iop_Reverse8sIn64_x2: case Iop_Reverse16sIn64_x2:
-      case Iop_Reverse32sIn64_x2:
-      case Iop_Reverse8sIn32_x4: case Iop_Reverse16sIn32_x4:
-      case Iop_Reverse8sIn16_x8:
-      case Iop_Neg32Fx4:
-      case Iop_Abs8x16: case Iop_Abs16x8: case Iop_Abs32x4:
-         UNARY(Ity_V128, Ity_V128);
-
-      case Iop_ShlV128: case Iop_ShrV128:
-      case Iop_ShlN8x16: case Iop_ShlN16x8: 
-      case Iop_ShlN32x4: case Iop_ShlN64x2:
-      case Iop_ShrN8x16: case Iop_ShrN16x8: 
-      case Iop_ShrN32x4: case Iop_ShrN64x2:
-      case Iop_SarN8x16: case Iop_SarN16x8:
-      case Iop_SarN32x4: case Iop_SarN64x2:
-      case Iop_QShlNsatUU8x16: case Iop_QShlNsatUU16x8:
-      case Iop_QShlNsatUU32x4: case Iop_QShlNsatUU64x2:
-      case Iop_QShlNsatSU8x16: case Iop_QShlNsatSU16x8:
-      case Iop_QShlNsatSU32x4: case Iop_QShlNsatSU64x2:
-      case Iop_QShlNsatSS8x16: case Iop_QShlNsatSS16x8:
-      case Iop_QShlNsatSS32x4: case Iop_QShlNsatSS64x2:
-         BINARY(Ity_V128,Ity_I8, Ity_V128);
-
-      case Iop_F32ToFixed32Ux4_RZ:
-      case Iop_F32ToFixed32Sx4_RZ:
-      case Iop_Fixed32UToF32x4_RN:
-      case Iop_Fixed32SToF32x4_RN:
-         BINARY(Ity_V128, Ity_I8, Ity_V128);
-
-      case Iop_F32ToFixed32Ux2_RZ:
-      case Iop_F32ToFixed32Sx2_RZ:
-      case Iop_Fixed32UToF32x2_RN:
-      case Iop_Fixed32SToF32x2_RN:
-         BINARY(Ity_I64, Ity_I8, Ity_I64);
-
-      case Iop_GetElem8x16:
-         BINARY(Ity_V128, Ity_I8, Ity_I8);
-      case Iop_GetElem16x8:
-         BINARY(Ity_V128, Ity_I8, Ity_I16);
-      case Iop_GetElem32x4:
-         BINARY(Ity_V128, Ity_I8, Ity_I32);
-      case Iop_GetElem64x2:
-         BINARY(Ity_V128, Ity_I8, Ity_I64);
-      case Iop_GetElem8x8:
-         BINARY(Ity_I64, Ity_I8, Ity_I8);
-      case Iop_GetElem16x4:
-         BINARY(Ity_I64, Ity_I8, Ity_I16);
-      case Iop_GetElem32x2:
-         BINARY(Ity_I64, Ity_I8, Ity_I32);
-      case Iop_SetElem8x8:
-         TERNARY(Ity_I64, Ity_I8, Ity_I8, Ity_I64);
-      case Iop_SetElem16x4:
-         TERNARY(Ity_I64, Ity_I8, Ity_I16, Ity_I64);
-      case Iop_SetElem32x2:
-         TERNARY(Ity_I64, Ity_I8, Ity_I32, Ity_I64);
-
-      case Iop_Slice64:
-         TERNARY(Ity_I64, Ity_I64, Ity_I8, Ity_I64);
-      case Iop_SliceV128:
-         TERNARY(Ity_V128, Ity_V128, Ity_I8, Ity_V128);
-
-      case Iop_QDMull16Sx4: case Iop_QDMull32Sx2:
-         BINARY(Ity_I64, Ity_I64, Ity_V128);
-
-         /* s390 specific */
-      case Iop_MAddF32:
-      case Iop_MSubF32:
-         QUATERNARY(ity_RMode,Ity_F32,Ity_F32,Ity_F32, Ity_F32);
-
-      case Iop_F64HLtoF128:
-        BINARY(Ity_F64,Ity_F64, Ity_F128);
-
-      case Iop_F128HItoF64:
-      case Iop_F128LOtoF64:
-        UNARY(Ity_F128, Ity_F64);
-
-      case Iop_AddF128:
-      case Iop_SubF128:
-      case Iop_MulF128:
-      case Iop_DivF128:
-         TERNARY(ity_RMode,Ity_F128,Ity_F128, Ity_F128);
-
-      case Iop_NegF128:
-      case Iop_AbsF128:
-         UNARY(Ity_F128, Ity_F128);
-
-      case Iop_SqrtF128:
-         BINARY(ity_RMode,Ity_F128, Ity_F128);
-
-      case Iop_I32StoF128: UNARY(Ity_I32, Ity_F128);
-      case Iop_I64StoF128: UNARY(Ity_I64, Ity_F128);
-
-      case Iop_I32UtoF128: UNARY(Ity_I32, Ity_F128);
-      case Iop_I64UtoF128: UNARY(Ity_I64, Ity_F128);
-
-      case Iop_F128toI32S: BINARY(ity_RMode,Ity_F128, Ity_I32);
-      case Iop_F128toI64S: BINARY(ity_RMode,Ity_F128, Ity_I64);
-
-      case Iop_F128toI32U: BINARY(ity_RMode,Ity_F128, Ity_I32);
-      case Iop_F128toI64U: BINARY(ity_RMode,Ity_F128, Ity_I64);
-
-      case Iop_F32toF128: UNARY(Ity_F32, Ity_F128);
-      case Iop_F64toF128: UNARY(Ity_F64, Ity_F128);
-
-      case Iop_F128toF32: BINARY(ity_RMode,Ity_F128, Ity_F32);
-      case Iop_F128toF64: BINARY(ity_RMode,Ity_F128, Ity_F64);
-
-      case Iop_D32toD64:
-         UNARY(Ity_D32, Ity_D64);
-
-      case Iop_ExtractExpD64:
-         UNARY(Ity_D64, Ity_I64);
-
-      case Iop_ExtractSigD64:
-         UNARY(Ity_D64, Ity_I64);
-
-      case Iop_InsertExpD64:
-         BINARY(Ity_I64,Ity_D64, Ity_D64);
-
-      case Iop_ExtractExpD128:
-         UNARY(Ity_D128, Ity_I64);
-
-      case Iop_ExtractSigD128:
-         UNARY(Ity_D128, Ity_I64);
-
-      case Iop_InsertExpD128:
-         BINARY(Ity_I64,Ity_D128, Ity_D128);
-
-      case Iop_D64toD128:
-         UNARY(Ity_D64, Ity_D128);
-
-      case Iop_ReinterpD64asI64:
-	UNARY(Ity_D64, Ity_I64);
-
-      case Iop_ReinterpI64asD64:
-         UNARY(Ity_I64, Ity_D64);
-
-      case Iop_RoundD64toInt:
-         BINARY(ity_RMode,Ity_D64, Ity_D64);
-
-      case Iop_RoundD128toInt:
-         BINARY(ity_RMode,Ity_D128, Ity_D128);
-
-      case Iop_I32StoD128:
-      case Iop_I32UtoD128:
-         UNARY(Ity_I32, Ity_D128);
-
-      case Iop_I64StoD128:
-         UNARY(Ity_I64, Ity_D128);
-
-      case Iop_I64UtoD128:
-         UNARY(Ity_I64, Ity_D128);
-
-      case Iop_F32toD32:
-         BINARY(ity_RMode, Ity_F32, Ity_D32);
-
-      case Iop_F32toD64:
-         BINARY(ity_RMode, Ity_F32, Ity_D64);
-
-      case Iop_F32toD128:
-         BINARY(ity_RMode, Ity_F32, Ity_D128);
-
-      case Iop_F64toD32:
-         BINARY(ity_RMode, Ity_F64, Ity_D32);
-
-      case Iop_F64toD64:
-         BINARY(ity_RMode, Ity_F64, Ity_D64);
-
-      case Iop_F64toD128:
-         BINARY(ity_RMode, Ity_F64, Ity_D128);
-
-      case Iop_F128toD32:
-         BINARY(ity_RMode, Ity_F128, Ity_D32);
-
-      case Iop_F128toD64:
-         BINARY(ity_RMode, Ity_F128, Ity_D64);
-
-      case Iop_F128toD128:
-         BINARY(ity_RMode, Ity_F128, Ity_D128);
-
-      case Iop_D32toF32:
-         BINARY(ity_RMode, Ity_D32, Ity_F32);
-
-      case Iop_D32toF64:
-         BINARY(ity_RMode, Ity_D32, Ity_F64);
-
-      case Iop_D32toF128:
-         BINARY(ity_RMode, Ity_D32, Ity_F128);
-
-      case Iop_D64toF32:
-         BINARY(ity_RMode, Ity_D64, Ity_F32);
-
-      case Iop_D64toF64:
-         BINARY(ity_RMode, Ity_D64, Ity_F64);
-
-      case Iop_D64toF128:
-         BINARY(ity_RMode, Ity_D64, Ity_F128);
-
-      case Iop_D128toF32:
-         BINARY(ity_RMode, Ity_D128, Ity_F32);
-
-      case Iop_D128toF64:
-         BINARY(ity_RMode, Ity_D128, Ity_F64);
-
-      case Iop_D128toF128:
-         BINARY(ity_RMode, Ity_D128, Ity_F128);
-
-      case Iop_DPBtoBCD:
-      case Iop_BCDtoDPB:
-         UNARY(Ity_I64, Ity_I64);
-
-      case Iop_D128HItoD64:
-      case Iop_D128LOtoD64:
-         UNARY(Ity_D128, Ity_D64);
-
-      case Iop_D128toI32S:
-      case Iop_D128toI32U:
-         BINARY(ity_RMode, Ity_D128, Ity_I32);
-
-      case Iop_D128toI64S:
-         BINARY(ity_RMode, Ity_D128, Ity_I64);
-
-      case Iop_D128toI64U:
-         BINARY(ity_RMode, Ity_D128, Ity_I64);
-
-      case Iop_D64HLtoD128:
-         BINARY(Ity_D64, Ity_D64, Ity_D128);
-
-      case Iop_ShlD64:
-      case Iop_ShrD64:
-         BINARY(Ity_D64, Ity_I8, Ity_D64 );
-
-      case Iop_D64toD32:
-         BINARY(ity_RMode, Ity_D64, Ity_D32);
-
-      case Iop_D64toI32S:
-      case Iop_D64toI32U:
-         BINARY(ity_RMode, Ity_D64, Ity_I32);
-
-      case Iop_D64toI64S:
-      case Iop_D64toI64U:
-         BINARY(ity_RMode, Ity_D64, Ity_I64);
-
-      case Iop_I32StoD64:
-      case Iop_I32UtoD64:
-         UNARY(Ity_I32, Ity_D64);
-
-      case Iop_I64StoD64:
-      case Iop_I64UtoD64:
-         BINARY(ity_RMode, Ity_I64, Ity_D64);
-
-      case Iop_CmpD64:
-      case Iop_CmpExpD64:
-         BINARY(Ity_D64,Ity_D64, Ity_I32);
-
-      case Iop_CmpD128:
-      case Iop_CmpExpD128:
-         BINARY(Ity_D128,Ity_D128, Ity_I32);
-
-      case Iop_QuantizeD64:
-         TERNARY(ity_RMode,Ity_D64,Ity_D64, Ity_D64);
-
-      case Iop_SignificanceRoundD64:
-         TERNARY(ity_RMode,Ity_I8,Ity_D64, Ity_D64);
-
-      case Iop_QuantizeD128:
-         TERNARY(ity_RMode,Ity_D128,Ity_D128, Ity_D128);
-
-      case Iop_SignificanceRoundD128:
-         TERNARY(ity_RMode,Ity_I8,Ity_D128, Ity_D128);
-
-      case Iop_ShlD128:
-      case Iop_ShrD128:
-         BINARY(Ity_D128, Ity_I8, Ity_D128 );
-
-      case Iop_AddD64:
-      case Iop_SubD64:
-      case Iop_MulD64:
-      case Iop_DivD64:
-         TERNARY( ity_RMode, Ity_D64, Ity_D64, Ity_D64 );
-
-      case Iop_D128toD64:
-         BINARY( ity_RMode, Ity_D128, Ity_D64 );
-
-      case Iop_AddD128:
-      case Iop_SubD128:
-      case Iop_MulD128:
-      case Iop_DivD128:
-         TERNARY(ity_RMode,Ity_D128,Ity_D128, Ity_D128);
-
-      case Iop_V256to64_0: case Iop_V256to64_1:
-      case Iop_V256to64_2: case Iop_V256to64_3:
-         UNARY(Ity_V256, Ity_I64);
-
-      case Iop_64x4toV256:
-         QUATERNARY(Ity_I64, Ity_I64, Ity_I64, Ity_I64, Ity_V256);
-
-      case Iop_Add64Fx4: case Iop_Sub64Fx4:
-      case Iop_Mul64Fx4: case Iop_Div64Fx4:
-      case Iop_Add32Fx8: case Iop_Sub32Fx8:
-      case Iop_Mul32Fx8: case Iop_Div32Fx8:
-      case Iop_AndV256:  case Iop_OrV256:
-      case Iop_XorV256:
-      case Iop_Max32Fx8: case Iop_Min32Fx8:
-      case Iop_Max64Fx4: case Iop_Min64Fx4:
-         BINARY(Ity_V256,Ity_V256, Ity_V256);
-
-      case Iop_V256toV128_1: case Iop_V256toV128_0:
-         UNARY(Ity_V256, Ity_V128);
-
-      case Iop_V128HLtoV256:
-         BINARY(Ity_V128,Ity_V128, Ity_V256);
-
-      case Iop_NotV256:
-      case Iop_RSqrtEst32Fx8:
-      case Iop_Sqrt32Fx8:
-      case Iop_Sqrt64Fx4:
-      case Iop_RecipEst32Fx8:
-      case Iop_CmpNEZ64x4: case Iop_CmpNEZ32x8:
-         UNARY(Ity_V256, Ity_V256);
-
-      default:
-         panic(__func__);
-   }
-#  undef UNARY
-#  undef BINARY
-#  undef TERNARY
-#  undef COMPARISON
-#  undef UNARY_COMPARISON
+   return typeOfPrimop(op, t_dst, t_arg1, t_arg2, t_arg3, t_arg4);
 }
diff --git a/memcheck/tests/vbit-test/valgrind.c b/memcheck/tests/vbit-test/valgrind.c
index 5972ffb..f9b052a 100644
--- a/memcheck/tests/vbit-test/valgrind.c
+++ b/memcheck/tests/vbit-test/valgrind.c
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #include <assert.h>
 #include "memcheck.h"  // VALGRIND_SET_VBITS
 #include "vtest.h"     
diff --git a/memcheck/tests/vbit-test/vbits.c b/memcheck/tests/vbit-test/vbits.c
index 95c1adf..d8e5df6 100644
--- a/memcheck/tests/vbit-test/vbits.c
+++ b/memcheck/tests/vbit-test/vbits.c
@@ -1,11 +1,43 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #include <stdio.h>   // fprintf
 #include <assert.h>  // assert
 #if defined(__APPLE__)
 #include <machine/endian.h>
 #define __BYTE_ORDER    BYTE_ORDER
 #define __LITTLE_ENDIAN LITTLE_ENDIAN
+#elif defined(__sun)
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN    4321
+#  if defined(_LITTLE_ENDIAN)
+#  define __BYTE_ORDER    __LITTLE_ENDIAN
+#  else
+#  define __BYTE_ORDER    __BIG_ENDIAN
+#  endif
 #else
 #include <endian.h>
 #endif
diff --git a/memcheck/tests/vbit-test/vbits.h b/memcheck/tests/vbit-test/vbits.h
index 0c22f96..eda2e94 100644
--- a/memcheck/tests/vbit-test/vbits.h
+++ b/memcheck/tests/vbit-test/vbits.h
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #ifndef VBITS_H
 #define VBITS_H
 
diff --git a/memcheck/tests/vbit-test/vtest.h b/memcheck/tests/vbit-test/vtest.h
index 62ba126..a1f445a 100644
--- a/memcheck/tests/vbit-test/vtest.h
+++ b/memcheck/tests/vbit-test/vtest.h
@@ -1,5 +1,29 @@
 /* -*- mode: C; c-basic-offset: 3; -*- */
 
+/*
+   This file is part of MemCheck, a heavyweight Valgrind tool for
+   detecting memory errors.
+
+   Copyright (C) 2012-2015  Florian Krohm
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
 #ifndef VTEST_H
 #define VTEST_H
 
diff --git a/memcheck/tests/vcpu_fnfns.stdout.exp-solaris b/memcheck/tests/vcpu_fnfns.stdout.exp-solaris
new file mode 100644
index 0000000..f94bfc6
--- /dev/null
+++ b/memcheck/tests/vcpu_fnfns.stdout.exp-solaris
@@ -0,0 +1,786 @@
+floorD(-2.0000000000000e+00) = -2.0000000000000e+00
+floorD(-1.9000000001000e+00) = -2.0000000000000e+00
+floorD(-1.8000000002000e+00) = -2.0000000000000e+00
+floorD(-1.7000000003000e+00) = -2.0000000000000e+00
+floorD(-1.6000000004000e+00) = -2.0000000000000e+00
+floorD(-1.5000000005000e+00) = -2.0000000000000e+00
+floorD(-1.4000000006000e+00) = -2.0000000000000e+00
+floorD(-1.3000000007000e+00) = -2.0000000000000e+00
+floorD(-1.2000000008000e+00) = -2.0000000000000e+00
+floorD(-1.1000000009000e+00) = -2.0000000000000e+00
+floorD(-1.0000000010000e+00) = -2.0000000000000e+00
+floorD(-9.0000000110000e-01) = -1.0000000000000e+00
+floorD(-8.0000000120000e-01) = -1.0000000000000e+00
+floorD(-7.0000000130000e-01) = -1.0000000000000e+00
+floorD(-6.0000000140000e-01) = -1.0000000000000e+00
+floorD(-5.0000000150000e-01) = -1.0000000000000e+00
+floorD(-4.0000000160000e-01) = -1.0000000000000e+00
+floorD(-3.0000000170000e-01) = -1.0000000000000e+00
+floorD(-2.0000000180000e-01) = -1.0000000000000e+00
+floorD(-1.0000000190000e-01) = -1.0000000000000e+00
+floorD(-1.9999992495467e-09) = -1.0000000000000e+00
+floorD(+9.9999997900001e-02) = +0.0000000000000e+00
+floorD(+1.9999999780000e-01) = +0.0000000000000e+00
+floorD(+2.9999999770000e-01) = +0.0000000000000e+00
+floorD(+3.9999999760000e-01) = +0.0000000000000e+00
+floorD(+4.9999999750000e-01) = +0.0000000000000e+00
+floorD(+5.9999999740000e-01) = +0.0000000000000e+00
+floorD(+6.9999999730000e-01) = +0.0000000000000e+00
+floorD(+7.9999999720000e-01) = +0.0000000000000e+00
+floorD(+8.9999999710000e-01) = +0.0000000000000e+00
+floorD(+9.9999999700000e-01) = +0.0000000000000e+00
+floorD(+1.0999999969000e+00) = +1.0000000000000e+00
+floorD(+1.1999999968000e+00) = +1.0000000000000e+00
+floorD(+1.2999999967000e+00) = +1.0000000000000e+00
+floorD(+1.3999999966000e+00) = +1.0000000000000e+00
+floorD(+1.4999999965000e+00) = +1.0000000000000e+00
+floorD(+1.5999999964000e+00) = +1.0000000000000e+00
+floorD(+1.6999999963000e+00) = +1.0000000000000e+00
+floorD(+1.7999999962000e+00) = +1.0000000000000e+00
+floorD(+1.8999999961000e+00) = +1.0000000000000e+00
+floorD(+1.9999999960000e+00) = +1.0000000000000e+00
+floorF(         -2.0000e+00) =          -2.0000e+00
+floorF(         -1.9001e+00) =          -2.0000e+00
+floorF(         -1.8002e+00) =          -2.0000e+00
+floorF(         -1.7003e+00) =          -2.0000e+00
+floorF(         -1.6004e+00) =          -2.0000e+00
+floorF(         -1.5005e+00) =          -2.0000e+00
+floorF(         -1.4006e+00) =          -2.0000e+00
+floorF(         -1.3007e+00) =          -2.0000e+00
+floorF(         -1.2008e+00) =          -2.0000e+00
+floorF(         -1.1009e+00) =          -2.0000e+00
+floorF(         -1.0010e+00) =          -2.0000e+00
+floorF(         -9.0110e-01) =          -1.0000e+00
+floorF(         -8.0120e-01) =          -1.0000e+00
+floorF(         -7.0130e-01) =          -1.0000e+00
+floorF(         -6.0140e-01) =          -1.0000e+00
+floorF(         -5.0150e-01) =          -1.0000e+00
+floorF(         -4.0160e-01) =          -1.0000e+00
+floorF(         -3.0170e-01) =          -1.0000e+00
+floorF(         -2.0180e-01) =          -1.0000e+00
+floorF(         -1.0190e-01) =          -1.0000e+00
+floorF(         -1.9999e-03) =          -1.0000e+00
+floorF(         +9.7900e-02) =          +0.0000e+00
+floorF(         +1.9780e-01) =          +0.0000e+00
+floorF(         +2.9770e-01) =          +0.0000e+00
+floorF(         +3.9760e-01) =          +0.0000e+00
+floorF(         +4.9750e-01) =          +0.0000e+00
+floorF(         +5.9740e-01) =          +0.0000e+00
+floorF(         +6.9730e-01) =          +0.0000e+00
+floorF(         +7.9720e-01) =          +0.0000e+00
+floorF(         +8.9710e-01) =          +0.0000e+00
+floorF(         +9.9700e-01) =          +0.0000e+00
+floorF(         +1.0969e+00) =          +1.0000e+00
+floorF(         +1.1968e+00) =          +1.0000e+00
+floorF(         +1.2967e+00) =          +1.0000e+00
+floorF(         +1.3966e+00) =          +1.0000e+00
+floorF(         +1.4965e+00) =          +1.0000e+00
+floorF(         +1.5964e+00) =          +1.0000e+00
+floorF(         +1.6963e+00) =          +1.0000e+00
+floorF(         +1.7962e+00) =          +1.0000e+00
+floorF(         +1.8961e+00) =          +1.0000e+00
+floorF(         +1.9960e+00) =          +1.0000e+00
+ ceilD(-2.0000000000000e+00) = -2.0000000000000e+00
+ ceilD(-1.9000000001000e+00) = -1.0000000000000e+00
+ ceilD(-1.8000000002000e+00) = -1.0000000000000e+00
+ ceilD(-1.7000000003000e+00) = -1.0000000000000e+00
+ ceilD(-1.6000000004000e+00) = -1.0000000000000e+00
+ ceilD(-1.5000000005000e+00) = -1.0000000000000e+00
+ ceilD(-1.4000000006000e+00) = -1.0000000000000e+00
+ ceilD(-1.3000000007000e+00) = -1.0000000000000e+00
+ ceilD(-1.2000000008000e+00) = -1.0000000000000e+00
+ ceilD(-1.1000000009000e+00) = -1.0000000000000e+00
+ ceilD(-1.0000000010000e+00) = -1.0000000000000e+00
+ ceilD(-9.0000000110000e-01) = -0.0000000000000e+00
+ ceilD(-8.0000000120000e-01) = -0.0000000000000e+00
+ ceilD(-7.0000000130000e-01) = -0.0000000000000e+00
+ ceilD(-6.0000000140000e-01) = -0.0000000000000e+00
+ ceilD(-5.0000000150000e-01) = -0.0000000000000e+00
+ ceilD(-4.0000000160000e-01) = -0.0000000000000e+00
+ ceilD(-3.0000000170000e-01) = -0.0000000000000e+00
+ ceilD(-2.0000000180000e-01) = -0.0000000000000e+00
+ ceilD(-1.0000000190000e-01) = -0.0000000000000e+00
+ ceilD(-1.9999992495467e-09) = -0.0000000000000e+00
+ ceilD(+9.9999997900001e-02) = +1.0000000000000e+00
+ ceilD(+1.9999999780000e-01) = +1.0000000000000e+00
+ ceilD(+2.9999999770000e-01) = +1.0000000000000e+00
+ ceilD(+3.9999999760000e-01) = +1.0000000000000e+00
+ ceilD(+4.9999999750000e-01) = +1.0000000000000e+00
+ ceilD(+5.9999999740000e-01) = +1.0000000000000e+00
+ ceilD(+6.9999999730000e-01) = +1.0000000000000e+00
+ ceilD(+7.9999999720000e-01) = +1.0000000000000e+00
+ ceilD(+8.9999999710000e-01) = +1.0000000000000e+00
+ ceilD(+9.9999999700000e-01) = +1.0000000000000e+00
+ ceilD(+1.0999999969000e+00) = +2.0000000000000e+00
+ ceilD(+1.1999999968000e+00) = +2.0000000000000e+00
+ ceilD(+1.2999999967000e+00) = +2.0000000000000e+00
+ ceilD(+1.3999999966000e+00) = +2.0000000000000e+00
+ ceilD(+1.4999999965000e+00) = +2.0000000000000e+00
+ ceilD(+1.5999999964000e+00) = +2.0000000000000e+00
+ ceilD(+1.6999999963000e+00) = +2.0000000000000e+00
+ ceilD(+1.7999999962000e+00) = +2.0000000000000e+00
+ ceilD(+1.8999999961000e+00) = +2.0000000000000e+00
+ ceilD(+1.9999999960000e+00) = +2.0000000000000e+00
+ ceilF(         -2.0000e+00) =          -2.0000e+00
+ ceilF(         -1.9001e+00) =          -1.0000e+00
+ ceilF(         -1.8002e+00) =          -1.0000e+00
+ ceilF(         -1.7003e+00) =          -1.0000e+00
+ ceilF(         -1.6004e+00) =          -1.0000e+00
+ ceilF(         -1.5005e+00) =          -1.0000e+00
+ ceilF(         -1.4006e+00) =          -1.0000e+00
+ ceilF(         -1.3007e+00) =          -1.0000e+00
+ ceilF(         -1.2008e+00) =          -1.0000e+00
+ ceilF(         -1.1009e+00) =          -1.0000e+00
+ ceilF(         -1.0010e+00) =          -1.0000e+00
+ ceilF(         -9.0110e-01) =          -0.0000e+00
+ ceilF(         -8.0120e-01) =          -0.0000e+00
+ ceilF(         -7.0130e-01) =          -0.0000e+00
+ ceilF(         -6.0140e-01) =          -0.0000e+00
+ ceilF(         -5.0150e-01) =          -0.0000e+00
+ ceilF(         -4.0160e-01) =          -0.0000e+00
+ ceilF(         -3.0170e-01) =          -0.0000e+00
+ ceilF(         -2.0180e-01) =          -0.0000e+00
+ ceilF(         -1.0190e-01) =          -0.0000e+00
+ ceilF(         -1.9999e-03) =          -0.0000e+00
+ ceilF(         +9.7900e-02) =          +1.0000e+00
+ ceilF(         +1.9780e-01) =          +1.0000e+00
+ ceilF(         +2.9770e-01) =          +1.0000e+00
+ ceilF(         +3.9760e-01) =          +1.0000e+00
+ ceilF(         +4.9750e-01) =          +1.0000e+00
+ ceilF(         +5.9740e-01) =          +1.0000e+00
+ ceilF(         +6.9730e-01) =          +1.0000e+00
+ ceilF(         +7.9720e-01) =          +1.0000e+00
+ ceilF(         +8.9710e-01) =          +1.0000e+00
+ ceilF(         +9.9700e-01) =          +1.0000e+00
+ ceilF(         +1.0969e+00) =          +2.0000e+00
+ ceilF(         +1.1968e+00) =          +2.0000e+00
+ ceilF(         +1.2967e+00) =          +2.0000e+00
+ ceilF(         +1.3966e+00) =          +2.0000e+00
+ ceilF(         +1.4965e+00) =          +2.0000e+00
+ ceilF(         +1.5964e+00) =          +2.0000e+00
+ ceilF(         +1.6963e+00) =          +2.0000e+00
+ ceilF(         +1.7962e+00) =          +2.0000e+00
+ ceilF(         +1.8961e+00) =          +2.0000e+00
+ ceilF(         +1.9960e+00) =          +2.0000e+00
+  sinD(-2.0000000000000e+00) = -9.0929742682568e-01
+  sinD(-1.9000000001000e+00) = -9.4630008765509e-01
+  sinD(-1.8000000002000e+00) = -9.7384763083275e-01
+  sinD(-1.7000000003000e+00) = -9.9166481041382e-01
+  sinD(-1.6000000004000e+00) = -9.9957360302983e-01
+  sinD(-1.5000000005000e+00) = -9.9749498663942e-01
+  sinD(-1.4000000006000e+00) = -9.8544973009044e-01
+  sinD(-1.3000000007000e+00) = -9.6355818560444e-01
+  sinD(-1.2000000008000e+00) = -9.3203908625711e-01
+  sinD(-1.1000000009000e+00) = -8.9120736046967e-01
+  sinD(-1.0000000010000e+00) = -8.4147098534820e-01
+  sinD(-9.0000000110000e-01) = -7.8332691031125e-01
+  sinD(-8.0000000120000e-01) = -7.1735609173557e-01
+  sinD(-7.0000000130000e-01) = -6.4421768823199e-01
+  sinD(-6.0000000140000e-01) = -5.6464247455050e-01
+  sinD(-5.0000000150000e-01) = -4.7942553992058e-01
+  sinD(-4.0000000160000e-01) = -3.8941834378235e-01
+  sinD(-3.0000000170000e-01) = -2.9552020828541e-01
+  sinD(-2.0000000180000e-01) = -1.9866933255918e-01
+  sinD(-1.0000000190000e-01) = -9.9833418537335e-02
+  sinD(-1.9999992495467e-09) = -1.9999992495467e-09
+  sinD(+9.9999997900001e-02) = +9.9833414557320e-02
+  sinD(+1.9999999780000e-01) = +1.9866932863892e-01
+  sinD(+2.9999999770000e-01) = +2.9552020446407e-01
+  sinD(+3.9999999760000e-01) = +3.8941834009810e-01
+  sinD(+4.9999999750000e-01) = +4.7942553641025e-01
+  sinD(+5.9999999740000e-01) = +5.6464247124916e-01
+  sinD(+6.9999999730000e-01) = +6.4421768517262e-01
+  sinD(+7.9999999720000e-01) = +7.1735608894874e-01
+  sinD(+8.9999999710000e-01) = +7.8332690782482e-01
+  sinD(+9.9999999700000e-01) = +8.4147098318699e-01
+  sinD(+1.0999999969000e+00) = +8.9120735865529e-01
+  sinD(+1.1999999968000e+00) = +9.3203908480768e-01
+  sinD(+1.2999999967000e+00) = +9.6355818453445e-01
+  sinD(+1.3999999966000e+00) = +9.8544972941057e-01
+  sinD(+1.4999999965000e+00) = +9.9749498635647e-01
+  sinD(+1.5999999964000e+00) = +9.9957360314662e-01
+  sinD(+1.6999999963000e+00) = +9.9166481092919e-01
+  sinD(+1.7999999962000e+00) = +9.7384763174156e-01
+  sinD(+1.8999999961000e+00) = +9.4630008894824e-01
+  sinD(+1.9999999960000e+00) = +9.0929742849027e-01
+  sinF(         -2.0000e+00) =          -9.0930e-01
+  sinF(         -1.9001e+00) =          -9.4627e-01
+  sinF(         -1.8002e+00) =          -9.7380e-01
+  sinF(         -1.7003e+00) =          -9.9163e-01
+  sinF(         -1.6004e+00) =          -9.9956e-01
+  sinF(         -1.5005e+00) =          -9.9753e-01
+  sinF(         -1.4006e+00) =          -9.8555e-01
+  sinF(         -1.3007e+00) =          -9.6375e-01
+  sinF(         -1.2008e+00) =          -9.3233e-01
+  sinF(         -1.1009e+00) =          -8.9162e-01
+  sinF(         -1.0010e+00) =          -8.4201e-01
+  sinF(         -9.0110e-01) =          -7.8401e-01
+  sinF(         -8.0120e-01) =          -7.1819e-01
+  sinF(         -7.0130e-01) =          -6.4521e-01
+  sinF(         -6.0140e-01) =          -5.6580e-01
+  sinF(         -5.0150e-01) =          -4.8074e-01
+  sinF(         -4.0160e-01) =          -3.9089e-01
+  sinF(         -3.0170e-01) =          -2.9714e-01
+  sinF(         -2.0180e-01) =          -2.0043e-01
+  sinF(         -1.0190e-01) =          -1.0172e-01
+  sinF(         -1.9999e-03) =          -1.9999e-03
+  sinF(         +9.7900e-02) =          +9.7744e-02
+  sinF(         +1.9780e-01) =          +1.9651e-01
+  sinF(         +2.9770e-01) =          +2.9332e-01
+  sinF(         +3.9760e-01) =          +3.8721e-01
+  sinF(         +4.9750e-01) =          +4.7723e-01
+  sinF(         +5.9740e-01) =          +5.6249e-01
+  sinF(         +6.9730e-01) =          +6.4215e-01
+  sinF(         +7.9720e-01) =          +7.1540e-01
+  sinF(         +8.9710e-01) =          +7.8152e-01
+  sinF(         +9.9700e-01) =          +8.3985e-01
+  sinF(         +1.0969e+00) =          +8.8980e-01
+  sinF(         +1.1968e+00) =          +9.3087e-01
+  sinF(         +1.2967e+00) =          +9.6267e-01
+  sinF(         +1.3966e+00) =          +9.8487e-01
+  sinF(         +1.4965e+00) =          +9.9724e-01
+  sinF(         +1.5964e+00) =          +9.9967e-01
+  sinF(         +1.6963e+00) =          +9.9213e-01
+  sinF(         +1.7962e+00) =          +9.7470e-01
+  sinF(         +1.8961e+00) =          +9.4755e-01
+  sinF(         +1.9960e+00) =          +9.1095e-01
+  cosD(-2.0000000000000e+00) = -4.1614683654714e-01
+  cosD(-1.9000000001000e+00) = -3.2328956695813e-01
+  cosD(-1.8000000002000e+00) = -2.2720209488786e-01
+  cosD(-1.7000000003000e+00) = -1.2884449459302e-01
+  cosD(-1.6000000004000e+00) = -2.9199522701118e-02
+  cosD(-1.5000000005000e+00) = +7.0737201168956e-02
+  cosD(-1.4000000006000e+00) = +1.6996714230897e-01
+  cosD(-1.3000000007000e+00) = +2.6749882795010e-01
+  cosD(-1.2000000008000e+00) = +3.6235775373104e-01
+  cosD(-1.1000000009000e+00) = +4.5359612062349e-01
+  cosD(-1.0000000010000e+00) = +5.4030230502667e-01
+  cosD(-9.0000000110000e-01) = +6.2160996740901e-01
+  cosD(-8.0000000120000e-01) = +6.9670670848634e-01
+  cosD(-7.0000000130000e-01) = +7.6484218644701e-01
+  cosD(-6.0000000140000e-01) = +8.2533561411918e-01
+  cosD(-5.0000000150000e-01) = +8.7758256117123e-01
+  cosD(-4.0000000160000e-01) = +9.2106099337982e-01
+  cosD(-3.0000000170000e-01) = +9.5533648862322e-01
+  cosD(-2.0000000180000e-01) = +9.8006657748364e-01
+  cosD(-1.0000000190000e-01) = +9.9500416508834e-01
+  cosD(-1.9999992495467e-09) = +1.0000000000000e+00
+  cosD(+9.9999997900001e-02) = +9.9500416548768e-01
+  cosD(+1.9999999780000e-01) = +9.8006657827831e-01
+  cosD(+2.9999999770000e-01) = +9.5533648980530e-01
+  cosD(+3.9999999760000e-01) = +9.2106099493749e-01
+  cosD(+4.9999999750000e-01) = +8.7758256308894e-01
+  cosD(+5.9999999740000e-01) = +8.2533561637775e-01
+  cosD(+6.9999999730000e-01) = +7.6484218902388e-01
+  cosD(+7.9999999720000e-01) = +6.9670671135576e-01
+  cosD(+8.9999999710000e-01) = +6.2160997054231e-01
+  cosD(+9.9999999700000e-01) = +5.4030230839255e-01
+  cosD(+1.0999999969000e+00) = +4.5359612418832e-01
+  cosD(+1.1999999968000e+00) = +3.6235775745920e-01
+  cosD(+1.2999999967000e+00) = +2.6749883180433e-01
+  cosD(+1.3999999966000e+00) = +1.6996714625077e-01
+  cosD(+1.4999999965000e+00) = +7.0737205158934e-02
+  cosD(+1.5999999964000e+00) = -2.9199518702825e-02
+  cosD(+1.6999999963000e+00) = -1.2884449062637e-01
+  cosD(+1.7999999962000e+00) = -2.2720209099247e-01
+  cosD(+1.8999999961000e+00) = -3.2328956317293e-01
+  cosD(+1.9999999960000e+00) = -4.1614683290995e-01
+  cosF(         -2.0000e+00) =          -4.1615e-01
+  cosF(         -1.9001e+00) =          -3.2338e-01
+  cosF(         -1.8002e+00) =          -2.2740e-01
+  cosF(         -1.7003e+00) =          -1.2914e-01
+  cosF(         -1.6004e+00) =          -2.9599e-02
+  cosF(         -1.5005e+00) =          +7.0238e-02
+  cosF(         -1.4006e+00) =          +1.6938e-01
+  cosF(         -1.3007e+00) =          +2.6682e-01
+  cosF(         -1.2008e+00) =          +3.6161e-01
+  cosF(         -1.1009e+00) =          +4.5279e-01
+  cosF(         -1.0010e+00) =          +5.3946e-01
+  cosF(         -9.0110e-01) =          +6.2075e-01
+  cosF(         -8.0120e-01) =          +6.9585e-01
+  cosF(         -7.0130e-01) =          +7.6400e-01
+  cosF(         -6.0140e-01) =          +8.2454e-01
+  cosF(         -5.0150e-01) =          +8.7686e-01
+  cosF(         -4.0160e-01) =          +9.2044e-01
+  cosF(         -3.0170e-01) =          +9.5483e-01
+  cosF(         -2.0180e-01) =          +9.7971e-01
+  cosF(         -1.0190e-01) =          +9.9481e-01
+  cosF(         -1.9999e-03) =          +1.0000e+00
+  cosF(         +9.7900e-02) =          +9.9521e-01
+  cosF(         +1.9780e-01) =          +9.8050e-01
+  cosF(         +2.9770e-01) =          +9.5601e-01
+  cosF(         +3.9760e-01) =          +9.2199e-01
+  cosF(         +4.9750e-01) =          +8.7878e-01
+  cosF(         +5.9740e-01) =          +8.2680e-01
+  cosF(         +6.9730e-01) =          +7.6658e-01
+  cosF(         +7.9720e-01) =          +6.9871e-01
+  cosF(         +8.9710e-01) =          +6.2388e-01
+  cosF(         +9.9700e-01) =          +5.4282e-01
+  cosF(         +1.0969e+00) =          +4.5636e-01
+  cosF(         +1.1968e+00) =          +3.6534e-01
+  cosF(         +1.2967e+00) =          +2.7068e-01
+  cosF(         +1.3966e+00) =          +1.7332e-01
+  cosF(         +1.4965e+00) =          +7.4228e-02
+  cosF(         +1.5964e+00) =          -2.5601e-02
+  cosF(         +1.6963e+00) =          -1.2517e-01
+  cosF(         +1.7962e+00) =          -2.2350e-01
+  cosF(         +1.8961e+00) =          -3.1960e-01
+  cosF(         +1.9960e+00) =          -4.1251e-01
+  tanD(-2.0000000000000e+00) = +2.1850398632615e+00
+  tanD(-1.9000000001000e+00) = +2.9270975137210e+00
+  tanD(-1.8000000002000e+00) = +4.2862616707537e+00
+  tanD(-1.7000000003000e+00) = +7.6966021213879e+00
+  tanD(-1.6000000004000e+00) = +3.4232532266411e+01
+  tanD(-1.5000000005000e+00) = -1.4101420047097e+01
+  tanD(-1.4000000006000e+00) = -5.7978837362521e+00
+  tanD(-1.3000000007000e+00) = -3.6021024577506e+00
+  tanD(-1.2000000008000e+00) = -2.5721516282191e+00
+  tanD(-1.1000000009000e+00) = -1.9647596616229e+00
+  tanD(-1.0000000010000e+00) = -1.5574077280804e+00
+  tanD(-9.0000000110000e-01) = -1.2601582203971e+00
+  tanD(-8.0000000120000e-01) = -1.0296385595225e+00
+  tanD(-7.0000000130000e-01) = -8.4228838268536e-01
+  tanD(-6.0000000140000e-01) = -6.8413681039695e-01
+  tanD(-5.0000000150000e-01) = -5.4630249179146e-01
+  tanD(-4.0000000160000e-01) = -4.2279322062417e-01
+  tanD(-3.0000000170000e-01) = -3.0933625147229e-01
+  tanD(-2.0000000180000e-01) = -2.0271003738264e-01
+  tanD(-1.0000000190000e-01) = -1.0033467400458e-01
+  tanD(-1.9999992495467e-09) = -1.9999992495467e-09
+  tanD(+9.9999997900001e-02) = +1.0033466996431e-01
+  tanD(+1.9999999780000e-01) = +2.0271003321827e-01
+  tanD(+2.9999999770000e-01) = +3.0933624708954e-01
+  tanD(+3.9999999760000e-01) = +4.2279321590915e-01
+  tanD(+4.9999999750000e-01) = +5.4630248659768e-01
+  tanD(+5.9999999740000e-01) = +6.8413680452478e-01
+  tanD(+6.9999999730000e-01) = +8.4228837584757e-01
+  tanD(+7.9999999720000e-01) = +1.0296385512819e+00
+  tanD(+8.9999999710000e-01) = +1.2601582100451e+00
+  tanD(+9.9999999700000e-01) = +1.5574077143783e+00
+  tanD(+1.0999999969000e+00) = +1.9647596421818e+00
+  tanD(+1.1999999968000e+00) = +2.5721515977552e+00
+  tanD(+1.2999999967000e+00) = +3.6021024018500e+00
+  tanD(+1.3999999966000e+00) = +5.7978835977904e+00
+  tanD(+1.4999999965000e+00) = +1.4101419247697e+01
+  tanD(+1.5999999964000e+00) = -3.4232536957875e+01
+  tanD(+1.6999999963000e+00) = -7.6966023623385e+00
+  tanD(+1.7999999962000e+00) = -4.2862617482418e+00
+  tanD(+1.8999999961000e+00) = -2.9270975519926e+00
+  tanD(+1.9999999960000e+00) = -2.1850398863591e+00
+  tanF(         -2.0000e+00) =          +2.1850e+00
+  tanF(         -1.9001e+00) =          +2.9261e+00
+  tanF(         -1.8002e+00) =          +4.2824e+00
+  tanF(         -1.7003e+00) =          +7.6786e+00
+  tanF(         -1.6004e+00) =          +3.3770e+01
+  tanF(         -1.5005e+00) =          -1.4202e+01
+  tanF(         -1.4006e+00) =          -5.8187e+00
+  tanF(         -1.3007e+00) =          -3.6119e+00
+  tanF(         -1.2008e+00) =          -2.5783e+00
+  tanF(         -1.1009e+00) =          -1.9691e+00
+  tanF(         -1.0010e+00) =          -1.5608e+00
+  tanF(         -9.0110e-01) =          -1.2630e+00
+  tanF(         -8.0120e-01) =          -1.0321e+00
+  tanF(         -7.0130e-01) =          -8.4451e-01
+  tanF(         -6.0140e-01) =          -6.8619e-01
+  tanF(         -5.0150e-01) =          -5.4825e-01
+  tanF(         -4.0160e-01) =          -4.2468e-01
+  tanF(         -3.0170e-01) =          -3.1120e-01
+  tanF(         -2.0180e-01) =          -2.0458e-01
+  tanF(         -1.0190e-01) =          -1.0225e-01
+  tanF(         -1.9999e-03) =          -1.9999e-03
+  tanF(         +9.7900e-02) =          +9.8214e-02
+  tanF(         +1.9780e-01) =          +2.0042e-01
+  tanF(         +2.9770e-01) =          +3.0682e-01
+  tanF(         +3.9760e-01) =          +4.1997e-01
+  tanF(         +4.9750e-01) =          +5.4306e-01
+  tanF(         +5.9740e-01) =          +6.8033e-01
+  tanF(         +6.9730e-01) =          +8.3768e-01
+  tanF(         +7.9720e-01) =          +1.0239e+00
+  tanF(         +8.9710e-01) =          +1.2527e+00
+  tanF(         +9.9700e-01) =          +1.5472e+00
+  tanF(         +1.0969e+00) =          +1.9498e+00
+  tanF(         +1.1968e+00) =          +2.5480e+00
+  tanF(         +1.2967e+00) =          +3.5565e+00
+  tanF(         +1.3966e+00) =          +5.6825e+00
+  tanF(         +1.4965e+00) =          +1.3435e+01
+  tanF(         +1.5964e+00) =          -3.9048e+01
+  tanF(         +1.6963e+00) =          -7.9260e+00
+  tanF(         +1.7962e+00) =          -4.3611e+00
+  tanF(         +1.8961e+00) =          -2.9648e+00
+  tanF(         +1.9960e+00) =          -2.2083e+00
+  expD(-2.0000000000000e+00) = +1.3533528323661e-01
+  expD(-1.9000000001000e+00) = +1.4956861920768e-01
+  expD(-1.8000000002000e+00) = +1.6529888818853e-01
+  expD(-1.7000000003000e+00) = +1.8268352399793e-01
+  expD(-1.6000000004000e+00) = +2.0189651791390e-01
+  expD(-1.5000000005000e+00) = +2.2313016003686e-01
+  expD(-1.4000000006000e+00) = +2.4659696379365e-01
+  expD(-1.3000000007000e+00) = +2.7253179284324e-01
+  expD(-1.2000000008000e+00) = +3.0119421167125e-01
+  expD(-1.1000000009000e+00) = +3.3287108339850e-01
+  expD(-1.0000000010000e+00) = +3.6787944080356e-01
+  expD(-9.0000000110000e-01) = +4.0656965929337e-01
+  expD(-8.0000000120000e-01) = +4.4932896357803e-01
+  expD(-7.0000000130000e-01) = +4.9658530314585e-01
+  expD(-6.0000000140000e-01) = +5.4881163532569e-01
+  expD(-5.0000000150000e-01) = +6.0653065880284e-01
+  expD(-4.0000000160000e-01) = +6.7032004496313e-01
+  expD(-3.0000000170000e-01) = +7.4081821942233e-01
+  expD(-2.0000000180000e-01) = +8.1873075160427e-01
+  expD(-1.0000000190000e-01) = +9.0483741631677e-01
+  expD(-1.9999992495467e-09) = +9.9999999800000e-01
+  expD(+9.9999997900001e-02) = +1.1051709157548e+00
+  expD(+1.9999999780000e-01) = +1.2214027554731e+00
+  expD(+2.9999999770000e-01) = +1.3498588044713e+00
+  expD(+3.9999999760000e-01) = +1.4918246940609e+00
+  expD(+4.9999999750000e-01) = +1.6487212665783e+00
+  expD(+5.9999999740000e-01) = +1.8221187956530e+00
+  expD(+6.9999999730000e-01) = +2.0137527020333e+00
+  expD(+7.9999999720000e-01) = +2.2255409222610e+00
+  expD(+8.9999999710000e-01) = +2.4596031040241e+00
+  expD(+9.9999999700000e-01) = +2.7182818203042e+00
+  expD(+1.0999999969000e+00) = +3.0041660146335e+00
+  expD(+1.1999999968000e+00) = +3.3201169121122e+00
+  expD(+1.2999999967000e+00) = +3.6692966555106e+00
+  expD(+1.3999999966000e+00) = +4.0551999530570e+00
+  expD(+1.4999999965000e+00) = +4.4816890546522e+00
+  expD(+1.5999999964000e+00) = +4.9530324065642e+00
+  expD(+1.6999999963000e+00) = +5.4739473714736e+00
+  expD(+1.7999999962000e+00) = +6.0496474414243e+00
+  expD(+1.8999999961000e+00) = +6.6858944162043e+00
+  expD(+1.9999999960000e+00) = +7.3890560693744e+00
+  expF(         -2.0000e+00) =          +1.3534e-01
+  expF(         -1.9001e+00) =          +1.4955e-01
+  expF(         -1.8002e+00) =          +1.6527e-01
+  expF(         -1.7003e+00) =          +1.8263e-01
+  expF(         -1.6004e+00) =          +2.0182e-01
+  expF(         -1.5005e+00) =          +2.2302e-01
+  expF(         -1.4006e+00) =          +2.4645e-01
+  expF(         -1.3007e+00) =          +2.7234e-01
+  expF(         -1.2008e+00) =          +3.0095e-01
+  expF(         -1.1009e+00) =          +3.3257e-01
+  expF(         -1.0010e+00) =          +3.6751e-01
+  expF(         -9.0110e-01) =          +4.0612e-01
+  expF(         -8.0120e-01) =          +4.4879e-01
+  expF(         -7.0130e-01) =          +4.9594e-01
+  expF(         -6.0140e-01) =          +5.4804e-01
+  expF(         -5.0150e-01) =          +6.0562e-01
+  expF(         -4.0160e-01) =          +6.6925e-01
+  expF(         -3.0170e-01) =          +7.3956e-01
+  expF(         -2.0180e-01) =          +8.1726e-01
+  expF(         -1.0190e-01) =          +9.0312e-01
+  expF(         -1.9999e-03) =          +9.9800e-01
+  expF(         +9.7900e-02) =          +1.1029e+00
+  expF(         +1.9780e-01) =          +1.2187e+00
+  expF(         +2.9770e-01) =          +1.3468e+00
+  expF(         +3.9760e-01) =          +1.4882e+00
+  expF(         +4.9750e-01) =          +1.6446e+00
+  expF(         +5.9740e-01) =          +1.8174e+00
+  expF(         +6.9730e-01) =          +2.0083e+00
+  expF(         +7.9720e-01) =          +2.2193e+00
+  expF(         +8.9710e-01) =          +2.4525e+00
+  expF(         +9.9700e-01) =          +2.7101e+00
+  expF(         +1.0969e+00) =          +2.9949e+00
+  expF(         +1.1968e+00) =          +3.3095e+00
+  expF(         +1.2967e+00) =          +3.6572e+00
+  expF(         +1.3966e+00) =          +4.0414e+00
+  expF(         +1.4965e+00) =          +4.4660e+00
+  expF(         +1.5964e+00) =          +4.9352e+00
+  expF(         +1.6963e+00) =          +5.4537e+00
+  expF(         +1.7962e+00) =          +6.0267e+00
+  expF(         +1.8961e+00) =          +6.6599e+00
+  expF(         +1.9960e+00) =          +7.3596e+00
+ sqrtD(+0.0000000000000e+00) = +0.0000000000000e+00
+ sqrtD(+9.9999999900000e-02) = +3.1622776585872e-01
+ sqrtD(+1.9999999980000e-01) = +4.4721359527635e-01
+ sqrtD(+2.9999999970000e-01) = +5.4772255723130e-01
+ sqrtD(+3.9999999960000e-01) = +6.3245553171745e-01
+ sqrtD(+4.9999999950000e-01) = +7.0710678083299e-01
+ sqrtD(+5.9999999940000e-01) = +7.7459666885419e-01
+ sqrtD(+6.9999999930000e-01) = +8.3666002611575e-01
+ sqrtD(+7.9999999920000e-01) = +8.9442719055270e-01
+ sqrtD(+8.9999999910000e-01) = +9.4868329757617e-01
+ sqrtD(+9.9999999900000e-01) = +9.9999999950000e-01
+ sqrtD(+1.0999999989000e+00) = +1.0488088476457e+00
+ sqrtD(+1.1999999988000e+00) = +1.0954451144626e+00
+ sqrtD(+1.2999999987000e+00) = +1.1401754245291e+00
+ sqrtD(+1.3999999986000e+00) = +1.1832159560283e+00
+ sqrtD(+1.4999999985000e+00) = +1.2247448707792e+00
+ sqrtD(+1.5999999984000e+00) = +1.2649110634349e+00
+ sqrtD(+1.6999999983000e+00) = +1.3038404803886e+00
+ sqrtD(+1.7999999982000e+00) = +1.3416407858291e+00
+ sqrtD(+1.8999999981000e+00) = +1.3784048745198e+00
+ sqrtD(+1.9999999980000e+00) = +1.4142135616660e+00
+ sqrtF(         +0.0000e+00) =          +0.0000e+00
+ sqrtF(         +9.9900e-02) =          +3.1607e-01
+ sqrtF(         +1.9980e-01) =          +4.4699e-01
+ sqrtF(         +2.9970e-01) =          +5.4745e-01
+ sqrtF(         +3.9960e-01) =          +6.3214e-01
+ sqrtF(         +4.9950e-01) =          +7.0675e-01
+ sqrtF(         +5.9940e-01) =          +7.7421e-01
+ sqrtF(         +6.9930e-01) =          +8.3624e-01
+ sqrtF(         +7.9920e-01) =          +8.9398e-01
+ sqrtF(         +8.9910e-01) =          +9.4821e-01
+ sqrtF(         +9.9900e-01) =          +9.9950e-01
+ sqrtF(         +1.0989e+00) =          +1.0483e+00
+ sqrtF(         +1.1988e+00) =          +1.0949e+00
+ sqrtF(         +1.2987e+00) =          +1.1396e+00
+ sqrtF(         +1.3986e+00) =          +1.1826e+00
+ sqrtF(         +1.4985e+00) =          +1.2241e+00
+ sqrtF(         +1.5984e+00) =          +1.2643e+00
+ sqrtF(         +1.6983e+00) =          +1.3032e+00
+ sqrtF(         +1.7982e+00) =          +1.3410e+00
+ sqrtF(         +1.8981e+00) =          +1.3777e+00
+ sqrtF(         +1.9980e+00) =          +1.4135e+00
+  logD(+0.0000000000000e+00) =            -Infinity
+  logD(+9.9999999900000e-02) = -2.3025850939940e+00
+  logD(+1.9999999980000e-01) = -1.6094379134341e+00
+  logD(+2.9999999970000e-01) = -1.2039728053259e+00
+  logD(+3.9999999960000e-01) = -9.1629073287416e-01
+  logD(+4.9999999950000e-01) = -6.9314718155995e-01
+  logD(+5.9999999940000e-01) = -5.1082562476599e-01
+  logD(+6.9999999930000e-01) = -3.5667494493873e-01
+  logD(+7.9999999920000e-01) = -2.2314355231421e-01
+  logD(+8.9999999910000e-01) = -1.0536051665783e-01
+  logD(+9.9999999900000e-01) = -1.0000000832404e-09
+  logD(+1.0999999989000e+00) = +9.5310178804325e-02
+  logD(+1.1999999988000e+00) = +1.8232155579395e-01
+  logD(+1.2999999987000e+00) = +2.6236426346749e-01
+  logD(+1.3999999986000e+00) = +3.3647223562121e-01
+  logD(+1.4999999985000e+00) = +4.0546510710816e-01
+  logD(+1.5999999984000e+00) = +4.7000362824574e-01
+  logD(+1.6999999983000e+00) = +5.3062825006217e-01
+  logD(+1.7999999982000e+00) = +5.8778666390212e-01
+  logD(+1.8999999981000e+00) = +6.4185388517240e-01
+  logD(+1.9999999980000e+00) = +6.9314717955995e-01
+  logF(         +0.0000e+00) =                 -Inf
+  logF(         +9.9900e-02) =          -2.3036e+00
+  logF(         +1.9980e-01) =          -1.6104e+00
+  logF(         +2.9970e-01) =          -1.2050e+00
+  logF(         +3.9960e-01) =          -9.1729e-01
+  logF(         +4.9950e-01) =          -6.9415e-01
+  logF(         +5.9940e-01) =          -5.1183e-01
+  logF(         +6.9930e-01) =          -3.5768e-01
+  logF(         +7.9920e-01) =          -2.2414e-01
+  logF(         +8.9910e-01) =          -1.0636e-01
+  logF(         +9.9900e-01) =          -1.0005e-03
+  logF(         +1.0989e+00) =          +9.4310e-02
+  logF(         +1.1988e+00) =          +1.8132e-01
+  logF(         +1.2987e+00) =          +2.6136e-01
+  logF(         +1.3986e+00) =          +3.3547e-01
+  logF(         +1.4985e+00) =          +4.0446e-01
+  logF(         +1.5984e+00) =          +4.6900e-01
+  logF(         +1.6983e+00) =          +5.2963e-01
+  logF(         +1.7982e+00) =          +5.8679e-01
+  logF(         +1.8981e+00) =          +6.4085e-01
+  logF(         +1.9980e+00) =          +6.9215e-01
+log10D(+0.0000000000000e+00) =            -Infinity
+log10D(+9.9999999900000e-02) = -1.0000000004343e+00
+log10D(+1.9999999980000e-01) = -6.9897000477031e-01
+log10D(+2.9999999970000e-01) = -5.2287874571463e-01
+log10D(+3.9999999960000e-01) = -3.9794000910633e-01
+log10D(+4.9999999950000e-01) = -3.0102999609828e-01
+log10D(+5.9999999940000e-01) = -2.2184875005065e-01
+log10D(+6.9999999930000e-01) = -1.5490196042004e-01
+log10D(+7.9999999920000e-01) = -9.6910013442351e-02
+log10D(+8.9999999910000e-01) = -4.5757490994970e-02
+log10D(+9.9999999900000e-01) = -4.3429451805409e-10
+log10D(+1.0999999989000e+00) = +4.1392684723931e-02
+log10D(+1.1999999988000e+00) = +7.9181245613330e-02
+log10D(+1.2999999987000e+00) = +1.1394335187254e-01
+log10D(+1.3999999986000e+00) = +1.4612803524394e-01
+log10D(+1.4999999985000e+00) = +1.7609125862139e-01
+log10D(+1.5999999984000e+00) = +2.0411998222163e-01
+log10D(+1.6999999983000e+00) = +2.3044892094398e-01
+log10D(+1.7999999982000e+00) = +2.5527250466901e-01
+log10D(+1.8999999981000e+00) = +2.7875360051853e-01
+log10D(+1.9999999980000e+00) = +3.0102999522969e-01
+log10F(         +0.0000e+00) =                 -Inf
+log10F(         +9.9900e-02) =          -1.0004e+00
+log10F(         +1.9980e-01) =          -6.9940e-01
+log10F(         +2.9970e-01) =          -5.2331e-01
+log10F(         +3.9960e-01) =          -3.9837e-01
+log10F(         +4.9950e-01) =          -3.0146e-01
+log10F(         +5.9940e-01) =          -2.2228e-01
+log10F(         +6.9930e-01) =          -1.5534e-01
+log10F(         +7.9920e-01) =          -9.7345e-02
+log10F(         +8.9910e-01) =          -4.6192e-02
+log10F(         +9.9900e-01) =          -4.3451e-04
+log10F(         +1.0989e+00) =          +4.0958e-02
+log10F(         +1.1988e+00) =          +7.8747e-02
+log10F(         +1.2987e+00) =          +1.1351e-01
+log10F(         +1.3986e+00) =          +1.4569e-01
+log10F(         +1.4985e+00) =          +1.7566e-01
+log10F(         +1.5984e+00) =          +2.0369e-01
+log10F(         +1.6983e+00) =          +2.3001e-01
+log10F(         +1.7982e+00) =          +2.5484e-01
+log10F(         +1.8981e+00) =          +2.7832e-01
+log10F(         +1.9980e+00) =          +3.0060e-01
+ asinD(-1.0000000000000e+00) = -1.5707963267949e+00
+ asinD(-9.0000000010000e-01) = -1.1197695152280e+00
+ asinD(-8.0000000020000e-01) = -9.2729521833495e-01
+ asinD(-7.0000000030000e-01) = -7.7539749703084e-01
+ asinD(-6.0000000040000e-01) = -6.4350110929328e-01
+ asinD(-5.0000000050000e-01) = -5.2359877617565e-01
+ asinD(-4.0000000060000e-01) = -4.1151684672214e-01
+ asinD(-3.0000000070000e-01) = -3.0469265474920e-01
+ asinD(-2.0000000080000e-01) = -2.0135792160683e-01
+ asinD(-1.0000000090000e-01) = -1.0016742206609e-01
+ asinD(-1.0000000549848e-09) = -1.0000000549848e-09
+ asinD(+9.9999998900000e-02) = +1.0016742005602e-01
+ asinD(+1.9999999880000e-01) = +2.0135791956559e-01
+ asinD(+2.9999999870000e-01) = +3.0469265265263e-01
+ asinD(+3.9999999860000e-01) = +4.1151684453996e-01
+ asinD(+4.9999999850000e-01) = +5.2359877386625e-01
+ asinD(+5.9999999840000e-01) = +6.4350110679328e-01
+ asinD(+6.9999999830000e-01) = +7.7539749423028e-01
+ asinD(+7.9999999820000e-01) = +9.2729521500161e-01
+ asinD(+8.9999999810000e-01) = +1.1197695106397e+00
+ asinD(+9.9999999800000e-01) = +1.5707330812408e+00
+ asinF(         -1.0000e+00) =          -1.5708e+00
+ asinF(         -9.0010e-01) =          -1.1200e+00
+ asinF(         -8.0020e-01) =          -9.2763e-01
+ asinF(         -7.0030e-01) =          -7.7582e-01
+ asinF(         -6.0040e-01) =          -6.4400e-01
+ asinF(         -5.0050e-01) =          -5.2418e-01
+ asinF(         -4.0060e-01) =          -4.1217e-01
+ asinF(         -3.0070e-01) =          -3.0543e-01
+ asinF(         -2.0080e-01) =          -2.0217e-01
+ asinF(         -1.0090e-01) =          -1.0107e-01
+ asinF(         -9.9994e-04) =          -9.9994e-04
+ asinF(         +9.8900e-02) =          +9.9062e-02
+ asinF(         +1.9880e-01) =          +2.0013e-01
+ asinF(         +2.9870e-01) =          +3.0333e-01
+ asinF(         +3.9860e-01) =          +4.0999e-01
+ asinF(         +4.9850e-01) =          +5.2187e-01
+ asinF(         +5.9840e-01) =          +6.4150e-01
+ asinF(         +6.9830e-01) =          +7.7302e-01
+ asinF(         +7.9820e-01) =          +9.2430e-01
+ asinF(         +8.9810e-01) =          +1.1154e+00
+ asinF(         +9.9800e-01) =          +1.5075e+00
+ acosD(-1.0000000000000e+00) =    +3.1415926536e+00
+ acosD(-9.0000010000000e-01) =    +2.6905660712e+00
+ acosD(-8.0000020000000e-01) =    +2.4980918781e+00
+ acosD(-7.0000030000000e-01) =    +2.3461942435e+00
+ acosD(-6.0000040000000e-01) =    +2.2142979356e+00
+ acosD(-5.0000050000000e-01) =    +2.0943956797e+00
+ acosD(-4.0000060000000e-01) =    +1.9823138275e+00
+ acosD(-3.0000070000000e-01) =    +1.8754897146e+00
+ acosD(-2.0000080000000e-01) =    +1.7721550641e+00
+ acosD(-1.0000090000000e-01) =    +1.6709646525e+00
+ acosD(-9.9999999977896e-07) =    +1.5707973268e+00
+ acosD(+9.9998900000000e-02) =    +1.4706300112e+00
+ acosD(+1.9999880000000e-01) =    +1.3694396307e+00
+ acosD(+2.9999870000000e-01) =    +1.2661050355e+00
+ acosD(+3.9999860000000e-01) =    +1.1592810083e+00
+ acosD(+4.9999850000000e-01) =    +1.0471992832e+00
+ acosD(+5.9999840000000e-01) =    +9.2729721800e-01
+ acosD(+6.9999830000000e-01) =    +7.9540121066e-01
+ acosD(+7.9999820000000e-01) =    +6.4350410879e-01
+ acosD(+8.9999810000000e-01) =    +4.5103117068e-01
+ acosD(+9.9999800000000e-01) =    +2.0000003331e-03
+ acosF(         -1.0000e+00) =          +3.1416e+00
+ acosF(         -9.0010e-01) =          +2.6908e+00
+ acosF(         -8.0020e-01) =          +2.4984e+00
+ acosF(         -7.0030e-01) =          +2.3466e+00
+ acosF(         -6.0040e-01) =          +2.2148e+00
+ acosF(         -5.0050e-01) =          +2.0950e+00
+ acosF(         -4.0060e-01) =          +1.9830e+00
+ acosF(         -3.0070e-01) =          +1.8762e+00
+ acosF(         -2.0080e-01) =          +1.7730e+00
+ acosF(         -1.0090e-01) =          +1.6719e+00
+ acosF(         -9.9994e-04) =          +1.5718e+00
+ acosF(         +9.8900e-02) =          +1.4717e+00
+ acosF(         +1.9880e-01) =          +1.3707e+00
+ acosF(         +2.9870e-01) =          +1.2675e+00
+ acosF(         +3.9860e-01) =          +1.1608e+00
+ acosF(         +4.9850e-01) =          +1.0489e+00
+ acosF(         +5.9840e-01) =          +9.2929e-01
+ acosF(         +6.9830e-01) =          +7.9778e-01
+ acosF(         +7.9820e-01) =          +6.4650e-01
+ acosF(         +8.9810e-01) =          +4.5537e-01
+ acosF(         +9.9800e-01) =          +6.3255e-02
+ atanD(-1.0000000000000e+00) = -7.8539816339745e-01
+ atanD(-9.0000000010000e-01) = -7.3281510184176e-01
+ atanD(-8.0000000020000e-01) = -6.7474094234550e-01
+ atanD(-7.0000000030000e-01) = -6.1072596459055e-01
+ atanD(-6.0000000040000e-01) = -5.4041950056470e-01
+ atanD(-5.0000000050000e-01) = -4.6364760940081e-01
+ atanD(-4.0000000060000e-01) = -3.8050637762961e-01
+ atanD(-3.0000000070000e-01) = -2.9145679512007e-01
+ atanD(-2.0000000080000e-01) = -1.9739556061911e-01
+ atanD(-1.0000000090000e-01) = -9.9668653382251e-02
+ atanD(-1.0000000549848e-09) = -1.0000000549848e-09
+ atanD(+9.9999998900000e-02) = +9.9668651402053e-02
+ atanD(+1.9999999880000e-01) = +1.9739555869603e-01
+ atanD(+2.9999999870000e-01) = +2.9145679328521e-01
+ atanD(+3.9999999860000e-01) = +3.8050637590547e-01
+ atanD(+4.9999999850000e-01) = +4.6364760780081e-01
+ atanD(+5.9999999840000e-01) = +5.4041949909411e-01
+ atanD(+6.9999999830000e-01) = +6.1072596324827e-01
+ atanD(+7.9999999820000e-01) = +6.7474094112599e-01
+ atanD(+8.9999999810000e-01) = +7.3281510073678e-01
+ atanD(+9.9999999800000e-01) = +7.8539816239745e-01
+ atanF(         -1.0000e+00) =          -7.8540e-01
+ atanF(         -9.0010e-01) =          -7.3287e-01
+ atanF(         -8.0020e-01) =          -6.7486e-01
+ atanF(         -7.0030e-01) =          -6.1093e-01
+ atanF(         -6.0040e-01) =          -5.4071e-01
+ atanF(         -5.0050e-01) =          -4.6405e-01
+ atanF(         -4.0060e-01) =          -3.8102e-01
+ atanF(         -3.0070e-01) =          -2.9210e-01
+ atanF(         -2.0080e-01) =          -1.9816e-01
+ atanF(         -1.0090e-01) =          -1.0056e-01
+ atanF(         -9.9994e-04) =          -9.9994e-04
+ atanF(         +9.8900e-02) =          +9.8579e-02
+ atanF(         +1.9880e-01) =          +1.9624e-01
+ atanF(         +2.9870e-01) =          +2.9026e-01
+ atanF(         +3.9860e-01) =          +3.7930e-01
+ atanF(         +4.9850e-01) =          +4.6245e-01
+ atanF(         +5.9840e-01) =          +5.3924e-01
+ atanF(         +6.9830e-01) =          +6.0958e-01
+ atanF(         +7.9820e-01) =          +6.7364e-01
+ atanF(         +8.9810e-01) =          +7.3176e-01
+ atanF(         +9.9800e-01) =          +7.8440e-01
+atan2D(-1.0000000000000e+00) = -7.8539816339745e-01
+atan2D(-9.0000000010000e-01) = -7.3281510184176e-01
+atan2D(-8.0000000020000e-01) = -6.7474094234550e-01
+atan2D(-7.0000000030000e-01) = -6.1072596459055e-01
+atan2D(-6.0000000040000e-01) = -5.4041950056470e-01
+atan2D(-5.0000000050000e-01) = -4.6364760940081e-01
+atan2D(-4.0000000060000e-01) = -3.8050637762961e-01
+atan2D(-3.0000000070000e-01) = -2.9145679512007e-01
+atan2D(-2.0000000080000e-01) = -1.9739556061911e-01
+atan2D(-1.0000000090000e-01) = -9.9668653382251e-02
+atan2D(-1.0000000549848e-09) = -1.0000000549848e-09
+atan2D(+9.9999998900000e-02) = +9.9668651402053e-02
+atan2D(+1.9999999880000e-01) = +1.9739555869603e-01
+atan2D(+2.9999999870000e-01) = +2.9145679328521e-01
+atan2D(+3.9999999860000e-01) = +3.8050637590547e-01
+atan2D(+4.9999999850000e-01) = +4.6364760780081e-01
+atan2D(+5.9999999840000e-01) = +5.4041949909411e-01
+atan2D(+6.9999999830000e-01) = +6.1072596324827e-01
+atan2D(+7.9999999820000e-01) = +6.7474094112599e-01
+atan2D(+8.9999999810000e-01) = +7.3281510073678e-01
+atan2D(+9.9999999800000e-01) = +7.8539816239745e-01
+atan2F(         -1.0000e+00) =          -7.8540e-01
+atan2F(         -9.0010e-01) =          -7.3287e-01
+atan2F(         -8.0020e-01) =          -6.7486e-01
+atan2F(         -7.0030e-01) =          -6.1093e-01
+atan2F(         -6.0040e-01) =          -5.4071e-01
+atan2F(         -5.0050e-01) =          -4.6405e-01
+atan2F(         -4.0060e-01) =          -3.8102e-01
+atan2F(         -3.0070e-01) =          -2.9210e-01
+atan2F(         -2.0080e-01) =          -1.9816e-01
+atan2F(         -1.0090e-01) =          -1.0056e-01
+atan2F(         -9.9994e-04) =          -9.9994e-04
+atan2F(         +9.8900e-02) =          +9.8579e-02
+atan2F(         +1.9880e-01) =          +1.9624e-01
+atan2F(         +2.9870e-01) =          +2.9026e-01
+atan2F(         +3.9860e-01) =          +3.7930e-01
+atan2F(         +4.9850e-01) =          +4.6245e-01
+atan2F(         +5.9840e-01) =          +5.3924e-01
+atan2F(         +6.9830e-01) =          +6.0958e-01
+atan2F(         +7.9820e-01) =          +6.7364e-01
+atan2F(         +8.9810e-01) =          +7.3176e-01
+atan2F(         +9.9800e-01) =          +7.8440e-01
diff --git a/memcheck/tests/writev1.stderr.exp-solaris b/memcheck/tests/writev1.stderr.exp-solaris
new file mode 100644
index 0000000..b19d775
--- /dev/null
+++ b/memcheck/tests/writev1.stderr.exp-solaris
@@ -0,0 +1,19 @@
+Test file created.
+Syscall param writev(vector[...]) points to unaddressable byte(s)
+   ...
+   by 0x........: main (writev1.c:56)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Received EFAULT as expected
+Syscall param writev(vector) points to unaddressable byte(s)
+   ...
+   by 0x........: main (writev1.c:68)
+ Address 0x........ is 0 bytes after the brk data segment limit 0x........
+
+Received EINVAL as expected
+Syscall param readv(vector) points to unaddressable byte(s)
+   ...
+   by 0x........: main (writev1.c:76)
+ Address 0x........ is 0 bytes after the brk data segment limit 0x........
+
+Received EINVAL as expected
diff --git a/memcheck/tests/x86-linux/scalar.stderr.exp b/memcheck/tests/x86-linux/scalar.stderr.exp
index 95b1e85..30cfd1c 100644
--- a/memcheck/tests/x86-linux/scalar.stderr.exp
+++ b/memcheck/tests/x86-linux/scalar.stderr.exp
@@ -415,7 +415,7 @@
    ...
    by 0x........: main (scalar.c:196)
 
-Syscall param kill(sig) contains uninitialised byte(s)
+Syscall param kill(signal) contains uninitialised byte(s)
    ...
    by 0x........: main (scalar.c:196)
 
diff --git a/memcheck/tests/x86-solaris/Makefile.am b/memcheck/tests/x86-solaris/Makefile.am
new file mode 100644
index 0000000..3759fe6
--- /dev/null
+++ b/memcheck/tests/x86-solaris/Makefile.am
@@ -0,0 +1,32 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = filter_stderr
+
+EXTRA_DIST = \
+	scalar.stderr.exp scalar.stdout.exp scalar.vgtest \
+	scalar_obsolete.stderr.exp scalar_obsolete.stdout.exp scalar_obsolete.vgtest \
+	context_eflags.stderr.exp context_eflags.stdout.exp context_eflags.vgtest \
+	context_eflags2.stderr.exp context_eflags2.stdout.exp context_eflags2.vgtest \
+	context_fpu.stderr.exp context_fpu.stdout.exp context_fpu.vgtest \
+	context_gpr.stderr.exp context_gpr.stdout.exp context_gpr.vgtest \
+	context_sse.stderr.exp context_sse.stdout.exp context_sse.vgtest \
+	ldsoexec.stderr.exp ldsoexec.vgtest
+
+check_PROGRAMS = \
+	scalar \
+	context_eflags \
+	context_eflags2 \
+	context_fpu \
+	context_gpr \
+	context_sse \
+	ldsoexec
+
+if SOLARIS_OLD_SYSCALLS
+check_PROGRAMS += scalar_obsolete
+endif
+
+AM_CFLAGS    += @FLAG_M32@
+AM_CXXFLAGS  += @FLAG_M32@
+AM_CCASFLAGS += @FLAG_M32@
+
diff --git a/memcheck/tests/x86-solaris/context_eflags.c b/memcheck/tests/x86-solaris/context_eflags.c
new file mode 100644
index 0000000..63c6377
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_eflags.c
@@ -0,0 +1,71 @@
+/* x86 variant of the amd64-solaris/context_rflags.c test. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+#define OBIT(eflags) (!!((eflags) & (1 << 11)))
+#define SBIT(eflags) (!!((eflags) & (1 << 7)))
+
+static siginfo_t si;
+static ucontext_t uc;
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   si = *sip;
+   uc = *ucp;
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   pid_t pid;
+   int eflags;
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   pid = getpid();
+
+   __asm__ __volatile__(
+      /* Set overflow and sign flags. */
+      "movl   $1, %%edx\n"
+      "addl   $0x7fffffff, %%edx\n"
+
+      /* Prepare syscall parameters. */
+      "pushl  %[sig]\n"
+      "pushl  %[pid]\n"
+      "pushl  $0xdeadbeef\n"
+      "movl   %[scall], %%eax\n"
+
+      /* Trigger the signal handler. */
+      "int    $0x91\n"
+      "pushfl\n"
+      "popl   %%edx\n"
+      "addl   $12, %%esp\n"
+      : "=d" (eflags)
+      : [scall] "i" (SYS_kill), [pid] "a" (pid), [sig] "i" (SIGUSR1)
+      : "cc", "memory");
+
+   printf("Values in the signal handler:\n");
+   printf("  overflow=%d, sign=%d\n",
+          OBIT(uc.uc_mcontext.gregs[EFL]), SBIT(uc.uc_mcontext.gregs[EFL]));
+
+   printf("Values after the return from the signal handler:\n");
+   printf("  overflow=%d, sign=%d\n", OBIT(eflags), SBIT(eflags));
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/x86-solaris/context_eflags.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/x86-solaris/context_eflags.stderr.exp
diff --git a/memcheck/tests/x86-solaris/context_eflags.stdout.exp b/memcheck/tests/x86-solaris/context_eflags.stdout.exp
new file mode 100644
index 0000000..8ad7bac
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_eflags.stdout.exp
@@ -0,0 +1,4 @@
+Values in the signal handler:
+  overflow=1, sign=1
+Values after the return from the signal handler:
+  overflow=1, sign=1
diff --git a/memcheck/tests/x86-solaris/context_eflags.vgtest b/memcheck/tests/x86-solaris/context_eflags.vgtest
new file mode 100644
index 0000000..20378e9
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_eflags.vgtest
@@ -0,0 +1,2 @@
+prog: context_eflags
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/x86-solaris/context_eflags2.c b/memcheck/tests/x86-solaris/context_eflags2.c
new file mode 100644
index 0000000..4f37693
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_eflags2.c
@@ -0,0 +1,80 @@
+/* x86 variant of the amd64-solaris/context_rflags2.c test. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+#define OBIT(eflags) (!!((eflags) & (1 << 11)))
+#define SBIT(eflags) (!!((eflags) & (1 << 7)))
+
+static siginfo_t si;
+static ucontext_t uc;
+
+void break_out(void);
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   si = *sip;
+   uc = *ucp;
+
+   /* Break out of the endless loop. */
+   *(uintptr_t*)&ucp->uc_mcontext.gregs[EIP] = (uintptr_t)break_out;
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   int eflags;
+   int x1;
+
+   /* Uninitialised, but we know px[0] is 0x0. */
+   int *px = malloc(sizeof(*px));
+   x1 = px[0] + 1;
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGALRM, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   alarm(2);
+
+   __asm__ __volatile__(
+      /* Set overflow and sign flags. */
+      "movl   %[x1], %%edx\n"
+      "addl   $0x7fffffff, %%edx\n"
+
+      /* Loopity loop, this is where the SIGALRM is triggered. */
+      "1:\n"
+      "jmp    1b\n"
+
+      "break_out:\n"
+      "pushfl\n"
+      "popl   %%edx\n"
+      : "=d" (eflags)
+      : [x1] "m" (x1)
+      : "cc", "memory");
+
+   /* Check that the overflow and sign flags are uninitialised.
+
+      Note: This actually fails because the eflags are only approximate
+      (always initialised) in the signal handler. */
+   if (!OBIT(uc.uc_mcontext.gregs[EFL]) || !SBIT(uc.uc_mcontext.gregs[EFL]))
+      assert(0);
+
+   /* Check that the overflow and sign flags are uninitialised. */
+   if (!OBIT(eflags) || !SBIT(eflags))
+      assert(0);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/x86-solaris/context_eflags2.stderr.exp b/memcheck/tests/x86-solaris/context_eflags2.stderr.exp
new file mode 100644
index 0000000..ce2b2e7
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_eflags2.stderr.exp
@@ -0,0 +1,12 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_eflags2.c:75)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_eflags2.c:35)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_eflags2.c:75)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_eflags2.c:35)
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/x86-solaris/context_eflags2.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/x86-solaris/context_eflags2.stdout.exp
diff --git a/memcheck/tests/x86-solaris/context_eflags2.vgtest b/memcheck/tests/x86-solaris/context_eflags2.vgtest
new file mode 100644
index 0000000..bd57570
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_eflags2.vgtest
@@ -0,0 +1,2 @@
+prog: context_eflags2
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/x86-solaris/context_fpu.c b/memcheck/tests/x86-solaris/context_fpu.c
new file mode 100644
index 0000000..6d618ff
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_fpu.c
@@ -0,0 +1,116 @@
+/* x86 variant of the amd64-solaris/context_fpu.c test. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+static siginfo_t si;
+static ucontext_t uc;
+static float inhandler[8];
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   int i;
+
+   si = *sip;
+   uc = *ucp;
+
+   /* Reset the FP stack so it's possible to push other values onto it.  (It
+      is fully filled in main() before triggering the signal handler).  Note
+      that VEX also clears all FP values when the finit instruction is
+      executed.  This provides another level of validation that the restore
+      code is correct. */
+   __asm__ __volatile__(
+      "finit\n");
+
+   /* Convert 80b values in mcontext to 32b values in the inhandler array. */
+   for (i = 0; i < 8; i++) {
+      __asm__ __volatile__(
+         "fldt   %[in]\n"
+         "fstps  %[out]\n"
+         : [out] "=m" (inhandler[i])
+         : [in] "m" (*((char*)&ucp->uc_mcontext.fpregs.fp_reg_set.fpchip_state
+                       + 28 + i * 10)));
+   }
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   pid_t pid;
+   float out[8];
+   float x0;
+
+   /* Uninitialised, but we know px[0] is 0x0. */
+   float *px = malloc(sizeof(*px));
+   x0 = px[0];
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   pid = getpid();
+
+   __asm__ __volatile__(
+      /* Set values in the FP stack. */
+      "flds   %[x0]\n"
+      "fld1\n"
+      "flds   %[x0]\n"
+      "fld1\n"
+      "flds   %[x0]\n"
+      "fld1\n"
+      "flds   %[x0]\n"
+      "fld1\n"
+
+      /* Prepare syscall parameters. */
+      "pushl  %[sig]\n"
+      "pushl  %[pid]\n"
+      "pushl  $0xdeadbeef\n"
+      "movl   %[scall], %%eax\n"
+
+      /* Trigger the signal handler. */
+      "int    $0x91\n"
+      "addl   $12, %%esp\n"
+      "fstps  0x00 + %[out]\n"
+      "fstps  0x04 + %[out]\n"
+      "fstps  0x08 + %[out]\n"
+      "fstps  0x0c + %[out]\n"
+      "fstps  0x10 + %[out]\n"
+      "fstps  0x14 + %[out]\n"
+      "fstps  0x18 + %[out]\n"
+      "fstps  0x1c + %[out]\n"
+      : [out] "=m" (out[0])
+      : [scall] "i" (SYS_kill), [pid] "a" (pid), [sig] "i" (SIGUSR1),
+        [x0] "m" (x0)
+      : "edx", "cc", "memory");
+
+   printf("Values in the signal handler:\n");
+   printf("  fp[0]=%f, fp[2]=%f, fp[4]=%f, fp[6]=%f\n",
+          inhandler[0], inhandler[2], inhandler[4], inhandler[6]);
+   /* Check that inhandler[1], inhandler[3], inhandler[5] and inhandler[7]
+      contain uninitialised values (origin is px[0]). */
+   if (inhandler[1] || inhandler[3] || inhandler[5] || inhandler[7])
+      assert(0);
+
+   printf("Values after the return from the signal handler:\n");
+   printf("  fp[0]=%f, fp[2]=%f, fp[4]=%f, fp[6]=%f\n",
+          out[0], out[2], out[4], out[6]);
+   /* Check that out[1], out[3], out[5] and out[7] contain uninitialised
+      values (origin is px[0]). */
+   if (out[1] || out[3] || out[5] || out[7])
+      assert(0);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/x86-solaris/context_fpu.stderr.exp b/memcheck/tests/x86-solaris/context_fpu.stderr.exp
new file mode 100644
index 0000000..d770097
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_fpu.stderr.exp
@@ -0,0 +1,96 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:103)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:103)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:103)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:103)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:103)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:103)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:103)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:103)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:111)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:111)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:111)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:111)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:111)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:111)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:111)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_fpu.c:111)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_fpu.c:49)
+
diff --git a/memcheck/tests/x86-solaris/context_fpu.stdout.exp b/memcheck/tests/x86-solaris/context_fpu.stdout.exp
new file mode 100644
index 0000000..2c3bf1d
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_fpu.stdout.exp
@@ -0,0 +1,4 @@
+Values in the signal handler:
+  fp[0]=1.000000, fp[2]=1.000000, fp[4]=1.000000, fp[6]=1.000000
+Values after the return from the signal handler:
+  fp[0]=1.000000, fp[2]=1.000000, fp[4]=1.000000, fp[6]=1.000000
diff --git a/memcheck/tests/x86-solaris/context_fpu.vgtest b/memcheck/tests/x86-solaris/context_fpu.vgtest
new file mode 100644
index 0000000..8a3955d
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_fpu.vgtest
@@ -0,0 +1,2 @@
+prog: context_fpu
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/x86-solaris/context_gpr.c b/memcheck/tests/x86-solaris/context_gpr.c
new file mode 100644
index 0000000..6535ea3
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_gpr.c
@@ -0,0 +1,92 @@
+/* x86 variant of the amd64-solaris/context_gpr.c test. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+static siginfo_t si;
+static ucontext_t uc;
+/* x0 is always zero, but is visible to Valgrind as uninitialised. */
+static int x0;
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   si = *sip;
+   uc = *ucp;
+
+   ucp->uc_mcontext.gregs[ECX] = x0;
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   pid_t pid;
+   int eax, ebx, ecx, edx, esi, edi;
+   int y0;
+
+   /* Uninitialised, but we know px[0] is 0x0. */
+   int *px = malloc(sizeof(*px));
+   x0 = px[0];
+
+   /* Uninitialised, but we know py[0] is 0x0. */
+   int *py = malloc(sizeof(*py));
+   y0 = py[0];
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   pid = getpid();
+
+   __asm__ __volatile__(
+      /* Set values in general purpose registers. */
+      "movl   %[y0], %%ebx\n"
+      "movl   $0xf1, %%ecx\n"
+      "movl   $0xf2, %%edx\n"
+      "movl   $0xf3, %%esi\n"
+      "movl   $0xf4, %%edi\n"
+
+      /* Prepare syscall parameters. */
+      "pushl  %[sig]\n"
+      "pushl  %[pid]\n"
+      "pushl  $0xdeadbeef\n"
+      "movl   %[scall], %%eax\n"
+
+      /* Trigger the signal handler. */
+      "int    $0x91\n"
+      "addl   $12, %%esp\n"
+      : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx), "=S" (esi),
+        "=D" (edi)
+      : [scall] "i" (SYS_kill), [pid] "a" (pid), [sig] "i" (SIGUSR1),
+        [y0] "m" (y0)
+      : "cc", "memory");
+
+   printf("Values in the signal handler:\n");
+   printf("  eax=%#x, edx=%#x, esi=%#x, edi=%#x\n",
+          uc.uc_mcontext.gregs[EAX], uc.uc_mcontext.gregs[EDX],
+          uc.uc_mcontext.gregs[ESI], uc.uc_mcontext.gregs[EDI]);
+   /* Check that ebx contains an uninitialised value (origin is py[0]). */
+   if (uc.uc_mcontext.gregs[EBX])
+      assert(0);
+
+   printf("Values after the return from the signal handler:\n");
+   printf("  eax=%#x, edx=%#x, esi=%#x, edi=%#x\n", eax, edx, esi, edi);
+   /* Check that ebx and ecx contain uninitialised values (origin is py[0]
+      and px[0], respectively). */
+   if (ebx || ecx)
+      assert(0);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/x86-solaris/context_gpr.stderr.exp b/memcheck/tests/x86-solaris/context_gpr.stderr.exp
new file mode 100644
index 0000000..0f24498
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_gpr.stderr.exp
@@ -0,0 +1,18 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_gpr.c:80)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_gpr.c:36)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_gpr.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_gpr.c:36)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_gpr.c:87)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_gpr.c:32)
+
diff --git a/memcheck/tests/x86-solaris/context_gpr.stdout.exp b/memcheck/tests/x86-solaris/context_gpr.stdout.exp
new file mode 100644
index 0000000..e8ff239
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_gpr.stdout.exp
@@ -0,0 +1,4 @@
+Values in the signal handler:
+  eax=0, edx=0, esi=0xf3, edi=0xf4
+Values after the return from the signal handler:
+  eax=0, edx=0, esi=0xf3, edi=0xf4
diff --git a/memcheck/tests/x86-solaris/context_gpr.vgtest b/memcheck/tests/x86-solaris/context_gpr.vgtest
new file mode 100644
index 0000000..df56f58
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_gpr.vgtest
@@ -0,0 +1,2 @@
+prog: context_gpr
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/x86-solaris/context_sse.c b/memcheck/tests/x86-solaris/context_sse.c
new file mode 100644
index 0000000..adea470
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_sse.c
@@ -0,0 +1,106 @@
+/* x86 variant of the amd64-solaris/context_sse.c test. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/ucontext.h>
+
+static siginfo_t si;
+static ucontext_t uc;
+/* x0 is always zero, but is visible to Valgrind as uninitialised. */
+static upad128_t x0;
+static upad128_t d0 = {0};
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   si = *sip;
+   uc = *ucp;
+
+   ucp->uc_mcontext.fpregs.fp_reg_set.fpchip_state.xmm[0] = d0;
+   ucp->uc_mcontext.fpregs.fp_reg_set.fpchip_state.xmm[1] = x0;
+}
+
+int main(void)
+{
+   struct sigaction sa;
+   pid_t pid;
+   upad128_t out[8];
+   upad128_t y0;
+   struct fpchip_state *fs = &uc.uc_mcontext.fpregs.fp_reg_set.fpchip_state;
+
+   /* Uninitialised, but we know px[0] is 0x0. */
+   upad128_t *px = malloc(sizeof(*px));
+   x0 = px[0];
+
+   /* Uninitialised, but we know py[0] is 0x0. */
+   upad128_t *py = malloc(sizeof(*py));
+   y0 = py[0];
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   pid = getpid();
+
+   __asm__ __volatile__(
+      /* Set values in the SSE registers. */
+      "movups %[y0], %%xmm0\n"
+      "movups %[d0], %%xmm1\n"
+      "movups %[d0], %%xmm2\n"
+      "movups %[y0], %%xmm3\n"
+      "movups %[y0], %%xmm4\n"
+      "movups %[d0], %%xmm5\n"
+      "movups %[d0], %%xmm6\n"
+      "movups %[y0], %%xmm7\n"
+
+      /* Prepare syscall parameters. */
+      "pushl  %[sig]\n"
+      "pushl  %[pid]\n"
+      "pushl  $0xdeadbeef\n"
+      "movl   %[scall], %%eax\n"
+
+      /* Trigger the signal handler. */
+      "int    $0x91\n"
+      "addl   $12, %%esp\n"
+      "movups %%xmm0, 0x00 + %[out]\n"
+      "movups %%xmm1, 0x10 + %[out]\n"
+      "movups %%xmm2, 0x20 + %[out]\n"
+      "movups %%xmm3, 0x30 + %[out]\n"
+      "movups %%xmm4, 0x40 + %[out]\n"
+      "movups %%xmm5, 0x50 + %[out]\n"
+      "movups %%xmm6, 0x60 + %[out]\n"
+      "movups %%xmm7, 0x70 + %[out]\n"
+      : [out] "=m" (out[0])
+      : [scall] "i" (SYS_kill), [pid] "a" (pid), [sig] "i" (SIGUSR1),
+        [y0] "m" (y0), [d0] "m" (d0)
+      : "edx", "cc", "memory");
+
+   printf("Values in the signal handler:\n");
+   printf("  xmm1=%Lf, xmm2=%Lf, xmm5=%Lf, xmm6=%Lf\n",
+          fs->xmm[1]._q, fs->xmm[2]._q, fs->xmm[5]._q, fs->xmm[6]._q);
+   /* Check that fs->xmm[0], fs->xmm[3], fs->xmm[4] and fs->xmm[7] contain
+      uninitialised values (origin is py[0]). */
+   if (fs->xmm[0]._q || fs->xmm[3]._q || fs->xmm[4]._q || fs->xmm[7]._q)
+      assert(0);
+
+   printf("Values after the return from the signal handler:\n");
+   printf("  xmm0=%Lf, xmm2=%Lf, xmm5=%Lf, xmm6=%Lf\n",
+          out[0]._q, out[2]._q, out[5]._q, out[6]._q);
+   /* Check that out[1], out[3], out[4] and out[7] contain uninitialised
+      values (origin is px[0]). */
+   if (out[1]._q || out[3]._q || out[4]._q || out[7]._q)
+      assert(0);
+
+   return 0;
+}
+
diff --git a/memcheck/tests/x86-solaris/context_sse.stderr.exp b/memcheck/tests/x86-solaris/context_sse.stderr.exp
new file mode 100644
index 0000000..d7d5614
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_sse.stderr.exp
@@ -0,0 +1,96 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:93)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:93)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:93)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:93)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:93)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:93)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:93)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:93)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:101)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:35)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:101)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:35)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:101)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:101)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:101)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:101)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:101)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (context_sse.c:101)
+ Uninitialised value was created by a heap allocation
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (context_sse.c:39)
+
diff --git a/memcheck/tests/x86-solaris/context_sse.stdout.exp b/memcheck/tests/x86-solaris/context_sse.stdout.exp
new file mode 100644
index 0000000..2cefcc8
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_sse.stdout.exp
@@ -0,0 +1,4 @@
+Values in the signal handler:
+  xmm1=0.000000, xmm2=0.000000, xmm5=0.000000, xmm6=0.000000
+Values after the return from the signal handler:
+  xmm0=0.000000, xmm2=0.000000, xmm5=0.000000, xmm6=0.000000
diff --git a/memcheck/tests/x86-solaris/context_sse.vgtest b/memcheck/tests/x86-solaris/context_sse.vgtest
new file mode 100644
index 0000000..97d6be1
--- /dev/null
+++ b/memcheck/tests/x86-solaris/context_sse.vgtest
@@ -0,0 +1,2 @@
+prog: context_sse
+vgopts: -q --track-origins=yes
diff --git a/memcheck/tests/x86-solaris/filter_stderr b/memcheck/tests/x86-solaris/filter_stderr
new file mode 100755
index 0000000..a778e97
--- /dev/null
+++ b/memcheck/tests/x86-solaris/filter_stderr
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr "$@"
diff --git a/memcheck/tests/x86-solaris/ldsoexec.c b/memcheck/tests/x86-solaris/ldsoexec.c
new file mode 100644
index 0000000..9b6bdc2
--- /dev/null
+++ b/memcheck/tests/x86-solaris/ldsoexec.c
@@ -0,0 +1,3 @@
+int main(void) {
+    return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/x86-solaris/ldsoexec.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/x86-solaris/ldsoexec.stderr.exp
diff --git a/memcheck/tests/x86-solaris/ldsoexec.vgtest b/memcheck/tests/x86-solaris/ldsoexec.vgtest
new file mode 100644
index 0000000..5fa0460
--- /dev/null
+++ b/memcheck/tests/x86-solaris/ldsoexec.vgtest
@@ -0,0 +1,2 @@
+prog: /lib/ld.so.1 ./ldsoexec
+vgopts: -q
diff --git a/memcheck/tests/x86-solaris/scalar.c b/memcheck/tests/x86-solaris/scalar.c
new file mode 100644
index 0000000..3894d2f
--- /dev/null
+++ b/memcheck/tests/x86-solaris/scalar.c
@@ -0,0 +1,116 @@
+/* Basic syscall test for Solaris/x86 specific syscalls. */
+
+#include "../solaris/scalar.h"
+
+#include <string.h>
+#include <sys/fcntl.h>
+#include <sys/statvfs.h>
+
+/* Helper functions.  These are necessary if we've got two tests for a single
+   syscall.  In that case, Memcheck can sometimes merge error messages.  Doing
+   each test in its own function prevents that. */
+__attribute__((noinline))
+static void sys_openat64(void)
+{
+   GO(SYS_openat64, "(3-args) 3s 1m");
+   SY(SYS_openat64, x0 - 1, x0, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_openat642(void)
+{
+   GO(SYS_openat64, "(4-args) 4s 1m");
+   SY(SYS_openat64, x0 - 1, x0, x0 | O_CREAT, x0); FAILx(EBADF);
+}
+
+__attribute__((noinline))
+static void sys_statvfs64(void)
+{
+   GO(SYS_statvfs64, "2s 2m");
+   SY(SYS_statvfs64, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static int sys_statvfs642(void)
+{
+   const char path[] = "/";
+   struct statvfs64 stats;
+
+   GO(SYS_statvfs64, "4s 0m");
+   SY(SYS_statvfs64, x0 + path, x0 + &stats); SUCC;
+
+   size_t basetype_len = strlen(stats.f_basetype);
+   size_t fstr_len = strlen(stats.f_fstr);
+
+   /* Now check that memory after the strings is reported uninitialized. */
+   int x = 0;
+   if (stats.f_basetype[basetype_len + 2] != ' ') x = -1; else x = -2;
+   if (stats.f_fstr[fstr_len + 2] != ' ') x = -3; else x = -4;
+   return x;
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_fstatat64              67 */
+   GO(SYS_fstatat64, "4s 2m");
+   SY(SYS_fstatat64, x0 - 1, x0 + 1, x0, x0); FAILx(EBADF);
+
+   /* SYS_openat64               69 */
+   sys_openat64();
+   sys_openat642();
+
+   /* SYS_llseek                175 */
+   GO(SYS_llseek, "3s 0m");
+   SY(SYS_llseek, x0 - 1, x0, x0); FAILx(EBADF);
+
+   /* SYS_getdents64            213 */
+   GO(SYS_getdents64, "3s 1m");
+   SY(SYS_getdents64, x0, x0, x0 + 1); FAIL;
+
+   /* SYS_mmap64                214 */
+   GO(SYS_mmap64, "7s 0m");
+   SY(SYS_mmap64, x0, x0, x0, x0, x0, x0, x0); FAILx(EINVAL);
+
+   /* SYS_stat64                215 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_lstat64               216 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_fstat64               217 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   /* SYS_statvfs64             218 */
+   sys_statvfs64();
+   sys_statvfs642();
+
+   /* SYS_fstatvfs64            219 */
+   GO(SYS_fstatvfs64, "2s 1m");
+   SY(SYS_fstatvfs64, x0 - 1, x0 + 1); FAILx(EBADF);
+
+   /* SYS_setrlimit64           220 */
+   GO(SYS_setrlimit64, "2s 1m");
+   SY(SYS_setrlimit64, x0, x0); FAIL;
+
+   /* SYS_getrlimit64           221 */
+   GO(SYS_getrlimit64, "2s 1m");
+   SY(SYS_getrlimit64, x0, x0); FAIL;
+
+   /* SYS_pread64               222 */
+   GO(SYS_pread64, "5s 1m");
+   SY(SYS_pread64, x0 - 1, x0, x0 + 1, x0, x0); FAILx(EBADF);
+
+   /* SYS_pwrite64              223 */
+   GO(SYS_pwrite64, "5s 1m");
+   SY(SYS_pwrite64, x0 - 1, x0, x0 + 1, x0, x0); FAILx(EBADF);
+
+   /* SYS_open64                225 */
+   /* Tested in x86-solaris/scalar_obsolete.c. */
+
+   return 0;
+}
+
diff --git a/memcheck/tests/x86-solaris/scalar.stderr.exp b/memcheck/tests/x86-solaris/scalar.stderr.exp
new file mode 100644
index 0000000..6599aaf
--- /dev/null
+++ b/memcheck/tests/x86-solaris/scalar.stderr.exp
@@ -0,0 +1,225 @@
+---------------------------------------------------------
+ 67:           SYS_fstatat64 4s 2m
+---------------------------------------------------------
+Syscall param fstatat64(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatat64(path) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatat64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatat64(flag) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatat64(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fstatat64(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 69:            SYS_openat64 (3-args) 3s 1m
+---------------------------------------------------------
+Syscall param openat64(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param openat64(filename) contains uninitialised byte(s)
+   ...
+
+Syscall param openat64(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param openat64(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 69:            SYS_openat64 (4-args) 4s 1m
+---------------------------------------------------------
+Syscall param openat64(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param openat64(filename) contains uninitialised byte(s)
+   ...
+
+Syscall param openat64(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param openat64(mode) contains uninitialised byte(s)
+   ...
+
+Syscall param openat64(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+175:              SYS_llseek 3s 0m
+---------------------------------------------------------
+Syscall param llseek(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param llseek(offset_low) contains uninitialised byte(s)
+   ...
+
+Syscall param llseek(offset_high) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+213:          SYS_getdents64 3s 1m
+---------------------------------------------------------
+Syscall param getdents64(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param getdents64(dirp) contains uninitialised byte(s)
+   ...
+
+Syscall param getdents64(count) contains uninitialised byte(s)
+   ...
+
+Syscall param getdents64(dirp) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+214:              SYS_mmap64 7s 0m
+---------------------------------------------------------
+Syscall param mmap(start) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(length) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(prot) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(offlo) contains uninitialised byte(s)
+   ...
+
+Syscall param mmap(offhi) contains uninitialised byte(s)
+   ...
+
+---------------------------------------------------------
+218:           SYS_statvfs64 2s 2m
+---------------------------------------------------------
+Syscall param statvfs64(path) contains uninitialised byte(s)
+   ...
+
+Syscall param statvfs64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param statvfs64(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param statvfs64(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+218:           SYS_statvfs64 4s 0m
+---------------------------------------------------------
+Syscall param statvfs64(path) contains uninitialised byte(s)
+   ...
+
+Syscall param statvfs64(buf) contains uninitialised byte(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+Conditional jump or move depends on uninitialised value(s)
+   ...
+
+---------------------------------------------------------
+219:          SYS_fstatvfs64 2s 1m
+---------------------------------------------------------
+Syscall param fstatvfs64(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatvfs64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param fstatvfs64(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+220:         SYS_setrlimit64 2s 1m
+---------------------------------------------------------
+Syscall param setrlimit64(resource) contains uninitialised byte(s)
+   ...
+
+Syscall param setrlimit64(rlim) contains uninitialised byte(s)
+   ...
+
+Syscall param setrlimit64(rlim) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+221:         SYS_getrlimit64 2s 1m
+---------------------------------------------------------
+Syscall param getrlimit64(resource) contains uninitialised byte(s)
+   ...
+
+Syscall param getrlimit64(rlim) contains uninitialised byte(s)
+   ...
+
+Syscall param getrlimit64(rlim) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+222:             SYS_pread64 5s 1m
+---------------------------------------------------------
+Syscall param pread64(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param pread64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param pread64(count) contains uninitialised byte(s)
+   ...
+
+Syscall param pread64(offset_1) contains uninitialised byte(s)
+   ...
+
+Syscall param pread64(offset_2) contains uninitialised byte(s)
+   ...
+
+Syscall param pread64(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+223:            SYS_pwrite64 5s 1m
+---------------------------------------------------------
+Syscall param pwrite64(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param pwrite64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param pwrite64(count) contains uninitialised byte(s)
+   ...
+
+Syscall param pwrite64(offset_1) contains uninitialised byte(s)
+   ...
+
+Syscall param pwrite64(offset_2) contains uninitialised byte(s)
+   ...
+
+Syscall param pwrite64(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/x86-solaris/scalar.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/x86-solaris/scalar.stdout.exp
diff --git a/memcheck/tests/x86-solaris/scalar.vgtest b/memcheck/tests/x86-solaris/scalar.vgtest
new file mode 100644
index 0000000..b80f314
--- /dev/null
+++ b/memcheck/tests/x86-solaris/scalar.vgtest
@@ -0,0 +1,3 @@
+prog: scalar
+vgopts: -q --error-limit=no
+stderr_filter_args:
diff --git a/memcheck/tests/x86-solaris/scalar_obsolete.c b/memcheck/tests/x86-solaris/scalar_obsolete.c
new file mode 100644
index 0000000..ecb68e0
--- /dev/null
+++ b/memcheck/tests/x86-solaris/scalar_obsolete.c
@@ -0,0 +1,49 @@
+/* Test for syscalls that are available on illumos but are removed on
+   Solaris 11.  This test is compiled only on illumos. */
+
+#include "../solaris/scalar.h"
+
+#include <sys/fcntl.h>
+
+/* Helper functions.  These are necessary if we've got two tests for a single
+   syscall.  In that case, Memcheck can sometimes merge error messages.  Doing
+   each test in its own function prevents that. */
+__attribute__((noinline))
+static void sys_open64(void)
+{
+   GO(SYS_open64, "(2-args) 2s 1m");
+   SY(SYS_open64, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_open642(void)
+{
+   GO(SYS_open64, "(3-args) 3s 1m");
+   SY(SYS_open64, x0, x0 | O_CREAT, x0); FAIL;
+}
+
+int main(void)
+{
+   /* Uninitialised, but we know px[0] is 0x0. */
+   long *px = malloc(sizeof(long));
+   x0 = px[0];
+
+   /* SYS_stat64                215 */
+   GO(SYS_stat64, "2s 2m");
+   SY(SYS_stat64, x0, x0); FAIL;
+
+   /* SYS_lstat64               216 */
+   GO(SYS_lstat64, "2s 2m");
+   SY(SYS_lstat64, x0, x0); FAIL;
+
+   /* SYS_fstat64               217 */
+   GO(SYS_fstat64, "2s 1m");
+   SY(SYS_fstat64, x0, x0); FAIL;
+
+   /* SYS_open64                225 */
+   sys_open64();
+   sys_open642();
+
+   return 0;
+}
+
diff --git a/memcheck/tests/x86-solaris/scalar_obsolete.stderr.exp b/memcheck/tests/x86-solaris/scalar_obsolete.stderr.exp
new file mode 100644
index 0000000..6050717
--- /dev/null
+++ b/memcheck/tests/x86-solaris/scalar_obsolete.stderr.exp
@@ -0,0 +1,76 @@
+---------------------------------------------------------
+215:              SYS_stat64 2s 2m
+---------------------------------------------------------
+Syscall param stat64(path) contains uninitialised byte(s)
+   ...
+
+Syscall param stat64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param stat64(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat64(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+216:             SYS_lstat64 2s 2m
+---------------------------------------------------------
+Syscall param lstat64(path) contains uninitialised byte(s)
+   ...
+
+Syscall param lstat64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param lstat64(path) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat64(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+217:             SYS_fstat64 2s 1m
+---------------------------------------------------------
+Syscall param fstat64(fildes) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat64(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat64(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+225:              SYS_open64 (2-args) 2s 1m
+---------------------------------------------------------
+Syscall param open64(filename) contains uninitialised byte(s)
+   ...
+
+Syscall param open64(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param open(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+225:              SYS_open64 (3-args) 3s 1m
+---------------------------------------------------------
+Syscall param open64(filename) contains uninitialised byte(s)
+   ...
+
+Syscall param open64(flags) contains uninitialised byte(s)
+   ...
+
+Syscall param open64(mode) contains uninitialised byte(s)
+   ...
+
+Syscall param open(filename) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/memcheck/tests/x86-solaris/scalar_obsolete.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to memcheck/tests/x86-solaris/scalar_obsolete.stdout.exp
diff --git a/memcheck/tests/x86-solaris/scalar_obsolete.vgtest b/memcheck/tests/x86-solaris/scalar_obsolete.vgtest
new file mode 100644
index 0000000..4541cb9
--- /dev/null
+++ b/memcheck/tests/x86-solaris/scalar_obsolete.vgtest
@@ -0,0 +1,4 @@
+prereq: test -e scalar_obsolete
+prog: scalar_obsolete
+vgopts: -q --error-limit=no
+stderr_filter_args:
diff --git a/memcheck/tests/x86/fprem.c b/memcheck/tests/x86/fprem.c
index 864c9b0..c6cd748 100644
--- a/memcheck/tests/x86/fprem.c
+++ b/memcheck/tests/x86/fprem.c
@@ -6,7 +6,7 @@
 
 double do_fprem ( void )
 {
-  double res;
+  double res = 0.0;
   __asm__ __volatile__(
     "ffree %%st(0)\n\t"
     "ffree %%st(1)\n\t"
@@ -21,7 +21,7 @@
 
 double do_fprem1 ( void )
 {
-  double res;
+  double res = 0.0;
   __asm__ __volatile__(
     "ffree %%st(0)\n\t"
     "ffree %%st(1)\n\t"
@@ -36,7 +36,7 @@
 
 double do_fsincos ( void )
 {
-  double res;
+  double res = 0.0;
   __asm__ __volatile__(
     "fldln2\n\t"
     "fsincos\n\t"
diff --git a/memcheck/tests/x86/pushfpopf_s.S b/memcheck/tests/x86/pushfpopf_s.S
index 067a6da..7b219f6 100644
--- a/memcheck/tests/x86/pushfpopf_s.S
+++ b/memcheck/tests/x86/pushfpopf_s.S
@@ -1,13 +1,13 @@
 #include "tests/asm.h"
 
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 	.version	"01.01"
 #endif
 gcc2_compiled.:
 .text
 	.align 4
 .globl VG_SYM_ASM(fooble)
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 	.type	VG_SYM_ASM(fooble),@function
 #endif
 VG_SYM_ASM(fooble):
@@ -42,7 +42,7 @@
 	popl	%ebp
 	ret
 .Lfe1:
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 	.size	VG_SYM_ASM(fooble),.Lfe1-VG_SYM_ASM(fooble)
 #endif
 	.ident	"GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)"
diff --git a/memcheck/tests/x86/tronical.S b/memcheck/tests/x86/tronical.S
index a2122c7..e5bb400 100644
--- a/memcheck/tests/x86/tronical.S
+++ b/memcheck/tests/x86/tronical.S
@@ -52,7 +52,7 @@
 #include "tests/asm.h"
 
 	.file	"tronical.c"
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 	.version	"01.01"
 #endif
 gcc2_compiled.:
diff --git a/memcheck/tests/xml1.c b/memcheck/tests/xml1.c
index 6cab287..0cbbb03 100644
--- a/memcheck/tests/xml1.c
+++ b/memcheck/tests/xml1.c
@@ -46,7 +46,15 @@
 
 int main ( void )
 {
-  return frame1() - 1;
+  int ret = frame1() - 1;
+
+#if defined(VGO_solaris)
+  /* Avoid reporting possible memory leak on finish when both FILE->base
+     and FILE->ptr point to the middle of a buffer allocated in _findbuf()
+     for stdout. */
+  fcloseall();
+#endif
+  return ret;
 }
 
 /*
diff --git a/memcheck/tests/xml1.stderr.exp-s390x-mvc b/memcheck/tests/xml1.stderr.exp-s390x-mvc
index ee34823..e1abac2 100644
--- a/memcheck/tests/xml1.stderr.exp-s390x-mvc
+++ b/memcheck/tests/xml1.stderr.exp-s390x-mvc
@@ -334,6 +334,7 @@
     </frame>
   </stack>
   <auxwhat>Address 0x........ is on thread 1's stack</auxwhat>
+  <auxwhat>in frame #1, created by frame3 (xml1.c:7)</auxwhat>
 </error>
 
 <error>
diff --git a/memcheck/tests/xml1.vgtest b/memcheck/tests/xml1.vgtest
index 4d83a9f..6585b18 100644
--- a/memcheck/tests/xml1.vgtest
+++ b/memcheck/tests/xml1.vgtest
@@ -1,3 +1,3 @@
 prog: xml1
-vgopts: --xml=yes --xml-fd=2 --log-file=/dev/null
+vgopts: --xml=yes --xml-fd=2 --log-file=/dev/null --keep-stacktraces=alloc-then-free
 stderr_filter: filter_xml
diff --git a/mpi/Makefile.am b/mpi/Makefile.am
index c15680b..fca5d64 100644
--- a/mpi/Makefile.am
+++ b/mpi/Makefile.am
@@ -42,6 +42,10 @@
  MPI_FLAG_M3264_PRI = $(AM_FLAG_M3264_PRI)
  MPI_FLAG_M3264_SEC = $(AM_FLAG_M3264_SEC)
 endif
+if VGCONF_OS_IS_SOLARIS
+ MPI_FLAG_M3264_PRI = $(AM_FLAG_M3264_PRI)
+ MPI_FLAG_M3264_SEC = $(AM_FLAG_M3264_SEC)
+endif
 
 
 if BUILD_MPIWRAP_PRI
diff --git a/mpi/libmpiwrap.c b/mpi/libmpiwrap.c
index a5349e0..cae725b 100644
--- a/mpi/libmpiwrap.c
+++ b/mpi/libmpiwrap.c
@@ -18,7 +18,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2006-2013 OpenWorks LLP.  All rights reserved.
+   Copyright (C) 2006-2015 OpenWorks LLP.  All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
@@ -417,6 +417,7 @@
    int err = PMPI_Get_count(status, datatype, &n);
    if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS) {
+      VALGRIND_MAKE_MEM_DEFINED(&n, sizeof(n));
       *recv_count = n;
       return True;
    } else {
diff --git a/nightly/bin/nightly b/nightly/bin/nightly
index 583e7a9..121e6a8 100755
--- a/nightly/bin/nightly
+++ b/nightly/bin/nightly
@@ -175,6 +175,9 @@
           "Running regression tests         " \
           "cd valgrind-$logfile && ${ABT_RUN_REGTEST}"
 
+   # Stash away the return code of the regression run
+   regrun_rc=$?
+
    # Grab some indicative text for the short log file -- if the regtests
    # succeeded, show their results.  If we didn't make it that far, show the
    # last 20 lines.
@@ -183,6 +186,14 @@
       echo "Regression test results follow" >> $logfile.short
       echo >> $logfile.short
       awk '/^== [0-9]+ tests/, /^$/ { print }' $logfile.verbose >> $logfile.short
+   # Check the return code of the regression run; we might have successfully
+   # run all tests but still failed in the post-regtest checks.
+      if [ $regrun_rc != "0" ]; then
+         echo >> $logfile.short
+         echo "Last 20 lines of verbose log follow" >> $logfile.short \
+         echo >> $logfile.short
+         tail -20 $logfile.verbose >> $logfile.short
+      fi
    ) || (
       echo >> $logfile.short
       echo "Last 20 lines of verbose log follow" >> $logfile.short \
diff --git a/none/nl_main.c b/none/nl_main.c
index 574486a..ffe19e1 100644
--- a/none/nl_main.c
+++ b/none/nl_main.c
@@ -7,7 +7,7 @@
    This file is part of Nulgrind, the minimal Valgrind tool,
    which does no instrumentation or analysis.
 
-   Copyright (C) 2002-2013 Nicholas Nethercote
+   Copyright (C) 2002-2015 Nicholas Nethercote
       njn@valgrind.org
 
    This program is free software; you can redistribute it and/or
@@ -56,7 +56,7 @@
    VG_(details_version)         (NULL);
    VG_(details_description)     ("the minimal Valgrind tool");
    VG_(details_copyright_author)(
-      "Copyright (C) 2002-2013, and GNU GPL'd, by Nicholas Nethercote.");
+      "Copyright (C) 2002-2015, and GNU GPL'd, by Nicholas Nethercote.");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
 
    VG_(details_avg_translation_sizeB) ( 275 );
diff --git a/none/tests/Makefile.am b/none/tests/Makefile.am
index 1dfcfc4..a4204d5 100644
--- a/none/tests/Makefile.am
+++ b/none/tests/Makefile.am
@@ -43,6 +43,9 @@
 if VGCONF_OS_IS_DARWIN
 SUBDIRS += darwin
 endif
+if VGCONF_OS_IS_SOLARIS
+SUBDIRS += solaris
+endif
 
 # Platform-specific tests
 if VGCONF_PLATFORMS_INCLUDE_AMD64_LINUX
@@ -51,9 +54,22 @@
 if VGCONF_PLATFORMS_INCLUDE_X86_LINUX
 SUBDIRS += x86-linux
 endif
+if VGCONF_PLATFORMS_INCLUDE_AMD64_DARWIN
+SUBDIRS += amd64-darwin
+endif
+if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
+SUBDIRS += x86-darwin
+endif
+if VGCONF_PLATFORMS_INCLUDE_AMD64_SOLARIS
+SUBDIRS += amd64-solaris
+endif
+if VGCONF_PLATFORMS_INCLUDE_X86_SOLARIS
+SUBDIRS += x86-solaris
+endif
 
 DIST_SUBDIRS = x86 amd64 ppc32 ppc64 arm arm64 s390x mips32 mips64 tilegx \
-               linux darwin amd64-linux x86-linux scripts .
+               linux darwin solaris amd64-linux x86-linux amd64-darwin \
+               x86-darwin amd64-solaris x86-solaris scripts .
 
 dist_noinst_SCRIPTS = \
 	filter_cmdline0 \
@@ -94,7 +110,8 @@
 	discard.vgtest \
 	empty-exe.vgtest empty-exe.stderr.exp \
 	exec-sigmask.vgtest exec-sigmask.stdout.exp \
-	exec-sigmask.stdout.exp2 exec-sigmask.stdout.exp3 exec-sigmask.stderr.exp \
+	exec-sigmask.stdout.exp2 exec-sigmask.stdout.exp3 \
+	exec-sigmask.stdout.exp-solaris exec-sigmask.stderr.exp \
 	execve.vgtest execve.stdout.exp execve.stderr.exp \
 	faultstatus.vgtest faultstatus.stderr.exp faultstatus.stderr.exp-s390x \
 	fcntl_setown.vgtest fcntl_setown.stdout.exp fcntl_setown.stderr.exp \
@@ -152,6 +169,7 @@
 	require-text-symbol-1.vgtest \
 		require-text-symbol-1.stderr.exp \
 	require-text-symbol-2.vgtest \
+		require-text-symbol-2.stderr.exp-libcso1 \
 		require-text-symbol-2.stderr.exp-libcso6 \
 	res_search.stderr.exp res_search.stdout.exp res_search.vgtest \
 	resolv.stderr.exp resolv.stdout.exp resolv.vgtest \
@@ -180,7 +198,7 @@
 	process_vm_readv_writev.stderr.exp process_vm_readv_writev.vgtest
 
 check_PROGRAMS = \
-	ansi args \
+	args \
 	async-sigs \
 	bitfield1 \
 	bug129866 bug234814 \
@@ -232,6 +250,11 @@
    check_PROGRAMS += rlimit64_nofile 
 endif
 
+# clang does not know -ansi
+if ! COMPILER_IS_CLANG
+   check_PROGRAMS += ansi
+endif
+
 if BUILD_IFUNC_TESTS
    check_PROGRAMS += ifunc
 endif
@@ -242,6 +265,14 @@
 # Extra stuff for C tests
 ansi_CFLAGS		= $(AM_CFLAGS) -ansi
 execve_CFLAGS		= $(AM_CFLAGS) @FLAG_W_NO_NONNULL@
+if VGCONF_OS_IS_SOLARIS
+fcntl_setown_LDADD	= -lsocket -lnsl
+fdleak_cmsg_CFLAGS	= $(AM_CFLAGS) -D_XOPEN_SOURCE=500
+fdleak_cmsg_LDADD	= -lsocket -lnsl
+fdleak_ipv4_LDADD	= -lsocket -lnsl
+fdleak_creat_LDADD	= -lsocket -lnsl
+fdleak_socketpair_LDADD	= -lsocket -lnsl
+endif
 floored_LDADD 		= -lm
 manythreads_LDADD	= -lpthread
 if VGCONF_OS_IS_DARWIN
@@ -250,10 +281,13 @@
  nestedfns_CFLAGS	= $(AM_CFLAGS)
  mq_LDADD		= -lrt
 endif
-libvex_test_LDADD       = ../../VEX/libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
+libvex_test_CFLAGS      = $(AM_CFLAGS) @FLAG_FSANITIZE@
+libvex_test_LDADD       = ../../VEX/libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a \
+			   @LIB_UBSAN@
+libvexmultiarch_test_CFLAGS= $(AM_CFLAGS) @FLAG_FSANITIZE@
 libvexmultiarch_test_LDADD = \
 	../../VEX/libvexmultiarch-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a \
-	../../VEX/libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
+	../../VEX/libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a @LIB_UBSAN@
 libvexmultiarch_test_SOURCES = libvex_test.c
 pth_atfork1_LDADD	= -lpthread
 pth_blockedsig_LDADD	= -lpthread
@@ -267,13 +301,29 @@
 pth_mutexspeed_LDADD	= -lpthread
 pth_once_LDADD		= -lpthread
 pth_rwlock_LDADD	= -lpthread
+pth_rwlock_CFLAGS	= $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+pth_rwlock_CFLAGS	+= --std=c99
+endif
 pth_stackalign_LDADD	= -lpthread
 res_search_LDADD        = -lresolv -lpthread
+resolv_CFLAGS		= $(AM_CFLAGS)
 resolv_LDADD            = -lresolv -lpthread
+if VGCONF_OS_IS_SOLARIS
+resolv_CFLAGS		+= -U_REENTRANT
+endif
 semlimit_LDADD		= -lpthread
+sha1_test_CFLAGS	= $(AM_CFLAGS)
+if VGCONF_OS_IS_SOLARIS
+sha1_test_CFLAGS	+= -Du_int32_t=uint32_t
+endif
 thread_exits_LDADD	= -lpthread
 threaded_fork_LDADD	= -lpthread
+threadederrno_CFLAGS	= $(AM_CFLAGS)
 threadederrno_LDADD	= -lpthread
+if VGCONF_OS_IS_SOLARIS
+threadederrno_CFLAGS	+= --std=c99
+endif
 tls_SOURCES		= tls.c tls2.c
 tls_DEPENDENCIES	= tls.so tls2.so
 tls_LDFLAGS		= -Wl,-rpath,$(abs_top_builddir)/none/tests
diff --git a/none/tests/allexec.c b/none/tests/allexec.c
index 527c36e..69e1208 100644
--- a/none/tests/allexec.c
+++ b/none/tests/allexec.c
@@ -19,9 +19,15 @@
 
 void test_allexec (char *exec)
 {
-   FORKEXECWAIT (execlp(exec, exec, NULL));
-   FORKEXECWAIT (execlp(exec, exec, "constant_arg1", "constant_arg2", NULL));
-   FORKEXECWAIT (execve(exec, NULL, environ));
+   FORKEXECWAIT (execlp(exec, exec, (char *) NULL));
+   FORKEXECWAIT (execlp(exec, exec, "constant_arg1", "constant_arg2",
+                        (char *) NULL));
+   {
+      /* Solaris requires that the argv parameter to execve() isn't NULL, so
+         set it.  Note that this isn't necessary on Linux. */
+      char *const argv[] = {exec, NULL};
+      FORKEXECWAIT (execve(exec, argv, environ));
+   }
 }
 
 
diff --git a/none/tests/amd64-darwin/Makefile.am b/none/tests/amd64-darwin/Makefile.am
new file mode 100644
index 0000000..b231b30
--- /dev/null
+++ b/none/tests/amd64-darwin/Makefile.am
@@ -0,0 +1,15 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = \
+	filter_stderr filter_minimal
+
+EXTRA_DIST = \
+	bug341419.vgtest bug341419.stderr.exp
+
+check_PROGRAMS = \
+	bug341419
+
+AM_CFLAGS    += @FLAG_M64@
+AM_CXXFLAGS  += @FLAG_M64@
+AM_CCASFLAGS += @FLAG_M64@
diff --git a/none/tests/amd64-darwin/bug341419.c b/none/tests/amd64-darwin/bug341419.c
new file mode 100644
index 0000000..e4fdacd
--- /dev/null
+++ b/none/tests/amd64-darwin/bug341419.c
@@ -0,0 +1,223 @@
+/* This changes the definition of ucontext_t */
+#define _XOPEN_SOURCE 1
+#include <stdio.h>
+#include <unistd.h>
+#include <signal.h>
+#include <string.h>
+#include <stdbool.h>
+#include <valgrind.h>
+
+#define offsetof(type, fld)	((unsigned long)&((type *)0)->fld)
+#define stringify(x)		#x
+
+static int verbose = 0;
+
+#define _ASSERT_OP(a, op, b) \
+    do { \
+	unsigned long long _a = (unsigned long long)(a); \
+	unsigned long long _b = (unsigned long long)(b); \
+	if (verbose) \
+	    fprintf(stderr, "%s:%d: ASSERT(" stringify(a) \
+		    " " stringify(op) " " stringify(b) ")\n", \
+		    __FILE__, __LINE__); \
+	if (!(_a op _b)) { \
+	    fprintf(stderr, "%s:%d: FAILED ASSERT((" stringify(a) \
+		    "=0x%016llx) " stringify(op) " (" stringify(b) "=0x%016llx))\n", \
+		    __FILE__, __LINE__, _a, _b); \
+	    _exit(1); \
+	} \
+    } while(0)
+#define ASSERT_EQ(a, b) _ASSERT_OP(a, ==, b)
+#define ASSERT_NE(a, b) _ASSERT_OP(a, !=, b)
+#define ASSERT_LTE(a, b) _ASSERT_OP(a, <=, b)
+#define ASSERT_GTE(a, b) _ASSERT_OP(a, >=, b)
+#define ASSERT(e) \
+    do { \
+	if (verbose) \
+	    fprintf(stderr, "%s:%d: ASSERT(" stringify(e) ")\n", \
+		    __FILE__, __LINE__); \
+	if (!(e)) { \
+	    fprintf(stderr, "%s:%d: FAILED ASSERT(" stringify(e) ")\n", \
+		    __FILE__, __LINE__); \
+	    _exit(1); \
+	} \
+    } while(0)
+
+
+static bool using_int3 = false;
+static volatile int sig_count = 0;
+static volatile int ran_after_fault = 0;
+static void *top_of_stack;
+static void *bottom_of_stack;
+
+void this_function_halts(unsigned long long a0, unsigned long long a1,
+			 unsigned long long a2, unsigned long long a3,
+			 unsigned long long a4, unsigned long long a5)
+{
+    int foo;
+    bottom_of_stack = &foo;
+
+    /* Set up registers with known values which will be tested in the signal handler */
+    __asm__ volatile("movq $0xfeed01010101cafe,%rax");
+    __asm__ volatile("movq $0xfeed02020202cafe,%rbx");
+    __asm__ volatile("movq $0xfeed03030303cafe,%r10");
+    __asm__ volatile("movq $0xfeed04040404cafe,%r11");
+    __asm__ volatile("movq $0xfeed05050505cafe,%r12");
+    __asm__ volatile("movq $0xfeed06060606cafe,%r13");
+    __asm__ volatile("movq $0xfeed07070707cafe,%r14");
+    __asm__ volatile("movq $0xfeed08080808cafe,%r15");
+    __asm__ volatile("hlt");
+    ran_after_fault++;
+}
+
+void this_function_int3s(unsigned long long a0, unsigned long long a1,
+			 unsigned long long a2, unsigned long long a3,
+			 unsigned long long a4, unsigned long long a5)
+{
+    int foo;
+    bottom_of_stack = &foo;
+
+    /* Set up registers with known values which will be tested in the signal handler */
+    __asm__ volatile("movq $0xfeed01010101cafe,%rax");
+    __asm__ volatile("movq $0xfeed02020202cafe,%rbx");
+    __asm__ volatile("movq $0xfeed03030303cafe,%r10");
+    __asm__ volatile("movq $0xfeed04040404cafe,%r11");
+    __asm__ volatile("movq $0xfeed05050505cafe,%r12");
+    __asm__ volatile("movq $0xfeed06060606cafe,%r13");
+    __asm__ volatile("movq $0xfeed07070707cafe,%r14");
+    __asm__ volatile("movq $0xfeed08080808cafe,%r15");
+    __asm__ volatile("int $3");
+    ran_after_fault++;
+}
+
+
+static void
+handle_signal(int sig, siginfo_t *si, void *vuc)
+{
+    ucontext_t *uc = (ucontext_t *)vuc;
+
+    if (verbose)
+    {
+	fprintf(stderr, "handle_signal\n");
+	fflush(stderr);
+    }
+
+    sig_count++;
+    ASSERT(sig_count == 1);
+
+    int expected_sig = (using_int3 ? SIGTRAP : SIGSEGV);
+    ASSERT_EQ(sig, expected_sig);
+    ASSERT_NE(si, NULL);
+    ASSERT_NE(uc, NULL);
+    ASSERT_NE(uc->uc_mcontext, NULL);
+
+    /* Test that the siginfo is set up right for this signal */
+    ASSERT_EQ(si->si_signo, expected_sig);
+    ASSERT_EQ(si->si_errno, 0);
+    int expected_code = (using_int3 ? 1 : 0);
+    ASSERT_EQ(si->si_code, expected_code);
+    ASSERT_EQ(si->si_pid, 0);
+    ASSERT_EQ(si->si_uid, 0);
+    ASSERT_EQ(si->si_status, 0);
+    ASSERT_EQ(si->si_addr, 0);
+    ASSERT_EQ(si->si_band, 0);
+
+    /* Test that RAX is saved to the signal ucontext */
+    ASSERT_EQ(uc->uc_mcontext->__ss.__rax, 0xfeed01010101cafe);
+
+    /* Test that the registers used to pass the 1st 6
+     * function arguments were saved in the signal ucontext */
+    ASSERT_EQ(uc->uc_mcontext->__ss.__rdi, 0xbabe01010101cedeULL);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__rsi, 0xbabe02020202cedeULL);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__rdx, 0xbabe03030303cedeULL);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__rcx, 0xbabe04040404cedeULL);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__r8, 0xbabe05050505cedeULL);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__r9, 0xbabe06060606cedeULL);
+
+    /* Test that the saved RBP and RSP point into roughly the right
+     * part of the stack */
+    ASSERT_GTE(uc->uc_mcontext->__ss.__rbp, bottom_of_stack);
+    ASSERT_LTE(uc->uc_mcontext->__ss.__rbp, top_of_stack);
+    ASSERT_GTE(uc->uc_mcontext->__ss.__rsp, bottom_of_stack);
+    ASSERT_LTE(uc->uc_mcontext->__ss.__rsp, top_of_stack);
+
+    /* Test that the saved RIP points into roughly the
+     * right part of the text segment */
+    char *calling_fn = (using_int3 ? (char *)&this_function_int3s : (char *)&this_function_halts);
+    ASSERT_GTE(uc->uc_mcontext->__ss.__rip, calling_fn);
+    ASSERT_LTE(uc->uc_mcontext->__ss.__rip, calling_fn+400);
+
+    ASSERT_EQ(uc->uc_mcontext->__ss.__rbx, 0xfeed02020202cafe);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__r10, 0xfeed03030303cafe);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__r11, 0xfeed04040404cafe);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__r12, 0xfeed05050505cafe);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__r13, 0xfeed06060606cafe);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__r14, 0xfeed07070707cafe);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__r15, 0xfeed08080808cafe);
+    /*
+    printf("	    RFLAGS 0x%016llx\n", (unsigned long long)uc->uc_mcontext->__ss.__rflags);
+    */
+
+    /*
+     * Test that the RIP is restored from the signal ucontext;
+     * this should skip past the HLT/INT instruction and
+     * allow execution to continue back out to main()
+     */
+    if (verbose)
+    {
+	fprintf(stderr, "Setting up to return past the HLT\n");
+	fflush(stderr);
+    }
+    uc->uc_mcontext->__ss.__rip += (using_int3 ? 0 : 1);
+
+    if (verbose)
+    {
+	fprintf(stderr, "Returning from signal handler\n");
+	fflush(stderr);
+    }
+}
+
+int main(int argc, char **argv)
+{
+    int r;
+    struct sigaction act;
+
+    top_of_stack = (void *)&act;
+
+    if (argc > 1 && !strcmp(argv[1], "--verbose"))
+	verbose = 1;
+
+    if (verbose)
+	printf("Setting up signal handler\n");
+    memset(&act, 0, sizeof(act));
+    act.sa_sigaction = handle_signal;
+    act.sa_flags |= SA_SIGINFO;
+    if (RUNNING_ON_VALGRIND)
+	using_int3 = true;
+    r = sigaction((using_int3 ? SIGTRAP : SIGSEGV), &act, NULL);
+    ASSERT_EQ(r, 0);
+
+    if (verbose)
+    {
+	fprintf(stderr, "Calling function with a breakpoint insn in it\n");
+	fflush(stderr);
+    }
+    if (using_int3)
+	this_function_int3s(0xbabe01010101cedeULL,
+			    0xbabe02020202cedeULL,
+			    0xbabe03030303cedeULL,
+			    0xbabe04040404cedeULL,
+			    0xbabe05050505cedeULL,
+			    0xbabe06060606cedeULL);
+    else
+	this_function_halts(0xbabe01010101cedeULL,
+			    0xbabe02020202cedeULL,
+			    0xbabe03030303cedeULL,
+			    0xbabe04040404cedeULL,
+			    0xbabe05050505cedeULL,
+			    0xbabe06060606cedeULL);
+    ASSERT_EQ(ran_after_fault, 1);
+
+    fprintf(stderr, "PASS\n");
+    return 0;
+}
diff --git a/none/tests/amd64-darwin/bug341419.stderr.exp b/none/tests/amd64-darwin/bug341419.stderr.exp
new file mode 100644
index 0000000..7ef22e9
--- /dev/null
+++ b/none/tests/amd64-darwin/bug341419.stderr.exp
@@ -0,0 +1 @@
+PASS
diff --git a/none/tests/amd64-darwin/bug341419.vgtest b/none/tests/amd64-darwin/bug341419.vgtest
new file mode 100644
index 0000000..baae689
--- /dev/null
+++ b/none/tests/amd64-darwin/bug341419.vgtest
@@ -0,0 +1,3 @@
+prog: bug341419
+vgopts: -q
+cleanup: rm -f vgcore.*
diff --git a/none/tests/amd64-linux/filter_minimal b/none/tests/amd64-darwin/filter_minimal
similarity index 100%
rename from none/tests/amd64-linux/filter_minimal
rename to none/tests/amd64-darwin/filter_minimal
diff --git a/none/tests/amd64-darwin/filter_stderr b/none/tests/amd64-darwin/filter_stderr
new file mode 100755
index 0000000..587754a
--- /dev/null
+++ b/none/tests/amd64-darwin/filter_stderr
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+dir=`dirname $0`
+
+# Remove ==pid== and --pid-- and **pid** strings 
+perl -p -e 's/(==|--|\*\*)[0-9]{1,7}\1 //' |
+
+perl -p -e 's/0x[0-9A-Fa-f]+/0x......../g'
+
+# NOTE: it is essential for the bug345887 testcase that the stderr
+#       filtering does *not* remove lines beginning with --
diff --git a/none/tests/amd64-linux/Makefile.am b/none/tests/amd64-linux/Makefile.am
index 39d7bac..3e5a959 100644
--- a/none/tests/amd64-linux/Makefile.am
+++ b/none/tests/amd64-linux/Makefile.am
@@ -2,13 +2,14 @@
 include $(top_srcdir)/Makefile.tool-tests.am
 
 dist_noinst_SCRIPTS = \
-	filter_stderr filter_minimal
+	filter_stderr
 
 EXTRA_DIST = \
-	bug345887.stderr.exp bug345887.vgtest
+	bug345887.stderr.exp bug345887.vgtest \
+	map_32bits.stderr.exp map_32bits.vgtest
 
 check_PROGRAMS = \
-	bug345887
+	bug345887 map_32bits
 
 AM_CFLAGS    += @FLAG_M64@
 AM_CXXFLAGS  += @FLAG_M64@
diff --git a/none/tests/amd64-linux/bug345887.vgtest b/none/tests/amd64-linux/bug345887.vgtest
index c014423..e567c47 100644
--- a/none/tests/amd64-linux/bug345887.vgtest
+++ b/none/tests/amd64-linux/bug345887.vgtest
@@ -1,4 +1,4 @@
 prog: bug345887
 vgopts: -q
-stderr_filter: filter_minimal
+stderr_filter: filter_stderr
 cleanup: rm -f vgcore.*
diff --git a/none/tests/amd64-linux/filter_stderr b/none/tests/amd64-linux/filter_stderr
index 587754a..5bf2c9c 100755
--- a/none/tests/amd64-linux/filter_stderr
+++ b/none/tests/amd64-linux/filter_stderr
@@ -2,10 +2,5 @@
 
 dir=`dirname $0`
 
-# Remove ==pid== and --pid-- and **pid** strings 
-perl -p -e 's/(==|--|\*\*)[0-9]{1,7}\1 //' |
-
-perl -p -e 's/0x[0-9A-Fa-f]+/0x......../g'
-
-# NOTE: it is essential for the bug345887 testcase that the stderr
-#       filtering does *not* remove lines beginning with --
+$dir/../../../tests/filter_stderr_basic |
+$dir/../../../tests/filter_addresses
diff --git a/none/tests/amd64-linux/map_32bits.c b/none/tests/amd64-linux/map_32bits.c
new file mode 100644
index 0000000..fbd1d8b
--- /dev/null
+++ b/none/tests/amd64-linux/map_32bits.c
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include "tests/sys_mman.h"
+#include <stdlib.h>
+#include <unistd.h>
+
+int main()
+{
+
+   void *first = NULL;
+   void *last;
+   void *res;
+
+   while (1) {
+      res = mmap (NULL, 64 * 1024,
+                  PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_32BIT,
+                  -1, 0);
+      if (first == NULL) {
+         first = res;
+         if (first == (void *)-1) {
+            perror ("first mmap");
+            exit (1);
+         }
+         fprintf(stderr, "first mmap : %p\n", first);
+      }
+      if (res == (void *)-1) {
+         fprintf(stderr, "last mmap ok: %p\n", last);
+         break;
+      }
+      last = res;
+   }
+
+   /* And now, retry without MAP_32BIT */
+   res = mmap (NULL, 64 * 1024,
+               PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
+               -1, 0);
+   if (res == (void *)-1) {
+      perror ("retry mmap");
+      exit (1);
+   }
+   fprintf(stderr, "retry mmap ok: %p\n", res);
+
+   return 0;
+}
diff --git a/none/tests/amd64-linux/map_32bits.stderr.exp b/none/tests/amd64-linux/map_32bits.stderr.exp
new file mode 100644
index 0000000..fa15567
--- /dev/null
+++ b/none/tests/amd64-linux/map_32bits.stderr.exp
@@ -0,0 +1,3 @@
+first mmap : 0x........
+last mmap ok: 0x........
+retry mmap ok: 0x........
diff --git a/none/tests/amd64-linux/map_32bits.vgtest b/none/tests/amd64-linux/map_32bits.vgtest
new file mode 100644
index 0000000..2b7f3a0
--- /dev/null
+++ b/none/tests/amd64-linux/map_32bits.vgtest
@@ -0,0 +1,5 @@
+prog: map_32bits
+# take a big aspacemgr minaddr, to quickly reach the 2GB limit
+vgopts: -q --aspace-minaddr=0x7ff60000
+stderr_filter: filter_stderr
+
diff --git a/none/tests/amd64-solaris/Makefile.am b/none/tests/amd64-solaris/Makefile.am
new file mode 100644
index 0000000..3830fbe
--- /dev/null
+++ b/none/tests/amd64-solaris/Makefile.am
@@ -0,0 +1,24 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = \
+	coredump_single_thread_mdb \
+	coredump_single_thread_sse_mdb \
+	filter_stderr
+
+EXTRA_DIST = \
+	coredump_single_thread.post.exp coredump_single_thread.stderr.exp \
+	coredump_single_thread.stdout.exp coredump_single_thread.vgtest \
+	coredump_single_thread_sse.post.exp coredump_single_thread_sse.stderr.exp \
+	coredump_single_thread_sse.stdout.exp coredump_single_thread_sse.vgtest \
+	syscall_return_args.stderr.exp syscall_return_args.vgtest
+
+check_PROGRAMS = \
+	coredump_single_thread \
+	coredump_single_thread_sse \
+	syscall_return_args
+
+AM_CFLAGS    += @FLAG_M64@
+AM_CXXFLAGS  += @FLAG_M64@
+AM_CCASFLAGS += @FLAG_M64@
+
diff --git a/none/tests/amd64-solaris/coredump_single_thread.c b/none/tests/amd64-solaris/coredump_single_thread.c
new file mode 100644
index 0000000..230ab06
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread.c
@@ -0,0 +1,46 @@
+/* Tests that Valgrind coredump support works correctly by producing
+   a core dump analyzable by mdb. */
+
+#include <stdio.h>
+#include <sys/types.h>
+
+__attribute__((noinline))
+static void inner(void)
+{
+   /* Set registers to apriori known values. */
+   __asm__ __volatile__(
+      "movq $0x101, %%rax\n"
+      "movq $0x102, %%rbx\n"
+      "movq $0x103, %%rcx\n"
+      "movq $0x104, %%rdx\n"
+      "movq $0x105, %%rsi\n"
+      "movq $0x106, %%rdi\n"
+      "movq $0x107, %%r8\n"
+      "movq $0x108, %%r9\n"
+      "movq $0x109, %%r10\n"
+      "movq $0x10a, %%r11\n"
+      "movq $0x10b, %%r12\n"
+      "movq $0x10c, %%r13\n"
+      "movq $0x10d, %%r14\n"
+      "movq $0x10e, %%r15\n"
+      // not %rbp as mdb is then not able to reconstruct stack trace
+      "movq $0x10f, %%rsp\n"
+      "movq $0x1234, (%%rax)\n"  // should cause SEGV here
+      "ud2"                      // should never get here
+      : // no output registers
+      : // no input registers
+      : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi",
+        "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", "%rsp");
+}
+
+__attribute__((noinline))
+static void outer(void)
+{
+   inner();
+}
+
+int main(int argc, const char *argv[])
+{
+   outer();
+   return 0;
+}
diff --git a/none/tests/amd64-solaris/coredump_single_thread.post.exp b/none/tests/amd64-solaris/coredump_single_thread.post.exp
new file mode 100644
index 0000000..a5aa542
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread.post.exp
@@ -0,0 +1,29 @@
+---Status---
+debugging core file of coredump_single (64-bit) from ...
+initial argv: ./coredump_single_thread
+threading model: native threads
+status: process terminated by SIGSEGV (Segmentation Fault), addr=........
+
+---Registers---
+%rax = 0x0000000000000101       %r8  = 0x0000000000000107
+%rbx = 0x0000000000000102       %r9  = 0x0000000000000108
+%rcx = 0x0000000000000103       %r10 = 0x0000000000000109
+%rdx = 0x0000000000000104       %r11 = 0x000000000000010a
+%rsi = 0x0000000000000105       %r12 = 0x000000000000010b
+%rdi = 0x0000000000000106       %r13 = 0x000000000000010c
+                                %r14 = 0x000000000000010d
+                                %r15 = 0x000000000000010e
+
+
+%rip = 0x........  coredump_single_thread`inner+0x........
+%rsp = 0x000000000000010f
+
+
+%trapno = 0x0
+   %err = 0x0
+
+---Stack trace---
+coredump_single_thread`inner
+coredump_single_thread`outer
+coredump_single_thread`main
+coredump_single_thread`_start
diff --git a/none/tests/amd64-solaris/coredump_single_thread.stderr.exp b/none/tests/amd64-solaris/coredump_single_thread.stderr.exp
new file mode 100644
index 0000000..e26e25b
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread.stderr.exp
@@ -0,0 +1,9 @@
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Access not within mapped region at address 0x........
+   at 0x........: inner (coredump_single_thread.c:11)
+ If you believe this happened as a result of a stack
+ overflow in your program's main thread (unlikely but
+ possible), you can try to increase the size of the
+ main thread stack using the --main-stacksize= flag.
+ The main thread stack size used in this run was ....
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/amd64-solaris/coredump_single_thread.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/amd64-solaris/coredump_single_thread.stdout.exp
diff --git a/none/tests/amd64-solaris/coredump_single_thread.vgtest b/none/tests/amd64-solaris/coredump_single_thread.vgtest
new file mode 100644
index 0000000..77604a0
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread.vgtest
@@ -0,0 +1,5 @@
+prereq: rm -f vgcore.*
+prog: coredump_single_thread
+vgopts: -q
+post: ./coredump_single_thread_mdb
+cleanup: rm -f vgcore.*
diff --git a/none/tests/amd64-solaris/coredump_single_thread_mdb b/none/tests/amd64-solaris/coredump_single_thread_mdb
new file mode 100755
index 0000000..00b864f
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread_mdb
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Filters are not run for post-test check commands.
+# Filter everything here.
+
+echo "---Status---"
+echo "::status" | /usr/bin/mdb vgcore.* | \
+perl -p -e 's/from \S*$/from .../' | \
+perl -0 -p -e 's/^file: .+?^(initial argv:)/$1/ms' | \
+perl -p -e 's/addr=[0-9A-Fa-f]+/addr=......../g'
+
+echo "\n---Registers---"
+echo "::regs" | /usr/bin/mdb vgcore.* | \
+sed '/^%cs =/ d' | \
+sed '/^%ds =/ d' | \
+perl -p -e 's/%rip\s+=\s+0x[0-9A-Fa-f]+(.*)\+0x[0-9A-Fa-f]+$/%rip = 0x........ $1+0x......../' | \
+sed '/^%rbp/ d' | \
+sed '/^%rflags/ d' | \
+sed '/id=/ d' | \
+sed '/status=/ d' | \
+sed '/^%gsbase = / d' | \
+sed '/^%fsbase = / d' \
+
+echo "\n---Stack trace---"
+echo "::stack ! perl -p -e 's/^(\S+)\+.*/\$1/g'" | /usr/bin/mdb vgcore.*
diff --git a/none/tests/amd64-solaris/coredump_single_thread_sse.c b/none/tests/amd64-solaris/coredump_single_thread_sse.c
new file mode 100644
index 0000000..3f25b78
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread_sse.c
@@ -0,0 +1,65 @@
+/* Tests that Valgrind coredump support for XMM registers works correctly
+   by producing a core dump analyzable by mdb.
+   Basic register set is tested in coredump_single_thread. */
+
+#include <stdio.h>
+#include <sys/types.h>
+
+__attribute__((noinline))
+static void inner(void) {
+   const char *input =
+   "\x12\x34\x56\x78\x9a\xbc\xde\xf0\xfe\xdb\xca\x98\x76\x54\x32\x10"
+   "\x23\x45\x67\x89\x09\x87\x65\x43\x21\xfe\xdc\xba\x94\x67\xfe\xca"
+   "\xab\xcd\xab\xcd\xce\xde\xce\xde\xfa\xba\xfa\xba\x50\x65\x67\x54"
+   "\x03\x05\x06\x08\x1d\x1b\x4b\x15\x25\x27\x21\x20\x37\x3a\x3d\x35"
+   "\x9a\xbc\xde\xf0\x76\x54\x32\x10\x12\x34\x56\x78\xfe\xdb\xca\x98"
+   "\x94\x67\xfe\xca\x23\x45\x67\x89\x21\xfe\xdc\xba\x09\x87\x65\x43"
+   "\x50\x65\x67\x54\xce\xde\xce\xde\xab\xcd\xab\xcd\xfa\xba\xfa\xba"
+   "\x37\x3a\x3d\x35\x1d\x1b\x4b\x15\x03\x05\x06\x08\x25\x27\x21\x20"
+   "\x24\x15\xb1\x5e\x00\x96\x83\xdd\xdc\x92\x66\x29\xbc\x35\xb1\x8a"
+   "\xc6\x72\x50\x4b\xbd\x8e\x9a\x95\xc6\xf7\xd3\x30\xd5\x34\x68\x22"
+   "\xc8\xd1\xca\xb6\xf4\x5c\xd1\xc7\x03\xdb\xc8\xb5\x8a\x1a\xf3\xbd"
+   "\x10\x60\x6d\x52\xa2\xd7\x75\x21\x35\x08\xfa\xe5\xa3\x4b\x5c\x9d"
+   "\xab\x87\x21\xbe\xb0\xbc\x32\x72\x2c\x22\x00\x6f\xf5\x63\x80\x6e"
+   "\x3d\x33\x4a\xab\xef\x9f\x3b\xf0\x25\xc3\x20\xa6\xe9\x55\x07\x0a"
+   "\x78\x29\xa1\xb8\xa5\xfd\xd2\xdf\x25\x6a\x53\xba\x6a\x9c\x06\x04"
+   "\x36\x39\x9e\x9b\x04\xdd\x2d\x24\xe1\xa7\x34\x95\x93\xef\x67\x2a";
+
+   /* Set 128-bit wide XMM registers to apriori known values. */
+   __asm__ __volatile__("\n"
+      "movupd   0(%[input]), %%xmm0\n"
+      "movupd  16(%[input]), %%xmm1\n"
+      "movupd  32(%[input]), %%xmm2\n"
+      "movupd  48(%[input]), %%xmm3\n"
+      "movupd  64(%[input]), %%xmm4\n"
+      "movupd  80(%[input]), %%xmm5\n"
+      "movupd  96(%[input]), %%xmm6\n"
+      "movupd 112(%[input]), %%xmm7\n"
+      "movupd 128(%[input]), %%xmm8\n"
+      "movupd 144(%[input]), %%xmm9\n"
+      "movupd 160(%[input]), %%xmm10\n"
+      "movupd 176(%[input]), %%xmm11\n"
+      "movupd 192(%[input]), %%xmm12\n"
+      "movupd 208(%[input]), %%xmm13\n"
+      "movupd 224(%[input]), %%xmm14\n"
+      "movupd 240(%[input]), %%xmm15\n"
+      "movq $0x1, %%rax\n"
+      "movq $0x1234, (%%rax)\n"  // should cause SEGV here
+      : // no output registers
+      : [input]  "r" (input)
+      : "memory", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6",
+        "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13",
+        "%xmm14", "%xmm15");
+}
+
+__attribute__((noinline))
+static void outer(void)
+{
+   inner();
+}
+
+int main(int argc, const char *argv[])
+{
+   outer();
+   return 0;
+}
diff --git a/none/tests/amd64-solaris/coredump_single_thread_sse.post.exp b/none/tests/amd64-solaris/coredump_single_thread_sse.post.exp
new file mode 100644
index 0000000..9840da5
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread_sse.post.exp
@@ -0,0 +1,23 @@
+---Status---
+debugging core file of coredump_single (64-bit) from ...
+initial argv: ./coredump_single_thread_sse
+threading model: native threads
+status: process terminated by SIGSEGV (Segmentation Fault), addr=........
+
+---SSE Registers---
+%xmm0  0x1032547698cadbfef0debc9a78563412
+%xmm1  0xcafe6794badcfe214365870989674523
+%xmm2  0x54676550bafabafadecedececdabcdab
+%xmm3  0x353d3a3720212725154b1b1d08060503
+%xmm4  0x98cadbfe7856341210325476f0debc9a
+%xmm5  0x43658709badcfe2189674523cafe6794
+%xmm6  0xbafabafacdabcdabdecedece54676550
+%xmm7  0x2021272508060503154b1b1d353d3a37
+%xmm8  0x8ab135bc296692dcdd8396005eb11524
+%xmm9  0x226834d530d3f7c6959a8ebd4b5072c6
+%xmm10 0xbdf31a8ab5c8db03c7d15cf4b6cad1c8
+%xmm11 0x9d5c4ba3e5fa08352175d7a2526d6010
+%xmm12 0x6e8063f56f00222c7232bcb0be2187ab
+%xmm13 0x0a0755e9a620c325f03b9fefab4a333d
+%xmm14 0x04069c6aba536a25dfd2fda5b8a12978
+%xmm15 0x2a67ef939534a7e1242ddd049b9e3936
diff --git a/none/tests/amd64-solaris/coredump_single_thread_sse.stderr.exp b/none/tests/amd64-solaris/coredump_single_thread_sse.stderr.exp
new file mode 100644
index 0000000..ca1f503
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread_sse.stderr.exp
@@ -0,0 +1,11 @@
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Access not within mapped region at address 0x........
+   at 0x........: inner (coredump_single_thread_sse.c:29)
+   by 0x........: outer (coredump_single_thread_sse.c:58)
+   by 0x........: main (coredump_single_thread_sse.c:63)
+ If you believe this happened as a result of a stack
+ overflow in your program's main thread (unlikely but
+ possible), you can try to increase the size of the
+ main thread stack using the --main-stacksize= flag.
+ The main thread stack size used in this run was ....
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/amd64-solaris/coredump_single_thread_sse.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/amd64-solaris/coredump_single_thread_sse.stdout.exp
diff --git a/none/tests/amd64-solaris/coredump_single_thread_sse.vgtest b/none/tests/amd64-solaris/coredump_single_thread_sse.vgtest
new file mode 100644
index 0000000..5292597
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread_sse.vgtest
@@ -0,0 +1,5 @@
+prereq: rm -f vgcore.* && ../../../tests/x86_amd64_features amd64-sse3
+prog: coredump_single_thread_sse
+vgopts: -q
+post: ./coredump_single_thread_sse_mdb
+cleanup: rm -f vgcore.*
diff --git a/none/tests/amd64-solaris/coredump_single_thread_sse_mdb b/none/tests/amd64-solaris/coredump_single_thread_sse_mdb
new file mode 100755
index 0000000..3cc5413
--- /dev/null
+++ b/none/tests/amd64-solaris/coredump_single_thread_sse_mdb
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# Filters are not run for post-test check commands.
+# Filter everything here.
+
+echo "---Status---"
+echo "::status" | /usr/bin/mdb vgcore.* | \
+perl -p -e 's/from \S*$/from .../' | \
+perl -0 -p -e 's/^file: .+?^(initial argv:)/$1/ms' | \
+perl -p -e 's/addr=[0-9A-Fa-f]+/addr=......../g'
+
+echo "\n---SSE Registers---"
+echo "::fpregs" | /usr/bin/mdb vgcore.* | \
+perl -n -e '/^%xmm/ && print $_;'
+
diff --git a/none/tests/amd64-solaris/filter_stderr b/none/tests/amd64-solaris/filter_stderr
new file mode 100755
index 0000000..0ae9313
--- /dev/null
+++ b/none/tests/amd64-solaris/filter_stderr
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr
diff --git a/none/tests/amd64-solaris/syscall_return_args.c b/none/tests/amd64-solaris/syscall_return_args.c
new file mode 100644
index 0000000..8fcb90e
--- /dev/null
+++ b/none/tests/amd64-solaris/syscall_return_args.c
@@ -0,0 +1,63 @@
+/* Tests that Valgrind correctly handles syscalls returning
+   either 1 (in %rax) or 2 values (in %rdx:%rax). */
+
+#include <stdio.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+
+#define GARBAGE 0x0caffedeadbeef
+
+static void syscall_rval(int sysno, uint64_t *rval_hi, uint64_t *rval_lo)
+{
+   __asm__ (
+      "movq %[INPUT1],%%rdx\n"
+      "movq %[SYSCALL_NUMBER],%%rax\n"
+      "syscall\n"
+      "movq %[RVAL_HI],%%rcx\n"
+      "movq %%rdx,(%%rcx)\n"
+      "movq %[RVAL_LO],%%rcx\n"
+      "movq %%rax,(%%rcx)\n"
+      : [RVAL_HI] "=m" (rval_hi), [RVAL_LO] "=m" (rval_lo)	/* output */
+      : [INPUT1] "i" (GARBAGE), [SYSCALL_NUMBER] "g" (sysno)	/* input */
+      : "rax", "rcx", "rdx", "cc", "memory");			/* clobbers */
+}
+
+static int syscall_rval1(void) {
+   uint64_t valHi, valLo;
+
+   /* Syscall lwp_self returns just tid in rax. */
+   valHi = valLo = GARBAGE;
+   syscall_rval(SYS_lwp_self, &valHi, &valLo);
+   if ((valHi != GARBAGE) || (valLo != 1)) {
+      fprintf(stderr, "rval1 FAILED [%#lx:%#lx]\n", valHi, valLo);
+      return 1;
+   }
+
+   return 0;
+}
+
+static int syscall_rval2(void) {
+   uint64_t valHi, valLo;
+
+   /* Syscall getpid returns pid in rax and ppid in rdx. */
+   valHi = valLo = GARBAGE;
+   syscall_rval(SYS_getpid, &valHi, &valLo);
+   if ((valHi == GARBAGE) || (valLo == GARBAGE)) {
+      fprintf(stderr, "rval2 FAILED [%#lx:%#lx]\n", valHi, valLo);
+      return 1;
+   }
+
+   return 0;
+}
+
+int main(void) {
+   int ret = 0;
+
+   ret |= syscall_rval1();
+   ret |= syscall_rval2();
+
+   if (ret != 0)
+     fprintf(stderr, "FAIL\n");
+
+   return ret;
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/amd64-solaris/syscall_return_args.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/amd64-solaris/syscall_return_args.stderr.exp
diff --git a/none/tests/amd64-solaris/syscall_return_args.vgtest b/none/tests/amd64-solaris/syscall_return_args.vgtest
new file mode 100644
index 0000000..ce1591d
--- /dev/null
+++ b/none/tests/amd64-solaris/syscall_return_args.vgtest
@@ -0,0 +1,2 @@
+prog: syscall_return_args
+vgopts: -q
diff --git a/none/tests/amd64/Makefile.am b/none/tests/amd64/Makefile.am
index 21d419e..be4113b 100644
--- a/none/tests/amd64/Makefile.am
+++ b/none/tests/amd64/Makefile.am
@@ -1,7 +1,7 @@
 
 include $(top_srcdir)/Makefile.tool-tests.am
 
-dist_noinst_SCRIPTS = filter_cpuid filter_stderr gen_insn_test.pl
+dist_noinst_SCRIPTS = filter_cpuid filter_inf_nan filter_stderr gen_insn_test.pl
 
 CLEANFILES = $(addsuffix .c,$(INSN_TESTS))
 
@@ -44,6 +44,7 @@
 	fcmovnu.vgtest fcmovnu.stderr.exp fcmovnu.stdout.exp \
 	fxtract.vgtest fxtract.stderr.exp fxtract.stdout.exp \
 	fxtract.stdout.exp-older-glibc \
+	getseg.stdout.exp getseg.stderr.exp getseg.vgtest \
 	$(addsuffix .stderr.exp,$(INSN_TESTS)) \
 	$(addsuffix .stdout.exp,$(INSN_TESTS)) \
 	$(addsuffix .vgtest,$(INSN_TESTS)) \
@@ -91,6 +92,7 @@
 	bug127521-64 bug132813-amd64 bug132918 bug137714-amd64 \
 	clc \
 	cmpxchg \
+	getseg \
 	$(INSN_TESTS) \
 	nan80and64 \
 	rcl-amd64 \
@@ -103,20 +105,9 @@
 if BUILD_ADDR32_TESTS
  check_PROGRAMS += asorep
 endif
-if BUILD_SSSE3_TESTS
- check_PROGRAMS += ssse3_misaligned
-endif
-if BUILD_LZCNT_TESTS
- check_PROGRAMS += lzcnt64
-endif
-if BUILD_SSE42_TESTS
- check_PROGRAMS += \
-	pcmpstr64 pcmpxstrx64 sse4-64 crc32 aes \
-	pcmpstr64w pcmpxstrx64w
-endif
 if BUILD_AVX_TESTS
 if BUILD_VPCLMULQDQ_TESTS
- check_PROGRAMS += avx-1
+  check_PROGRAMS += avx-1
 endif
 endif
 if BUILD_AVX2_TESTS
@@ -124,6 +115,20 @@
   check_PROGRAMS += avx2-1
 endif
 endif
+if BUILD_SSSE3_TESTS
+ check_PROGRAMS += ssse3_misaligned
+endif
+if BUILD_LZCNT_TESTS
+ check_PROGRAMS += lzcnt64
+endif
+if BUILD_MOVBE_TESTS
+ check_PROGRAMS += movbe
+endif
+if BUILD_SSE42_TESTS
+ check_PROGRAMS += \
+	pcmpstr64 pcmpxstrx64 sse4-64 crc32 aes \
+	pcmpstr64w pcmpxstrx64w
+endif
 if BUILD_TSX_TESTS
   check_PROGRAMS += tm1 xacq_xrel
 endif
@@ -133,9 +138,6 @@
 if BUILD_FMA_TESTS
  check_PROGRAMS += fma
 endif
-if BUILD_MOVBE_TESTS
- check_PROGRAMS += movbe
-endif
 if BUILD_MPX_TESTS
  check_PROGRAMS += mpx
 endif
diff --git a/none/tests/amd64/amd64locked.c b/none/tests/amd64/amd64locked.c
index d464857..baf9bbe 100644
--- a/none/tests/amd64/amd64locked.c
+++ b/none/tests/amd64/amd64locked.c
@@ -14,6 +14,18 @@
 typedef  unsigned long           UWord;
 typedef  char                    HChar;
 
+unsigned myrandom(void)
+{
+   /* Simple multiply-with-carry random generator. */
+   static unsigned m_w = 11;
+   static unsigned m_z = 13;
+
+   m_z = 36969 * (m_z & 65535) + (m_z >> 16);
+   m_w = 18000 * (m_w & 65535) + (m_w >> 16);
+
+   return (m_z << 16) + m_w;
+}
+
 /////////////////////////////////////////////////////////////////
 // BEGIN crc32 stuff                                           //
 /////////////////////////////////////////////////////////////////
@@ -664,8 +676,8 @@
    /* Valid bit offsets are -800 .. 799 inclusive. */
 
    for (n = 0; n < 10000; n++) {
-      bitoff = (random() % 1600) - 800;
-      op = random() % 4;
+      bitoff = (myrandom() % 1600) - 800;
+      op = myrandom() % 4;
       c = 2;
       switch (op) {
          case 0: c = btsq_mem(block, bitoff); break;
@@ -700,8 +712,8 @@
    /* Valid bit offsets are -800 .. 799 inclusive. */
 
    for (n = 0; n < 10000; n++) {
-      bitoff = (random() % 1600) - 800;
-      op = random() % 4;
+      bitoff = (myrandom() % 1600) - 800;
+      op = myrandom() % 4;
       c = 2;
       switch (op) {
          case 0: c = btsl_mem(block, bitoff); break;
@@ -736,8 +748,8 @@
    /* Valid bit offsets are -800 .. 799 inclusive. */
 
    for (n = 0; n < 10000; n++) {
-      bitoff = (random() % 1600) - 800;
-      op = random() % 4;
+      bitoff = (myrandom() % 1600) - 800;
+      op = myrandom() % 4;
       c = 2;
       switch (op) {
          case 0: c = btsw_mem(block, bitoff); break;
@@ -1046,7 +1058,7 @@
   // objdump -d ./amd64locked | grep lock | grep -v do_lock | grep -v elf64 | wc
 
 
-  { UInt crcExpd = 0x1F677629;
+  { UInt crcExpd = 0xDF0656F1;
     theCRC = crcFinalise( theCRC );
     if (theCRC == crcExpd) {
        printf("amd64locked: PASS: CRCs actual 0x%08X expected 0x%08X\n",
diff --git a/none/tests/amd64/amd64locked.stdout.exp b/none/tests/amd64/amd64locked.stdout.exp
index 97202d2..abe8b73 100644
--- a/none/tests/amd64/amd64locked.stdout.exp
+++ b/none/tests/amd64/amd64locked.stdout.exp
@@ -1 +1 @@
-amd64locked: PASS: CRCs actual 0x1F677629 expected 0x1F677629
+amd64locked: PASS: CRCs actual 0xDF0656F1 expected 0xDF0656F1
diff --git a/none/tests/amd64/avx-1.c b/none/tests/amd64/avx-1.c
index d02f7e3..11759f2 100644
--- a/none/tests/amd64/avx-1.c
+++ b/none/tests/amd64/avx-1.c
@@ -2,7 +2,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
-#include <malloc.h>
+#include "tests/malloc.h"
 
 typedef  unsigned char           UChar;
 typedef  unsigned int            UInt;
@@ -63,7 +63,7 @@
     \
     __attribute__ ((noinline)) static void test_##_name ( void )   \
     { \
-       Block* b = memalign(32, sizeof(Block)); \
+       Block* b = memalign32(sizeof(Block)); \
        randBlock(b); \
        printf("%s(reg)\n", #_name); \
        showBlock("before", b); \
@@ -229,15 +229,45 @@
 GEN_test_RandM(VCMPSD_128_0xE,
                "vcmpsd $0xE, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpsd $0xE, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x10,
+               "vcmpsd $0x10, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x10, (%%rax), %%xmm8, %%xmm7")
 GEN_test_RandM(VCMPSD_128_0x11,
                "vcmpsd $0x11, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpsd $0x11, (%%rax), %%xmm8, %%xmm7")
 GEN_test_RandM(VCMPSD_128_0x12,
                "vcmpsd $0x12, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpsd $0x12, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x13,
+               "vcmpsd $0x13, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x13, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x14,
+               "vcmpsd $0x14, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x14, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x15,
+               "vcmpsd $0x15, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x15, (%%rax), %%xmm8, %%xmm7")
 GEN_test_RandM(VCMPSD_128_0x16,
                "vcmpsd $0x16, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpsd $0x16, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x17,
+               "vcmpsd $0x17, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x17, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x18,
+               "vcmpsd $0x18, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x18, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x19,
+               "vcmpsd $0x19, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x19, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x1A,
+               "vcmpsd $0x1A, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x1A, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x1C,
+               "vcmpsd $0x1C, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x1C, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x1D,
+               "vcmpsd $0x1D, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpsd $0x1D, (%%rax), %%xmm8, %%xmm7")
 GEN_test_RandM(VCMPSD_128_0x1E,
                "vcmpsd $0x1E, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpsd $0x1E, (%%rax), %%xmm8, %%xmm7")
@@ -643,15 +673,45 @@
 GEN_test_RandM(VCMPSS_128_0xE,
                "vcmpss $0xE, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpss $0xE, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x10,
+               "vcmpss $0x10, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x10, (%%rax), %%xmm8, %%xmm7")
 GEN_test_RandM(VCMPSS_128_0x11,
                "vcmpss $0x11, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpss $0x11, (%%rax), %%xmm8, %%xmm7")
 GEN_test_RandM(VCMPSS_128_0x12,
                "vcmpss $0x12, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpss $0x12, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x13,
+               "vcmpss $0x13, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x13, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x14,
+               "vcmpss $0x14, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x14, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x15,
+               "vcmpss $0x15, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x15, (%%rax), %%xmm8, %%xmm7")
 GEN_test_RandM(VCMPSS_128_0x16,
                "vcmpss $0x16, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpss $0x16, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x17,
+               "vcmpss $0x17, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x17, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x18,
+               "vcmpss $0x18, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x18, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x19,
+               "vcmpss $0x19, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x19, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x1A,
+               "vcmpss $0x1A, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x1A, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x1C,
+               "vcmpss $0x1C, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x1C, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x1D,
+               "vcmpss $0x1D, %%xmm6,  %%xmm8, %%xmm7",
+               "vcmpss $0x1D, (%%rax), %%xmm8, %%xmm7")
 GEN_test_RandM(VCMPSS_128_0x1E,
                "vcmpss $0x1E, %%xmm6,  %%xmm8, %%xmm7",
                "vcmpss $0x1E, (%%rax), %%xmm8, %%xmm7")
@@ -2238,12 +2298,21 @@
    DO_D( VCMPSS_128_0x8 );
    DO_D( VCMPSS_128_0xA );
    DO_D( VCMPSS_128_0xC );
-   DO_D( VCMPSS_128_0xC );
    DO_D( VCMPSS_128_0xD );
    DO_D( VCMPSS_128_0xE );
+   DO_D( VCMPSS_128_0x10 );
    DO_D( VCMPSS_128_0x11 );
-   DO_D( VCMPSS_128_0x12);
+   DO_D( VCMPSS_128_0x12 );
+   DO_D( VCMPSS_128_0x13 );
+   DO_D( VCMPSS_128_0x14 );
+   DO_D( VCMPSS_128_0x15 );
    DO_D( VCMPSS_128_0x16 );
+   DO_D( VCMPSS_128_0x17 );
+   DO_D( VCMPSS_128_0x18 );
+   DO_D( VCMPSS_128_0x19 );
+   DO_D( VCMPSS_128_0x1A );
+   DO_D( VCMPSS_128_0x1C );
+   DO_D( VCMPSS_128_0x1D );
    DO_D( VCMPSS_128_0x1E );
    DO_D( VMOVDDUP_XMMorMEM64_to_XMM );
    DO_D( VMOVD_IREGorMEM32_to_XMM );
@@ -2331,7 +2400,7 @@
    DO_D( VANDNPS_128 );
    DO_D( VORPS_128 );
    DO_D( VSQRTSD_128 );
-   /* Test all CMPSS variants; this code is tricky. */
+   /* Test all CMPSD variants; this code is tricky. */
    DO_D( VCMPSD_128_0x0 );
    DO_D( VCMPSD_128_0x1 );
    DO_D( VCMPSD_128_0x2 );
@@ -2345,9 +2414,19 @@
    DO_D( VCMPSD_128_0xC );
    DO_D( VCMPSD_128_0xD );
    DO_D( VCMPSD_128_0xE );
+   DO_D( VCMPSD_128_0x10 );
    DO_D( VCMPSD_128_0x11 );
    DO_D( VCMPSD_128_0x12 );
+   DO_D( VCMPSD_128_0x13 );
+   DO_D( VCMPSD_128_0x14 );
+   DO_D( VCMPSD_128_0x15 );
    DO_D( VCMPSD_128_0x16 );
+   DO_D( VCMPSD_128_0x17 );
+   DO_D( VCMPSD_128_0x18 );
+   DO_D( VCMPSD_128_0x19 );
+   DO_D( VCMPSD_128_0x1A );
+   DO_D( VCMPSD_128_0x1C );
+   DO_D( VCMPSD_128_0x1D );
    DO_D( VCMPSD_128_0x1E );
    DO_D( VPSHUFB_128 );
    DO_D( VCVTTSD2SI_32 );
diff --git a/none/tests/amd64/avx-1.stdout.exp b/none/tests/amd64/avx-1.stdout.exp
index e298cb6..f9eda1a 100644
--- a/none/tests/amd64/avx-1.stdout.exp
+++ b/none/tests/amd64/avx-1.stdout.exp
@@ -3157,7 +3157,7 @@
     5aded321f5e9d319.fa795a662907aa69.ae038ac60802d7fc.c445f26226a6187f
     5efd93fcd510e425
 
-VCMPSS_128_0xC(reg)
+VCMPSS_128_0xD(reg)
   before
     7e371c361bff130b.ac3c2d75b22e70d3.6c09cf62f062ff19.35f829e1f2dc792e
     8040877e9400e2dd.79c71dabab114dfd.d1816976db491720.09f35fa9ca8f3ffb
@@ -3165,12 +3165,12 @@
     9aeff8e48c664ff3.f48fa86ec0e2ba54.e85cfe9290e87bdd.082b7dedb2ad2214
     ebff5d41fa31b8b9
   after
-    0000000000000000.0000000000000000.d1816976db491720.09f35fa9ffffffff
+    0000000000000000.0000000000000000.d1816976db491720.09f35fa900000000
     8040877e9400e2dd.79c71dabab114dfd.d1816976db491720.09f35fa9ca8f3ffb
     c064d23fda9e8d46.9d491caffc9f27c4.872e250c87472c28.06c0a709ab26e38e
     9aeff8e48c664ff3.f48fa86ec0e2ba54.e85cfe9290e87bdd.082b7dedb2ad2214
     ebff5d41fa31b8b9
-VCMPSS_128_0xC(mem)
+VCMPSS_128_0xD(mem)
   before
     8b0ac3f1a0bd60a8.6a2df5db43e2658f.5a653bd214e9c2d8.5257f07391b940ec
     c4162ce9bf5dd70e.8c6ac68f9ea00bc7.aa9753c913bdfa7d.1f6bf81b2645b601
@@ -3184,7 +3184,7 @@
     7064f462da0b21ed.360fd1dfa911f6ba.7d3e001d8302edd9.560d36707fbea8eb
     783365f67ac49c19
 
-VCMPSS_128_0xC(reg)
+VCMPSS_128_0xD(reg)
   before
     6da299f279b631fc.9c3e4bba0d306dbf.7611035293dbb3cd.b74b8d512c891fe8
     92a6cfd1191ea440.d149950b2a9a77b7.7841f8328f16ef2b.4ce48ec8f10f72c7
@@ -3192,12 +3192,12 @@
     dd9c2deaaa86139e.c526ee44916ab7cb.325d1ceb2f11d87b.f6eadc2d3d476aa8
     c4ef22f2fc108801
   after
-    0000000000000000.0000000000000000.7841f8328f16ef2b.4ce48ec8ffffffff
+    0000000000000000.0000000000000000.7841f8328f16ef2b.4ce48ec800000000
     92a6cfd1191ea440.d149950b2a9a77b7.7841f8328f16ef2b.4ce48ec8f10f72c7
     448b0100f58a3193.ea534c3f4d54fb02.98ebadec3a4fe881.17d57f6eeda0a2a3
     dd9c2deaaa86139e.c526ee44916ab7cb.325d1ceb2f11d87b.f6eadc2d3d476aa8
     c4ef22f2fc108801
-VCMPSS_128_0xC(mem)
+VCMPSS_128_0xD(mem)
   before
     5cafcca94707b6da.ba274efad39c8810.3d8ff70513e9653f.a1e2439a0ae9fcc4
     9cf8563f3939b061.3776619e0d5aca93.2d5ae16eeddcc289.43c51e6768628f08
@@ -3211,7 +3211,7 @@
     8050fab4847bfc23.8293494f21fca67e.e9454ce8204f7852.8cd8dc081b67f535
     eca0b8b4a90c4074
 
-VCMPSS_128_0xC(reg)
+VCMPSS_128_0xD(reg)
   before
     eef7372d2983ea5f.dcf80d6c15a4c5b7.07f9173435f9ba3e.6dfec5d1afe74928
     ed2955df375631a2.5058f0b2bd374aa8.9c54c65cc8cc8abf.d94811120823b885
@@ -3219,12 +3219,12 @@
     564c5f9f6f4580de.ec6f1698c3cc7c4f.6617b826e12955b7.ddc20e4d86b96483
     2d8ab81fe32b187b
   after
-    0000000000000000.0000000000000000.9c54c65cc8cc8abf.d9481112ffffffff
+    0000000000000000.0000000000000000.9c54c65cc8cc8abf.d948111200000000
     ed2955df375631a2.5058f0b2bd374aa8.9c54c65cc8cc8abf.d94811120823b885
     47810f3770134ee8.b63b1f7298414921.9def5334780355ae.0bf0aa9846108395
     564c5f9f6f4580de.ec6f1698c3cc7c4f.6617b826e12955b7.ddc20e4d86b96483
     2d8ab81fe32b187b
-VCMPSS_128_0xC(mem)
+VCMPSS_128_0xD(mem)
   before
     d51424f87a715aab.78d64385d1790130.ccbe52105ae79f5e.5319f39f9ecac785
     b22bcec66697e83d.076bb653313a0e89.33f54ec6789b7079.c03fff0c4b73e7c4
@@ -3238,7 +3238,7 @@
     7c34ceeeafb4d238.e0e63a5c5c94bb02.074b769dba030784.8a297b6ee70b1f49
     9f86e33c0e11b0e5
 
-VCMPSS_128_0xD(reg)
+VCMPSS_128_0xE(reg)
   before
     a4370cad9550dea4.20bd1b2043c3a8fa.e163436e6045d47a.2b029a9516cf46cd
     f48af22d1951e72f.690496f69de3b8ce.c11ccb19d2b368a9.46d06f7c6a6421d3
@@ -3251,7 +3251,7 @@
     edc9912836a20535.33d5bc5cd91fbfe1.da5bcfc94f6bb33c.3482703dd1d155c1
     ea41e60b86ce7460.5bfb073f1283795e.896d49ea72f8f2df.d2e519c3681f9ec3
     fac3e6fc4a5cb707
-VCMPSS_128_0xD(mem)
+VCMPSS_128_0xE(mem)
   before
     89e954d394935db6.473dec40a762725c.bb44f589641ca172.2a9e37e8d7e6613d
     5b22dd3461d14cff.5f0b9f3435e839d6.307a0128ecf5f449.1a3994301bc23c03
@@ -3265,7 +3265,7 @@
     38013545f68ff409.3549fd0b060014f3.c9e064110c970aee.52e18b4aae712575
     53861ef4365dab7a
 
-VCMPSS_128_0xD(reg)
+VCMPSS_128_0xE(reg)
   before
     12c510980b668c96.fb3efcccf5282524.a9519fc481a9a0ee.a5a8b334dd794614
     ebeb5da1cc190676.71c0ce8de8f78f86.4a5adfedd875e617.068e105b53cc9bad
@@ -3278,7 +3278,7 @@
     3a43017b120053c5.76502975eb08ee5e.72b0b8f1a8f12219.c85df7728a9ac8e5
     5b1bf9927ca9b030.e5bd886f1968fdd6.7f9f273c8da890a0.c6e3e5659ff188e7
     deea5420addd96e0
-VCMPSS_128_0xD(mem)
+VCMPSS_128_0xE(mem)
   before
     eb3fc28fd068aefb.aabd3f52a3a05863.9cd268668e22791a.cb72263a22266b5a
     c9aeaa9f26a08e65.8377d12725708809.765a434867421e57.b476b35703f8f0f1
@@ -3292,7 +3292,7 @@
     6709d94ed44591d5.435ec7c1a9cb7060.03f7df7ab3e6d16b.c842649f1bc5e667
     ada181a18ad9d09f
 
-VCMPSS_128_0xD(reg)
+VCMPSS_128_0xE(reg)
   before
     9d601a73b5705464.e08e18c566ca2d32.e224225de36f9f69.6da397a25f81589a
     f5cd2d7f3916ae63.9a5cc18d992c7f8f.7a30b9bfe71c4695.6bf33b64ddb3f772
@@ -3305,7 +3305,7 @@
     1233b533b1581947.7040509189754416.69d08752515fa192.d8b248ad4c876c1e
     4eddaffabac1d2bd.400641bd53b338f3.0a4e8881bec3ec09.8fae3967c50971cb
     6eb18a806646c2a4
-VCMPSS_128_0xD(mem)
+VCMPSS_128_0xE(mem)
   before
     4f89b7e24b491dd6.06181540efdd1471.e47a11fd13f21753.b9f8b9bac9d462a9
     10003c7b8f1e3c8c.9630e571ed391d0e.3a673b3de33d9c62.d11814680f1e401c
@@ -3319,7 +3319,7 @@
     9efd40fea670b837.ae26b044b2de6fb5.68e08d6d2a278b3b.b0ec3dd3ba8f232c
     2f39036958cea022
 
-VCMPSS_128_0xE(reg)
+VCMPSS_128_0x10(reg)
   before
     882ce323a076759b.231cb6c1b0058e83.ee9da4beb1403017.f803ae36d7df6c5d
     1613db6e2e13de44.f80a746a8a9c1804.7620f0d4e811a713.aad018ae06d3e4df
@@ -3327,12 +3327,12 @@
     45e800698e5e5ad5.fd87ba1f1d003a54.ce7d85807031a787.e098bc6058a089ac
     1c2aee70b3922d51
   after
-    0000000000000000.0000000000000000.7620f0d4e811a713.aad018aeffffffff
+    0000000000000000.0000000000000000.7620f0d4e811a713.aad018ae00000000
     1613db6e2e13de44.f80a746a8a9c1804.7620f0d4e811a713.aad018ae06d3e4df
     3738e6b79e3216c9.f795f7e5504112e6.a2fc92f0f4de1054.581349c3d210afea
     45e800698e5e5ad5.fd87ba1f1d003a54.ce7d85807031a787.e098bc6058a089ac
     1c2aee70b3922d51
-VCMPSS_128_0xE(mem)
+VCMPSS_128_0x10(mem)
   before
     e99759e1ffef5805.9d6e25ef9723e614.e7ad39020de64a7a.56efc6eff999a757
     23a97b9e59c5c6f3.9c1852b7570ef534.8fd2f07b3dfeff86.969e4fa82b9f4d71
@@ -3342,11 +3342,11 @@
   after
     e99759e1ffef5805.9d6e25ef9723e614.e7ad39020de64a7a.56efc6eff999a757
     23a97b9e59c5c6f3.9c1852b7570ef534.8fd2f07b3dfeff86.969e4fa82b9f4d71
-    0000000000000000.0000000000000000.8fd2f07b3dfeff86.969e4fa8ffffffff
+    0000000000000000.0000000000000000.8fd2f07b3dfeff86.969e4fa800000000
     4fefd1aca60a5a2f.fa04b1ba6b838fc1.8c4ef7e0cbf647fa.aee22eadf7ba7b32
     3e0f7bd0cae67a31
 
-VCMPSS_128_0xE(reg)
+VCMPSS_128_0x10(reg)
   before
     f5a901eeb5e20f29.f8bbfed6d190f7d4.13dedbcdf7269287.993b3fa461ed52bb
     31fcbd74553975c7.7e5cd1fb79c0c865.410bfdd1a81e08dd.d658afaea746f211
@@ -3354,12 +3354,12 @@
     a5fdc463222aa8a4.915159eab147f2f5.4f8e155df03e40e7.4b52f844b150df2a
     3cc7c8a8ad19a545
   after
-    0000000000000000.0000000000000000.410bfdd1a81e08dd.d658afaeffffffff
+    0000000000000000.0000000000000000.410bfdd1a81e08dd.d658afae00000000
     31fcbd74553975c7.7e5cd1fb79c0c865.410bfdd1a81e08dd.d658afaea746f211
     4d54aacc4578eab7.bda0c508baa3870c.e1d712331df72e6e.1d71c3eab80ee227
     a5fdc463222aa8a4.915159eab147f2f5.4f8e155df03e40e7.4b52f844b150df2a
     3cc7c8a8ad19a545
-VCMPSS_128_0xE(mem)
+VCMPSS_128_0x10(mem)
   before
     cc9bb102c974f0a5.944207a687dbec3a.d63c068b79b7c24e.e87b05bcbd7e79f3
     d79c2e3e206d7b76.787170ff1018f127.682d4ad92f00b640.06ecdbbd2143173f
@@ -3369,11 +3369,11 @@
   after
     cc9bb102c974f0a5.944207a687dbec3a.d63c068b79b7c24e.e87b05bcbd7e79f3
     d79c2e3e206d7b76.787170ff1018f127.682d4ad92f00b640.06ecdbbd2143173f
-    0000000000000000.0000000000000000.682d4ad92f00b640.06ecdbbdffffffff
+    0000000000000000.0000000000000000.682d4ad92f00b640.06ecdbbd00000000
     ce50d50df06b4419.8bb8a0a8016332b0.e3518329d34af5a6.44852d511c8e6c46
     1c46a1bdeb2b9d59
 
-VCMPSS_128_0xE(reg)
+VCMPSS_128_0x10(reg)
   before
     eabaed7ac17e215b.729cf778a287fa43.726960cfa089e4a5.841b7103f964b970
     0a2c0bf4391234f9.01449d74ff72e08e.be3236bdd36b49a0.e21ce6397d868f86
@@ -3381,12 +3381,12 @@
     b03eb2cf812ffbb8.4fd766d42be22f36.f140109e68911756.45ee51690d136440
     0158413c5196da3d
   after
-    0000000000000000.0000000000000000.be3236bdd36b49a0.e21ce639ffffffff
+    0000000000000000.0000000000000000.be3236bdd36b49a0.e21ce63900000000
     0a2c0bf4391234f9.01449d74ff72e08e.be3236bdd36b49a0.e21ce6397d868f86
     d8eaf997f07414df.561343ef2337b325.c9611cde37959b4c.d91e5db77abc3411
     b03eb2cf812ffbb8.4fd766d42be22f36.f140109e68911756.45ee51690d136440
     0158413c5196da3d
-VCMPSS_128_0xE(mem)
+VCMPSS_128_0x10(mem)
   before
     eb28a61a63515434.ee75320989cf2631.c75a810f33800fea.901c0d6900edf86a
     de29fdf15e518c52.eedb75afa3e0d1f5.9a69108c551c1070.04420fac9e347c33
@@ -3562,7 +3562,7 @@
     f41fa78eda0c8d6f.5b56b9d83a56e7cf.6f45df458beb8330.f9a2c60320c57a8b
     cf00aee19acd265f
 
-VCMPSS_128_0x16(reg)
+VCMPSS_128_0x13(reg)
   before
     3dfcbf699dd458db.f70063b681138bed.f17af6fd256c8f41.9e303eafe6c9f7f1
     9ee0f609c5664cae.47e7b48914f1ad06.0d201ac4a7079af3.6c7ab50f5f3af0f7
@@ -3570,12 +3570,12 @@
     ae93c33ef25e6803.3ef70ae5756848b7.482509e4defeccc6.555fdb6221035f81
     2891832ca1734e5d
   after
-    0000000000000000.0000000000000000.0d201ac4a7079af3.6c7ab50fffffffff
+    0000000000000000.0000000000000000.0d201ac4a7079af3.6c7ab50f00000000
     9ee0f609c5664cae.47e7b48914f1ad06.0d201ac4a7079af3.6c7ab50f5f3af0f7
     50f94e2cad103d82.c0a018f5b2b4ade5.0b9522975bb44591.b5f1c051144a296e
     ae93c33ef25e6803.3ef70ae5756848b7.482509e4defeccc6.555fdb6221035f81
     2891832ca1734e5d
-VCMPSS_128_0x16(mem)
+VCMPSS_128_0x13(mem)
   before
     0a53339db0a5b22d.13fa51aa2fda09de.9db7064579173aa8.1e1ccb16cb716a3f
     d771679f6ba6461e.dd7af4de00125bbf.b9ae8901dbcf3ee3.eac66499bf9a5ca7
@@ -3585,11 +3585,11 @@
   after
     0a53339db0a5b22d.13fa51aa2fda09de.9db7064579173aa8.1e1ccb16cb716a3f
     d771679f6ba6461e.dd7af4de00125bbf.b9ae8901dbcf3ee3.eac66499bf9a5ca7
-    0000000000000000.0000000000000000.b9ae8901dbcf3ee3.eac66499ffffffff
+    0000000000000000.0000000000000000.b9ae8901dbcf3ee3.eac6649900000000
     a1f04c0b5442f112.0bf46a4cd0e40541.986c103e26886fe9.d4620c422a3c2bf7
     a9ed1340d9cc8136
 
-VCMPSS_128_0x16(reg)
+VCMPSS_128_0x13(reg)
   before
     e55ae13fff421a15.57e9f44cb9f67f6d.2986355d0796d53a.13cc0d9649a1130c
     e3f672ac372a323f.686e11cf3aa82e98.1a6106e5433346ea.ba9281fa38f2bb2a
@@ -3597,12 +3597,12 @@
     95eacf7c4e7dd326.0a4c984bfe37de11.e922a60b3760fe18.017fba98f06e0104
     573e78a8f0b1191a
   after
-    0000000000000000.0000000000000000.1a6106e5433346ea.ba9281faffffffff
+    0000000000000000.0000000000000000.1a6106e5433346ea.ba9281fa00000000
     e3f672ac372a323f.686e11cf3aa82e98.1a6106e5433346ea.ba9281fa38f2bb2a
     ff0dc3f11d0f0761.af4b1e80f264bac0.3cd1d7511e4895fa.6b89e6571188216e
     95eacf7c4e7dd326.0a4c984bfe37de11.e922a60b3760fe18.017fba98f06e0104
     573e78a8f0b1191a
-VCMPSS_128_0x16(mem)
+VCMPSS_128_0x13(mem)
   before
     4b939c752d5b23da.01db92b86600d33c.543df91c792c58b6.7e9f6e812807bcf0
     b84aa2eac47adc70.9e2a08100025424c.68e9bfe08050e2db.57962b1e8dca0d2e
@@ -3616,7 +3616,7 @@
     6c0d467c6e464ad1.e015fec92b836011.63a667eda0511859.461d757c25d15289
     1346f9168f2ebf00
 
-VCMPSS_128_0x16(reg)
+VCMPSS_128_0x13(reg)
   before
     94186387ded6ae8b.6bb2db71ba0a77f3.3b497601f4d4871c.004e420ef1483c08
     25dfaf3cae565bd9.54e842bfcf72429c.390c9106b0f60dd3.d9e271d23d9d61e8
@@ -3624,12 +3624,12 @@
     e77bd91d3e0ade68.4f3a7712c560a632.8a6ea1286fdf29f4.aafdbbf039919dea
     5c1dce2220492c64
   after
-    0000000000000000.0000000000000000.390c9106b0f60dd3.d9e271d2ffffffff
+    0000000000000000.0000000000000000.390c9106b0f60dd3.d9e271d200000000
     25dfaf3cae565bd9.54e842bfcf72429c.390c9106b0f60dd3.d9e271d23d9d61e8
     22e6d79f9a380294.017cf850c98b69f8.34aa4b45fb7630e2.c82e6f24a15c4225
     e77bd91d3e0ade68.4f3a7712c560a632.8a6ea1286fdf29f4.aafdbbf039919dea
     5c1dce2220492c64
-VCMPSS_128_0x16(mem)
+VCMPSS_128_0x13(mem)
   before
     b85825a6728fabbe.d0e8b02337582c03.1bee3defdefdb676.96a58e1cabbd37b6
     9b7b3d684c70d825.397a581b21ad280e.3f64c5d5316f54f2.b39b0e8e489d94d3
@@ -3639,11 +3639,11 @@
   after
     b85825a6728fabbe.d0e8b02337582c03.1bee3defdefdb676.96a58e1cabbd37b6
     9b7b3d684c70d825.397a581b21ad280e.3f64c5d5316f54f2.b39b0e8e489d94d3
-    0000000000000000.0000000000000000.3f64c5d5316f54f2.b39b0e8effffffff
+    0000000000000000.0000000000000000.3f64c5d5316f54f2.b39b0e8e00000000
     67a99d57073027c9.fb3c0b96359c182b.03c50c68f2002e3c.94f4b7981b902ed1
     0fefd90988bbe20a
 
-VCMPSS_128_0x1E(reg)
+VCMPSS_128_0x14(reg)
   before
     0dd87ea7c818d74d.074cde5c1f27c25e.0c050ff0984f8593.5a48c3ee9937e063
     e8fda2de76334649.9e06ce4e2fe9f9b0.0d22d4ed5b398f1d.7abd2c2cea721271
@@ -3651,12 +3651,12 @@
     a82658c78dcf8917.22f3b0aea5fc2e38.4e8c928073e36e46.86ad0581f825e1f0
     29bf6d6fedb6f7b9
   after
-    0000000000000000.0000000000000000.0d22d4ed5b398f1d.7abd2c2c00000000
+    0000000000000000.0000000000000000.0d22d4ed5b398f1d.7abd2c2cffffffff
     e8fda2de76334649.9e06ce4e2fe9f9b0.0d22d4ed5b398f1d.7abd2c2cea721271
     fda8411a2e966ea8.09a5eb1b528189ea.5ae156f91be77475.3ff0c40f00be7e91
     a82658c78dcf8917.22f3b0aea5fc2e38.4e8c928073e36e46.86ad0581f825e1f0
     29bf6d6fedb6f7b9
-VCMPSS_128_0x1E(mem)
+VCMPSS_128_0x14(mem)
   before
     05f477c6fb7a7b19.46c3e1522f6ad441.c6bd9af34365a3c7.477082ee00bcb93d
     f6169f703f7f2a3c.31cada25aff18bd3.d1cf23d649c8a5c3.a0d924af5dfb9306
@@ -3670,7 +3670,7 @@
     87543a71d77af879.614a0a57baf92cdd.8cfa0726faad40b1.e1696cdbf9e0dfbc
     8228091e709ec901
 
-VCMPSS_128_0x1E(reg)
+VCMPSS_128_0x14(reg)
   before
     f29c486427f331c8.df08a4a0638890eb.5e5b388e7d918eae.f4ab596bde4850fa
     8f112418ba6b53bd.bcda1dd3950641d0.1906c6bd8f464b96.33d53bfe9a0cdd60
@@ -3678,12 +3678,12 @@
     bc2ea37fe7f6b5de.75072af55984e5a2.395cf0b80e38ca5d.a6bfa1bf07455e33
     92171cc5f1d0c9f6
   after
-    0000000000000000.0000000000000000.1906c6bd8f464b96.33d53bfe00000000
+    0000000000000000.0000000000000000.1906c6bd8f464b96.33d53bfeffffffff
     8f112418ba6b53bd.bcda1dd3950641d0.1906c6bd8f464b96.33d53bfe9a0cdd60
     b3d399a8c6936b8b.fa9521f68901ca54.ee98af528ba4a142.25422acc4907a30f
     bc2ea37fe7f6b5de.75072af55984e5a2.395cf0b80e38ca5d.a6bfa1bf07455e33
     92171cc5f1d0c9f6
-VCMPSS_128_0x1E(mem)
+VCMPSS_128_0x14(mem)
   before
     c51817c923b6a187.046d3f09b7206c64.08fab6bc239b50e6.56a0835bb38d0394
     1a8c0fb7b802a210.e9de68b2d59dcdc6.913b40380353c44e.a1af66a7172f8793
@@ -3697,7 +3697,7 @@
     9f01e2007cfe0dbc.f681511265c37bd5.f2d73efa73d3be34.315c09eb8a8c6396
     2e93c1bad15f33f4
 
-VCMPSS_128_0x1E(reg)
+VCMPSS_128_0x14(reg)
   before
     c9c5b9e346af3ec9.8699b635e3c6f037.d64c09a1108241d9.82c9aa1a3bb4bb0b
     5e3eebd08608c1c1.ffd577031e23eb5b.c2783ffe77c5a16a.763a059e8865b3b5
@@ -3705,12 +3705,12 @@
     e533f3abd6061fcd.1b68ac1d7ed21d4c.2f2212d6eb051ee5.ffc4758124688230
     4a7683b9aad2d25a
   after
-    0000000000000000.0000000000000000.c2783ffe77c5a16a.763a059e00000000
+    0000000000000000.0000000000000000.c2783ffe77c5a16a.763a059effffffff
     5e3eebd08608c1c1.ffd577031e23eb5b.c2783ffe77c5a16a.763a059e8865b3b5
     484955ef2df6f889.e8809f574823bc53.1650ee973718d735.acf4ca7177f2615d
     e533f3abd6061fcd.1b68ac1d7ed21d4c.2f2212d6eb051ee5.ffc4758124688230
     4a7683b9aad2d25a
-VCMPSS_128_0x1E(mem)
+VCMPSS_128_0x14(mem)
   before
     6bd66e05253c0d06.9049bf701dc37139.76571942db3aca71.6738a729301ab327
     3cafb451b2b3ee61.a4d5b7aa9fba2b77.d41b62b07c6a81ef.1bdfaafba1e3d1a7
@@ -3720,11 +3720,11 @@
   after
     6bd66e05253c0d06.9049bf701dc37139.76571942db3aca71.6738a729301ab327
     3cafb451b2b3ee61.a4d5b7aa9fba2b77.d41b62b07c6a81ef.1bdfaafba1e3d1a7
-    0000000000000000.0000000000000000.d41b62b07c6a81ef.1bdfaafb00000000
+    0000000000000000.0000000000000000.d41b62b07c6a81ef.1bdfaafbffffffff
     62003f9a70f695d2.7c81182dc283c620.084d791cf74bf8a4.6710e7cc79be9c0f
     b73119a317e8c04f
 
-VMOVDDUP_XMMorMEM64_to_XMM(reg)
+VCMPSS_128_0x15(reg)
   before
     f414a8aa52f65d7d.6f0f7b6edadad240.f63a794e9b6e1fe2.96533ff10b153034
     7803914bc673b045.9cc802f3c4faa60d.4b99f6941fc2d027.975ed1c0d1d562cc
@@ -3732,12 +3732,12 @@
     c8395e0fc6eb6851.ca68debc8e1f0373.f27d304096d529ec.63af4afce8699ec7
     e68d294171552281
   after
-    0000000000000000.0000000000000000.975ed1c0d1d562cc.975ed1c0d1d562cc
+    0000000000000000.0000000000000000.4b99f6941fc2d027.975ed1c000000000
     7803914bc673b045.9cc802f3c4faa60d.4b99f6941fc2d027.975ed1c0d1d562cc
     a04ccff40eebf552.c6f74f134d62cd65.d5ec896ce90b159c.e838ac7567984899
     c8395e0fc6eb6851.ca68debc8e1f0373.f27d304096d529ec.63af4afce8699ec7
     e68d294171552281
-VMOVDDUP_XMMorMEM64_to_XMM(mem)
+VCMPSS_128_0x15(mem)
   before
     4b9fc4301e678ef3.4b163a0a8bfe44ed.82e72bd9a53c0364.fc99e77ec1ad49c5
     6fb197b60aab9f4b.87316050f8b1c6d3.cb3fb356aec68a64.518ba891071fb1d0
@@ -3747,11 +3747,11 @@
   after
     4b9fc4301e678ef3.4b163a0a8bfe44ed.82e72bd9a53c0364.fc99e77ec1ad49c5
     6fb197b60aab9f4b.87316050f8b1c6d3.cb3fb356aec68a64.518ba891071fb1d0
-    2e8e1fbd512d11b2.d7d5ca4caa8e2aaf.823df11ec4c7549e.4ba171e403b59cbb
-    0000000000000000.0000000000000000.fc99e77ec1ad49c5.fc99e77ec1ad49c5
+    0000000000000000.0000000000000000.cb3fb356aec68a64.518ba891ffffffff
+    6504d63310fa9f57.974d766c3d24ac2c.81ad6120044e1c3e.47263ce552fd4732
     a26507ff8f83eee1
 
-VMOVDDUP_XMMorMEM64_to_XMM(reg)
+VCMPSS_128_0x15(reg)
   before
     b6abce9e56d1cd73.eedd3a03621d0664.23e65f1b4bfc87f7.a55b7f458964a071
     e0448b2f44751f94.a6e6c61864a30205.d7ed82c673a4f8bb.ca13c77a6f179963
@@ -3759,12 +3759,12 @@
     e79fdcd204ed0f37.13b847c6e605a7b6.266f62bb7b928be0.87d0c7c5d182e133
     d76d76b28452a768
   after
-    0000000000000000.0000000000000000.ca13c77a6f179963.ca13c77a6f179963
+    0000000000000000.0000000000000000.d7ed82c673a4f8bb.ca13c77affffffff
     e0448b2f44751f94.a6e6c61864a30205.d7ed82c673a4f8bb.ca13c77a6f179963
     7c7c3c1cf5fb21f2.69ebf66031974e68.0eabd9d74ea73a25.cca1b6abd372c640
     e79fdcd204ed0f37.13b847c6e605a7b6.266f62bb7b928be0.87d0c7c5d182e133
     d76d76b28452a768
-VMOVDDUP_XMMorMEM64_to_XMM(mem)
+VCMPSS_128_0x15(mem)
   before
     98443f6008eed40d.7bf867be0dd9240f.801934369efac91e.7a8418df93ef259a
     a6219fb97a63244b.95d5d94aad4b9e27.8cd9399c758170ca.6535f8ad344d45fc
@@ -3774,11 +3774,11 @@
   after
     98443f6008eed40d.7bf867be0dd9240f.801934369efac91e.7a8418df93ef259a
     a6219fb97a63244b.95d5d94aad4b9e27.8cd9399c758170ca.6535f8ad344d45fc
-    ddd011abf5bc5251.91802fe47fceb72b.13c6d2e589a657e6.45d0fc93fa3526b5
-    0000000000000000.0000000000000000.7a8418df93ef259a.7a8418df93ef259a
+    0000000000000000.0000000000000000.8cd9399c758170ca.6535f8adffffffff
+    191d112196051b49.cb4664f720eeabc6.f1aa7bfbf3753ba0.759f22fb8035066e
     50ef655363d81fd6
 
-VMOVDDUP_XMMorMEM64_to_XMM(reg)
+VCMPSS_128_0x15(reg)
   before
     340cc1063eabad97.36d31b07784a3b5f.9f7374ee2b37b8a5.0252b1cbd1fbd821
     7b413280ad39ee5e.10c0ab49b8986dc0.69535b373d361873.228aef423f44ea98
@@ -3786,12 +3786,12 @@
     a6274579b9b774ac.6b6a4f92c07dfa12.4f5b9f6de483c38f.ffda73d1384b5b12
     7389b1c2fc23336e
   after
-    0000000000000000.0000000000000000.228aef423f44ea98.228aef423f44ea98
+    0000000000000000.0000000000000000.69535b373d361873.228aef4200000000
     7b413280ad39ee5e.10c0ab49b8986dc0.69535b373d361873.228aef423f44ea98
     83dcb52d4d0e1cd6.83ae3ed371fb6e98.8531163df17607dd.2d1eb14b585a2c2f
     a6274579b9b774ac.6b6a4f92c07dfa12.4f5b9f6de483c38f.ffda73d1384b5b12
     7389b1c2fc23336e
-VMOVDDUP_XMMorMEM64_to_XMM(mem)
+VCMPSS_128_0x15(mem)
   before
     67f8e809bfec6f6f.4270ded18ebf318b.a4c05a70c02ccc5b.231bf431b1ea8634
     b6f393929eb4cc40.b1017c9f68b29120.097cdb5b8e14a29f.5dbe10f6f5368d78
@@ -3801,11 +3801,11 @@
   after
     67f8e809bfec6f6f.4270ded18ebf318b.a4c05a70c02ccc5b.231bf431b1ea8634
     b6f393929eb4cc40.b1017c9f68b29120.097cdb5b8e14a29f.5dbe10f6f5368d78
-    3c462e49b487060e.50271b50e11dce17.78694f3d453f3609.5990f0284bf41409
-    0000000000000000.0000000000000000.231bf431b1ea8634.231bf431b1ea8634
+    0000000000000000.0000000000000000.097cdb5b8e14a29f.5dbe10f600000000
+    d4bd361a1e6fd805.7c2db851988b241b.cc55310401bc44c6.73dd8e344faf5691
     06f1e8859ef390bc
 
-VMOVD_IREGorMEM32_to_XMM(reg)
+VCMPSS_128_0x16(reg)
   before
     7017f986d44cfe37.5c2425f2f77a0050.8f614e0d2688d1d9.e00afd9adf948a01
     0c9dbda58c47dcae.ae4779bb5cb4381c.e60dd9ef2aa10ffd.92552fedfbd5c2e7
@@ -3813,12 +3813,12 @@
     49f44feaf351d63e.25ef3dd438e2cae5.d001bfdafd543124.3cddb6775abffa63
     edb10386d6817350
   after
-    0000000000000000.0000000000000000.0000000000000000.00000000d6817350
+    0000000000000000.0000000000000000.e60dd9ef2aa10ffd.92552fed00000000
     0c9dbda58c47dcae.ae4779bb5cb4381c.e60dd9ef2aa10ffd.92552fedfbd5c2e7
     36cd314d626f65cd.a8f1ad6268283c94.dd7f55653d611b32.bd0243e8708aa9a4
     49f44feaf351d63e.25ef3dd438e2cae5.d001bfdafd543124.3cddb6775abffa63
     edb10386d6817350
-VMOVD_IREGorMEM32_to_XMM(mem)
+VCMPSS_128_0x16(mem)
   before
     aa4ca602ffdbce99.a35e15e8da786ab0.000da6fce7ee9c3a.1ce012ba06078c80
     51781bd5f2d9c768.9e577eb3b4705fcd.171762c592596fc1.1b684a71f30569f2
@@ -3828,11 +3828,11 @@
   after
     aa4ca602ffdbce99.a35e15e8da786ab0.000da6fce7ee9c3a.1ce012ba06078c80
     51781bd5f2d9c768.9e577eb3b4705fcd.171762c592596fc1.1b684a71f30569f2
-    bc02deecca881ce9.982a87b71cc6ef42.44d9ef1d542efea3.2ae4636b61da0426
-    0000000000000000.0000000000000000.0000000000000000.0000000006078c80
+    0000000000000000.0000000000000000.171762c592596fc1.1b684a7100000000
+    c9b66c34a4f38749.ec252a61af0457ba.651ec8ef4979070e.a5a25915eb1398c7
     e8ec29d92d3b6281
 
-VMOVD_IREGorMEM32_to_XMM(reg)
+VCMPSS_128_0x16(reg)
   before
     4f0fce24c4df9e01.526040979b27c5b4.f592651b08b9d2e2.54b46a278e47442e
     365744634c8988f3.34ccd603cc2f9155.11be3353c46e9e65.ee654fb13fa3712f
@@ -3840,12 +3840,12 @@
     f48694699c2554dc.741939a34aebc7eb.ed8379e9d30e132f.944bd76c52378f82
     57187174ed86f72c
   after
-    0000000000000000.0000000000000000.0000000000000000.00000000ed86f72c
+    0000000000000000.0000000000000000.11be3353c46e9e65.ee654fb100000000
     365744634c8988f3.34ccd603cc2f9155.11be3353c46e9e65.ee654fb13fa3712f
     f910870160c85b03.4cc6ab635217a959.9af590737eb1f5f0.10fef57a779a4c3c
     f48694699c2554dc.741939a34aebc7eb.ed8379e9d30e132f.944bd76c52378f82
     57187174ed86f72c
-VMOVD_IREGorMEM32_to_XMM(mem)
+VCMPSS_128_0x16(mem)
   before
     35313f7f63934067.830565099d2eaf2a.8992feafcfb8a738.67b3e8205e0f36cd
     0b61be77d16b255e.01d8f84cfe6ea89a.67fd7573fd89076c.62d3db84bc429877
@@ -3855,11 +3855,11 @@
   after
     35313f7f63934067.830565099d2eaf2a.8992feafcfb8a738.67b3e8205e0f36cd
     0b61be77d16b255e.01d8f84cfe6ea89a.67fd7573fd89076c.62d3db84bc429877
-    b376694a5219633e.cc4c499e5c717ad8.eb261adbf16ba1b2.3c2d4d81883376d9
-    0000000000000000.0000000000000000.0000000000000000.000000005e0f36cd
+    0000000000000000.0000000000000000.67fd7573fd89076c.62d3db8400000000
+    0a3abce303aab633.3fad526b52c4628f.efd96ad3c7693237.4f0e3a835e6c0c9e
     f8c29ff6db7b9572
 
-VMOVD_IREGorMEM32_to_XMM(reg)
+VCMPSS_128_0x16(reg)
   before
     939577469bec4e03.ec7a332eff29d968.b64711207df29c6c.50e2df479a8f7626
     7cd3bee0394973fa.35024b1763a2890a.8c6680277888631b.ea0cf72486ea28ac
@@ -3867,12 +3867,12 @@
     a9bf899e80fdefd1.6c194b73d1b48043.ca6264df50198b9d.39f6fec51c6cc92c
     a64ee462fdab2f7e
   after
-    0000000000000000.0000000000000000.0000000000000000.00000000fdab2f7e
+    0000000000000000.0000000000000000.8c6680277888631b.ea0cf724ffffffff
     7cd3bee0394973fa.35024b1763a2890a.8c6680277888631b.ea0cf72486ea28ac
     10c8702e51203f06.c19d7f8a4a228244.1f569dede011f447.99242d54a88405f5
     a9bf899e80fdefd1.6c194b73d1b48043.ca6264df50198b9d.39f6fec51c6cc92c
     a64ee462fdab2f7e
-VMOVD_IREGorMEM32_to_XMM(mem)
+VCMPSS_128_0x16(mem)
   before
     bcf85d16674ff416.a405069a616abf08.12402bbe13643e33.e8d7cf68642d64c8
     57c0e4cf7764d421.5de6e29091f5eb56.8fe09b582c3f793f.d702dcf3b9d8ba75
@@ -3882,11 +3882,11 @@
   after
     bcf85d16674ff416.a405069a616abf08.12402bbe13643e33.e8d7cf68642d64c8
     57c0e4cf7764d421.5de6e29091f5eb56.8fe09b582c3f793f.d702dcf3b9d8ba75
-    5371f57848f48bcb.30ae19ebab2aae68.bfc3182b3950ed94.f12d86eeeba6ca4f
-    0000000000000000.0000000000000000.0000000000000000.00000000642d64c8
+    0000000000000000.0000000000000000.8fe09b582c3f793f.d702dcf300000000
+    8cd90dfdf70dd43f.79a9a7174c9445e9.7eb61d2556a3565d.94a5c9c49523d004
     1bb5a1e153dc073d
 
-VMOVQ_XMM_MEM64(reg)
+VCMPSS_128_0x17(reg)
   before
     e1ab0bb1c25daca8.dec2a64b9fba6daa.942388800fbfec86.a88426309e446fc7
     43d102a07e30fbf1.24f93e4c5c080f37.dd67b9929137dfea.19fbaf3a2d40f5fd
@@ -3894,12 +3894,12 @@
     4ce0878c4a0186cc.0181591b88b4656a.6981f8613f4097ba.3f1032f892773780
     ad462484a0ca6b25
   after
-    e1ab0bb1c25daca8.dec2a64b9fba6daa.942388800fbfec86.a88426309e446fc7
+    0000000000000000.0000000000000000.dd67b9929137dfea.19fbaf3affffffff
     43d102a07e30fbf1.24f93e4c5c080f37.dd67b9929137dfea.19fbaf3a2d40f5fd
     9e74821a22e330c4.3c4a50ed4c027913.b0c235b96d8959c3.ace6342e20a3a42d
     4ce0878c4a0186cc.0181591b88b4656a.6981f8613f4097ba.3f1032f892773780
     ad462484a0ca6b25
-VMOVQ_XMM_MEM64(mem)
+VCMPSS_128_0x17(mem)
   before
     d25486be66a8fc46.ab610d6093173ab6.4f69d3c02e2b9067.64eefef7a5e9d47e
     8906d492fe1ca50f.1543110498b0882d.01d03cca5a72b637.fc5544e5380e4eb9
@@ -3907,13 +3907,13 @@
     228526b91af6334c.7d598068489ce074.0646c8b9b1a1e1fe.78467d7e5b02e445
     136668ff22e878ef
   after
-    d25486be66a8fc46.ab610d6093173ab6.4f69d3c02e2b9067.fc5544e5380e4eb9
+    d25486be66a8fc46.ab610d6093173ab6.4f69d3c02e2b9067.64eefef7a5e9d47e
     8906d492fe1ca50f.1543110498b0882d.01d03cca5a72b637.fc5544e5380e4eb9
-    b0288bec873224ad.e7d28ee2f658abde.f5800f2427969205.8f04c599963e3f17
+    0000000000000000.0000000000000000.01d03cca5a72b637.fc5544e5ffffffff
     228526b91af6334c.7d598068489ce074.0646c8b9b1a1e1fe.78467d7e5b02e445
     136668ff22e878ef
 
-VMOVQ_XMM_MEM64(reg)
+VCMPSS_128_0x17(reg)
   before
     bbb1828a877b39c0.baea21e3d5758e17.3425e3012b07639c.0feee47715a15f4d
     ce73c88a27486165.5624f858d4baf33b.6683b4193a267002.ee44dd496fa2c81f
@@ -3921,12 +3921,12 @@
     a18cc59986bdd8da.06422bcf0cc7c63d.ae1f8d764eac1636.9a295bda72d449fb
     1f50d770541dda5d
   after
-    bbb1828a877b39c0.baea21e3d5758e17.3425e3012b07639c.0feee47715a15f4d
+    0000000000000000.0000000000000000.6683b4193a267002.ee44dd49ffffffff
     ce73c88a27486165.5624f858d4baf33b.6683b4193a267002.ee44dd496fa2c81f
     a7f8356b9dda2c8a.d0fd270232d11ce4.70bdee1c11834251.7d13311bdaaed7a0
     a18cc59986bdd8da.06422bcf0cc7c63d.ae1f8d764eac1636.9a295bda72d449fb
     1f50d770541dda5d
-VMOVQ_XMM_MEM64(mem)
+VCMPSS_128_0x17(mem)
   before
     ea5522ca9b9745f2.1a7a74817d7d9f02.d2be7faa7da7ac72.7cf78d938a2d285c
     d504b7d5644d47e5.6c103f8d1fa7bead.123f9f7fa17e8cb1.3690eadf6390b370
@@ -3934,13 +3934,13 @@
     7f90afaaea9e0097.0f5f16c5d267f23e.597c34c7753e24f7.de33adb55b322811
     84d60a17b18888f6
   after
-    ea5522ca9b9745f2.1a7a74817d7d9f02.d2be7faa7da7ac72.3690eadf6390b370
+    ea5522ca9b9745f2.1a7a74817d7d9f02.d2be7faa7da7ac72.7cf78d938a2d285c
     d504b7d5644d47e5.6c103f8d1fa7bead.123f9f7fa17e8cb1.3690eadf6390b370
-    be29117bca4b9c62.f598212a07c77088.a08f073a95562024.3835a1c77564f51e
+    0000000000000000.0000000000000000.123f9f7fa17e8cb1.3690eadfffffffff
     7f90afaaea9e0097.0f5f16c5d267f23e.597c34c7753e24f7.de33adb55b322811
     84d60a17b18888f6
 
-VMOVQ_XMM_MEM64(reg)
+VCMPSS_128_0x17(reg)
   before
     866ab45814f15378.f5050a4ddf512eae.18b11ac91b15807c.1ad0a1125c3f5657
     403ba8e31ff9c344.fc53a050c571e3d3.6ada29a17f5c56ee.bd58ca0766677070
@@ -3948,12 +3948,12 @@
     4cc35b8c9f188469.2ead6926d725d1fa.5de05a8206e7c91c.1c3340a0555a4f7b
     911f861c723c8bc5
   after
-    866ab45814f15378.f5050a4ddf512eae.18b11ac91b15807c.1ad0a1125c3f5657
+    0000000000000000.0000000000000000.6ada29a17f5c56ee.bd58ca07ffffffff
     403ba8e31ff9c344.fc53a050c571e3d3.6ada29a17f5c56ee.bd58ca0766677070
     0e94e1266f2d1506.7147eb9fba09db33.632640bb99c9b03f.1fe02b93b0c12f6d
     4cc35b8c9f188469.2ead6926d725d1fa.5de05a8206e7c91c.1c3340a0555a4f7b
     911f861c723c8bc5
-VMOVQ_XMM_MEM64(mem)
+VCMPSS_128_0x17(mem)
   before
     586e78f22276a078.551212814c474d1a.105196d13ad18353.b55673626142de31
     4eed920d82114ac0.87ce02711245acc4.f3ffec8cff1aaa6b.c8d287c746672a29
@@ -3961,13 +3961,13 @@
     37ab2fc7c09f4bbd.d3bd7ff355de1bb5.2ca808e31cb14e86.8a0f91d1213c5b74
     f2677f4d4d05b61e
   after
-    586e78f22276a078.551212814c474d1a.105196d13ad18353.c8d287c746672a29
+    586e78f22276a078.551212814c474d1a.105196d13ad18353.b55673626142de31
     4eed920d82114ac0.87ce02711245acc4.f3ffec8cff1aaa6b.c8d287c746672a29
-    4f68505bad1b44c8.3d4328c98b9edd14.b383e943410c056d.f0a1931d52e1ebb0
+    0000000000000000.0000000000000000.f3ffec8cff1aaa6b.c8d287c7ffffffff
     37ab2fc7c09f4bbd.d3bd7ff355de1bb5.2ca808e31cb14e86.8a0f91d1213c5b74
     f2677f4d4d05b61e
 
-VMOVDQA_GtoE_256(reg)
+VCMPSS_128_0x18(reg)
   before
     84f758fe75c73a5d.e282a93dd6aa1bca.a487035c0c92a354.3b3bc556ad1742e2
     9d091951330f21db.2cb83caa0c47701c.0eefb0714b45b19d.ba089c8a0f499dac
@@ -3975,12 +3975,12 @@
     cfe73f89e25d0b46.0d759b144568973e.19c4764bd3da4edb.7b8089e1b943773c
     75c397dd37226e5a
   after
-    84f758fe75c73a5d.e282a93dd6aa1bca.a487035c0c92a354.3b3bc556ad1742e2
+    0000000000000000.0000000000000000.0eefb0714b45b19d.ba089c8a00000000
     9d091951330f21db.2cb83caa0c47701c.0eefb0714b45b19d.ba089c8a0f499dac
-    cfe73f89e25d0b46.0d759b144568973e.19c4764bd3da4edb.7b8089e1b943773c
+    97eabcb12367a844.f11b64f87d8205df.6c3f829caf84813b.86db0a6a5f541b11
     cfe73f89e25d0b46.0d759b144568973e.19c4764bd3da4edb.7b8089e1b943773c
     75c397dd37226e5a
-VMOVDQA_GtoE_256(mem)
+VCMPSS_128_0x18(mem)
   before
     4f6fb049f8febc97.a14a9d470b7d858a.5c935feb8104e266.73ca87e953d35529
     e7524e1115e21c1e.695fd2563b5253bf.ba412a674d62a282.d49db1e2ccfcd2d0
@@ -3988,13 +3988,13 @@
     bee80e66d9f305bc.4bd3b3171e4bdaa6.137dcb0202966f49.1fda4195180b1cdb
     c1db9f27220a6297
   after
-    1836ef22acda4b1c.8374db220d68b18f.034b7a76c48f92bf.9a89f0a2dae0007d
+    4f6fb049f8febc97.a14a9d470b7d858a.5c935feb8104e266.73ca87e953d35529
     e7524e1115e21c1e.695fd2563b5253bf.ba412a674d62a282.d49db1e2ccfcd2d0
-    1836ef22acda4b1c.8374db220d68b18f.034b7a76c48f92bf.9a89f0a2dae0007d
+    0000000000000000.0000000000000000.ba412a674d62a282.d49db1e200000000
     bee80e66d9f305bc.4bd3b3171e4bdaa6.137dcb0202966f49.1fda4195180b1cdb
     c1db9f27220a6297
 
-VMOVDQA_GtoE_256(reg)
+VCMPSS_128_0x18(reg)
   before
     dad906c495680e5c.b53427cab738052b.1dca55a109880cb2.c5a297f92483f54b
     c72072d90cb15bd7.d8e6b63b63b50994.55a3c02d6aaa815c.f7875c464663dff2
@@ -4002,12 +4002,12 @@
     8eb94a177836cb9e.17ab27f092890707.662edaf701ce2641.48c2be92f729d2dd
     1eae5369bf285279
   after
-    dad906c495680e5c.b53427cab738052b.1dca55a109880cb2.c5a297f92483f54b
+    0000000000000000.0000000000000000.55a3c02d6aaa815c.f7875c4600000000
     c72072d90cb15bd7.d8e6b63b63b50994.55a3c02d6aaa815c.f7875c464663dff2
-    8eb94a177836cb9e.17ab27f092890707.662edaf701ce2641.48c2be92f729d2dd
+    e5fce0d0247286b4.05c938a3f877cb25.4eabed25de3e7553.84f995d58241ea69
     8eb94a177836cb9e.17ab27f092890707.662edaf701ce2641.48c2be92f729d2dd
     1eae5369bf285279
-VMOVDQA_GtoE_256(mem)
+VCMPSS_128_0x18(mem)
   before
     e48bd147f649286a.1fa2ae18a5896542.ea56010d4ef77b69.f877810d6ee9ced2
     7524b316b8980edc.f505074146f8924c.599741e548cee174.60d4e0d5c218aab3
@@ -4015,13 +4015,13 @@
     67b8933b50f2fcf1.db6489b856578f3f.7f0be47b63e4753c.21f5b4288ce7ec14
     3352218b3b9fcbec
   after
-    ac4475c42322c0fa.6a2c52fdf80e8b67.423a64669b19f657.fa8ff3ba97e9f590
+    e48bd147f649286a.1fa2ae18a5896542.ea56010d4ef77b69.f877810d6ee9ced2
     7524b316b8980edc.f505074146f8924c.599741e548cee174.60d4e0d5c218aab3
-    ac4475c42322c0fa.6a2c52fdf80e8b67.423a64669b19f657.fa8ff3ba97e9f590
+    0000000000000000.0000000000000000.599741e548cee174.60d4e0d500000000
     67b8933b50f2fcf1.db6489b856578f3f.7f0be47b63e4753c.21f5b4288ce7ec14
     3352218b3b9fcbec
 
-VMOVDQA_GtoE_256(reg)
+VCMPSS_128_0x18(reg)
   before
     8bf2354f409ccec4.804c89695d147ced.a4f9aadefd60d881.eed53f10bd3c1c50
     8421ece0386a3047.d5ccd4396695fd19.2137b0db88b4a3d9.6966f012c52ca5be
@@ -4029,12 +4029,12 @@
     cd5b33196faa0400.9fbf566edae2f1b3.a7dd5c0abc6eaf7a.f70845084c054f5a
     c2b2e1d60307e8e1
   after
-    8bf2354f409ccec4.804c89695d147ced.a4f9aadefd60d881.eed53f10bd3c1c50
+    0000000000000000.0000000000000000.2137b0db88b4a3d9.6966f01200000000
     8421ece0386a3047.d5ccd4396695fd19.2137b0db88b4a3d9.6966f012c52ca5be
-    cd5b33196faa0400.9fbf566edae2f1b3.a7dd5c0abc6eaf7a.f70845084c054f5a
+    7c2b42aabe952f22.4004ef9686803aa2.ae6a971b94df2cf3.ce88746b95c1ccb3
     cd5b33196faa0400.9fbf566edae2f1b3.a7dd5c0abc6eaf7a.f70845084c054f5a
     c2b2e1d60307e8e1
-VMOVDQA_GtoE_256(mem)
+VCMPSS_128_0x18(mem)
   before
     0952c3bfd9d05471.d5febc9ae635ee8e.cccb85ac7dc6dc79.68def9159cec671a
     a9b467b1e76e4e38.ee61d897c0c02777.a4f2f93d8b38b71f.4db76ca6d1e59180
@@ -4042,13 +4042,13 @@
     65ede65d2157e01b.c791baba0b0b790d.c6c49d035af731be.f324c10ea87a2a4e
     6c509cbd832e110d
   after
-    7fa449974bec9462.76cd837e98d9ec68.04012d0b214440d2.b2b5b02bf6e66958
+    0952c3bfd9d05471.d5febc9ae635ee8e.cccb85ac7dc6dc79.68def9159cec671a
     a9b467b1e76e4e38.ee61d897c0c02777.a4f2f93d8b38b71f.4db76ca6d1e59180
-    7fa449974bec9462.76cd837e98d9ec68.04012d0b214440d2.b2b5b02bf6e66958
+    0000000000000000.0000000000000000.a4f2f93d8b38b71f.4db76ca600000000
     65ede65d2157e01b.c791baba0b0b790d.c6c49d035af731be.f324c10ea87a2a4e
     6c509cbd832e110d
 
-VMOVDQA_GtoE_128(reg)
+VCMPSS_128_0x19(reg)
   before
     79843ca3228d5a41.385cb9ef84b9ee8e.3ef877b6b4e30911.c707c511535c470e
     760e9d2c21234097.d4bd3e3991217ce7.384db8e02fecda21.e496212228803eef
@@ -4056,12 +4056,12 @@
     b04f92d7b125d758.d8854ea5162c03fe.20f5b46b0ec22914.ddc767f9d332bd12
     72014898e1d8bead
   after
-    79843ca3228d5a41.385cb9ef84b9ee8e.3ef877b6b4e30911.c707c511535c470e
+    0000000000000000.0000000000000000.384db8e02fecda21.e496212200000000
     760e9d2c21234097.d4bd3e3991217ce7.384db8e02fecda21.e496212228803eef
-    0000000000000000.0000000000000000.20f5b46b0ec22914.ddc767f9d332bd12
+    bf38bbc41d7c01bb.16dcf12763984454.0fde78a31ab225e9.f73c2e21f36ed18c
     b04f92d7b125d758.d8854ea5162c03fe.20f5b46b0ec22914.ddc767f9d332bd12
     72014898e1d8bead
-VMOVDQA_GtoE_128(mem)
+VCMPSS_128_0x19(mem)
   before
     92b74de93c6d8f88.a49f1fd17aa9fe1b.f784d29fc7e87514.c8df66a5a9a7204e
     19b5f3d8fdfcedd0.f9745d1f1395b4b0.4fa4f80292d955c0.61e88cbb86ed4745
@@ -4069,13 +4069,13 @@
     ccb80e40273a4055.32dcdc6327d2b8fe.1a7a1bafe387528c.d986212f79ce1514
     70b48864c6803345
   after
-    92b74de93c6d8f88.a49f1fd17aa9fe1b.bcb23cb8920a602e.485c211a4221daa2
+    92b74de93c6d8f88.a49f1fd17aa9fe1b.f784d29fc7e87514.c8df66a5a9a7204e
     19b5f3d8fdfcedd0.f9745d1f1395b4b0.4fa4f80292d955c0.61e88cbb86ed4745
-    e3c6b451429294b0.0a19482b197433c2.bcb23cb8920a602e.485c211a4221daa2
+    0000000000000000.0000000000000000.4fa4f80292d955c0.61e88cbb00000000
     ccb80e40273a4055.32dcdc6327d2b8fe.1a7a1bafe387528c.d986212f79ce1514
     70b48864c6803345
 
-VMOVDQA_GtoE_128(reg)
+VCMPSS_128_0x19(reg)
   before
     6a305327c5c471e1.b0557c91c700aceb.cf071531d93b7e0f.45c80fd2a25de603
     21477de313250a96.6b6b7b313ff1959d.3ce7f003cc3cc2a2.1968960dea97d9c2
@@ -4083,12 +4083,12 @@
     3976def50a6f41f5.d62d180a2481ce07.f5f67960e434b4fc.2ccd4a7a8767ccc2
     232b6f851416435d
   after
-    6a305327c5c471e1.b0557c91c700aceb.cf071531d93b7e0f.45c80fd2a25de603
+    0000000000000000.0000000000000000.3ce7f003cc3cc2a2.1968960dffffffff
     21477de313250a96.6b6b7b313ff1959d.3ce7f003cc3cc2a2.1968960dea97d9c2
-    0000000000000000.0000000000000000.f5f67960e434b4fc.2ccd4a7a8767ccc2
+    f24502044b303c0d.d9c4850aaa18b798.d4c868449c61c062.72262b4bd841e7f3
     3976def50a6f41f5.d62d180a2481ce07.f5f67960e434b4fc.2ccd4a7a8767ccc2
     232b6f851416435d
-VMOVDQA_GtoE_128(mem)
+VCMPSS_128_0x19(mem)
   before
     330a17599a5a0aed.52250d24eb7156f8.3e71af1bca399517.f9bd20c34043d91c
     3837bde0363ddaa1.99a08cfd8bbfb6c2.ed5ec72bb84bc9f4.3e6857d94d196d6d
@@ -4096,13 +4096,13 @@
     90abf3bb1e168c1f.2025675875744a5e.8f5f66f5d9ae67c3.f69e6acee84ccc55
     23c03d85afc01043
   after
-    330a17599a5a0aed.52250d24eb7156f8.bfbfda2508c326c9.1e451c0ea743aa9c
+    330a17599a5a0aed.52250d24eb7156f8.3e71af1bca399517.f9bd20c34043d91c
     3837bde0363ddaa1.99a08cfd8bbfb6c2.ed5ec72bb84bc9f4.3e6857d94d196d6d
-    0d7edd0703cd72a3.693156ea85e79e01.bfbfda2508c326c9.1e451c0ea743aa9c
+    0000000000000000.0000000000000000.ed5ec72bb84bc9f4.3e6857d900000000
     90abf3bb1e168c1f.2025675875744a5e.8f5f66f5d9ae67c3.f69e6acee84ccc55
     23c03d85afc01043
 
-VMOVDQA_GtoE_128(reg)
+VCMPSS_128_0x19(reg)
   before
     fff792a0962cb212.9c897ce6a222e542.19c8bcb4f8f2f688.3b0be6874517490d
     e78f6389391bee70.0ce6f376abff3938.b0664f68aaeedd29.9e8fd6c7680a88d4
@@ -4110,12 +4110,12 @@
     4c116e7a25b32383.8d489b72bf5bc04b.28c2248c088e4f81.f84ff70145c00c88
     a82220d4379ac9cc
   after
-    fff792a0962cb212.9c897ce6a222e542.19c8bcb4f8f2f688.3b0be6874517490d
+    0000000000000000.0000000000000000.b0664f68aaeedd29.9e8fd6c700000000
     e78f6389391bee70.0ce6f376abff3938.b0664f68aaeedd29.9e8fd6c7680a88d4
-    0000000000000000.0000000000000000.28c2248c088e4f81.f84ff70145c00c88
+    38d3aeae35190007.be8cd45656b9432c.414b1ee226f33ced.93b7b2a15f94df44
     4c116e7a25b32383.8d489b72bf5bc04b.28c2248c088e4f81.f84ff70145c00c88
     a82220d4379ac9cc
-VMOVDQA_GtoE_128(mem)
+VCMPSS_128_0x19(mem)
   before
     7efda904502fd23e.8093a059a6749491.54e6c4b501f16cc1.c0185dd4ed4a5291
     58ad0e7fac8ae508.30a63eb753e88edd.f132cc0d388703b9.679ac62571b380c8
@@ -4123,13 +4123,13 @@
     84b75d02a0c31455.75afb3a0a21b11dd.190366aaf7e5e0e1.4e4d1492c3bd505e
     4716f286ca776914
   after
-    7efda904502fd23e.8093a059a6749491.3ef72e66812a4060.789259eb2f5616d3
+    7efda904502fd23e.8093a059a6749491.54e6c4b501f16cc1.c0185dd4ed4a5291
     58ad0e7fac8ae508.30a63eb753e88edd.f132cc0d388703b9.679ac62571b380c8
-    10fccb2f69b8bc56.b8964600c89c4f12.3ef72e66812a4060.789259eb2f5616d3
+    0000000000000000.0000000000000000.f132cc0d388703b9.679ac62500000000
     84b75d02a0c31455.75afb3a0a21b11dd.190366aaf7e5e0e1.4e4d1492c3bd505e
     4716f286ca776914
 
-VMOVDQU_GtoE_128(reg)
+VCMPSS_128_0x1A(reg)
   before
     bd3bf033df0d9ea2.8ea93fe36fb9a831.c13d81037df210e9.5c20f0c6b7c49f69
     0e0608069f0d2bb3.0ca0edbef2a63615.f98bad95f4ab8ae3.e51b49a6dcd43823
@@ -4137,12 +4137,12 @@
     adc27bca8e793c10.cfc99e1281922aa7.9d9b0bf727f9da50.35db5464c7b5ebe0
     b438ff18c59e7d3a
   after
-    bd3bf033df0d9ea2.8ea93fe36fb9a831.c13d81037df210e9.5c20f0c6b7c49f69
+    0000000000000000.0000000000000000.f98bad95f4ab8ae3.e51b49a6ffffffff
     0e0608069f0d2bb3.0ca0edbef2a63615.f98bad95f4ab8ae3.e51b49a6dcd43823
-    0000000000000000.0000000000000000.9d9b0bf727f9da50.35db5464c7b5ebe0
+    95c53869a5024cf4.d866e37f4495782e.79e631c3a4d4b977.8ec0eb378320683c
     adc27bca8e793c10.cfc99e1281922aa7.9d9b0bf727f9da50.35db5464c7b5ebe0
     b438ff18c59e7d3a
-VMOVDQU_GtoE_128(mem)
+VCMPSS_128_0x1A(mem)
   before
     e8a3694198e7d977.b34acd93f5fd38b4.ce939863c6a90aad.c1f4369f1ca5291b
     aee70cca5d9cbcc2.04a92a32771a7c8c.af914f5f2fe7d26c.413eaf251d64e183
@@ -4150,13 +4150,13 @@
     5b2df2ac2a7c0635.f31bf79f3951ca86.8b58e204da060dc3.c4d47780b44c7fdd
     80b8bf2c828ddd26
   after
-    e8a3694198e7d977.b34acd93f5fd38b4.4f8f3ff0d6573f0f.79c470f7c6c23f35
+    e8a3694198e7d977.b34acd93f5fd38b4.ce939863c6a90aad.c1f4369f1ca5291b
     aee70cca5d9cbcc2.04a92a32771a7c8c.af914f5f2fe7d26c.413eaf251d64e183
-    e0d1669f2fcae248.fa2a8f12af5d4343.4f8f3ff0d6573f0f.79c470f7c6c23f35
+    0000000000000000.0000000000000000.af914f5f2fe7d26c.413eaf2500000000
     5b2df2ac2a7c0635.f31bf79f3951ca86.8b58e204da060dc3.c4d47780b44c7fdd
     80b8bf2c828ddd26
 
-VMOVDQU_GtoE_128(reg)
+VCMPSS_128_0x1A(reg)
   before
     08be4467cd1294bc.fbc72cdd6bbfe6b4.49c65e45b2824d01.3dbab68555fff7b4
     b830029d3065e14d.9c6b911e0e9e3bf2.5978c070b67d085f.427f3661634eba0d
@@ -4164,12 +4164,12 @@
     ff8a1babb0ab2c0a.5200c881e7603b5a.18216605ccfe1476.b5652ad7aa1fbaa8
     db1e96481aba6f43
   after
-    08be4467cd1294bc.fbc72cdd6bbfe6b4.49c65e45b2824d01.3dbab68555fff7b4
+    0000000000000000.0000000000000000.5978c070b67d085f.427f366100000000
     b830029d3065e14d.9c6b911e0e9e3bf2.5978c070b67d085f.427f3661634eba0d
-    0000000000000000.0000000000000000.18216605ccfe1476.b5652ad7aa1fbaa8
+    ec5bf63a4815ff83.1be59c5c2e25c41b.7f7d1a8ce0cd364c.7674de8321ff12fa
     ff8a1babb0ab2c0a.5200c881e7603b5a.18216605ccfe1476.b5652ad7aa1fbaa8
     db1e96481aba6f43
-VMOVDQU_GtoE_128(mem)
+VCMPSS_128_0x1A(mem)
   before
     c46b9fc58fdaedf7.4f0b6d5a05b5a28f.1e89947b565c5ddb.7eb0a248179dde86
     4c18c037228df0ef.3728e8b4e2be9ebe.5b4d79349725e6cb.0e75cabf5d35cf2b
@@ -4177,13 +4177,13 @@
     a9c03bad18da735c.3e6a4a1ba6ff17c8.98b08298fc4a1ca8.1cd5cafd47811ade
     52079a9c244dea46
   after
-    c46b9fc58fdaedf7.4f0b6d5a05b5a28f.e515f49ac5c59256.24bed8d83952250f
+    c46b9fc58fdaedf7.4f0b6d5a05b5a28f.1e89947b565c5ddb.7eb0a248179dde86
     4c18c037228df0ef.3728e8b4e2be9ebe.5b4d79349725e6cb.0e75cabf5d35cf2b
-    4ff0758bf1de3357.122f8926e4535b42.e515f49ac5c59256.24bed8d83952250f
+    0000000000000000.0000000000000000.5b4d79349725e6cb.0e75cabf00000000
     a9c03bad18da735c.3e6a4a1ba6ff17c8.98b08298fc4a1ca8.1cd5cafd47811ade
     52079a9c244dea46
 
-VMOVDQU_GtoE_128(reg)
+VCMPSS_128_0x1A(reg)
   before
     22a046206b43d2f0.36548c8ab28c6c2a.152629ffc44e0cfc.50e99e1a59bf41ec
     e8eccaf5b9ed0f8b.d278e60cdb00daed.f5af213ddbcd7689.e98cc40cf731bd4e
@@ -4191,12 +4191,12 @@
     c6cc4642d893723e.a7a0a2b44d6003ff.3c574d7c63889d60.2d3e20f06839a81f
     91e64cba72e890e5
   after
-    22a046206b43d2f0.36548c8ab28c6c2a.152629ffc44e0cfc.50e99e1a59bf41ec
+    0000000000000000.0000000000000000.f5af213ddbcd7689.e98cc40cffffffff
     e8eccaf5b9ed0f8b.d278e60cdb00daed.f5af213ddbcd7689.e98cc40cf731bd4e
-    0000000000000000.0000000000000000.3c574d7c63889d60.2d3e20f06839a81f
+    00362087a9d9dac1.59f8c421b04378d0.38512f438707931c.3e64715af3ab4bfb
     c6cc4642d893723e.a7a0a2b44d6003ff.3c574d7c63889d60.2d3e20f06839a81f
     91e64cba72e890e5
-VMOVDQU_GtoE_128(mem)
+VCMPSS_128_0x1A(mem)
   before
     462873a42fc3be7a.96f83792e1a611b0.983bfdb0cd6337a7.5b0e79550bdcd102
     28d0119bb8d6f00a.cc07efe3609ef4c0.079650034c59cff4.f3c3ae381c906aad
@@ -4204,13 +4204,13 @@
     e2819e5ca4d64ac9.dafea539336e7571.d4bdce5bb94b1e2b.f95224d0e746bfd1
     21c45c5cd960f1a1
   after
-    462873a42fc3be7a.96f83792e1a611b0.d27e1798e74d8811.5ec0e8923130a60e
+    462873a42fc3be7a.96f83792e1a611b0.983bfdb0cd6337a7.5b0e79550bdcd102
     28d0119bb8d6f00a.cc07efe3609ef4c0.079650034c59cff4.f3c3ae381c906aad
-    12a9a0892b2ee0c0.c4456aa2f207571d.d27e1798e74d8811.5ec0e8923130a60e
+    0000000000000000.0000000000000000.079650034c59cff4.f3c3ae3800000000
     e2819e5ca4d64ac9.dafea539336e7571.d4bdce5bb94b1e2b.f95224d0e746bfd1
     21c45c5cd960f1a1
 
-VMOVDQA_EtoG_256(reg)
+VCMPSS_128_0x1C(reg)
   before
     30648ea4a40a7a2b.732286ff3edaec50.6a7e9b16be5e8b68.e81ff139df604c6e
     837cb613e3ce941a.a059d45e15478082.cf1048a42f64d5af.ec72fd1c7497d005
@@ -4218,12 +4218,12 @@
     6648d3152fda6eda.42b99300ed8a7096.8d9eb78236dff4dc.3017bca55d9cc4e1
     29016922e982ae7e
   after
-    30648ea4a40a7a2b.732286ff3edaec50.6a7e9b16be5e8b68.e81ff139df604c6e
-    765ace14333a7c1b.47f205654628c38a.6702a84e230b8ff2.bb816cf195fc641d
+    0000000000000000.0000000000000000.cf1048a42f64d5af.ec72fd1cffffffff
+    837cb613e3ce941a.a059d45e15478082.cf1048a42f64d5af.ec72fd1c7497d005
     765ace14333a7c1b.47f205654628c38a.6702a84e230b8ff2.bb816cf195fc641d
     6648d3152fda6eda.42b99300ed8a7096.8d9eb78236dff4dc.3017bca55d9cc4e1
     29016922e982ae7e
-VMOVDQA_EtoG_256(mem)
+VCMPSS_128_0x1C(mem)
   before
     800bed5654bbdc1f.ad93c2817438a502.6f7afc1b257744cf.9c3172ab036c411a
     1301c62cba510bf1.a88796c49de35e40.a800bba20afefb64.f207d435263fb158
@@ -4233,11 +4233,11 @@
   after
     800bed5654bbdc1f.ad93c2817438a502.6f7afc1b257744cf.9c3172ab036c411a
     1301c62cba510bf1.a88796c49de35e40.a800bba20afefb64.f207d435263fb158
-    bcaf6f903853f620.b36f4b4b4664d540.cb184c81b928517e.ea6cd98c3ce48241
-    800bed5654bbdc1f.ad93c2817438a502.6f7afc1b257744cf.9c3172ab036c411a
+    0000000000000000.0000000000000000.a800bba20afefb64.f207d435ffffffff
+    59e1646eeaca5bd7.2a99de800c4945ad.b28f2ca54d03024c.dfab7d1de0e5ee82
     2f12bd52afd032c6
 
-VMOVDQA_EtoG_256(reg)
+VCMPSS_128_0x1C(reg)
   before
     34eb9398443089ba.c46221b2ebc4f443.694f49d08b1deb33.3b2fd6f8e39ac9f8
     4c83fd5c3c923109.daff2348574c7d90.ccde8aa85e6c037f.40c4c66896f963af
@@ -4245,12 +4245,12 @@
     21207b0ac3895e6b.78bde21ae337537a.6eb77c9c71ad7818.3202684bc541ffec
     d6411397784279ca
   after
-    34eb9398443089ba.c46221b2ebc4f443.694f49d08b1deb33.3b2fd6f8e39ac9f8
-    d126f70932816460.7884e41c4b6eb4e9.af929c7221c3c93d.9f1c78df832d8b9c
+    0000000000000000.0000000000000000.ccde8aa85e6c037f.40c4c668ffffffff
+    4c83fd5c3c923109.daff2348574c7d90.ccde8aa85e6c037f.40c4c66896f963af
     d126f70932816460.7884e41c4b6eb4e9.af929c7221c3c93d.9f1c78df832d8b9c
     21207b0ac3895e6b.78bde21ae337537a.6eb77c9c71ad7818.3202684bc541ffec
     d6411397784279ca
-VMOVDQA_EtoG_256(mem)
+VCMPSS_128_0x1C(mem)
   before
     67a6f3afba3bb563.96bc87cd8a375dd5.b776992f3ab21771.65992491eab74dbd
     c2fd867fa43871e3.8d4815bd23169b4b.127b83456cecbcf7.f08492bd266b84d8
@@ -4260,11 +4260,11 @@
   after
     67a6f3afba3bb563.96bc87cd8a375dd5.b776992f3ab21771.65992491eab74dbd
     c2fd867fa43871e3.8d4815bd23169b4b.127b83456cecbcf7.f08492bd266b84d8
-    c11248f354456775.630e24462bb25579.63971e4a96f0fd3b.6bc3c18cc4585914
-    67a6f3afba3bb563.96bc87cd8a375dd5.b776992f3ab21771.65992491eab74dbd
+    0000000000000000.0000000000000000.127b83456cecbcf7.f08492bdffffffff
+    41b1b3f7e66f5446.725cadd43e98c70a.8798e428d3ca9767.31a3ad6a5e07071e
     a07052c39006cba1
 
-VMOVDQA_EtoG_256(reg)
+VCMPSS_128_0x1C(reg)
   before
     1376ad03f7e0e14a.1ea6457875c2f481.177cadd3f7532caa.5a4854cd408746a7
     e601b9962e2284c5.34bc79601d480253.afba21b0f26fc107.b874e724f832c529
@@ -4272,12 +4272,12 @@
     1bd5d4667d0b64df.7b7fb7192a225b6b.23c552af21fc6aa2.856f6a98bb82269d
     acd7528dfd4080e8
   after
-    1376ad03f7e0e14a.1ea6457875c2f481.177cadd3f7532caa.5a4854cd408746a7
-    745d72e9d156f1bd.5fc0cb9dfb0f3be8.946404d5cc79c2ca.7de81a1918d7d117
+    0000000000000000.0000000000000000.afba21b0f26fc107.b874e724ffffffff
+    e601b9962e2284c5.34bc79601d480253.afba21b0f26fc107.b874e724f832c529
     745d72e9d156f1bd.5fc0cb9dfb0f3be8.946404d5cc79c2ca.7de81a1918d7d117
     1bd5d4667d0b64df.7b7fb7192a225b6b.23c552af21fc6aa2.856f6a98bb82269d
     acd7528dfd4080e8
-VMOVDQA_EtoG_256(mem)
+VCMPSS_128_0x1C(mem)
   before
     ceea4ee5fb1d9a23.36b7dc7bceca19d6.64c3bac2c78e1d09.b82808ab8b84f639
     c776db8ad123317c.204d84935f214b4f.f6584f83ee5e3eed.afda2034a99ea23b
@@ -4287,11 +4287,11 @@
   after
     ceea4ee5fb1d9a23.36b7dc7bceca19d6.64c3bac2c78e1d09.b82808ab8b84f639
     c776db8ad123317c.204d84935f214b4f.f6584f83ee5e3eed.afda2034a99ea23b
-    734573699a60011c.37e4ca19cd9b37f5.0d0cf248b99e7a44.642798b515d5aa56
-    ceea4ee5fb1d9a23.36b7dc7bceca19d6.64c3bac2c78e1d09.b82808ab8b84f639
+    0000000000000000.0000000000000000.f6584f83ee5e3eed.afda2034ffffffff
+    ae24946f73dfc632.d5c8a97bb3c51975.85aa1ffd475b8d3a.335b6b9c6bb64933
     78c2955448cbbc81
 
-VMOVDQA_EtoG_128(reg)
+VCMPSS_128_0x1D(reg)
   before
     8fa8134947a23fea.54dfb98676ad3be8.58441e24ad2a2c7b.3afd528eb1a032fa
     d458dfe704c70e1a.41415e9cc2d51d6a.1aa623805856adb2.08d208e7167927b1
@@ -4299,12 +4299,12 @@
     584a56cf2b287e82.5f2e19729f641785.cf47d2022f35e966.5e32eaa13a19ebb2
     9f550edb33f73355
   after
-    8fa8134947a23fea.54dfb98676ad3be8.58441e24ad2a2c7b.3afd528eb1a032fa
-    0000000000000000.0000000000000000.7938b6fb4fd6d8c7.cbf5bcf48ff3258a
+    0000000000000000.0000000000000000.1aa623805856adb2.08d208e7ffffffff
+    d458dfe704c70e1a.41415e9cc2d51d6a.1aa623805856adb2.08d208e7167927b1
     a31ff79a1dc564be.5118009c716328e5.7938b6fb4fd6d8c7.cbf5bcf48ff3258a
     584a56cf2b287e82.5f2e19729f641785.cf47d2022f35e966.5e32eaa13a19ebb2
     9f550edb33f73355
-VMOVDQA_EtoG_128(mem)
+VCMPSS_128_0x1D(mem)
   before
     6929a58c959aba9e.4f23f9f0cc7c9712.4950270a69e3a776.792073ff94ff1b3a
     987c29a27d0d3cb9.e4f6da6b9c4eed19.ea4aa650eaec94e2.d40c966019c1abef
@@ -4314,11 +4314,11 @@
   after
     6929a58c959aba9e.4f23f9f0cc7c9712.4950270a69e3a776.792073ff94ff1b3a
     987c29a27d0d3cb9.e4f6da6b9c4eed19.ea4aa650eaec94e2.d40c966019c1abef
-    07181808065c74d4.7211f7aa3629ba43.1ee810303f8c99f8.3a5a368f5a06d533
-    0000000000000000.0000000000000000.4950270a69e3a776.792073ff94ff1b3a
+    0000000000000000.0000000000000000.ea4aa650eaec94e2.d40c9660ffffffff
+    94caeeaa4c941f19.57bf4b1b369a3b3d.c0f6e29783ce74e2.08554ffaf45ad4af
     9b48dd0b824ae512
 
-VMOVDQA_EtoG_128(reg)
+VCMPSS_128_0x1D(reg)
   before
     4d81dc30a0614406.195e25746cc0f9b4.ee4bd229392cabb3.ae3f996fd3bfdfcd
     7b4a49d4ec2b2d38.74a03b5281ecbed2.93028940db6b4850.c291b0a54a6996e4
@@ -4326,12 +4326,12 @@
     bbbe5949770a8b04.185df0fafd76f746.762173396921f3b2.d07befdd1f1edc48
     82ac0fb5b540e2ee
   after
-    4d81dc30a0614406.195e25746cc0f9b4.ee4bd229392cabb3.ae3f996fd3bfdfcd
-    0000000000000000.0000000000000000.a1306accb7e34cc1.dab6a32605da5754
+    0000000000000000.0000000000000000.93028940db6b4850.c291b0a5ffffffff
+    7b4a49d4ec2b2d38.74a03b5281ecbed2.93028940db6b4850.c291b0a54a6996e4
     81f01e63ff35db53.805caa30a825299f.a1306accb7e34cc1.dab6a32605da5754
     bbbe5949770a8b04.185df0fafd76f746.762173396921f3b2.d07befdd1f1edc48
     82ac0fb5b540e2ee
-VMOVDQA_EtoG_128(mem)
+VCMPSS_128_0x1D(mem)
   before
     ca147e9ce24c246f.8502f5f2f03679f6.1a70899c9aece4f4.6d219ff38eb07bce
     8681bb7dc24e60fa.3b07efcb0546e0d6.6062ef039e91abd5.e17ceb66c11d1ec2
@@ -4341,11 +4341,11 @@
   after
     ca147e9ce24c246f.8502f5f2f03679f6.1a70899c9aece4f4.6d219ff38eb07bce
     8681bb7dc24e60fa.3b07efcb0546e0d6.6062ef039e91abd5.e17ceb66c11d1ec2
-    90bd3f44725350b8.3918423e52c5fe50.c7fda01922740914.307d51fe9ff31939
-    0000000000000000.0000000000000000.1a70899c9aece4f4.6d219ff38eb07bce
+    0000000000000000.0000000000000000.6062ef039e91abd5.e17ceb6600000000
+    c69687dd0e66b0d8.db82e9b974400d0f.2c0d17cc459ebadd.b471cf28c3bea7e0
     cba4604eca0b0562
 
-VMOVDQA_EtoG_128(reg)
+VCMPSS_128_0x1D(reg)
   before
     cf6200de4f656f6c.02d61035b1943e84.7d91e2a6074149c0.6960d006201d7a5e
     1df7ac43ef5821aa.214a553677e7b4e9.7b912973a656f00e.5bc147b5d2fc04c0
@@ -4353,12 +4353,12 @@
     08d5143bed3b4c70.79fd04e7de324b8c.fb938d5a79eb6a33.cfdb611f240b69de
     082dfbb2fe54bbf1
   after
-    cf6200de4f656f6c.02d61035b1943e84.7d91e2a6074149c0.6960d006201d7a5e
-    0000000000000000.0000000000000000.31ceb88bed0b3ca6.dffbf9c474481532
+    0000000000000000.0000000000000000.7b912973a656f00e.5bc147b500000000
+    1df7ac43ef5821aa.214a553677e7b4e9.7b912973a656f00e.5bc147b5d2fc04c0
     12af5ee8457157c7.ffbed2cd7d6ecf32.31ceb88bed0b3ca6.dffbf9c474481532
     08d5143bed3b4c70.79fd04e7de324b8c.fb938d5a79eb6a33.cfdb611f240b69de
     082dfbb2fe54bbf1
-VMOVDQA_EtoG_128(mem)
+VCMPSS_128_0x1D(mem)
   before
     66bd43691d2cc996.5db7c9a784423d51.69d5656eb741e322.352ea34be582b563
     c557b6309da14cfa.6b9f7998a6136515.ac10735023a65421.3be9f6ccce5c5adf
@@ -4368,11 +4368,11 @@
   after
     66bd43691d2cc996.5db7c9a784423d51.69d5656eb741e322.352ea34be582b563
     c557b6309da14cfa.6b9f7998a6136515.ac10735023a65421.3be9f6ccce5c5adf
-    02c7cef49bbe0348.8fda217bee390268.1e7ba9783f6e5ab5.68118349cf069556
-    0000000000000000.0000000000000000.69d5656eb741e322.352ea34be582b563
+    0000000000000000.0000000000000000.ac10735023a65421.3be9f6ccffffffff
+    f7d8099f3390a8ad.25b4bcbaf8404ef7.9be284d226a4b009.1af2442c850ba272
     acd837e28bf8bcdf
 
-VMOVDQU_EtoG_128(reg)
+VCMPSS_128_0x1E(reg)
   before
     7a0f57d87e58204a.8157e21f8022f855.8a7846c261b5856e.ff117e4af554134a
     dfe2a078f9b70a5f.7c11d65e9e80af6b.1874bb00c523e579.26d415ccc78a3fa3
@@ -4380,12 +4380,12 @@
     e2909f6af9a45f35.3560fbcebfd14193.224057caeb1b0bf8.2d45079ee6bbe150
     c58b5ac66acccffb
   after
-    7a0f57d87e58204a.8157e21f8022f855.8a7846c261b5856e.ff117e4af554134a
-    0000000000000000.0000000000000000.2cf217debe16a8c3.ecf7c444b953f041
+    0000000000000000.0000000000000000.1874bb00c523e579.26d415cc00000000
+    dfe2a078f9b70a5f.7c11d65e9e80af6b.1874bb00c523e579.26d415ccc78a3fa3
     399e0f3099a2b6c9.c4d05f4aaab7891c.2cf217debe16a8c3.ecf7c444b953f041
     e2909f6af9a45f35.3560fbcebfd14193.224057caeb1b0bf8.2d45079ee6bbe150
     c58b5ac66acccffb
-VMOVDQU_EtoG_128(mem)
+VCMPSS_128_0x1E(mem)
   before
     90953aa96294766f.38024b94b549424f.ab8f25d6fadd94fd.56a8762fe6bd4ac6
     6a2f2231ea1f92d7.964012196a1d9bc2.0228594e76e43e85.247770794b88a0d6
@@ -4395,11 +4395,11 @@
   after
     90953aa96294766f.38024b94b549424f.ab8f25d6fadd94fd.56a8762fe6bd4ac6
     6a2f2231ea1f92d7.964012196a1d9bc2.0228594e76e43e85.247770794b88a0d6
-    2f258e4c1d77de60.5798ed65b4ada53b.16f6142250f4fa59.e8f84113b7094ad7
-    0000000000000000.0000000000000000.ab8f25d6fadd94fd.56a8762fe6bd4ac6
+    0000000000000000.0000000000000000.0228594e76e43e85.24777079ffffffff
+    bb43fae517aa1736.d955dae42e859d65.c2c6d03ea31985a2.fe79e56bc5cb8473
     c24459ed115b8956
 
-VMOVDQU_EtoG_128(reg)
+VCMPSS_128_0x1E(reg)
   before
     90a798033944972d.ea54e3e8f5c4f984.76c2d302742fbfed.e4640b8e8c5d9b8f
     c4ec9e1ad612e8a4.9725c341d2cf3f76.8b2cd62c2339477e.579c40ff26cef74a
@@ -4407,12 +4407,12 @@
     cd4ff0fce58e4521.e0385da5fbeeeafa.8e27e84f2a9b776e.9f0989f0df6575db
     2dd7954835a30d0a
   after
-    90a798033944972d.ea54e3e8f5c4f984.76c2d302742fbfed.e4640b8e8c5d9b8f
-    0000000000000000.0000000000000000.75dfdfccd62e70c5.f73aec7b8e7857ff
+    0000000000000000.0000000000000000.8b2cd62c2339477e.579c40ffffffffff
+    c4ec9e1ad612e8a4.9725c341d2cf3f76.8b2cd62c2339477e.579c40ff26cef74a
     ba60679f8651b867.a08318dccbd9a63a.75dfdfccd62e70c5.f73aec7b8e7857ff
     cd4ff0fce58e4521.e0385da5fbeeeafa.8e27e84f2a9b776e.9f0989f0df6575db
     2dd7954835a30d0a
-VMOVDQU_EtoG_128(mem)
+VCMPSS_128_0x1E(mem)
   before
     7c6e8b71ad3eddb7.5b04349f8e54c97e.33100f887f18c6e2.3350ef22ba0b9824
     679be75663419f0f.bfcd2ff21d30802b.74d9a8717365f81f.c1a6efb0230a0e94
@@ -4422,11 +4422,11 @@
   after
     7c6e8b71ad3eddb7.5b04349f8e54c97e.33100f887f18c6e2.3350ef22ba0b9824
     679be75663419f0f.bfcd2ff21d30802b.74d9a8717365f81f.c1a6efb0230a0e94
-    cc2a25e372b8103e.55f4dd632faca8d4.815ea64cf1e13add.9274e46400251769
-    0000000000000000.0000000000000000.33100f887f18c6e2.3350ef22ba0b9824
+    0000000000000000.0000000000000000.74d9a8717365f81f.c1a6efb0ffffffff
+    86e7c204f6afeb6f.78c73a5d60577b24.346a840617964847.0307caaceee7ec50
     70ab9ef388ddccf5
 
-VMOVDQU_EtoG_128(reg)
+VCMPSS_128_0x1E(reg)
   before
     35ac5aa56b91f103.709e39a50c33edcf.8690434c4bba36c8.6bcabe8a0193e08a
     af56fc2e32919827.681a06b2cf4fd289.da9bf39c8c63156c.004ad1c3cae1bcd2
@@ -4434,12 +4434,12 @@
     2dd4e076dda35c5f.ee9593c1ce8035bd.c3ac380f82b52d62.b8da6e096ba5321e
     9382f1ed7a32457c
   after
-    35ac5aa56b91f103.709e39a50c33edcf.8690434c4bba36c8.6bcabe8a0193e08a
-    0000000000000000.0000000000000000.cf3646b9c0dd53bb.d1b6379f8f8e994a
+    0000000000000000.0000000000000000.da9bf39c8c63156c.004ad1c300000000
+    af56fc2e32919827.681a06b2cf4fd289.da9bf39c8c63156c.004ad1c3cae1bcd2
     38f580fa7969fd0c.4828a5175c0f56ca.cf3646b9c0dd53bb.d1b6379f8f8e994a
     2dd4e076dda35c5f.ee9593c1ce8035bd.c3ac380f82b52d62.b8da6e096ba5321e
     9382f1ed7a32457c
-VMOVDQU_EtoG_128(mem)
+VCMPSS_128_0x1E(mem)
   before
     3c793d37d9428c8e.ea411a0cfacef0cc.342b4a9a42ad2a8f.1048c60b6f76df0c
     918cccd3a4e0c380.cb8629296b73f6fe.f7b64890d3a3f26c.1458eb1722aca566
@@ -4449,11 +4449,11 @@
   after
     3c793d37d9428c8e.ea411a0cfacef0cc.342b4a9a42ad2a8f.1048c60b6f76df0c
     918cccd3a4e0c380.cb8629296b73f6fe.f7b64890d3a3f26c.1458eb1722aca566
-    6c871cadf619a87f.2cf0093acc20a9a2.1404088d9e6c487f.2926a3a138e4ba1b
-    0000000000000000.0000000000000000.342b4a9a42ad2a8f.1048c60b6f76df0c
+    0000000000000000.0000000000000000.f7b64890d3a3f26c.1458eb1700000000
+    aa36a8b1ebf8f5b7.69cbb6aaba604763.65e0077fbe17eaf5.adffea134ca95bd8
     fa2ebcdbfb87c449
 
-VMOVAPD_GtoE_128(reg)
+VMOVDDUP_XMMorMEM64_to_XMM(reg)
   before
     6e011664e00b3019.2765eccca0896753.dd632ce4d0bf0aee.c715bf5150ad92fa
     63c3f31a97c0ddf5.c0e065e830d8b980.e6036856abca2fef.1670aeef6f3cfcb9
@@ -4461,12 +4461,12 @@
     444226bdeeeee480.b1e9e2d853e2f13b.248f1f8f1e128e01.ecc81e3fc6730a16
     2a5d98c93533250d
   after
-    6e011664e00b3019.2765eccca0896753.dd632ce4d0bf0aee.c715bf5150ad92fa
+    0000000000000000.0000000000000000.1670aeef6f3cfcb9.1670aeef6f3cfcb9
     63c3f31a97c0ddf5.c0e065e830d8b980.e6036856abca2fef.1670aeef6f3cfcb9
-    0000000000000000.0000000000000000.248f1f8f1e128e01.ecc81e3fc6730a16
+    36bf4f69bd320489.4f728df3b8f2a969.dff9656be70cf111.2fbd4f4537cfe65e
     444226bdeeeee480.b1e9e2d853e2f13b.248f1f8f1e128e01.ecc81e3fc6730a16
     2a5d98c93533250d
-VMOVAPD_GtoE_128(mem)
+VMOVDDUP_XMMorMEM64_to_XMM(mem)
   before
     c54838d0a21bf36f.e7987582c57fb786.c20fdf821eb54e22.1112932eef673f6a
     99547a3e28372f67.7c0d3624de71ba48.5eb101df34767b49.02cebbb5f39743f9
@@ -4474,13 +4474,13 @@
     5c03d403f23ee4ca.ec8303b048aa40b0.a799a05fb3f33809.5f201c260ab93038
     844f4cea54c3913f
   after
-    c54838d0a21bf36f.e7987582c57fb786.619bc2dab23135dd.520f958ec92ed55a
+    c54838d0a21bf36f.e7987582c57fb786.c20fdf821eb54e22.1112932eef673f6a
     99547a3e28372f67.7c0d3624de71ba48.5eb101df34767b49.02cebbb5f39743f9
     824eda01e4949621.5fed6710d6512972.619bc2dab23135dd.520f958ec92ed55a
-    5c03d403f23ee4ca.ec8303b048aa40b0.a799a05fb3f33809.5f201c260ab93038
+    0000000000000000.0000000000000000.1112932eef673f6a.1112932eef673f6a
     844f4cea54c3913f
 
-VMOVAPD_GtoE_128(reg)
+VMOVDDUP_XMMorMEM64_to_XMM(reg)
   before
     1ce6224543d9331d.033de5326d3fd48e.801d0772d1083aad.0c76165a54c740fa
     853299a27286537c.53c8877971a52399.75056dc00df85415.6cffa0b8b0b908dc
@@ -4488,12 +4488,12 @@
     36195a1702d6fd6e.5e0674ff86cece31.f5f254b50bbbd7d9.8d46e1490a28cb21
     069b905441be3edc
   after
-    1ce6224543d9331d.033de5326d3fd48e.801d0772d1083aad.0c76165a54c740fa
+    0000000000000000.0000000000000000.6cffa0b8b0b908dc.6cffa0b8b0b908dc
     853299a27286537c.53c8877971a52399.75056dc00df85415.6cffa0b8b0b908dc
-    0000000000000000.0000000000000000.f5f254b50bbbd7d9.8d46e1490a28cb21
+    197fad6f7e562d08.287238c41b7b8d16.288833089605c995.a301ba63e3d54dda
     36195a1702d6fd6e.5e0674ff86cece31.f5f254b50bbbd7d9.8d46e1490a28cb21
     069b905441be3edc
-VMOVAPD_GtoE_128(mem)
+VMOVDDUP_XMMorMEM64_to_XMM(mem)
   before
     eacc4372a3a16138.364c9c069a91fe5a.d14fb516cfa9a117.388fcc3305a7b88d
     15a4768d4cdff161.776370a8e3136e77.5d1a79f51118c4f4.4daa98ee2354a95c
@@ -4501,13 +4501,13 @@
     b07d4d6fe69a47c8.2871bab5f69e85f7.306677bcf2e4e441.5d8e19cb3422a9fc
     10eec6c5615c3126
   after
-    eacc4372a3a16138.364c9c069a91fe5a.de333a886928f0f3.9091b352fe4fe5f2
+    eacc4372a3a16138.364c9c069a91fe5a.d14fb516cfa9a117.388fcc3305a7b88d
     15a4768d4cdff161.776370a8e3136e77.5d1a79f51118c4f4.4daa98ee2354a95c
     63f1a6935984a982.53acd06978e98672.de333a886928f0f3.9091b352fe4fe5f2
-    b07d4d6fe69a47c8.2871bab5f69e85f7.306677bcf2e4e441.5d8e19cb3422a9fc
+    0000000000000000.0000000000000000.388fcc3305a7b88d.388fcc3305a7b88d
     10eec6c5615c3126
 
-VMOVAPD_GtoE_128(reg)
+VMOVDDUP_XMMorMEM64_to_XMM(reg)
   before
     04fdb6ad2086b91c.d715e90d0d2f855e.50ff2af9f9bea5b1.2e7fa97bc8585a0a
     9707e6ed0e2e7c88.b685f559ed4f2071.28a21a9f1bd6234c.b6494db308910f79
@@ -4515,12 +4515,12 @@
     073bf22ae426a679.081d4eac425d5cbd.59566fc5321b29d8.d024dd3a357f25fb
     1bccc062594dfe66
   after
-    04fdb6ad2086b91c.d715e90d0d2f855e.50ff2af9f9bea5b1.2e7fa97bc8585a0a
+    0000000000000000.0000000000000000.b6494db308910f79.b6494db308910f79
     9707e6ed0e2e7c88.b685f559ed4f2071.28a21a9f1bd6234c.b6494db308910f79
-    0000000000000000.0000000000000000.59566fc5321b29d8.d024dd3a357f25fb
+    245850f3c6dfb719.2899ee3f9f04d32c.0da68815fb713b76.a392e04ece9abfbb
     073bf22ae426a679.081d4eac425d5cbd.59566fc5321b29d8.d024dd3a357f25fb
     1bccc062594dfe66
-VMOVAPD_GtoE_128(mem)
+VMOVDDUP_XMMorMEM64_to_XMM(mem)
   before
     5f5606b2570f0628.9cfec8fd058d8555.34dc938aef63754d.6900cb1d5f612821
     778e29164bd2f96c.3eebccdac5a38f58.86a438c7c524da0b.99ee98881bce75fb
@@ -4528,13 +4528,13 @@
     9737fbca82878e2c.1e76535f8f051786.117a930a55047cbb.cac97747b64ee814
     824e7f73cc7986ab
   after
-    5f5606b2570f0628.9cfec8fd058d8555.dc3fb94dddab4920.466dd37204ee4b12
+    5f5606b2570f0628.9cfec8fd058d8555.34dc938aef63754d.6900cb1d5f612821
     778e29164bd2f96c.3eebccdac5a38f58.86a438c7c524da0b.99ee98881bce75fb
     4140a77a50a0925e.4b4ffc2cbef1012f.dc3fb94dddab4920.466dd37204ee4b12
-    9737fbca82878e2c.1e76535f8f051786.117a930a55047cbb.cac97747b64ee814
+    0000000000000000.0000000000000000.6900cb1d5f612821.6900cb1d5f612821
     824e7f73cc7986ab
 
-VMOVAPD_GtoE_256(reg)
+VMOVD_IREGorMEM32_to_XMM(reg)
   before
     ca48ea62e3fb6183.5740a2f2fe93a900.12abcddfd26a0c08.002140e9493c3006
     fe02b1809661b749.5b2816dfdfcf9e06.853c661923ad1d61.86003ed5d45e202e
@@ -4542,12 +4542,12 @@
     9aea48fa4106bf4e.a3bf5ab44207095b.549ee66661fa834c.c8951b892091a8c3
     3ce3f1281abab688
   after
-    ca48ea62e3fb6183.5740a2f2fe93a900.12abcddfd26a0c08.002140e9493c3006
+    0000000000000000.0000000000000000.0000000000000000.000000001abab688
     fe02b1809661b749.5b2816dfdfcf9e06.853c661923ad1d61.86003ed5d45e202e
-    9aea48fa4106bf4e.a3bf5ab44207095b.549ee66661fa834c.c8951b892091a8c3
+    7acad23a8136c2a9.80b9d57b42472a6b.d1741b771f59863f.80e208bc12760a5e
     9aea48fa4106bf4e.a3bf5ab44207095b.549ee66661fa834c.c8951b892091a8c3
     3ce3f1281abab688
-VMOVAPD_GtoE_256(mem)
+VMOVD_IREGorMEM32_to_XMM(mem)
   before
     b69908861bfef2da.baaf0f2e725eeae4.9e082175fc1cf701.6807c553861d4f34
     1383db8d3f6816e5.36652341afc97e19.4f5fa6a98b91af8a.6bfbb3a9294d27a4
@@ -4555,13 +4555,13 @@
     e722a64a62de08d4.b2d323b3be0ad40a.3e65dc1f9acd70f3.a9b3ae3f5b04eacb
     9e10b15821a44dda
   after
-    306de62aa304dfd4.6a57819e94d4b897.908f663e0c73ee21.b7c6add3e6164748
+    b69908861bfef2da.baaf0f2e725eeae4.9e082175fc1cf701.6807c553861d4f34
     1383db8d3f6816e5.36652341afc97e19.4f5fa6a98b91af8a.6bfbb3a9294d27a4
     306de62aa304dfd4.6a57819e94d4b897.908f663e0c73ee21.b7c6add3e6164748
-    e722a64a62de08d4.b2d323b3be0ad40a.3e65dc1f9acd70f3.a9b3ae3f5b04eacb
+    0000000000000000.0000000000000000.0000000000000000.00000000861d4f34
     9e10b15821a44dda
 
-VMOVAPD_GtoE_256(reg)
+VMOVD_IREGorMEM32_to_XMM(reg)
   before
     f027b48ad682ac20.157095d899034f10.692307ebc8f70e20.35ad843851abf02c
     fc45b3411628434b.962131bf647f6eb6.ed9528b24f27a182.5133da754e192bf7
@@ -4569,12 +4569,12 @@
     b3c691efa40207f9.01df5d4d22a826e9.c90a129e4282c4e1.6929810c89d7c2f5
     1c30ca3dfe3f9580
   after
-    f027b48ad682ac20.157095d899034f10.692307ebc8f70e20.35ad843851abf02c
+    0000000000000000.0000000000000000.0000000000000000.00000000fe3f9580
     fc45b3411628434b.962131bf647f6eb6.ed9528b24f27a182.5133da754e192bf7
-    b3c691efa40207f9.01df5d4d22a826e9.c90a129e4282c4e1.6929810c89d7c2f5
+    1fb6a8e97c244d04.4602f5eddd5c22ef.99738374ee27cadf.6fc35ac3ad24dd81
     b3c691efa40207f9.01df5d4d22a826e9.c90a129e4282c4e1.6929810c89d7c2f5
     1c30ca3dfe3f9580
-VMOVAPD_GtoE_256(mem)
+VMOVD_IREGorMEM32_to_XMM(mem)
   before
     64a5b1432967134e.15c169bd2b4dadd6.a384e6cb4f6e37d0.d9a5d39ae6c5cd34
     1d55b208255bf88a.a1f22cc0ac917a47.09bd0b537fbb11d0.2492c1d5777b1f85
@@ -4582,13 +4582,13 @@
     5290f48403d9e6fe.a82a64170f357c92.8c1a19315a170fc8.df8e15b9cd7090d0
     0735733acbc82822
   after
-    230a4a7a0f280061.b3a7d665c45aacf7.0d5648d1cf9a7014.081cd9bc9030f780
+    64a5b1432967134e.15c169bd2b4dadd6.a384e6cb4f6e37d0.d9a5d39ae6c5cd34
     1d55b208255bf88a.a1f22cc0ac917a47.09bd0b537fbb11d0.2492c1d5777b1f85
     230a4a7a0f280061.b3a7d665c45aacf7.0d5648d1cf9a7014.081cd9bc9030f780
-    5290f48403d9e6fe.a82a64170f357c92.8c1a19315a170fc8.df8e15b9cd7090d0
+    0000000000000000.0000000000000000.0000000000000000.00000000e6c5cd34
     0735733acbc82822
 
-VMOVAPD_GtoE_256(reg)
+VMOVD_IREGorMEM32_to_XMM(reg)
   before
     db5deeaa26c4f922.86b52c121b7a678e.dac8d14127ad29c5.61d6fa603d3fab19
     b652827579ee3f7b.9b446e1076183f3d.a6cd1951ab4eed3c.6a566848931d0033
@@ -4596,12 +4596,12 @@
     f5d2e6cc78011eea.d7ce010c5f78e2a6.7c3c2bd0613dada5.85d2d8f7092cc470
     4f66d2966174abec
   after
-    db5deeaa26c4f922.86b52c121b7a678e.dac8d14127ad29c5.61d6fa603d3fab19
+    0000000000000000.0000000000000000.0000000000000000.000000006174abec
     b652827579ee3f7b.9b446e1076183f3d.a6cd1951ab4eed3c.6a566848931d0033
-    f5d2e6cc78011eea.d7ce010c5f78e2a6.7c3c2bd0613dada5.85d2d8f7092cc470
+    f6602b0760d438d9.6d08366a2dbe2936.688538b234a506a3.8266ded778bdca41
     f5d2e6cc78011eea.d7ce010c5f78e2a6.7c3c2bd0613dada5.85d2d8f7092cc470
     4f66d2966174abec
-VMOVAPD_GtoE_256(mem)
+VMOVD_IREGorMEM32_to_XMM(mem)
   before
     bced489f9da43ae0.11f6ae305d022e58.b7624ae2255326b8.3e3dec17cba321ee
     a834b7fed9c62f79.a4167f9faa62a3cf.e8908dd99d5ab099.09d579f310619c2b
@@ -4609,13 +4609,13 @@
     6c336d6ebe103648.a37d2c4fed70b08b.ade9f2d6121d8a77.2ffae51b9a1b9a30
     411fbb3f172e9450
   after
-    ee089a9f30e644e2.0b7f5586fbadbbfc.462446dbe3993e75.3b50cdd1cc055b08
+    bced489f9da43ae0.11f6ae305d022e58.b7624ae2255326b8.3e3dec17cba321ee
     a834b7fed9c62f79.a4167f9faa62a3cf.e8908dd99d5ab099.09d579f310619c2b
     ee089a9f30e644e2.0b7f5586fbadbbfc.462446dbe3993e75.3b50cdd1cc055b08
-    6c336d6ebe103648.a37d2c4fed70b08b.ade9f2d6121d8a77.2ffae51b9a1b9a30
+    0000000000000000.0000000000000000.0000000000000000.00000000cba321ee
     411fbb3f172e9450
 
-VMOVAPS_GtoE_128(reg)
+VMOVQ_XMM_MEM64(reg)
   before
     cd0b4da7deca8614.fd81ac57a051c0d7.c65c01681b36be27.f8ad0cb447f150cc
     2f0996c18b7bac27.7cc0d446f1b4a0ba.d167cf3b228b237d.053a0f639d214e9f
@@ -4625,10 +4625,10 @@
   after
     cd0b4da7deca8614.fd81ac57a051c0d7.c65c01681b36be27.f8ad0cb447f150cc
     2f0996c18b7bac27.7cc0d446f1b4a0ba.d167cf3b228b237d.053a0f639d214e9f
-    0000000000000000.0000000000000000.103546c42914dd05.d1e2c6e11dc7dd71
+    c26792f8bbce4136.c7bb6028ce45901d.20ec92369dfc1938.af5d7ace30ba3e1d
     e46f3eb8094e83ec.b93dcce752114c2e.103546c42914dd05.d1e2c6e11dc7dd71
     499571887f54e6c8
-VMOVAPS_GtoE_128(mem)
+VMOVQ_XMM_MEM64(mem)
   before
     f142f6af736e164e.f06e946d1288acf6.2d13947199239217.fb8fe851615fab90
     a7b4d1421520292e.41b092837207f800.010935b0c1871c04.3e467349e16abe84
@@ -4636,13 +4636,13 @@
     a91b795dd07de8af.272c7482a405edc1.3585ee021d77ee9d.3cfa342a2ceea659
     af9062eb2e7ef292
   after
-    f142f6af736e164e.f06e946d1288acf6.0feb2992e34aa722.35a6e31847c0538e
+    f142f6af736e164e.f06e946d1288acf6.2d13947199239217.3e467349e16abe84
     a7b4d1421520292e.41b092837207f800.010935b0c1871c04.3e467349e16abe84
     45b87e2e7f77db95.35813366c457a5b5.0feb2992e34aa722.35a6e31847c0538e
     a91b795dd07de8af.272c7482a405edc1.3585ee021d77ee9d.3cfa342a2ceea659
     af9062eb2e7ef292
 
-VMOVAPS_GtoE_128(reg)
+VMOVQ_XMM_MEM64(reg)
   before
     eab26ac8e9fe74e5.ada73fbc21400ba7.72ff4f43af9c0dd2.4da3ffec8b1bafa0
     49ae472bf8fa68fd.2e284b3891cc01a9.7444c21680a84092.3410d93c4840a458
@@ -4652,10 +4652,10 @@
   after
     eab26ac8e9fe74e5.ada73fbc21400ba7.72ff4f43af9c0dd2.4da3ffec8b1bafa0
     49ae472bf8fa68fd.2e284b3891cc01a9.7444c21680a84092.3410d93c4840a458
-    0000000000000000.0000000000000000.08575d9ee650d3d0.e00ad4be20431c96
+    28cef582f7fd0a87.096c19bc392c85e3.8748c865b4b6c4ad.c799f6de70f589f0
     e35e70378393952e.183e2633386c557f.08575d9ee650d3d0.e00ad4be20431c96
     5c2feec973381773
-VMOVAPS_GtoE_128(mem)
+VMOVQ_XMM_MEM64(mem)
   before
     18d4c0e986df37b5.d6acb5b83748469f.3869ec8ba7982ba9.54bd7d2cb205a9a7
     eec5c60b75453788.5d03be70b0a95986.46bae9afa4bdc38e.c5c6257ab55e84dd
@@ -4663,13 +4663,13 @@
     5bba6007547bcb90.97fa12355f9d9464.97fe750bb7202d38.8aeffa0bcf323418
     95a91f251ec38275
   after
-    18d4c0e986df37b5.d6acb5b83748469f.1cfd988b4be6db5a.b9bd50f68be99e1f
+    18d4c0e986df37b5.d6acb5b83748469f.3869ec8ba7982ba9.c5c6257ab55e84dd
     eec5c60b75453788.5d03be70b0a95986.46bae9afa4bdc38e.c5c6257ab55e84dd
     bbcd7d1c5a74d518.d4ae89cb8a410a8e.1cfd988b4be6db5a.b9bd50f68be99e1f
     5bba6007547bcb90.97fa12355f9d9464.97fe750bb7202d38.8aeffa0bcf323418
     95a91f251ec38275
 
-VMOVAPS_GtoE_128(reg)
+VMOVQ_XMM_MEM64(reg)
   before
     3735bcb1132ac3e2.aa56ebb87c63d61c.0134531ace4734b3.9389fd1c04767655
     cadfcc194af3340a.846e9a1af13ab1ea.70a54ae670ce2628.ec6aaaa84ff472dc
@@ -4679,10 +4679,10 @@
   after
     3735bcb1132ac3e2.aa56ebb87c63d61c.0134531ace4734b3.9389fd1c04767655
     cadfcc194af3340a.846e9a1af13ab1ea.70a54ae670ce2628.ec6aaaa84ff472dc
-    0000000000000000.0000000000000000.ca6446e4c39cee33.255c68e54e9a71db
+    abf54aca60a8119a.c6ceea1bcc0b1923.3f9cf106e3bba56f.7e6cfa9cb4a7dcfa
     36c23531f0d7953e.4a4256a62be3caf6.ca6446e4c39cee33.255c68e54e9a71db
     bd07716e39d9edaa
-VMOVAPS_GtoE_128(mem)
+VMOVQ_XMM_MEM64(mem)
   before
     22378f2292700b94.c79186b8970cfda1.ed9559a82acd808d.6c4845eeabfc3d20
     30b840ef746c88c4.baaf3bcdf1d2856f.8b95720be4d5f614.8396e88e3868cee4
@@ -4690,13 +4690,13 @@
     b7e2488145c18fa9.3608bd4e2b41e4ff.27c7cfa8fb7115a5.7c9b0f45ae91a49b
     16eb8a33d06762e7
   after
-    22378f2292700b94.c79186b8970cfda1.000c1abc7608e9b8.69982d32056bdc29
+    22378f2292700b94.c79186b8970cfda1.ed9559a82acd808d.8396e88e3868cee4
     30b840ef746c88c4.baaf3bcdf1d2856f.8b95720be4d5f614.8396e88e3868cee4
     c358ffc0fcd92067.6b684edb98b56955.000c1abc7608e9b8.69982d32056bdc29
     b7e2488145c18fa9.3608bd4e2b41e4ff.27c7cfa8fb7115a5.7c9b0f45ae91a49b
     16eb8a33d06762e7
 
-VMOVAPS_GtoE_256(reg)
+VMOVDQA_GtoE_256(reg)
   before
     95d39a68077751b9.e821981e6c3290b5.77db849143033319.de920bb98f1c3607
     53a13c50ee50aebc.32e269838c38e0b8.8a2d9d127f86924e.00394cdd4f160709
@@ -4709,7 +4709,7 @@
     001b23e93d86a208.811a8356292f5d51.967dba7ccc006fba.f54acb0ac224ab9e
     001b23e93d86a208.811a8356292f5d51.967dba7ccc006fba.f54acb0ac224ab9e
     804c01ecac51f78a
-VMOVAPS_GtoE_256(mem)
+VMOVDQA_GtoE_256(mem)
   before
     e55a2b9032fce3c6.a75f6072ddfdb0a8.3d29c49bde3a013f.4713b53c170f654a
     0240c5e26f312c7f.fdb81e5f9e6a1c29.83e97659fc08e4d5.3a58f3eaf4105aa5
@@ -4723,7 +4723,7 @@
     d0c43a41806bc417.2ad80f11f15cfd81.19b022ece42356a3.561e2abcd615356f
     36381ab812319235
 
-VMOVAPS_GtoE_256(reg)
+VMOVDQA_GtoE_256(reg)
   before
     c9303d52516fde77.3af90d258c878b4e.b83739afbbf7eab0.224e139ae7865d33
     6a538ff52e5a56e0.cb374068bf5e9eb1.66dcd46016ba2570.24ce6670c3df931b
@@ -4736,7 +4736,7 @@
     454ab2063569bada.d1f9b6b70c6a9cad.92234fabede67455.82a42444779c7b9e
     454ab2063569bada.d1f9b6b70c6a9cad.92234fabede67455.82a42444779c7b9e
     9691861a8719a591
-VMOVAPS_GtoE_256(mem)
+VMOVDQA_GtoE_256(mem)
   before
     14903ac9e1baee8b.38b67a4c95a41ec2.fe16f29c5db8fe9e.c85e261da16800d1
     d66ebd3ba08c11b7.a87d614b05bd9d81.c36b7e8f46f09c6c.8f0d5e525640ca90
@@ -4750,7 +4750,7 @@
     9af11c1cbff1d858.734a7e257fb6de38.80ec764f4f50804d.3bfbe2b630270781
     d9d126bc8e4df20d
 
-VMOVAPS_GtoE_256(reg)
+VMOVDQA_GtoE_256(reg)
   before
     774cbb365dfb0a89.5330f263579bf424.86e9abd8c1ae1886.32b0dbf4a68f3cb9
     70b89d8e37bc8da4.c27d851dc4a7dad3.8613e7f383b45e5c.eadc805705e826b1
@@ -4763,7 +4763,7 @@
     e8933a8d83a8be61.2d6fd69f8f0ef789.c1387d16f018fe4f.e09c7a08491a6ff7
     e8933a8d83a8be61.2d6fd69f8f0ef789.c1387d16f018fe4f.e09c7a08491a6ff7
     d5c7c72d670b469c
-VMOVAPS_GtoE_256(mem)
+VMOVDQA_GtoE_256(mem)
   before
     418b45c1fc463b7f.1e99eb0b2bece65c.e2ad8c3e2582a5e7.b3cacff5d58ecfc4
     00b26fae24d708ca.20c0db18507267a5.bd29f10200870ed9.041820eda8429c70
@@ -4777,7 +4777,7 @@
     e85db7489f2c1c4a.f7a1618f7f7967cf.500bb4a4f6710123.2e13afd88a901920
     c159e6a3d044417b
 
-VMOVAPS_EtoG_128(reg)
+VMOVDQA_GtoE_128(reg)
   before
     21890c38756454be.c877cecc2a09dbd7.85f3efd2c1125d09.c1080b5c496e02d4
     abf11d01147e9095.6b26805ab86b637c.4f96ac53f01d9d40.c77400e7522caec7
@@ -4786,11 +4786,11 @@
     ef406cbac6600bea
   after
     21890c38756454be.c877cecc2a09dbd7.85f3efd2c1125d09.c1080b5c496e02d4
-    0000000000000000.0000000000000000.b0d5917fa7296321.3e190f332db7c12a
-    bbdb166c4a1e2fab.ad354bde65607066.b0d5917fa7296321.3e190f332db7c12a
+    abf11d01147e9095.6b26805ab86b637c.4f96ac53f01d9d40.c77400e7522caec7
+    0000000000000000.0000000000000000.06fd9bc382bfeb57.02c4b52af519f726
     ad95f1e3b2cf6eac.6a6fab444ef3bdc1.06fd9bc382bfeb57.02c4b52af519f726
     ef406cbac6600bea
-VMOVAPS_EtoG_128(mem)
+VMOVDQA_GtoE_128(mem)
   before
     e15bb2cebd97baa0.dd69acd4e91d8945.7ea11a798f3107b8.ac5bc78a1e6d708f
     b4e00352f5cbc074.a7a442aa8b94bb22.c597156743250a77.fd39104017be2f75
@@ -4798,13 +4798,13 @@
     6d56b25a9a57bf29.797ef0b57c2f5757.5bffa12275602a01.14a7e9288d7b4af8
     92d0723343fe1eef
   after
-    e15bb2cebd97baa0.dd69acd4e91d8945.7ea11a798f3107b8.ac5bc78a1e6d708f
+    e15bb2cebd97baa0.dd69acd4e91d8945.1a1d19fc86db822c.57e37250083f64b4
     b4e00352f5cbc074.a7a442aa8b94bb22.c597156743250a77.fd39104017be2f75
     449ad9328b07d894.6791afd132c141ef.1a1d19fc86db822c.57e37250083f64b4
-    0000000000000000.0000000000000000.7ea11a798f3107b8.ac5bc78a1e6d708f
+    6d56b25a9a57bf29.797ef0b57c2f5757.5bffa12275602a01.14a7e9288d7b4af8
     92d0723343fe1eef
 
-VMOVAPS_EtoG_128(reg)
+VMOVDQA_GtoE_128(reg)
   before
     2ba908dec6551c43.0ae009b73fc83162.39b600c2056a3806.63092ac72cbfbf22
     3d7fa793b00b80a0.f9045a339565e969.0384da6468ff22a9.0e062ed6c604fcbd
@@ -4813,11 +4813,11 @@
     78aefdb700b20217
   after
     2ba908dec6551c43.0ae009b73fc83162.39b600c2056a3806.63092ac72cbfbf22
-    0000000000000000.0000000000000000.33357d0742794eec.38c42b3b5f3c9ffb
-    229e4bbfa0ac85b3.158e21bbb83aa56a.33357d0742794eec.38c42b3b5f3c9ffb
+    3d7fa793b00b80a0.f9045a339565e969.0384da6468ff22a9.0e062ed6c604fcbd
+    0000000000000000.0000000000000000.2515e2182e65fb7a.bc0d9ce21472620b
     3752f1cf30c56828.3a49db3cc5541f92.2515e2182e65fb7a.bc0d9ce21472620b
     78aefdb700b20217
-VMOVAPS_EtoG_128(mem)
+VMOVDQA_GtoE_128(mem)
   before
     4773caa640093a4b.d9e7932dfce165aa.430302a1d8be130d.35700601c84e6400
     0427809bef82c8d4.62a92f47a18cb7e6.0e8614d50c843f06.be92e630adc0c42a
@@ -4825,13 +4825,13 @@
     bd9094480c0bd094.9ce2435be4c14d3a.561ae75f48562a25.b059c70cc7705b18
     d098c19233c60a34
   after
-    4773caa640093a4b.d9e7932dfce165aa.430302a1d8be130d.35700601c84e6400
+    4773caa640093a4b.d9e7932dfce165aa.769f8cc67db35daa.1ec67d10794757a3
     0427809bef82c8d4.62a92f47a18cb7e6.0e8614d50c843f06.be92e630adc0c42a
     8d989a832a2966de.2fe3c088ba539b87.769f8cc67db35daa.1ec67d10794757a3
-    0000000000000000.0000000000000000.430302a1d8be130d.35700601c84e6400
+    bd9094480c0bd094.9ce2435be4c14d3a.561ae75f48562a25.b059c70cc7705b18
     d098c19233c60a34
 
-VMOVAPS_EtoG_128(reg)
+VMOVDQA_GtoE_128(reg)
   before
     d9cd660d5ad6a1a4.6fdcead8b233c423.05f3b22eba6209ab.8cc39f8c897a61a2
     2945b1e9d82b5c14.8148181e37aefcb7.c7600b6cd8c30a85.f26632395b29bf4d
@@ -4840,11 +4840,11 @@
     e421e07951fb1b20
   after
     d9cd660d5ad6a1a4.6fdcead8b233c423.05f3b22eba6209ab.8cc39f8c897a61a2
-    0000000000000000.0000000000000000.3c754981db6f8d75.66ce1b52da710054
-    1b4ba1924751762f.cda09b05b786357b.3c754981db6f8d75.66ce1b52da710054
+    2945b1e9d82b5c14.8148181e37aefcb7.c7600b6cd8c30a85.f26632395b29bf4d
+    0000000000000000.0000000000000000.c18068da5ff2ce26.c2c8d7c4235ee0e1
     0a2d2f7546d52ca1.31b0ee7b50c92a9b.c18068da5ff2ce26.c2c8d7c4235ee0e1
     e421e07951fb1b20
-VMOVAPS_EtoG_128(mem)
+VMOVDQA_GtoE_128(mem)
   before
     a6a3b45f81546c3e.543558fc6e41ba18.87448d6b1b839945.b2cc64e1ffd90945
     e61bce60ce759067.53b119945e245c3e.ac27f4c136bf3ca2.6ba43a0358af797e
@@ -4852,13 +4852,13 @@
     4b1cc46831414088.e43050a90078ca48.d40e0c4fcaed102c.a52b6149a259eaec
     de72aa45cc456479
   after
-    a6a3b45f81546c3e.543558fc6e41ba18.87448d6b1b839945.b2cc64e1ffd90945
+    a6a3b45f81546c3e.543558fc6e41ba18.7d26a069bc89cfe1.4855e5ad05015b7c
     e61bce60ce759067.53b119945e245c3e.ac27f4c136bf3ca2.6ba43a0358af797e
     7e54aa6a556b42c6.65eb6daaaf074dbf.7d26a069bc89cfe1.4855e5ad05015b7c
-    0000000000000000.0000000000000000.87448d6b1b839945.b2cc64e1ffd90945
+    4b1cc46831414088.e43050a90078ca48.d40e0c4fcaed102c.a52b6149a259eaec
     de72aa45cc456479
 
-VMOVAPD_EtoG_256(reg)
+VMOVDQU_GtoE_128(reg)
   before
     4f76bd0c1e5103d0.293d99457f0444d8.2ecbbffcea030f85.8ea8b4607cf8b9b0
     5482950a3508049d.f584a4ef5abf0ae3.9d0ab4110b325721.88c31486edb58798
@@ -4867,11 +4867,11 @@
     850b5eb6d4932564
   after
     4f76bd0c1e5103d0.293d99457f0444d8.2ecbbffcea030f85.8ea8b4607cf8b9b0
-    48e42eabacf6a28b.89bd6151de7e50d5.8e382d53ff93e0c9.9c2aa8af39313511
-    48e42eabacf6a28b.89bd6151de7e50d5.8e382d53ff93e0c9.9c2aa8af39313511
+    5482950a3508049d.f584a4ef5abf0ae3.9d0ab4110b325721.88c31486edb58798
+    0000000000000000.0000000000000000.5ea0252e61b2e328.a7a8edc57d778146
     89e6845b20a71a47.c2b44c58284dd0d9.5ea0252e61b2e328.a7a8edc57d778146
     850b5eb6d4932564
-VMOVAPD_EtoG_256(mem)
+VMOVDQU_GtoE_128(mem)
   before
     121d776d5b92de97.72d593862ca8a87c.7c35e1ee5439471c.678f990ecd199feb
     2babb4d62d7e670a.5ffd58986d8488d7.930c9d007d4d71ca.0651835fe0564ebe
@@ -4879,13 +4879,13 @@
     6c6b8b6e2453dc62.b427f122fcff2dae.49eb7749371fcc14.777eae056a807842
     0080e63118856b4c
   after
-    121d776d5b92de97.72d593862ca8a87c.7c35e1ee5439471c.678f990ecd199feb
+    121d776d5b92de97.72d593862ca8a87c.e304fb7bbf96090e.9732e18e36f52d4c
     2babb4d62d7e670a.5ffd58986d8488d7.930c9d007d4d71ca.0651835fe0564ebe
     aa8192dd67667dea.abaacefd7ec8f603.e304fb7bbf96090e.9732e18e36f52d4c
-    121d776d5b92de97.72d593862ca8a87c.7c35e1ee5439471c.678f990ecd199feb
+    6c6b8b6e2453dc62.b427f122fcff2dae.49eb7749371fcc14.777eae056a807842
     0080e63118856b4c
 
-VMOVAPD_EtoG_256(reg)
+VMOVDQU_GtoE_128(reg)
   before
     8f86857fdd904115.4d341d758053409f.d5c2bd7182b56981.9f8b8d5800f47609
     80da885a542b3749.29aac3de997164cd.69c52e58ad77e82b.c2b1ba923722c219
@@ -4894,11 +4894,11 @@
     903e9d838535d0a0
   after
     8f86857fdd904115.4d341d758053409f.d5c2bd7182b56981.9f8b8d5800f47609
-    2fc9ea2d1ae48895.dc97fa9588ba0517.ce7d414218d0e456.8e2879e5f8b46d70
-    2fc9ea2d1ae48895.dc97fa9588ba0517.ce7d414218d0e456.8e2879e5f8b46d70
+    80da885a542b3749.29aac3de997164cd.69c52e58ad77e82b.c2b1ba923722c219
+    0000000000000000.0000000000000000.5f36f19a5f4c9aae.dfbe463c5db63338
     f89fa766ca4772a5.42c83c876b39dfaa.5f36f19a5f4c9aae.dfbe463c5db63338
     903e9d838535d0a0
-VMOVAPD_EtoG_256(mem)
+VMOVDQU_GtoE_128(mem)
   before
     7f73faa6893cffd2.37a8bb7001df2f25.3609079e5efaaeb1.773c3ace1f7746e0
     872ada9188d77dfb.482f22b75a38fcc0.9626d6c87c0a2d59.74db1949f4de2398
@@ -4906,13 +4906,13 @@
     524e1070e0fb56e0.50ebdbace45eb4f8.07237102aa442d3b.881385c44a8e6348
     59440b9d04ef3e98
   after
-    7f73faa6893cffd2.37a8bb7001df2f25.3609079e5efaaeb1.773c3ace1f7746e0
+    7f73faa6893cffd2.37a8bb7001df2f25.3dea25f0e17419ce.b05e8877790d6f81
     872ada9188d77dfb.482f22b75a38fcc0.9626d6c87c0a2d59.74db1949f4de2398
     842fb8319b130646.8782d9a772de1422.3dea25f0e17419ce.b05e8877790d6f81
-    7f73faa6893cffd2.37a8bb7001df2f25.3609079e5efaaeb1.773c3ace1f7746e0
+    524e1070e0fb56e0.50ebdbace45eb4f8.07237102aa442d3b.881385c44a8e6348
     59440b9d04ef3e98
 
-VMOVAPD_EtoG_256(reg)
+VMOVDQU_GtoE_128(reg)
   before
     7d3e166c42bb3a1e.cc535e3b739b28f5.ffb724334d4318ee.d09b35e9f28727cc
     524da39fa17f9486.d0091f7f6f0039b0.f032b1a6481a7caf.731fed93d648c1af
@@ -4921,11 +4921,11 @@
     18eba6563ef9acf1
   after
     7d3e166c42bb3a1e.cc535e3b739b28f5.ffb724334d4318ee.d09b35e9f28727cc
-    32bdaca0bcc6887b.393ece27f135453e.7ea87c73716d1be8.ce7b15ec7193b80e
-    32bdaca0bcc6887b.393ece27f135453e.7ea87c73716d1be8.ce7b15ec7193b80e
+    524da39fa17f9486.d0091f7f6f0039b0.f032b1a6481a7caf.731fed93d648c1af
+    0000000000000000.0000000000000000.0765830465cb3245.bc7b29dee075c715
     7ad92fdd301c52aa.e3bce71e144607ca.0765830465cb3245.bc7b29dee075c715
     18eba6563ef9acf1
-VMOVAPD_EtoG_256(mem)
+VMOVDQU_GtoE_128(mem)
   before
     c0960640a82b21ce.86ef27c0980e2dbf.a950e652f4403c81.e6b4c1c7c0bdfd71
     8f4ac7893918e2d7.b34991b791275665.69c647aeae2ea08e.77e332271dd1b819
@@ -4933,13 +4933,13 @@
     11f85ae442513c20.dbfca78ea4ff8116.4388218e1e17e45d.1e0c9e6e4e8dec8b
     ed9f912d5b4ddeae
   after
-    c0960640a82b21ce.86ef27c0980e2dbf.a950e652f4403c81.e6b4c1c7c0bdfd71
+    c0960640a82b21ce.86ef27c0980e2dbf.fdea871e5d1cef1e.153cd39018929ee8
     8f4ac7893918e2d7.b34991b791275665.69c647aeae2ea08e.77e332271dd1b819
     60d1651b0ecbad39.5b34672db6f40848.fdea871e5d1cef1e.153cd39018929ee8
-    c0960640a82b21ce.86ef27c0980e2dbf.a950e652f4403c81.e6b4c1c7c0bdfd71
+    11f85ae442513c20.dbfca78ea4ff8116.4388218e1e17e45d.1e0c9e6e4e8dec8b
     ed9f912d5b4ddeae
 
-VMOVAPD_EtoG_128(reg)
+VMOVDQA_EtoG_256(reg)
   before
     dd41a739d95eaffc.7c8b24cff2b54cb7.8fed4c46f6d6fb78.156b91ea0d2a3c76
     4c3ddcfe674c9c21.7f563ec83903982b.d35352c24805b21d.5160531f4462b396
@@ -4948,11 +4948,11 @@
     11a45f04bd5a27d6
   after
     dd41a739d95eaffc.7c8b24cff2b54cb7.8fed4c46f6d6fb78.156b91ea0d2a3c76
-    0000000000000000.0000000000000000.0379b66c3716e4af.d134e317e2c904e9
+    94e12de89ea4e1cb.f42424bb3347dea7.0379b66c3716e4af.d134e317e2c904e9
     94e12de89ea4e1cb.f42424bb3347dea7.0379b66c3716e4af.d134e317e2c904e9
     137795641df2baa4.b9c35294fd8ed858.7bad72b15f98cbda.73b1bec0016dec9a
     11a45f04bd5a27d6
-VMOVAPD_EtoG_128(mem)
+VMOVDQA_EtoG_256(mem)
   before
     88d842d1329b71c8.234c10dc7dc06258.a8fd453fb3e34269.973984fe5b14a44c
     b51be4127e3c859d.22ac9abe5d9c1694.9e9f77a87053da07.b36ae7bdc718abae
@@ -4963,10 +4963,10 @@
     88d842d1329b71c8.234c10dc7dc06258.a8fd453fb3e34269.973984fe5b14a44c
     b51be4127e3c859d.22ac9abe5d9c1694.9e9f77a87053da07.b36ae7bdc718abae
     7237bfb3ba492080.6ae32f7556111204.777566bb50e85a5e.2b8c975c402f1baf
-    0000000000000000.0000000000000000.a8fd453fb3e34269.973984fe5b14a44c
+    88d842d1329b71c8.234c10dc7dc06258.a8fd453fb3e34269.973984fe5b14a44c
     9fd2d0e7c7c72938
 
-VMOVAPD_EtoG_128(reg)
+VMOVDQA_EtoG_256(reg)
   before
     538e50aa0e603e19.0f2e15c578d9da23.49056c1109f8d02e.43ec6990ebb704e5
     d36c0dfed13dae48.a89f870e3174713a.97880bcffa810b40.ed26752ade08a76d
@@ -4975,11 +4975,11 @@
     4e5a91c39b31922a
   after
     538e50aa0e603e19.0f2e15c578d9da23.49056c1109f8d02e.43ec6990ebb704e5
-    0000000000000000.0000000000000000.a012a51275d47e36.eac32d1e64af225e
+    7ab6034cace9b370.411b24674bab7f10.a012a51275d47e36.eac32d1e64af225e
     7ab6034cace9b370.411b24674bab7f10.a012a51275d47e36.eac32d1e64af225e
     a6b92f013cf0893e.b76d66bce38ac0d0.beef3747177c64bc.17910d579ab932e4
     4e5a91c39b31922a
-VMOVAPD_EtoG_128(mem)
+VMOVDQA_EtoG_256(mem)
   before
     6cea354d8423ff5d.b2c18c891cde6e5e.e660cbfa151eefa7.4e6bbbd87c05fa7d
     4d0f76e1709b35a8.f9191651e8409c7b.aac2ce0bfc72c9c1.acd22f323ffc7c26
@@ -4990,10 +4990,10 @@
     6cea354d8423ff5d.b2c18c891cde6e5e.e660cbfa151eefa7.4e6bbbd87c05fa7d
     4d0f76e1709b35a8.f9191651e8409c7b.aac2ce0bfc72c9c1.acd22f323ffc7c26
     cd94cf6b7ca6f038.d90fc9c33ea15042.df5decddb4920a49.35708ec2fcec2562
-    0000000000000000.0000000000000000.e660cbfa151eefa7.4e6bbbd87c05fa7d
+    6cea354d8423ff5d.b2c18c891cde6e5e.e660cbfa151eefa7.4e6bbbd87c05fa7d
     337ffe30d6e8df46
 
-VMOVAPD_EtoG_128(reg)
+VMOVDQA_EtoG_256(reg)
   before
     618907e72b0c6845.1aecba1261a3e3d6.d0009b59f192397c.0c7165700967b055
     29faeb83ea5a0888.9f58430673ad943c.a094b2558839e647.bc81b90ade358d31
@@ -5002,11 +5002,11 @@
     825ee22855b71c2d
   after
     618907e72b0c6845.1aecba1261a3e3d6.d0009b59f192397c.0c7165700967b055
-    0000000000000000.0000000000000000.77f5e2ac1710086d.4dfc1714f4fec02c
+    e71ea76fb05dfcba.3354d5a11579ba96.77f5e2ac1710086d.4dfc1714f4fec02c
     e71ea76fb05dfcba.3354d5a11579ba96.77f5e2ac1710086d.4dfc1714f4fec02c
     f741351918a18088.b1acebce62141011.b36f28ca3aa2dd97.9bacfc7a68d00771
     825ee22855b71c2d
-VMOVAPD_EtoG_128(mem)
+VMOVDQA_EtoG_256(mem)
   before
     ddde470bd8bdbc8b.b5ae93edbfb2d09e.f72c0178768953d9.ae4d7e1b8e7b9f74
     8af8a60d0cf0a2b8.7db2bc55401d27a7.e09f948d6ee43e19.c6dde20bae288bad
@@ -5017,10 +5017,10 @@
     ddde470bd8bdbc8b.b5ae93edbfb2d09e.f72c0178768953d9.ae4d7e1b8e7b9f74
     8af8a60d0cf0a2b8.7db2bc55401d27a7.e09f948d6ee43e19.c6dde20bae288bad
     64787c1c0e5c8ce0.ab9aacbe386dc250.48d31ff865328ffe.55694f073734dcf1
-    0000000000000000.0000000000000000.f72c0178768953d9.ae4d7e1b8e7b9f74
+    ddde470bd8bdbc8b.b5ae93edbfb2d09e.f72c0178768953d9.ae4d7e1b8e7b9f74
     4ca835cef39aa145
 
-VMOVUPD_GtoE_128(reg)
+VMOVDQA_EtoG_128(reg)
   before
     6bf3a5735d0c8bad.0ed9790de90b56ce.a840d244faedb330.04a90d80c3d44e65
     726a0fd3a00dcccf.975299c7fb68b0ee.3098ff39fd3681c0.11e468756041343f
@@ -5029,11 +5029,11 @@
     4163db294685d47b
   after
     6bf3a5735d0c8bad.0ed9790de90b56ce.a840d244faedb330.04a90d80c3d44e65
-    726a0fd3a00dcccf.975299c7fb68b0ee.3098ff39fd3681c0.11e468756041343f
-    0000000000000000.0000000000000000.1ecc7da15392f47a.d3f5535e068ebc1e
+    0000000000000000.0000000000000000.8e03e4dee793839f.0d0eac716ed0706f
+    be5b6e59572a9e56.bd611f3e4b2cfcb8.8e03e4dee793839f.0d0eac716ed0706f
     a910bf731eee3eef.5bd2885df465f758.1ecc7da15392f47a.d3f5535e068ebc1e
     4163db294685d47b
-VMOVUPD_GtoE_128(mem)
+VMOVDQA_EtoG_128(mem)
   before
     3125c0bf4ac376af.90d6fc8c93e5e746.4f714e10121f5cfb.3b40c4edddbe12fc
     81077c0b2d545ce9.cff923104f9cd706.730aef43c265e8cd.43abb72e22a417d2
@@ -5041,13 +5041,13 @@
     ad5b6e74029ce61a.c5861c0912777773.bf59afda46c565ac.80968e3f4bcbc829
     6ead6ae76824ec01
   after
-    3125c0bf4ac376af.90d6fc8c93e5e746.a568e6e31f4357f9.915951d0bdcf3fa7
+    3125c0bf4ac376af.90d6fc8c93e5e746.4f714e10121f5cfb.3b40c4edddbe12fc
     81077c0b2d545ce9.cff923104f9cd706.730aef43c265e8cd.43abb72e22a417d2
     0bd58df80c434353.c2c52f6bf09e48dc.a568e6e31f4357f9.915951d0bdcf3fa7
-    ad5b6e74029ce61a.c5861c0912777773.bf59afda46c565ac.80968e3f4bcbc829
+    0000000000000000.0000000000000000.4f714e10121f5cfb.3b40c4edddbe12fc
     6ead6ae76824ec01
 
-VMOVUPD_GtoE_128(reg)
+VMOVDQA_EtoG_128(reg)
   before
     b5ece235ae67e8de.41659b6a2b6b0369.3487e75750b49f78.9fa7c71552f8ce12
     b39df093bc20f769.a5be90c6a4bd546d.6c158abf46e0fd97.1f1fa98160e74d56
@@ -5056,11 +5056,11 @@
     fe7ae31caa97ab11
   after
     b5ece235ae67e8de.41659b6a2b6b0369.3487e75750b49f78.9fa7c71552f8ce12
-    b39df093bc20f769.a5be90c6a4bd546d.6c158abf46e0fd97.1f1fa98160e74d56
-    0000000000000000.0000000000000000.a1094d91cd364bd1.73bcbb98f02a7f2a
+    0000000000000000.0000000000000000.c77d03af9187cd7b.1d8dd0088b9f9fa4
+    c20d926f2bd95751.b333ca74899d9551.c77d03af9187cd7b.1d8dd0088b9f9fa4
     4088c43399204240.4891c361f5188442.a1094d91cd364bd1.73bcbb98f02a7f2a
     fe7ae31caa97ab11
-VMOVUPD_GtoE_128(mem)
+VMOVDQA_EtoG_128(mem)
   before
     9b91c680d6efdd88.875a804da280f4e3.41a2f9770438db6c.580665d39578b244
     24cedeb08f40d1b9.f5cfc428e186abe5.7832e7a3d30c57fa.47bf45e085da3f81
@@ -5068,13 +5068,13 @@
     6deaa3241afbf3fb.b1d1d1d173b113b8.1304ddee1ff9adf5.3d99520a4f2bbb08
     fc517600613221aa
   after
-    9b91c680d6efdd88.875a804da280f4e3.ca0f0ad27d9db319.ca82eb233ae72e34
+    9b91c680d6efdd88.875a804da280f4e3.41a2f9770438db6c.580665d39578b244
     24cedeb08f40d1b9.f5cfc428e186abe5.7832e7a3d30c57fa.47bf45e085da3f81
     76fea998f29545d0.e4328a30f3bda1f3.ca0f0ad27d9db319.ca82eb233ae72e34
-    6deaa3241afbf3fb.b1d1d1d173b113b8.1304ddee1ff9adf5.3d99520a4f2bbb08
+    0000000000000000.0000000000000000.41a2f9770438db6c.580665d39578b244
     fc517600613221aa
 
-VMOVUPD_GtoE_128(reg)
+VMOVDQA_EtoG_128(reg)
   before
     63f753710b899dc5.e5614640237c9864.b8f69277fdef3ce1.2fdcdbe5d42bffb9
     cdd5e6caeabb6b06.bb2e10d82a27ef37.56eeca8e2e025a1a.fb6482a2b9406691
@@ -5083,11 +5083,11 @@
     0e1441b59c446e4f
   after
     63f753710b899dc5.e5614640237c9864.b8f69277fdef3ce1.2fdcdbe5d42bffb9
-    cdd5e6caeabb6b06.bb2e10d82a27ef37.56eeca8e2e025a1a.fb6482a2b9406691
-    0000000000000000.0000000000000000.c28691c0f4d8606a.0eb4b91e81406130
+    0000000000000000.0000000000000000.e5057682a276a70e.51684e11e9439daa
+    98372a759955c618.c91c7cd94b05b6a1.e5057682a276a70e.51684e11e9439daa
     1f6b1bdfb5e2eba9.ecf9062da024a7ce.c28691c0f4d8606a.0eb4b91e81406130
     0e1441b59c446e4f
-VMOVUPD_GtoE_128(mem)
+VMOVDQA_EtoG_128(mem)
   before
     2d5361c257598032.bdbbb575d9ee1662.008f2ac2488f7fe9.49bf17b2c0b3c0d9
     473f9531cd8e5205.d075f5a2a20583f2.e1ab65835d53f91f.d6fa04c6a3930408
@@ -5095,13 +5095,13 @@
     dc492ae65b81292e.c152537090871141.7aa40d383f13c68a.73aa05001c942855
     3ab610ffeacd7fcb
   after
-    2d5361c257598032.bdbbb575d9ee1662.6b19325bfb7bd29b.c6845566380568a3
+    2d5361c257598032.bdbbb575d9ee1662.008f2ac2488f7fe9.49bf17b2c0b3c0d9
     473f9531cd8e5205.d075f5a2a20583f2.e1ab65835d53f91f.d6fa04c6a3930408
     38a259ef1aeca1f5.b3e3d5d1abb46d02.6b19325bfb7bd29b.c6845566380568a3
-    dc492ae65b81292e.c152537090871141.7aa40d383f13c68a.73aa05001c942855
+    0000000000000000.0000000000000000.008f2ac2488f7fe9.49bf17b2c0b3c0d9
     3ab610ffeacd7fcb
 
-VMOVSS_XMM_M32(reg)
+VMOVDQU_EtoG_128(reg)
   before
     77f472cf3f3aaab0.0f008304ac59a6db.580e6aeaee08aa59.ea1a720544289117
     86b228dcb66ae5b1.ac93e033287ed329.d26217ab61c576f7.9645ddae27c5ee70
@@ -5110,11 +5110,11 @@
     a3021d0a1846cff0
   after
     77f472cf3f3aaab0.0f008304ac59a6db.580e6aeaee08aa59.ea1a720544289117
-    86b228dcb66ae5b1.ac93e033287ed329.d26217ab61c576f7.9645ddae27c5ee70
+    0000000000000000.0000000000000000.8d9c541f8449afc6.5cf2cb2003f69abe
     c33a2c92ece66c7a.91cdbd61ebfe6d44.8d9c541f8449afc6.5cf2cb2003f69abe
     8ada7c5d7c3c7ab6.997c977912e52f57.e3061fb2f3219273.17edb745f5c85130
     a3021d0a1846cff0
-VMOVSS_XMM_M32(mem)
+VMOVDQU_EtoG_128(mem)
   before
     dcfd795c887ccf2a.36dc13a903f74c12.a06ae867b93dd78f.31ee73d04bd85ba9
     9daa482562770e0b.258deee31ca31d39.82642e17fa141f17.d49e4ce627fa4515
@@ -5122,13 +5122,13 @@
     2c482bd1c3e93871.392b5ccd7500b09b.46ac876dc16d81ca.84887fa6ddb16f3e
     4b5bcf28ef5d2653
   after
-    dcfd795c887ccf2a.36dc13a903f74c12.a06ae867b93dd78f.31ee73d027fa4515
+    dcfd795c887ccf2a.36dc13a903f74c12.a06ae867b93dd78f.31ee73d04bd85ba9
     9daa482562770e0b.258deee31ca31d39.82642e17fa141f17.d49e4ce627fa4515
     c4d40453c24248bf.b239077563cd2bd8.1a36e475f476c41c.2663a75e24148d63
-    2c482bd1c3e93871.392b5ccd7500b09b.46ac876dc16d81ca.84887fa6ddb16f3e
+    0000000000000000.0000000000000000.a06ae867b93dd78f.31ee73d04bd85ba9
     4b5bcf28ef5d2653
 
-VMOVSS_XMM_M32(reg)
+VMOVDQU_EtoG_128(reg)
   before
     d5269652f5a5ef4e.b0d2398a81799b4e.16b1e856eec9e92d.e19291eb7d07144c
     7f37cd8f8c1406da.2e3ea86c19fd2d82.a415a77b69b3113b.c6b380dc445037ce
@@ -5137,11 +5137,11 @@
     d1777e91f8b75c12
   after
     d5269652f5a5ef4e.b0d2398a81799b4e.16b1e856eec9e92d.e19291eb7d07144c
-    7f37cd8f8c1406da.2e3ea86c19fd2d82.a415a77b69b3113b.c6b380dc445037ce
+    0000000000000000.0000000000000000.41a496aa824a6570.d3ddcf2a3453a67e
     a5d8714b4f36a7a3.8058f662a782aa38.41a496aa824a6570.d3ddcf2a3453a67e
     a4567ff2db980d56.84ec9d584612cd9d.48aaaf4ed61b2179.e2dafac3661c1f86
     d1777e91f8b75c12
-VMOVSS_XMM_M32(mem)
+VMOVDQU_EtoG_128(mem)
   before
     7a80d68206311a4f.d6fdf2f0cbc5759f.14c51b3b12bb53dc.1473f0d300b08101
     bbc17d81ab951469.9818c6b1bb4a1b2a.0eb1ecf52889f822.034b54a59d98c1b6
@@ -5149,13 +5149,13 @@
     711aae592c4cb0e2.3cde822d0e8810b3.aced73a2a0c18d71.b65776e19e8acf51
     33232c223aad158f
   after
-    7a80d68206311a4f.d6fdf2f0cbc5759f.14c51b3b12bb53dc.1473f0d39d98c1b6
+    7a80d68206311a4f.d6fdf2f0cbc5759f.14c51b3b12bb53dc.1473f0d300b08101
     bbc17d81ab951469.9818c6b1bb4a1b2a.0eb1ecf52889f822.034b54a59d98c1b6
     6e05f27a04ef088b.46f5f8a148b13aa2.4c7a8a73a387779a.707ed831495c1c41
-    711aae592c4cb0e2.3cde822d0e8810b3.aced73a2a0c18d71.b65776e19e8acf51
+    0000000000000000.0000000000000000.14c51b3b12bb53dc.1473f0d300b08101
     33232c223aad158f
 
-VMOVSS_XMM_M32(reg)
+VMOVDQU_EtoG_128(reg)
   before
     412ff561b9522baa.9eca2e0a3fb7c89a.d62062bfa85bd70a.08d6226c3a43f6d3
     3ec5cd09b6044d4c.d2e2ef795a3d0ede.700793c5b2b5cb53.3e0013bf8e1a6eeb
@@ -5164,11 +5164,11 @@
     8b034c20fa118534
   after
     412ff561b9522baa.9eca2e0a3fb7c89a.d62062bfa85bd70a.08d6226c3a43f6d3
-    3ec5cd09b6044d4c.d2e2ef795a3d0ede.700793c5b2b5cb53.3e0013bf8e1a6eeb
+    0000000000000000.0000000000000000.66df12aac9222a3a.2839c286b751b0e6
     8431b185ce4fb722.ea2e6c9398e93cda.66df12aac9222a3a.2839c286b751b0e6
     70c19b439cc0a5d7.c07a214216c70fbb.14f4d9d9892e2e6a.a34bacadd2f579f0
     8b034c20fa118534
-VMOVSS_XMM_M32(mem)
+VMOVDQU_EtoG_128(mem)
   before
     bd2e1ecb4bb18fde.5fbf89aebde25218.31928b73f0e342ad.d592e6c08c66138f
     13959e9ae2e1541b.ab797632cc41fb90.19412413404a93dc.070434ca71551756
@@ -5176,13 +5176,13 @@
     9e4f99545123fffe.ce4c3e3525e830d8.bf98d84cb8277a9e.2b9784f74b896779
     d5507df378e72c2d
   after
-    bd2e1ecb4bb18fde.5fbf89aebde25218.31928b73f0e342ad.d592e6c071551756
+    bd2e1ecb4bb18fde.5fbf89aebde25218.31928b73f0e342ad.d592e6c08c66138f
     13959e9ae2e1541b.ab797632cc41fb90.19412413404a93dc.070434ca71551756
     6a074979dbae9017.b1395e3b656adbec.54546a0d2507bc73.0597bf63d188746b
-    9e4f99545123fffe.ce4c3e3525e830d8.bf98d84cb8277a9e.2b9784f74b896779
+    0000000000000000.0000000000000000.31928b73f0e342ad.d592e6c08c66138f
     d5507df378e72c2d
 
-VMOVSD_XMM_M64(reg)
+VMOVAPD_GtoE_128(reg)
   before
     5e0ea8c1f72bfe33.8b380c18604d5cfb.5cfe118da84734ff.34d7ebbe18b5888b
     241d00ce61e31a36.0d901daf2537643a.b89bd3ad8914230e.90dd1d4e5ebda363
@@ -5192,10 +5192,10 @@
   after
     5e0ea8c1f72bfe33.8b380c18604d5cfb.5cfe118da84734ff.34d7ebbe18b5888b
     241d00ce61e31a36.0d901daf2537643a.b89bd3ad8914230e.90dd1d4e5ebda363
-    82c88187549abce3.00214907bcedd3e8.3e6e800264da3bb0.af78ece8a84c8755
+    0000000000000000.0000000000000000.4ac514f9d625b692.6d73d379126df08b
     d35d28566cdd20e5.40b80a0b3f7c6531.4ac514f9d625b692.6d73d379126df08b
     a6994eebb72c9931
-VMOVSD_XMM_M64(mem)
+VMOVAPD_GtoE_128(mem)
   before
     36b7d92bb4953f75.7526efa9443781e9.a921dea6cdefd541.38ea8cfd7a82d160
     f99af12624b59e80.c270d4eb79341c9a.172740c67f52e043.642ae379ed7cc8c5
@@ -5203,13 +5203,13 @@
     88d9b5f9ce4876a2.d1b6e6ec6748efb6.723e9f42c51ab6ce.e62b1e8eae783806
     f483fafe34922a3a
   after
-    36b7d92bb4953f75.7526efa9443781e9.a921dea6cdefd541.642ae379ed7cc8c5
+    36b7d92bb4953f75.7526efa9443781e9.6698ac5674b24163.2ad115dbcaa0d66e
     f99af12624b59e80.c270d4eb79341c9a.172740c67f52e043.642ae379ed7cc8c5
     cb0b11c623987281.1887d388a6612da6.6698ac5674b24163.2ad115dbcaa0d66e
     88d9b5f9ce4876a2.d1b6e6ec6748efb6.723e9f42c51ab6ce.e62b1e8eae783806
     f483fafe34922a3a
 
-VMOVSD_XMM_M64(reg)
+VMOVAPD_GtoE_128(reg)
   before
     b027a697f97ae7b6.0bcf59a941d3670f.4b4b0a8359789f78.17e693779196f9b0
     76611dc598bbac25.32b87ac4964500f5.e0903cb9177a7998.315c06dff133c734
@@ -5219,10 +5219,10 @@
   after
     b027a697f97ae7b6.0bcf59a941d3670f.4b4b0a8359789f78.17e693779196f9b0
     76611dc598bbac25.32b87ac4964500f5.e0903cb9177a7998.315c06dff133c734
-    a27e5bf5aee1b534.d8629235eca8ff80.eed277fa3edcb9c2.9b6c736703fcdb87
+    0000000000000000.0000000000000000.cf5db8b36a2a9aa1.33e256fce3fdf3d5
     90ca5c91d6783e8e.d9971fe85d0a1edb.cf5db8b36a2a9aa1.33e256fce3fdf3d5
     d48a2c88ac43c949
-VMOVSD_XMM_M64(mem)
+VMOVAPD_GtoE_128(mem)
   before
     5a2f70f97bd91910.9c911d07ac0d82e0.10249cc905771a33.e07df94e35ee59e2
     a09e9e3a6bcba155.221f99c1cd2bbfd6.5bd586c501f9aeb4.7e7e38393eb63230
@@ -5230,13 +5230,13 @@
     e00aa8db1ff5440c.0bbeb2b65f340e5c.99d28db9637292df.cc529dab748020a5
     36bdbb0bd99aae24
   after
-    5a2f70f97bd91910.9c911d07ac0d82e0.10249cc905771a33.7e7e38393eb63230
+    5a2f70f97bd91910.9c911d07ac0d82e0.957557c66c9f9889.03ac70de1e0e6038
     a09e9e3a6bcba155.221f99c1cd2bbfd6.5bd586c501f9aeb4.7e7e38393eb63230
     84a3323698261b45.7dbfcc2dd55f2e1b.957557c66c9f9889.03ac70de1e0e6038
     e00aa8db1ff5440c.0bbeb2b65f340e5c.99d28db9637292df.cc529dab748020a5
     36bdbb0bd99aae24
 
-VMOVSD_XMM_M64(reg)
+VMOVAPD_GtoE_128(reg)
   before
     9b3ac76aebe84661.929f7d141b44d7d5.276947c807369944.45b6a38b018058e1
     5813bb3446f42307.752e2ccea92091cc.2d0a88cf6af10c80.73ee152662d4a8bc
@@ -5246,10 +5246,10 @@
   after
     9b3ac76aebe84661.929f7d141b44d7d5.276947c807369944.45b6a38b018058e1
     5813bb3446f42307.752e2ccea92091cc.2d0a88cf6af10c80.73ee152662d4a8bc
-    c99495d5854d82c3.648231f3e5942e1f.78ee703723f2a3bb.01476078a47a3c9b
+    0000000000000000.0000000000000000.6660fb6ccfc599a2.c98afe6ce07fd1ab
     4a0b51b9457c9f40.3d690870eaac6af7.6660fb6ccfc599a2.c98afe6ce07fd1ab
     a9866ded34ee2218
-VMOVSD_XMM_M64(mem)
+VMOVAPD_GtoE_128(mem)
   before
     7b0628e9bcd4ed0d.37c3e94c210fb62b.daad2e31d4750183.51ae25da09f42be1
     1dd5ac4b933becb7.ec075bfbb5910230.181b1d23c0faaeed.9722ebed6e0d9523
@@ -5257,13 +5257,13 @@
     3c94fbf29fc278d9.1e66ba5978932b36.e8a44b460b6a3c0d.a0b038b3272be063
     1b61b73eb34839b8
   after
-    7b0628e9bcd4ed0d.37c3e94c210fb62b.daad2e31d4750183.9722ebed6e0d9523
+    7b0628e9bcd4ed0d.37c3e94c210fb62b.d47f5330c9482e62.920a4812999b1315
     1dd5ac4b933becb7.ec075bfbb5910230.181b1d23c0faaeed.9722ebed6e0d9523
     69c07300d531db42.c524a1309e8ec0fa.d47f5330c9482e62.920a4812999b1315
     3c94fbf29fc278d9.1e66ba5978932b36.e8a44b460b6a3c0d.a0b038b3272be063
     1b61b73eb34839b8
 
-VMOVSS_M64_XMM(reg)
+VMOVAPD_GtoE_256(reg)
   before
     6169c11eda7e5ac1.731bbf0e0df97da8.53199fe0de2b818f.31588250a46c961b
     cc1353be375a7e29.e8213b4139e2a7dd.c0894d336ce3fcb2.8c65723aad5af6b7
@@ -5273,10 +5273,10 @@
   after
     6169c11eda7e5ac1.731bbf0e0df97da8.53199fe0de2b818f.31588250a46c961b
     cc1353be375a7e29.e8213b4139e2a7dd.c0894d336ce3fcb2.8c65723aad5af6b7
-    b9ad688c6767e29d.7874ec754289b1a2.c101c1bdbf45d94b.d39899f04441180e
+    8581fcf30531c2c8.ffdf4c9842fb5923.b2cff6ea72e05305.e3be725e852cba4c
     8581fcf30531c2c8.ffdf4c9842fb5923.b2cff6ea72e05305.e3be725e852cba4c
     98a079708b28969c
-VMOVSS_M64_XMM(mem)
+VMOVAPD_GtoE_256(mem)
   before
     ce0d2b127240692b.8adc0b5fad455a57.5a2dd9945544598d.ee3de826223da78d
     62d003315780ee24.250a923dfc2ee5f6.632b0e57986e6e0c.d39894dd6aea118e
@@ -5284,13 +5284,13 @@
     0f8715918aa90207.8e0ff4fafeb0c712.f26761df1b9ac5f7.0545066d346216ad
     092fc51dee442a23
   after
-    ce0d2b127240692b.8adc0b5fad455a57.5a2dd9945544598d.ee3de826223da78d
-    0000000000000000.0000000000000000.0000000000000000.00000000223da78d
+    2eb47cb756f5e3b4.b3578bf78e78a050.f7a567cc268753cb.bc2cf47be772cdb5
+    62d003315780ee24.250a923dfc2ee5f6.632b0e57986e6e0c.d39894dd6aea118e
     2eb47cb756f5e3b4.b3578bf78e78a050.f7a567cc268753cb.bc2cf47be772cdb5
     0f8715918aa90207.8e0ff4fafeb0c712.f26761df1b9ac5f7.0545066d346216ad
     092fc51dee442a23
 
-VMOVSS_M64_XMM(reg)
+VMOVAPD_GtoE_256(reg)
   before
     26352df9b0a742c3.e11347ac0fab0848.137dc8b3e86196e7.303d777c95b480bb
     b7a43b6b16149d38.80258ff30204b0a4.9eef048ce917487c.8df2258fade04044
@@ -5300,10 +5300,10 @@
   after
     26352df9b0a742c3.e11347ac0fab0848.137dc8b3e86196e7.303d777c95b480bb
     b7a43b6b16149d38.80258ff30204b0a4.9eef048ce917487c.8df2258fade04044
-    17c8eae1bd19752f.c8896a527ec2b746.8bafa2f39c5f1a7d.e554e704812ac0be
+    a4ed36c641410754.950a53b4a0f1d95b.360aa0539ec44795.142d39c82d9fbd54
     a4ed36c641410754.950a53b4a0f1d95b.360aa0539ec44795.142d39c82d9fbd54
     f64a98c5cc4af333
-VMOVSS_M64_XMM(mem)
+VMOVAPD_GtoE_256(mem)
   before
     67777fe97a371e86.b85f1b863d198f52.c376c607839bd20f.fb4cf9188ad20d71
     43806a1e5473f97a.b16a958d4d2c48d6.2e97403744ce5d8d.36c1a9adfd16a6bc
@@ -5311,13 +5311,13 @@
     ab553c70fb05b1f4.be7a39201c34401e.2a2b35d9cefd1c99.7e7300fde66e4352
     43489e8e949abff4
   after
-    67777fe97a371e86.b85f1b863d198f52.c376c607839bd20f.fb4cf9188ad20d71
-    0000000000000000.0000000000000000.0000000000000000.000000008ad20d71
+    6530d5527609413a.e95aa1470e06708b.b13a3c2efe953702.43b4ad80921b4f23
+    43806a1e5473f97a.b16a958d4d2c48d6.2e97403744ce5d8d.36c1a9adfd16a6bc
     6530d5527609413a.e95aa1470e06708b.b13a3c2efe953702.43b4ad80921b4f23
     ab553c70fb05b1f4.be7a39201c34401e.2a2b35d9cefd1c99.7e7300fde66e4352
     43489e8e949abff4
 
-VMOVSS_M64_XMM(reg)
+VMOVAPD_GtoE_256(reg)
   before
     ee8083a0392bffb6.f0b91c64ff7407d1.8a175b841241f73a.7436aa24cf11c87f
     db67aba070ad3f43.1029f01a9f61fd00.aa7d03df8cb9cf8c.6b2714fc1edef6e0
@@ -5327,10 +5327,10 @@
   after
     ee8083a0392bffb6.f0b91c64ff7407d1.8a175b841241f73a.7436aa24cf11c87f
     db67aba070ad3f43.1029f01a9f61fd00.aa7d03df8cb9cf8c.6b2714fc1edef6e0
-    664913f8d5adba48.e671347ef6d850ab.7bf82b9e272905c0.eacaf04bd66e63e7
+    ea72b51605b6ad71.505d657c21e6bbfe.57d4d12b7e1cd581.cfeabbff13cfcbc1
     ea72b51605b6ad71.505d657c21e6bbfe.57d4d12b7e1cd581.cfeabbff13cfcbc1
     f554f003f20de999
-VMOVSS_M64_XMM(mem)
+VMOVAPD_GtoE_256(mem)
   before
     37d40b438f327a9c.c52d8f649c555469.29b9fd003b96fc26.9b5df0f42e1e7b7c
     733689aa054c3af5.52c89d503515ebdd.4c507af761f4cd4f.a4de8464d2bc325d
@@ -5338,13 +5338,13 @@
     45d09aa3ed8e365c.f1c941afde28d7e7.e46310ea3fec1152.70fbfce968f9c57e
     ec2fd7d692b11a17
   after
-    37d40b438f327a9c.c52d8f649c555469.29b9fd003b96fc26.9b5df0f42e1e7b7c
-    0000000000000000.0000000000000000.0000000000000000.000000002e1e7b7c
+    8446e4267067e5d1.ed8dd9456c82ad78.97f0574bae0deaa4.cca489e7078137cf
+    733689aa054c3af5.52c89d503515ebdd.4c507af761f4cd4f.a4de8464d2bc325d
     8446e4267067e5d1.ed8dd9456c82ad78.97f0574bae0deaa4.cca489e7078137cf
     45d09aa3ed8e365c.f1c941afde28d7e7.e46310ea3fec1152.70fbfce968f9c57e
     ec2fd7d692b11a17
 
-VMOVSD_M64_XMM(reg)
+VMOVAPS_GtoE_128(reg)
   before
     9c8c181a20347046.949f260b97cdeac1.bcc8d0fa2694a5d5.117622be2f9dfc85
     dc5ebb21ae0e03b7.4b81044b8b30bd2d.a9d68292e15152ef.f8f507b59a2d6868
@@ -5354,10 +5354,10 @@
   after
     9c8c181a20347046.949f260b97cdeac1.bcc8d0fa2694a5d5.117622be2f9dfc85
     dc5ebb21ae0e03b7.4b81044b8b30bd2d.a9d68292e15152ef.f8f507b59a2d6868
-    08f0ba57d9cc1115.4740b150e4c46acc.133e53e3aaec1be1.77ac3dba9da71027
+    0000000000000000.0000000000000000.584e3f5a1ef03c56.68663fb95418b2f0
     7c9013293df9d40c.65a9a804bf94aec9.584e3f5a1ef03c56.68663fb95418b2f0
     a9f18a9eda8a08ed
-VMOVSD_M64_XMM(mem)
+VMOVAPS_GtoE_128(mem)
   before
     141798554b0cce4a.9488c10175228949.7f88655537ad4550.d2504361d8e9f1fb
     86a5e7cac4a7c234.ac25c04d1dd16c78.73a8642d6919eb8f.df915a667564757c
@@ -5365,13 +5365,13 @@
     f029359f3d5d1f5e.4c7ea1ed2ff7aa5b.54df1927692052df.1e00b216c60dddc0
     08c6ea9ab25438db
   after
-    141798554b0cce4a.9488c10175228949.7f88655537ad4550.d2504361d8e9f1fb
-    0000000000000000.0000000000000000.0000000000000000.d2504361d8e9f1fb
+    141798554b0cce4a.9488c10175228949.1bd7217a70e65bb0.d95d80d390ec0584
+    86a5e7cac4a7c234.ac25c04d1dd16c78.73a8642d6919eb8f.df915a667564757c
     dc67f2ea61699ed7.20b30c77d294b845.1bd7217a70e65bb0.d95d80d390ec0584
     f029359f3d5d1f5e.4c7ea1ed2ff7aa5b.54df1927692052df.1e00b216c60dddc0
     08c6ea9ab25438db
 
-VMOVSD_M64_XMM(reg)
+VMOVAPS_GtoE_128(reg)
   before
     f4fa26cbf14c5382.9fb72cd7749000f6.8cd17c1ad1857e66.fa8ec7206fd28c49
     3fe961151e816a60.c5dc547c230dffca.3cfa986a54ca6f13.eaaea7519f08c41a
@@ -5381,10 +5381,10 @@
   after
     f4fa26cbf14c5382.9fb72cd7749000f6.8cd17c1ad1857e66.fa8ec7206fd28c49
     3fe961151e816a60.c5dc547c230dffca.3cfa986a54ca6f13.eaaea7519f08c41a
-    43e098e4d580b922.3f65287c65e0d607.b843f1495252bb0e.fe0c35a614cfb77d
+    0000000000000000.0000000000000000.5cf984236aaa9c02.1373ed0bea31219f
     5d29c5a4b3d47b74.e71f24c2571542d9.5cf984236aaa9c02.1373ed0bea31219f
     05b14c6d3e3dbeab
-VMOVSD_M64_XMM(mem)
+VMOVAPS_GtoE_128(mem)
   before
     b090cdb62cfc49ce.e910e6c15409ed01.9ad4c43a14b9fe6b.83684b64355d4e9c
     f0deecd4ce7c7f34.44e3f6a852ac4b76.345185d0b9d7c7ea.8bdc447951f80f88
@@ -5392,13 +5392,13 @@
     9ff2f53ba5eddc77.d279d380dc69b9c6.8dd2570628b3705d.aa02bacaeb13a904
     7a4c2ee0a1acfaec
   after
-    b090cdb62cfc49ce.e910e6c15409ed01.9ad4c43a14b9fe6b.83684b64355d4e9c
-    0000000000000000.0000000000000000.0000000000000000.83684b64355d4e9c
+    b090cdb62cfc49ce.e910e6c15409ed01.9161e270617c5981.cfa06acc5a061971
+    f0deecd4ce7c7f34.44e3f6a852ac4b76.345185d0b9d7c7ea.8bdc447951f80f88
     a16525b143c81c08.c8edf1c34c48d07e.9161e270617c5981.cfa06acc5a061971
     9ff2f53ba5eddc77.d279d380dc69b9c6.8dd2570628b3705d.aa02bacaeb13a904
     7a4c2ee0a1acfaec
 
-VMOVSD_M64_XMM(reg)
+VMOVAPS_GtoE_128(reg)
   before
     9acbc479175c4ad6.c651d75d10f67aac.bed499499e9c42fa.046e607e2b88c7aa
     65cb7701e9afd36d.f24d4703a1efb3d4.e84a3e8c2f6ca7c5.d20279c486081b93
@@ -5408,10 +5408,10 @@
   after
     9acbc479175c4ad6.c651d75d10f67aac.bed499499e9c42fa.046e607e2b88c7aa
     65cb7701e9afd36d.f24d4703a1efb3d4.e84a3e8c2f6ca7c5.d20279c486081b93
-    399843e3b431d15e.ffb4c11973e5421b.ac27beb42a6523d4.d35b1fc5543e2845
+    0000000000000000.0000000000000000.66b7152d2c14f3d2.e342cd6bb236aaeb
     707e248d146f8255.c950c18ba3e3e5ac.66b7152d2c14f3d2.e342cd6bb236aaeb
     de86ffa4bafd5cb2
-VMOVSD_M64_XMM(mem)
+VMOVAPS_GtoE_128(mem)
   before
     9ff2315b8b9efbc6.68c8176ba4f520fd.2ceec4454cf556b4.72464063d004536c
     0451df7b3f254252.7bc417e7004de803.045a45338b28525e.2c1f39c2b3c27f4e
@@ -5419,13 +5419,13 @@
     271ca1abc117bc84.66fd2e6c8ea8e5d8.82ccb15c381eda4a.1ae38aaba3d52998
     0665da0eea422058
   after
-    9ff2315b8b9efbc6.68c8176ba4f520fd.2ceec4454cf556b4.72464063d004536c
-    0000000000000000.0000000000000000.0000000000000000.72464063d004536c
+    9ff2315b8b9efbc6.68c8176ba4f520fd.2d60c0417b8794d7.f08ffeb670d8b223
+    0451df7b3f254252.7bc417e7004de803.045a45338b28525e.2c1f39c2b3c27f4e
     e87186f2f29fef83.06bc206ec5051513.2d60c0417b8794d7.f08ffeb670d8b223
     271ca1abc117bc84.66fd2e6c8ea8e5d8.82ccb15c381eda4a.1ae38aaba3d52998
     0665da0eea422058
 
-VINSERTPS_0x39_128(reg)
+VMOVAPS_GtoE_256(reg)
   before
     0f61e849deadd210.9c1fac92c7996682.f5d33d4ef8c392fe.e16a956edffadde4
     9325b2ca1da17c6c.254623942132a8a8.108a4a7e9fe15833.2505e6658c265cd1
@@ -5433,12 +5433,12 @@
     7931674aeb55a7be.df2f47943fd6e81f.5bca4b7d10572374.cb65c5af659fba52
     e6c249daca04113f
   after
-    0000000000000000.0000000000000000.000000009fe15833.2505e66500000000
+    0f61e849deadd210.9c1fac92c7996682.f5d33d4ef8c392fe.e16a956edffadde4
     9325b2ca1da17c6c.254623942132a8a8.108a4a7e9fe15833.2505e6658c265cd1
-    edfc33fc43ab5a17.9d5c839beaed4023.146d506a1d8e7521.296a222c5aae123d
+    7931674aeb55a7be.df2f47943fd6e81f.5bca4b7d10572374.cb65c5af659fba52
     7931674aeb55a7be.df2f47943fd6e81f.5bca4b7d10572374.cb65c5af659fba52
     e6c249daca04113f
-VINSERTPS_0x39_128(mem)
+VMOVAPS_GtoE_256(mem)
   before
     554d2c99a5e9d22e.92114b22b12ea10c.c989eb6c3bfa5cc7.42eb372214c79fd9
     f6d2e8d8115bba4c.96e8d9ef32bf82ae.3637eb0dfb645a48.251d11c7c46b24fc
@@ -5446,13 +5446,13 @@
     3af9e1860d14efc3.cbabe818d33eeb9c.08bff05f353bdf84.50e47cbe9a7b3d2a
     4f1105e9f801488d
   after
-    554d2c99a5e9d22e.92114b22b12ea10c.c989eb6c3bfa5cc7.42eb372214c79fd9
+    a31cfc832a6585c4.e0020f1d0996864f.0106c3659a209cce.60acd4d7bdcdf088
     f6d2e8d8115bba4c.96e8d9ef32bf82ae.3637eb0dfb645a48.251d11c7c46b24fc
-    0000000000000000.0000000000000000.3637eb0d00000000.0000000014c79fd9
+    a31cfc832a6585c4.e0020f1d0996864f.0106c3659a209cce.60acd4d7bdcdf088
     3af9e1860d14efc3.cbabe818d33eeb9c.08bff05f353bdf84.50e47cbe9a7b3d2a
     4f1105e9f801488d
 
-VINSERTPS_0x39_128(reg)
+VMOVAPS_GtoE_256(reg)
   before
     ba7e6bc272e94c5e.953314ced573b474.b52f614d2b44eb41.2531ede7e7c0de97
     ed79abb6a4c28649.919712459f8e8f04.f8d97426ae33c3e9.352736e9ccbc5732
@@ -5460,12 +5460,12 @@
     1b44a6a0a3708c1b.dd0c5c74a7297970.fdd25d78a3fdeaf5.9fce9d0ba246a1b2
     b017b303c9ececef
   after
-    0000000000000000.0000000000000000.00000000ae33c3e9.352736e900000000
+    ba7e6bc272e94c5e.953314ced573b474.b52f614d2b44eb41.2531ede7e7c0de97
     ed79abb6a4c28649.919712459f8e8f04.f8d97426ae33c3e9.352736e9ccbc5732
-    444cc0322b1532f9.0bf156d986713d9f.f2f61f10f797ae41.156c4751013a0482
+    1b44a6a0a3708c1b.dd0c5c74a7297970.fdd25d78a3fdeaf5.9fce9d0ba246a1b2
     1b44a6a0a3708c1b.dd0c5c74a7297970.fdd25d78a3fdeaf5.9fce9d0ba246a1b2
     b017b303c9ececef
-VINSERTPS_0x39_128(mem)
+VMOVAPS_GtoE_256(mem)
   before
     2514052595399f65.cead596ea65ecf5a.e4b6a0041dc100a4.77b92ac94df0b1b0
     d8900f5e2038773f.b9d2d607d36b3863.fdb99f7405468f67.baf7826e92fc3f1f
@@ -5473,13 +5473,13 @@
     6b3a3cc1e47e85d1.a6841a4a15146c82.d0febba49844af47.0fa7c5695a91a4c7
     d8b2a7961731f258
   after
-    2514052595399f65.cead596ea65ecf5a.e4b6a0041dc100a4.77b92ac94df0b1b0
+    a6594d9886f62faa.370117d7c42403e2.02e3d4b07ac2dfe4.24d862d50daed2ed
     d8900f5e2038773f.b9d2d607d36b3863.fdb99f7405468f67.baf7826e92fc3f1f
-    0000000000000000.0000000000000000.fdb99f7400000000.000000004df0b1b0
+    a6594d9886f62faa.370117d7c42403e2.02e3d4b07ac2dfe4.24d862d50daed2ed
     6b3a3cc1e47e85d1.a6841a4a15146c82.d0febba49844af47.0fa7c5695a91a4c7
     d8b2a7961731f258
 
-VINSERTPS_0x39_128(reg)
+VMOVAPS_GtoE_256(reg)
   before
     dc4304c8dd1bf74d.04fe57c355dc33e1.61a9dacc63c8aeef.43d7d03c7cd5b9be
     75a7d96b4adaf152.4b721a8cf61cf606.c4ba54c949cb06d7.383990644283ba72
@@ -5487,12 +5487,12 @@
     d917d7b58708af3a.569a89203675a93d.f1d262e44feee7c2.13ccfd15e1649048
     b295a376f3afddc0
   after
-    0000000000000000.0000000000000000.0000000049cb06d7.3839906400000000
+    dc4304c8dd1bf74d.04fe57c355dc33e1.61a9dacc63c8aeef.43d7d03c7cd5b9be
     75a7d96b4adaf152.4b721a8cf61cf606.c4ba54c949cb06d7.383990644283ba72
-    002a20ecf9fa1a12.1d620107e24b896b.2b0482ad64a9b0e4.89f2750905596d92
+    d917d7b58708af3a.569a89203675a93d.f1d262e44feee7c2.13ccfd15e1649048
     d917d7b58708af3a.569a89203675a93d.f1d262e44feee7c2.13ccfd15e1649048
     b295a376f3afddc0
-VINSERTPS_0x39_128(mem)
+VMOVAPS_GtoE_256(mem)
   before
     4217e41657461128.5dbcfa33908feb75.d2e62cc30da412a7.7472efdba727e81e
     9f1f3ae32736e7a9.e66383d3af1b0b70.6d1168dc84e680d6.0f2f26fc07dfefa4
@@ -5500,13 +5500,13 @@
     30f01ab1814e6cad.7aebbb25a074e755.70389921bfd15932.fc2e7e7150fefedc
     0609989b727c7ee7
   after
-    4217e41657461128.5dbcfa33908feb75.d2e62cc30da412a7.7472efdba727e81e
+    a57923c8828a1c72.d15a700080394bd7.03e9b958b646aef6.1d5401b50ba337ff
     9f1f3ae32736e7a9.e66383d3af1b0b70.6d1168dc84e680d6.0f2f26fc07dfefa4
-    0000000000000000.0000000000000000.6d1168dc00000000.00000000a727e81e
+    a57923c8828a1c72.d15a700080394bd7.03e9b958b646aef6.1d5401b50ba337ff
     30f01ab1814e6cad.7aebbb25a074e755.70389921bfd15932.fc2e7e7150fefedc
     0609989b727c7ee7
 
-VPUNPCKLDQ_128(reg)
+VMOVAPS_EtoG_128(reg)
   before
     99314ba10caaf3cb.1c529b8a438f9386.3d6362b0aa581a97.90cb8624bc923db7
     0ff293eeba139b35.4569233fe1574c2a.760d610c3b722148.3f6efa4ec99516b0
@@ -5514,12 +5514,12 @@
     186ed40ec5c76f49.bde934ed27b26783.ba2b53e760769aaa.b9136dc3809395b1
     3dae62e763a5b310
   after
-    0000000000000000.0000000000000000.59ed738a3f6efa4e.01e79f4ac99516b0
-    0ff293eeba139b35.4569233fe1574c2a.760d610c3b722148.3f6efa4ec99516b0
+    99314ba10caaf3cb.1c529b8a438f9386.3d6362b0aa581a97.90cb8624bc923db7
+    0000000000000000.0000000000000000.8137b2a5ee4d3815.59ed738a01e79f4a
     c6976dee1943b0d0.86022cbc7ab554c5.8137b2a5ee4d3815.59ed738a01e79f4a
     186ed40ec5c76f49.bde934ed27b26783.ba2b53e760769aaa.b9136dc3809395b1
     3dae62e763a5b310
-VPUNPCKLDQ_128(mem)
+VMOVAPS_EtoG_128(mem)
   before
     c088d0e1c52ab794.63c1c4b8592a134b.c5eab6bf065c418f.7d373f3f2c7785b2
     1e6e329dc32d5b68.01dd395971f8da83.7ad12f1c33bf9d15.26a57217eedf33da
@@ -5529,11 +5529,11 @@
   after
     c088d0e1c52ab794.63c1c4b8592a134b.c5eab6bf065c418f.7d373f3f2c7785b2
     1e6e329dc32d5b68.01dd395971f8da83.7ad12f1c33bf9d15.26a57217eedf33da
-    0000000000000000.0000000000000000.7d373f3f26a57217.2c7785b2eedf33da
-    da8ec20b01de75b3.aa9fa3319f07bc44.5a80f22be5ddce42.99da9efbc70dca38
+    332c040778ba5cb9.4f0e2f5eaabefe9d.b86a19f2c9e63842.10c2e8dc4337e0cd
+    0000000000000000.0000000000000000.c5eab6bf065c418f.7d373f3f2c7785b2
     1c388fde15ec2bc7
 
-VPUNPCKLDQ_128(reg)
+VMOVAPS_EtoG_128(reg)
   before
     f52ab7f3c9614025.f160e99679a46481.6cde9040ed5f4f25.3ee035b5a2b01a40
     80fa12a580f644ff.526df492fd18e34f.f216f2f52f53f4eb.3f565e7b1c6cd969
@@ -5541,12 +5541,12 @@
     1b68529066b60cd5.676ca691973c839f.bb9f0606013c64d9.07b4536bbacca0eb
     8634176d14891f9b
   after
-    0000000000000000.0000000000000000.38aee9693f565e7b.701cc7e91c6cd969
-    80fa12a580f644ff.526df492fd18e34f.f216f2f52f53f4eb.3f565e7b1c6cd969
+    f52ab7f3c9614025.f160e99679a46481.6cde9040ed5f4f25.3ee035b5a2b01a40
+    0000000000000000.0000000000000000.9892c5be026ee743.38aee969701cc7e9
     18f69c60d63a7400.db835feca847ae4b.9892c5be026ee743.38aee969701cc7e9
     1b68529066b60cd5.676ca691973c839f.bb9f0606013c64d9.07b4536bbacca0eb
     8634176d14891f9b
-VPUNPCKLDQ_128(mem)
+VMOVAPS_EtoG_128(mem)
   before
     93f9b15b9d5e0127.e49c2fa1ccf84829.d1f5456ce5041c77.b589b039c84aa658
     08d19d216f5702b9.cee02fffa58b64a9.f7eab968afa93600.e39cbfc3f423ea6d
@@ -5556,11 +5556,11 @@
   after
     93f9b15b9d5e0127.e49c2fa1ccf84829.d1f5456ce5041c77.b589b039c84aa658
     08d19d216f5702b9.cee02fffa58b64a9.f7eab968afa93600.e39cbfc3f423ea6d
-    0000000000000000.0000000000000000.b589b039e39cbfc3.c84aa658f423ea6d
-    9ee55ce65fe74fa0.79c489521ed62adc.e2470d7824c0dcd4.4b6cfc8dea676708
+    c38658aca681dd7d.377f4e168cfc9b01.b3177d73103a8c66.a1232f1121536cc4
+    0000000000000000.0000000000000000.d1f5456ce5041c77.b589b039c84aa658
     3dc123a4ecea19e5
 
-VPUNPCKLDQ_128(reg)
+VMOVAPS_EtoG_128(reg)
   before
     d36f9fc3c268bc08.76ba27bdb596144e.f2fdda20f6a54ce7.6148e5630849e077
     69c36c54086e8c1d.28d0341bc599e8b2.fc743feab1f63ece.0ae48220d8e0547a
@@ -5568,12 +5568,12 @@
     0587ea815640a7cb.85f3052180cbab4e.374e33273e4b82dd.4e20f8c1a9698053
     a058c97ce373af80
   after
-    0000000000000000.0000000000000000.bbe85f9c0ae48220.af91f60ad8e0547a
-    69c36c54086e8c1d.28d0341bc599e8b2.fc743feab1f63ece.0ae48220d8e0547a
+    d36f9fc3c268bc08.76ba27bdb596144e.f2fdda20f6a54ce7.6148e5630849e077
+    0000000000000000.0000000000000000.f576b41eea543c3c.bbe85f9caf91f60a
     5b0686c55b87c7cf.8ef500eeaafc86f9.f576b41eea543c3c.bbe85f9caf91f60a
     0587ea815640a7cb.85f3052180cbab4e.374e33273e4b82dd.4e20f8c1a9698053
     a058c97ce373af80
-VPUNPCKLDQ_128(mem)
+VMOVAPS_EtoG_128(mem)
   before
     8d5c4eba78bc3ebe.c39192f4962468bd.ea98c1a0641313de.204aba7048674c5f
     f2f70465854feb39.f16f7c89b6bf4850.97aeaf5772df79d5.0ab54467a435d56c
@@ -5583,11 +5583,11 @@
   after
     8d5c4eba78bc3ebe.c39192f4962468bd.ea98c1a0641313de.204aba7048674c5f
     f2f70465854feb39.f16f7c89b6bf4850.97aeaf5772df79d5.0ab54467a435d56c
-    0000000000000000.0000000000000000.204aba700ab54467.48674c5fa435d56c
-    8f26f0b775848a93.0cda04cf084b500b.3c5f121d7a3532a6.5406510cc51516d8
+    a9f6666b2538701c.ea6ea4af539d8131.69024c32c53c9a5e.52dacd77ef415ab0
+    0000000000000000.0000000000000000.ea98c1a0641313de.204aba7048674c5f
     6d85cc93c13f4790
 
-VPACKSSDW_128(reg)
+VMOVAPD_EtoG_256(reg)
   before
     f7a33b767f4b2783.80511e35903df4cb.b2ff9a567254f18b.ec937f05abd6fdd9
     4fac99229cc4f25e.58446dd193726bf0.382960b02c459f5d.55680ed4772cb622
@@ -5595,12 +5595,12 @@
     d9ae1386622d3d7a.2db15a13bf7970b0.53bb728e020c15a5.c22982db4a24e5a7
     7eac60eb8aded33c
   after
-    0000000000000000.0000000000000000.7fff7fff80007fff.7fff7fff7fff7fff
-    4fac99229cc4f25e.58446dd193726bf0.382960b02c459f5d.55680ed4772cb622
+    f7a33b767f4b2783.80511e35903df4cb.b2ff9a567254f18b.ec937f05abd6fdd9
+    d1ebe204b436e6cc.f3ca5777992cab2e.f9a4544ad3a9972c.53ac3b78f8411aad
     d1ebe204b436e6cc.f3ca5777992cab2e.f9a4544ad3a9972c.53ac3b78f8411aad
     d9ae1386622d3d7a.2db15a13bf7970b0.53bb728e020c15a5.c22982db4a24e5a7
     7eac60eb8aded33c
-VPACKSSDW_128(mem)
+VMOVAPD_EtoG_256(mem)
   before
     63014f93d37d9f97.c43f261642363414.e2c3f191206475a2.a1bcb4ea56fa5573
     4df3cdbf420d06e5.eceb191ff1dc0745.eece99ded8fa7731.3ef118c86a009243
@@ -5610,11 +5610,11 @@
   after
     63014f93d37d9f97.c43f261642363414.e2c3f191206475a2.a1bcb4ea56fa5573
     4df3cdbf420d06e5.eceb191ff1dc0745.eece99ded8fa7731.3ef118c86a009243
-    0000000000000000.0000000000000000.80007fff80007fff.800080007fff7fff
-    a0e26453002c9409.66c48c4b2a302f1e.7bfa0890c05462d6.d92a33bf4382f697
+    1850565bf298c352.aefee70d0aabf1ba.2d9ccce404463289.88a79996daaa09c0
+    63014f93d37d9f97.c43f261642363414.e2c3f191206475a2.a1bcb4ea56fa5573
     8fc5e2af41169474
 
-VPACKSSDW_128(reg)
+VMOVAPD_EtoG_256(reg)
   before
     04c6a3d26ff12002.c176759387d43337.70880548ecf6fd1e.b4b3c8cf2731c242
     9677719469a0d6ee.57d80407a49d5d07.28984c6ded8a9666.b495898c55e80ffc
@@ -5622,12 +5622,12 @@
     7c1d24a633a7af8f.51368c3c0ebf4140.11c739e219481c7c.7800fa3079155f05
     f521a3efa5a3daac
   after
-    0000000000000000.0000000000000000.7fff7fff7fff7fff.7fff800080007fff
-    9677719469a0d6ee.57d80407a49d5d07.28984c6ded8a9666.b495898c55e80ffc
+    04c6a3d26ff12002.c176759387d43337.70880548ecf6fd1e.b4b3c8cf2731c242
+    9f264862ccaef2e4.3ed48d9c7292cda6.ea3e5f27c87637a1.566ac5b36785042e
     9f264862ccaef2e4.3ed48d9c7292cda6.ea3e5f27c87637a1.566ac5b36785042e
     7c1d24a633a7af8f.51368c3c0ebf4140.11c739e219481c7c.7800fa3079155f05
     f521a3efa5a3daac
-VPACKSSDW_128(mem)
+VMOVAPD_EtoG_256(mem)
   before
     a99a3cdc0a3b3250.8aa801cd3b184a9b.6eca7dd593317200.fb7fd70b7d8c81a2
     6f3741e3c1ea221d.2315dc447f8cffb6.705bdd511df31f13.03b2330c90cda1c0
@@ -5637,11 +5637,11 @@
   after
     a99a3cdc0a3b3250.8aa801cd3b184a9b.6eca7dd593317200.fb7fd70b7d8c81a2
     6f3741e3c1ea221d.2315dc447f8cffb6.705bdd511df31f13.03b2330c90cda1c0
-    0000000000000000.0000000000000000.7fff800080007fff.7fff7fff7fff8000
-    a50c81f09bbbbee0.6ac179ce2daea5c3.92a7d7a7b398d9e0.ddb81a4a30760593
+    25c32ff0e9bb683e.a4afb0769c8f0989.32b6279ec91203a4.85ac4b53ed97ba82
+    a99a3cdc0a3b3250.8aa801cd3b184a9b.6eca7dd593317200.fb7fd70b7d8c81a2
     66249c5ff6f7c19f
 
-VPACKSSDW_128(reg)
+VMOVAPD_EtoG_256(reg)
   before
     7e3acefddba52854.cddcb3cdf6f4e02e.cf9933bacf740f0e.6bfa6a58f6935ef2
     8047ab907a0d775c.7801417513748c55.3081dba51d6d8317.987b5a9dae0f4d07
@@ -5649,12 +5649,12 @@
     b17555455738bc16.c67562d209786ddc.56b4e2282f2a7711.62364693efb75ce9
     b7093a1cb0fbf40e
   after
-    0000000000000000.0000000000000000.7fff7fff7fff8000.7fff7fff80008000
-    8047ab907a0d775c.7801417513748c55.3081dba51d6d8317.987b5a9dae0f4d07
+    7e3acefddba52854.cddcb3cdf6f4e02e.cf9933bacf740f0e.6bfa6a58f6935ef2
+    c7972e846fbaea63.8145a7d210477c80.e9c66cfbb4263c89.f7f62562f817634b
     c7972e846fbaea63.8145a7d210477c80.e9c66cfbb4263c89.f7f62562f817634b
     b17555455738bc16.c67562d209786ddc.56b4e2282f2a7711.62364693efb75ce9
     b7093a1cb0fbf40e
-VPACKSSDW_128(mem)
+VMOVAPD_EtoG_256(mem)
   before
     d0397bea57f0e7e6.992f1c3fcd142a21.215ced6019131a95.d39639982a06705a
     8b9387e7fea1f09c.da107ddf6ed9702f.6fc8c4685c2441d6.bcba6db842446311
@@ -5664,11 +5664,11 @@
   after
     d0397bea57f0e7e6.992f1c3fcd142a21.215ced6019131a95.d39639982a06705a
     8b9387e7fea1f09c.da107ddf6ed9702f.6fc8c4685c2441d6.bcba6db842446311
-    0000000000000000.0000000000000000.7fff7fff80007fff.7fff7fff80007fff
-    52f4ed23c2683654.db7502bd9f4f7307.555b4796eedae7a3.42f35eb4381c2578
+    c2e3d901c31acc5d.d263768fd513caed.8d8363d6efb89ccc.6d6a7bf213728be2
+    d0397bea57f0e7e6.992f1c3fcd142a21.215ced6019131a95.d39639982a06705a
     97a112684dcd6c80
 
-VPADDW_128(reg)
+VMOVAPD_EtoG_128(reg)
   before
     c8c0937cef119ea5.18943f381696ebae.53921dd36717a828.a51aea947497e086
     319cde5bba74f594.ee8d4c2edcb1a896.9406c43fcafaa5fc.578dcabc9df941a1
@@ -5676,12 +5676,12 @@
     1bbabf2938c9047f.3dbe846a2cdb24c3.e522a2c6ce3ae571.54be2f3b4ae22d32
     5815ac6a06803100
   after
-    0000000000000000.0000000000000000.8f22b5ab2e7b4b2d.a00c2eb7240808c3
-    319cde5bba74f594.ee8d4c2edcb1a896.9406c43fcafaa5fc.578dcabc9df941a1
+    c8c0937cef119ea5.18943f381696ebae.53921dd36717a828.a51aea947497e086
+    0000000000000000.0000000000000000.fb1cf16c6381a531.487f63fb860fc722
     2e80ee704883aef8.b1ad8ff02fc42639.fb1cf16c6381a531.487f63fb860fc722
     1bbabf2938c9047f.3dbe846a2cdb24c3.e522a2c6ce3ae571.54be2f3b4ae22d32
     5815ac6a06803100
-VPADDW_128(mem)
+VMOVAPD_EtoG_128(mem)
   before
     2e4f5573d6f48db6.54944df124d334d2.6f8da788ee035c5f.ac62d2b9a8b1a168
     b339a641d44bfe80.345b9435a82b7aa0.21e5743791468b3a.ad297db18d7015c3
@@ -5691,11 +5691,11 @@
   after
     2e4f5573d6f48db6.54944df124d334d2.6f8da788ee035c5f.ac62d2b9a8b1a168
     b339a641d44bfe80.345b9435a82b7aa0.21e5743791468b3a.ad297db18d7015c3
-    0000000000000000.0000000000000000.91721bbf7f49e799.598b506a3621b72b
-    3a4d30e1d0cf0d03.5ee03fdceafb3757.7864fef3ed53bd5b.ce7c3660e5fc1354
+    c39f1bc21e903f8c.195b915f61601293.3094686132b36c7f.45c3a01a18057c2e
+    0000000000000000.0000000000000000.6f8da788ee035c5f.ac62d2b9a8b1a168
     a5a03bf091df16e2
 
-VPADDW_128(reg)
+VMOVAPD_EtoG_128(reg)
   before
     267aab34b83cc183.f40f628a05142414.5f369a18df8a2799.d523b2dadd3438fa
     ad58829af49f4fe4.cdb02ca9da6c40e9.77a89e80de981b05.239b00001e619a87
@@ -5703,12 +5703,12 @@
     3d4b577822a40695.4cc379fad2837591.6014928063630609.02e95cbe05d1011d
     4b56612de32b7f7e
   after
-    0000000000000000.0000000000000000.7c2be5ff5f4a6d4b.62346553ec4838b6
-    ad58829af49f4fe4.cdb02ca9da6c40e9.77a89e80de981b05.239b00001e619a87
+    267aab34b83cc183.f40f628a05142414.5f369a18df8a2799.d523b2dadd3438fa
+    0000000000000000.0000000000000000.0483477f80b25246.3e996553cde79e2f
     9684bd8ce493fdb1.a1fe0a2b6ae31cae.0483477f80b25246.3e996553cde79e2f
     3d4b577822a40695.4cc379fad2837591.6014928063630609.02e95cbe05d1011d
     4b56612de32b7f7e
-VPADDW_128(mem)
+VMOVAPD_EtoG_128(mem)
   before
     f5aef08c8202d47e.fef94cc94a5ea83d.aaccf3042d5a07bb.e9a57af1233774fa
     dcbb85c7ff61bb48.36da98ebf94e1d54.97e5f63397738e5b.fa82fb3d5bbbd8c4
@@ -5718,11 +5718,11 @@
   after
     f5aef08c8202d47e.fef94cc94a5ea83d.aaccf3042d5a07bb.e9a57af1233774fa
     dcbb85c7ff61bb48.36da98ebf94e1d54.97e5f63397738e5b.fa82fb3d5bbbd8c4
-    0000000000000000.0000000000000000.42b1e937c4cd9616.e427762e7ef24dbe
-    d027b38101e832ec.7564265259fd7282.8e7684b40a9d69a7.2255b916a4007195
+    dc4a9dca7554f109.3e3a374acaffa187.efdafd752ddbc59b.eef911d0a7796d14
+    0000000000000000.0000000000000000.aaccf3042d5a07bb.e9a57af1233774fa
     f3e1ee7bedd91df4
 
-VPADDW_128(reg)
+VMOVAPD_EtoG_128(reg)
   before
     bbeaac6b1f92b0dc.961e43d9be283a1e.36a5606f44d5caf0.4f8708de4bc535ac
     d8bcef53d6b764fa.09fbc9bcc820c4ca.dd49e10d2412e67e.10d704de0c60e7d6
@@ -5730,12 +5730,12 @@
     7cebf5b740712287.6596a9d7366a5143.4deaa97d39ed59a8.ff6754107b1de847
     e43fa01a6256afe7
   after
-    0000000000000000.0000000000000000.a3e586a6bb53e955.bd0af97e74d92126
-    d8bcef53d6b764fa.09fbc9bcc820c4ca.dd49e10d2412e67e.10d704de0c60e7d6
+    bbeaac6b1f92b0dc.961e43d9be283a1e.36a5606f44d5caf0.4f8708de4bc535ac
+    0000000000000000.0000000000000000.c69ca599974102d7.ac33f4a068793950
     a4a3b49dadd276fa.058ac2183cdd8d1e.c69ca599974102d7.ac33f4a068793950
     7cebf5b740712287.6596a9d7366a5143.4deaa97d39ed59a8.ff6754107b1de847
     e43fa01a6256afe7
-VPADDW_128(mem)
+VMOVAPD_EtoG_128(mem)
   before
     398755ab38324c5b.bde0b00b2c20a34e.07ecfae7d1d3cb68.ce7fe827a5a2289d
     d90aedad1abd79d0.c1cde0070c6937fa.c65831332a25b8b7.a4a65e0277ecab61
@@ -5745,11 +5745,11 @@
   after
     398755ab38324c5b.bde0b00b2c20a34e.07ecfae7d1d3cb68.ce7fe827a5a2289d
     d90aedad1abd79d0.c1cde0070c6937fa.c65831332a25b8b7.a4a65e0277ecab61
-    0000000000000000.0000000000000000.ce442c1afbf8841f.732546291d8ed3fe
-    69f5bcb86f0c756b.85c290a41aff82b4.0aa2422f83b1db84.c4dedffac071bc08
+    9f96e60e2301f271.e5ff82167cda1838.7da6caa75b6bd45c.2dad07794c581ea0
+    0000000000000000.0000000000000000.07ecfae7d1d3cb68.ce7fe827a5a2289d
     c586e3f06ec4c243
 
-VPSRLW_0x05_128(reg)
+VMOVUPD_GtoE_128(reg)
   before
     8bf10ec7f2dc6cfd.11f4e9991beabce9.fd62081d7f62b319.471814b7bc04885b
     746b5cebe945f5e3.755feb9c43a68419.a92be5ed4992e514.12d3bc2b226f980c
@@ -5757,12 +5757,12 @@
     1bbb52cb9e3c97e2.dda85bb775e88638.0e67bf427b823e7a.be4c7e88e7bed0af
     57a191487ebb70f8
   after
-    0000000000000000.0000000000000000.007305fa03dc01f3.05f203f4073d0685
+    8bf10ec7f2dc6cfd.11f4e9991beabce9.fd62081d7f62b319.471814b7bc04885b
     746b5cebe945f5e3.755feb9c43a68419.a92be5ed4992e514.12d3bc2b226f980c
-    da3fc9c9ee8c9aa1.6f023dac024c8824.e669238014185450.45a1b677d2ffc7c4
+    0000000000000000.0000000000000000.0e67bf427b823e7a.be4c7e88e7bed0af
     1bbb52cb9e3c97e2.dda85bb775e88638.0e67bf427b823e7a.be4c7e88e7bed0af
     57a191487ebb70f8
-VPSRLW_0x05_128(mem)
+VMOVUPD_GtoE_128(mem)
   before
     ed6c6aa5b2ff63cb.9129f25e94e12853.991fc1a8b7873881.7e73b3a01a5bdd3e
     5d78858aa0986556.9ad6a5ef6d0788a0.8031ec6be4345a2b.92d7fd048e2f6e47
@@ -5770,13 +5770,13 @@
     3687729b18f7843e.d11d34b73609a87b.40597d1871eae250.16da809364fa55da
     3d11b294fd0923bc
   after
-    ed6c6aa5b2ff63cb.9129f25e94e12853.991fc1a8b7873881.7e73b3a01a5bdd3e
+    ed6c6aa5b2ff63cb.9129f25e94e12853.6fab56ed19fcaa61.a6e098dc738b2d42
     5d78858aa0986556.9ad6a5ef6d0788a0.8031ec6be4345a2b.92d7fd048e2f6e47
     81935fe2639131c2.900e67e9c43bf474.6fab56ed19fcaa61.a6e098dc738b2d42
     3687729b18f7843e.d11d34b73609a87b.40597d1871eae250.16da809364fa55da
     3d11b294fd0923bc
 
-VPSRLW_0x05_128(reg)
+VMOVUPD_GtoE_128(reg)
   before
     79d0294ddb42d394.59223ca0dad41af4.b74f09c75efbdf63.d007ddd9090abf23
     2565e1299934a00d.c42e38ddc537ae10.9fefe184d89fd6d6.fb81f01dfd68fc07
@@ -5784,12 +5784,12 @@
     3d3c04fa276c8594.e5cbb7b089b8c32e.e6ad8ab5352bf40e.930823da66108ab0
     b7ad3c2c137252ce
   after
-    0000000000000000.0000000000000000.0735045501a907a0.0498011e03300455
+    79d0294ddb42d394.59223ca0dad41af4.b74f09c75efbdf63.d007ddd9090abf23
     2565e1299934a00d.c42e38ddc537ae10.9fefe184d89fd6d6.fb81f01dfd68fc07
-    9d1ad694d468c8d4.5478e23ef629fdc0.e64ab85a4181c980.9e9234cf67115727
+    0000000000000000.0000000000000000.e6ad8ab5352bf40e.930823da66108ab0
     3d3c04fa276c8594.e5cbb7b089b8c32e.e6ad8ab5352bf40e.930823da66108ab0
     b7ad3c2c137252ce
-VPSRLW_0x05_128(mem)
+VMOVUPD_GtoE_128(mem)
   before
     e64ef8b08d426aac.601768c82fcb13fa.53f5311d99efbc86.fc6254014f2b922c
     fcb7d452ed8c8f77.64f7fd688712b0b2.7ac0ce7242dba3f5.85b610ab2b0de085
@@ -5797,13 +5797,13 @@
     4d10dea0d5c0f082.7cf5aad2998502c5.646d5f85d2ff2ec7.5b6a53c49ca37b9a
     6162d20d677140ae
   after
-    e64ef8b08d426aac.601768c82fcb13fa.53f5311d99efbc86.fc6254014f2b922c
+    e64ef8b08d426aac.601768c82fcb13fa.37fa099ca18735a7.dbf4bc1d665b1ac6
     fcb7d452ed8c8f77.64f7fd688712b0b2.7ac0ce7242dba3f5.85b610ab2b0de085
     d5b34dfe515d7d5a.a427bf47cccb9667.37fa099ca18735a7.dbf4bc1d665b1ac6
     4d10dea0d5c0f082.7cf5aad2998502c5.646d5f85d2ff2ec7.5b6a53c49ca37b9a
     6162d20d677140ae
 
-VPSRLW_0x05_128(reg)
+VMOVUPD_GtoE_128(reg)
   before
     49293363664fa5ae.4098032494c1a31b.47abba738bc92f7a.dee64a1bef504a82
     6f0b743133cce645.8a193977ab6c5350.6396ec983d255a30.8131484917854403
@@ -5811,12 +5811,12 @@
     e55084eaa8cceaea.9331c4364ef39a40.fa3ba31b52539a50.b16c6a1df2cbc409
     f7f4879bdef5c3e7
   after
-    0000000000000000.0000000000000000.07d10518029204d2.058b035007960620
+    49293363664fa5ae.4098032494c1a31b.47abba738bc92f7a.dee64a1bef504a82
     6f0b743133cce645.8a193977ab6c5350.6396ec983d255a30.8131484917854403
-    2f5490e56a713e20.075dfa8335cebc4e.2a023bac4b24bf93.2819d4fb64aad977
+    0000000000000000.0000000000000000.fa3ba31b52539a50.b16c6a1df2cbc409
     e55084eaa8cceaea.9331c4364ef39a40.fa3ba31b52539a50.b16c6a1df2cbc409
     f7f4879bdef5c3e7
-VPSRLW_0x05_128(mem)
+VMOVUPD_GtoE_128(mem)
   before
     d67ea5614334903a.ed4b4aac88682650.0a60127a13e5a853.2d8d2151ee3d2713
     2ad6425b3d92e831.a390e097a6d12efe.48b8603da0b2a3b2.2143afbaba6ea187
@@ -5824,13 +5824,13 @@
     a020e79c63e127b5.892c69990f3c90e0.880feded7f0b4f07.b80ff0d553d74e35
     13bc9a605826fac6
   after
-    d67ea5614334903a.ed4b4aac88682650.0a60127a13e5a853.2d8d2151ee3d2713
+    d67ea5614334903a.ed4b4aac88682650.28032b6a1066468b.30ab4bc252734559
     2ad6425b3d92e831.a390e097a6d12efe.48b8603da0b2a3b2.2143afbaba6ea187
     cfc8d976ea1d86f6.636d4118a0943d9f.28032b6a1066468b.30ab4bc252734559
     a020e79c63e127b5.892c69990f3c90e0.880feded7f0b4f07.b80ff0d553d74e35
     13bc9a605826fac6
 
-VPSLLW_0x05_128(reg)
+VMOVSS_XMM_M32(reg)
   before
     9efe46cdfeed83b8.7baae6bbc6e8879b.711a54879156636c.43a624b20aaf7855
     b621ee8ae0b725b9.3b3154bd2f4062d4.7783ff4fc26df1f0.35954ca5cc5e7e9f
@@ -5838,12 +5838,12 @@
     f83927a0ca85a892.d96a6a1f801278ed.4cf581199ec2318f.2daa5ac5670910d8
     ec693acb781f1420
   after
-    0000000000000000.0000000000000000.9ea02320d84031e0.b54058a0e1201b00
+    9efe46cdfeed83b8.7baae6bbc6e8879b.711a54879156636c.43a624b20aaf7855
     b621ee8ae0b725b9.3b3154bd2f4062d4.7783ff4fc26df1f0.35954ca5cc5e7e9f
     b57090019b101e72.bc82ac90b9f5748b.f7b2645b3d0d7718.39a8dfb2e2221c11
     f83927a0ca85a892.d96a6a1f801278ed.4cf581199ec2318f.2daa5ac5670910d8
     ec693acb781f1420
-VPSLLW_0x05_128(mem)
+VMOVSS_XMM_M32(mem)
   before
     51affaae306fe414.dbc6b0d20aa100c3.70b20a56a1a32b26.d49652f482195a01
     3a4a165cac053ee1.bb642503f6f061b1.5b29092138b44861.eae2d158859d301c
@@ -5851,13 +5851,13 @@
     04aa54c55d347bb5.dd03c81244593278.a1d011233588b38f.2fabce6b555ecdf7
     17c043f25bb20e10
   after
-    51affaae306fe414.dbc6b0d20aa100c3.70b20a56a1a32b26.d49652f482195a01
+    51affaae306fe414.dbc6b0d20aa100c3.70b20a56a1a32b26.d49652f4859d301c
     3a4a165cac053ee1.bb642503f6f061b1.5b29092138b44861.eae2d158859d301c
     81040bbf07eddcb3.f25f849f2bff090a.789ae26c5f528ccb.e925fcb142dbed8a
     04aa54c55d347bb5.dd03c81244593278.a1d011233588b38f.2fabce6b555ecdf7
     17c043f25bb20e10
 
-VPSLLW_0x05_128(reg)
+VMOVSS_XMM_M32(reg)
   before
     fcb057b2ef64ea81.9d076c59cbe5d613.d89cedc8dd8a19a7.b4991233d46279da
     3cc60717aefe9ef5.2ae9d2676d0cabfb.3f75f02d931ff944.8bbf628658ed9ad7
@@ -5865,12 +5865,12 @@
     399727811b207d99.8b6870a1baeead13.c11b7cb5c5a39777.f955dba98144db9a
     475cfe515e2873b7
   after
-    0000000000000000.0000000000000000.236096a0b460eee0.2aa0752028807340
+    fcb057b2ef64ea81.9d076c59cbe5d613.d89cedc8dd8a19a7.b4991233d46279da
     3cc60717aefe9ef5.2ae9d2676d0cabfb.3f75f02d931ff944.8bbf628658ed9ad7
     314f4d8e330f6519.851affdb5eb6b497.6edccbae02a30ffb.040f7b09de34d1b3
     399727811b207d99.8b6870a1baeead13.c11b7cb5c5a39777.f955dba98144db9a
     475cfe515e2873b7
-VPSLLW_0x05_128(mem)
+VMOVSS_XMM_M32(mem)
   before
     cbf25eec90ec5637.aeea905e01bf2020.199da2a59ec1549c.947ffeb078a9cd64
     5fe17968339c4046.ee94859082788a5a.098610d4263a635e.43544e09b843ec70
@@ -5878,13 +5878,13 @@
     2afeccb03ff219be.3a1cffa2c264a79b.82a3915f8f4eab3b.a580448a4d62d88f
     0f6fe389dbfe1dfc
   after
-    cbf25eec90ec5637.aeea905e01bf2020.199da2a59ec1549c.947ffeb078a9cd64
+    cbf25eec90ec5637.aeea905e01bf2020.199da2a59ec1549c.947ffeb0b843ec70
     5fe17968339c4046.ee94859082788a5a.098610d4263a635e.43544e09b843ec70
     e0f7c9b06445ed0f.53e1018239d5f9f5.38ef36186c659784.2ae5662e21fd3145
     2afeccb03ff219be.3a1cffa2c264a79b.82a3915f8f4eab3b.a580448a4d62d88f
     0f6fe389dbfe1dfc
 
-VPSLLW_0x05_128(reg)
+VMOVSS_XMM_M32(reg)
   before
     c6003f97645d3b35.1ac3fe54dfb07f80.00937d5bbab0d1f8.c4709b93a9025dae
     257d5420870c6fe9.8a11d989618adc81.ff907719bd46b2b9.d820d2a2d68c670a
@@ -5892,12 +5892,12 @@
     4a6e9b540588086c.5d7c7f5178c26aef.1b4fcb55517e8d16.e95cb5fddb54752c
     9e805822eaa9f14a
   after
-    0000000000000000.0000000000000000.69e06aa02fc0a2c0.2b80bfa06a80a580
+    c6003f97645d3b35.1ac3fe54dfb07f80.00937d5bbab0d1f8.c4709b93a9025dae
     257d5420870c6fe9.8a11d989618adc81.ff907719bd46b2b9.d820d2a2d68c670a
     88331f90dd96f5c2.57b6db39e08cebed.9460e74966b1888a.9b80b17733f9867b
     4a6e9b540588086c.5d7c7f5178c26aef.1b4fcb55517e8d16.e95cb5fddb54752c
     9e805822eaa9f14a
-VPSLLW_0x05_128(mem)
+VMOVSS_XMM_M32(mem)
   before
     96b818d27e05b600.c979c4d6986de594.783141be463913b3.f1a81eaa1b37fe0a
     adcf70f7b073807b.60a2968434d1c8e6.849f9d6b65fda366.70b9dcb55f6a1611
@@ -5905,13 +5905,13 @@
     a8ced85364b6116f.45792610f6488fb6.dfd9143408986649.dc2f8a99c86c2e0b
     812c724b2353a655
   after
-    96b818d27e05b600.c979c4d6986de594.783141be463913b3.f1a81eaa1b37fe0a
+    96b818d27e05b600.c979c4d6986de594.783141be463913b3.f1a81eaa5f6a1611
     adcf70f7b073807b.60a2968434d1c8e6.849f9d6b65fda366.70b9dcb55f6a1611
     bf93dc7e9eff0ae7.6a330ec87541ec0d.5d931043f218d534.f5cc01e0baa312d8
     a8ced85364b6116f.45792610f6488fb6.dfd9143408986649.dc2f8a99c86c2e0b
     812c724b2353a655
 
-VPUNPCKLQDQ_128(reg)
+VMOVSD_XMM_M64(reg)
   before
     4010b5626ae4b563.444de1631da25140.4cc0dcc75472eb8d.e63c2729c48812d0
     75264f4936aa98e0.6fdc7298e5d28685.da542b592a4b3c3d.4e8ac50e41f595f5
@@ -5919,12 +5919,12 @@
     b11d793dd305c9da.e25a1c261527bd1e.ff9285beaf3db1da.b1128e58f0730ecc
     63e6b2955a9d7dd5
   after
-    0000000000000000.0000000000000000.f38d68cf9ceaaae5.4e8ac50e41f595f5
+    4010b5626ae4b563.444de1631da25140.4cc0dcc75472eb8d.e63c2729c48812d0
     75264f4936aa98e0.6fdc7298e5d28685.da542b592a4b3c3d.4e8ac50e41f595f5
     7cbc3d6f26318b79.054707e0d94f6b6b.4d8110321460c072.f38d68cf9ceaaae5
     b11d793dd305c9da.e25a1c261527bd1e.ff9285beaf3db1da.b1128e58f0730ecc
     63e6b2955a9d7dd5
-VPUNPCKLQDQ_128(mem)
+VMOVSD_XMM_M64(mem)
   before
     e7d25073f573b32d.70940120dbb390ae.e2e02e55b46637c9.4ed58869966c4c1f
     18a5e4dcde016b00.156ed084dac61aa2.e0a6b75bd2169799.9494149f667bcced
@@ -5932,13 +5932,13 @@
     f02cdf03077754c5.817b34802b4c6998.4b222399fdfff456.79b9b85d2f676fd7
     cfb7c7bc615c094a
   after
-    e7d25073f573b32d.70940120dbb390ae.e2e02e55b46637c9.4ed58869966c4c1f
+    e7d25073f573b32d.70940120dbb390ae.e2e02e55b46637c9.9494149f667bcced
     18a5e4dcde016b00.156ed084dac61aa2.e0a6b75bd2169799.9494149f667bcced
-    0000000000000000.0000000000000000.4ed58869966c4c1f.9494149f667bcced
+    d22aebbe30546279.fcf7e3d66bcba361.ba7835238c4597b9.2e1c25ccbbf56ff1
     f02cdf03077754c5.817b34802b4c6998.4b222399fdfff456.79b9b85d2f676fd7
     cfb7c7bc615c094a
 
-VPUNPCKLQDQ_128(reg)
+VMOVSD_XMM_M64(reg)
   before
     8d615057ea6078f7.50783e998077fc0f.ff46c1f0b5d8a6f2.6e70feaa424f699b
     0f054e996900f989.cddb836bb75e1784.d4a38590a5f8971d.012e40407641b4b5
@@ -5946,12 +5946,12 @@
     d0669ac2b242210f.8d10b073cc17969e.ef47a3152a298390.e329eeaf1d3cb617
     ebfe515fc85de7b7
   after
-    0000000000000000.0000000000000000.df286748b6e18fd0.012e40407641b4b5
+    8d615057ea6078f7.50783e998077fc0f.ff46c1f0b5d8a6f2.6e70feaa424f699b
     0f054e996900f989.cddb836bb75e1784.d4a38590a5f8971d.012e40407641b4b5
     b2edbeee77c7c8ad.421e2b65c73a6150.5bdf7cce983a77c2.df286748b6e18fd0
     d0669ac2b242210f.8d10b073cc17969e.ef47a3152a298390.e329eeaf1d3cb617
     ebfe515fc85de7b7
-VPUNPCKLQDQ_128(mem)
+VMOVSD_XMM_M64(mem)
   before
     d1730d46d250dcdc.c6bce081b6fb3f5a.887c9081e3ff719a.ee25f4d1f552f731
     73549c4f572252b1.f03b8b971e805f3b.112d467b2701af72.b3c66d6e98400f51
@@ -5959,13 +5959,13 @@
     578928774591b01d.50e301788c1c946d.399225e4a97c4360.fe80c5fbd09b1ac1
     3d319bc49e218468
   after
-    d1730d46d250dcdc.c6bce081b6fb3f5a.887c9081e3ff719a.ee25f4d1f552f731
+    d1730d46d250dcdc.c6bce081b6fb3f5a.887c9081e3ff719a.b3c66d6e98400f51
     73549c4f572252b1.f03b8b971e805f3b.112d467b2701af72.b3c66d6e98400f51
-    0000000000000000.0000000000000000.ee25f4d1f552f731.b3c66d6e98400f51
+    ab6d7c6674de0463.aa2f9770875dbd5d.02f14f4eb5260c4f.99750958ad7f069d
     578928774591b01d.50e301788c1c946d.399225e4a97c4360.fe80c5fbd09b1ac1
     3d319bc49e218468
 
-VPUNPCKLQDQ_128(reg)
+VMOVSD_XMM_M64(reg)
   before
     b1d6891db29d833f.51761d6ee545100c.3ea4c31cc94c2217.90dd462b1d0e11cf
     b7b98a74a99951f2.76fed5377009e05b.d0bfdbc6db76a006.e59e2d0d30e832c9
@@ -5973,12 +5973,12 @@
     ea6bb6c8ad464d99.b21283efbaeac4cc.502dfbe0eded6365.f4b13d579ca65c0c
     689b5f952fa2ddad
   after
-    0000000000000000.0000000000000000.12a05678fb176279.e59e2d0d30e832c9
+    b1d6891db29d833f.51761d6ee545100c.3ea4c31cc94c2217.90dd462b1d0e11cf
     b7b98a74a99951f2.76fed5377009e05b.d0bfdbc6db76a006.e59e2d0d30e832c9
     ac279a331ea32b2c.a3eecebe03e6de37.627e44e45e284de7.12a05678fb176279
     ea6bb6c8ad464d99.b21283efbaeac4cc.502dfbe0eded6365.f4b13d579ca65c0c
     689b5f952fa2ddad
-VPUNPCKLQDQ_128(mem)
+VMOVSD_XMM_M64(mem)
   before
     482c3720cf16a189.cfd3d89ef40ff3e7.803670b7b0204f45.f61afa282451202d
     712e41e3990e63cc.b5aafe218c8958bf.ea26120001953acf.b0903f27a0e1bdeb
@@ -5986,13 +5986,13 @@
     0eb7dbc218bbd435.f8d343de25c151c4.fd9961c9266924c4.d04588fad5b38ef7
     ed1e84a6c60d399d
   after
-    482c3720cf16a189.cfd3d89ef40ff3e7.803670b7b0204f45.f61afa282451202d
+    482c3720cf16a189.cfd3d89ef40ff3e7.803670b7b0204f45.b0903f27a0e1bdeb
     712e41e3990e63cc.b5aafe218c8958bf.ea26120001953acf.b0903f27a0e1bdeb
-    0000000000000000.0000000000000000.f61afa282451202d.b0903f27a0e1bdeb
+    bf6ef9cba896e0a1.f93b23bd1340b9d0.caade3b8ca534395.dadac549fc28794a
     0eb7dbc218bbd435.f8d343de25c151c4.fd9961c9266924c4.d04588fad5b38ef7
     ed1e84a6c60d399d
 
-VPINSRD_128(reg)
+VMOVSS_M64_XMM(reg)
   before
     8fafb6b96cc2b6e9.3ad764b50689fbb3.0cbe5bf05d975d48.5fb4072132e09a88
     114419a0625e4087.20980f918e0a1048.9248665f574e1a07.cccb52ab09c6600c
@@ -6000,12 +6000,12 @@
     24ae6295b07d6e66.8531bbb0d95af766.65684505039191e8.371cc3058a0dcf06
     edefe2ad6b86f0d4
   after
-    0000000000000000.0000000000000000.9248665f574e1a07.cccb52ab6b86f0d4
+    8fafb6b96cc2b6e9.3ad764b50689fbb3.0cbe5bf05d975d48.5fb4072132e09a88
     114419a0625e4087.20980f918e0a1048.9248665f574e1a07.cccb52ab09c6600c
     ce2ba9c5456e1422.9ac85840cb4cd020.e6bd6098b073c1ae.20aabc53c826337d
     24ae6295b07d6e66.8531bbb0d95af766.65684505039191e8.371cc3058a0dcf06
     edefe2ad6b86f0d4
-VPINSRD_128(mem)
+VMOVSS_M64_XMM(mem)
   before
     1eed9538899d5113.6e1b417d3f188a01.bda0b5cbd5414147.69971114ed35c462
     a6e45890fd5fafee.07bc40e88fcaa39d.1ee1c17fda0c69ee.4f94c12f0ae997c8
@@ -6014,12 +6014,12 @@
     e55dfb09a5e82636
   after
     1eed9538899d5113.6e1b417d3f188a01.bda0b5cbd5414147.69971114ed35c462
-    a6e45890fd5fafee.07bc40e88fcaa39d.1ee1c17fda0c69ee.4f94c12f0ae997c8
-    0000000000000000.0000000000000000.ed35c462da0c69ee.4f94c12f0ae997c8
+    0000000000000000.0000000000000000.0000000000000000.00000000ed35c462
+    619ea8a2e5d7c692.4dde5d423c1ff6e6.84bf5bb705c72c88.73ac4fc4f43b45c5
     2be8005b5d11522a.9acd93f6e1a4bf89.cb08ff5f717f4541.312bb93e4ab70c06
     e55dfb09a5e82636
 
-VPINSRD_128(reg)
+VMOVSS_M64_XMM(reg)
   before
     eb8d0f91a45ad002.e08ddca5801a0ee3.4cd4df721ae43932.ce8629633b3f7244
     9f09f342e0994516.5c5bb86e6afdb7e9.bd413b22846ba18c.6b0656af7e136dbe
@@ -6027,12 +6027,12 @@
     811018cf85b083c4.189e612a0582bf8a.507918c95a802b06.e03ca6d0e129bfc5
     708ac17c38828eab
   after
-    0000000000000000.0000000000000000.bd413b22846ba18c.6b0656af38828eab
+    eb8d0f91a45ad002.e08ddca5801a0ee3.4cd4df721ae43932.ce8629633b3f7244
     9f09f342e0994516.5c5bb86e6afdb7e9.bd413b22846ba18c.6b0656af7e136dbe
     5d1ba288f732c21d.7b1d11a138c60867.4b5ea570bbc63344.7d5501305708f3da
     811018cf85b083c4.189e612a0582bf8a.507918c95a802b06.e03ca6d0e129bfc5
     708ac17c38828eab
-VPINSRD_128(mem)
+VMOVSS_M64_XMM(mem)
   before
     080acf217a201cb7.6634518425a0c4b6.11ab26f5ee3c967d.2adc9099fd25c47d
     86874baac00e2515.6ad34a11748cc0a0.4110dbee0e004a6d.33d40a4d41423b55
@@ -6041,12 +6041,12 @@
     073056f2e7dc2ae1
   after
     080acf217a201cb7.6634518425a0c4b6.11ab26f5ee3c967d.2adc9099fd25c47d
-    86874baac00e2515.6ad34a11748cc0a0.4110dbee0e004a6d.33d40a4d41423b55
-    0000000000000000.0000000000000000.fd25c47d0e004a6d.33d40a4d41423b55
+    0000000000000000.0000000000000000.0000000000000000.00000000fd25c47d
+    c5ceb102285865f3.e839fee40d03b52d.8399fd0182db9686.c8ac814fc161cc3b
     a0ac7d17ce0b977b.3cb169688c8edc0b.b512061a65d838f3.45b2f10d1a11b2db
     073056f2e7dc2ae1
 
-VPINSRD_128(reg)
+VMOVSS_M64_XMM(reg)
   before
     6874ac69c54e70f8.f5eb2bd4cc3278d9.c28987088ebb74e3.b2467426d403e9e0
     c5c8efe04ff3c0cc.9e57382541d9c33a.d50b5432af15b764.5502c20fea69687b
@@ -6054,12 +6054,12 @@
     e3d32e7cd9086c5e.60ea5c33fad98ab4.1740edd1bb82310b.0143ef2d7d13bc65
     c25fc5383270090d
   after
-    0000000000000000.0000000000000000.d50b5432af15b764.5502c20f3270090d
+    6874ac69c54e70f8.f5eb2bd4cc3278d9.c28987088ebb74e3.b2467426d403e9e0
     c5c8efe04ff3c0cc.9e57382541d9c33a.d50b5432af15b764.5502c20fea69687b
     7a791cc22258550b.79be1ff6470d35ca.d384cd518929e238.7c136cc3c41570ee
     e3d32e7cd9086c5e.60ea5c33fad98ab4.1740edd1bb82310b.0143ef2d7d13bc65
     c25fc5383270090d
-VPINSRD_128(mem)
+VMOVSS_M64_XMM(mem)
   before
     99326cd2fe371212.5c212178108f4174.31a96bc9774a7e25.fc8bb01edfacdf8a
     648a5fe6fd75949f.42b1f223647a10f7.c6c5c9a2d96acd49.e0b012a591332961
@@ -6068,12 +6068,12 @@
     163acdc6177206ab
   after
     99326cd2fe371212.5c212178108f4174.31a96bc9774a7e25.fc8bb01edfacdf8a
-    648a5fe6fd75949f.42b1f223647a10f7.c6c5c9a2d96acd49.e0b012a591332961
-    0000000000000000.0000000000000000.dfacdf8ad96acd49.e0b012a591332961
+    0000000000000000.0000000000000000.0000000000000000.00000000dfacdf8a
+    fd311b604c354ce1.efcd9ce971541493.fd0bf0ac3d48324b.1dfd10d06ea44b3b
     41f51a2c0783f303.c0c21a37d2a98af6.b0475ed1beed6a57.11bca50c118a81c5
     163acdc6177206ab
 
-VMOVD_XMM_to_MEM32(reg)
+VMOVSD_M64_XMM(reg)
   before
     8ac384691be71798.0da0da36496b4832.11dc6a772306adc9.bd458eff7967309b
     c7a3c660b975f038.3bffd66b2efa059a.3d67881701f6bbbb.fed0fd2189c14140
@@ -6086,7 +6086,7 @@
     2b2590198ea9cc39.a8de8ab5d33be766.a2af6e820706ee76.50b525220b085975
     1097ddff360ee844.31087302533ba9c3.9b001a24d2c183a6.8fc184f01a463464
     98be9576d28a8e3a
-VMOVD_XMM_to_MEM32(mem)
+VMOVSD_M64_XMM(mem)
   before
     4579d4a150dd2222.d343a97e4c308008.b04b0b3ccb0509dd.84a58769feb3b5f8
     73bdbe5bb04dad49.d176f0026d9cd02f.0271d05156a5c1df.b9ebb1bd2568c118
@@ -6094,13 +6094,13 @@
     c2157f3083b29702.e9a1e0ca3d7f8658.8f99ceb917982b4c.768a2d42da4d5770
     b77b774b9f955801
   after
-    4579d4a150dd2222.d343a97e4c308008.b04b0b3ccb0509dd.84a58769e66de3b2
-    73bdbe5bb04dad49.d176f0026d9cd02f.0271d05156a5c1df.b9ebb1bd2568c118
+    4579d4a150dd2222.d343a97e4c308008.b04b0b3ccb0509dd.84a58769feb3b5f8
+    0000000000000000.0000000000000000.0000000000000000.84a58769feb3b5f8
     fe58cd910de5eada.647caef734dd1366.03473d2c11278ef5.961e958ce66de3b2
     c2157f3083b29702.e9a1e0ca3d7f8658.8f99ceb917982b4c.768a2d42da4d5770
     b77b774b9f955801
 
-VMOVD_XMM_to_MEM32(reg)
+VMOVSD_M64_XMM(reg)
   before
     b43d6e14d1d0240f.9bbf50222fbf6eed.bc3181e5250f65b2.823300e485035510
     c81b0e070b8af447.6523ba552d182cc6.39788db58718eb1f.b8e14e997675c86d
@@ -6113,7 +6113,7 @@
     51635492ea4f0754.fc0d3ab397ca8cba.bcc101a70026564c.0d6e34c407f9408e
     aa5f3b2009ac97e3.3c494d2a8cdf4bf4.a259d7262cc6e0e5.5da82e51539b789f
     8459b82c76682dcd
-VMOVD_XMM_to_MEM32(mem)
+VMOVSD_M64_XMM(mem)
   before
     5e4e4f428d6b1b44.2e5cbe1c042de1a0.01a26ea5266625a1.458c0d9da583c595
     c7536e7db4b0fe30.3ba6dcf4785c2136.27e619108168d6ed.02a69e7a0aea4309
@@ -6121,13 +6121,13 @@
     b6bd34179f329114.5c50d2e53af9719f.065bfe66ec13ab10.3abfc21302e3f4eb
     6d554da7cd8da1b2
   after
-    5e4e4f428d6b1b44.2e5cbe1c042de1a0.01a26ea5266625a1.458c0d9df48594ec
-    c7536e7db4b0fe30.3ba6dcf4785c2136.27e619108168d6ed.02a69e7a0aea4309
+    5e4e4f428d6b1b44.2e5cbe1c042de1a0.01a26ea5266625a1.458c0d9da583c595
+    0000000000000000.0000000000000000.0000000000000000.458c0d9da583c595
     9b3491cb064491bc.2b888e1301c79251.8adfcb57baf31903.35f38628f48594ec
     b6bd34179f329114.5c50d2e53af9719f.065bfe66ec13ab10.3abfc21302e3f4eb
     6d554da7cd8da1b2
 
-VMOVD_XMM_to_MEM32(reg)
+VMOVSD_M64_XMM(reg)
   before
     2a022251f311d5ec.f4b9d34d9c86b965.2848a2d7bf7ffaca.7724302a33d2483f
     cc13407b10facd46.30f5eb58184dc7db.edbdfc532de4697e.b806dc8dad3eacbd
@@ -6140,7 +6140,7 @@
     b1d2a092bfd4c56b.483ef726309275a1.05fbdcc61fb4f968.a7cf7f7c736392b5
     348b3f039d2cf808.175e73a3006180e4.cd4e3c9d327ce734.1f4a93e4a34bb754
     fc4296b05904d7c6
-VMOVD_XMM_to_MEM32(mem)
+VMOVSD_M64_XMM(mem)
   before
     198403cbb09aad37.b18c1a38458da3c8.7921dbb9a2c7a3d0.a2021a4202c76f8d
     54dd5623c418f6d1.84202c9f53840259.4955ac5535cf9c90.de6371232921cc20
@@ -6148,13 +6148,13 @@
     90fe9f3796fcd137.9b2fe6b01361cb98.a73c76d097f6fa3e.fe5a7a45f234f9a2
     9a8a255fcb043fea
   after
-    198403cbb09aad37.b18c1a38458da3c8.7921dbb9a2c7a3d0.a2021a4245173c98
-    54dd5623c418f6d1.84202c9f53840259.4955ac5535cf9c90.de6371232921cc20
+    198403cbb09aad37.b18c1a38458da3c8.7921dbb9a2c7a3d0.a2021a4202c76f8d
+    0000000000000000.0000000000000000.0000000000000000.a2021a4202c76f8d
     87170ca3b28a6ec3.089271a3649c5164.65c56163d2852451.debc3daa45173c98
     90fe9f3796fcd137.9b2fe6b01361cb98.a73c76d097f6fa3e.fe5a7a45f234f9a2
     9a8a255fcb043fea
 
-VPANDN_128(reg)
+VINSERTPS_0x39_128(reg)
   before
     0f9638646d144b1b.4a608dcb8a7bda5a.98438632fd60ad9f.ed876786a02dd984
     b7cab1c073ef5ae2.9007514bad124657.5a1a4c95be233325.1172b17308377c4e
@@ -6162,12 +6162,12 @@
     13dfc32e1d376be0.34584cc0eab93691.a24040ae322b1961.67583c9f67f00021
     51ea76b695b95981
   after
-    0000000000000000.0000000000000000.a040002a00080840.66080c8c67c00021
+    0000000000000000.0000000000000000.00000000be233325.1172b17300000000
     b7cab1c073ef5ae2.9007514bad124657.5a1a4c95be233325.1172b17308377c4e
     ef748ce07a22a5ea.3fc167a419cdd15b.3f003745f13998d7.f1c9ce82ec1ea0c9
     13dfc32e1d376be0.34584cc0eab93691.a24040ae322b1961.67583c9f67f00021
     51ea76b695b95981
-VPANDN_128(mem)
+VINSERTPS_0x39_128(mem)
   before
     894df9b393846816.7f565417f8bce670.49997b8d3de13226.de28643c1e87f26e
     ed4b3f827d5de60c.8f263a08a83d5345.5c5070f52d528146.5102a05c50d85fab
@@ -6177,11 +6177,11 @@
   after
     894df9b393846816.7f565417f8bce670.49997b8d3de13226.de28643c1e87f26e
     ed4b3f827d5de60c.8f263a08a83d5345.5c5070f52d528146.5102a05c50d85fab
-    0000000000000000.0000000000000000.01890b0810a13220.8e2844200e07a044
+    0000000000000000.0000000000000000.5c5070f500000000.000000001e87f26e
     a44b0946826a26c8.0b01f5aef560f270.e74f9c4b563c07d5.48bf4dfef88be364
     843ab759a5047337
 
-VPANDN_128(reg)
+VINSERTPS_0x39_128(reg)
   before
     66d827f409a386eb.b0e58414d6b65fe8.2fa4c23ccb1a9c1e.192fcc10c6cdb69d
     4be49b3dc0f35929.584bb3638541f817.67cfd581e50028c2.b7b6b12144d7a89f
@@ -6189,12 +6189,12 @@
     897a7d8695d72ffa.e7aa1f3966413e59.82f1bae0567ed59a.aae490d7d9844303
     b7238054283f65bc
   after
-    0000000000000000.0000000000000000.80302a60127ed518.084000d699004300
+    0000000000000000.0000000000000000.00000000e50028c2.b7b6b12100000000
     4be49b3dc0f35929.584bb3638541f817.67cfd581e50028c2.b7b6b12144d7a89f
     8dac0e9f658028a0.76481321ac16af84.0ed029e9df9dd107.9eaec96aec659807
     897a7d8695d72ffa.e7aa1f3966413e59.82f1bae0567ed59a.aae490d7d9844303
     b7238054283f65bc
-VPANDN_128(mem)
+VINSERTPS_0x39_128(mem)
   before
     a23917cdf4a2ba61.9c9be25feb83a9e4.873b5396d0ce62c2.1e7f85d2e52d6e26
     45f1d02f59b9fd1c.205b3b940310d309.32c82b2605cad6ed.3ec6842b2939d858
@@ -6204,11 +6204,11 @@
   after
     a23917cdf4a2ba61.9c9be25feb83a9e4.873b5396d0ce62c2.1e7f85d2e52d6e26
     45f1d02f59b9fd1c.205b3b940310d309.32c82b2605cad6ed.3ec6842b2939d858
-    0000000000000000.0000000000000000.85335090d0042002.003901d0c4042626
+    0000000000000000.0000000000000000.32c82b2600000000.00000000e52d6e26
     2675985a60364086.eee7b6c6ebff26b6.1905b98c423da133.79ae13c33e91135d
     4de89ad947f65b87
 
-VPANDN_128(reg)
+VINSERTPS_0x39_128(reg)
   before
     140a470774e76408.1cdaa0fc3ab2b88c.f04bd09af378c796.0d4e653a82cc70a7
     2c6115b762ef6b8a.3b11ba351d130e5a.d47fce7c2d030862.7cc2a7cbfdf97f8b
@@ -6216,12 +6216,12 @@
     bbde0452f0756342.6424142171b246f8.b3826317aa7d596c.3b5fd641155f5056
     431fbb00ebaf8a95
   after
-    0000000000000000.0000000000000000.23802103827c510c.031d500000060054
+    0000000000000000.0000000000000000.000000002d030862.7cc2a7cb00000000
     2c6115b762ef6b8a.3b11ba351d130e5a.d47fce7c2d030862.7cc2a7cbfdf97f8b
     f0390057ad9aacb9.5fe562f32664ff1a.f6cdabd7362b25c5.422ff829cfd18b0d
     bbde0452f0756342.6424142171b246f8.b3826317aa7d596c.3b5fd641155f5056
     431fbb00ebaf8a95
-VPANDN_128(mem)
+VINSERTPS_0x39_128(mem)
   before
     363a26516ccef4f4.eb9c1d14c70accd1.25984cab1808a121.65e9f2a72383e102
     f07e901fb4c74b9f.dabf4809cfe82211.800f877d3972cac1.695054f63fcbf934
@@ -6231,11 +6231,11 @@
   after
     363a26516ccef4f4.eb9c1d14c70accd1.25984cab1808a121.65e9f2a72383e102
     f07e901fb4c74b9f.dabf4809cfe82211.800f877d3972cac1.695054f63fcbf934
-    0000000000000000.0000000000000000.2590488200082120.04a9a20100000002
+    0000000000000000.0000000000000000.800f877d00000000.000000002383e102
     28ad55e70c78af8c.6962c03de1a88756.7130f3aa58b47815.d64a8379cf50c81b
     f87547867ba4f728
 
-VPSLLDQ_0x05_128(reg)
+VPUNPCKLDQ_128(reg)
   before
     dccfcf013969a680.5f30a8b852483426.c07b075322a40eb3.bf741cdd8ea37520
     dea41554a52c10d0.cd0bebb7d12296bb.48294e4c04167472.15ea3807add73152
@@ -6243,12 +6243,12 @@
     abeed036fada0807.bdf932f0e426df8d.5673d1991992c7c4.4e9a35f4173bd6da
     e76e108f9b843688
   after
-    0000000000000000.0000000000000000.92c7c44e9a35f417.3bd6da0000000000
+    0000000000000000.0000000000000000.515dc11615ea3807.d15b68d7add73152
     dea41554a52c10d0.cd0bebb7d12296bb.48294e4c04167472.15ea3807add73152
     5a3f17ed5d7872c3.4e0a9ad0a213907a.5bb89395228cf23e.515dc116d15b68d7
     abeed036fada0807.bdf932f0e426df8d.5673d1991992c7c4.4e9a35f4173bd6da
     e76e108f9b843688
-VPSLLDQ_0x05_128(mem)
+VPUNPCKLDQ_128(mem)
   before
     faa3ccd27841440d.2ffb3c9d1add0d45.f8a32e01b0673f21.95a804c384b22db0
     6205e7a9ca7fbe94.41b3588d580dbf2c.d9d50af025e36c61.75a12881007a61ad
@@ -6258,11 +6258,11 @@
   after
     faa3ccd27841440d.2ffb3c9d1add0d45.f8a32e01b0673f21.95a804c384b22db0
     6205e7a9ca7fbe94.41b3588d580dbf2c.d9d50af025e36c61.75a12881007a61ad
-    fa62db00ae485e49.3d621e7251f65865.3e5c42aa5ca5227a.50ab3a3e28769e67
+    0000000000000000.0000000000000000.95a804c375a12881.84b22db0007a61ad
     a08426c43fabe15a.7e548cb8a125149f.0102521a73ba1c98.831235669830228c
     6a221465ed3627c5
 
-VPSLLDQ_0x05_128(reg)
+VPUNPCKLDQ_128(reg)
   before
     6127d6a7c314eac1.2e3944df9ab103f1.62d59dcbe2263184.0094b72b862c17e6
     c46c7499b555a62a.814baf3edb687f3a.43314e17b383e9c1.15ddeccbb00ace90
@@ -6270,12 +6270,12 @@
     3eea39395f30fcf5.e7b961797c167995.70a87c0b6f861cf1.f5c8b665bb3363ab
     78024437d397b974
   after
-    0000000000000000.0000000000000000.861cf1f5c8b665bb.3363ab0000000000
+    0000000000000000.0000000000000000.1eab6de515ddeccb.0e5dfec4b00ace90
     c46c7499b555a62a.814baf3edb687f3a.43314e17b383e9c1.15ddeccbb00ace90
     ef3feca5608598ac.7687e5ce1cdb1362.7fb39909adca7901.1eab6de50e5dfec4
     3eea39395f30fcf5.e7b961797c167995.70a87c0b6f861cf1.f5c8b665bb3363ab
     78024437d397b974
-VPSLLDQ_0x05_128(mem)
+VPUNPCKLDQ_128(mem)
   before
     812392487395bc49.0dba57bf4ee30eae.b2ad9f2d14266dfe.745df28b9244103c
     edf81c82b63a2757.b8fb42a5ca290986.b12e1bd50216acca.e51cf7f3b58f8f90
@@ -6285,11 +6285,11 @@
   after
     812392487395bc49.0dba57bf4ee30eae.b2ad9f2d14266dfe.745df28b9244103c
     edf81c82b63a2757.b8fb42a5ca290986.b12e1bd50216acca.e51cf7f3b58f8f90
-    984d5ed2b991b7c9.9bf9f7566e8f2a27.c109525d62f3f224.213187b171f3d596
+    0000000000000000.0000000000000000.745df28be51cf7f3.9244103cb58f8f90
     5fedd42598a727cc.12ff703dd79fad3d.be0bbfb14fc8fb39.82ea9f3064fd20fc
     66913adc2a38aa6e
 
-VPSLLDQ_0x05_128(reg)
+VPUNPCKLDQ_128(reg)
   before
     277454215e30b098.1ca6fb656d87358b.795babc8a0e7ce75.85fedebde6a18335
     22dde96b9c726d25.ac424e80573d9b33.2b57a36266f3c87b.f0af2b6d428a4543
@@ -6297,12 +6297,12 @@
     377475bea901001a.b55668f4d45c61ed.e562bb7457843a9f.257a4069babf6947
     a72d008e0f214495
   after
-    0000000000000000.0000000000000000.843a9f257a4069ba.bf69470000000000
+    0000000000000000.0000000000000000.dce923adf0af2b6d.7f90fe90428a4543
     22dde96b9c726d25.ac424e80573d9b33.2b57a36266f3c87b.f0af2b6d428a4543
     b319f62681891fc1.eb8e49616fd615f0.86405578c44ed8fa.dce923ad7f90fe90
     377475bea901001a.b55668f4d45c61ed.e562bb7457843a9f.257a4069babf6947
     a72d008e0f214495
-VPSLLDQ_0x05_128(mem)
+VPUNPCKLDQ_128(mem)
   before
     3ecdde0699c449a6.083a64a0af674dda.e66628259fde3957.a409d3c3ba222916
     c62757bf74b335a5.83b6bf362f4641ad.5a8a03e0ee655a59.1e8098d18ab2e20a
@@ -6312,11 +6312,11 @@
   after
     3ecdde0699c449a6.083a64a0af674dda.e66628259fde3957.a409d3c3ba222916
     c62757bf74b335a5.83b6bf362f4641ad.5a8a03e0ee655a59.1e8098d18ab2e20a
-    1b07e5a4bdfbc3bf.043680eec62a1940.ed8e7711ddff8020.b115070b62c3a128
+    0000000000000000.0000000000000000.a409d3c31e8098d1.ba2229168ab2e20a
     193906a08fa7b01f.e704a4320fa0113f.7b3d00a487b866d8.b8121adcdfdea11b
     8ec4cfaf9c912090
 
-VPSRLDQ_0x05_128(reg)
+VPACKSSDW_128(reg)
   before
     917721f235675832.9c8835a107c3b8f2.886d2870a7336555.e0641886099ac9ac
     1b770c1047ed85af.80c2ee92405c9764.43bd0713296f502f.f8cf3da17eb365c9
@@ -6324,12 +6324,12 @@
     388d9e8d4536b2e4.db23eff56732c8d3.7741c7385d14dedd.b1a19a36b2b8378c
     0aa0cc88aabce58b
   after
-    0000000000000000.0000000000000000.00000000007741c7.385d14deddb1a19a
+    0000000000000000.0000000000000000.7fff7fff80008000.7fff7fff80007fff
     1b770c1047ed85af.80c2ee92405c9764.43bd0713296f502f.f8cf3da17eb365c9
     8a108c756eaee5b0.a1b1ae5f577d08a0.74403e8732e10f78.9f4ae9e3020ef55a
     388d9e8d4536b2e4.db23eff56732c8d3.7741c7385d14dedd.b1a19a36b2b8378c
     0aa0cc88aabce58b
-VPSRLDQ_0x05_128(mem)
+VPACKSSDW_128(mem)
   before
     8612f9c40426bb82.833c3dc4681229f4.0ae22f3e8d889328.a80ea0924795f80a
     00c49fd6df03779d.c567658674cd858f.09bbe927e48a25cc.63f1c4018bef9baa
@@ -6339,11 +6339,11 @@
   after
     8612f9c40426bb82.833c3dc4681229f4.0ae22f3e8d889328.a80ea0924795f80a
     00c49fd6df03779d.c567658674cd858f.09bbe927e48a25cc.63f1c4018bef9baa
-    568339aa555ed30a.5b5b124004f3045f.b679999d894439eb.04372ff1c6ae0169
+    0000000000000000.0000000000000000.7fff800080007fff.7fff80007fff8000
     6319432c82438cf3.a264405cb511e011.eceabc8a97c38cb0.e72cddcf935e66f5
     681ccb058e8c08f8
 
-VPSRLDQ_0x05_128(reg)
+VPACKSSDW_128(reg)
   before
     e353f40154c3211e.0352394883bf5d84.f4ceec4822b25550.87d8cddc2a12da48
     b31c542e8190ee14.11fc98ea73dd03ea.aee4116ee862a1c9.6211487e5f3ddede
@@ -6351,12 +6351,12 @@
     c798a9ca7d199220.ebcf7e719230bee4.cb48b61ded21a917.4d8f6c611e59fbb6
     136c0e7bdf618c50
   after
-    0000000000000000.0000000000000000.0000000000cb48b6.1ded21a9174d8f6c
+    0000000000000000.0000000000000000.800080007fff7fff.800080007fff7fff
     b31c542e8190ee14.11fc98ea73dd03ea.aee4116ee862a1c9.6211487e5f3ddede
     36c5e7f7b07eaa86.6be2dbff6faa3a51.2df4ab3ca2aefe27.5b5fa95b5251559f
     c798a9ca7d199220.ebcf7e719230bee4.cb48b61ded21a917.4d8f6c611e59fbb6
     136c0e7bdf618c50
-VPSRLDQ_0x05_128(mem)
+VPACKSSDW_128(mem)
   before
     8bc40a95b276c399.c1e2971285ede28c.6f90fd2ef87d4bd0.e52d2f7d6447de45
     8f61dc9cb2a35dbc.82efac3b6487d679.d2f1d420bf9d9c41.d7ef11c8a4add85c
@@ -6366,11 +6366,11 @@
   after
     8bc40a95b276c399.c1e2971285ede28c.6f90fd2ef87d4bd0.e52d2f7d6447de45
     8f61dc9cb2a35dbc.82efac3b6487d679.d2f1d420bf9d9c41.d7ef11c8a4add85c
-    fd11007afcf516e6.650ae4b1b472a991.efbe8035009b6e62.fdda586a48ded409
+    0000000000000000.0000000000000000.7fff800080007fff.8000800080008000
     af9ef31cab76a943.c5813be1143b9981.a3c37c58d9837c5f.b33a00cfec660ef7
     555a05642dd2c1d3
 
-VPSRLDQ_0x05_128(reg)
+VPACKSSDW_128(reg)
   before
     3f876493a7ad2b49.82d52f6fdc35d3fe.009eae351d6ddff4.cbcc447566618366
     cd0e18c9f5848504.5382325daa3b5044.70af371a6e94ba97.41a45478c2423fa1
@@ -6378,12 +6378,12 @@
     45556ffc7e5200fb.5a6d7bbf8f51321f.63d8814952f31a1c.8bf43ee0583bc664
     16040f1eca6a0845
   after
-    0000000000000000.0000000000000000.000000000063d881.4952f31a1c8bf43e
+    0000000000000000.0000000000000000.7fff7fff80007fff.7fff7fff7fff8000
     cd0e18c9f5848504.5382325daa3b5044.70af371a6e94ba97.41a45478c2423fa1
     5b391d73b3e10eb1.fc7177d43296dc40.73fed4fda03d6415.e318294d09316c3c
     45556ffc7e5200fb.5a6d7bbf8f51321f.63d8814952f31a1c.8bf43ee0583bc664
     16040f1eca6a0845
-VPSRLDQ_0x05_128(mem)
+VPACKSSDW_128(mem)
   before
     611418f17ccdef0a.e7ad0bcff263998f.4a44b80ade780f0c.9e8938691d421855
     46f0d5468a6d36e0.9d8feb5aaa9f1219.a6c0aca13a182f34.7e5cf7cb9fb7996e
@@ -6393,11 +6393,11 @@
   after
     611418f17ccdef0a.e7ad0bcff263998f.4a44b80ade780f0c.9e8938691d421855
     46f0d5468a6d36e0.9d8feb5aaa9f1219.a6c0aca13a182f34.7e5cf7cb9fb7996e
-    a263c30a0e589bf2.c3450d084292aa44.4baed270bf3d4dc3.609fb8da74dddb13
+    0000000000000000.0000000000000000.7fff800080007fff.80007fff7fff8000
     513b5d282799d86d.b51d6d4557c89bbd.15daa6638af126e4.a19c7a02374018f0
     9ba036af846d8cb0
 
-VPSUBUSB_128(reg)
+VPADDW_128(reg)
   before
     abf7e94df8ef74ff.2f421f8cef3da97d.cf61057d84ce222f.e110a566b74276c4
     2ded90492f520c8b.18458521824fcc4d.6c5ed31d662f7b47.891b4a65613bf98e
@@ -6405,12 +6405,12 @@
     f8e5a70653ed3c04.7c6e2e937bedf3df.a4b2fd40b6349118.e0e476089d578693
     4739f58468910925
   after
-    0000000000000000.0000000000000000.000000000000002f.0000005d00007300
+    0000000000000000.0000000000000000.56bda4acfea75cf7.73e45bb2062463fd
     2ded90492f520c8b.18458521824fcc4d.6c5ed31d662f7b47.891b4a65613bf98e
     7ece260dc42390fe.e8100cd5fcdbfb0a.ea5fd18f9878e1b0.eac9114da4e96a6f
     f8e5a70653ed3c04.7c6e2e937bedf3df.a4b2fd40b6349118.e0e476089d578693
     4739f58468910925
-VPSUBUSB_128(mem)
+VPADDW_128(mem)
   before
     fb940bac20a3af52.f88010a1793c4b4a.ae2d6948189270f9.f5a2539d5eefc728
     d8c1326ce19a3345.dae95b49d19dfa7c.5b1738def1d62d84.3b7acd102936bf8f
@@ -6420,11 +6420,11 @@
   after
     fb940bac20a3af52.f88010a1793c4b4a.ae2d6948189270f9.f5a2539d5eefc728
     d8c1326ce19a3345.dae95b49d19dfa7c.5b1738def1d62d84.3b7acd102936bf8f
-    0000000000000000.0000000000000000.00000096d9440000.00007a0000000067
+    0000000000000000.0000000000000000.0944a2260a689e7d.311c20ad882586b7
     7dc0a963f065c730.b4588c6f89c22752.95a08361c6675a9b.121522ed9e95e30c
     5c70f42e7fc5887b
 
-VPSUBUSB_128(reg)
+VPADDW_128(reg)
   before
     09e4db36f4b1def0.fd2aef737651507f.64f669c6219f1d4e.dbd6f725f9ce417f
     77bcd4719ae52216.159738cc7552a745.66921ada5bbda3e6.0c68ef7cd8025a84
@@ -6432,12 +6432,12 @@
     01cce930e7516427.82a5c00450bfb1e4.d0f8e4ea27ed4d99.9fcf5c8f09070ca0
     b93cc92492ee1f0f
   after
-    0000000000000000.0000000000000000.000000003400564d.00009300cf004e00
+    0000000000000000.0000000000000000.7d0cb3f1306698ab.1089d7cd5713ba5a
     77bcd4719ae52216.159738cc7552a745.66921ada5bbda3e6.0c68ef7cd8025a84
     0045da4b0deb909a.a3d1fe58097289ad.167a9917d4a9f4c5.0421e8517f115fd6
     01cce930e7516427.82a5c00450bfb1e4.d0f8e4ea27ed4d99.9fcf5c8f09070ca0
     b93cc92492ee1f0f
-VPSUBUSB_128(mem)
+VPADDW_128(mem)
   before
     2d35aafb37d4524e.d79bfd8dc7a2d96a.8edef7bd6345dc15.f059f6bdf118ea0b
     d9867b0013c5628a.dcff12cc476b2c0f.a34a206d600ec66e.d2e9ccfdcdb307ca
@@ -6447,11 +6447,11 @@
   after
     2d35aafb37d4524e.d79bfd8dc7a2d96a.8edef7bd6345dc15.f059f6bdf118ea0b
     d9867b0013c5628a.dcff12cc476b2c0f.a34a206d600ec66e.d2e9ccfdcdb307ca
-    0000000000000000.0000000000000000.1500000000000059.00900040009b00bf
+    0000000000000000.0000000000000000.3228182ac353a283.c342c3babecbf1d5
     4560de45e2f407a8.e7b531a498925b2d.57e73a67879fc742.4bc6b0752c6eafd9
     9baab785e8a6b382
 
-VPSUBUSB_128(reg)
+VPADDW_128(reg)
   before
     1dee71b2267e2727.be80675c0d4c15e1.a49f3215a109afff.aeb02287e87d5516
     2ddcdb6882854673.de29d152dfddf0c8.014f2419ba27d1e2.7fdbed50a3d191c0
@@ -6459,12 +6459,12 @@
     66e9ab1f064978b3.82413687eae0fc4a.0c2ccd8a8f896e8c.fb86188b96040749
     5f9f71d405fcb87f
   after
-    0000000000000000.0000000000000000.002300002b006356.0055d5000dcd8a77
+    0000000000000000.0000000000000000.5b5e28353ba0cf64.250e02fd7875cb2d
     2ddcdb6882854673.de29d152dfddf0c8.014f2419ba27d1e2.7fdbed50a3d191c0
     26c1ef1399444d13.8025981175b65486.5a0f041c8179fd82.a53315add4a4396d
     66e9ab1f064978b3.82413687eae0fc4a.0c2ccd8a8f896e8c.fb86188b96040749
     5f9f71d405fcb87f
-VPSUBUSB_128(mem)
+VPADDW_128(mem)
   before
     ab499c753e98083c.47a00af8661f02fe.be49299f5a69a53e.71f27bcf82e561ac
     bd51165a5ce5b2ac.2731090a555328a1.1208ec44e25c0a8f.e6ac0a57f619128e
@@ -6474,11 +6474,11 @@
   after
     ab499c753e98083c.47a00af8661f02fe.be49299f5a69a53e.71f27bcf82e561ac
     bd51165a5ce5b2ac.2731090a555328a1.1208ec44e25c0a8f.e6ac0a57f619128e
-    0000000000000000.0000000000000000.0000c30088000051.7500000074000000
+    0000000000000000.0000000000000000.d05115e33cc5afcd.589e862678fe743a
     9eabe4a2b9c00852.5015d38a4d02389d.6ddfd2eaa9b1fbf6.7030bce1ce369d45
     3d91d7ba6b37ef73
 
-VPSUBSB_128(reg)
+VPSRLW_0x05_128(reg)
   before
     8a17c387f940ee13.279530db30652ae1.52ff97cf8e96994e.2e8feec31f2bff64
     b30e7cb213dcd8d1.e40cba09fcec97d3.c1f4eafeceb78607.7526c9d91d40b0df
@@ -6486,12 +6486,12 @@
     087f47d75cfe5854.6ed57af105c9428f.5a2f2ec6bad1f340.093cb270206807ab
     0d52b6c85c932554
   after
-    0000000000000000.0000000000000000.80c5bc3814e693c7.6cea1780fdd8a934
+    0000000000000000.0000000000000000.02d1017605d6079a.004905930103003d
     b30e7cb213dcd8d1.e40cba09fcec97d3.c1f4eafeceb78607.7526c9d91d40b0df
     14c2ffa95597e758.b2deff17395e0b54.fa40c982a9f13b74.1f71e119bffbc993
     087f47d75cfe5854.6ed57af105c9428f.5a2f2ec6bad1f340.093cb270206807ab
     0d52b6c85c932554
-VPSUBSB_128(mem)
+VPSRLW_0x05_128(mem)
   before
     08816b0f9089e1b9.ed904fa8c39c6672.f2bea7837938f8b0.3b0c17389ee2eb18
     d6934c2fd755f508.1e42168827fe4e5e.1b6502b9b3b8e8e5.fa247f43f0b05fa8
@@ -6501,11 +6501,11 @@
   after
     08816b0f9089e1b9.ed904fa8c39c6672.f2bea7837938f8b0.3b0c17389ee2eb18
     d6934c2fd755f508.1e42168827fe4e5e.1b6502b9b3b8e8e5.fa247f43f0b05fa8
-    0000000000000000.0000000000000000.297f5b368080f035.bf18680b52ce7490
+    5355d5164e041d6a.f7e195e323af4cc3.c596077fcf54cf57.f4c462534cc88b9b
     5b9382af10a1170d.d4b9ca25543b9c4e.cc1c33c2e8186835.8336bdd54fb5aa9d
     04c68b339503f95c
 
-VPSUBSB_128(reg)
+VPSRLW_0x05_128(reg)
   before
     d3c2c8dab93fb481.cb19cfe63a389d1d.1016afbb552e79ab.0cc5016c1a1071a9
     4d75703757f416bb.7db339a7e7d66cc6.0944430fc3152185.615bed6a8249a4e0
@@ -6513,12 +6513,12 @@
     ad2ef2bf73fac319.1a5251773b54d490.9e4260a554edbc62.ba81101462ac7a44
     76a93f9713ee95cb
   after
-    0000000000000000.0000000000000000.6b02e36a80286580.7f7fdd56807f809c
+    0000000000000000.0000000000000000.04f2030502a705e3.05d40080031503d2
     4d75703757f416bb.7db339a7e7d66cc6.0944430fc3152185.615bed6a8249a4e0
     cc2a7fb40cae5db4.4e2d3bde33864033.1a8e7f8f397bcd89.a7ab73a93bcfbe05
     ad2ef2bf73fac319.1a5251773b54d490.9e4260a554edbc62.ba81101462ac7a44
     76a93f9713ee95cb
-VPSUBSB_128(mem)
+VPSRLW_0x05_128(mem)
   before
     b7ef7c1d68a0cbc4.4ccdc4c329638495.bdeff85f1b4ce50a.f3aae3bfaff628bd
     591e439480cfd85b.0553f12cc975ded5.12d0aa80ee7b2fcd.73130348e6224e45
@@ -6528,11 +6528,11 @@
   after
     b7ef7c1d68a0cbc4.4ccdc4c329638495.bdeff85f1b4ce50a.f3aae3bfaff628bd
     591e439480cfd85b.0553f12cc975ded5.12d0aa80ee7b2fcd.73130348e6224e45
-    0000000000000000.0000000000000000.55e1b280d32f4ac3.7f69207f372c267f
+    380310e8748677be.340c7565f0bd0b84.f7c1e5c8d0ed6d04.7cc9bcac96fe6aa8
     306b600362d16516.35444cdd39c6474f.478e2421deac5ddc.68170a575b15b78f
     954beab5d0f372a8
 
-VPSUBSB_128(reg)
+VPSRLW_0x05_128(reg)
   before
     5daf57329125d79f.1d20aed266bd5e92.644673fd411dd0e1.de03e37934c6b981
     1e904d3a3b362220.dbef76419b551e5c.1d60e532a34ce0e8.98eb9fbbed473d1e
@@ -6540,12 +6540,12 @@
     f6f9c59cb825586e.390a65b00abae18b.9d079a8ce76888ff.e448faadf9aab1f2
     2f54933584a61881
   after
-    0000000000000000.0000000000000000.7f594b7fbce458e9.b4a3a50ef47f7f2c
+    0000000000000000.0000000000000000.04e804d4073b0447.072207d507cd058f
     1e904d3a3b362220.dbef76419b551e5c.1d60e532a34ce0e8.98eb9fbbed473d1e
     323bc83969b28ed6.45a3343d1ea560a0.bcdc9ee8fce2b40d.5113d3d32539a7e0
     f6f9c59cb825586e.390a65b00abae18b.9d079a8ce76888ff.e448faadf9aab1f2
     2f54933584a61881
-VPSUBSB_128(mem)
+VPSRLW_0x05_128(mem)
   before
     0d031757e33797b9.c7193ecdc31cbc93.92ee84887b9f5d49.1b2cd688006c9768
     592304ff316bebc5.ffe6313a2723f5f2.2b1d0cb08e608f05.94994d4ae4791ef4
@@ -6555,11 +6555,11 @@
   after
     0d031757e33797b9.c7193ecdc31cbc93.92ee84887b9f5d49.1b2cd688006c9768
     592304ff316bebc5.ffe6313a2723f5f2.2b1d0cb08e608f05.94994d4ae4791ef4
-    0000000000000000.0000000000000000.7f2f7f28807f80bc.8080777fe40d7f8c
+    f17fd41a8b4ed0d1.fbab994e7fc54136.e2617c145f0a34ec.6399fb3c2f1c5950
     b0e205920ceb020b.17b67375688eda0c.92874da009a8082a.e477dccc7cdf8428
     7280ec656751da27
 
-VPSLLD_0x05_128(reg)
+VPSLLW_0x05_128(reg)
   before
     6b0028738dfb98fa.71191355d14e3d9d.b051b91b7d0afc20.165afd40a847c7ea
     2a438b62896bfa4d.12f0784df5833cb3.20c969ac5bc6e41d.4ca807e059f12c59
@@ -6567,12 +6567,12 @@
     6942b69376cb9821.60ae3c91cc95781e.f87ff43fdf2bf684.3ae119d05f9cdbf2
     aa6419f9edb49c74
   after
-    0000000000000000.0000000000000000.0ffe87e0e57ed080.5c233a00f39b7e40
+    0000000000000000.0000000000000000.0fe087e0e560d080.5c203a00f3807e40
     2a438b62896bfa4d.12f0784df5833cb3.20c969ac5bc6e41d.4ca807e059f12c59
     0a95119ef82c3bcb.6d33b2689597bc7a.c4697e949d4dcfb0.0e3ce76c38b4f4a2
     6942b69376cb9821.60ae3c91cc95781e.f87ff43fdf2bf684.3ae119d05f9cdbf2
     aa6419f9edb49c74
-VPSLLD_0x05_128(mem)
+VPSLLW_0x05_128(mem)
   before
     3c9164d1fb08f455.a19577ae9dd34dfa.c52d92b4b6892dca.1856c719beed9846
     ca347546a8a49fc1.10db4f590cd09503.797b30bd708097ab.8039f48fd61eefa2
@@ -6586,7 +6586,7 @@
     4e0bdab348e6dde8.ff7034132bdbd253.3fb73531c2a57abb.985649fb1efeafd6
     002869c987c58f06
 
-VPSLLD_0x05_128(reg)
+VPSLLW_0x05_128(reg)
   before
     2037d3e3992c1580.fbd8258475a4e8fb.375739fa15003ef3.083d947593eb6a41
     54ce82b4eebe7df0.154a27a1afda364a.16614622b54a2d72.91c32b4ea363ffac
@@ -6594,12 +6594,12 @@
     67c89f2bd793e260.01503d6fbcde8945.340d65e5898087c0.4efef373f11a07e1
     3b4c1a976771f202
   after
-    0000000000000000.0000000000000000.81acbca03010f800.dfde6e602340fc20
+    0000000000000000.0000000000000000.81a0bca03000f800.dfc06e602340fc20
     54ce82b4eebe7df0.154a27a1afda364a.16614622b54a2d72.91c32b4ea363ffac
     f83b72a825070201.782e5bf6139482fe.f6d956f7a846dc7d.b41577aa0e19f428
     67c89f2bd793e260.01503d6fbcde8945.340d65e5898087c0.4efef373f11a07e1
     3b4c1a976771f202
-VPSLLD_0x05_128(mem)
+VPSLLW_0x05_128(mem)
   before
     57c96a018d2b71b7.ffc205a9a3ef57b8.8a7c4af8c6c5074b.2d476f58f4826ae6
     7f425f9d7e53422e.1b75a18e22a69db6.f07dfc7e4e54b83c.3bd471bc86dac09b
@@ -6613,7 +6613,7 @@
     5e58241b331ec50c.4e36683eaf579052.c332442d479ca18c.091649088ebbb865
     816418c73b5bd1d2
 
-VPSLLD_0x05_128(reg)
+VPSLLW_0x05_128(reg)
   before
     8034cf287f804e7e.ce8cedd52fd9f0cc.1edb8be1f468b449.e87dd22eef6c5244
     60d46895f5b76b15.b9ec4a7166325bfc.e269d39a5e049995.5acef5dc85152697
@@ -6621,12 +6621,12 @@
     36af3548e98874b7.7061b100f6f0e45f.b571c4030f1099df.95b2efece91f25bd
     16dcbd26ef99c8e7
   after
-    0000000000000000.0000000000000000.ae388060e2133be0.b65dfd8023e4b7a0
+    0000000000000000.0000000000000000.ae208060e2003be0.b640fd8023e0b7a0
     60d46895f5b76b15.b9ec4a7166325bfc.e269d39a5e049995.5acef5dc85152697
     7e8ee17c3a8b6445.fb45b8dbf436c3ca.f52d3dd788b87ce3.f5f12b2224a2d8b1
     36af3548e98874b7.7061b100f6f0e45f.b571c4030f1099df.95b2efece91f25bd
     16dcbd26ef99c8e7
-VPSLLD_0x05_128(mem)
+VPSLLW_0x05_128(mem)
   before
     543c12bc531b7f5c.e48260659f3bd81a.f30db3ca886c79ea.7c8164898e962c34
     2b9f689a30b10448.e4555f3ff72fcc18.62153927c5b64095.a8ab1ad7a1d8718f
@@ -6640,7 +6640,7 @@
     13990cdec74b6a33.4a27c6daff0b5397.7168c247b1e74efc.9b79b479f5beff05
     1ab591a46e7ac078
 
-VPSRLD_0x05_128(reg)
+VPUNPCKLQDQ_128(reg)
   before
     6d3a7346ec2123a1.ddc8521db966c38b.67be2674e70b5e6f.c94bbce198e40f11
     f15457cc0940642c.b02a895394c6db09.4784497ae17de894.7bba2bbe9be0f0f6
@@ -6648,12 +6648,12 @@
     f777113096137016.e0b3bf5976823729.bdccc97e7ce46d6f.626c56ef630404e3
     4d47091a6043af42
   after
-    0000000000000000.0000000000000000.05ee664b03e7236b.031362b703182027
+    0000000000000000.0000000000000000.65818acad5e7aed8.7bba2bbe9be0f0f6
     f15457cc0940642c.b02a895394c6db09.4784497ae17de894.7bba2bbe9be0f0f6
     004f37a06462bfc4.67892f6e74766eda.45c52c5989ec2fb0.65818acad5e7aed8
     f777113096137016.e0b3bf5976823729.bdccc97e7ce46d6f.626c56ef630404e3
     4d47091a6043af42
-VPSRLD_0x05_128(mem)
+VPUNPCKLQDQ_128(mem)
   before
     04dd2137e9b06b22.3317e0e73ee0b2ce.f672b500b6f7f423.0be71e5456f1df7e
     62fc19331958f4ae.0e7ca130f554c297.84938d4f4fe05ef3.8a602746b2a0c089
@@ -6663,11 +6663,11 @@
   after
     04dd2137e9b06b22.3317e0e73ee0b2ce.f672b500b6f7f423.0be71e5456f1df7e
     62fc19331958f4ae.0e7ca130f554c297.84938d4f4fe05ef3.8a602746b2a0c089
-    426e6df80d460613.e5f24e7959fbdb1d.68e1c4325d4934c7.9885dec22c7c4e3b
+    0000000000000000.0000000000000000.0be71e5456f1df7e.8a602746b2a0c089
     82009a74e0865c7c.14c5e52d06623b0d.7c2ad595fd3f30c8.90a041336112c341
     cdfd4b05eced5b47
 
-VPSRLD_0x05_128(reg)
+VPUNPCKLQDQ_128(reg)
   before
     adeaf8a46a9954f8.fc7e1b92af25b316.f74161b997141c13.9e393c644acd0f25
     8bb2447d76a3e801.8eb46b3e952ec60d.eab2be87a99dbbdb.a8d9758b61008d07
@@ -6675,12 +6675,12 @@
     b002aa89aafed3c9.65776ef017af13c0.70a20c9cbd66215e.e8ff4e925b815511
     d51de64a76e91690
   after
-    0000000000000000.0000000000000000.0385106405eb310a.0747fa7402dc0aa8
+    0000000000000000.0000000000000000.78d7fdf75de2659d.a8d9758b61008d07
     8bb2447d76a3e801.8eb46b3e952ec60d.eab2be87a99dbbdb.a8d9758b61008d07
     c2a02cfaad96540d.126d0964aeae528c.4963f904d78a5310.78d7fdf75de2659d
     b002aa89aafed3c9.65776ef017af13c0.70a20c9cbd66215e.e8ff4e925b815511
     d51de64a76e91690
-VPSRLD_0x05_128(mem)
+VPUNPCKLQDQ_128(mem)
   before
     1cfd4109cb256745.af22bc940a67a3e0.649c17ceec40c5d5.bbb9f5bcf8be6172
     976ad9bd7541025d.1d4d5d89685efeff.e9a981ea486a24f6.86f5afce241d4ff8
@@ -6690,11 +6690,11 @@
   after
     1cfd4109cb256745.af22bc940a67a3e0.649c17ceec40c5d5.bbb9f5bcf8be6172
     976ad9bd7541025d.1d4d5d89685efeff.e9a981ea486a24f6.86f5afce241d4ff8
-    23322b519149a403.54ce8ad2616f20d2.d16a2730473beb4f.2da23640dc0f269c
+    0000000000000000.0000000000000000.bbb9f5bcf8be6172.86f5afce241d4ff8
     9d1fb4b13a4a0964.b1f33ddd90244704.f9ab858d06bed70e.0c0c877dbc202309
     7f7e9df161dd82eb
 
-VPSRLD_0x05_128(reg)
+VPUNPCKLQDQ_128(reg)
   before
     e246740866d17fef.dffeefc98c4fedac.91077415920bad42.3b3718eba000a35c
     91ae082e688955c1.c69b5985a4650b06.4e552ae602b08f38.74dc5a38320b0d68
@@ -6702,12 +6702,12 @@
     42915857d1727e7d.f33ea69a95f1e7a2.d3d204039d60b6f9.3b9ce04bacb2a565
     82501ceacc654dae
   after
-    0000000000000000.0000000000000000.069e902004eb05b7.01dce7020565952b
+    0000000000000000.0000000000000000.8064c95ed7eecf5c.74dc5a38320b0d68
     91ae082e688955c1.c69b5985a4650b06.4e552ae602b08f38.74dc5a38320b0d68
     e70355cf028f410c.2ec26cd19e97209f.452a5cbc7c9d2891.8064c95ed7eecf5c
     42915857d1727e7d.f33ea69a95f1e7a2.d3d204039d60b6f9.3b9ce04bacb2a565
     82501ceacc654dae
-VPSRLD_0x05_128(mem)
+VPUNPCKLQDQ_128(mem)
   before
     2f4cf72754128164.fda40c3270bb4ac0.f1dd82caa5801e3c.529920280185731e
     1f5cefee5fc6feb2.74876dcd7cf8df80.05697c4feb4f7f99.1fcbab9543969ba9
@@ -6717,11 +6717,11 @@
   after
     2f4cf72754128164.fda40c3270bb4ac0.f1dd82caa5801e3c.529920280185731e
     1f5cefee5fc6feb2.74876dcd7cf8df80.05697c4feb4f7f99.1fcbab9543969ba9
-    2e4c7f2b0a8c80c5.0288779290b47a6a.09af1013836ac7e4.96b3a1b7ff216c49
+    0000000000000000.0000000000000000.529920280185731e.1fcbab9543969ba9
     38e723cb7070c2c9.05f127ef487c5629.da7bbb0488ddb14a.139ffefbd2b220a8
     f2d9bfcc57d4f472
 
-VPSRAD_0x05_128(reg)
+VPINSRD_128(reg)
   before
     90aedf952b132455.19fa57b8ad7f81e9.d70f774f41dbb16a.5499f70d16b5faf6
     476a5ac4e9fbebfa.ad5198dfdec47951.d62e651d175dc5d8.52d5421a4afe5e15
@@ -6729,12 +6729,12 @@
     73c6520195f83141.5dfb2e8d8b2103ad.c79f09b8c7fb0aee.4fd5f3f0120f665b
     05335191def182da
   after
-    0000000000000000.0000000000000000.fe3cf84dfe3fd857.027eaf9f00907b32
+    0000000000000000.0000000000000000.d62e651d175dc5d8.52d5421adef182da
     476a5ac4e9fbebfa.ad5198dfdec47951.d62e651d175dc5d8.52d5421a4afe5e15
     74592cc42e198610.cfb8612d1f4b652f.5d9aecc7658fce20.b2fa18173fc299d3
     73c6520195f83141.5dfb2e8d8b2103ad.c79f09b8c7fb0aee.4fd5f3f0120f665b
     05335191def182da
-VPSRAD_0x05_128(mem)
+VPINSRD_128(mem)
   before
     b0deade6bf72a97b.9fffc6e7bb242739.32e67bea3e510df7.7288b65cda30b3ed
     2ca383dcd3a0976b.564e86e33b2aa6a6.2a44c53255e73f3b.b8a3f1203ab706ca
@@ -6744,11 +6744,11 @@
   after
     b0deade6bf72a97b.9fffc6e7bb242739.32e67bea3e510df7.7288b65cda30b3ed
     2ca383dcd3a0976b.564e86e33b2aa6a6.2a44c53255e73f3b.b8a3f1203ab706ca
-    544d4f5d338707d6.f3008d5fb295e831.21e28650ebf057a2.f63ab56e821e3e31
+    0000000000000000.0000000000000000.da30b3ed55e73f3b.b8a3f1203ab706ca
     06aa8d57fd31b6e7.d261d8c8bbf22989.f28d3c301d770f5b.899afeb34ef199cd
     cb0fc95c3bba514a
 
-VPSRAD_0x05_128(reg)
+VPINSRD_128(reg)
   before
     19e510d3e407a256.1d84bab44dac60ca.4fbd618bf2cca758.7b0f62be07882490
     d067d186e664ca9b.75a951623e04c0ad.c6602612f4af9c4a.973475e6c330516d
@@ -6756,12 +6756,12 @@
     e4a3af4c637a8a81.57ffae5e7477951d.11aa5121c8c1dd4a.f79c4eb52772e6d2
     f4750d330725c6b1
   after
-    0000000000000000.0000000000000000.008d5289fe460eea.ffbce275013b9736
+    0000000000000000.0000000000000000.c6602612f4af9c4a.973475e60725c6b1
     d067d186e664ca9b.75a951623e04c0ad.c6602612f4af9c4a.973475e6c330516d
     4ae307e0dc5b03c5.e9e3ce4cec4393ba.939522cb5d27450c.21caef95707a531f
     e4a3af4c637a8a81.57ffae5e7477951d.11aa5121c8c1dd4a.f79c4eb52772e6d2
     f4750d330725c6b1
-VPSRAD_0x05_128(mem)
+VPINSRD_128(mem)
   before
     f322a8fc299eafe9.faf4c338164d9b7b.99c86b84f2ac8203.9ee9b080d108a1af
     d26f9cfbabe95ca6.e822410f925e715e.8d0c83aa81ed1598.959f39541589cde8
@@ -6771,11 +6771,11 @@
   after
     f322a8fc299eafe9.faf4c338164d9b7b.99c86b84f2ac8203.9ee9b080d108a1af
     d26f9cfbabe95ca6.e822410f925e715e.8d0c83aa81ed1598.959f39541589cde8
-    6b28631ba9138a13.0b79243d723b49d7.0d9671bc3d460b07.5118ea092fcf9da1
+    0000000000000000.0000000000000000.d108a1af81ed1598.959f39541589cde8
     9c197b4a3e27f45c.bd45682f52705f91.f731b2a643c3207d.30a0be0bbc664c85
     8c82b2c657db1841
 
-VPSRAD_0x05_128(reg)
+VPINSRD_128(reg)
   before
     c30cc0a69db93a80.3f0e5f73863257af.5bd10a4fcf88ee39.25aac055ae710f26
     2f88e618298cf1ef.31d28c829e3f6f35.416b040a850f337b.75cd19b39b5b952d
@@ -6783,12 +6783,12 @@
     1a89675e8542090b.73faad03ad8fae91.55f4f502099bcf7b.e641993069145607
     c129b82782fc0831
   after
-    0000000000000000.0000000000000000.02afa7a8004cde7b.ff320cc90348a2b0
+    0000000000000000.0000000000000000.416b040a850f337b.75cd19b382fc0831
     2f88e618298cf1ef.31d28c829e3f6f35.416b040a850f337b.75cd19b39b5b952d
     2e431f8698e07739.4f327c63a25af81d.cb5d54cd0f916a02.c16638ae258e6ebe
     1a89675e8542090b.73faad03ad8fae91.55f4f502099bcf7b.e641993069145607
     c129b82782fc0831
-VPSRAD_0x05_128(mem)
+VPINSRD_128(mem)
   before
     2cec127e8c4f416b.51a6ba0b8d3ee311.7af69a4cdbeb4cbe.3b7ce41710b89d91
     04542221a51bbddf.2de515f94b5e40f6.41f2bf2b49798fcf.d8401b77bf7512f1
@@ -6798,11 +6798,11 @@
   after
     2cec127e8c4f416b.51a6ba0b8d3ee311.7af69a4cdbeb4cbe.3b7ce41710b89d91
     04542221a51bbddf.2de515f94b5e40f6.41f2bf2b49798fcf.d8401b77bf7512f1
-    252e64fce66b37ba.0c9473935c305e67.a2ba998d124632f1.8a8e988eb35c6747
+    0000000000000000.0000000000000000.10b89d9149798fcf.d8401b77bf7512f1
     6c4654fb6d4c6c27.48fdd0475b407610.7a19a25c535df34f.acb056c888fbdb3e
     9af45191d8dea882
 
-VPUNPCKLWD_128(reg)
+VMOVD_XMM_to_MEM32(reg)
   before
     b0a4855542900bc1.b3686e0a56c91853.3e6d2880e418c79c.a5dd588627ca8c16
     4a0def805f9d40a5.d75f2f16bceef769.4a3078ab94468bb7.00d036f6ab99b972
@@ -6810,12 +6810,12 @@
     793952bc28f90e0d.260093d170613c06.15dfec82d7d25f4d.b1765b58318fc397
     c0c19a226bce17b8
   after
-    0000000000000000.0000000000000000.65bf00d0b89836f6.fad7ab99388eb972
+    b0a4855542900bc1.b3686e0a56c91853.3e6d2880e418c79c.a5dd588627ca8c16
     4a0def805f9d40a5.d75f2f16bceef769.4a3078ab94468bb7.00d036f6ab99b972
     c37a8a7ecd9282da.b4f91209bbc7c496.c992bb320756ff0f.65bfb898fad7388e
     793952bc28f90e0d.260093d170613c06.15dfec82d7d25f4d.b1765b58318fc397
     c0c19a226bce17b8
-VPUNPCKLWD_128(mem)
+VMOVD_XMM_to_MEM32(mem)
   before
     6e6bf1e2c59ff01e.c79543a40b6120ea.09412e58f6c71be4.8b630a08a348e720
     9742dc845a0e09f5.08d95aa41353f41c.3988608c6a061d5d.87690e2e0544d232
@@ -6823,13 +6823,13 @@
     caa25f1fa7f8eea4.d74ce698ff0ad032.f05876a88a3c78ce.812ebc0ffcfbc3c5
     37855ea1c9ce429d
   after
-    6e6bf1e2c59ff01e.c79543a40b6120ea.09412e58f6c71be4.8b630a08a348e720
+    6e6bf1e2c59ff01e.c79543a40b6120ea.09412e58f6c71be4.8b630a0899505d2f
     9742dc845a0e09f5.08d95aa41353f41c.3988608c6a061d5d.87690e2e0544d232
-    0000000000000000.0000000000000000.8b6387690a080e2e.a3480544e720d232
+    1710d7f547281f68.9a529126db5dc550.92a1a458e829fd9c.653ef66299505d2f
     caa25f1fa7f8eea4.d74ce698ff0ad032.f05876a88a3c78ce.812ebc0ffcfbc3c5
     37855ea1c9ce429d
 
-VPUNPCKLWD_128(reg)
+VMOVD_XMM_to_MEM32(reg)
   before
     e38fd8849d571466.8cc4eff0968a31d4.1d1354651ce7516d.2f7852686f4c491f
     e1982424132176ca.3842035231eba625.c6f3d8f9ce7f83ae.2bceb484b0642eba
@@ -6837,12 +6837,12 @@
     43d5274b57a9d815.c381a77ed94710d9.b52d0e265e11edf0.c94dfc80bcdd1f80
     240dd939be56a303
   after
-    0000000000000000.0000000000000000.c0272bce19e8b484.6c90b064e1cb2eba
+    e38fd8849d571466.8cc4eff0968a31d4.1d1354651ce7516d.2f7852686f4c491f
     e1982424132176ca.3842035231eba625.c6f3d8f9ce7f83ae.2bceb484b0642eba
     8deb40edc8b8a375.ace71733932607c3.30376cc0b05ea3a0.c02719e86c90e1cb
     43d5274b57a9d815.c381a77ed94710d9.b52d0e265e11edf0.c94dfc80bcdd1f80
     240dd939be56a303
-VPUNPCKLWD_128(mem)
+VMOVD_XMM_to_MEM32(mem)
   before
     ac322cfd8e072a80.5fa2d5aa5c7f5153.59da301f1f5b7f93.b31fb99875239d49
     3d8a72ba47fd7024.3d9e467775c74ade.4abf2d027f6d0e1f.845a69809020ee58
@@ -6850,13 +6850,13 @@
     e9ffc4cbe6e52890.af5363074cdaaa85.ac5d743e04bc7e57.13dbca66450d6647
     88b8713c1514047f
   after
-    ac322cfd8e072a80.5fa2d5aa5c7f5153.59da301f1f5b7f93.b31fb99875239d49
+    ac322cfd8e072a80.5fa2d5aa5c7f5153.59da301f1f5b7f93.b31fb9984c951dc9
     3d8a72ba47fd7024.3d9e467775c74ade.4abf2d027f6d0e1f.845a69809020ee58
-    0000000000000000.0000000000000000.b31f845ab9986980.752390209d49ee58
+    b2df265a0643311b.3915771c3b0cfe60.71fc1a1318897aa7.852a1b4b4c951dc9
     e9ffc4cbe6e52890.af5363074cdaaa85.ac5d743e04bc7e57.13dbca66450d6647
     88b8713c1514047f
 
-VPUNPCKLWD_128(reg)
+VMOVD_XMM_to_MEM32(reg)
   before
     410f0f385a37341c.bdb4c8f803f013b0.faa406a244bd8afa.d6aeb56f5f11d75c
     9a2a9dc8b00132cb.09cbaecd7a6faba7.78535c5bbe42da6b.caba5b93469441e2
@@ -6864,12 +6864,12 @@
     9ddf7d51fdbb870e.7d4e121fe4fad9c8.79fe12d4a960b8ef.8437c3602556381f
     023f7ee156ad3c2f
   after
-    0000000000000000.0000000000000000.664fcabae1945b93.d4524694781441e2
+    410f0f385a37341c.bdb4c8f803f013b0.faa406a244bd8afa.d6aeb56f5f11d75c
     9a2a9dc8b00132cb.09cbaecd7a6faba7.78535c5bbe42da6b.caba5b93469441e2
     f0561857b2fe3a38.ab0ff336666fafa0.84ad619d56f4d583.664fe194d4527814
     9ddf7d51fdbb870e.7d4e121fe4fad9c8.79fe12d4a960b8ef.8437c3602556381f
     023f7ee156ad3c2f
-VPUNPCKLWD_128(mem)
+VMOVD_XMM_to_MEM32(mem)
   before
     ba338c058361416f.fe11c7222cc356fa.5d538774101ee64a.b5926a6c5211bf5b
     8adf6bb7c780020c.6f37f236dca2e3a8.25e9ce2104e79253.93b565d1ee932572
@@ -6877,13 +6877,13 @@
     de8e8a75062eab0b.f193dcd82c1726f7.e1fbc334ba95b6a8.a4d735b36d3b0153
     8f6e0107887aef75
   after
-    ba338c058361416f.fe11c7222cc356fa.5d538774101ee64a.b5926a6c5211bf5b
+    ba338c058361416f.fe11c7222cc356fa.5d538774101ee64a.b5926a6c187227e1
     8adf6bb7c780020c.6f37f236dca2e3a8.25e9ce2104e79253.93b565d1ee932572
-    0000000000000000.0000000000000000.b59293b56a6c65d1.5211ee93bf5b2572
+    4c0e96e33f163c31.4c9ffbfaa8e56ac3.b3dd6313df60980e.6eb2ff6f187227e1
     de8e8a75062eab0b.f193dcd82c1726f7.e1fbc334ba95b6a8.a4d735b36d3b0153
     8f6e0107887aef75
 
-VPUNPCKHWD_128(reg)
+VPANDN_128(reg)
   before
     8dc461d906b92cf2.1a29c15938d40bc5.ba61933e05c554f1.8d0f6972b492a54d
     f82551938286f577.ddacb97bf214188c.03531b96cf792f5d.91e5d1b8e6642428
@@ -6891,12 +6891,12 @@
     8938cd74e6f81a48.699ad92a6c9427f0.85d58fd1a329e039.1506d80b68b5bd33
     4ce96ff1ef4c50ba
   after
-    0000000000000000.0000000000000000.28b50353714e1b96.24c1cf79f5e62f5d
+    0000000000000000.0000000000000000.848484412000c020.0402080308919913
     f82551938286f577.ddacb97bf214188c.03531b96cf792f5d.91e5d1b8e6642428
     2eddcba3996d86b0.04e3edc74ffb8d8c.28b5714e24c1f5e6.ca4878f16f16ed66
     8938cd74e6f81a48.699ad92a6c9427f0.85d58fd1a329e039.1506d80b68b5bd33
     4ce96ff1ef4c50ba
-VPUNPCKHWD_128(mem)
+VPANDN_128(mem)
   before
     4cbeb88f20e76227.6681527205b5eeec.e99cfa8e65eca1e5.76fe738ae63c2d02
     f1512fd11692aea8.22055609942f3e48.60b7cae1540eb996.577b18e7898617ec
@@ -6906,11 +6906,11 @@
   after
     4cbeb88f20e76227.6681527205b5eeec.e99cfa8e65eca1e5.76fe738ae63c2d02
     f1512fd11692aea8.22055609942f3e48.60b7cae1540eb996.577b18e7898617ec
-    0000000000000000.0000000000000000.e99c60b7fa8ecae1.65ec540ea1e5b996
+    0000000000000000.0000000000000000.8908300e21e00061.2084630866382802
     9ae098f2c24ae690.a2efcbb26b8c41d5.a4636c008ae0addf.58a5953b61f0b5d5
     31e86609ce28e12c
 
-VPUNPCKHWD_128(reg)
+VPANDN_128(reg)
   before
     6ab1e82a0bc89a55.577582a8b16f4b50.1fec359cec876c5f.288d35a509a903ce
     5e4b170bb55b1dfb.28f78ab3d5d4dad2.eb530ed04c6e0351.13ff9fe8ee6de52a
@@ -6918,12 +6918,12 @@
     eb216db9bd8b7170.79f5e5742d8f68cf.db93fec21836641c.8eeb43f9601240d7
     d6fc759e240c3081
   after
-    0000000000000000.0000000000000000.6072eb5352b80ed0.27cf4c6e41570351
+    0000000000000000.0000000000000000.1080f0021010640c.8c004011001200d5
     5e4b170bb55b1dfb.28f78ab3d5d4dad2.eb530ed04c6e0351.13ff9fe8ee6de52a
     6b01ef16676da6cb.ea332dfd4a855044.607252b827cf4157.418525b55736101e
     eb216db9bd8b7170.79f5e5742d8f68cf.db93fec21836641c.8eeb43f9601240d7
     d6fc759e240c3081
-VPUNPCKHWD_128(mem)
+VPANDN_128(mem)
   before
     f5853791c0319d47.3cf58b5e543fb997.b109300399fddfa2.b8030c58bb2da64c
     c75206bf4f8c4356.b9ca4773c818bbeb.6e3b8996abdb71e7.530f7ae8ad424395
@@ -6933,11 +6933,11 @@
   after
     f5853791c0319d47.3cf58b5e543fb997.b109300399fddfa2.b8030c58bb2da64c
     c75206bf4f8c4356.b9ca4773c818bbeb.6e3b8996abdb71e7.530f7ae8ad424395
-    0000000000000000.0000000000000000.b1096e3b30038996.99fdabdbdfa271e7
+    0000000000000000.0000000000000000.9100300110248e00.a8000410122da448
     f3e8b878b71529fd.a6a6879ab462dccd.e62856782f19d578.332563a3ecf5821c
     30c9d7a671aa9ab3
 
-VPUNPCKHWD_128(reg)
+VPANDN_128(reg)
   before
     5b379952b5acff11.064993dbc95be1ee.ce46028465ed73b2.5a7bc19fd9901f1d
     10bda7135388ebe3.3c1d6a293d07c1d7.93160b8d63cab475.c31c2b7a99a874e5
@@ -6945,12 +6945,12 @@
     883c95850efc4b93.8152fe33c2c3ed43.5f7ab5adb3af2344.e477eafdc9e82e8b
     53ca367d71290bc2
   after
-    0000000000000000.0000000000000000.4f6493169d210b8d.498763cadbc2b475
+    0000000000000000.0000000000000000.4c68b42090250300.2463c08540400a0a
     10bda7135388ebe3.3c1d6a293d07c1d7.93160b8d63cab475.c31c2b7a99a874e5
     aba5fd56e7c99bd5.7132ba4d322687e5.4f649d214987dbc2.fdd70ff68a6c90fa
     883c95850efc4b93.8152fe33c2c3ed43.5f7ab5adb3af2344.e477eafdc9e82e8b
     53ca367d71290bc2
-VPUNPCKHWD_128(mem)
+VPANDN_128(mem)
   before
     289a71609e3ae3cc.03ce6c0d64ab36c8.474ab2c709eab01e.20a54d9b3ecfc9a7
     3eb516946d2771d4.77a67f5b84659920.a1e652f524a88ba1.ec30635985720999
@@ -6960,11 +6960,11 @@
   after
     289a71609e3ae3cc.03ce6c0d64ab36c8.474ab2c709eab01e.20a54d9b3ecfc9a7
     3eb516946d2771d4.77a67f5b84659920.a1e652f524a88ba1.ec30635985720999
-    0000000000000000.0000000000000000.474aa1e6b2c752f5.09ea24a8b01e8ba1
+    0000000000000000.0000000000000000.4608a0020942301e.00850c823a8dc026
     9cf78f9c60c7a291.bf5c46f59323b7ec.7d3948d044167c52.189af6f1b97246d4
     31116ba4dee7ba76
 
-VPADDUSB_128(reg)
+VPSLLDQ_0x05_128(reg)
   before
     c5184ed62f10b956.9cb75a48bb91bd9d.4ad1f31abb40e9b7.b888955581df0ad8
     31fc99f348777d1f.4ef080f428687e57.3ebdcbb41d978356.f5abbe23026ea1b5
@@ -6972,12 +6972,12 @@
     018a5d9e4535471e.3401cafca66ae589.d52aecf70020debf.e99d954f3d0fd82b
     58043b83303af01b
   after
-    0000000000000000.0000000000000000.ffe7ffff1db7ffff.ffffff723f7dffe0
+    0000000000000000.0000000000000000.20debfe99d954f3d.0fd82b0000000000
     31fc99f348777d1f.4ef080f428687e57.3ebdcbb41d978356.f5abbe23026ea1b5
     d1094a67c6aa437e.8c707c8cc257a2ed.f96cc92f55b3c075.126e3f28e2d0fc18
     018a5d9e4535471e.3401cafca66ae589.d52aecf70020debf.e99d954f3d0fd82b
     58043b83303af01b
-VPADDUSB_128(mem)
+VPSLLDQ_0x05_128(mem)
   before
     396fadb2d75a0113.1dcdcc0560a2c5ac.2070e731efae0257.30432d79b96a17e1
     6aa967c74d7dc740.811c9506b480f8d4.2e894e15ba2eb684.6502891f1d1ea886
@@ -6987,11 +6987,11 @@
   after
     396fadb2d75a0113.1dcdcc0560a2c5ac.2070e731efae0257.30432d79b96a17e1
     6aa967c74d7dc740.811c9506b480f8d4.2e894e15ba2eb684.6502891f1d1ea886
-    0000000000000000.0000000000000000.4ef9ff46ffdcb8db.9545b698d688bfff
+    c57fe6afaeaefecd.89c4b20edc581d41.38187a9622f7bd3c.cfb4fd57c7c8cc5b
     27bea55417f962e7.9111228a74b870a0.1ce9ea9f4414d3aa.cca5848b54f2c10b
     b6211a295f2ac143
 
-VPADDUSB_128(reg)
+VPSLLDQ_0x05_128(reg)
   before
     ea74bc9b85fb08af.6d2f20a3a46baeba.f54fdee5192b2c9c.b4c7171b3b91b3fb
     c5ea644f61f2d4fa.71a1d3886f0f9f71.11cae38a663d8ee2.dd807ff8247a1a5a
@@ -6999,12 +6999,12 @@
     db6ebb2aac7fe6e0.26b4d2c6361f5f3e.e1a6ba676a7033fb.53aeec8239c26cf5
     57bceb079f39cf88
   after
-    0000000000000000.0000000000000000.f2fffff1d0adc1ff.ffffffff5dff86ff
+    0000000000000000.0000000000000000.7033fb53aeec8239.c26cf50000000000
     c5ea644f61f2d4fa.71a1d3886f0f9f71.11cae38a663d8ee2.dd807ff8247a1a5a
     a1ce10b08f9a5fd1.10df3af097f2f039.41ce2ee7f87bd21d.73de9c211adcc4f4
     db6ebb2aac7fe6e0.26b4d2c6361f5f3e.e1a6ba676a7033fb.53aeec8239c26cf5
     57bceb079f39cf88
-VPADDUSB_128(mem)
+VPSLLDQ_0x05_128(mem)
   before
     5cd4139d654ca9da.d0146229542ea5d2.8fee16f568a2a6ab.4d9f837659a9ef25
     3ec1e22ea907b616.da0dff192232d753.2857826b4a8881ac.e005868060b1404a
@@ -7014,11 +7014,11 @@
   after
     5cd4139d654ca9da.d0146229542ea5d2.8fee16f568a2a6ab.4d9f837659a9ef25
     3ec1e22ea907b616.da0dff192232d753.2857826b4a8881ac.e005868060b1404a
-    0000000000000000.0000000000000000.b7ff98ffb2ffffff.ffa4fff6b9ffff6f
+    d951d3a78677b169.56a59067b217b910.cbbc9213f7dcae6e.f824bdf21c146214
     094e62f519a757ff.a027107da16a87b5.55e9c3d98baae71d.f0482636285e932f
     24bdbcb9211c0d48
 
-VPADDUSB_128(reg)
+VPSLLDQ_0x05_128(reg)
   before
     efce7be8a2d90d0b.aa850b037ea36403.15e17bc88bb67cee.a2aa8fa924fee9e5
     afc8602d4822ce23.98c24bbcd07794a2.0f1dcdb50b88d566.8eca746fdbe570f1
@@ -7026,12 +7026,12 @@
     7aa888ae70858605.cb7e7ce4acda4b5f.054f18213eeaa3c5.b35b778e199afb86
     a4638dbed7807868
   after
-    0000000000000000.0000000000000000.146ce5d649ffffff.ffffebfdf4ffffff
+    0000000000000000.0000000000000000.eaa3c5b35b778e19.9afb860000000000
     afc8602d4822ce23.98c24bbcd07794a2.0f1dcdb50b88d566.8eca746fdbe570f1
     bef866f6ae828d3d.afd19d0e2b30a207.eb2903afbd6acec9.f517ee17ce6b376d
     7aa888ae70858605.cb7e7ce4acda4b5f.054f18213eeaa3c5.b35b778e199afb86
     a4638dbed7807868
-VPADDUSB_128(mem)
+VPSLLDQ_0x05_128(mem)
   before
     a4fbaa952428693e.3d24c5c12bb8f526.c894672a6e7f4ad6.b9dc087929948f03
     8eef4cfd1d9f8c35.65ba169b7ba6164c.82e1d7cc8e2d5d97.631bcf221bf3cf32
@@ -7041,11 +7041,11 @@
   after
     a4fbaa952428693e.3d24c5c12bb8f526.c894672a6e7f4ad6.b9dc087929948f03
     8eef4cfd1d9f8c35.65ba169b7ba6164c.82e1d7cc8e2d5d97.631bcf221bf3cf32
-    0000000000000000.0000000000000000.fffffff6fcaca7ff.fff7d79b44ffff35
+    400aefe4def09b79.4cb579a8fbdb2425.d52f4ab627f03ecf.5f5a6988af939ffc
     951a0d3582275235.5060e85447e45c5b.9d4b3bd456d2aaa9.09e4d31782003b0d
     bd04083c2fc7de12
 
-VPMULHUW_128(reg)
+VPSRLDQ_0x05_128(reg)
   before
     d70704615273c5b7.69e924dc25516f96.cb08610bfc4cf99a.b501261336e15c52
     b339c3f388902ba8.9844afc5e479acc7.1bf9e03ab59f388f.fb1c875de32911f6
@@ -7053,12 +7053,12 @@
     205a7c0f9c4f681b.76ce110d24f4784c.a5e6dcaca5378c4a.7eb59cc6179074dd
     72cb48bdd5c99978
   after
-    0000000000000000.0000000000000000.1220c14875361efe.7c4952e514e80832
+    0000000000000000.0000000000000000.0000000000a5e6dc.aca5378c4a7eb59c
     b339c3f388902ba8.9844afc5e479acc7.1bf9e03ab59f388f.fb1c875de32911f6
     ace6425f6dab4e90.fdf72adcdaabc6f5.9a7f5f4b0f6955e6.4a6adba07ab485c0
     205a7c0f9c4f681b.76ce110d24f4784c.a5e6dcaca5378c4a.7eb59cc6179074dd
     72cb48bdd5c99978
-VPMULHUW_128(mem)
+VPSRLDQ_0x05_128(mem)
   before
     04765a70d069b2be.6ae06d71b109b6f6.de95e144dd5f7ff7.997a52c714951968
     0e834fcb257e78da.e6c511f0496473cd.1017156e22f99722.d086bd0af70e37eb
@@ -7068,11 +7068,11 @@
   after
     04765a70d069b2be.6ae06d71b109b6f6.de95e144dd5f7ff7.997a52c714951968
     0e834fcb257e78da.e6c511f0496473cd.1017156e22f99722.d086bd0af70e37eb
-    0000000000000000.0000000000000000.0dfd12db1e3d4b8b.7d033d2013dc058c
+    6ebea2baf014aaf9.ef5664f800ecdd4b.ea2229750ecc7cfb.a75719e0eb2e2380
     fff2ce294c360247.e3dd63f5712e2e1d.46809947bee6eaac.7a3a63b58b8118d3
     a57995f57494548f
 
-VPMULHUW_128(reg)
+VPSRLDQ_0x05_128(reg)
   before
     8460ad0c41f21161.9ced510455f03def.1da7095338b4a2ef.02fee1ce4d539c61
     743da7668e278cf4.2279a738284e171e.f8ff527ef20d776c.f8687ef8d71e4f47
@@ -7080,12 +7080,12 @@
     f2052d941b48aa10.5a77b8569a2897c0.058dbeebad612f19.062fa4e24ffea655
     d625257a742cc3d5
   after
-    0000000000000000.0000000000000000.05663d85a3ee15f8.060051c643373382
+    0000000000000000.0000000000000000.0000000000058dbe.ebad612f19062fa4
     743da7668e278cf4.2279a738284e171e.f8ff527ef20d776c.f8687ef8d71e4f47
     cf5b7d6ff8c000f5.6e634aafe05d4b00.d2333ae23ac2e740.068aebb07953be8a
     f2052d941b48aa10.5a77b8569a2897c0.058dbeebad612f19.062fa4e24ffea655
     d625257a742cc3d5
-VPMULHUW_128(mem)
+VPSRLDQ_0x05_128(mem)
   before
     5036eb6404e8d136.3988b23f924bc6f0.c4816c1a71bcb48a.ef5bd906e6758aa1
     512f718c1c3f8ca3.003008def9569042.864de2e68223618c.eae7879d828b3584
@@ -7095,11 +7095,11 @@
   after
     5036eb6404e8d136.3988b23f924bc6f0.c4816c1a71bcb48a.ef5bd906e6758aa1
     512f718c1c3f8ca3.003008def9569042.864de2e68223618c.eae7879d828b3584
-    0000000000000000.0000000000000000.67165fd039d144cb.dba172f775841cfa
+    b6dc33dfd83baf48.a3492bdbedf443b1.7da696a5e86c58f0.547ec41e1c2e6d6f
     5909ad4753ebf752.7d1f17a40ab21cea.865a0545bfa056e2.876c8cf451ea6b0e
     e1fcdc8bbc4c6e0c
 
-VPMULHUW_128(reg)
+VPSRLDQ_0x05_128(reg)
   before
     bc7caf4ef9dfb016.17815bb2a9581fed.ecfdc9a4eb1b5799.7b33aab125cd178f
     753601aba52f6ed7.cc12ba0af790e545.4b313c472cbb3069.39fe01d533fe5723
@@ -7107,12 +7107,12 @@
     f28b13e1b9384d31.8cab7836e98f35d9.49c6562640d1aa1e.809ab5f6bd9d42ae
     c2020bca702465fd
   after
-    0000000000000000.0000000000000000.15ab14480b53202b.1d21014d268216b2
+    0000000000000000.0000000000000000.000000000049c656.2640d1aa1e809ab5
     753601aba52f6ed7.cc12ba0af790e545.4b313c472cbb3069.39fe01d533fe5723
     6977ce0d5cc9e3fd.5586453d589e0385.f6056cf96a1ee207.9c87869d0740d1c9
     f28b13e1b9384d31.8cab7836e98f35d9.49c6562640d1aa1e.809ab5f6bd9d42ae
     c2020bca702465fd
-VPMULHUW_128(mem)
+VPSRLDQ_0x05_128(mem)
   before
     3c8d03063cdef8e3.6dbeca915808e621.4e4bcfe1c56e396f.9fc0f43a4b5fc35b
     cb0519973ed9b58c.365cf18ad6c6ea79.7732c7290947c970.563f44a226556b6a
@@ -7122,11 +7122,11 @@
   after
     3c8d03063cdef8e3.6dbeca915808e621.4e4bcfe1c56e396f.9fc0f43a4b5fc35b
     cb0519973ed9b58c.365cf18ad6c6ea79.7732c7290947c970.563f44a226556b6a
-    0000000000000000.0000000000000000.2474a1b907272d31.35d141790b4951f7
+    4b37ca6891205923.a9b08339cffd97e5.e32edafdd027a20b.c98e41c86d3edcf6
     98ef906452c09fd5.23087d08de392710.6e0a86463618806a.53fbe71abea653ab
     52d03302b2190b37
 
-VPADDUSW_128(reg)
+VPSUBUSB_128(reg)
   before
     215a20eee7244244.8ef9e9799dc444cd.feaed9659f07d7a6.f49146f158291eb9
     1be5aa49f953327e.092150928c380438.97ef95bbaff2e354.519097ea52633926
@@ -7134,12 +7134,12 @@
     042e85fc21492f2c.fdfa3980cca2c416.73721b022a50fda8.0026d8773c88d504
     0a55c1e36489cfce
   after
-    0000000000000000.0000000000000000.ffffb0bdda42ffff.51b6ffff8eebffff
+    0000000000000000.0000000000000000.247d7ab985a20000.516a007316000022
     1be5aa49f953327e.092150928c380438.97ef95bbaff2e354.519097ea52633926
     9ebdcd7f83301792.e532419b3e299b42.4a17ac76a98786c6.61d3f31e3fd48dda
     042e85fc21492f2c.fdfa3980cca2c416.73721b022a50fda8.0026d8773c88d504
     0a55c1e36489cfce
-VPADDUSW_128(mem)
+VPSUBUSB_128(mem)
   before
     5a2c2b4dd3e53564.ab83cf2c7029b4f7.2f43b22d55af3ce1.6e4bdccbcddc84a5
     ce7690a0a6a8c3f3.ed0aa67b0c5de3a0.56da2a8ff25dbfce.97f0ed3d2eb45669
@@ -7149,11 +7149,11 @@
   after
     5a2c2b4dd3e53564.ab83cf2c7029b4f7.2f43b22d55af3ce1.6e4bdccbcddc84a5
     ce7690a0a6a8c3f3.ed0aa67b0c5de3a0.56da2a8ff25dbfce.97f0ed3d2eb45669
-    0000000000000000.0000000000000000.861ddcbcfffffcaf.fffffffffc90db0e
+    0000000000000000.0000000000000000.279700629d008300.29a5110000000000
     8f9740b6e68f4bab.b6d9eb2698ee2e3b.f321041ddec9d5c0.e2c9eccc9d7dcff9
     bd96d2c2e285ec1d
 
-VPADDUSW_128(reg)
+VPSUBUSB_128(reg)
   before
     365ef810560b46b7.930582508bcdbc2c.f4ba515bc164c284.206a5f2364a0e01e
     a96d5824949a1776.2b17b08504a04556.3ffc355ea65def5c.b330a88d7047e64d
@@ -7161,12 +7161,12 @@
     ec8fbc4adf05100e.8356c26be03b9253.67d2648316090863.7767f43c8736d1d5
     616fef5acb962f84
   after
-    0000000000000000.0000000000000000.a7ce99e1bc66f7bf.fffffffff77dffff
+    0000000000000000.0000000000000000.002a00009054e700.3c00005100111500
     a96d5824949a1776.2b17b08504a04556.3ffc355ea65def5c.b330a88d7047e64d
     720ef06838bf9c04.3298473f6c16a354.f1ea929de465f36c.87415b461dcaa27c
     ec8fbc4adf05100e.8356c26be03b9253.67d2648316090863.7767f43c8736d1d5
     616fef5acb962f84
-VPADDUSW_128(mem)
+VPSUBUSB_128(mem)
   before
     2025c98c04f677b6.753ab63525f8b03f.fc1b9df67b19ce7e.fdfea77cd8d46beb
     8f54fdbe4f636797.685cdc95a524b844.77b454ca5abf1302.0fbb58f4c85258b0
@@ -7176,11 +7176,11 @@
   after
     2025c98c04f677b6.753ab63525f8b03f.fc1b9df67b19ce7e.fdfea77cd8d46beb
     8f54fdbe4f636797.685cdc95a524b844.77b454ca5abf1302.0fbb58f4c85258b0
-    0000000000000000.0000000000000000.fffff2c0d5d8e180.ffffffffffffc49b
+    0000000000000000.0000000000000000.0099000000a60000.0000007800000000
     f15163d389922914.fb359964c45aef79.e7924702528ca6c3.1818f1119b99bea5
     c650d18eb879b02b
 
-VPADDUSW_128(reg)
+VPSUBUSB_128(reg)
   before
     60480e3a713d1b9f.9bb68e8db16c7508.548328ab9b7a9700.946f7b3da3cc6c59
     424ea58262703cac.67c502f85982575c.8679d3181d04950c.b3507b72a7022bf7
@@ -7188,12 +7188,12 @@
     4eafce925f559044.d111ba8d9f93d0cd.e988691090848a5d.bb4cd07a3b8284fe
     5b011d2502e496be
   after
-    0000000000000000.0000000000000000.ffffffffad88ffff.ffffffffe284b0f5
+    0000000000000000.0000000000000000.00006a0800000b00.000400006c000000
     424ea58262703cac.67c502f85982575c.8679d3181d04950c.b3507b72a7022bf7
     c8ac91d0289f4f00.2f4a3dfea0e08c39.ef619415e5832847.2200c38d7b3b9fca
     4eafce925f559044.d111ba8d9f93d0cd.e988691090848a5d.bb4cd07a3b8284fe
     5b011d2502e496be
-VPADDUSW_128(mem)
+VPSUBUSB_128(mem)
   before
     dfe9257aec6c9036.30a35832a21e3a27.27e5f69075a6de44.d23a4e73b992f8fb
     21d0676616262f94.cad32c1e8d868a53.0e946bf23b2673ca.04c33dacfd39aecd
@@ -7203,11 +7203,11 @@
   after
     dfe9257aec6c9036.30a35832a21e3a27.27e5f69075a6de44.d23a4e73b992f8fb
     21d0676616262f94.cad32c1e8d868a53.0e946bf23b2673ca.04c33dacfd39aecd
-    0000000000000000.0000000000000000.3679ffffb0ccffff.d6fd8c1fffffffff
+    0000000000000000.0000000000000000.0000006200000086.0089003944000000
     52cf82af98614bac.951b9e87cd650c38.00aef5880d9a21b0.b7892d4d4384e1bb
     ef5e268d7e3fd52f
 
-VPMULLW_128(reg)
+VPSUBSB_128(reg)
   before
     e13a1b5244c40287.fa7f54e428fa40bf.7fcb35dc5af4b548.c2b2019450a6b26a
     ea690608309ea26f.d05e4e6068f6c967.91e7062cff51f453.85c038aff44fbae1
@@ -7215,12 +7215,12 @@
     acf0b3f8eb822e9d.79dcaada66448b24.9c96426e03ab2304.7e2913c6d2a61ebd
     6c1cb199436cf278
   after
-    0000000000000000.0000000000000000.415afee87e1b2a4c.ebc0d45a393a561d
+    0000000000000000.0000000000000000.f551c4befc7fd14f.809725e9227f9c24
     ea690608309ea26f.d05e4e6068f6c967.91e7062cff51f453.85c038aff44fbae1
     6437e51bde59f292.b139ec0e7360a4cf.27bc0be3590b0503.25a315c616a0f544
     acf0b3f8eb822e9d.79dcaada66448b24.9c96426e03ab2304.7e2913c6d2a61ebd
     6c1cb199436cf278
-VPMULLW_128(mem)
+VPSUBSB_128(mem)
   before
     cb49682d85fe2da3.1ee06c09f3a4923c.041305b05caf3b91.4ec0a6379abf8b03
     777cb56cb5698b67.16520cbc904b591a.2ea9787c72ac7043.988834acb9d279ac
@@ -7230,11 +7230,11 @@
   after
     cb49682d85fe2da3.1ee06c09f3a4923c.041305b05caf3b91.4ec0a6379abf8b03
     777cb56cb5698b67.16520cbc904b591a.2ea9787c72ac7043.988834acb9d279ac
-    0000000000000000.0000000000000000.1a8b4140339406f3.d600d8f4f7aed104
+    0000000000000000.0000000000000000.2a96737f16fd357f.80c87f801f137fa9
     262403a04df79e71.09eff3b4005a0244.cf2697a76b8c5725.631dba460127d6aa
     9d83ab446180bd58
 
-VPMULLW_128(reg)
+VPSUBSB_128(reg)
   before
     deb6b59cba091a5f.e130fb6ced33cb0d.bbb231d209da5de9.fea43add878882ad
     8402d4bca84c286b.59737a94eb770cf5.63284641190e0b7e.3cb2e6ba33472129
@@ -7242,12 +7242,12 @@
     6a144302b0364a46.f0c9f9a96f47b553.055ce6c2bbc85225.54ad4615a83aafaf
     e733f36caa881412
   after
-    0000000000000000.0000000000000000.6a60a342ccf00536.6c4ac9423616b207
+    0000000000000000.0000000000000000.5ecc607f5e46b959.e805a0a57f0d727a
     8402d4bca84c286b.59737a94eb770cf5.63284641190e0b7e.3cb2e6ba33472129
     e9b20510c6d8242a.6ab7fb0462cf1b52.5d9d2f6dcb8449ae.651c16288ad3f2c6
     6a144302b0364a46.f0c9f9a96f47b553.055ce6c2bbc85225.54ad4615a83aafaf
     e733f36caa881412
-VPMULLW_128(mem)
+VPSUBSB_128(mem)
   before
     f9789819abc7df18.64728aff03f4d66b.c675f26d2dec9522.b6b269ac87656390
     6649b108c805caf0.3119d6735a9e0346.ca86623db9ca78eb.ceecb398c8e7b89b
@@ -7257,11 +7257,11 @@
   after
     f9789819abc7df18.64728aff03f4d66b.c675f26d2dec9522.b6b269ac87656390
     6649b108c805caf0.3119d6735a9e0346.ca86623db9ca78eb.ceecb398c8e7b89b
-    0000000000000000.0000000000000000.333e7df9c838d636.a81802201423c830
+    0000000000000000.0000000000000000.048070d08cde7fc9.183a80ec4182800b
     c0bf2f5cc4acf2c0.b8726e7186e233cd.c90b93b3a85e371e.a0368d211fcb1d3f
     12e015986c45a531
 
-VPMULLW_128(reg)
+VPSUBSB_128(reg)
   before
     5a9d54c09fd56172.66fc8d9adc2ea711.29bbb2d39396add1.7b174d2f442c8adf
     d3b8460455068daf.d6f44ec97edd6de3.de7eeb5c1464b93a.cbb86d681e63d14b
@@ -7269,12 +7269,12 @@
     cd3b3495b97b23cb.8849efaed6f71cb8.859d2d92e48477ee.b1ecd0bef93925d3
     00160bb333f1ab47
   after
-    0000000000000000.0000000000000000.e9466678939029ec.05a0b3300f0b57d1
+    0000000000000000.0000000000000000.597fbe7f307f804c.1acc7f7f252aac78
     d3b8460455068daf.d6f44ec97edd6de3.de7eeb5c1464b93a.cbb86d681e63d14b
     db7ee8d22a646493.ee75f0d6c8c70061.34051578a6da93b5.94bb7049510ec58e
     cd3b3495b97b23cb.8849efaed6f71cb8.859d2d92e48477ee.b1ecd0bef93925d3
     00160bb333f1ab47
-VPMULLW_128(mem)
+VPSUBSB_128(mem)
   before
     5b079c141a411415.043b28b99ed80603.823dc53cc3797c14.2e922e186beca090
     a089ffcecb351c6a.decabfab760748e6.b61df06bac5adda0.8b301476d6a04b48
@@ -7284,11 +7284,11 @@
   after
     5b079c141a411415.043b28b99ed80603.823dc53cc3797c14.2e922e186beca090
     a089ffcecb351c6a.decabfab760748e6.b61df06bac5adda0.8b301476d6a04b48
-    0000000000000000.0000000000000000.1ee9b014048ad080.01601f10bb805880
+    0000000000000000.0000000000000000.34e02b2fe9e1808c.807fe65e80b47f7f
     53732df9f93bf857.e7c4c7a46d07dc5f.40d03261df6690fa.d1967f65c91b16a8
     72f6fdcf8af9afa9
 
-VPSHUFHW_0x39_128(reg)
+VPSLLD_0x05_128(reg)
   before
     373050c19f52b96f.7b73ef42ae654348.cec73085c4f1a64d.4e3c41ff62aa5b20
     7c8e74a5a4b370a7.fb3573949d631e6f.c8892ce27eddbf96.06c395ef517c1726
@@ -7296,12 +7296,12 @@
     f6e820f8f1bbd91b.772eb200970b6f11.617acec489e8d1ec.e855f876e0fc5185
     c9f801e4b9c14735
   after
-    0000000000000000.0000000000000000.d1ec617acec489e8.e855f876e0fc5185
+    0000000000000000.0000000000000000.2f59d8803d1a3d80.0abf0ec01f8a30a0
     7c8e74a5a4b370a7.fb3573949d631e6f.c8892ce27eddbf96.06c395ef517c1726
     9d5d65e936a712fc.b08435dae14143f9.2f56b729365664e7.4532a81ec7e98039
     f6e820f8f1bbd91b.772eb200970b6f11.617acec489e8d1ec.e855f876e0fc5185
     c9f801e4b9c14735
-VPSHUFHW_0x39_128(mem)
+VPSLLD_0x05_128(mem)
   before
     c5e73d556d441d76.e37d9f3e6f7902b0.2afd64f1dace5ee5.b8416b2112204150
     b8ed2ab319929173.c066e0274f6fc866.a6beca9cc795cc9e.92f68cab6d89f1c0
@@ -7310,12 +7310,12 @@
     c1a8da8f8764d80d
   after
     c5e73d556d441d76.e37d9f3e6f7902b0.2afd64f1dace5ee5.b8416b2112204150
-    0000000000000000.0000000000000000.2afd5ee5dace64f1.b8416b2112204150
+    b8ed2ab319929173.c066e0274f6fc866.a6beca9cc795cc9e.92f68cab6d89f1c0
     7fd742ecd8b75d59.e9f1df1f2a2968ea.c73d5dea796d746a.49e72cce37af1de7
     f47204ebc7bd3d54.b96896929f321ee7.6a469ac80c611375.3a5e47f60c1f0172
     c1a8da8f8764d80d
 
-VPSHUFHW_0x39_128(reg)
+VPSLLD_0x05_128(reg)
   before
     3b11e006440adf63.f488e99c01b2ef8f.8e1803ec4716260a.69a4fe229d7d64eb
     02e455c5e09e5221.5be56eeba3a12d37.c34c2099c162bbff.a12504e547ce25f7
@@ -7323,12 +7323,12 @@
     eafc7ccf23bd6b84.cea94a138d9f407c.bc74609d945f7f0c.2cbbe652593ce282
     3769bbd4f871565a
   after
-    0000000000000000.0000000000000000.7f0cbc74609d945f.2cbbe652593ce282
+    0000000000000000.0000000000000000.8e8c13a08befe180.977cca40279c5040
     02e455c5e09e5221.5be56eeba3a12d37.c34c2099c162bbff.a12504e547ce25f7
     736f3539f7ab6cf3.055710c4c897b477.b352eb06a6a01a71.ee9328fb275e10c5
     eafc7ccf23bd6b84.cea94a138d9f407c.bc74609d945f7f0c.2cbbe652593ce282
     3769bbd4f871565a
-VPSHUFHW_0x39_128(mem)
+VPSLLD_0x05_128(mem)
   before
     eb69226f200b2979.c3d927f203618980.92a698c40dc58c72.390079cc2728267e
     2487970eee16170a.5a50300d30220294.2d1b77c364165584.854034fefa894a71
@@ -7337,12 +7337,12 @@
     e33603dd0eb0010b
   after
     eb69226f200b2979.c3d927f203618980.92a698c40dc58c72.390079cc2728267e
-    0000000000000000.0000000000000000.92a68c720dc598c4.390079cc2728267e
+    2487970eee16170a.5a50300d30220294.2d1b77c364165584.854034fefa894a71
     be8e969d7d9cdc39.0bae968e498c136c.7bd461fdaf9d57df.fe818c9eaa0d2891
     954c9b08eaab3333.323e52e0e72cf9b4.589dd45c0a664dae.fe0f7d1ad241fc8b
     e33603dd0eb0010b
 
-VPSHUFHW_0x39_128(reg)
+VPSLLD_0x05_128(reg)
   before
     07411b53fbe674bc.848b233b504ed924.2b4e616fa98ded17.a0424bce907ef51e
     c87dc0e93470914b.6918a923cc928a37.5228c0a7283c2e41.2e8f423e5df0095b
@@ -7350,12 +7350,12 @@
     8db9a120fdadb8b2.824b9fbe732afc76.9a6e5bc3d3b1829d.9150a1c83f1367ea
     1d5c01ba8adc2994
   after
-    0000000000000000.0000000000000000.829d9a6e5bc3d3b1.9150a1c83f1367ea
+    0000000000000000.0000000000000000.4dcb7860763053a0.2a143900e26cfd40
     c87dc0e93470914b.6918a923cc928a37.5228c0a7283c2e41.2e8f423e5df0095b
     8037ee0956d99463.1fbfa9aa79820299.031a6af502c4f6df.e04f36988ec84590
     8db9a120fdadb8b2.824b9fbe732afc76.9a6e5bc3d3b1829d.9150a1c83f1367ea
     1d5c01ba8adc2994
-VPSHUFHW_0x39_128(mem)
+VPSLLD_0x05_128(mem)
   before
     5f40d25a8e2f48bb.4950d59bc3793ae1.6e8a0849d79735f9.73718f7e368f0e26
     35c88e9464197f8a.114787e447c8569e.be465e39c1d4694f.ea6f0393c8ebd527
@@ -7364,12 +7364,12 @@
     9a41b11fab67eab0
   after
     5f40d25a8e2f48bb.4950d59bc3793ae1.6e8a0849d79735f9.73718f7e368f0e26
-    0000000000000000.0000000000000000.6e8a35f9d7970849.73718f7e368f0e26
+    35c88e9464197f8a.114787e447c8569e.be465e39c1d4694f.ea6f0393c8ebd527
     7abfb2542ba58b2e.41ecb26922264795.504d1f784cee53a3.5bb3b26c2450144c
     09f3bb86fcdf28d3.36895295f3204b72.fe69c7f494efb022.218b9877e64b0740
     9a41b11fab67eab0
 
-VPSHUFLW_0x39_128(reg)
+VPSRLD_0x05_128(reg)
   before
     2122f9d00f30f847.c02e2417f6d412a4.4a6c63d353419be0.a667d098b6e53cf7
     117b6df6ac326eb2.7a3d6af2328f05ce.dadfe291e015768b.2313b850cedcb250
@@ -7377,12 +7377,12 @@
     a1bfc651081381b3.66077935e688f4dc.dea8173af008b84b.0ba412ad4dfa5038
     2e217c29ed39ee1f
   after
-    0000000000000000.0000000000000000.dea8173af008b84b.50380ba412ad4dfa
+    0000000000000000.0000000000000000.06f540b9078045c2.005d2095026fd281
     117b6df6ac326eb2.7a3d6af2328f05ce.dadfe291e015768b.2313b850cedcb250
     c89508fd21fa879d.12ed0702ce1cbc7d.422fca3a36291621.5038f908f7dfd056
     a1bfc651081381b3.66077935e688f4dc.dea8173af008b84b.0ba412ad4dfa5038
     2e217c29ed39ee1f
-VPSHUFLW_0x39_128(mem)
+VPSRLD_0x05_128(mem)
   before
     977cb469f2a9683a.f744a35efd0a96a0.505a3b7695de6818.0a95c5feab3e98b8
     2081375a795578b3.286f9c909d6a0312.adb1c9b1f82bd55c.2344d0f00258f212
@@ -7391,12 +7391,12 @@
     8accfa19ca713169
   after
     977cb469f2a9683a.f744a35efd0a96a0.505a3b7695de6818.0a95c5feab3e98b8
-    0000000000000000.0000000000000000.505a3b7695de6818.0a9598b8ab3ec5fe
+    2081375a795578b3.286f9c909d6a0312.adb1c9b1f82bd55c.2344d0f00258f212
     a6fc80e69d49dbb7.8e8dac5483bf03b3.5ad79fd22a79f7d5.83ff357d91e10105
     06b90bfb7b924d71.87ebcf144c96d42f.319939c547d78aae.8713ef12f566023f
     8accfa19ca713169
 
-VPSHUFLW_0x39_128(reg)
+VPSRLD_0x05_128(reg)
   before
     ea765200ab90c932.1a8354842e3b890e.6dd3013e937ab033.10c414766c4e4a14
     025df432344f0744.bf28d86dd3514cb9.9e913e3df4f7d36b.d122abd1b4ecf233
@@ -7404,12 +7404,12 @@
     ca110327b0da64f4.2d2e7e0f60f156ec.4cc3cb6977eee225.6ca9fe361fcbec4a
     ff6bb1187a23b79a
   after
-    0000000000000000.0000000000000000.4cc3cb6977eee225.ec4a6ca9fe361fcb
+    0000000000000000.0000000000000000.02661e5b03bf7711.03654ff100fe5f62
     025df432344f0744.bf28d86dd3514cb9.9e913e3df4f7d36b.d122abd1b4ecf233
     2ecddb1b0239274b.d27212a285df529f.7473837d0d9a7b82.517f7ac33cbc3f36
     ca110327b0da64f4.2d2e7e0f60f156ec.4cc3cb6977eee225.6ca9fe361fcbec4a
     ff6bb1187a23b79a
-VPSHUFLW_0x39_128(mem)
+VPSRLD_0x05_128(mem)
   before
     e490115469d35a53.327668c2dbbefceb.ad2898a0819415cb.83cf126fd07f45ff
     f8e599d506e491a1.c24806581e7228dc.2e2cdd4104d24b69.73e154fbb4dae0bd
@@ -7418,12 +7418,12 @@
     3839d6f2b51a5605
   after
     e490115469d35a53.327668c2dbbefceb.ad2898a0819415cb.83cf126fd07f45ff
-    0000000000000000.0000000000000000.ad2898a0819415cb.83cf45ffd07f126f
+    f8e599d506e491a1.c24806581e7228dc.2e2cdd4104d24b69.73e154fbb4dae0bd
     1736c68970641aaf.d5d3da5516812771.8c05c7de04bab4f1.79468d77be8aee0b
     1d4f125bc05eafaa.c963df255e783459.a381d4649d550b90.f14aba508a1bac94
     3839d6f2b51a5605
 
-VPSHUFLW_0x39_128(reg)
+VPSRLD_0x05_128(reg)
   before
     a85eddcada12270a.e6fcfb3714df0dbd.f944113593e28a3e.4f6a7fbdecb10d72
     9e07cc42968f5c4e.4e08fc0988f2f015.c0c16cef504b66cd.6c8d45d70cd976c2
@@ -7431,12 +7431,12 @@
     8c104ec7414ae244.6b7136403eff3343.88c38e15d34b9e97.69b10efa32bf6c5e
     014a0adc6e947102
   after
-    0000000000000000.0000000000000000.88c38e15d34b9e97.6c5e69b10efa32bf
+    0000000000000000.0000000000000000.04461c70069a5cf4.034d88770195fb62
     9e07cc42968f5c4e.4e08fc0988f2f015.c0c16cef504b66cd.6c8d45d70cd976c2
     767e9dc8851e317d.314191be37a313de.7c28ecc1314003b1.d6b6a09d1ada01ad
     8c104ec7414ae244.6b7136403eff3343.88c38e15d34b9e97.69b10efa32bf6c5e
     014a0adc6e947102
-VPSHUFLW_0x39_128(mem)
+VPSRLD_0x05_128(mem)
   before
     7a4c102eed66ccc5.3c09daab699faa4f.d865687cb8110c71.3fdf4d59d2fb732b
     b0859ddcc8403bd2.e2b53de096aac64a.54e9a25fc1e55993.ffc825f8c9d9be18
@@ -7445,12 +7445,12 @@
     05471d2f9909b8b0
   after
     7a4c102eed66ccc5.3c09daab699faa4f.d865687cb8110c71.3fdf4d59d2fb732b
-    0000000000000000.0000000000000000.d865687cb8110c71.3fdf732bd2fb4d59
+    b0859ddcc8403bd2.e2b53de096aac64a.54e9a25fc1e55993.ffc825f8c9d9be18
     7fbf2bd31e2e7856.da5f74d267f672e0.bbc960d47688d8d6.22c9125e5473ba0a
     c3c738fd083d407c.80557aed7510eabd.e9d01ec6f2054366.063011f71055a5af
     05471d2f9909b8b0
 
-VCVTPS2DQ_128(reg)
+VPSRAD_0x05_128(reg)
   before
     7c5b32738a1d32bc.58693f47a4784e71.30e14a9d5e82698e.b9cc59235268566e
     c8b94c2d7f1c4d7d.1970bd9e0eeb5f61.4650e34ebedb2cff.09878bd6b2becf1b
@@ -7458,12 +7458,12 @@
     4a7d80b7e70d59d0.94e10a1fbaab7adf.14075964516b6d6f.966dc9eedf70de12
     8a30cd2be5e5ecb5
   after
-    0000000000000000.0000000000000000.0000343900000000.0000000000000000
+    0000000000000000.0000000000000000.00a03acb028b5b6b.fcb36e4ffefb86f0
     c8b94c2d7f1c4d7d.1970bd9e0eeb5f61.4650e34ebedb2cff.09878bd6b2becf1b
     43aa68ca159346a0.e4aa2cec61a32f77.1eee3e6d30a46ebb.b4ce32cb2d126898
     4a7d80b7e70d59d0.94e10a1fbaab7adf.14075964516b6d6f.966dc9eedf70de12
     8a30cd2be5e5ecb5
-VCVTPS2DQ_128(mem)
+VPSRAD_0x05_128(mem)
   before
     6ee3b86f5a7c4fac.3a7d925f9216c2ba.04e3d222340ffbc7.83e72ea1bcbb63c7
     1c5108a45b41c323.6df5992db13bbc09.127a00e0ebdc7059.c9d9bb8e0d218d6e
@@ -7472,12 +7472,12 @@
     361a86b6804999f9
   after
     6ee3b86f5a7c4fac.3a7d925f9216c2ba.04e3d222340ffbc7.83e72ea1bcbb63c7
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    1c5108a45b41c323.6df5992db13bbc09.127a00e0ebdc7059.c9d9bb8e0d218d6e
     724838b803410448.4033928fe107846a.99731047fc1d92c1.412bfc99e1272611
     4b92c4956e87ce45.0f8177f0bd075589.749a7f4282de202c.4727eb2dd45c6c5b
     361a86b6804999f9
 
-VCVTPS2DQ_128(reg)
+VPSRAD_0x05_128(reg)
   before
     6c50c7a0847ce997.82fc2929ba1fdc46.372c46bce2c56d11.81bac8bd9a2cd4c6
     4314ad577a809ae0.f552e15f0016eb78.127ffa5febcf06af.9aa167a560126bba
@@ -7485,12 +7485,12 @@
     497a50ddad2d0a25.faf13f60f04ffa1e.545202db1af5addb.64ef986763d83163
     cdef211bd9cfd96f
   after
-    0000000000000000.0000000000000000.0000000080000000.0000000080000000
+    0000000000000000.0000000000000000.02a2901600d7ad6e.03277cc3031ec18b
     4314ad577a809ae0.f552e15f0016eb78.127ffa5febcf06af.9aa167a560126bba
     19b43147fee2e680.7e606a225e77b607.fdc88f4574b15c0e.9d19d8e4ee9da135
     497a50ddad2d0a25.faf13f60f04ffa1e.545202db1af5addb.64ef986763d83163
     cdef211bd9cfd96f
-VCVTPS2DQ_128(mem)
+VPSRAD_0x05_128(mem)
   before
     b2e5f1ea6c8e5285.2eb4078322ed4179.46d3dd04d1a973ea.73684d8b792a33c2
     f09d83c238225bd3.26ac51a7faafc828.3cd0befa1d91dd96.b6576ec32cd92b6e
@@ -7499,12 +7499,12 @@
     ef32a8cc574315cc
   after
     b2e5f1ea6c8e5285.2eb4078322ed4179.46d3dd04d1a973ea.73684d8b792a33c2
-    0000000000000000.0000000000000000.000069ef80000000.8000000080000000
+    f09d83c238225bd3.26ac51a7faafc828.3cd0befa1d91dd96.b6576ec32cd92b6e
     64e2548e5b96ae82.8baf2ab3d0fedbdf.bab5602ff113f44f.796b60edcf90d18c
     e882de3aeef708c1.ba098f154066b64a.9a4e3e8d683c7341.18f01f77ffda60c7
     ef32a8cc574315cc
 
-VCVTPS2DQ_128(reg)
+VPSRAD_0x05_128(reg)
   before
     597cf65774582c47.59479fb20f4f25ba.10057a38e7749514.b967d4019f171797
     b41c0586f2a4e1e3.93fe12e2daadc19a.e7f1e98861b3b3ea.f3cc9f78b2b19b7e
@@ -7512,12 +7512,12 @@
     aa89567e7e131330.d372ff1adba464bd.8cc4415f3cf59e68.29a8c01bd94f37ae
     dcb90f20256bc54e
   after
-    0000000000000000.0000000000000000.8000000080000000.8000000000000000
+    0000000000000000.0000000000000000.fc66220a01e7acf3.014d4600feca79bd
     b41c0586f2a4e1e3.93fe12e2daadc19a.e7f1e98861b3b3ea.f3cc9f78b2b19b7e
     5b5cd1c46bb46f4d.7373b3b66a1a978c.9c17d77149af4d77.254819dcbb15bd22
     aa89567e7e131330.d372ff1adba464bd.8cc4415f3cf59e68.29a8c01bd94f37ae
     dcb90f20256bc54e
-VCVTPS2DQ_128(mem)
+VPSRAD_0x05_128(mem)
   before
     1a4583d7be76252f.fdef911ec44d0839.90c671fa4a56e358.114421bed510e469
     bf19962cbd7c117d.afda7d11dbee8c13.863d8543d33dd28a.88e375fab08c5925
@@ -7526,12 +7526,12 @@
     3271fb16e9c12e78
   after
     1a4583d7be76252f.fdef911ec44d0839.90c671fa4a56e358.114421bed510e469
-    0000000000000000.0000000000000000.000000000035b8d6.0000000080000000
+    bf19962cbd7c117d.afda7d11dbee8c13.863d8543d33dd28a.88e375fab08c5925
     a700c60b41874664.1e9616c45f83d96c.91a1b7df9164eb7f.4ded38806af63949
     aec88e6063a5800f.a56e58a1eb972ced.8dbf83bca0d7ea62.bdad66ba9ed9c280
     3271fb16e9c12e78
 
-VSUBPS_128(reg)
+VPUNPCKLWD_128(reg)
   before
     0983f4fee73bbada.b03b6a1741e17aaa.9faf3f161cb7c045.566366c51da38d60
     9e304ce032d2a254.8926d61df748f162.6aa5c88d8d6ed31e.c859dae523d38ea4
@@ -7539,12 +7539,12 @@
     728b093f25887440.309450c258c445d9.dfe0ad36a0d26004.176a6b1f3c8f9db1
     ac1e7e10873422d1
   after
-    0000000000000000.0000000000000000.6aa5c89120d26004.c859dae5bc8f9db1
+    0000000000000000.0000000000000000.bf6dc8595d0adae5.cf7323d3aa5b8ea4
     9e304ce032d2a254.8926d61df748f162.6aa5c88d8d6ed31e.c859dae523d38ea4
     4dc4ff2769122192.15564f5ca0e5a163.609dee74da489f24.bf6d5d0acf73aa5b
     728b093f25887440.309450c258c445d9.dfe0ad36a0d26004.176a6b1f3c8f9db1
     ac1e7e10873422d1
-VSUBPS_128(mem)
+VPUNPCKLWD_128(mem)
   before
     5a5314cacb6ef6e7.69d0669405bfd708.b6af55393cf29bef.41bd023f7b97546a
     fcd6a8372547d521.8ee11392a2448599.8372daaf687a5dd1.e47fe7fb0623b501
@@ -7554,11 +7554,11 @@
   after
     5a5314cacb6ef6e7.69d0669405bfd708.b6af55393cf29bef.41bd023f7b97546a
     fcd6a8372547d521.8ee11392a2448599.8372daaf687a5dd1.e47fe7fb0623b501
-    0000000000000000.0000000000000000.36af5539687a5dd1.e47fe7fbfb97546a
+    0000000000000000.0000000000000000.41bde47f023fe7fb.7b970623546ab501
     91f6bade890ca3ab.d2924a3a8965b6c1.611f554505c917ac.59e0563c9dc2b074
     e318d79ae1ecc3a8
 
-VSUBPS_128(reg)
+VPUNPCKLWD_128(reg)
   before
     1d65da5a460d33be.3b2a30efcb0e0a54.a9cbcdbb0a19afb0.2ba1433dafa887fc
     641359ea68b23c61.49dd956592e26cd0.1dff8e95ba4be517.acfba1e3101154c9
@@ -7566,12 +7566,12 @@
     84c1c0264fb70d01.06eb192c22290fef.5187bf061456f2fc.42669ee969b3f389
     1010352299033ed4
   after
-    0000000000000000.0000000000000000.d187bf06ba4be517.c2669ee9e9b3f389
+    0000000000000000.0000000000000000.bff9acfbec23a1e3.45111011393f54c9
     641359ea68b23c61.49dd956592e26cd0.1dff8e95ba4be517.acfba1e3101154c9
     126e52b4e1671c3e.99d9642bfb91844a.8c7a8b35348692a2.bff9ec234511393f
     84c1c0264fb70d01.06eb192c22290fef.5187bf061456f2fc.42669ee969b3f389
     1010352299033ed4
-VSUBPS_128(mem)
+VPUNPCKLWD_128(mem)
   before
     04c12cb8f00ed64b.1759a0ab4e2e4c55.6bdf315622b5c9eb.c8742673f74843d2
     fc46ff998bdf771b.2582ecaf795815e6.a681269417416d69.4c8bbdea78e8bfcf
@@ -7581,11 +7581,11 @@
   after
     04c12cb8f00ed64b.1759a0ab4e2e4c55.6bdf315622b5c9eb.c8742673f74843d2
     fc46ff998bdf771b.2582ecaf795815e6.a681269417416d69.4c8bbdea78e8bfcf
-    0000000000000000.0000000000000000.ebdf3156a2b5c9e9.4c8c37fd7900e425
+    0000000000000000.0000000000000000.c8744c8b2673bdea.f74878e843d2bfcf
     64fc2ae8fa04c274.25b7bde4c5f73372.0afe9cfd528b679d.f06a67a3c75e2bf0
     c6ca73becc4d926d
 
-VSUBPS_128(reg)
+VPUNPCKLWD_128(reg)
   before
     1b849f91df1a15c0.8cc57a2f0770e456.cf5b39ed1e8301c5.eb7115ffd06033ab
     49e6e5899d50f098.28929670c8d3ff40.65bf132613f34805.12c25bc5b366dbeb
@@ -7593,12 +7593,12 @@
     a4cdb49988289d81.27672390d3ab10df.c5fbcdd342ac34fe.9d2e434e1a33aab4
     bbe1dce9d6124a94
   after
-    0000000000000000.0000000000000000.65bf1326c2ac34fe.1d2e4354b366dbeb
+    0000000000000000.0000000000000000.59bd12c2ec3c5bc5.18a8b366198adbeb
     49e6e5899d50f098.28929670c8d3ff40.65bf132613f34805.12c25bc5b366dbeb
     ae3a4313a17b5f9e.122efb975838cf5f.433145f940d245de.59bdec3c18a8198a
     a4cdb49988289d81.27672390d3ab10df.c5fbcdd342ac34fe.9d2e434e1a33aab4
     bbe1dce9d6124a94
-VSUBPS_128(mem)
+VPUNPCKLWD_128(mem)
   before
     8da133f86751b457.89eb3489ede2e7eb.44078c4756387eeb.476aa621b50e510e
     f03cc567eafca529.b7e0bf4d6c357989.43dbb1a9fdecd4af.25cacd4e3383d7bd
@@ -7608,11 +7608,11 @@
   after
     8da133f86751b457.89eb3489ede2e7eb.44078c4756387eeb.476aa621b50e510e
     f03cc567eafca529.b7e0bf4d6c357989.43dbb1a9fdecd4af.25cacd4e3383d7bd
-    0000000000000000.0000000000000000.c2cd9b94fdecd4af.c76aa621351ecc06
+    0000000000000000.0000000000000000.476a25caa621cd4e.b50e3383510ed7bd
     da2e871534c80ba7.627ee8062bd7640f.5a4e201924f72a12.658cf1f4c7d811a2
     7f87e74613cf3d31
 
-VADDPS_128(reg)
+VPUNPCKHWD_128(reg)
   before
     64a21a27dc09c20e.181eaf2c3301f8ac.96bf7dd2a23f344f.2b866101dd66a309
     722a8603bd13dde4.5718015393d65c70.85080d23a46f3d73.4e214f43292bf468
@@ -7620,12 +7620,12 @@
     76b1fb5d39c5c42e.48591582e98578e4.ffdc0f05b65de516.fdb31f84ece81010
     4142fa5c9bf953b0
   after
-    0000000000000000.0000000000000000.ffdc0f05b65de516.fdb31f84ece81010
+    0000000000000000.0000000000000000.89a3850895650d23.ccf5a46fb9273d73
     722a8603bd13dde4.5718015393d65c70.85080d23a46f3d73.4e214f43292bf468
     046b28475378ca60.73e7fa767153f31f.89a39565ccf5b927.a0ec65cb2553d95b
     76b1fb5d39c5c42e.48591582e98578e4.ffdc0f05b65de516.fdb31f84ece81010
     4142fa5c9bf953b0
-VADDPS_128(mem)
+VPUNPCKHWD_128(mem)
   before
     4865713e4d8f5f6a.2347fbb20c8508f9.b338ce611576a8eb.4301796dff31fded
     eee700171eb8f068.697b24b36744d26e.8e51a10114353f62.b15dcf0a42003d57
@@ -7635,11 +7635,11 @@
   after
     4865713e4d8f5f6a.2347fbb20c8508f9.b338ce611576a8eb.4301796dff31fded
     eee700171eb8f068.697b24b36744d26e.8e51a10114353f62.b15dcf0a42003d57
-    0000000000000000.0000000000000000.b338ce611591fc62.4301796dff31fded
+    0000000000000000.0000000000000000.b3388e51ce61a101.15761435a8eb3f62
     873c565990f18fe2.2ce8e26526f0e704.07618731f546914a.7ce82b9528b82397
     90b0295903ba41c4
 
-VADDPS_128(reg)
+VPUNPCKHWD_128(reg)
   before
     3edf030349e57835.32a6169c681916b5.62ba6fefc3f6aa7d.5cf0919810b1c414
     e2c1b5fe94c60295.eca0de84cf03117e.9f5915d4582ae351.93e8a5706c194dfc
@@ -7647,12 +7647,12 @@
     7ccd8d97afd701d5.fd7376f8bd4f579c.a22d9d5fdb51a5b4.1447dc21590d55d9
     1645f7d122b24b26
   after
-    0000000000000000.0000000000000000.a23101b6db4efa27.13a712d26c194dfc
+    0000000000000000.0000000000000000.41119f59d18015d4.811a582acd29e351
     e2c1b5fe94c60295.eca0de84cf03117e.9f5915d4582ae351.93e8a5706c194dfc
     d8a239b682e81c91.91f62affe2bc3e67.4111d180811acd29.87173fa52689ea2f
     7ccd8d97afd701d5.fd7376f8bd4f579c.a22d9d5fdb51a5b4.1447dc21590d55d9
     1645f7d122b24b26
-VADDPS_128(mem)
+VPUNPCKHWD_128(mem)
   before
     69dd0ca19c838740.2a90ac0eb620ee0c.0be53e5a7bc8184a.20fb77dd025ca79b
     e8db977ee38cc656.3e359285344e1fe3.9916ff1338343f9d.15c55a6691c60f8d
@@ -7662,11 +7662,11 @@
   after
     69dd0ca19c838740.2a90ac0eb620ee0c.0be53e5a7bc8184a.20fb77dd025ca79b
     e8db977ee38cc656.3e359285344e1fe3.9916ff1338343f9d.15c55a6691c60f8d
-    0000000000000000.0000000000000000.9916ff137bc8184a.20fb77e091c60f8d
+    0000000000000000.0000000000000000.0be599163e5aff13.7bc83834184a3f9d
     df38010b4b783d21.0757a427038b3c1f.a2e859372112aae0.d8802c4a58e8ff3d
     5d09127dc8b80053
 
-VADDPS_128(reg)
+VPUNPCKHWD_128(reg)
   before
     cabef26a11175623.0e2fd794a373ec2e.756dc8298cb1a0dd.d421ea7b859d6629
     7cedc77fce923e58.d9bc13d938d58fe6.b996a3ddfbec38ea.f64a64c4584a77c6
@@ -7674,12 +7674,12 @@
     1ae441ce1609b4a4.b7c8ae468c049b06.324f6e08fdd3f3a3.769b0019bd3b88ae
     8d5b1afc8797ff51
   after
-    0000000000000000.0000000000000000.b996a23efde2b732.75d736dc584a77c6
+    0000000000000000.0000000000000000.2e1db99631aea3dd.edc9fbec40f338ea
     7cedc77fce923e58.d9bc13d938d58fe6.b996a3ddfbec38ea.f64a64c4584a77c6
     cde08e279cb4f49f.1eab31c527acdf75.2e1d31aeedc940f3.e32e42ffb72599e4
     1ae441ce1609b4a4.b7c8ae468c049b06.324f6e08fdd3f3a3.769b0019bd3b88ae
     8d5b1afc8797ff51
-VADDPS_128(mem)
+VPUNPCKHWD_128(mem)
   before
     023b0d963046bcf8.bf45dee0d81eb912.82de054882e77dc5.20785757c8978ea7
     b30753d2d45378d1.184f60c97f7e4096.59bbb2b5256442e0.53e4e707eaa04daa
@@ -7689,11 +7689,11 @@
   after
     023b0d963046bcf8.bf45dee0d81eb912.82de054882e77dc5.20785757c8978ea7
     b30753d2d45378d1.184f60c97f7e4096.59bbb2b5256442e0.53e4e707eaa04daa
-    0000000000000000.0000000000000000.59bbb2b5256442e0.53e4e707eaa04daa
+    0000000000000000.0000000000000000.82de59bb0548b2b5.82e725647dc542e0
     3592cddf80b7e4c2.568d04d0eb50c38e.9ff5fe83e45564d4.fdb5ec3aa0b22560
     2ab15a956dd3b76b
 
-VMULPS_128(reg)
+VPADDUSB_128(reg)
   before
     0e205e0200695d24.beeaf989bf270b34.f35a1dc7e8da385b.c6eb96bd38e23a06
     034ef6ebf500523a.f25d68866a252387.b4ff0c4439e01eed.69d77413a937e143
@@ -7701,12 +7701,12 @@
     9417d0e678641c28.ccc7042471fc157e.12045a84488d2f12.97c0f3c2546b998c
     d9568bf4c66221f0
   after
-    0000000000000000.0000000000000000.8783dc8142f7347c.c2226435be293a13
+    0000000000000000.0000000000000000.c6ff66c881ff4dff.ffffffd5fda2ffcf
     034ef6ebf500523a.f25d68866a252387.b4ff0c4439e01eed.69d77413a937e143
     67871ebeea25d357.aeb898c09bbee8e6.f5c9ccb57aedb1f1.65851470546118b6
     9417d0e678641c28.ccc7042471fc157e.12045a84488d2f12.97c0f3c2546b998c
     d9568bf4c66221f0
-VMULPS_128(mem)
+VPADDUSB_128(mem)
   before
     08115af2c5516c0f.e74a0acf3d476858.2956289f06ee677a.67fbb01f3e4cd2fd
     00bedba86d443615.bd6bc6e4d55cf494.a131801b769d9907.50fcccf1f9b7d65e
@@ -7716,11 +7716,11 @@
   after
     08115af2c5516c0f.e74a0acf3d476858.2956289f06ee677a.67fbb01f3e4cd2fd
     00bedba86d443615.bd6bc6e4d55cf494.a131801b769d9907.50fcccf1f9b7d65e
-    0000000000000000.0000000000000000.8b147d413e12c3f8.79788adcf8931656
+    0000000000000000.0000000000000000.ca87a8ba7cffff81.b7ffffffffffffff
     bc1ee4ec2b673584.5dabba48eb4abcde.53f9beca59679182.4e4843ea2cbff530
     1b2b96e9dc7387f9
 
-VMULPS_128(reg)
+VPADDUSB_128(reg)
   before
     eb479fcfc1046be8.3768635378b0e245.e161e86da23b6f45.44809bd5049acdc9
     1ce7590976fbdca8.ebd58521de2cff9d.56368a6f9c8e5267.c0829c92fabbdb50
@@ -7728,12 +7728,12 @@
     0de8d025c250584e.6e43a0a667f273c1.866c17bbc686978e.c929fcd239f758d0
     0e67512db92b4021
   after
-    0000000000000000.0000000000000000.9d28588a2395a6c7.4a2d74b3f53581c6
+    0000000000000000.0000000000000000.dca2a1ffffffe9f5.ffabffffffffffff
     1ce7590976fbdca8.ebd58521de2cff9d.56368a6f9c8e5267.c0829c92fabbdb50
     0959c00198e617e7.b42fc5447ae946b8.19759bba74cda1f1.a3cc3eed58d67544
     0de8d025c250584e.6e43a0a667f273c1.866c17bbc686978e.c929fcd239f758d0
     0e67512db92b4021
-VMULPS_128(mem)
+VPADDUSB_128(mem)
   before
     4e50bceaf67ee863.86df86df91c6db8c.f5dd9035c25444e5.f965fbdc2f4572eb
     65b1b6f609fa0dc1.cf8bdc9da0d3db4a.25c913dca71a734f.ceae418b4a956bb4
@@ -7743,11 +7743,11 @@
   after
     4e50bceaf67ee863.86df86df91c6db8c.f5dd9035c25444e5.f965fbdc2f4572eb
     65b1b6f609fa0dc1.cf8bdc9da0d3db4a.25c913dca71a734f.ceae418b4a956bb4
-    0000000000000000.0000000000000000.dc2e076a2a00110e.7f8000003a667de9
+    0000000000000000.0000000000000000.ffffa3ffff6eb7ff.ffffffff79daddff
     880c4ba727a2bd83.40325dd2efe345fd.f0c6bf227c03dea8.0f5be8400818ae38
     3257401ee364704b
 
-VMULPS_128(reg)
+VPADDUSB_128(reg)
   before
     27d3ec39e071407a.4c9cdf2469e6c13f.20c5802168fd2649.4370e199a43e91ee
     4a19e6fd9ccb5d71.57d5f2a0f28431c7.413c332391e075c6.af9b84d8c70d932b
@@ -7755,12 +7755,12 @@
     8937b930bf986965.b16e89424bff47ee.b10a3ef0642a4d05.41a7425e67997438
     2020557e1e6dca61
   after
-    0000000000000000.0000000000000000.b2cb43abb69551bd.b1cb37f5ef29ba75
+    0000000000000000.0000000000000000.f24671fff5ffc2cb.f0ffc6ffffa6ff63
     4a19e6fd9ccb5d71.57d5f2a0f28431c7.413c332391e075c6.af9b84d8c70d932b
     f6772cd6b2ff01db.84810106df88c949.fde5744406156e21.0f1426cbfe7da08a
     8937b930bf986965.b16e89424bff47ee.b10a3ef0642a4d05.41a7425e67997438
     2020557e1e6dca61
-VMULPS_128(mem)
+VPADDUSB_128(mem)
   before
     884ad9153e065f30.5ea68a785e23d1ba.b966054053f465e5.baf88d9446ab4d1f
     54f34c11e46fefd2.d11099182b2b7487.7836f1ec1273e058.72fb5e9a4922ab1b
@@ -7770,11 +7770,11 @@
   after
     884ad9153e065f30.5ea68a785e23d1ba.b966054053f465e5.baf88d9446ab4d1f
     54f34c11e46fefd2.d11099182b2b7487.7836f1ec1273e058.72fb5e9a4922ab1b
-    0000000000000000.0000000000000000.f224611a26e8d2e6.ee740eaa5059b298
+    0000000000000000.0000000000000000.ff9cf6ff65ffffff.ffffebff8fcdf83a
     8dedece52fe2ee3d.01046614c2e25e38.8a8d0afe2741db63.636f728020287067
     5379af382ccd5010
 
-VMAXPS_128(reg)
+VPMULHUW_128(reg)
   before
     63c75c03c99a7c4a.b0d711950d04d65e.75261b48c3aa1d74.96ad2f3db5a8d454
     efa6764d921b33c1.a96f1559e026a802.f8740085621f07d7.c8d4b4d96ac81a71
@@ -7782,12 +7782,12 @@
     ec47e30e1a652d19.89d8a7cdd89cfe82.97be46caed424ec4.126bceddbb697ce2
     e2725c1b8f010f8d
   after
-    0000000000000000.0000000000000000.97be46ca621f07d7.126bcedd6ac81a71
+    0000000000000000.0000000000000000.934400245aef0269.0e7292224e2b0ce6
     efa6764d921b33c1.a96f1559e026a802.f8740085621f07d7.c8d4b4d96ac81a71
     5362fa8224daaf22.5280731dc5552255.e5380f373cce590e.fed015c063af68e7
     ec47e30e1a652d19.89d8a7cdd89cfe82.97be46caed424ec4.126bceddbb697ce2
     e2725c1b8f010f8d
-VMAXPS_128(mem)
+VPMULHUW_128(mem)
   before
     48b03a68fa83e014.14a02d5d1048e952.28412d553408f8b6.6c54a0aa0f0724a7
     22f3e4af18fba9a5.28bbd5dba30e1f78.0d8882a2f5a3ce1d.be451a4341aa1560
@@ -7797,11 +7797,11 @@
   after
     48b03a68fa83e014.14a02d5d1048e952.28412d553408f8b6.6c54a0aa0f0724a7
     22f3e4af18fba9a5.28bbd5dba30e1f78.0d8882a2f5a3ce1d.be451a4341aa1560
-    0000000000000000.0000000000000000.28412d553408f8b6.6c54a0aa41aa1560
+    0000000000000000.0000000000000000.0220172131ecc83e.5083107b03da030f
     9db48ddbe0ff168f.84622b150f73e73c.15e08537189cf931.4e675a513fb73a0a
     4230199e4339e753
 
-VMAXPS_128(reg)
+VPMULHUW_128(reg)
   before
     2484e753c7c99f23.f8ca8498c1a33241.8488d2a91f2bf133.f0892d57b111c738
     51aec1de64f39e27.35143700c56d36ac.e09dc71b3cf666c8.803f92ec21e65f21
@@ -7809,12 +7809,12 @@
     f8b985235f416579.c973c17da8a3e85b.1bcc874e0cf67c79.30068722efe1e04a
     07ae0f9b872040e3
   after
-    0000000000000000.0000000000000000.1bcc874e3cf666c8.3006872221e65f21
+    0000000000000000.0000000000000000.1863693b031631f9.180e4d8d1fc35358
     51aec1de64f39e27.35143700c56d36ac.e09dc71b3cf666c8.803f92ec21e65f21
     23fca1aab841220a.315d22fd0969dffb.f4f004d9026180a6.a2d032e181287e18
     f8b985235f416579.c973c17da8a3e85b.1bcc874e0cf67c79.30068722efe1e04a
     07ae0f9b872040e3
-VMAXPS_128(mem)
+VPMULHUW_128(mem)
   before
     0394463864ee5b0e.2a3068b5f47fa41f.d721916abf280ff7.b37c4be6f64395ee
     0084a6e5a259edf8.16ae46cc13851ba9.38320db269030efc.174d4c0d5dd409b1
@@ -7824,11 +7824,11 @@
   after
     0394463864ee5b0e.2a3068b5f47fa41f.d721916abf280ff7.b37c4be6f64395ee
     0084a6e5a259edf8.16ae46cc13851ba9.38320db269030efc.174d4c0d5dd409b1
-    0000000000000000.0000000000000000.38320db269030efc.174d4c0d5dd409b1
+    0000000000000000.0000000000000000.2f3907c74e6900ef.1056168c5a4205ad
     6eb1d620b43465b7.8defe539621f9f18.63b0f900e8ed86f0.b382f6b810efeccf
     a27e97159492d583
 
-VMAXPS_128(reg)
+VPMULHUW_128(reg)
   before
     cecb65b004a70734.96869d86bfbcc3e5.cf4a9d68c9c92555.e5b562def5137737
     92b45cf7febdbe8f.2f957eab9b108881.3bdb40cb2a6dd225.2a4e66c605c03196
@@ -7836,12 +7836,12 @@
     518eb735f915aff1.24917fe7384e36b5.01d338e14cd19431.6d6b3564a0dcef4f
     2387f6f262636b00
   after
-    0000000000000000.0000000000000000.3bdb40cb4cd19431.6d6b356405c03196
+    0000000000000000.0000000000000000.006d0e650cba79a5.1214156f039c2e5a
     92b45cf7febdbe8f.2f957eab9b108881.3bdb40cb2a6dd225.2a4e66c605c03196
     498779541b5d383f.15aaf67d653d6fb8.2df0cad02297e335.0e4683a435fe703a
     518eb735f915aff1.24917fe7384e36b5.01d338e14cd19431.6d6b3564a0dcef4f
     2387f6f262636b00
-VMAXPS_128(mem)
+VPMULHUW_128(mem)
   before
     0c67443b98a1a07a.0416110534706050.381697d5314f97a5.13d1856c45aa21c4
     04d799295ea249e8.c06b863067fb8709.2c04ba336b4c4eb4.bf36addca8abc59b
@@ -7851,11 +7851,11 @@
   after
     0c67443b98a1a07a.0416110534706050.381697d5314f97a5.13d1856c45aa21c4
     04d799295ea249e8.c06b863067fb8709.2c04ba336b4c4eb4.bf36addca8abc59b
-    0000000000000000.0000000000000000.381697d56b4c4eb4.13d1856c45aa21c4
+    0000000000000000.0000000000000000.09a46e6f14aa2e9e.0ecd5a9c2de61a10
     91964ea90719eb53.bfabaa4726ce2638.294f0def146db2dd.55647e1b1e5a45c3
     f7c620c2691f996d
 
-VMINPS_128(reg)
+VPADDUSW_128(reg)
   before
     a3be8dfe8e3ef40a.de7ea41223a95aa7.ba2e510beb2f1506.e9433625bba7d64f
     b599c13c2a429347.a925f3d03e2a2fa0.2eaf02da17ef6bde.fad1597b130e4090
@@ -7863,12 +7863,12 @@
     7b286f69342b8c4f.2ee36901e435f62f.ecd6704a1bbd375a.7eea7e384891d92e
     aa0e77775cc580e2
   after
-    0000000000000000.0000000000000000.ecd6704a17ef6bde.fad1597b130e4090
+    0000000000000000.0000000000000000.ffff732433aca338.ffffd7b35b9fffff
     b599c13c2a429347.a925f3d03e2a2fa0.2eaf02da17ef6bde.fad1597b130e4090
     89a3b8e6d8b8b1cf.d058b6d175aa2469.7578b920499a626b.38c5f2de39aeadcb
     7b286f69342b8c4f.2ee36901e435f62f.ecd6704a1bbd375a.7eea7e384891d92e
     aa0e77775cc580e2
-VMINPS_128(mem)
+VPADDUSW_128(mem)
   before
     97fb5b8692565d16.e774e132db275e73.9e92884aa5d5601d.f01425c229e32656
     207ea551064f2ef4.28d20aac693864e6.fe319099d7981f60.db80d3f610986b0c
@@ -7878,11 +7878,11 @@
   after
     97fb5b8692565d16.e774e132db275e73.9e92884aa5d5601d.f01425c229e32656
     207ea551064f2ef4.28d20aac693864e6.fe319099d7981f60.db80d3f610986b0c
-    0000000000000000.0000000000000000.fe319099d7981f60.f01425c210986b0c
+    0000000000000000.0000000000000000.ffffffffffff7f7d.fffff9b83a7b9162
     7a765ccb15a9965f.9ef87162a7cbfb6b.fa6e48faf7b68c94.d90e0a3fd6e1e554
     a5c88c2bef8c923f
 
-VMINPS_128(reg)
+VPADDUSW_128(reg)
   before
     c8dff6834ff78693.0382c152e923a645.8957a877906503d5.4fa4f0e31f28b1dd
     9f9f46b394adfbfd.98557c456a359985.bbf986edcf44303e.02fa708326ec1c2b
@@ -7890,12 +7890,12 @@
     d94986463c2b5ac1.5a7be520e55217c5.603527adc201e5c0.f636ea95439cae84
     efb3dbdf909f4ee7
   after
-    0000000000000000.0000000000000000.bbf986edcf44303e.f636ea9526ec1c2b
+    0000000000000000.0000000000000000.ffffae9affffffff.f930ffff6a88caaf
     9f9f46b394adfbfd.98557c456a359985.bbf986edcf44303e.02fa708326ec1c2b
     865378255a3a2d28.17b90a90b5eb2b4c.8f2a073101f4bd53.f13c45c5290f86a9
     d94986463c2b5ac1.5a7be520e55217c5.603527adc201e5c0.f636ea95439cae84
     efb3dbdf909f4ee7
-VMINPS_128(mem)
+VPADDUSW_128(mem)
   before
     b681948f2d2523ff.f4cb6e82d60bbc74.3f678bdf17751b1e.8c68e3ceacf8e530
     286a92913639e9f7.33262b46c56790ec.a04977bb6661f080.6d0d36015e65f850
@@ -7905,11 +7905,11 @@
   after
     b681948f2d2523ff.f4cb6e82d60bbc74.3f678bdf17751b1e.8c68e3ceacf8e530
     286a92913639e9f7.33262b46c56790ec.a04977bb6661f080.6d0d36015e65f850
-    0000000000000000.0000000000000000.a04977bb17751b1e.8c68e3ceacf8e530
+    0000000000000000.0000000000000000.dfb0ffff7dd6ffff.f975ffffffffffff
     7ec04a3bf93d373a.8d97141211bf7ddd.4a1e1176cdc10415.c2e0914983cd4a4f
     eea6913630e20186
 
-VMINPS_128(reg)
+VPADDUSW_128(reg)
   before
     3f0e19e5139bbc1c.19c5fcbcec4437dc.604538f3a5d50eae.4aaab82e1d4dbaa0
     126624c1c986b6be.d016e23eba09170f.c7fb220bfe9601f5.375b95b2fad233e5
@@ -7917,12 +7917,12 @@
     af11b3b01b2059d4.fdcb3cfa59ff6bd6.c0b335906d49fc92.495fe1cecdf55d4f
     254a483efaab86cb
   after
-    0000000000000000.0000000000000000.c7fb220bfe9601f5.375b95b2fad233e5
+    0000000000000000.0000000000000000.ffff579bfffffe87.80baffffffff9134
     126624c1c986b6be.d016e23eba09170f.c7fb220bfe9601f5.375b95b2fad233e5
     c4f8ae36ed2e2c17.7d7e79af809995fe.1e07cdc6b78e925d.eefe24ee815b2b10
     af11b3b01b2059d4.fdcb3cfa59ff6bd6.c0b335906d49fc92.495fe1cecdf55d4f
     254a483efaab86cb
-VMINPS_128(mem)
+VPADDUSW_128(mem)
   before
     5e8ad62b258961b3.30fd309bf0e77ba1.2cc7a70a624855c3.0b4c57d5bb547c42
     d0ed067f6a9bac31.a3081f64080fcc29.e63f36cdb67f11f0.5a1e2d013e3a4d17
@@ -7932,11 +7932,11 @@
   after
     5e8ad62b258961b3.30fd309bf0e77ba1.2cc7a70a624855c3.0b4c57d5bb547c42
     d0ed067f6a9bac31.a3081f64080fcc29.e63f36cdb67f11f0.5a1e2d013e3a4d17
-    0000000000000000.0000000000000000.e63f36cdb67f11f0.0b4c57d5bb547c42
+    0000000000000000.0000000000000000.ffffddd7ffff67b3.656a84d6f98ec959
     cf473c10af8e7ca1.d0ab483b6eb4ed1c.6bd2b119b1e8eabc.739deabf51c9d6e1
     f6e1c8281989052f
 
-VSHUFPS_0x39_128(reg)
+VPMULLW_128(reg)
   before
     ed8e4c2986557552.14d73b25e8857bea.41da7a23f54935df.ee86957a903280b3
     b3f1712d33b764f7.02b9cc52aae1d87b.14580e982e6e9d0e.6ce58d3e2a9ad69b
@@ -7944,12 +7944,12 @@
     20038eedbe73a976.49a294a43bf69f1f.507151d8289ebc5e.c9d8aa9a01f5b5ec
     6003c70c7501b5ad
   after
-    0000000000000000.0000000000000000.01f5b5ec507151d8.2e6e9d0e6ce58d3e
+    0000000000000000.0000000000000000.7ad86840d7e4f324.ae38234c5f626de4
     b3f1712d33b764f7.02b9cc52aae1d87b.14580e982e6e9d0e.6ce58d3e2a9ad69b
     a654339fbc3e0cca.75b96b8312ad507e.a5710205b6b16154.c1bd164f9b2da99f
     20038eedbe73a976.49a294a43bf69f1f.507151d8289ebc5e.c9d8aa9a01f5b5ec
     6003c70c7501b5ad
-VSHUFPS_0x39_128(mem)
+VPMULLW_128(mem)
   before
     6209e890155a670f.7f4c7e82d5e479a8.5a42c3a142c7808c.71a4f77c21c0ebd7
     abb88a11fc0e853e.1d7a00ca9c1db60b.84637566422cb0ee.6456f15d3ca32a6c
@@ -7959,11 +7959,11 @@
   after
     6209e890155a670f.7f4c7e82d5e479a8.5a42c3a142c7808c.71a4f77c21c0ebd7
     abb88a11fc0e853e.1d7a00ca9c1db60b.84637566422cb0ee.6456f15d3ca32a6c
-    0000000000000000.0000000000000000.5a42c3a121c0ebd7.6456f15d422cb0ee
+    0000000000000000.0000000000000000.ef868726c834c228.3d18a40c7d40c4b4
     813d3dbf12b5f7b1.8ab3a624ab136916.925b4ff99fe4ed48.3065ce874addc799
     c15ba9a7754c9c89
 
-VSHUFPS_0x39_128(reg)
+VPMULLW_128(reg)
   before
     9400c7b432ad7244.c7ab47c377c0c34d.1057c40d2be95816.2fca6f9e334e7196
     05a0251b1d8a8477.c4f1c1759556ec66.4710625accb7a4f8.55ea02bc317d348b
@@ -7971,12 +7971,12 @@
     30018da3f0ee49f4.5234f694665043be.33f113ccdf684510.ab716e0fda576619
     946f3f1dbc1b4d0a
   after
-    0000000000000000.0000000000000000.da57661933f113cc.ccb7a4f855ea02bc
+    0000000000000000.0000000000000000.16100db893582780.3a4af104437b8393
     05a0251b1d8a8477.c4f1c1759556ec66.4710625accb7a4f8.55ea02bc317d348b
     6f87bd46d3720dce.53db27c186812d28.892a7e7529088967.e089833db57cf153
     30018da3f0ee49f4.5234f694665043be.33f113ccdf684510.ab716e0fda576619
     946f3f1dbc1b4d0a
-VSHUFPS_0x39_128(mem)
+VPMULLW_128(mem)
   before
     754f725378d36352.a359919d0f8c7696.9ccaa8d851ccea54.a2b01dca8964129f
     2cdd849d2a8c631c.24dcc3a0ccd7ce5f.0c67bb7a6503de18.30b498dac4872dbf
@@ -7986,11 +7986,11 @@
   after
     754f725378d36352.a359919d0f8c7696.9ccaa8d851ccea54.a2b01dca8964129f
     2cdd849d2a8c631c.24dcc3a0ccd7ce5f.0c67bb7a6503de18.30b498dac4872dbf
-    0000000000000000.0000000000000000.9ccaa8d88964129f.30b498da6503de18
+    0000000000000000.0000000000000000.8d463ef07164cfe0.63c04e0403bcd7a1
     8832321ddd2e15e8.bf93a67192a6f218.d2eaf28a71cf9cd4.1cbbd2e55b733c63
     325689b7ef54a840
 
-VSHUFPS_0x39_128(reg)
+VPMULLW_128(reg)
   before
     d866a24d838d525f.e591c62b172f3d42.915f4e17d3413560.e0670ecea37ddd25
     6a361711b4a8756b.88ce28feb66141ce.e285157623b99480.841b7a216c155c53
@@ -7998,12 +7998,12 @@
     c24a0ad75cba19fb.0c12489f9585c82f.6d13f1105d7396f6.025c32a13534fff4
     948177a66cd39cbf
   after
-    0000000000000000.0000000000000000.3534fff46d13f110.23b99480841b7a21
+    0000000000000000.0000000000000000.70df6d60411bb300.afb440c14d44ac1c
     6a361711b4a8756b.88ce28feb66141ce.e285157623b99480.841b7a216c155c53
     4414e6701e344e10.4bb5d580d7cfdbb9.0d53f8fa1c9b4b23.9cd4b26ee9a4d389
     c24a0ad75cba19fb.0c12489f9585c82f.6d13f1105d7396f6.025c32a13534fff4
     948177a66cd39cbf
-VSHUFPS_0x39_128(mem)
+VPMULLW_128(mem)
   before
     2c0dfb6aab8d6618.40257fb00ac812d8.a5b1fd450d90c35b.6012fe227fcbb0a5
     a7cd3cd70d6d1828.1af14169c5e97453.f35e71605afb8a6a.409c1a9e2031d6db
@@ -8013,11 +8013,11 @@
   after
     2c0dfb6aab8d6618.40257fb00ac812d8.a5b1fd450d90c35b.6012fe227fcbb0a5
     a7cd3cd70d6d1828.1af14169c5e97453.f35e71605afb8a6a.409c1a9e2031d6db
-    0000000000000000.0000000000000000.a5b1fd457fcbb0a5.409c1a9e5afb8a6a
+    0000000000000000.0000000000000000.d9fe6ee0ec30f1ae.0af84cfcd5db0b27
     b718e360adcf2623.528b9d28d09566d0.1f1082a2e52367df.3b8170814e55358e
     0d73a2bf132be763
 
-VPCMPEQB_128(reg)
+VPSHUFHW_0x39_128(reg)
   before
     3e20d317c63e936f.033c4153216afb66.68f22f0659386e2b.b4ae18a15af7f59e
     28d500f5031b785f.a2c34ba12a5ca811.4a79fe735d1fcfd4.6e8a5cc4155b3eef
@@ -8025,12 +8025,12 @@
     9a823aee8e60d89a.492d53fb65717c51.e11a44aa4ce68fbe.c22cdf27cc06f1fa
     1389163eff63d20b
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.8fbee11a44aa4ce6.c22cdf27cc06f1fa
     28d500f5031b785f.a2c34ba12a5ca811.4a79fe735d1fcfd4.6e8a5cc4155b3eef
     28dc23c3674dd0df.707a7d35e1afe950.536d07db7bd5c676.2970cbf7325cfeff
     9a823aee8e60d89a.492d53fb65717c51.e11a44aa4ce68fbe.c22cdf27cc06f1fa
     1389163eff63d20b
-VPCMPEQB_128(mem)
+VPSHUFHW_0x39_128(mem)
   before
     f954eb2ae8815e5e.da1240e213e1cc3d.09a849dfcfad1b3d.4fccb34c6fde6558
     5059dbd5a36b5120.45da310c925be873.8cb7dccd3d708343.f9ce4f2e7d4a85ef
@@ -8039,12 +8039,12 @@
     f5b30b854cbaf85e
   after
     f954eb2ae8815e5e.da1240e213e1cc3d.09a849dfcfad1b3d.4fccb34c6fde6558
-    5059dbd5a36b5120.45da310c925be873.8cb7dccd3d708343.f9ce4f2e7d4a85ef
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.09a81b3dcfad49df.4fccb34c6fde6558
+    f464602d4a2e667d.352409d6a85b67e9.ae2587b1cbc5708d.3a6e15ba14b52b30
     c141f81dfcd55ba1.073dc5aef06b864b.4bc0c67794b89d47.70f6ff5ed0ac93c6
     f5b30b854cbaf85e
 
-VPCMPEQB_128(reg)
+VPSHUFHW_0x39_128(reg)
   before
     27f1349a256b97a3.93bc1e91d26ceab7.177260ff07198044.3f52160cb556c79e
     61fc760bf64cac42.46a04e75eb00cfeb.c10cd63588f19381.66a8f15a49aaaabe
@@ -8052,12 +8052,12 @@
     5ba836aef1cb263d.bed7bd3d504c8f60.53a744003a4cef75.bdd03dd53ba58a08
     a53aa5dad264ff89
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.ef7553a744003a4c.bdd03dd53ba58a08
     61fc760bf64cac42.46a04e75eb00cfeb.c10cd63588f19381.66a8f15a49aaaabe
     fe20cd435be872e7.b5bb05b5609cc86a.615a23bc107ef9ad.9c8ed54f6cc001d3
     5ba836aef1cb263d.bed7bd3d504c8f60.53a744003a4cef75.bdd03dd53ba58a08
     a53aa5dad264ff89
-VPCMPEQB_128(mem)
+VPSHUFHW_0x39_128(mem)
   before
     30978a494b091c83.d5e2acb8538204f1.3cc1f4f9d41de1f8.f33e336da3e7b085
     39b4670ec5a19f22.c6182bce1e9848af.0b4525d60a1a795f.9d6dee6fe6dc7988
@@ -8066,12 +8066,12 @@
     6e79ba2ce64a5bff
   after
     30978a494b091c83.d5e2acb8538204f1.3cc1f4f9d41de1f8.f33e336da3e7b085
-    39b4670ec5a19f22.c6182bce1e9848af.0b4525d60a1a795f.9d6dee6fe6dc7988
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.3cc1e1f8d41df4f9.f33e336da3e7b085
+    9e5db7155a374291.8c97af5aee992d22.072fcdbe0e4f14c1.ad7e7072a0b6862b
     3a5ef94a26d7c2fd.81ab34c95d11f0f6.0b4a669ffbc96e49.7fbeb6e36c011319
     6e79ba2ce64a5bff
 
-VPCMPEQB_128(reg)
+VPSHUFHW_0x39_128(reg)
   before
     d8fa7abbab1c9b89.e983a699468eda92.02a0b7880a8dcdd9.f5646e63ee934324
     188ff1fa57040f62.86983ceed567477b.6cc133028e99ff75.a04760f802b94e7d
@@ -8079,12 +8079,12 @@
     8920f53dd14382b3.fec10f5bb2b010fb.66bb06d6918e5589.a89bf342fe4bf95b
     bea48bcf1ece1139
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.558966bb06d6918e.a89bf342fe4bf95b
     188ff1fa57040f62.86983ceed567477b.6cc133028e99ff75.a04760f802b94e7d
     8a821b57858df337.ef693536f06ec5e5.195ca4a288bfc376.e7c0b84953484d81
     8920f53dd14382b3.fec10f5bb2b010fb.66bb06d6918e5589.a89bf342fe4bf95b
     bea48bcf1ece1139
-VPCMPEQB_128(mem)
+VPSHUFHW_0x39_128(mem)
   before
     04a6fedcd0de4f44.73b57918d8b3f983.916d464b3838e3ea.af2b5609478ff15a
     586fc755308670ab.a38da55435679452.823954f09d12fcdd.50f88fa74650d294
@@ -8093,12 +8093,12 @@
     dc84883c0d867074
   after
     04a6fedcd0de4f44.73b57918d8b3f983.916d464b3838e3ea.af2b5609478ff15a
-    586fc755308670ab.a38da55435679452.823954f09d12fcdd.50f88fa74650d294
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.916de3ea3838464b.af2b5609478ff15a
+    94c9622659d33097.74f4745d85ee8ecd.aff1b738fd4b1401.a56ead1c295c35e4
     95814c3c67cf4a37.4436e39f63d124a0.f261ea0e75eeea82.0bd9acd48d3f56f5
     dc84883c0d867074
 
-VMOVHPD_128_StoreForm(reg)
+VPSHUFLW_0x39_128(reg)
   before
     75bd3ebe45bcc10d.3863008177897cb5.6d9eec876c9e9276.2954695e2108388b
     32cec9c8d26d836b.573bfae3a40a7f3e.4d798d7f3be014fc.2e98b0141ca3bb49
@@ -8106,12 +8106,12 @@
     88ab4e205a724c28.7dfdb0aac796ef1f.9eb884539df542c7.163e876270925093
     b0390fd302fdd976
   after
-    75bd3ebe45bcc10d.3863008177897cb5.6d9eec876c9e9276.2954695e2108388b
+    0000000000000000.0000000000000000.9eb884539df542c7.5093163e87627092
     32cec9c8d26d836b.573bfae3a40a7f3e.4d798d7f3be014fc.2e98b0141ca3bb49
     6f0425c45026f23b.d0d5b64d0b6012fd.3e13c1f56d24e5de.dff73c1c82ce2fe8
     88ab4e205a724c28.7dfdb0aac796ef1f.9eb884539df542c7.163e876270925093
     b0390fd302fdd976
-VMOVHPD_128_StoreForm(mem)
+VPSHUFLW_0x39_128(mem)
   before
     89b44f59521a87bf.d80e41478cdecbdf.3b7e65e8f4b8d3cf.c7b4d20768df6764
     7e7bc4e17ff61597.bd7bf8a483f5ab0c.e6254ff2afd37a3a.1753a87c696f8f60
@@ -8119,13 +8119,13 @@
     271c39a9da18c5ab.b39fa8b52e548275.7415b81a3e2200f0.97a9d9597faedb27
     81f82c99cb76774a
   after
-    89b44f59521a87bf.d80e41478cdecbdf.3b7e65e8f4b8d3cf.e6254ff2afd37a3a
-    7e7bc4e17ff61597.bd7bf8a483f5ab0c.e6254ff2afd37a3a.1753a87c696f8f60
+    89b44f59521a87bf.d80e41478cdecbdf.3b7e65e8f4b8d3cf.c7b4d20768df6764
+    0000000000000000.0000000000000000.3b7e65e8f4b8d3cf.c7b4676468dfd207
     6959e958a39c412d.923c71a5da432a5a.5bbeecb414f3a08c.e8e0011e3d30f768
     271c39a9da18c5ab.b39fa8b52e548275.7415b81a3e2200f0.97a9d9597faedb27
     81f82c99cb76774a
 
-VMOVHPD_128_StoreForm(reg)
+VPSHUFLW_0x39_128(reg)
   before
     001af74abe13067d.948e32bf41765d3e.7cee97411ab5f00b.0ef62d114a6e5793
     715b35d8f411c56b.8c7c5088f3c3c711.48763cb33bf1b0c6.052dc98352e260a0
@@ -8133,12 +8133,12 @@
     9969fa3c9662c22a.8dfbe7e0aa58fc29.5e6094fd8a2c145c.7acb638ccd747cab
     b0cb59fa76a90500
   after
-    001af74abe13067d.948e32bf41765d3e.7cee97411ab5f00b.0ef62d114a6e5793
+    0000000000000000.0000000000000000.5e6094fd8a2c145c.7cab7acb638ccd74
     715b35d8f411c56b.8c7c5088f3c3c711.48763cb33bf1b0c6.052dc98352e260a0
     3007e1b008fdf0c1.ebb20def0c0abd51.758391782c95fd52.3585075d758bd944
     9969fa3c9662c22a.8dfbe7e0aa58fc29.5e6094fd8a2c145c.7acb638ccd747cab
     b0cb59fa76a90500
-VMOVHPD_128_StoreForm(mem)
+VPSHUFLW_0x39_128(mem)
   before
     b35166958d373270.09ce79ea3bcc7953.4e255948e6b840c6.5f5b41acf0423190
     5f2905482d28bd26.da835c2492c84ee8.0afadf11de364453.d3be92f3fa639099
@@ -8146,13 +8146,13 @@
     22fee9a67a69e017.12083af1c8a44904.e3d9187a71be7ff0.88ef15f56df902dd
     81553e890d848e6f
   after
-    b35166958d373270.09ce79ea3bcc7953.4e255948e6b840c6.0afadf11de364453
-    5f2905482d28bd26.da835c2492c84ee8.0afadf11de364453.d3be92f3fa639099
+    b35166958d373270.09ce79ea3bcc7953.4e255948e6b840c6.5f5b41acf0423190
+    0000000000000000.0000000000000000.4e255948e6b840c6.5f5b3190f04241ac
     901fb2ff738b634f.69d29d5838e18094.9d48f628aedfc5fe.18d6853c451c6c24
     22fee9a67a69e017.12083af1c8a44904.e3d9187a71be7ff0.88ef15f56df902dd
     81553e890d848e6f
 
-VMOVHPD_128_StoreForm(reg)
+VPSHUFLW_0x39_128(reg)
   before
     5d54fc64c14b4b87.f19426295fd0efa9.31702f5bdf9be7e3.b87ac3f143df2d58
     7a374cf226d976d0.d9abe6743dcc4d32.22587602185593de.f8f6727b414f8d60
@@ -8160,12 +8160,12 @@
     e3dd8fd8727c06a7.638fdc1356afe6d7.ead4efb7623b0cd7.29b4cd7430494d01
     d18c70bc58ec27f3
   after
-    5d54fc64c14b4b87.f19426295fd0efa9.31702f5bdf9be7e3.b87ac3f143df2d58
+    0000000000000000.0000000000000000.ead4efb7623b0cd7.4d0129b4cd743049
     7a374cf226d976d0.d9abe6743dcc4d32.22587602185593de.f8f6727b414f8d60
     324c299fd8bb4bf7.b610a4733167b6dd.410b0d52105b8ca1.7f1ba10287195934
     e3dd8fd8727c06a7.638fdc1356afe6d7.ead4efb7623b0cd7.29b4cd7430494d01
     d18c70bc58ec27f3
-VMOVHPD_128_StoreForm(mem)
+VPSHUFLW_0x39_128(mem)
   before
     557008c61c0da136.e7377a0790a8e28d.bef40a3ec9b0984c.7900189eab80502d
     902c107e97b878f4.9ba6e699cfcc1c55.a20aabe2a5748967.49db847186b6944e
@@ -8173,13 +8173,13 @@
     9a5c61a924de2b98.84f233971e299939.747d3241097b1741.21ce178f63270aa4
     e07d35b29e7ab530
   after
-    557008c61c0da136.e7377a0790a8e28d.bef40a3ec9b0984c.a20aabe2a5748967
-    902c107e97b878f4.9ba6e699cfcc1c55.a20aabe2a5748967.49db847186b6944e
+    557008c61c0da136.e7377a0790a8e28d.bef40a3ec9b0984c.7900189eab80502d
+    0000000000000000.0000000000000000.bef40a3ec9b0984c.7900502dab80189e
     5e8c05d0e6fa675c.5c76d0fbca73f0aa.eb9f39e906097454.b8b1309d8f6a13e7
     9a5c61a924de2b98.84f233971e299939.747d3241097b1741.21ce178f63270aa4
     e07d35b29e7ab530
 
-VPAND_128(reg)
+VCVTPS2DQ_128(reg)
   before
     500b8671dbee4f37.2267a2f36e7080d5.70680bdb667b54ad.1b7112d5cad52c58
     cfc5063ab60f1667.d07a439cdfbd223e.7c2254323ff45db3.bb475391642370c5
@@ -8187,12 +8187,12 @@
     66e88597b88915ec.12e996b7a8b53c47.65952bc9128c4824.55c8ec3194cc7454
     070c3ced623faccd
   after
-    0000000000000000.0000000000000000.6400000012844820.1140401104007044
+    0000000000000000.0000000000000000.8000000000000002.0000000080000000
     cfc5063ab60f1667.d07a439cdfbd223e.7c2254323ff45db3.bb475391642370c5
     b8f5b278cc69446a.8262c08e94d0cc00.056d0b084420f0f7.2fcb7361f3719eb5
     66e88597b88915ec.12e996b7a8b53c47.65952bc9128c4824.55c8ec3194cc7454
     070c3ced623faccd
-VPAND_128(mem)
+VCVTPS2DQ_128(mem)
   before
     2361df827ad6024d.37e97b0417fbc79a.5edc400237792b3e.f9e6b0e144c3a2e7
     83944fdaf89e3400.8646902984499420.4006395a5e275811.1dac96bc76513aec
@@ -8201,12 +8201,12 @@
     81b268182981cc3a
   after
     2361df827ad6024d.37e97b0417fbc79a.5edc400237792b3e.f9e6b0e144c3a2e7
-    83944fdaf89e3400.8646902984499420.4006395a5e275811.1dac96bc76513aec
-    0000000000000000.0000000000000000.4004000216210810.19a490a0444122e4
+    0000000000000000.0000000000000000.8000000000000000.800000000000061d
+    04710ae2f6a2fc11.ae49c1739c01b929.963500ad39cc7dee.2d32d9c745c34cde
     83c48b8792ef17ac.0d40094ffaae7162.3a330ee6e37357fe.85c5766c4da41369
     81b268182981cc3a
 
-VPAND_128(reg)
+VCVTPS2DQ_128(reg)
   before
     7d43ab3875e5b2fd.da594eb4e88f40ff.fd7563273bddfa77.0acee0f27828a270
     d5c53b37ce5c035d.e6fccf5413913533.dc35ce69fa198e13.e0d0f3bb15f71a6e
@@ -8214,12 +8214,12 @@
     09cb338115b4d1a7.8e9afda25ae46ef5.d285c0d764e9c992.123cc937d6157fc0
     253d85c3317ce46c
   after
-    0000000000000000.0000000000000000.d005c04160098812.0010c13314151a40
+    0000000000000000.0000000000000000.8000000080000000.8000000000000000
     d5c53b37ce5c035d.e6fccf5413913533.dc35ce69fa198e13.e0d0f3bb15f71a6e
     e5831580cf72f907.84788b5530feb077.04cc437fd4ee69e2.9906c22ed6ed7a25
     09cb338115b4d1a7.8e9afda25ae46ef5.d285c0d764e9c992.123cc937d6157fc0
     253d85c3317ce46c
-VPAND_128(mem)
+VCVTPS2DQ_128(mem)
   before
     afd770bd042d6754.9ce793a53cadc6e8.e12ea127ae4e2ada.a3ae40dc4795e8cd
     8cd408106a34c2a5.fc243158deea1577.5900f3d04749a151.d191bffa187e033f
@@ -8228,12 +8228,12 @@
     28940f233a22929c
   after
     afd770bd042d6754.9ce793a53cadc6e8.e12ea127ae4e2ada.a3ae40dc4795e8cd
-    8cd408106a34c2a5.fc243158deea1577.5900f3d04749a151.d191bffa187e033f
-    0000000000000000.0000000000000000.4100a10006482050.818000d80014000d
+    0000000000000000.0000000000000000.8000000000000000.0000000000012bd2
+    9801c8aa809db18b.84cf07069af5faff.d3dc708a41e08f87.b97b399d73315595
     af2a2d766175f231.9032131c095db12d.298e923fb91fb0a7.b8b8aa31f5391c7b
     28940f233a22929c
 
-VPAND_128(reg)
+VCVTPS2DQ_128(reg)
   before
     665b63dddc79f4a5.ad1bb1602ac83fc4.7c994f04c9ab76ad.38e1d7dccb12bfde
     ce58a2cc7ac97d41.6fa0d254f6a0556f.a352ba2b766d842a.dca2ba4e92c67958
@@ -8241,12 +8241,12 @@
     8d28d2fb1485f7e5.aa95d80a0814cbc0.16e605e7057b6dcd.539e4b5db09fddc3
     de71f1d33fdc000c
   after
-    0000000000000000.0000000000000000.0242002304690408.50820a4c90865940
+    0000000000000000.0000000000000000.0000000080000000.8000000000000000
     ce58a2cc7ac97d41.6fa0d254f6a0556f.a352ba2b766d842a.dca2ba4e92c67958
     bcd9c95dae9e6a1d.cf840b3ee10bf05f.63a74dfeab2e1751.f19db8802a479a40
     8d28d2fb1485f7e5.aa95d80a0814cbc0.16e605e7057b6dcd.539e4b5db09fddc3
     de71f1d33fdc000c
-VPAND_128(mem)
+VCVTPS2DQ_128(mem)
   before
     6ee225cdf409bd48.9b92bb1149096044.db9db5a587c8a3bd.1a59df541fdfc04b
     dfbc6337ea33d0a3.43637f0de8b7e0e7.40691ff979323483.ca4dd6b095e64d76
@@ -8255,12 +8255,12 @@
     782642963c48a7c2
   after
     6ee225cdf409bd48.9b92bb1149096044.db9db5a587c8a3bd.1a59df541fdfc04b
-    dfbc6337ea33d0a3.43637f0de8b7e0e7.40691ff979323483.ca4dd6b095e64d76
-    0000000000000000.0000000000000000.400915a101002081.0a49d61015c64042
+    0000000000000000.0000000000000000.8000000000000000.0000000000000000
+    0dcd28fd3e65f748.e1e71a5a8e19b479.b4c591f4fb5e393d.810ee667041d50fb
     d3dfee0b0babec63.d1698964d6bd18a7.137d878027597018.9de70be5080e0486
     782642963c48a7c2
 
-VPMOVMSKB_128(reg)
+VSUBPS_128(reg)
   before
     701586e63c54725c.0fbf334d6e126c22.6f37c6975d2f481d.395d7d8b1c2e9340
     df02d341a5c0a400.9c3972b082a532af.169bcf60befa7f86.0230f000f4e95ee0
@@ -8268,12 +8268,12 @@
     960179c920e62813.192acf852e8083e4.f458335f80cbf4e3.ece239d8be43e03a
     c6590813e8f90e4c
   after
-    701586e63c54725c.0fbf334d6e126c22.6f37c6975d2f481d.395d7d8b1c2e9340
+    0000000000000000.0000000000000000.7458335fbefa7f86.6ce239d8f4e95ee0
     df02d341a5c0a400.9c3972b082a532af.169bcf60befa7f86.0230f000f4e95ee0
     2237251412187759.5619271e6370fb36.24e2a02995aafa8f.4ac35acbcb978f24
     960179c920e62813.192acf852e8083e4.f458335f80cbf4e3.ece239d8be43e03a
-    0000000000006d2d
-VPMOVMSKB_128(mem)
+    c6590813e8f90e4c
+VSUBPS_128(mem)
   before
     b3f4446866c6d486.95abc9ce6bb8f3dc.c03ae5cfffe086e5.e249856f18eaab2f
     8e7f67c353b5ef15.7c83138d8d1a145d.2913e5eaf19cbf64.4a0193c3fb92591f
@@ -8283,11 +8283,11 @@
   after
     b3f4446866c6d486.95abc9ce6bb8f3dc.c03ae5cfffe086e5.e249856f18eaab2f
     8e7f67c353b5ef15.7c83138d8d1a145d.2913e5eaf19cbf64.4a0193c3fb92591f
-    35c6ef11ccd21b25.a7d352742596c645.2e824bc120c1eb8e.88cb58c9c5503b5e
+    0000000000000000.0000000000000000.403ae5cfffe086e5.6249856ffb92591f
     8294573cec2a14e1.73e983eeccba463e.ad539340a95ac68f.f7f5d0ec11af8c98
     f5c9f8987b3b897b
 
-VPMOVMSKB_128(reg)
+VSUBPS_128(reg)
   before
     dd94cb39a0806eb1.53b61b32d0c89576.3a0fa0672012cff5.81523a53a8740c92
     0aa2443b1b0b77e6.83f8b8dd93b95c10.5992a74bbd289f15.854abbe6381978c4
@@ -8295,12 +8295,12 @@
     a7b61e128521e400.6e0c690728c1a600.0fde600440c4fe42.91593b3d7c3ab563
     510733d868cdfd28
   after
-    dd94cb39a0806eb1.53b61b32d0c89576.3a0fa0672012cff5.81523a53a8740c92
+    0000000000000000.0000000000000000.5992a74bc0c64f80.11593b3cfc3ab563
     0aa2443b1b0b77e6.83f8b8dd93b95c10.5992a74bbd289f15.854abbe6381978c4
     da3f620a8967e0c7.ed26a82b520722da.2cbe93063e8af04b.970992e57557c750
     a7b61e128521e400.6e0c690728c1a600.0fde600440c4fe42.91593b3d7c3ab563
-    0000000000006ab1
-VPMOVMSKB_128(mem)
+    510733d868cdfd28
+VSUBPS_128(mem)
   before
     b1dff4a3561c5ccc.cf5575bfacc4c03c.e375765d31f0a2b0.5e400ab15e6107a7
     8eadfc8b61338e7b.ad66647e99dcaf28.262f4c198aa2d314.752e8e7a34ed4526
@@ -8310,11 +8310,11 @@
   after
     b1dff4a3561c5ccc.cf5575bfacc4c03c.e375765d31f0a2b0.5e400ab15e6107a7
     8eadfc8b61338e7b.ad66647e99dcaf28.262f4c198aa2d314.752e8e7a34ed4526
-    c53dc67ba61f4f60.9c36e6b9e9f6ee70.150465274fe2f558.b0f5e7c95ff4f56a
+    0000000000000000.0000000000000000.6375765db1f0a2b0.752e8e7ade6107a7
     305bcf5f40eb5aa8.f911f7de379db9bf.8ac13f739bbcc4a9.6be1110c7b035320
     023e08ad22a59af3
 
-VPMOVMSKB_128(reg)
+VSUBPS_128(reg)
   before
     d158c91af3670790.acd291224ca46c7f.21439458205d4cc1.623255ea8a3dfb33
     347b4fbe88d3d6a2.166f8ab2e5554110.6e17b7933fc3e324.7a23237639705721
@@ -8322,12 +8322,12 @@
     260a9a5b6fdf89d8.1f4b0ee72fcf2311.ebd984fb91ae0bb7.d5b4d881451e6ddb
     d1edb7d8dab09fff
   after
-    d158c91af3670790.acd291224ca46c7f.21439458205d4cc1.623255ea8a3dfb33
+    0000000000000000.0000000000000000.6e1e83bb3fc3e324.7a232376c51e6dda
     347b4fbe88d3d6a2.166f8ab2e5554110.6e17b7933fc3e324.7a23237639705721
     87f296057d7742d7.48fe35fa270a9587.3edb5efa315ab992.ac602605c36293a0
     260a9a5b6fdf89d8.1f4b0ee72fcf2311.ebd984fb91ae0bb7.d5b4d881451e6ddb
-    0000000000003600
-VPMOVMSKB_128(mem)
+    d1edb7d8dab09fff
+VSUBPS_128(mem)
   before
     7cd53ef59f25e538.6c0f572cf996e554.7722926319b1a8da.d25e2602fb4c1440
     b239eac4af87fdb1.b74dcae4b82892f5.2c4f3c5b00bbdf0e.4fb63e790cbf12d9
@@ -8337,11 +8337,11 @@
   after
     7cd53ef59f25e538.6c0f572cf996e554.7722926319b1a8da.d25e2602fb4c1440
     b239eac4af87fdb1.b74dcae4b82892f5.2c4f3c5b00bbdf0e.4fb63e790cbf12d9
-    50e5353127e5a197.6210eef04722ce67.1a9d87bc00fa86d8.bf2dcacd60933f2d
+    0000000000000000.0000000000000000.f722926399b1a8da.5263d7f67b4c1440
     30a49d2822488e15.c8a4bfba430ed357.1dd9f27036795764.7c0fc56a9155d7e9
     e3a82bbd3e9018b8
 
-VCVTTSS2SI_64(reg)
+VADDPS_128(reg)
   before
     5043f83001d03c47.2f449d95bdbe8058.475439b0477bde71.11cff665be440ee0
     1f2d293176a28042.298fb1641352328c.3a6e583ceff22a60.d24b1085b2686975
@@ -8349,12 +8349,12 @@
     531ea48ae829572a.7d5a06d96106c975.eb0b77cb9e337970.2b0578fb55e8f6a1
     7bdabd283a5da18e
   after
-    5043f83001d03c47.2f449d95bdbe8058.475439b0477bde71.11cff665be440ee0
+    0000000000000000.0000000000000000.eb0b77cbeff22a60.d24b108555e8f6a1
     1f2d293176a28042.298fb1641352328c.3a6e583ceff22a60.d24b1085b2686975
     acb2b92b3a912054.fa535581401161dc.fc3c19ccd801f5d1.3c19bdbe31f02252
     531ea48ae829572a.7d5a06d96106c975.eb0b77cb9e337970.2b0578fb55e8f6a1
-    0000000000000000
-VCVTTSS2SI_64(mem)
+    7bdabd283a5da18e
+VADDPS_128(mem)
   before
     08660931fd5ade46.70bde6ba1df7626f.90713f56923d2582.61276ea5dc15f2e8
     ae73d702b9eb6af5.5fdb7b2774867dd0.0e637ce6eec33330.bcdbfbc62e329ee5
@@ -8364,11 +8364,11 @@
   after
     08660931fd5ade46.70bde6ba1df7626f.90713f56923d2582.61276ea5dc15f2e8
     ae73d702b9eb6af5.5fdb7b2774867dd0.0e637ce6eec33330.bcdbfbc62e329ee5
-    49cea2888a1d01c6.7cc3603d8a63e3f9.d3fe397491a3adab.5675189a3116b715
+    0000000000000000.0000000000000000.90630788eec33330.61276ea5dc15f2e8
     b543e9ad8dfb5fe6.23c29068fa19d295.bb0df2eb98e94f1e.8d3fc38d814e7a22
-    fda8346000000000
+    bb86f70bb96522b8
 
-VCVTTSS2SI_64(reg)
+VADDPS_128(reg)
   before
     3e96b08175e7ed84.cd9e255ede913f81.b025071460348351.a25b24391ea2d7b6
     70bbeb5952611532.6faad38898ec5ec2.7f36c1ae594035d8.63b54a4940d9ff9e
@@ -8376,12 +8376,12 @@
     5574d3e3dd6a6ee2.bd0977f3b91e48e8.5394f058735d88fa.e8bd6360c6f22110
     62034d3e63ec93f3
   after
-    3e96b08175e7ed84.cd9e255ede913f81.b025071460348351.a25b24391ea2d7b6
+    0000000000000000.0000000000000000.7f36c1ae735d88fa.e8bd360dc6f21370
     70bbeb5952611532.6faad38898ec5ec2.7f36c1ae594035d8.63b54a4940d9ff9e
     ae41a201eb5ed66d.76357016d81777d6.ec41bba081ca22d7.dce7e007199a8403
     5574d3e3dd6a6ee2.bd0977f3b91e48e8.5394f058735d88fa.e8bd6360c6f22110
-    0000000000000006
-VCVTTSS2SI_64(mem)
+    62034d3e63ec93f3
+VADDPS_128(mem)
   before
     28841c8e0a9596d5.bf9f796dc312173c.22f3640d570e8b25.0f7a5c40cc86a0ec
     150d4b3dd9f7e6e5.490f910a3ae10e28.80bfb44fcff2fdb9.7e3efbc626d0a959
@@ -8391,11 +8391,11 @@
   after
     28841c8e0a9596d5.bf9f796dc312173c.22f3640d570e8b25.0f7a5c40cc86a0ec
     150d4b3dd9f7e6e5.490f910a3ae10e28.80bfb44fcff2fdb9.7e3efbc626d0a959
-    046b5635ec203e4c.4f111526dd638e52.b239e1a53dd659cf.fb2dca5520c7ddef
+    0000000000000000.0000000000000000.22f3640d570e893f.7e3efbc6cc86a0ec
     d368ba645e1c5c39.2def032d4825d565.962c69fbbbc75d93.e193c35954f77958
-    fffffffffbcaf8a0
+    8ebce43e5eedb940
 
-VCVTTSS2SI_64(reg)
+VADDPS_128(reg)
   before
     5df42870db34d854.5cd1f1b54cf6f9d6.3ff5568b18b21d0e.0666c73d68d0c333
     a9868b5b66591340.7d717914d1bad450.e1710aace996a3f8.e0b177585efe47d9
@@ -8403,12 +8403,12 @@
     2ceca00d186acd4e.f28a6aac11312f89.46f786e8fc955742.3eadbfc596f59de8
     7af64eef10d8e6aa
   after
-    5df42870db34d854.5cd1f1b54cf6f9d6.3ff5568b18b21d0e.0666c73d68d0c333
+    0000000000000000.0000000000000000.e1710aacfc955742.e0b177585efe47d9
     a9868b5b66591340.7d717914d1bad450.e1710aace996a3f8.e0b177585efe47d9
     d0c00a6c9ce7a6af.1016cd6d0974a7d2.70ae1cfc565ea2d0.fedaf636b95ba7b1
     2ceca00d186acd4e.f28a6aac11312f89.46f786e8fc955742.3eadbfc596f59de8
-    7f23ec8000000000
-VCVTTSS2SI_64(mem)
+    7af64eef10d8e6aa
+VADDPS_128(mem)
   before
     8f811fa2440f3d22.1b5749ac776fc3c9.009bcabd05fc28a0.c09946da76c8fef9
     5a1aaec94da6607d.f74d01b35481c5cb.14136b8c00e24e44.3ae057406081d3a2
@@ -8418,11 +8418,11 @@
   after
     8f811fa2440f3d22.1b5749ac776fc3c9.009bcabd05fc28a0.c09946da76c8fef9
     5a1aaec94da6607d.f74d01b35481c5cb.14136b8c00e24e44.3ae057406081d3a2
-    b58c784f47a909e6.1e1ac4904c2c0f00.0bbfc8051eed5ca1.0f18b584574e11e8
+    0000000000000000.0000000000000000.14136b8c05fc6134.c09938d576c8fef9
     7da4f8224f25f58a.ea0a8faefafddc16.c26b5d157c2c0fe2.9d8d5d14f6bbf578
-    8000000000000000
+    3f8a4a5bda53bbfe
 
-VPACKUSWB_128(reg)
+VMULPS_128(reg)
   before
     515d78c59ea29f25.8e2eaa2d8125df95.b8685d79fa7f69b7.13e2a7a635a82234
     2f50e3bedf34dc9a.c5f60a5df8b68432.e5822a5de93ef28f.dbf220a6666f53c2
@@ -8430,12 +8430,12 @@
     bec9610d4653541c.1070c5d727b8efd4.c715b22003a5e797.4008949f9e0cf945
     95a78671ddfae891
   after
-    0000000000000000.0000000000000000.0000ff00ff000000.00ff000000ffffff
+    0000000000000000.0000000000000000.6d183a74ad777e27.dc812de9c503cad7
     2f50e3bedf34dc9a.c5f60a5df8b68432.e5822a5de93ef28f.dbf220a6666f53c2
     35b087b23896af08.fcc8949cd1e3a08e.cba2f2c663c7b34b.f66546ff2a8c5cba
     bec9610d4653541c.1070c5d727b8efd4.c715b22003a5e797.4008949f9e0cf945
     95a78671ddfae891
-VPACKUSWB_128(mem)
+VMULPS_128(mem)
   before
     d20e99610462e3ca.28e76c3ca4f80682.ddb918fb16422c31.362764d76564cb1e
     d109485b2e50a71c.ce55a4a9ef1002e5.3f7009f2bb8c14d1.7223065826919b8d
@@ -8445,11 +8445,11 @@
   after
     d20e99610462e3ca.28e76c3ca4f80682.ddb918fb16422c31.362764d76564cb1e
     d109485b2e50a71c.ce55a4a9ef1002e5.3f7009f2bb8c14d1.7223065826919b8d
-    0000000000000000.0000000000000000.00ffffffffffff00.ffff00ffffffff00
+    0000000000000000.0000000000000000.ddad8e9c92547fea.68d532b64c822211
     88ea6a1efdf179b8.3d558cf1bacac854.3258b60d9590d488.c40d08643462eed1
     92935fc7b81fe9ff
 
-VPACKUSWB_128(reg)
+VMULPS_128(reg)
   before
     9e3396a40b79bfc4.f868d5bed9baff5b.bf7e33a4728309b8.7b216a09026325f7
     443aa866c8fcaecd.9aaacd18293a3ec7.ec28f84686e184c9.c988ac8995271059
@@ -8457,12 +8457,12 @@
     ceac4e49f2afc259.e9aa51ac948dd6a8.bb2fca0735b517a5.e45fcac59baea6a5
     69679f59468bc9e7
   after
-    0000000000000000.0000000000000000.0000ffff00000000.00000000000000ff
+    0000000000000000.0000000000000000.67e80e2180013f0f.6e6ef51900000000
     443aa866c8fcaecd.9aaacd18293a3ec7.ec28f84686e184c9.c988ac8995271059
     e0f392798c35f0c5.4c7ccd19097df127.229fd643936d7434.f858f87969e651da
     ceac4e49f2afc259.e9aa51ac948dd6a8.bb2fca0735b517a5.e45fcac59baea6a5
     69679f59468bc9e7
-VPACKUSWB_128(mem)
+VMULPS_128(mem)
   before
     623df222878777cb.6aafda4297f75f35.4d00d5bce678a776.1524cefe0745a7c7
     adad3f0a79b06b7e.104a31d016970404.5449d5371c4920bc.8ac9e094a5a76147
@@ -8472,11 +8472,11 @@
   after
     623df222878777cb.6aafda4297f75f35.4d00d5bce678a776.1524cefe0745a7c7
     adad3f0a79b06b7e.104a31d016970404.5449d5371c4920bc.8ac9e094a5a76147
-    0000000000000000.0000000000000000.ff000000ff00ff00.ff00ffff000000ff
+    0000000000000000.0000000000000000.61cb263cc3435b47.8000000080000000
     a68ab8ebe2b71800.ea73305c1315562d.bae83b1ba2cffe62.39561b4db7164210
     2ad63d49633be1b0
 
-VPACKUSWB_128(reg)
+VMULPS_128(reg)
   before
     a8375b934b639a5f.0b90dbbc90ad4927.d69ad131ca0a7adf.d2d5985c2b9cda1a
     0dc573990c1aa8c6.325fe95c6000b0cc.3b872c4ccb889635.fde561b7067e4efb
@@ -8484,12 +8484,12 @@
     ff967f868767b673.328bb4bed5ea1342.e5e706001c50a67a.fba3296c28b7f1e5
     87e71f9da7249848
   after
-    0000000000000000.0000000000000000.00ffff0000ffff00.ffff000000ffffff
+    0000000000000000.0000000000000000.e1f3f847a85ea5bb.7f80000000000000
     0dc573990c1aa8c6.325fe95c6000b0cc.3b872c4ccb889635.fde561b7067e4efb
     b6cb80c641ed4894.f6c45eb96eba0a1c.77883f18b21ce6da.16e6131952831730
     ff967f868767b673.328bb4bed5ea1342.e5e706001c50a67a.fba3296c28b7f1e5
     87e71f9da7249848
-VPACKUSWB_128(mem)
+VMULPS_128(mem)
   before
     957f7199e8d9c783.44726a4479142e0f.c4806957b199876b.e1f17b72a5b311c3
     03379b4b09df3cc2.e2ab3f6eb481eb16.866ff7701fd521c3.c6f39cd9e8ce645f
@@ -8499,11 +8499,11 @@
   after
     957f7199e8d9c783.44726a4479142e0f.c4806957b199876b.e1f17b72a5b311c3
     03379b4b09df3cc2.e2ab3f6eb481eb16.866ff7701fd521c3.c6f39cd9e8ce645f
-    0000000000000000.0000000000000000.00ff000000ff00ff.0000ffff000000ff
+    0000000000000000.0000000000000000.0b70bcec91ffa3d7.6965cc214f105e80
     6b3769805a13e2ff.946494b472c9270f.0e6994d31f21baae.c009cf370d61b141
     8bb7d90527f123e0
 
-VCVTSS2SD_128(reg)
+VMAXPS_128(reg)
   before
     b18b7f786c6a6d82.1d1704dcc1588c54.617b0da72fbb1d5a.8c0d99f4ea4a309a
     8cd2bbfd7758cbd4.9e46679e78206b5e.f6205eb5a39e4abe.aadc6946b52fbd64
@@ -8511,12 +8511,12 @@
     d5eaebe951c5b137.7ec477054567b840.e83f7dd325603384.3a255729c15e0c44
     63396d9339c145b2
   after
-    0000000000000000.0000000000000000.f6205eb5a39e4abe.c02bc18880000000
+    0000000000000000.0000000000000000.e83f7dd325603384.3a255729b52fbd64
     8cd2bbfd7758cbd4.9e46679e78206b5e.f6205eb5a39e4abe.aadc6946b52fbd64
     7ad98bfee5487882.cb910fb29b763b49.af9d854b6cfbe8e9.459f7fb39fdd1d38
     d5eaebe951c5b137.7ec477054567b840.e83f7dd325603384.3a255729c15e0c44
     63396d9339c145b2
-VCVTSS2SD_128(mem)
+VMAXPS_128(mem)
   before
     9da63edd230f85ae.fa51d528585bb29f.94ab1b8192fe9d6f.fd5243bb6b58693e
     c53945f29a568865.465c47299597b668.ea1277139f47a703.4a22d16eda6fc4c1
@@ -8526,11 +8526,11 @@
   after
     9da63edd230f85ae.fa51d528585bb29f.94ab1b8192fe9d6f.fd5243bb6b58693e
     c53945f29a568865.465c47299597b668.ea1277139f47a703.4a22d16eda6fc4c1
-    0000000000000000.0000000000000000.ea1277139f47a703.456b0d27c0000000
+    0000000000000000.0000000000000000.94ab1b8192fe9d6f.4a22d16e6b58693e
     4a01e533a1fdc6b3.bf8aaf1e222ebac7.c18f482a6720190a.fb283ae5a02cdbd4
     18f60c8130ea0fbb
 
-VCVTSS2SD_128(reg)
+VMAXPS_128(reg)
   before
     ddb1979858f7591d.60ce7735687579a2.a4459feaaba232b6.fb3eb5875bc8f9d4
     a6a5d896b5dff5a4.d3f12eb32d15defb.1fd30527daeb9db5.e49ccaaa7d53edb2
@@ -8538,12 +8538,12 @@
     b36769f87b7111d2.416700d420feb29e.489828a59b2d3f91.3498ddf2c13f055d
     52cdd2ef1ab9a082
   after
-    0000000000000000.0000000000000000.1fd30527daeb9db5.c027e0aba0000000
+    0000000000000000.0000000000000000.489828a59b2d3f91.3498ddf27d53edb2
     a6a5d896b5dff5a4.d3f12eb32d15defb.1fd30527daeb9db5.e49ccaaa7d53edb2
     ce1ecae7e22e1efc.7f35889a0ce9b3eb.8c80df424b95386f.5976037febccb3d2
     b36769f87b7111d2.416700d420feb29e.489828a59b2d3f91.3498ddf2c13f055d
     52cdd2ef1ab9a082
-VCVTSS2SD_128(mem)
+VMAXPS_128(mem)
   before
     8fe360621345406b.b0ceb1331e330ad2.f354134f8560973f.ad66dcbd663eedc6
     c7a40337c7efa044.209d9f06640145a7.72c63bf6581920fb.1838f7f7475480bb
@@ -8553,11 +8553,11 @@
   after
     8fe360621345406b.b0ceb1331e330ad2.f354134f8560973f.ad66dcbd663eedc6
     c7a40337c7efa044.209d9f06640145a7.72c63bf6581920fb.1838f7f7475480bb
-    0000000000000000.0000000000000000.72c63bf6581920fb.44c7ddb8c0000000
+    0000000000000000.0000000000000000.72c63bf6581920fb.1838f7f7663eedc6
     985b74b8d2ce9379.cea659204fee6f83.466bbf77b6c50972.7013547dbcc13f94
     15b58da2882fe4d0
 
-VCVTSS2SD_128(reg)
+VMAXPS_128(reg)
   before
     308a1d98dbd35d7b.e8e83a3b601c9d2d.c2781e402b26d7e1.5437122a79d0e286
     1ddd01cb5038e642.a45005d11ab75981.9be379a71b9970c4.9fb86cb91a634d64
@@ -8565,12 +8565,12 @@
     dd31b199127617d3.cde698e3800ad1ba.67b3ddfbaa6128cd.5c0c211c6452cc30
     867775c745c65876
   after
-    0000000000000000.0000000000000000.9be379a71b9970c4.448a598600000000
+    0000000000000000.0000000000000000.67b3ddfb1b9970c4.5c0c211c6452cc30
     1ddd01cb5038e642.a45005d11ab75981.9be379a71b9970c4.9fb86cb91a634d64
     38fc33a784ebbbd1.a76151651bad81a1.b33264c1bcd377da.03bb4710b48a0739
     dd31b199127617d3.cde698e3800ad1ba.67b3ddfbaa6128cd.5c0c211c6452cc30
     867775c745c65876
-VCVTSS2SD_128(mem)
+VMAXPS_128(mem)
   before
     5cc8c0ff73f26636.68c9760b966737f5.f2aa583765d807f8.14b0dfbf7fcebf49
     bcca7cae0ce3b39e.35107f6aad4a57e2.f17a0c4de525dd86.1476667adaa677fb
@@ -8580,11 +8580,11 @@
   after
     5cc8c0ff73f26636.68c9760b966737f5.f2aa583765d807f8.14b0dfbf7fcebf49
     bcca7cae0ce3b39e.35107f6aad4a57e2.f17a0c4de525dd86.1476667adaa677fb
-    0000000000000000.0000000000000000.f17a0c4de525dd86.7ff9d7e920000000
+    0000000000000000.0000000000000000.f17a0c4d65d807f8.14b0dfbf7fcebf49
     87153c25e841f910.04db49a0031385cf.f26e406f276a5b45.818df5868cc83db0
     a575f3af1c2bc20b
 
-VCVTSD2SS_128(reg)
+VMINPS_128(reg)
   before
     8d57687fa028594b.a9f537c565c76a72.bff6034f79110c28.aa2ab953217a7bcd
     967d4d61b44e3e1d.c5b7948dba410a2c.2cf1f09bf23182fb.ae2116aa27392c56
@@ -8592,12 +8592,12 @@
     76c85b10ff3ee126.571166456342c653.8bb254ba5c052fc6.06f46c5dc4f13019
     13675d919502fcab
   after
-    0000000000000000.0000000000000000.2cf1f09bf23182fb.ae2116aa00000000
+    0000000000000000.0000000000000000.8bb254baf23182fb.ae2116aac4f13019
     967d4d61b44e3e1d.c5b7948dba410a2c.2cf1f09bf23182fb.ae2116aa27392c56
     1a349fc3f626ad2d.b527d06906bc9468.a6160df00aff25f7.d921d35e54b22a0b
     76c85b10ff3ee126.571166456342c653.8bb254ba5c052fc6.06f46c5dc4f13019
     13675d919502fcab
-VCVTSD2SS_128(mem)
+VMINPS_128(mem)
   before
     da4623e8e0f247ee.06857cb46d2117b5.8540d20eede15a18.3611c36584d1dc14
     395c394dc3ccd00e.26b7fe1cdc5b8b85.1d8190aec1a50ce4.027e555d1fee6a8e
@@ -8607,11 +8607,11 @@
   after
     da4623e8e0f247ee.06857cb46d2117b5.8540d20eede15a18.3611c36584d1dc14
     395c394dc3ccd00e.26b7fe1cdc5b8b85.1d8190aec1a50ce4.027e555d1fee6a8e
-    0000000000000000.0000000000000000.1d8190aec1a50ce4.027e555d00000000
+    0000000000000000.0000000000000000.8540d20eede15a18.027e555d84d1dc14
     2a6145f1c06f8793.86a816e32a061c9b.f76af327b5c9be3f.71b6d3e41c4d14b5
     cc19b74cb6a6a8ba
 
-VCVTSD2SS_128(reg)
+VMINPS_128(reg)
   before
     b8baaeb033810d9b.76e8340811502e51.7e01a41c428eb138.f1a890d70d413527
     93e6b47e2e697d03.c8d663dd6a4c029b.76fe83c7cb9e73c7.c4296f101f0ebac5
@@ -8619,12 +8619,12 @@
     820ede051090701a.f21a7172a2c21f85.d61625289d847269.6620e4cadfd5e2d6
     ec2e7223c5e7fca0
   after
-    0000000000000000.0000000000000000.76fe83c7cb9e73c7.c4296f107f800000
+    0000000000000000.0000000000000000.d6162528cb9e73c7.c4296f10dfd5e2d6
     93e6b47e2e697d03.c8d663dd6a4c029b.76fe83c7cb9e73c7.c4296f101f0ebac5
     b7e9c62144ea349e.fdf84e5ce66ebe9d.caecb05260c1a0f3.4db80dbd063b0b46
     820ede051090701a.f21a7172a2c21f85.d61625289d847269.6620e4cadfd5e2d6
     ec2e7223c5e7fca0
-VCVTSD2SS_128(mem)
+VMINPS_128(mem)
   before
     bbae32b4d47d14d0.4ea3fa952ee86b20.81074809ba54e07c.f6cae0b51f7226d5
     b06ca16929a3e794.78f2153f3b7e625f.878d500f4831bfb1.8652dc658117f7e2
@@ -8634,11 +8634,11 @@
   after
     bbae32b4d47d14d0.4ea3fa952ee86b20.81074809ba54e07c.f6cae0b51f7226d5
     b06ca16929a3e794.78f2153f3b7e625f.878d500f4831bfb1.8652dc658117f7e2
-    0000000000000000.0000000000000000.878d500f4831bfb1.8652dc65ff800000
+    0000000000000000.0000000000000000.878d500fba54e07c.f6cae0b58117f7e2
     77d278ef14d1ae82.57f1398f91903333.688fe0143cfac180.651287de57b7e391
     6de12f7f03ca768b
 
-VCVTSD2SS_128(reg)
+VMINPS_128(reg)
   before
     55b408f3ffc516d7.0211d999e1f11905.c3393a0c11268520.fca460ecdafe5e72
     78d90ea7e8330120.22bed81664d12fca.fd6c2a52f028c3f5.768101e25e7c0751
@@ -8646,12 +8646,12 @@
     e445927bef98a25b.9193a13efa024bcd.4cc2c7ea39a6f105.8fc392d88e187084
     e6bf7bb1714da731
   after
-    0000000000000000.0000000000000000.fd6c2a52f028c3f5.768101e280000000
+    0000000000000000.0000000000000000.fd6c2a52f028c3f5.8fc392d88e187084
     78d90ea7e8330120.22bed81664d12fca.fd6c2a52f028c3f5.768101e25e7c0751
     349b3d0559a07012.b3a6f154b97dacff.61d505ceca25285d.b3f23de2e6817948
     e445927bef98a25b.9193a13efa024bcd.4cc2c7ea39a6f105.8fc392d88e187084
     e6bf7bb1714da731
-VCVTSD2SS_128(mem)
+VMINPS_128(mem)
   before
     94b37557ac2ddb7a.e324077445a8d1a5.985162bf466bca63.187d6d14dc395a99
     756bfab85ac2c88b.8f849a5bf75c3a9c.a4aeb2c5b7c4e3eb.2253f2b74d699fc4
@@ -8661,11 +8661,11 @@
   after
     94b37557ac2ddb7a.e324077445a8d1a5.985162bf466bca63.187d6d14dc395a99
     756bfab85ac2c88b.8f849a5bf75c3a9c.a4aeb2c5b7c4e3eb.2253f2b74d699fc4
-    0000000000000000.0000000000000000.a4aeb2c5b7c4e3eb.2253f2b700000000
+    0000000000000000.0000000000000000.a4aeb2c5b7c4e3eb.187d6d14dc395a99
     3f579a578041bcb9.5af708a8e2dca944.3b71ed0d7978d583.608089180ad1ab91
     4c6e93ae8e21eb8b
 
-VMOVD_XMM_to_IREG32(reg)
+VSHUFPS_0x39_128(reg)
   before
     e6a86d6d503ef7cd.e123ad6d31423b2c.31a1dae552c1284c.7e6fd02802ea26ea
     8a7812c1eeb50a02.26e23beec52a6219.25fcbac18e7acfb2.353b3176207d01f5
@@ -8673,12 +8673,12 @@
     5f0dadd927df37f7.086dbdde07db9c0b.cff69207dc958c47.746d5d5f8e3349a1
     b36a20d1156f2d9b
   after
-    e6a86d6d503ef7cd.e123ad6d31423b2c.31a1dae552c1284c.7e6fd02802ea26ea
+    0000000000000000.0000000000000000.8e3349a1cff69207.8e7acfb2353b3176
     8a7812c1eeb50a02.26e23beec52a6219.25fcbac18e7acfb2.353b3176207d01f5
     942b7e16011161d7.ea61c2c55803efa9.9055a3a93392dd21.3ea18ce4f13c24ce
     5f0dadd927df37f7.086dbdde07db9c0b.cff69207dc958c47.746d5d5f8e3349a1
-    0000000002ea26ea
-VMOVD_XMM_to_IREG32(mem)
+    b36a20d1156f2d9b
+VSHUFPS_0x39_128(mem)
   before
     d6665228a2fb8ce8.496a9c74fcaaca0f.5ed0a825edbe2569.3f2c8148261019cd
     bb2b6e4f50e321b3.ad8e46551bfe54ca.c756ff8627b748ef.3a426ed9ac8ec061
@@ -8688,11 +8688,11 @@
   after
     d6665228a2fb8ce8.496a9c74fcaaca0f.5ed0a825edbe2569.3f2c8148261019cd
     bb2b6e4f50e321b3.ad8e46551bfe54ca.c756ff8627b748ef.3a426ed9ac8ec061
-    3d86f0313b34a929.e7c4a7e6206712d6.1fcd3feed0d2bfca.1d8654250b9bbdaf
+    0000000000000000.0000000000000000.5ed0a825261019cd.3a426ed927b748ef
     374355bc80f9e076.535abb95a8723fdc.4100e347051b4726.45432f97dec44b63
     0cc4fb9dc294a728
 
-VMOVD_XMM_to_IREG32(reg)
+VSHUFPS_0x39_128(reg)
   before
     cf56b5a252970caa.872e17db3b3e82c5.4c9a7ecd4faa188b.0bba677fe19f9c2e
     ea4557122b5ab897.0713b47a86104a42.30d1edfab09cd98d.57c847808169790f
@@ -8700,12 +8700,12 @@
     986949e3254dcf5c.0bf96de943893f7a.2554bce311db033b.e9100c927a00be0b
     e7e2e9790ce59e7d
   after
-    cf56b5a252970caa.872e17db3b3e82c5.4c9a7ecd4faa188b.0bba677fe19f9c2e
+    0000000000000000.0000000000000000.7a00be0b2554bce3.b09cd98d57c84780
     ea4557122b5ab897.0713b47a86104a42.30d1edfab09cd98d.57c847808169790f
     b9dddf59e868e598.95bda786807af51b.5a4b038867d3be8e.03f6ff3800859cf5
     986949e3254dcf5c.0bf96de943893f7a.2554bce311db033b.e9100c927a00be0b
-    00000000e19f9c2e
-VMOVD_XMM_to_IREG32(mem)
+    e7e2e9790ce59e7d
+VSHUFPS_0x39_128(mem)
   before
     d73812dbd241f679.e3378f1d7f96b48d.47948090eb47e38b.ef3714774941e340
     97dd03a3e71e8328.f691af7192ceced7.23585e6895c29e7b.124208b1ac909b48
@@ -8715,11 +8715,11 @@
   after
     d73812dbd241f679.e3378f1d7f96b48d.47948090eb47e38b.ef3714774941e340
     97dd03a3e71e8328.f691af7192ceced7.23585e6895c29e7b.124208b1ac909b48
-    019e39bd678b01b9.2dc4a34df9825ae8.7d11825b5c062c76.ecbf93fbd5546600
+    0000000000000000.0000000000000000.479480904941e340.124208b195c29e7b
     f2472f166f912b56.e41c6a1b503d9469.2f8d68575d1e49a7.d7fbb1c361198114
     31425e73eb6c282f
 
-VMOVD_XMM_to_IREG32(reg)
+VSHUFPS_0x39_128(reg)
   before
     54e0967910d997fd.47a460981b3ebf2c.77e5fd49348bb709.16978c47b316b03b
     9d2156406bea0a2c.da814b30859d7766.426b594241f80072.0ffa6b177afa1e5d
@@ -8727,12 +8727,12 @@
     12ba5bc1342eea57.2dea38540aa244b8.f0dd5e444361f350.a2fe4707ceb8fefe
     f5373cff92aae9d4
   after
-    54e0967910d997fd.47a460981b3ebf2c.77e5fd49348bb709.16978c47b316b03b
+    0000000000000000.0000000000000000.ceb8fefef0dd5e44.41f800720ffa6b17
     9d2156406bea0a2c.da814b30859d7766.426b594241f80072.0ffa6b177afa1e5d
     69509934982dbc65.88aa69cbccbb0f31.a1fa7b711111ab50.f48380b3cfd74f3a
     12ba5bc1342eea57.2dea38540aa244b8.f0dd5e444361f350.a2fe4707ceb8fefe
-    00000000b316b03b
-VMOVD_XMM_to_IREG32(mem)
+    f5373cff92aae9d4
+VSHUFPS_0x39_128(mem)
   before
     c9fadb8738b8cae9.f5ac9853db77cfac.a50f33b65b61d328.8b61fe267075161e
     fa13a18bdbee5d69.6f704d562896a911.cde3d6dfdc0175ad.ced2588437d74e66
@@ -8742,11 +8742,11 @@
   after
     c9fadb8738b8cae9.f5ac9853db77cfac.a50f33b65b61d328.8b61fe267075161e
     fa13a18bdbee5d69.6f704d562896a911.cde3d6dfdc0175ad.ced2588437d74e66
-    654d09f89759607f.da527436b717b231.7f339dbaa890e972.147c66c83116d7d2
+    0000000000000000.0000000000000000.a50f33b67075161e.ced25884dc0175ad
     e4758fb889048d57.93a00b60258426b9.98cb0433dc19e9a4.bbab265ffdbbef11
     1eab93b63454d0cd
 
-VPCMPESTRM_0x45_128(reg)
+VPCMPEQB_128(reg)
   before
     98c7a937746cb7b3.5458afb9ccfba01e.f6a50d3e0e6b4354.f477883693a9326e
     874d65505990df6e.91c0e6e67d4a5700.5fac773e0c5843af.6f02a4afe94b80fd
@@ -8754,12 +8754,12 @@
     30c2bbf68029e516.e251867397239cc3.b4f36f50be71df54.32e995b4e5f61919
     32dc6117c217ddfe
   after
-    98c7a937746cb7b3.5458afb9ccfba01e.f6a50d3e0e6b4354.f477883693a9326e
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     874d65505990df6e.91c0e6e67d4a5700.5fac773e0c5843af.6f02a4afe94b80fd
     4687c26b7e4b86ab.7779af2ab7fe6c29.2b0243cabed66376.e539d48afb0b8e7d
-    30c2bbf68029e516.e251867397239cc3.0000000000000000.0000ffffffff0000
+    30c2bbf68029e516.e251867397239cc3.b4f36f50be71df54.32e995b4e5f61919
     32dc6117c217ddfe
-VPCMPESTRM_0x45_128(mem)
+VPCMPEQB_128(mem)
   before
     c1dfb6a1ae7a9557.a34a4f5cfab63b5a.ad13e7ac39c3a3fd.57cbf63ba8b5f2f6
     babe0f3cc62cff51.f96a7709887fc323.b68a4ec1b7ec3c01.70d6d4f7192fd907
@@ -8769,11 +8769,11 @@
   after
     c1dfb6a1ae7a9557.a34a4f5cfab63b5a.ad13e7ac39c3a3fd.57cbf63ba8b5f2f6
     babe0f3cc62cff51.f96a7709887fc323.b68a4ec1b7ec3c01.70d6d4f7192fd907
-    fb44e8d62638d418.90703169c710b81f.d883389f2faa24fc.5b6006f0ac6ad034
-    5f3fbe5ae9aad3d7.c2a677e852f357f7.ffff00000000ffff.ffff0000ffff0000
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    5f3fbe5ae9aad3d7.c2a677e852f357f7.efca2030bd071719.74b48792fdf21229
     16205249aa54dc91
 
-VPCMPESTRM_0x45_128(reg)
+VPCMPEQB_128(reg)
   before
     9fee66824c1b6a19.c2790cb42b8fb7ba.ec5947f3c6b6db5a.d72b82617c11d185
     6a6bbca781d4f86c.00bf4ed009f23bef.6bd69df4bfe582f2.6c72da1f89d40d6c
@@ -8781,12 +8781,12 @@
     36a1226913490325.7c9f9efe076315f9.d358c78cadb32373.0ce15eeefab1fd59
     d0a181d897e52ab7
   after
-    9fee66824c1b6a19.c2790cb42b8fb7ba.ec5947f3c6b6db5a.d72b82617c11d185
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     6a6bbca781d4f86c.00bf4ed009f23bef.6bd69df4bfe582f2.6c72da1f89d40d6c
     d3e25225e50ac137.f4dd009a9edf1ba0.99667358d70a866c.896aa554ff5a88f9
-    36a1226913490325.7c9f9efe076315f9.0000ffff00000000.0000ffffffff0000
+    36a1226913490325.7c9f9efe076315f9.d358c78cadb32373.0ce15eeefab1fd59
     d0a181d897e52ab7
-VPCMPESTRM_0x45_128(mem)
+VPCMPEQB_128(mem)
   before
     b0778afdf200c940.eff32adea71df7e4.73d1a5e85f89e327.76f794fada6c97b4
     8a2ff54b2610971f.592366f03e13dc1d.b43e8f45c35d4256.dc8ed610fdbf1cda
@@ -8796,11 +8796,11 @@
   after
     b0778afdf200c940.eff32adea71df7e4.73d1a5e85f89e327.76f794fada6c97b4
     8a2ff54b2610971f.592366f03e13dc1d.b43e8f45c35d4256.dc8ed610fdbf1cda
-    38953fad4f214f82.d27ed00a74b6ec7f.1db4daff4eeceeb1.626b8939af3aef92
-    9875e3108a3eaf92.b550669ae39364b4.ffffffffffffffff.ffffffffffffffff
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    9875e3108a3eaf92.b550669ae39364b4.88fd02041d41a265.64d8aae18e694b88
     3f22337436d66e67
 
-VPCMPESTRM_0x45_128(reg)
+VPCMPEQB_128(reg)
   before
     4d94225e420f92dc.849a5d5ef273717d.5de5230b2a358068.d3e6813e4b681c9e
     eb7c730b4fa0f492.dad12984a4cc516f.288903cae3287b48.d83bd59bf46e1587
@@ -8808,12 +8808,12 @@
     47da275fd9f76074.30a6a809541c5f17.932d1cdd1c32013b.8458e96b2a457b1b
     e3b9a1b6ee2e5f1e
   after
-    4d94225e420f92dc.849a5d5ef273717d.5de5230b2a358068.d3e6813e4b681c9e
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     eb7c730b4fa0f492.dad12984a4cc516f.288903cae3287b48.d83bd59bf46e1587
     752520e8f814cf36.74e7c36ebc560d94.70880241aaf99200.75c77906365e4c4d
-    47da275fd9f76074.30a6a809541c5f17.ffffffffffffffff.ffffffffffffffff
+    47da275fd9f76074.30a6a809541c5f17.932d1cdd1c32013b.8458e96b2a457b1b
     e3b9a1b6ee2e5f1e
-VPCMPESTRM_0x45_128(mem)
+VPCMPEQB_128(mem)
   before
     6cb51ed39d25b481.bde883dd8fd5e3f7.e8da533f8b2b0425.ecc54e0bd46204a6
     fc19daae54363571.339b30cfb63b946c.795140fe7a8db7e9.d69c93356f12d6ed
@@ -8823,11 +8823,11 @@
   after
     6cb51ed39d25b481.bde883dd8fd5e3f7.e8da533f8b2b0425.ecc54e0bd46204a6
     fc19daae54363571.339b30cfb63b946c.795140fe7a8db7e9.d69c93356f12d6ed
-    70b153342f6ea01a.053f2aa0e9b4ae7e.c0d6ec313f513690.aefee7c988d0b4bb
-    a249054f49d8afa7.8f206dbbc4cc6eda.0000ffff00000000.0000ffffffff0000
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    a249054f49d8afa7.8f206dbbc4cc6eda.9734d1c4f6803b45.d1374731bb28dabc
     9993addba6a4839e
 
-VMOVQ_IREGorMEM64_to_XMM(reg)
+VMOVHPD_128_StoreForm(reg)
   before
     645d1732e2d2ec0a.6fac6aedbe811e45.2c89f68ee410102c.db386da3ba288335
     8ce380a20d3e51af.b3a800f8ab74aa1f.3ac8c084e40bd01f.69ae3bbaa854c98c
@@ -8835,12 +8835,12 @@
     674e407d9ffcfe4f.1196ac0a5b68093a.16f30889f658989a.ce205e406f69421d
     5eb4aa88816bedaf
   after
-    0000000000000000.0000000000000000.0000000000000000.5eb4aa88816bedaf
+    645d1732e2d2ec0a.6fac6aedbe811e45.2c89f68ee410102c.db386da3ba288335
     8ce380a20d3e51af.b3a800f8ab74aa1f.3ac8c084e40bd01f.69ae3bbaa854c98c
     6e6fe597c372ee37.4a07415e2bbd1062.1427c709614ae960.1b62b7f5db11ca75
     674e407d9ffcfe4f.1196ac0a5b68093a.16f30889f658989a.ce205e406f69421d
     5eb4aa88816bedaf
-VMOVQ_IREGorMEM64_to_XMM(mem)
+VMOVHPD_128_StoreForm(mem)
   before
     a7e919b72d208658.d1cc8fc13d68bea2.e221bae7568254d2.9c787d7140c1197a
     858c26ba8e96ca44.0934cdcd3a406add.9a74e8e33916ab57.0102242bda12a7ab
@@ -8848,13 +8848,13 @@
     704d0beee0f34293.53f606f1bf6a75b9.2fa296e624de70d6.dd54f5c97099ddb3
     0ab41884a3e7fce2
   after
-    a7e919b72d208658.d1cc8fc13d68bea2.e221bae7568254d2.9c787d7140c1197a
+    a7e919b72d208658.d1cc8fc13d68bea2.e221bae7568254d2.9a74e8e33916ab57
     858c26ba8e96ca44.0934cdcd3a406add.9a74e8e33916ab57.0102242bda12a7ab
     d46a4e7ec0d8759e.6bd4f60f31123eab.155bb3ea1f31cbf4.a3ddf82461d57fdb
-    0000000000000000.0000000000000000.0000000000000000.9c787d7140c1197a
+    704d0beee0f34293.53f606f1bf6a75b9.2fa296e624de70d6.dd54f5c97099ddb3
     0ab41884a3e7fce2
 
-VMOVQ_IREGorMEM64_to_XMM(reg)
+VMOVHPD_128_StoreForm(reg)
   before
     884a5cc3974d1a12.3501dbf609f2ef4e.1de8fae180d24cb3.c4140dc466295529
     b160bdf1e85671ef.ff54398158e136fc.25f4cd490ed9fe44.b07e9570fe1f3718
@@ -8862,12 +8862,12 @@
     783ec6ca0e83bc63.120390d6d6c184e0.5f8c003607ede7dd.fd6ac4e3a639e17c
     15846482ed762249
   after
-    0000000000000000.0000000000000000.0000000000000000.15846482ed762249
+    884a5cc3974d1a12.3501dbf609f2ef4e.1de8fae180d24cb3.c4140dc466295529
     b160bdf1e85671ef.ff54398158e136fc.25f4cd490ed9fe44.b07e9570fe1f3718
     e342377a318f3d26.aa11a17de8cdd3c9.c7677b970808c919.cfaca8d70acbd2d0
     783ec6ca0e83bc63.120390d6d6c184e0.5f8c003607ede7dd.fd6ac4e3a639e17c
     15846482ed762249
-VMOVQ_IREGorMEM64_to_XMM(mem)
+VMOVHPD_128_StoreForm(mem)
   before
     f5c6049ffb8d4e63.ce9f674d1cbe2851.13f780763dc9036e.49b15992aa13943d
     78fb2125ed8a24f5.3fb0146ff7cdbe9d.89b9ef4a3af20c9e.e12080178a060ee5
@@ -8875,13 +8875,13 @@
     d772be21eb68ba33.e6158841819457fd.43d7383f63d4b097.8b102d4d778554ba
     5528abd5bb299941
   after
-    f5c6049ffb8d4e63.ce9f674d1cbe2851.13f780763dc9036e.49b15992aa13943d
+    f5c6049ffb8d4e63.ce9f674d1cbe2851.13f780763dc9036e.89b9ef4a3af20c9e
     78fb2125ed8a24f5.3fb0146ff7cdbe9d.89b9ef4a3af20c9e.e12080178a060ee5
     7af03502de7a5f2c.29becc9c3a3bb9f2.4f15583ee8475d9d.8327733245538f80
-    0000000000000000.0000000000000000.0000000000000000.49b15992aa13943d
+    d772be21eb68ba33.e6158841819457fd.43d7383f63d4b097.8b102d4d778554ba
     5528abd5bb299941
 
-VMOVQ_IREGorMEM64_to_XMM(reg)
+VMOVHPD_128_StoreForm(reg)
   before
     3dbbe737aec999bf.6a4b386e2f60f137.d30145c86965d26a.40ca0937c9a6c2b7
     9f14dfddebf491e0.11471dd6c76fc263.4dce009f8d3967e4.22bc491433c84f29
@@ -8889,12 +8889,12 @@
     404cf0aab41459be.07dd1ca261ff1de6.533a5de9fb1bcdb2.04c8032a892dc8b7
     bc7b753aac882d29
   after
-    0000000000000000.0000000000000000.0000000000000000.bc7b753aac882d29
+    3dbbe737aec999bf.6a4b386e2f60f137.d30145c86965d26a.40ca0937c9a6c2b7
     9f14dfddebf491e0.11471dd6c76fc263.4dce009f8d3967e4.22bc491433c84f29
     d6818e350e33bd51.a734ea43cea0e7e5.aec8b4308a9c5118.c47773c1bf46121b
     404cf0aab41459be.07dd1ca261ff1de6.533a5de9fb1bcdb2.04c8032a892dc8b7
     bc7b753aac882d29
-VMOVQ_IREGorMEM64_to_XMM(mem)
+VMOVHPD_128_StoreForm(mem)
   before
     ca5c46e04464fd9e.38c302a87922a0d3.0f0d2ee09b992095.9871f7357d41175d
     0837f1056ecbf342.1930be9bf7eacf3a.99919de79979ab1b.dab97f80ab9a6bc5
@@ -8902,13 +8902,13 @@
     8809c57fe67044c5.0b1e291095d5d4b5.a7c57e054f3c4c63.c0ac46c37d171f7f
     1def7d935852f829
   after
-    ca5c46e04464fd9e.38c302a87922a0d3.0f0d2ee09b992095.9871f7357d41175d
+    ca5c46e04464fd9e.38c302a87922a0d3.0f0d2ee09b992095.99919de79979ab1b
     0837f1056ecbf342.1930be9bf7eacf3a.99919de79979ab1b.dab97f80ab9a6bc5
     54d7f29645cbcc40.41e022efcdf722a2.8335e3a576ac7ca7.735ef03622b30498
-    0000000000000000.0000000000000000.0000000000000000.9871f7357d41175d
+    8809c57fe67044c5.0b1e291095d5d4b5.a7c57e054f3c4c63.c0ac46c37d171f7f
     1def7d935852f829
 
-VMOVUPS_XMM_to_XMMorMEM(reg)
+VPAND_128(reg)
   before
     e672911250f1ca40.829ae7ad6cc516fd.d238d06aeb102220.e30de9f33f37da7c
     77837fad017fd370.1c54d30af4d6ff13.f47811696c35488e.11d9a05a62a9e01d
@@ -8916,12 +8916,12 @@
     617ad6e3fb9974ce.a475f905785d068b.b59e56075d6b0b25.b72be249b41f47a9
     e64a66a71a3b1fec
   after
-    0000000000000000.0000000000000000.f47811696c35488e.11d9a05a62a9e01d
+    0000000000000000.0000000000000000.b41810014c210804.1109a04820094009
     77837fad017fd370.1c54d30af4d6ff13.f47811696c35488e.11d9a05a62a9e01d
     2c6c42ce06894c67.3403048499afbb33.cb2cea7ab3d082ac.0ff41f29d59d1b73
     617ad6e3fb9974ce.a475f905785d068b.b59e56075d6b0b25.b72be249b41f47a9
     e64a66a71a3b1fec
-VMOVUPS_XMM_to_XMMorMEM(mem)
+VPAND_128(mem)
   before
     791d262f23fe6168.72f937577d3d8654.49752b7baceb9b44.0c1b517e059420a7
     4a709eceec73c748.bb3562952701bda3.00ce18d15266378d.2eeed74a47d6fddb
@@ -8929,13 +8929,13 @@
     19c5a7fd2ca5f0e7.6513022466168c4d.0fbe0fcd6150737a.3ecb76900cd7fd0f
     e66b86e3c6ad9967
   after
-    791d262f23fe6168.72f937577d3d8654.0fbe0fcd6150737a.3ecb76900cd7fd0f
+    791d262f23fe6168.72f937577d3d8654.49752b7baceb9b44.0c1b517e059420a7
     4a709eceec73c748.bb3562952701bda3.00ce18d15266378d.2eeed74a47d6fddb
-    360f4b6e90a70db9.9879510b96705567.a34d3af385d99690.7565e5d7c1bedd6f
+    0000000000000000.0000000000000000.0044085100621304.0c0a514a05942083
     19c5a7fd2ca5f0e7.6513022466168c4d.0fbe0fcd6150737a.3ecb76900cd7fd0f
     e66b86e3c6ad9967
 
-VMOVUPS_XMM_to_XMMorMEM(reg)
+VPAND_128(reg)
   before
     c792113c8bcded22.d0603065db792dfd.7d4d704c317f9c01.20ed134b03d78c76
     3e8c1405f6c234ec.35aa6194ba2f7d27.3e7498ef9638c22e.b2a6c059877b9bb1
@@ -8943,12 +8943,12 @@
     5f296e9a2f5c8e61.7c7eacf476744d6a.28b9025797c83fa6.cae50ad6a2488d92
     07039e1d7289e891
   after
-    0000000000000000.0000000000000000.3e7498ef9638c22e.b2a6c059877b9bb1
+    0000000000000000.0000000000000000.2830004796080226.82a4005082488990
     3e8c1405f6c234ec.35aa6194ba2f7d27.3e7498ef9638c22e.b2a6c059877b9bb1
     a8a589aba318ab73.2570b775e4d49f92.03d474792ecc3a81.a2b594e408475c56
     5f296e9a2f5c8e61.7c7eacf476744d6a.28b9025797c83fa6.cae50ad6a2488d92
     07039e1d7289e891
-VMOVUPS_XMM_to_XMMorMEM(mem)
+VPAND_128(mem)
   before
     35dccca39416297e.c063bf3f35191862.16a0befd8b1944db.086e3df36db70e48
     303a115623fc0e86.27a1760452dc8623.cfa1687c40d14010.014122bb4b25e314
@@ -8956,13 +8956,13 @@
     fdb7ccf0f900af95.77540aa33fa0fe94.0e74748df7a83577.aa6cd67b91af8ed8
     135d9e4c30e4dc28
   after
-    35dccca39416297e.c063bf3f35191862.0e74748df7a83577.aa6cd67b91af8ed8
+    35dccca39416297e.c063bf3f35191862.16a0befd8b1944db.086e3df36db70e48
     303a115623fc0e86.27a1760452dc8623.cfa1687c40d14010.014122bb4b25e314
-    d4e9e7213b4651d4.f02d9157222f1450.834f265db0a7fc35.6e7cab19ce9ffab5
+    0000000000000000.0000000000000000.06a0287c00114010.004020b349250200
     fdb7ccf0f900af95.77540aa33fa0fe94.0e74748df7a83577.aa6cd67b91af8ed8
     135d9e4c30e4dc28
 
-VMOVUPS_XMM_to_XMMorMEM(reg)
+VPAND_128(reg)
   before
     039bfff848c72053.876f3caf7837e4f4.1862df5448bb7f9c.4cddcff632dfa702
     d872f5eb75e69502.4ddcb14ad5f6ab1f.2fa30cd6d60bd413.1956b2867d580d01
@@ -8970,12 +8970,12 @@
     9d1a92567b0605a2.02089fc4963de283.2fed5afdf77aea01.cfa700c7b042a80e
     71186451d1ca5573
   after
-    0000000000000000.0000000000000000.2fa30cd6d60bd413.1956b2867d580d01
+    0000000000000000.0000000000000000.2fa108d4d60ac001.0906008630400800
     d872f5eb75e69502.4ddcb14ad5f6ab1f.2fa30cd6d60bd413.1956b2867d580d01
     ec2d7d9152cd78e4.2dcba9ad2b49c13f.18628b95881c39a6.51ab9927f32025a1
     9d1a92567b0605a2.02089fc4963de283.2fed5afdf77aea01.cfa700c7b042a80e
     71186451d1ca5573
-VMOVUPS_XMM_to_XMMorMEM(mem)
+VPAND_128(mem)
   before
     12c83fb171c5e7fd.458330a68d1f78eb.a85f0f7b34ddca15.d08e747ac1b222cf
     8e840fd3ad3e19d7.41b553ee23a30c69.fb9c75bf1e353421.5792d578824f1ebc
@@ -8983,13 +8983,13 @@
     86507c0d67db4f2e.a6a419124e1e8ab6.17f7149a4c3f805a.87f35da857e951a7
     e7e87cb2a3ff00fb
   after
-    12c83fb171c5e7fd.458330a68d1f78eb.17f7149a4c3f805a.87f35da857e951a7
+    12c83fb171c5e7fd.458330a68d1f78eb.a85f0f7b34ddca15.d08e747ac1b222cf
     8e840fd3ad3e19d7.41b553ee23a30c69.fb9c75bf1e353421.5792d578824f1ebc
-    c0184fa3a141a72e.eefcf798da1ffec9.d68a4e7a7252ddd4.20457964d5de1a76
+    0000000000000000.0000000000000000.a81c053b14150001.508254788002028c
     86507c0d67db4f2e.a6a419124e1e8ab6.17f7149a4c3f805a.87f35da857e951a7
     e7e87cb2a3ff00fb
 
-VMOVNTDQ_128(reg)
+VPMOVMSKB_128(reg)
   before
     9e6fd2ec55a9631f.bbf810fd1e17cb02.c6f8b4c6192cebdd.99ad450ac708dbde
     07d65bc40a75b5bf.3adb8960df01d8d7.ab46c422dad65ee9.37795cb6ffbaa88d
@@ -9001,8 +9001,8 @@
     07d65bc40a75b5bf.3adb8960df01d8d7.ab46c422dad65ee9.37795cb6ffbaa88d
     7e6713a55dee3487.e1c76220c8a632d8.afd845912aa71f87.cf27d68a1160a493
     5e6ff7fbeba11a21.8a86172bf5119432.2ffb347fa72b6a63.3c832d7219068a1b
-    5959df5a31b91852
-VMOVNTDQ_128(mem)
+    000000000000ad1f
+VPMOVMSKB_128(mem)
   before
     0474672e78840863.053a02325019a33c.13e5256c814fbc10.87fb8c58edef7a28
     17a142da0873167b.ce1430b627e20d82.56b006ce896a639f.13244988977e8c83
@@ -9010,13 +9010,13 @@
     e962dd6b74ef806e.3524e6569c986f41.7eb936aa7a6d257f.3720e29d892ea6a9
     878cb75b086725cd
   after
-    0474672e78840863.053a02325019a33c.56b006ce896a639f.13244988977e8c83
+    0474672e78840863.053a02325019a33c.13e5256c814fbc10.87fb8c58edef7a28
     17a142da0873167b.ce1430b627e20d82.56b006ce896a639f.13244988977e8c83
     6fadea4bfd9300c5.14487df30c8892a0.31b3383f2871480b.2fc2677b4265dc1f
     e962dd6b74ef806e.3524e6569c986f41.7eb936aa7a6d257f.3720e29d892ea6a9
     878cb75b086725cd
 
-VMOVNTDQ_128(reg)
+VPMOVMSKB_128(reg)
   before
     7b50e11f5c9c9636.5f8c9628889453a2.8bf26549729edf12.1b907dfb9c6cb728
     6fb95c5721583491.aff9916c568d348c.74fff83a2b2420be.e202871eaa79ba32
@@ -9028,8 +9028,8 @@
     6fb95c5721583491.aff9916c568d348c.74fff83a2b2420be.e202871eaa79ba32
     bf13246df1273d89.b3744a25f9e6e159.4a979b9362b86cf3.b0dcd2ffbfa0e9c8
     c7a936cf6b95ebcb.48c83e3e8dab1435.6a0648c2b3e5ff5a.62ead98bf7ee0216
-    d2f818ac6f6ebf4a
-VMOVNTDQ_128(mem)
+    00000000000061aa
+VPMOVMSKB_128(mem)
   before
     ddd10c50422ddc8d.e3c98ce8292f7b03.4ac2e8a330e98a4b.3197fd32bb3817a1
     5f432f618d36160e.6fbd2424c78028dc.962ec440fbabfec7.f998b54f163cee74
@@ -9037,13 +9037,13 @@
     391df77ff957d174.465508b51579cc23.778c02d27fedd3a4.00151e403388cb6d
     f62ac7ec2de84aea
   after
-    ddd10c50422ddc8d.e3c98ce8292f7b03.962ec440fbabfec7.f998b54f163cee74
+    ddd10c50422ddc8d.e3c98ce8292f7b03.4ac2e8a330e98a4b.3197fd32bb3817a1
     5f432f618d36160e.6fbd2424c78028dc.962ec440fbabfec7.f998b54f163cee74
     3518ffcd6b952af7.c7d3faefe2152f03.06d84e010cfe2dd6.20536c855f7dc17f
     391df77ff957d174.465508b51579cc23.778c02d27fedd3a4.00151e403388cb6d
     f62ac7ec2de84aea
 
-VMOVNTDQ_128(reg)
+VPMOVMSKB_128(reg)
   before
     5ede64f5e92978a4.481e94635287cab3.4a904ce2fd383be9.c5165da06f84ac5d
     957df0c804d89244.3ee750659331cfdd.2ed0c0e335deb700.cc41da55f8d0732c
@@ -9055,8 +9055,8 @@
     957df0c804d89244.3ee750659331cfdd.2ed0c0e335deb700.cc41da55f8d0732c
     f55367cf1980d379.f744a971d7619d21.4e6062225af87e16.68daf5df37dbe53d
     dbabc678c5ae78ed.4f011a733b24f0a9.058e2e0d0711c9d4.75ae2b2847b4bebd
-    cf87f61e4564b9d8
-VMOVNTDQ_128(mem)
+    00000000000076ac
+VPMOVMSKB_128(mem)
   before
     5231d4ac4df994ba.a3d2072da4ecbd4d.22e91f57da8683a1.b1a41e0ed8b6d7e9
     da7a40be797f098e.a914285c50c8de44.4cc93409d0911337.acef30936a72e2fe
@@ -9064,13 +9064,13 @@
     6915b21eb38ab3bd.df19f7d58588a2a9.15a1808834d719e7.0454a7d64060e2df
     1706046cbbaa4e02
   after
-    5231d4ac4df994ba.a3d2072da4ecbd4d.4cc93409d0911337.acef30936a72e2fe
+    5231d4ac4df994ba.a3d2072da4ecbd4d.22e91f57da8683a1.b1a41e0ed8b6d7e9
     da7a40be797f098e.a914285c50c8de44.4cc93409d0911337.acef30936a72e2fe
     432db640e800d480.49bd247068ce167f.a96dd6763a535c94.54bb5f0759d127c2
     6915b21eb38ab3bd.df19f7d58588a2a9.15a1808834d719e7.0454a7d64060e2df
     1706046cbbaa4e02
 
-VMOVLHPS_128(reg)
+VCVTTSS2SI_64(reg)
   before
     eb1c7335673ba9d6.28ffb144f8286071.c7749ef74585be6f.6c31ae2dd92a085a
     dae4ef9de0a02c08.5cb72e9ed3e797c7.5d191342444ea57c.89e9dc504557e219
@@ -9078,12 +9078,12 @@
     7db5fefaa613a134.92c1929fb9f6970c.03745c046d79c81e.8a0029bfe5704f2e
     25f740e44f7458db
   after
-    0000000000000000.0000000000000000.4a9487dd956a6651.89e9dc504557e219
+    eb1c7335673ba9d6.28ffb144f8286071.c7749ef74585be6f.6c31ae2dd92a085a
     dae4ef9de0a02c08.5cb72e9ed3e797c7.5d191342444ea57c.89e9dc504557e219
     41a87410c1631643.e009a5195fd216ec.fd5554221d71957e.4a9487dd956a6651
     7db5fefaa613a134.92c1929fb9f6970c.03745c046d79c81e.8a0029bfe5704f2e
-    25f740e44f7458db
-VMOVLHPS_128(mem)
+    0000000000000d7e
+VCVTTSS2SI_64(mem)
   before
     f6464738f2823d85.e85789c82c390a87.4daa721efc5dd752.cbc22852cff27a0b
     dbb9bba5e8a7bc58.dfda12e4ee638de7.ed92c080441592eb.b08bb279e069e9ef
@@ -9095,9 +9095,9 @@
     dbb9bba5e8a7bc58.dfda12e4ee638de7.ed92c080441592eb.b08bb279e069e9ef
     af1b16184dee8f7f.bf8994bc891d6501.4d43f8b3ae2a8302.101bf8e63b694f76
     4d3ad67d3d647327.e2b20bbb98f1d081.4b8a96a256a667c4.46bef5047c7fe94d
-    aebfa53f4036f220
+    fffffffe1b0bea00
 
-VMOVLHPS_128(reg)
+VCVTTSS2SI_64(reg)
   before
     a36b0502221aa79a.93e076c1d613247b.a59f734db86e0812.c23316395797fa5d
     830e0fbbbfb84468.5bda72ce31095da8.649dc9dd841d4960.8d0af564cd09f8f8
@@ -9105,12 +9105,12 @@
     706916bd984f25af.e5fa6ff8a3f95a3b.47fc2cad9146dae6.9371bd268b9d23e6
     86999e9509d7c991
   after
-    0000000000000000.0000000000000000.8adbae0fd5071cc1.8d0af564cd09f8f8
+    a36b0502221aa79a.93e076c1d613247b.a59f734db86e0812.c23316395797fa5d
     830e0fbbbfb84468.5bda72ce31095da8.649dc9dd841d4960.8d0af564cd09f8f8
     a9f4c1d5b39a0536.83f447926c52dcd9.7bf808d9988cd118.8adbae0fd5071cc1
     706916bd984f25af.e5fa6ff8a3f95a3b.47fc2cad9146dae6.9371bd268b9d23e6
-    86999e9509d7c991
-VMOVLHPS_128(mem)
+    fffffffff7607080
+VCVTTSS2SI_64(mem)
   before
     3d20ce496ec2c9ee.36b80bdd0d60e280.5fb868ecf10a96fa.22f431c30bd7a076
     95d0c72cd369e02a.552f9aa2ac5b7554.cbfaad5a73914a41.692e1388a1cc6173
@@ -9122,9 +9122,9 @@
     95d0c72cd369e02a.552f9aa2ac5b7554.cbfaad5a73914a41.692e1388a1cc6173
     6b76072c57d8ca71.2b18c17911cb1dd8.078bbb2e449b333d.78f4cf68f0b05789
     99dd0933131c43ee.12c07bccd83d14b7.ed380c5480330d1a.ab9460d0930fbf65
-    5e58c22b2676d5b3
+    0000000000000000
 
-VMOVLHPS_128(reg)
+VCVTTSS2SI_64(reg)
   before
     ed8cf1e44670d41f.fcd34a2f254006ce.6873c4099f3c979e.5ace1eb844669303
     b47eea698e8af954.7122440ba951d03c.877d999aff54e239.2b166c46ab3e8324
@@ -9132,12 +9132,12 @@
     59c82784084ba4ca.fcfe581375676875.94c5d36d0001bf39.64f4ad91d5138bc2
     85209726ce271c95
   after
-    0000000000000000.0000000000000000.3adf72ebd2ca97ab.2b166c46ab3e8324
+    ed8cf1e44670d41f.fcd34a2f254006ce.6873c4099f3c979e.5ace1eb844669303
     b47eea698e8af954.7122440ba951d03c.877d999aff54e239.2b166c46ab3e8324
     0e79a8259b4f80fe.d29775b3ba5a5d65.cd2af4ed96123133.3adf72ebd2ca97ab
     59c82784084ba4ca.fcfe581375676875.94c5d36d0001bf39.64f4ad91d5138bc2
-    85209726ce271c95
-VMOVLHPS_128(mem)
+    0000000000000000
+VCVTTSS2SI_64(mem)
   before
     7a31ae95dc110751.f0b863f2720aa364.cb236917f585af97.399b3186d8adc9f7
     1df16dc918de0522.2f9658db7419b777.1cd225ab56beecf8.19f90aa4bba38a18
@@ -9149,9 +9149,9 @@
     1df16dc918de0522.2f9658db7419b777.1cd225ab56beecf8.19f90aa4bba38a18
     4b2d50b0a199d533.72ab03abab031cb0.c9d707bcb521dbc3.8e295b33436e3f48
     e0b1d435904e31b1.14465fceb25510bb.affd8a342eb73a25.f5781fa00f9a2535
-    aa315255b9b47588
+    fffa91b048000000
 
-VPABSD_128(reg)
+VPACKUSWB_128(reg)
   before
     0aa2f0c0dd476ef0.b84974440309d6c7.73b268b1269acd43.aa122d01dc8ec34a
     6f15f54b18df4a17.afc0acc916d780a2.ea3a1abea25e90f5.96e0690ddbb1325d
@@ -9159,12 +9159,12 @@
     bb35267541509e54.6a7fd4e68adad156.8fd26a0b24941685.b1d9a0973e0db6ff
     989d93ecda5d42e6
   after
-    0aa2f0c0dd476ef0.b84974440309d6c7.73b268b1269acd43.aa122d01dc8ec34a
-    0000000000000000.0000000000000000.2bd38e9d3cd26b84.4f34bb46482d458b
+    0000000000000000.0000000000000000.00ffffff0000ff00.00ff000000ff00ff
+    6f15f54b18df4a17.afc0acc916d780a2.ea3a1abea25e90f5.96e0690ddbb1325d
     36d75e64050946a9.a1e4f8b1e4c4ea6e.d42c7163c32d947c.4f34bb46482d458b
     bb35267541509e54.6a7fd4e68adad156.8fd26a0b24941685.b1d9a0973e0db6ff
     989d93ecda5d42e6
-VPABSD_128(mem)
+VPACKUSWB_128(mem)
   before
     e04b1031372aa56c.5a7849ec67418dc1.e65ebd552327f187.75790021611f52bb
     65ae9452727f9abc.6fefc3341466509f.f14d2eebcbb7052c.e46d2f13175884cb
@@ -9173,12 +9173,12 @@
     f70d2c44249934cd
   after
     e04b1031372aa56c.5a7849ec67418dc1.e65ebd552327f187.75790021611f52bb
-    0000000000000000.0000000000000000.19a142ab2327f187.75790021611f52bb
-    02939a3ba668de03.56e590b9e34d2398.6718a3939f94cb72.36f9f34ce2cde861
+    65ae9452727f9abc.6fefc3341466509f.f14d2eebcbb7052c.e46d2f13175884cb
+    0000000000000000.0000000000000000.0000ff00ff21ffff.00ff00ff00ffff00
     95c69dd8f0f22d6c.6ba5ade771824158.238a9838bbccfc84.c96b49385d09b928
     f70d2c44249934cd
 
-VPABSD_128(reg)
+VPACKUSWB_128(reg)
   before
     1e2d98dad40894fc.f9131b166b284224.0a7d152b5990e78d.037189c8396b5790
     9815896708e21760.0a4690df3416db57.8fb7c4ef380351e0.e297f32e387b97bf
@@ -9186,12 +9186,12 @@
     f96feb176e097079.a28d4bc61d4c83dc.ba84e8ab48496097.0cd31f2c2324b33d
     1081da9c48d309e2
   after
-    1e2d98dad40894fc.f9131b166b284224.0a7d152b5990e78d.037189c8396b5790
-    0000000000000000.0000000000000000.55a0b6a056984500.6336aeaa2df588c0
+    0000000000000000.0000000000000000.0000ffffffffff00.0000ffff0000ff00
+    9815896708e21760.0a4690df3416db57.8fb7c4ef380351e0.e297f32e387b97bf
     c212fc585db4f7a6.a32a762166c9b230.55a0b6a0a967bb00.9cc95156d20a7740
     f96feb176e097079.a28d4bc61d4c83dc.ba84e8ab48496097.0cd31f2c2324b33d
     1081da9c48d309e2
-VPABSD_128(mem)
+VPACKUSWB_128(mem)
   before
     839ffc935c25335c.977a5412d86dc086.e2398abc76ab0c86.19ae557ab2347e51
     40f803fb7c26eed7.f97d32b4366d2178.3efbafee8df3075b.ce6cf97b83b54edb
@@ -9200,12 +9200,12 @@
     880d08dc732e4f0f
   after
     839ffc935c25335c.977a5412d86dc086.e2398abc76ab0c86.19ae557ab2347e51
-    0000000000000000.0000000000000000.1dc6754476ab0c86.19ae557a4dcb81af
-    255a6ac1c3e0f67e.7bc682682594d0fc.949f37487d2f3186.3508d01956570fe1
+    40f803fb7c26eed7.f97d32b4366d2178.3efbafee8df3075b.ce6cf97b83b54edb
+    0000000000000000.0000000000000000.0000ffffffff00ff.ff0000ff000000ff
     0d8fadd24d62067e.7a9f3e9c406e08be.bff19cb6626b4534.a9cfd6c0c7a6fb0e
     880d08dc732e4f0f
 
-VPABSD_128(reg)
+VPACKUSWB_128(reg)
   before
     2d0e61d9f67c4790.d364491938b5dc03.505564bb24880769.9abd5c2459b40191
     f31edd23ea1c1e3c.55a5b8819de73138.5a34ef316c6d07aa.03cef27e7d151fc8
@@ -9213,12 +9213,12 @@
     569a2f4e9b7e5cc7.f89a04694b154f64.7a9c25d39ac9fc9c.ebf391a7be517377
     229e924d13432146
   after
-    2d0e61d9f67c4790.d364491938b5dc03.505564bb24880769.9abd5c2459b40191
-    0000000000000000.0000000000000000.0b7824954b56bad4.2b0e25501464a4fa
+    0000000000000000.0000000000000000.ffff0000000000ff.ff00ffffff00ffff
+    f31edd23ea1c1e3c.55a5b8819de73138.5a34ef316c6d07aa.03cef27e7d151fc8
     38897826ee9811c0.6d1e78f89a03c449.f487db6bb4a9452c.d4f1dab0eb9b5b06
     569a2f4e9b7e5cc7.f89a04694b154f64.7a9c25d39ac9fc9c.ebf391a7be517377
     229e924d13432146
-VPABSD_128(mem)
+VPACKUSWB_128(mem)
   before
     56bf5990057d229f.ab9efd0890593bfe.d3e7d9c0cb2a8fb3.48bdc7d6b75869a6
     6421625bb10c31b0.91e1debe66b6e910.d8cf71e9364d4062.ba37bfe1a9e3c8f5
@@ -9227,12 +9227,12 @@
     80b37e6392dee73c
   after
     56bf5990057d229f.ab9efd0890593bfe.d3e7d9c0cb2a8fb3.48bdc7d6b75869a6
-    0000000000000000.0000000000000000.2c18264034d5704d.48bdc7d648a7965a
-    2692299932fb0ca3.66afcedebc20a3aa.e41f4ad1a98b1d9e.2c56085e0bf55536
+    6421625bb10c31b0.91e1debe66b6e910.d8cf71e9364d4062.ba37bfe1a9e3c8f5
+    0000000000000000.0000000000000000.00000000ff0000ff.00ffffff00000000
     79dc2b38a5576da4.8454c9d32b23a578.d4a3df6240efe493.fa669ebb7a1a4b14
     80b37e6392dee73c
 
-VMOVHLPS_128(reg)
+VCVTSS2SD_128(reg)
   before
     1a89a3c2eece655a.3acce223252a10e0.481ccc09514c2a25.8227ac8915854f6c
     243309442a750119.432ecc46ce83b383.0f52d2ebca266f5e.cb762d3347591a56
@@ -9240,12 +9240,12 @@
     f7368861b419812c.a07827e50ef0e4ac.113cd769221e2923.9fa93dbc2cedc40b
     e125c37418c5192f
   after
-    0000000000000000.0000000000000000.0f52d2ebca266f5e.3344d7e7313db0cf
+    0000000000000000.0000000000000000.0f52d2ebca266f5e.3d9db88160000000
     243309442a750119.432ecc46ce83b383.0f52d2ebca266f5e.cb762d3347591a56
     f9feac55e360f625.71ce658dbd6b10b8.3344d7e7313db0cf.8b5edf4af078027c
     f7368861b419812c.a07827e50ef0e4ac.113cd769221e2923.9fa93dbc2cedc40b
     e125c37418c5192f
-VMOVHLPS_128(mem)
+VCVTSS2SD_128(mem)
   before
     2e9ced5ecf0bc013.79279ad43a2fded8.acf89038dc1deb8a.0687cfdb3a541506
     62da38666dcb73e4.db1ddd1a102b48d5.71191b7343ffe07f.6c71b9aa156bb126
@@ -9255,11 +9255,11 @@
   after
     2e9ced5ecf0bc013.79279ad43a2fded8.acf89038dc1deb8a.0687cfdb3a541506
     62da38666dcb73e4.db1ddd1a102b48d5.71191b7343ffe07f.6c71b9aa156bb126
-    59ad1f781012efcd.78644da0d29bfcd0.cba9448360a180b7.a04693424ef0392c
+    0000000000000000.0000000000000000.71191b7343ffe07f.3f4a82a0c0000000
     efe01d80d1ebf0fb.ae47e6d01e0a3675.967287524f0f875d.fe515810816ee9c7
     e2df057e4b71fca1
 
-VMOVHLPS_128(reg)
+VCVTSS2SD_128(reg)
   before
     a93d94fa4786af66.003eb16ace62319a.d813a4188d05316f.ae4161ce2b56b09e
     adb503ef12383dc4.6894542323836fd5.511584e3bd172b6b.efe14de21081b9a5
@@ -9267,12 +9267,12 @@
     df256ff483a4def5.ad58bbae42f6d1d1.a4e697b1cfb00618.5cc94b8267b355b8
     40a755e611d3621b
   after
-    0000000000000000.0000000000000000.511584e3bd172b6b.7797819c4acc5e15
+    0000000000000000.0000000000000000.511584e3bd172b6b.44f66ab700000000
     adb503ef12383dc4.6894542323836fd5.511584e3bd172b6b.efe14de21081b9a5
     4b944dc94714e464.03ae8495eb5b66d9.7797819c4acc5e15.3520c77a1b9c5c9f
     df256ff483a4def5.ad58bbae42f6d1d1.a4e697b1cfb00618.5cc94b8267b355b8
     40a755e611d3621b
-VMOVHLPS_128(mem)
+VCVTSS2SD_128(mem)
   before
     bd87629234083df5.c5b663dc61766721.425e7858455e6eea.364dc38de8506121
     af35ed72ec5ca271.599227ed7e16bd94.9e8c348110a1f650.871aff9c3238a9db
@@ -9282,11 +9282,11 @@
   after
     bd87629234083df5.c5b663dc61766721.425e7858455e6eea.364dc38de8506121
     af35ed72ec5ca271.599227ed7e16bd94.9e8c348110a1f650.871aff9c3238a9db
-    f27d727357dd4fbc.f704b693750f1afc.9cad6c14becb282e.f597494a49f21bf3
+    0000000000000000.0000000000000000.9e8c348110a1f650.c50a0c2420000000
     612b6d7f8e97fe01.fa590c3ae3edbb02.1a8f9dfd6be6bfb1.da119c04c70cf214
     93d4f4344b126ceb
 
-VMOVHLPS_128(reg)
+VCVTSS2SD_128(reg)
   before
     7d2c4e476f8ec324.da0a5b84af946c6e.c0dd254f633cdc55.f3fc422834007604
     f265a4aacf0e346a.38e8b66cd6e3552c.a4dcfe3c9189b89f.03c1d78134250954
@@ -9294,12 +9294,12 @@
     f0a9390cb54852d0.12cca99aa3a08651.367adc526a4b94c9.3782c26d4bbcb799
     131710d99a4849e7
   after
-    0000000000000000.0000000000000000.a4dcfe3c9189b89f.02a2916f0a5f8c8c
+    0000000000000000.0000000000000000.a4dcfe3c9189b89f.417796f320000000
     f265a4aacf0e346a.38e8b66cd6e3552c.a4dcfe3c9189b89f.03c1d78134250954
     4fcbf4c8081efa6a.568ffc251e8d746a.02a2916f0a5f8c8c.25aad8f4885f36cc
     f0a9390cb54852d0.12cca99aa3a08651.367adc526a4b94c9.3782c26d4bbcb799
     131710d99a4849e7
-VMOVHLPS_128(mem)
+VCVTSS2SD_128(mem)
   before
     97333e22900ea8e1.324c70e4721a7847.476b37b782274710.9bb1db534cd80c02
     9ea3c8364a1a8fb4.6f0193bbdd20a87b.d0382468d72e73d1.8f9488dd4c922fe2
@@ -9309,11 +9309,11 @@
   after
     97333e22900ea8e1.324c70e4721a7847.476b37b782274710.9bb1db534cd80c02
     9ea3c8364a1a8fb4.6f0193bbdd20a87b.d0382468d72e73d1.8f9488dd4c922fe2
-    03332affe378bc8c.0412a0fd8fe41d19.8bffea99bdc2c5c1.6d6de15c07053a16
+    0000000000000000.0000000000000000.d0382468d72e73d1.419b018040000000
     a4afe16b7735e894.4dcb921626f414cd.528b073650eefa0b.9089e13c18be694a
     563384e91c48f729
 
-VMOVQ_XMM_to_IREG64(reg)
+VCVTSD2SS_128(reg)
   before
     1ab9c6cfaf302160.5be36865235cd2f9.a67a65723edcc943.03aaf72badbecedc
     3765a45b6b01239a.059b3bd903f934e6.6b6a167e72277726.78263465ef3ffc5f
@@ -9321,12 +9321,12 @@
     f0632011d48f9ec9.a3c5b6dfccc7530a.a93bfe529f16b1e4.22688a549482592e
     0ec59ae22f5c00d1
   after
-    1ab9c6cfaf302160.5be36865235cd2f9.a67a65723edcc943.03aaf72badbecedc
+    0000000000000000.0000000000000000.6b6a167e72277726.7826346500000000
     3765a45b6b01239a.059b3bd903f934e6.6b6a167e72277726.78263465ef3ffc5f
     0b8518f7ef473984.7fa2d6b33219cb88.f8e69fa45e615c22.8fcc3cce337c41c1
     f0632011d48f9ec9.a3c5b6dfccc7530a.a93bfe529f16b1e4.22688a549482592e
-    03aaf72badbecedc
-VMOVQ_XMM_to_IREG64(mem)
+    0ec59ae22f5c00d1
+VCVTSD2SS_128(mem)
   before
     30b1e8631f16f1d7.434cb713b8648f16.4fd15649ee108799.dab52ef2d1d3b518
     62f6f1c580bce96c.618cda6b37524817.5d9032deb4ff2561.e7a02cf28f23a26a
@@ -9336,11 +9336,11 @@
   after
     30b1e8631f16f1d7.434cb713b8648f16.4fd15649ee108799.dab52ef2d1d3b518
     62f6f1c580bce96c.618cda6b37524817.5d9032deb4ff2561.e7a02cf28f23a26a
-    816130f3705ba4bb.a46e8484ece60477.aacec68839a0e78d.2c48f2bd7592b684
+    0000000000000000.0000000000000000.5d9032deb4ff2561.e7a02cf2ff800000
     69bf21d908feddf0.6a40b0ca74ab00e3.12598e3499ff894a.05f87ebe20ad2a15
     cefecb632bff3dc7
 
-VMOVQ_XMM_to_IREG64(reg)
+VCVTSD2SS_128(reg)
   before
     e3a4d51733152947.f7d9406366b25239.0d4c5ca96a2d7807.72fb07cff129c8c3
     9f379847d37a2b40.057e0a7ea682bdbf.eadf848d6af9a88e.a482ac445c2a6025
@@ -9348,12 +9348,12 @@
     81543bc64d626050.14958b1239a76739.c3ca3414fb9c1e77.f16a6a6bdddd8b53
     c4647cf62ba89577
   after
-    e3a4d51733152947.f7d9406366b25239.0d4c5ca96a2d7807.72fb07cff129c8c3
+    0000000000000000.0000000000000000.eadf848d6af9a88e.a482ac44ff800000
     9f379847d37a2b40.057e0a7ea682bdbf.eadf848d6af9a88e.a482ac445c2a6025
     6003115da8ba7f5f.7079f914e37adab1.5e4522e2119acb24.85b8f97ff70c0d9c
     81543bc64d626050.14958b1239a76739.c3ca3414fb9c1e77.f16a6a6bdddd8b53
-    72fb07cff129c8c3
-VMOVQ_XMM_to_IREG64(mem)
+    c4647cf62ba89577
+VCVTSD2SS_128(mem)
   before
     da72a90bfc7ae833.5e7512ef5ffc0bbe.cda03b65c5131e83.76bab590c38cdd30
     0f5f6f976c5e40b4.52b492427917bc56.776486f7a2cdbbbd.d360a1c005f543fe
@@ -9363,11 +9363,11 @@
   after
     da72a90bfc7ae833.5e7512ef5ffc0bbe.cda03b65c5131e83.76bab590c38cdd30
     0f5f6f976c5e40b4.52b492427917bc56.776486f7a2cdbbbd.d360a1c005f543fe
-    3ff94a8498605826.bb5bb82d383cafc3.eeaee6b6eddefc10.360af4125e638d8b
+    0000000000000000.0000000000000000.776486f7a2cdbbbd.d360a1c07f800000
     460ab4bf9c8dedb4.f3b77e1a37f91fb2.0e4ad98dc2549bab.fb02abf06963f783
     7e95c1c8c380bd94
 
-VMOVQ_XMM_to_IREG64(reg)
+VCVTSD2SS_128(reg)
   before
     1b0f320507461a67.005f2b3593f0bb8b.5814e27712d949ce.b303da683b3b55b8
     2ebcfa13d2424bab.49c429d09a957dd6.44bedfaf666969c4.b9a76533779de663
@@ -9375,12 +9375,12 @@
     26de80526b0a1930.f8edb02a45d6d07b.25299560e8c679ed.58db0a49a1077b46
     a8041c6cc927f8d6
   after
-    1b0f320507461a67.005f2b3593f0bb8b.5814e27712d949ce.b303da683b3b55b8
+    0000000000000000.0000000000000000.44bedfaf666969c4.b9a765337f800000
     2ebcfa13d2424bab.49c429d09a957dd6.44bedfaf666969c4.b9a76533779de663
     13e7165ebfff8c0a.fd052c7ecb88f0c2.1501722ecf34ba40.fc00f7da8f8809d9
     26de80526b0a1930.f8edb02a45d6d07b.25299560e8c679ed.58db0a49a1077b46
-    b303da683b3b55b8
-VMOVQ_XMM_to_IREG64(mem)
+    a8041c6cc927f8d6
+VCVTSD2SS_128(mem)
   before
     ca47a83022f33bb4.c3eb365b71ee2dcb.154a2fbf228bd92c.d28146b14dace278
     99702b7fc977020c.465b33e66e370584.32e6272b7eb1c702.7656808e9b71318d
@@ -9390,11 +9390,11 @@
   after
     ca47a83022f33bb4.c3eb365b71ee2dcb.154a2fbf228bd92c.d28146b14dace278
     99702b7fc977020c.465b33e66e370584.32e6272b7eb1c702.7656808e9b71318d
-    f14b1f47d9c0070b.0b7a745dfd71dd0a.2a8e135976575528.6ff43f616da1a1d7
+    0000000000000000.0000000000000000.32e6272b7eb1c702.7656808eff800000
     ada302726ed906dd.6e94f32dba29f007.d90e6f3525863fcb.17a7809760c96f02
     cbbb3d9d0f74d7bc
 
-VMOVQ_XMMorMEM64_to_XMM(reg)
+VMOVD_XMM_to_IREG32(reg)
   before
     e87b74de172e14af.ab454feea6cfbdad.cbf5aec342ea7b27.1a32b7aca84c4317
     c83520c513846387.c6fd82a69aace6a8.7de8a08a3141ba17.cbc668a81ab41b37
@@ -9403,11 +9403,11 @@
     0f18c3f92632f84b
   after
     e87b74de172e14af.ab454feea6cfbdad.cbf5aec342ea7b27.1a32b7aca84c4317
-    0000000000000000.0000000000000000.0000000000000000.1a32b7aca84c4317
+    c83520c513846387.c6fd82a69aace6a8.7de8a08a3141ba17.cbc668a81ab41b37
     c8333ec0a00100f1.d9971786687e3efa.e2bbc5ee22b9e883.c795fd1698ca8457
     44c2c83a59312799.c2df8b7a2b5180ce.55b81a5ab1de4316.e96df2e33d9b3aa5
-    0f18c3f92632f84b
-VMOVQ_XMMorMEM64_to_XMM(mem)
+    00000000a84c4317
+VMOVD_XMM_to_IREG32(mem)
   before
     1363ec466e9b7c75.982ebc9fdba1132a.5ba1596e00306a50.322c993c7b3c057d
     d31aeab532e37f50.20c3155bc1dc0151.82a8fd4e0327b6ae.d46340ff1b606a64
@@ -9416,12 +9416,12 @@
     f891f8c71be4cacd
   after
     1363ec466e9b7c75.982ebc9fdba1132a.5ba1596e00306a50.322c993c7b3c057d
-    0000000000000000.0000000000000000.0000000000000000.322c993c7b3c057d
+    d31aeab532e37f50.20c3155bc1dc0151.82a8fd4e0327b6ae.d46340ff1b606a64
     290938318d15c008.39cdcfdaa76e2db9.11c2f3074e422012.99a90a102ed5b076
     f3fb52a89b3ef9c8.3d97e7892ae4d30f.e6b9b883008e66a8.db49f4d950281160
     f891f8c71be4cacd
 
-VMOVQ_XMMorMEM64_to_XMM(reg)
+VMOVD_XMM_to_IREG32(reg)
   before
     4acb14472e95166a.0bbeb4057968e7bd.896f57d2e6c92eff.db5ac6af3216429d
     2f4443c322c833e2.4e1cdb3543a24612.799f1d2276aa7b34.cd719b7803e6711d
@@ -9430,11 +9430,11 @@
     2a7097b23c824693
   after
     4acb14472e95166a.0bbeb4057968e7bd.896f57d2e6c92eff.db5ac6af3216429d
-    0000000000000000.0000000000000000.0000000000000000.db5ac6af3216429d
+    2f4443c322c833e2.4e1cdb3543a24612.799f1d2276aa7b34.cd719b7803e6711d
     014881a995085be2.99e2422213f5d1f4.697434e67611f55b.99c9b2c98c0bae53
     1e23cb6323e1ca16.c6dc65b9086f468f.b53a9989838cda1f.1930888dec90b76c
-    2a7097b23c824693
-VMOVQ_XMMorMEM64_to_XMM(mem)
+    000000003216429d
+VMOVD_XMM_to_IREG32(mem)
   before
     a9565d239aec17f5.e0201b5f67e0be29.b2d6c0e73c1b5f0e.b83d467639a7642d
     70af55cc22dae8be.a48d6f08fe9071c8.399ccf96cb06d89e.d0c8391b32edd031
@@ -9443,12 +9443,12 @@
     2898888cd33ab5b5
   after
     a9565d239aec17f5.e0201b5f67e0be29.b2d6c0e73c1b5f0e.b83d467639a7642d
-    0000000000000000.0000000000000000.0000000000000000.b83d467639a7642d
+    70af55cc22dae8be.a48d6f08fe9071c8.399ccf96cb06d89e.d0c8391b32edd031
     5c44fb99ef597319.c7b4c2ca837d209f.38f90fb4d23a6e6b.58286de30dea59d6
     49e4cc771d737533.a3e2101192340659.89bafb2b6cc6dda0.acaade3a632a3cc8
     2898888cd33ab5b5
 
-VMOVQ_XMMorMEM64_to_XMM(reg)
+VMOVD_XMM_to_IREG32(reg)
   before
     273f6846f6a50047.135a4350c937aa38.95635649c84061a2.09ac0fe9b6b3e169
     07eb79d26bf8582a.9671dc110faecd53.fa838fdfc12d6b28.9499c7d9cb0f36f3
@@ -9457,11 +9457,11 @@
     0f3fa10de83170ce
   after
     273f6846f6a50047.135a4350c937aa38.95635649c84061a2.09ac0fe9b6b3e169
-    0000000000000000.0000000000000000.0000000000000000.09ac0fe9b6b3e169
+    07eb79d26bf8582a.9671dc110faecd53.fa838fdfc12d6b28.9499c7d9cb0f36f3
     23e7b79dcbbefb0b.aff713a70ae69bb0.2c8eb63d18886194.064da0e7c8e5976a
     d6811e14b4832296.38b664fdd6ead07c.88d0cad169dc7e95.3b9614ffc842c1fa
-    0f3fa10de83170ce
-VMOVQ_XMMorMEM64_to_XMM(mem)
+    00000000b6b3e169
+VMOVD_XMM_to_IREG32(mem)
   before
     5e13c2fd43be5f12.7e03aba2c2d40c76.0e7b4cfe90c727e3.6a94c40551b5ffd5
     04dff4bcf5f64bf3.76ba58b2903bf358.0d12459853885e10.2e27a2476ba02000
@@ -9470,12 +9470,12 @@
     5eb26692014099c1
   after
     5e13c2fd43be5f12.7e03aba2c2d40c76.0e7b4cfe90c727e3.6a94c40551b5ffd5
-    0000000000000000.0000000000000000.0000000000000000.6a94c40551b5ffd5
+    04dff4bcf5f64bf3.76ba58b2903bf358.0d12459853885e10.2e27a2476ba02000
     dd6fb1341be4f09d.19f223b2bb4714e8.1046cdb63c392e30.30d55e0154281dc4
     c58f7753d194093c.c5f7070dde81abd1.f5e5604466e7566f.cceaf6a1a7d931ca
     5eb26692014099c1
 
-VCVTTSS2SI_32(reg)
+VPCMPESTRM_0x45_128(reg)
   before
     4279a840fde89153.980bc103321353fb.d415012f9577f3c0.97b9782eee9d91f8
     d48aba17385e542c.32af0c325a6c8a06.a4970b847db42960.d28f9360ef679af8
@@ -9486,9 +9486,9 @@
     4279a840fde89153.980bc103321353fb.d415012f9577f3c0.97b9782eee9d91f8
     d48aba17385e542c.32af0c325a6c8a06.a4970b847db42960.d28f9360ef679af8
     703297844d2c20f9.6e46d2cb66ab6a8a.8fcb237831c5895e.82332bc686522d9a
-    72be3bf1d9e12f66.2a9e91ba71ddafb3.f3fb44774e354f65.8371bf4dce69080b
-    0000000080000000
-VCVTTSS2SI_32(mem)
+    72be3bf1d9e12f66.2a9e91ba71ddafb3.ffff0000ffff0000.ffffffffffffffff
+    b015c8dfe4b8e577
+VPCMPESTRM_0x45_128(mem)
   before
     e7ebc36ae34c8109.3678a2cb7706bd1f.4181c4eb980d14ac.2a746aee7090b622
     03be2dd9e73098ee.18acc97fc32908cf.8fbce74af64755a2.918292473163fb41
@@ -9499,10 +9499,10 @@
     e7ebc36ae34c8109.3678a2cb7706bd1f.4181c4eb980d14ac.2a746aee7090b622
     03be2dd9e73098ee.18acc97fc32908cf.8fbce74af64755a2.918292473163fb41
     e05b81170d70e551.73a8ab775ad54a22.ef1b76c3a89830c1.8571b7f030395a6d
-    598e3b127119255f.a5b74421d897c0c5.3f69ee42c90b5f34.608cd453069e0e53
-    0000000080000000
+    598e3b127119255f.a5b74421d897c0c5.0000ffffffff0000.0000ffffffffffff
+    7f21e8de521f559e
 
-VCVTTSS2SI_32(reg)
+VPCMPESTRM_0x45_128(reg)
   before
     3e7aecfcad4769fb.4c23d8b52e361443.092490e8d8f9a564.5a74c9b476ac9f28
     f9e4dd19b5a28616.93e6d2ec60d36e2a.fb3c8b38f68a36aa.1b068503ca88acc8
@@ -9513,9 +9513,9 @@
     3e7aecfcad4769fb.4c23d8b52e361443.092490e8d8f9a564.5a74c9b476ac9f28
     f9e4dd19b5a28616.93e6d2ec60d36e2a.fb3c8b38f68a36aa.1b068503ca88acc8
     0dabb8a106bde99a.0ca3a7a324fdee40.d64b327dcfd3af44.60ec9e1de2aa4141
-    d41b78003b23cf34.9125d2c695bf51b0.f89d8023fe624cde.03f38eecd91e1bbe
-    00000000ffbba99c
-VCVTTSS2SI_32(mem)
+    d41b78003b23cf34.9125d2c695bf51b0.0000ffffffffffff.ffffffffffffffff
+    e2e4d35eccf1f66c
+VPCMPESTRM_0x45_128(mem)
   before
     d78ee85ed62e8e77.ab8019a2f1617190.003acf42d02653a7.bc7e719620c24823
     c0bc49d813e29e0a.ee2598f3c3010e59.33ac1b01f03caf51.7d390142d080e1c0
@@ -9526,10 +9526,10 @@
     d78ee85ed62e8e77.ab8019a2f1617190.003acf42d02653a7.bc7e719620c24823
     c0bc49d813e29e0a.ee2598f3c3010e59.33ac1b01f03caf51.7d390142d080e1c0
     773972b8a018e352.f957f0604d91e03b.084831f1121022d9.991c2d93ab275060
-    d9d2e0ea99dc197b.28631c532c9d24e3.59da8dfc51ab686c.6a71f0f64c43d4b0
-    0000000000000000
+    d9d2e0ea99dc197b.28631c532c9d24e3.0000ffffffffffff.ffffffffffffffff
+    4e8546d55061a75b
 
-VCVTTSS2SI_32(reg)
+VPCMPESTRM_0x45_128(reg)
   before
     9fa42b9e520c060e.c3540d5a193afbb0.d7931a3afcb016fd.032dab10ca1b3d35
     bb1a9bbcefd02d75.0f8977f53c3f471d.6234e6805856f134.e30f0718986b5c61
@@ -9540,9 +9540,9 @@
     9fa42b9e520c060e.c3540d5a193afbb0.d7931a3afcb016fd.032dab10ca1b3d35
     bb1a9bbcefd02d75.0f8977f53c3f471d.6234e6805856f134.e30f0718986b5c61
     fc33939bc23a573b.9a3d9aa51ff6b6f0.25917a90dc1bf235.d34a1effd8a8821b
-    bf3a0ea668d5c20d.403ef058dd6c0752.7cf8d4d8258c55ac.b0ab6bb3a5dc6b90
-    0000000000000000
-VCVTTSS2SI_32(mem)
+    bf3a0ea668d5c20d.403ef058dd6c0752.ffffffff0000ffff.0000ffffffffffff
+    56ff6a1f1b16d2ec
+VPCMPESTRM_0x45_128(mem)
   before
     a20f9730585f755a.617d084b7c2da897.de57f7f893acf472.c2b3efc3ce345544
     6eaa6ed075c50e07.3c467df69ace4584.4e532a735cc23a7a.5510c7bd74a030aa
@@ -9553,10 +9553,10 @@
     a20f9730585f755a.617d084b7c2da897.de57f7f893acf472.c2b3efc3ce345544
     6eaa6ed075c50e07.3c467df69ace4584.4e532a735cc23a7a.5510c7bd74a030aa
     979b6cec9053591e.ade269115f46d680.6dff05b455ba9596.90595932b25b2089
-    f9ad0c71c41613cc.109dc909671e9738.172704a799a1c1f4.cfdb9f8e25f1618e
-    00000000d2eaaf00
+    f9ad0c71c41613cc.109dc909671e9738.0000000000000000.000000000000ffff
+    6de1973e68ee3165
 
-VPUNPCKLBW_128(reg)
+VMOVQ_IREGorMEM64_to_XMM(reg)
   before
     c8b93cac18dfcab9.70aeca492e19f93d.c2c2984a4de4c458.2897a338458279bd
     3bad8a46d04f6937.d8682262ea68c49c.1d9fd241ad23998c.7c1b5f53746a7a20
@@ -9564,12 +9564,12 @@
     d81d13aac9dea75f.eb3a9203c51c00d6.41ad78fd4d3d29dd.5d8e1bd7cd7c465e
     a21514182ebf8993
   after
-    0000000000000000.0000000000000000.ef7c7e1bb35fe453.4374646a7f7a4720
+    0000000000000000.0000000000000000.0000000000000000.a21514182ebf8993
     3bad8a46d04f6937.d8682262ea68c49c.1d9fd241ad23998c.7c1b5f53746a7a20
     210b7e762ccb498a.0da891a613103316.7e7e74582467517f.ef7eb3e443647f47
     d81d13aac9dea75f.eb3a9203c51c00d6.41ad78fd4d3d29dd.5d8e1bd7cd7c465e
     a21514182ebf8993
-VPUNPCKLBW_128(mem)
+VMOVQ_IREGorMEM64_to_XMM(mem)
   before
     9ae018948338050f.bb30444d4314bf61.4ee9a1641d98e809.c276dc9bc5305c54
     21bba535e8f37501.259010cb35facd3d.12833ab53690a7db.5d269b9e27cc288d
@@ -9579,11 +9579,11 @@
   after
     9ae018948338050f.bb30444d4314bf61.4ee9a1641d98e809.c276dc9bc5305c54
     21bba535e8f37501.259010cb35facd3d.12833ab53690a7db.5d269b9e27cc288d
-    0000000000000000.0000000000000000.c25d7626dc9b9b9e.c52730cc5c28548d
-    4cd0479b4f6124f1.02666208f203ba32.2da3fbd71d27980a.516a1b831b3176fc
+    137236e978fd9693.748970903b1b0d9f.13d2d9e22d11f877.6e08b172109ec737
+    0000000000000000.0000000000000000.0000000000000000.c276dc9bc5305c54
     6296d43de5127088
 
-VPUNPCKLBW_128(reg)
+VMOVQ_IREGorMEM64_to_XMM(reg)
   before
     fddad70c09cbf288.a7a355378a2bdb48.2c74e09ff63f11a3.3bc21b8123dc43bf
     7e80235c24ea38a8.02b5dba8456876c4.4f00e8c1e2594d9e.1bfbb5ca5a3eb4c3
@@ -9591,12 +9591,12 @@
     a1257e30ac89fff7.25c93fbfa8684bd9.ecbd8457e35d67df.beeb48edcc37dc67
     3839399f40e6095e
   after
-    0000000000000000.0000000000000000.a81b1afb45b59fca.de5a593ea9b442c3
+    0000000000000000.0000000000000000.0000000000000000.3839399f40e6095e
     7e80235c24ea38a8.02b5dba8456876c4.4f00e8c1e2594d9e.1bfbb5ca5a3eb4c3
     41d5b19ad1fb7e94.38d354dc9a23b390.c55476db52e0abce.a81a459fde59a942
     a1257e30ac89fff7.25c93fbfa8684bd9.ecbd8457e35d67df.beeb48edcc37dc67
     3839399f40e6095e
-VPUNPCKLBW_128(mem)
+VMOVQ_IREGorMEM64_to_XMM(mem)
   before
     f4d193a05572ee55.fcbb878c5220f97d.a463153b8844fdcb.1e8610a3305ebd7f
     cd7fd5de27e64576.ade5c7185f4ca5d3.936d543d59c28391.b8fd1529d66fe957
@@ -9606,11 +9606,11 @@
   after
     f4d193a05572ee55.fcbb878c5220f97d.a463153b8844fdcb.1e8610a3305ebd7f
     cd7fd5de27e64576.ade5c7185f4ca5d3.936d543d59c28391.b8fd1529d66fe957
-    0000000000000000.0000000000000000.1eb886fd1015a329.30d65e6fbde97f57
-    454dfabe75b63be7.8020dd751b960a9e.2d00f98438d5fe4b.95217a989bedb166
+    9e0f7844d34ecbed.10ed3a426e9a42a5.cdb276b134ee9a58.166c8f57701a2616
+    0000000000000000.0000000000000000.0000000000000000.1e8610a3305ebd7f
     8f66d358f274c5f4
 
-VPUNPCKLBW_128(reg)
+VMOVQ_IREGorMEM64_to_XMM(reg)
   before
     61889403123aa06b.9c05d638282b5390.5bcbab1d03ca3a6b.912159a07e826a97
     67d3bb0596cb7c78.8102889e08b8cd13.fc379fa6c1c40eb8.d3e210f324029b67
@@ -9618,12 +9618,12 @@
     7f1329be3b7f2902.61ff5edfc14bd95a.ff8aef0b31389080.657478ebffa73c46
     6ddc20686be623ac
   after
-    0000000000000000.0000000000000000.d1d30fe29c1068f3.46245f024d9be967
+    0000000000000000.0000000000000000.0000000000000000.6ddc20686be623ac
     67d3bb0596cb7c78.8102889e08b8cd13.fc379fa6c1c40eb8.d3e210f324029b67
     fd9244ca1ab396c6.ce128cdd3269659d.beb3b87cf20fc130.d10f9c68465f4de9
     7f1329be3b7f2902.61ff5edfc14bd95a.ff8aef0b31389080.657478ebffa73c46
     6ddc20686be623ac
-VPUNPCKLBW_128(mem)
+VMOVQ_IREGorMEM64_to_XMM(mem)
   before
     c31510cba727bf47.49a0684e95ba72d8.14967b92d269e375.190741c01bcab753
     44e9c500cf76cc43.b786fbe4c3f0adf3.c5a35ee080d0401a.6a77ab054b517256
@@ -9633,11 +9633,11 @@
   after
     c31510cba727bf47.49a0684e95ba72d8.14967b92d269e375.190741c01bcab753
     44e9c500cf76cc43.b786fbe4c3f0adf3.c5a35ee080d0401a.6a77ab054b517256
-    0000000000000000.0000000000000000.196a077741abc005.1b4bca51b7725356
-    38956a90506f280c.ef8d13d60c7fe8aa.8c4e670225a6e2b5.1d61b4f3ef6f929a
+    cd25b9f3fedf05cb.2511e1ee61ae1600.4ef183b7e88bab77.4c2728485e5afc34
+    0000000000000000.0000000000000000.0000000000000000.190741c01bcab753
     37714c749b1f7034
 
-VPUNPCKHBW_128(reg)
+VMOVUPS_XMM_to_XMMorMEM(reg)
   before
     f8a5ea36fdf3d1ad.620553c4e231ee31.71468e0a5ff0609e.5c8484ac532d9f03
     ba478ca5b279f2b2.2841f179cf321667.07884ff5f78bba87.986158a3902d9e8b
@@ -9645,12 +9645,12 @@
     b509ca3a82c9640f.f34b381a2d1e77b4.dfd590a0647503eb.c73b1226a0c656fb
     72d0f189ad77863b
   after
-    0000000000000000.0000000000000000.0d079e88514f03f5.70f7df8b32ba1387
+    0000000000000000.0000000000000000.07884ff5f78bba87.986158a3902d9e8b
     ba478ca5b279f2b2.2841f179cf321667.07884ff5f78bba87.986158a3902d9e8b
     daa52d2d553d0fef.6414bf9d347d5ad9.0d9e510370df3213.1daf5ed2f5b19d79
     b509ca3a82c9640f.f34b381a2d1e77b4.dfd590a0647503eb.c73b1226a0c656fb
     72d0f189ad77863b
-VPUNPCKHBW_128(mem)
+VMOVUPS_XMM_to_XMMorMEM(mem)
   before
     fa3c75e837d0e965.a5c05d38d6ab2cbe.b1b3daded4212924.d879093872db6abe
     3c491c305add3aa6.0716e493ed6fa4a9.7a1621d447932c54.56d6b637339ca336
@@ -9658,13 +9658,13 @@
     597ac127dd46991c.92cebb11d1ca93e3.9dff8a0600f213a6.4deba11b446179c6
     7f3ad6d8cb7c8f37
   after
-    fa3c75e837d0e965.a5c05d38d6ab2cbe.b1b3daded4212924.d879093872db6abe
+    fa3c75e837d0e965.a5c05d38d6ab2cbe.9dff8a0600f213a6.4deba11b446179c6
     3c491c305add3aa6.0716e493ed6fa4a9.7a1621d447932c54.56d6b637339ca336
-    0000000000000000.0000000000000000.b17ab316da21ded4.d4472193292c2454
+    12c5614b33ab362a.37575ab8629f087c.2a4187e8a2803b71.b438950a4545e9ff
     597ac127dd46991c.92cebb11d1ca93e3.9dff8a0600f213a6.4deba11b446179c6
     7f3ad6d8cb7c8f37
 
-VPUNPCKHBW_128(reg)
+VMOVUPS_XMM_to_XMMorMEM(reg)
   before
     a57331ab772266fd.ed35b6ae75b81ea9.72c9030cd7798389.af1ea51a7ef76f20
     1ae0ad02e3e03cc5.aac2bece170f83fc.34922f130f3a121a.3c685411379a0d0b
@@ -9672,12 +9672,12 @@
     6589f8e96cd2cf0a.0e81f486e69ad7a6.cec120fa871fffb0.37b15f53ccecfae2
     5d46b378dfb2c126
   after
-    0000000000000000.0000000000000000.343476923a2f9413.160f983a7c12441a
+    0000000000000000.0000000000000000.34922f130f3a121a.3c685411379a0d0b
     1ae0ad02e3e03cc5.aac2bece170f83fc.34922f130f3a121a.3c685411379a0d0b
     3cce4648ab414b3b.6cec5472dd568142.34763a9416987c44.20aa14d548e8a792
     6589f8e96cd2cf0a.0e81f486e69ad7a6.cec120fa871fffb0.37b15f53ccecfae2
     5d46b378dfb2c126
-VPUNPCKHBW_128(mem)
+VMOVUPS_XMM_to_XMMorMEM(mem)
   before
     6e388b2f9e47b98b.f35cbf51c21e06de.6e4b1bf64be64056.5ebfddb1ff5cd50d
     4652636324b69e3c.409598ec48b12a65.671743ae2b46777b.40bb6d2519da3a05
@@ -9685,13 +9685,13 @@
     ba2d04f7f8531e35.8b646c6b55de2b36.94e58ba7c57441db.6ae1f8f4a5caa577
     6aa2ea284e54224a
   after
-    6e388b2f9e47b98b.f35cbf51c21e06de.6e4b1bf64be64056.5ebfddb1ff5cd50d
+    6e388b2f9e47b98b.f35cbf51c21e06de.94e58ba7c57441db.6ae1f8f4a5caa577
     4652636324b69e3c.409598ec48b12a65.671743ae2b46777b.40bb6d2519da3a05
-    0000000000000000.0000000000000000.6e674b171b43f6ae.4b2be6464077567b
+    c15fb8028e0b2c67.aa7e7d269a187849.d5b1ea9b9fc73844.d003cdc272256c44
     ba2d04f7f8531e35.8b646c6b55de2b36.94e58ba7c57441db.6ae1f8f4a5caa577
     6aa2ea284e54224a
 
-VPUNPCKHBW_128(reg)
+VMOVUPS_XMM_to_XMMorMEM(reg)
   before
     2b92a0c80b501f69.0f86c52e7d9932d5.41946127148f81d9.807fa3bfb9594c6c
     0bfd14417549d77e.9b37769339e92171.265756c774b8b4de.744bacd096831624
@@ -9699,12 +9699,12 @@
     95732b70c6626b41.c7d09998c8d9874e.f0ce355f859fa3bc.e9a786897dd4d6b8
     20d04e0abe1244ec
   after
-    0000000000000000.0000000000000000.9726fc574956b5c7.1174e4b800b4f0de
+    0000000000000000.0000000000000000.265756c774b8b4de.744bacd096831624
     0bfd14417549d77e.9b37769339e92171.265756c774b8b4de.744bacd096831624
     652f44002acb8738.390c94124950aa35.97fc49b511e400f0.4e1424c579fd5b2f
     95732b70c6626b41.c7d09998c8d9874e.f0ce355f859fa3bc.e9a786897dd4d6b8
     20d04e0abe1244ec
-VPUNPCKHBW_128(mem)
+VMOVUPS_XMM_to_XMMorMEM(mem)
   before
     d15bf83359c561f7.f717c5fde49bbf46.2051030fd39075e8.8e1816306f76d7ed
     d61401f069f9e904.e6650f122001bef2.1f594d648582302e.cb28e89468f4d930
@@ -9712,13 +9712,13 @@
     503f1dd75b1128d6.e0329f896486b0f2.8332725a4f45fb71.95c550c4fd16369b
     daeade6ad0d2091b
   after
-    d15bf83359c561f7.f717c5fde49bbf46.2051030fd39075e8.8e1816306f76d7ed
+    d15bf83359c561f7.f717c5fde49bbf46.8332725a4f45fb71.95c550c4fd16369b
     d61401f069f9e904.e6650f122001bef2.1f594d648582302e.cb28e89468f4d930
-    0000000000000000.0000000000000000.201f5159034d0f64.d38590827530e82e
+    0dc7e42d0bb89740.c0aa031d1721a5f2.a2b5f384faba734d.0448a8f60ea5e531
     503f1dd75b1128d6.e0329f896486b0f2.8332725a4f45fb71.95c550c4fd16369b
     daeade6ad0d2091b
 
-VMULSS_128(reg)
+VMOVNTDQ_128(reg)
   before
     2f054e5224659a5c.7d4a28d8730d58f3.a148dec3a4bc1a9d.a09945d1a02d84c5
     f1619ae9945c240b.6eb2821d72bae2c2.613abc357250209f.d3b9e7d70881ca75
@@ -9726,12 +9726,12 @@
     270abbd539a41662.10cc0f248f54f729.4ade47752abff05c.ef508e3d8f967b9d
     8f608975e5705f6b
   after
-    0000000000000000.0000000000000000.613abc357250209f.d3b9e7d780000000
+    2f054e5224659a5c.7d4a28d8730d58f3.a148dec3a4bc1a9d.a09945d1a02d84c5
     f1619ae9945c240b.6eb2821d72bae2c2.613abc357250209f.d3b9e7d70881ca75
     7a49c09bbc42e5d4.0144a59371238370.7a52364c6bcdfea6.fa5dd757a44a88af
     270abbd539a41662.10cc0f248f54f729.4ade47752abff05c.ef508e3d8f967b9d
     8f608975e5705f6b
-VMULSS_128(mem)
+VMOVNTDQ_128(mem)
   before
     b75745ecc3e4ef46.53f08702a70cf662.78153cbee55afa18.2b28eb1a4cb2316d
     41023d8c44ffe95a.5c47208da009bf7f.16eda64c9240476a.7b7d1ea96c33fe86
@@ -9739,13 +9739,13 @@
     efa3d2fba25805db.7277aa72aaebffc3.5f7625f45adeb2e6.d4772231180d2b7f
     95b5eb03dc7e03b7
   after
-    b75745ecc3e4ef46.53f08702a70cf662.78153cbee55afa18.2b28eb1a4cb2316d
+    b75745ecc3e4ef46.53f08702a70cf662.16eda64c9240476a.7b7d1ea96c33fe86
     41023d8c44ffe95a.5c47208da009bf7f.16eda64c9240476a.7b7d1ea96c33fe86
-    0000000000000000.0000000000000000.16eda64c9240476a.7b7d1ea9797a9373
+    0a2ced4285cd06d2.9d5b83e4c324af66.c41ecabaaf139b4b.9429dc8c27ce9353
     efa3d2fba25805db.7277aa72aaebffc3.5f7625f45adeb2e6.d4772231180d2b7f
     95b5eb03dc7e03b7
 
-VMULSS_128(reg)
+VMOVNTDQ_128(reg)
   before
     342d336e0ead57a6.ca3266a1b5aea0a0.37e993a3f1e9ee41.c4bf32e6afad4767
     0d2cf6de4a2463fa.78a42722ddda944e.48fb39e335abb68d.cdc66e7cc98c18fb
@@ -9753,12 +9753,12 @@
     deefde7e5320917a.bd641e62d6e67714.bd32ad4022a8c43d.3e3d5f44bdad580c
     5e450d4fd00540e0
   after
-    0000000000000000.0000000000000000.48fb39e335abb68d.cdc66e7c4e95cf80
+    342d336e0ead57a6.ca3266a1b5aea0a0.37e993a3f1e9ee41.c4bf32e6afad4767
     0d2cf6de4a2463fa.78a42722ddda944e.48fb39e335abb68d.cdc66e7cc98c18fb
     7dfe31bf2d71625c.d5c6906933e99d11.01fa999e11bb9452.575653a2c488dfce
     deefde7e5320917a.bd641e62d6e67714.bd32ad4022a8c43d.3e3d5f44bdad580c
     5e450d4fd00540e0
-VMULSS_128(mem)
+VMOVNTDQ_128(mem)
   before
     933cd9ad189e5476.8d4bfb8556bb2c00.0c4a4bf9dfdddd84.daef733503fb81fa
     b9ec3f4cb1834dfb.e65d8442d5d06e9a.9e44951a6cda8c8c.b37de6ea51420834
@@ -9766,13 +9766,13 @@
     48aacaf94863e582.07d7c58ab197dab7.fba36daa8119b417.083ac440a1da64d1
     3d0327badc43b08c
   after
-    933cd9ad189e5476.8d4bfb8556bb2c00.0c4a4bf9dfdddd84.daef733503fb81fa
+    933cd9ad189e5476.8d4bfb8556bb2c00.9e44951a6cda8c8c.b37de6ea51420834
     b9ec3f4cb1834dfb.e65d8442d5d06e9a.9e44951a6cda8c8c.b37de6ea51420834
-    0000000000000000.0000000000000000.9e44951a6cda8c8c.b37de6ea15bea08f
+    ac22bc17b8c1ea9b.4573731f6aeb94f3.4f1d77b199ea3f59.a32703c9a7089597
     48aacaf94863e582.07d7c58ab197dab7.fba36daa8119b417.083ac440a1da64d1
     3d0327badc43b08c
 
-VMULSS_128(reg)
+VMOVNTDQ_128(reg)
   before
     9dcc27a3f4cfb674.694fe7e07e75fbdb.86d677ed47607c93.7ea0f3f24171a5f1
     86e1c066840ab236.ebdf8fb77504e8d2.1fbc84b6c7d2b533.b4e18673f400cf14
@@ -9780,12 +9780,12 @@
     5f24ae2f7dc07af7.82eb6ce518c6354d.0f6ca027f7e3df6e.a95fc0d4a4f1bce3
     20335f8cda6bf8e8
   after
-    0000000000000000.0000000000000000.1fbc84b6c7d2b533.b4e186736b53414a
+    9dcc27a3f4cfb674.694fe7e07e75fbdb.86d677ed47607c93.7ea0f3f24171a5f1
     86e1c066840ab236.ebdf8fb77504e8d2.1fbc84b6c7d2b533.b4e18673f400cf14
     5290ee712881df7e.aa243c6a4a1b6794.2ed5e950ce7ac243.7932a11bb6d1edab
     5f24ae2f7dc07af7.82eb6ce518c6354d.0f6ca027f7e3df6e.a95fc0d4a4f1bce3
     20335f8cda6bf8e8
-VMULSS_128(mem)
+VMOVNTDQ_128(mem)
   before
     ba7cfb2e734b5de5.07e8fb0d1f51bf4e.4f009a15fc120e28.1ecfa7a7df994860
     52040ea68b9ea607.a729d175a9c2ea2f.ec2f42e4110aad52.b748f93d212938c6
@@ -9793,13 +9793,13 @@
     f1048ec8aacad768.40520897e672e03c.0b0bf113402f3142.f6af6e562405a09e
     55358ab31e698f66
   after
-    ba7cfb2e734b5de5.07e8fb0d1f51bf4e.4f009a15fc120e28.1ecfa7a7df994860
+    ba7cfb2e734b5de5.07e8fb0d1f51bf4e.ec2f42e4110aad52.b748f93d212938c6
     52040ea68b9ea607.a729d175a9c2ea2f.ec2f42e4110aad52.b748f93d212938c6
-    0000000000000000.0000000000000000.ec2f42e4110aad52.b748f93dc14aa58c
+    c69816e03f6f9179.9c332cd4b79f3645.3744e04074bad0f7.35249253591eec4c
     f1048ec8aacad768.40520897e672e03c.0b0bf113402f3142.f6af6e562405a09e
     55358ab31e698f66
 
-VSUBSS_128(reg)
+VMOVLHPS_128(reg)
   before
     ae02e0d4e2d6f653.ae14f34ae9bc37ff.f0d26228d1c924c2.444fef4b91748c60
     5d616e270dd8110f.db94bf5217506b6b.09ff35f515303d80.bddd58d384959f7c
@@ -9807,12 +9807,12 @@
     2c09201005cd52a6.f11381a5b28f4271.e18e36ef165ae15b.e3075982bf9dd861
     483be8823e9b7681
   after
-    0000000000000000.0000000000000000.09ff35f515303d80.bddd58d3b59f24c3
+    0000000000000000.0000000000000000.5481a796359f24c3.bddd58d384959f7c
     5d616e270dd8110f.db94bf5217506b6b.09ff35f515303d80.bddd58d384959f7c
     bda0301739fc1b47.534f70cd519330d8.e5247d694d316825.5481a796359f24c3
     2c09201005cd52a6.f11381a5b28f4271.e18e36ef165ae15b.e3075982bf9dd861
     483be8823e9b7681
-VSUBSS_128(mem)
+VMOVLHPS_128(mem)
   before
     5de9d282cfa6bc4f.05e93c7e0bd8f0d9.93aa6ec857525c63.59895df50b37e4ce
     00dc926f8dc964f9.a38c7fcde7a8318c.13e1b4205be83bda.aa61ede6c852ac2c
@@ -9822,11 +9822,11 @@
   after
     5de9d282cfa6bc4f.05e93c7e0bd8f0d9.93aa6ec857525c63.59895df50b37e4ce
     00dc926f8dc964f9.a38c7fcde7a8318c.13e1b4205be83bda.aa61ede6c852ac2c
-    0000000000000000.0000000000000000.13e1b4205be83bda.aa61ede6c852ac2c
+    0be2a53395112aa8.643ee56936c9536a.4f84cd9bda5c9b01.2e62e22eeb39761e
     5cc585bb0288cc8b.a34a6abe93c8901f.215f3724f1ba3805.42d8383a0d787e53
     420eeb74cc9a0075
 
-VSUBSS_128(reg)
+VMOVLHPS_128(reg)
   before
     8a52f849c42b3730.cd52b0f4f13d04cc.bbfe0b389b2f2559.673d6da7bc0ecd11
     76ee5a2690b76032.3c55a1c87d398f98.0aa4c244e98d4dc2.fbecec1056651752
@@ -9834,12 +9834,12 @@
     aa610da415f277b5.7fecc5f6de3b8d7f.b9f968bec9574ad2.81e8b144684ab921
     2acef0e719ef8a08
   after
-    0000000000000000.0000000000000000.0aa4c244e98d4dc2.fbecec105bcaef96
+    0000000000000000.0000000000000000.ba362e4bdbcad2f3.fbecec1056651752
     76ee5a2690b76032.3c55a1c87d398f98.0aa4c244e98d4dc2.fbecec1056651752
     622f0d75cccbb624.8399d425c38a281a.ea898d4c1a6b4606.ba362e4bdbcad2f3
     aa610da415f277b5.7fecc5f6de3b8d7f.b9f968bec9574ad2.81e8b144684ab921
     2acef0e719ef8a08
-VSUBSS_128(mem)
+VMOVLHPS_128(mem)
   before
     92b4672108c8fed3.aad0571e06b8dd8f.0d18f127eb5978f2.d1404d0593dd95d2
     966693dc54ded4af.bec7e54f3caa255e.07ebd3a405eea5a0.8faa3a8d138765b1
@@ -9849,11 +9849,11 @@
   after
     92b4672108c8fed3.aad0571e06b8dd8f.0d18f127eb5978f2.d1404d0593dd95d2
     966693dc54ded4af.bec7e54f3caa255e.07ebd3a405eea5a0.8faa3a8d138765b1
-    0000000000000000.0000000000000000.07ebd3a405eea5a0.8faa3a8d14327dc2
+    10afee06173fc6c7.4194b5a352538ad0.4a2fe7594909d2b5.508229c1e5e3f41c
     dd5cf68a6df69148.9181c386e540498e.b2b1a932d2b3b95c.6e15190fa77d7fbe
     46b003e3f2df4144
 
-VSUBSS_128(reg)
+VMOVLHPS_128(reg)
   before
     359de4a76497785a.d93a26537310f15e.09db096490fc9e47.1b3c951bbcfa17c2
     9528b9c898315eab.e013fb4f4498a234.05ee85a9f013c5a5.629e280024e9a812
@@ -9861,12 +9861,12 @@
     1b4d2cd2b93729b1.7fe8808db923e5d3.f86e0b193d837801.f513306fdcf15123
     fabe9dd16521e23b
   after
-    0000000000000000.0000000000000000.05ee85a9f013c5a5.629e2800a5257ae9
+    0000000000000000.0000000000000000.61a1ddce258d2779.629e280024e9a812
     9528b9c898315eab.e013fb4f4498a234.05ee85a9f013c5a5.629e280024e9a812
     c39f7db22b372fe4.ceb4ef69fc9a5ff7.e00631c1a011f954.61a1ddce258d2779
     1b4d2cd2b93729b1.7fe8808db923e5d3.f86e0b193d837801.f513306fdcf15123
     fabe9dd16521e23b
-VSUBSS_128(mem)
+VMOVLHPS_128(mem)
   before
     4c6fa1dfdb2a95ee.f97dc392ddbd86bd.cf7d29a8943deff2.a8740f1b62f57b58
     c7f2b7845a162867.b97c3c60335383b4.9a3d66a4abf73b83.4b623735acf14104
@@ -9876,11 +9876,11 @@
   after
     4c6fa1dfdb2a95ee.f97dc392ddbd86bd.cf7d29a8943deff2.a8740f1b62f57b58
     c7f2b7845a162867.b97c3c60335383b4.9a3d66a4abf73b83.4b623735acf14104
-    0000000000000000.0000000000000000.9a3d66a4abf73b83.4b623735e2f57b58
+    47125baefff454d3.b79695a758875c43.bcf5b36e1a5a83b0.3f8581d2b60504b2
     a89d0948e5cdd85e.4f17c9d3e7e54c16.11728df3fc7484a6.de29e85d1cbc010e
     869a68447ba374c3
 
-VADDSS_128(reg)
+VPABSD_128(reg)
   before
     9124fdf26f45987d.c55d3d3e29af6e33.dd4bd4507df890d9.757e6f1d6d51f990
     5d12a4d3932eaaea.7c1f747de6a6d47f.bd7eb38ab54c6437.c4e5d5da8afb9f9b
@@ -9888,12 +9888,12 @@
     a44e15dfdc078887.25d9d8813dfffa2a.e310d9e57de8ab75.93f81db937ec6ec3
     ca3cf8b4fe490e38
   after
-    0000000000000000.0000000000000000.bd7eb38ab54c6437.c4e5d5da6f8032f3
-    5d12a4d3932eaaea.7c1f747de6a6d47f.bd7eb38ab54c6437.c4e5d5da8afb9f9b
+    9124fdf26f45987d.c55d3d3e29af6e33.dd4bd4507df890d9.757e6f1d6d51f990
+    0000000000000000.0000000000000000.4bfb60ed2c6d03dc.258ac4ec6f8032f3
     44b2585383ebe6b4.a8af29ef39bcc36d.4bfb60ed2c6d03dc.da753b146f8032f3
     a44e15dfdc078887.25d9d8813dfffa2a.e310d9e57de8ab75.93f81db937ec6ec3
     ca3cf8b4fe490e38
-VADDSS_128(mem)
+VPABSD_128(mem)
   before
     5d0b47f1e1a5d07d.d733d7e1390ecb10.cf69fd200e7b33e2.e10719de444896ae
     2732865cfb0c6dbf.3aad9ac7378decfb.812b15b6c93a2bc0.a12d1d451e1a0032
@@ -9902,12 +9902,12 @@
     04b0923e33ae973d
   after
     5d0b47f1e1a5d07d.d733d7e1390ecb10.cf69fd200e7b33e2.e10719de444896ae
-    2732865cfb0c6dbf.3aad9ac7378decfb.812b15b6c93a2bc0.a12d1d451e1a0032
-    0000000000000000.0000000000000000.812b15b6c93a2bc0.a12d1d45444896ae
+    0000000000000000.0000000000000000.309602e00e7b33e2.1ef8e622444896ae
+    047d32e16988a42a.2a085bfb710f27f3.19ea9b318a4a9ef0.7fcedf84a7e827ae
     cfb7c56d46272fe9.018f15eb8420b7a5.72730b7c6cb747a0.d7355d097a4145ce
     04b0923e33ae973d
 
-VADDSS_128(reg)
+VPABSD_128(reg)
   before
     64897a916fbd58a8.66aebdeaaff5cb28.1c90c4010b4ddabc.6792e1828b8ce3fa
     520d126dcaf9c5ba.a32c9546bffd3415.d85564aba321cae5.d613993104d52e2a
@@ -9915,12 +9915,12 @@
     47463e704a2a9386.83f1d64746eb5ba3.9e5e696874ef021c.8e6ba13773f4c0bf
     90d9e867a0e27f7b
   after
-    0000000000000000.0000000000000000.d85564aba321cae5.d6139931f39ee45d
-    520d126dcaf9c5ba.a32c9546bffd3415.d85564aba321cae5.d613993104d52e2a
+    64897a916fbd58a8.66aebdeaaff5cb28.1c90c4010b4ddabc.6792e1828b8ce3fa
+    0000000000000000.0000000000000000.70d40dac18d73c34.653d4f8c0c611ba3
     2a88543edfef1a20.64ffc96b934b25da.8f2bf254e728c3cc.9ac2b074f39ee45d
     47463e704a2a9386.83f1d64746eb5ba3.9e5e696874ef021c.8e6ba13773f4c0bf
     90d9e867a0e27f7b
-VADDSS_128(mem)
+VPABSD_128(mem)
   before
     7ada01ee9774ddbe.0793cb6fa8366b97.decf36c5f4ea929d.613ac553e501c482
     293868b973b795b4.c4bbf8a7949fe0ff.4f6467d0ba5386f4.340b0281d6ea42a9
@@ -9929,12 +9929,12 @@
     a532d9d7c62b8961
   after
     7ada01ee9774ddbe.0793cb6fa8366b97.decf36c5f4ea929d.613ac553e501c482
-    293868b973b795b4.c4bbf8a7949fe0ff.4f6467d0ba5386f4.340b0281d6ea42a9
-    0000000000000000.0000000000000000.4f6467d0ba5386f4.340b0281e501c482
+    0000000000000000.0000000000000000.2130c93b0b156d63.613ac5531afe3b7e
+    7ac09ab551b66488.dc09bf85abf22b6c.b47ee456b432f2d3.731c1c5fe537bb3e
     473e12cc4c7e0666.a9ca1e7388bb8b88.e7e72a42fd949367.7abb1057ab7369ed
     a532d9d7c62b8961
 
-VADDSS_128(reg)
+VPABSD_128(reg)
   before
     50ce7349d1e95747.6e7d4cec811a377c.894a10dfc8843aff.c66db381b18425db
     d7dbda1b693b0e4a.c94bc5000b96b2f4.d6d5913306db757e.2bdafdfded0f635d
@@ -9942,12 +9942,12 @@
     e977008bafca2a5a.8ec060b4905f79bb.2b3c3148ee617e43.fa9bc15f6c23d634
     1d88341ee6c483e3
   after
-    0000000000000000.0000000000000000.d6d5913306db757e.2bdafdfded0f635d
-    d7dbda1b693b0e4a.c94bc5000b96b2f4.d6d5913306db757e.2bdafdfded0f635d
+    50ce7349d1e95747.6e7d4cec811a377c.894a10dfc8843aff.c66db381b18425db
+    0000000000000000.0000000000000000.1148612320b4874f.0c047c5d32bff4ea
     96a40bb82aadeb17.3572f7f407fe34fa.eeb79edddf4b78b1.f3fb83a3cd400b16
     e977008bafca2a5a.8ec060b4905f79bb.2b3c3148ee617e43.fa9bc15f6c23d634
     1d88341ee6c483e3
-VADDSS_128(mem)
+VPABSD_128(mem)
   before
     368d56cb5830cc4f.2c9eb702941e06be.b1ff7b2cc2c43c63.eaaf48e0cfa8c5e1
     2275a551dd726ea3.ba672c887635bdf0.78fcc448ba3a3b1d.885ede111fac8736
@@ -9956,12 +9956,12 @@
     2cc27472bea10a3c
   after
     368d56cb5830cc4f.2c9eb702941e06be.b1ff7b2cc2c43c63.eaaf48e0cfa8c5e1
-    2275a551dd726ea3.ba672c887635bdf0.78fcc448ba3a3b1d.885ede111fac8736
-    0000000000000000.0000000000000000.78fcc448ba3a3b1d.885ede11cfa8c5e1
+    0000000000000000.0000000000000000.4e0084d43d3bc39d.1550b72030573a1f
+    bd0d9c9e9297250b.f11c598af09c899b.c082b8f494cc2f16.5f93ef477afa00ef
     e321b79d92aaadb5.2c0a3c729fdea66c.655fd11c6b86d779.cc9b78ee7b1d6db8
     2cc27472bea10a3c
 
-VDIVSS_128(reg)
+VMOVHLPS_128(reg)
   before
     d953df40e0131328.707d733afab7c1ca.c77ccfad1e88520f.435d8dad5b74ed73
     309cb5c27dfec428.40ed4b61e5cb1e79.1dc011a80925c72f.364a679181a32f30
@@ -9969,12 +9969,12 @@
     4c82939695700c11.19383ffdb635a24f.6fea8a8a9669fe98.cb1c6607ddf221a1
     259a83704c2a4aad
   after
-    0000000000000000.0000000000000000.1dc011a80925c72f.364a679100000000
+    0000000000000000.0000000000000000.1dc011a80925c72f.8c21fbcdfe414278
     309cb5c27dfec428.40ed4b61e5cb1e79.1dc011a80925c72f.364a679181a32f30
     8de7f26630ef58e7.2f3cbbfe6ff17fec.8c21fbcdfe414278.1af0dcb6f81f56db
     4c82939695700c11.19383ffdb635a24f.6fea8a8a9669fe98.cb1c6607ddf221a1
     259a83704c2a4aad
-VDIVSS_128(mem)
+VMOVHLPS_128(mem)
   before
     0435aedc5fd28e2c.c9b793c0490f1b53.daab534bd3a341cf.2168bb496f273839
     44bb633935f7a94a.60d3ee4fe758c359.4e6274d2e4481998.00e78978250a2c07
@@ -9984,11 +9984,11 @@
   after
     0435aedc5fd28e2c.c9b793c0490f1b53.daab534bd3a341cf.2168bb496f273839
     44bb633935f7a94a.60d3ee4fe758c359.4e6274d2e4481998.00e78978250a2c07
-    0000000000000000.0000000000000000.4e6274d2e4481998.00e7897800000002
+    c1f61f72e7a45632.6d21a0af0cd63ecf.51291d800530e5d6.66b3f082539b16af
     57b35c7494e55211.4cefa54c5315c960.bfccca3f516562b4.b118ecd3956832dd
     3b617ad788fcbb3c
 
-VDIVSS_128(reg)
+VMOVHLPS_128(reg)
   before
     62dc95fac8e4ee79.e2be982955c75912.5987fa9259a19fb8.7416f7fde4f54c5e
     80d339a9efab063f.3de34e7e48552662.f0379aedb907fd84.4cd520a5dbec5f01
@@ -9996,12 +9996,12 @@
     15680d566907d819.d8ab19b933a6069d.2c0aab93f88f4127.d4dd5863633befe1
     3dbf5e512cade376
   after
-    0000000000000000.0000000000000000.f0379aedb907fd84.4cd520a5ca0e7c9e
+    0000000000000000.0000000000000000.f0379aedb907fd84.6d4981ca0fd21f70
     80d339a9efab063f.3de34e7e48552662.f0379aedb907fd84.4cd520a5dbec5f01
     f293624e9cdd403c.46eefb60899b772c.6d4981ca0fd21f70.22d3c223515456c9
     15680d566907d819.d8ab19b933a6069d.2c0aab93f88f4127.d4dd5863633befe1
     3dbf5e512cade376
-VDIVSS_128(mem)
+VMOVHLPS_128(mem)
   before
     394550d9c9b4f1b4.439e342ef2b40a84.cfe5267763818fe1.89c615b510c89e56
     a33babe7555fd3c6.d980d541d4701229.06699d853438d024.dfc8ba9df20c73a9
@@ -10011,11 +10011,11 @@
   after
     394550d9c9b4f1b4.439e342ef2b40a84.cfe5267763818fe1.89c615b510c89e56
     a33babe7555fd3c6.d980d541d4701229.06699d853438d024.dfc8ba9df20c73a9
-    0000000000000000.0000000000000000.06699d853438d024.dfc8ba9dff800000
+    596cea68edb746d9.345cebfaaac82bb4.5b03facfc2d88390.8c5e96b63ae4fccb
     35a68946acca0618.ae7c73c7104792d0.a97fba402a6c6554.ebd2a56c85de7569
     5872e32a6f85192e
 
-VDIVSS_128(reg)
+VMOVHLPS_128(reg)
   before
     2e884d5e936625c7.15b3046fafa3ceb0.a42d6713a4798229.cba957c68701319a
     cb61de738d0cd5e0.d360d8cd114e5bcc.72bbc54affeb396d.9f4d4f4df6a1a58f
@@ -10023,12 +10023,12 @@
     c68b65f175d70f3f.5dca77dd644cb443.069dac2980bde760.c9323d0978386f34
     d70b2c17c4463f3c
   after
-    0000000000000000.0000000000000000.72bbc54affeb396d.9f4d4f4d7f800000
+    0000000000000000.0000000000000000.72bbc54affeb396d.747288d8bf28f145
     cb61de738d0cd5e0.d360d8cd114e5bcc.72bbc54affeb396d.9f4d4f4df6a1a58f
     8a4892d6fa036424.4d797f4eefd86999.747288d8bf28f145.ff361dbf935b7b5e
     c68b65f175d70f3f.5dca77dd644cb443.069dac2980bde760.c9323d0978386f34
     d70b2c17c4463f3c
-VDIVSS_128(mem)
+VMOVHLPS_128(mem)
   before
     068e65d69090a5a3.dd7454319b1512df.e11e3b668cb7f7f5.848a2daadd345668
     33876331fb225e95.29515a030749a9ae.b34347d58423efdc.4a8308c5721b7b09
@@ -10038,11 +10038,11 @@
   after
     068e65d69090a5a3.dd7454319b1512df.e11e3b668cb7f7f5.848a2daadd345668
     33876331fb225e95.29515a030749a9ae.b34347d58423efdc.4a8308c5721b7b09
-    0000000000000000.0000000000000000.b34347d58423efdc.4a8308c5d45cb6d0
+    38c1a5131e09253d.086c73d156fd0f58.b1031816689e5824.b4d638e7dcfe92f1
     f20aa46a1850b8c8.d4129b0923bf818a.b52b29155334edf8.1ecdb97db768d7c9
     e4b487f29ee58540
 
-VUNPCKLPS_128(reg)
+VMOVQ_XMM_to_IREG64(reg)
   before
     62d99fb12d01d900.3e2cde210204d162.eb8ece150b1a3bf0.9c87f6bf61f06c84
     f487fc2801490fb5.f6f5cd24fa302c36.a72e0963a99b7835.42e3fbfeafde8ef6
@@ -10050,12 +10050,12 @@
     c4ac75ebe68b10b1.1da7c0be83209c3e.82068472783c6e0e.3cca9eef7981b236
     47ee34792d4f2b5d
   after
-    0000000000000000.0000000000000000.840bb4c042e3fbfe.580a1277afde8ef6
+    62d99fb12d01d900.3e2cde210204d162.eb8ece150b1a3bf0.9c87f6bf61f06c84
     f487fc2801490fb5.f6f5cd24fa302c36.a72e0963a99b7835.42e3fbfeafde8ef6
     f6099ac2b548630c.f72fef5f1ce08770.653d475e99cd7506.840bb4c0580a1277
     c4ac75ebe68b10b1.1da7c0be83209c3e.82068472783c6e0e.3cca9eef7981b236
-    47ee34792d4f2b5d
-VUNPCKLPS_128(mem)
+    9c87f6bf61f06c84
+VMOVQ_XMM_to_IREG64(mem)
   before
     8141f249917e3919.babc890f2f9d5350.4528ba2d4bfd28c9.58d6bc0be2759ffa
     c690544ac01c9895.3385d39b2d0a6793.49805b999182e740.44f9ec9572034376
@@ -10065,11 +10065,11 @@
   after
     8141f249917e3919.babc890f2f9d5350.4528ba2d4bfd28c9.58d6bc0be2759ffa
     c690544ac01c9895.3385d39b2d0a6793.49805b999182e740.44f9ec9572034376
-    0000000000000000.0000000000000000.58d6bc0b44f9ec95.e2759ffa72034376
+    f2a7d76ad73403fe.8d534ef97b5e8a29.06791eec71bc94cd.a2bb0e7dc472972d
     e151f595f1d3377f.2372f696b626f6bc.58e17f1306b6ec9c.cf68202d754fd7cc
     254b1d1321253eff
 
-VUNPCKLPS_128(reg)
+VMOVQ_XMM_to_IREG64(reg)
   before
     01b2029962800a71.705c2cb52b04ef45.502dc7df79ede8f9.1b82fafb6c7cabdb
     bfe7c92dd7ed75ce.7892f8b7a0d3e97b.72d2bd3f61409b8b.2b290c8fc01b8cb3
@@ -10077,12 +10077,12 @@
     51eef22bc72b1afc.6bb33b12ac7d8eea.01050af30db73861.a2b8e26ba011a7e5
     c1399e8a64815995
   after
-    0000000000000000.0000000000000000.64a230bb2b290c8f.1d9e4d53c01b8cb3
+    01b2029962800a71.705c2cb52b04ef45.502dc7df79ede8f9.1b82fafb6c7cabdb
     bfe7c92dd7ed75ce.7892f8b7a0d3e97b.72d2bd3f61409b8b.2b290c8fc01b8cb3
     bb3770391af7bbc3.d8c1d3876c4ddf4f.e4abd52109aa4d1f.64a230bb1d9e4d53
     51eef22bc72b1afc.6bb33b12ac7d8eea.01050af30db73861.a2b8e26ba011a7e5
-    c1399e8a64815995
-VUNPCKLPS_128(mem)
+    1b82fafb6c7cabdb
+VMOVQ_XMM_to_IREG64(mem)
   before
     9defe00786f91d90.dd584b6e7b13cc25.0d35aa427c6fb17b.272c58200af498fc
     11a725cb2185b102.bbc0786ed13e0de9.9a129e05f730052c.b06bbc149cecab9c
@@ -10092,11 +10092,11 @@
   after
     9defe00786f91d90.dd584b6e7b13cc25.0d35aa427c6fb17b.272c58200af498fc
     11a725cb2185b102.bbc0786ed13e0de9.9a129e05f730052c.b06bbc149cecab9c
-    0000000000000000.0000000000000000.272c5820b06bbc14.0af498fc9cecab9c
+    fb2de8c35232ce17.4774749765351bf4.ee18934639cb4629.fa10303b5e2babef
     364da5db340b33fa.ddbe3b56d58630f3.e51103f05f4c309f.5f65b201ec3ed59e
     3cb83dd2e3af6458
 
-VUNPCKLPS_128(reg)
+VMOVQ_XMM_to_IREG64(reg)
   before
     ee53cd1bde0d96c7.9ed3d800e41c9ad7.d9ebc915babc8992.5bcb6cf184c07eba
     cf835f467ae1a598.0e8bfe1c7d72c0db.97471a41b263627c.2b104934c532eea6
@@ -10104,12 +10104,12 @@
     92d175f603214c0e.7bbf0feedb1a3807.c8bcf6914a3682e4.4e6e4f3109411e9e
     571e71c245f65703
   after
-    0000000000000000.0000000000000000.33ad16a52b104934.3eae398dc532eea6
+    ee53cd1bde0d96c7.9ed3d800e41c9ad7.d9ebc915babc8992.5bcb6cf184c07eba
     cf835f467ae1a598.0e8bfe1c7d72c0db.97471a41b263627c.2b104934c532eea6
     3c93edc152b9cd76.6440911d1b186132.731e2b475908f65e.33ad16a53eae398d
     92d175f603214c0e.7bbf0feedb1a3807.c8bcf6914a3682e4.4e6e4f3109411e9e
-    571e71c245f65703
-VUNPCKLPS_128(mem)
+    5bcb6cf184c07eba
+VMOVQ_XMM_to_IREG64(mem)
   before
     2c8bf7450bd9a1e9.2b87f25328a35c0b.2ed4f47bd9850287.f46c798d217a42b9
     a77f5da779f7b87b.640361435ecd3a1a.5b4bbab030647bde.527cb0a67b5f728a
@@ -10119,11 +10119,11 @@
   after
     2c8bf7450bd9a1e9.2b87f25328a35c0b.2ed4f47bd9850287.f46c798d217a42b9
     a77f5da779f7b87b.640361435ecd3a1a.5b4bbab030647bde.527cb0a67b5f728a
-    0000000000000000.0000000000000000.f46c798d527cb0a6.217a42b97b5f728a
+    a6c81fd2ab5b57e6.998fbc32402b22e7.ddf0df79fcc35f37.3d369548f4714d02
     0430b9b4bc113b56.2678018c6b484f1d.8f8fddc25aaf69be.13e726df273d10ce
     2fdb5ed7b04df79a
 
-VCVTSI2SS_128(reg)
+VMOVQ_XMMorMEM64_to_XMM(reg)
   before
     ec5e399c2c303d11.9c84a838c92620f6.680a2bbd7ab0fe69.4ff33277653356a1
     a8bbb39a366f1fdf.4b8f674aeda5c2f2.b990363109ef6b76.f7ea5a843a5ce20a
@@ -10131,12 +10131,12 @@
     893775f26636a634.5ffe45c8eb122bb1.fbace0931a246d86.73bc0f57b0cac51f
     fe3095f589279524
   after
-    0000000000000000.0000000000000000.b990363109ef6b76.f7ea5a84ceedb0d6
-    a8bbb39a366f1fdf.4b8f674aeda5c2f2.b990363109ef6b76.f7ea5a843a5ce20a
+    ec5e399c2c303d11.9c84a838c92620f6.680a2bbd7ab0fe69.4ff33277653356a1
+    0000000000000000.0000000000000000.0000000000000000.4ff33277653356a1
     be40c83d6b98d9b2.ee1f72d6449bdc78.76581f54b592d1f1.653ecfd6f434c825
     893775f26636a634.5ffe45c8eb122bb1.fbace0931a246d86.73bc0f57b0cac51f
     fe3095f589279524
-VCVTSI2SS_128(mem)
+VMOVQ_XMMorMEM64_to_XMM(mem)
   before
     e365dd9a9c59f45f.66edb523c4d6c411.7cfa5d0cfe196bcc.a4d97758d3317be0
     fc296334046b9dfd.b2ae843e20036df6.1fdd358e98b957f3.cd2bdf117c4637ac
@@ -10145,12 +10145,12 @@
     dff6d7253328d471
   after
     e365dd9a9c59f45f.66edb523c4d6c411.7cfa5d0cfe196bcc.a4d97758d3317be0
-    fc296334046b9dfd.b2ae843e20036df6.1fdd358e98b957f3.cd2bdf117c4637ac
-    0000000000000000.0000000000000000.1fdd358e98b957f3.cd2bdf11ce333a10
+    0000000000000000.0000000000000000.0000000000000000.a4d97758d3317be0
+    2646a4aede694d29.c7c6dfae1749dd8f.2574493ad500ad53.d2ee1429b2eedc95
     3e8a1bf44560c010.0380c0df44355287.6b8b15fdd2f92617.0f6e130b11b6a848
     dff6d7253328d471
 
-VCVTSI2SS_128(reg)
+VMOVQ_XMMorMEM64_to_XMM(reg)
   before
     a0d45ce2b7d39fbb.1ebf44f2565cb1de.c02a253c4352068b.cbed15c1aab1816c
     ad529eae364043d3.a3b29b942c67debe.5b0e0933b12c3646.2268c6747a32787d
@@ -10158,12 +10158,12 @@
     1b614a249b95091b.0c01c47598dfd667.9cb73f9d4949f994.25d4285370c52d86
     895ed158ceee63d5
   after
-    0000000000000000.0000000000000000.5b0e0933b12c3646.2268c674ce444671
-    ad529eae364043d3.a3b29b942c67debe.5b0e0933b12c3646.2268c6747a32787d
+    a0d45ce2b7d39fbb.1ebf44f2565cb1de.c02a253c4352068b.cbed15c1aab1816c
+    0000000000000000.0000000000000000.0000000000000000.cbed15c1aab1816c
     62bd99f54ffdfd64.a92e9dc6e38f00dd.317969302a501e65.4cc6a3005d8bc877
     1b614a249b95091b.0c01c47598dfd667.9cb73f9d4949f994.25d4285370c52d86
     895ed158ceee63d5
-VCVTSI2SS_128(mem)
+VMOVQ_XMMorMEM64_to_XMM(mem)
   before
     54301bfb94112591.338aaca5b995a2a3.a8f58e8b67641a87.f91489e7aaa3047e
     63168028dd3b30e5.0884bbe5428805aa.59d876f66a298a69.a4dc427aeaeb7bd0
@@ -10172,12 +10172,12 @@
     12ace023f9cabdeb
   after
     54301bfb94112591.338aaca5b995a2a3.a8f58e8b67641a87.f91489e7aaa3047e
-    63168028dd3b30e5.0884bbe5428805aa.59d876f66a298a69.a4dc427aeaeb7bd0
-    0000000000000000.0000000000000000.59d876f66a298a69.a4dc427aceaab9f7
+    0000000000000000.0000000000000000.0000000000000000.f91489e7aaa3047e
+    90db7ecbc6773ffe.f59a7351d4fa6ed9.fb74f9a0c03adf3a.fa5b66c3a5ac9935
     b84d90d16ad11008.5519d0530b7719df.6a96917783a3d826.55dcf12c75729b5a
     12ace023f9cabdeb
 
-VCVTSI2SS_128(reg)
+VMOVQ_XMMorMEM64_to_XMM(reg)
   before
     8d172e13cb3f3b93.b7363324e5565d2e.864ecf59828c4166.820abc66cf712f58
     2269d768875e50ff.6863e1b15411e39d.e2836bced6c4231a.1f9bf559c1b0a1fd
@@ -10185,12 +10185,12 @@
     0af22bf12fc632d1.55b9532a7d5a8804.8f1f6bb582cf04bc.584882fb05adc54f
     acfbcd828f85ef54
   after
-    0000000000000000.0000000000000000.e2836bced6c4231a.1f9bf559cee0f421
-    2269d768875e50ff.6863e1b15411e39d.e2836bced6c4231a.1f9bf559c1b0a1fd
+    8d172e13cb3f3b93.b7363324e5565d2e.864ecf59828c4166.820abc66cf712f58
+    0000000000000000.0000000000000000.0000000000000000.820abc66cf712f58
     2deed78ecab139da.a9a01865d30e5d80.c704a01ea2acfba8.1d17b83c746aea41
     0af22bf12fc632d1.55b9532a7d5a8804.8f1f6bb582cf04bc.584882fb05adc54f
     acfbcd828f85ef54
-VCVTSI2SS_128(mem)
+VMOVQ_XMMorMEM64_to_XMM(mem)
   before
     f5fd17bd2ffc247b.15c0cdfd52297790.487a0fee6e002055.981fc6ff13b97b01
     0f17db9800201ff1.aaa5bb1ed16543c2.5eaec69cc30ce19e.3c4faf68f0f79c24
@@ -10199,12 +10199,12 @@
     69fd91966b1c5176
   after
     f5fd17bd2ffc247b.15c0cdfd52297790.487a0fee6e002055.981fc6ff13b97b01
-    0f17db9800201ff1.aaa5bb1ed16543c2.5eaec69cc30ce19e.3c4faf68f0f79c24
-    0000000000000000.0000000000000000.5eaec69cc30ce19e.3c4faf684d9dcbd8
+    0000000000000000.0000000000000000.0000000000000000.981fc6ff13b97b01
+    d51895001efd9ee2.25edf0c04506d314.7322f620988b860b.d9fc215cb614a3d0
     25cbc2dfa69d5b79.e1e469504c986231.62a21a660788cdca.c9721848019ccbb2
     69fd91966b1c5176
 
-VANDPS_128(reg)
+VCVTTSS2SI_32(reg)
   before
     16e986b4931f71c7.dafbdd23b40e12e3.3cd6203882a82ec6.09faae5a2f0f6f05
     2a82f50c12316652.cf7562b7635c814b.910f13e682c1717f.43f62ee82a2d2be8
@@ -10212,12 +10212,12 @@
     fae92f1f8bb4c2c5.ee779a7f15bc72c7.99859a4051404e0b.df0ae483095bdc59
     fab9116727844a3e
   after
-    0000000000000000.0000000000000000.100b11c480406007.436206e8002d2ba0
+    16e986b4931f71c7.dafbdd23b40e12e3.3cd6203882a82ec6.09faae5a2f0f6f05
     2a82f50c12316652.cf7562b7635c814b.910f13e682c1717f.43f62ee82a2d2be8
     0213d90c87df6dc3.e206cd87cf9162de.3cdb3dc4e8706807.eb6217fc14edbba0
     fae92f1f8bb4c2c5.ee779a7f15bc72c7.99859a4051404e0b.df0ae483095bdc59
-    fab9116727844a3e
-VANDPS_128(mem)
+    0000000000000000
+VCVTTSS2SI_32(mem)
   before
     173c1a968773c07c.6f51f1b1bd3ca104.ce97468b51e66c33.035a27c559bd6136
     145f7bfb4734fb3f.bb951d2eb604452e.60314c979e1d0e4e.d8a6debf9b73db35
@@ -10227,11 +10227,11 @@
   after
     173c1a968773c07c.6f51f1b1bd3ca104.ce97468b51e66c33.035a27c559bd6136
     145f7bfb4734fb3f.bb951d2eb604452e.60314c979e1d0e4e.d8a6debf9b73db35
-    0000000000000000.0000000000000000.4011448310040c02.0002068519314134
+    cbeeb18183d4b7b2.3b01ae021497ebec.7e10288f186c1243.73b5bd9ab3eff8b3
     1ab53716565eb001.4be3a0997381cfed.0602565fdcdf343f.2fd3bfc23ebdf65e
-    6a4be1a3d7670fdf
+    0000000080000000
 
-VANDPS_128(reg)
+VCVTTSS2SI_32(reg)
   before
     7e6b1daa1b7b80e5.db7f89a5dddfa15a.4786f05f6e4f2ddb.d2d153f40583326e
     c97d7141a5848419.eb1a231a336247e7.8b3598c1a18c4062.c04a9938b063c6fb
@@ -10239,12 +10239,12 @@
     70aa4ed3fda739c2.69ee2166bd9ea14e.5beae505228477ee.6d69f581fa08a2e1
     e6a8035ed1e66392
   after
-    0000000000000000.0000000000000000.03359001a1844020.80088018b0008413
+    7e6b1daa1b7b80e5.db7f89a5dddfa15a.4786f05f6e4f2ddb.d2d153f40583326e
     c97d7141a5848419.eb1a231a336247e7.8b3598c1a18c4062.c04a9938b063c6fb
     a5ced8d6120f592a.2750826174f35ed4.733d9629a9c54530.aa39a619f88cad13
     70aa4ed3fda739c2.69ee2166bd9ea14e.5beae505228477ee.6d69f581fa08a2e1
-    e6a8035ed1e66392
-VANDPS_128(mem)
+    0000000000000000
+VCVTTSS2SI_32(mem)
   before
     efc04a9b9a2faa51.845dcfa602d8608e.8ec07c162970ce81.9f8882bfa758144b
     657f482470f1334b.3f3358babf2f0c39.73920f5bd5749e98.9b6367c5d4ca56f1
@@ -10254,11 +10254,11 @@
   after
     efc04a9b9a2faa51.845dcfa602d8608e.8ec07c162970ce81.9f8882bfa758144b
     657f482470f1334b.3f3358babf2f0c39.73920f5bd5749e98.9b6367c5d4ca56f1
-    0000000000000000.0000000000000000.02800c1201708e80.9b00028584481441
+    24af78e56f37bcac.fb77e47bcd377770.f2305623ddb7d0c0.abc6928246687a8c
     091d56cab40eff9f.15766f55ca7cdede.e865ce585b441e24.2bfffe6298bdbbc9
-    7658a7d167565654
+    0000000000000000
 
-VANDPS_128(reg)
+VCVTTSS2SI_32(reg)
   before
     ea1e893b4ebd87d8.ee945fbf5b81b951.ea7df5b4528b7c30.31fff2e86e2745f1
     e29da10cea818a02.b0e20eb17f9ca6ed.d4d6730400ef8f12.a9c83ebe2f6c0153
@@ -10266,12 +10266,12 @@
     cdf56094af49f4f7.3b2f4e38affb0796.5ab043283fe7fe34.971a3eec314f2784
     c43aeb1ca90309ab
   after
-    0000000000000000.0000000000000000.10c6630000240102.28882e862d200051
+    ea1e893b4ebd87d8.ee945fbf5b81b951.ea7df5b4528b7c30.31fff2e86e2745f1
     e29da10cea818a02.b0e20eb17f9ca6ed.d4d6730400ef8f12.a9c83ebe2f6c0153
     ba21eab1d62b9a7e.2bd1de8a3c6b81a0.30cee3b17034512f.2c8d2ec6bd200e75
     cdf56094af49f4f7.3b2f4e38affb0796.5ab043283fe7fe34.971a3eec314f2784
-    c43aeb1ca90309ab
-VANDPS_128(mem)
+    0000000000000000
+VCVTTSS2SI_32(mem)
   before
     90bbb042414a6f17.7967ff231066d41a.bcc6d7a5f358f4fa.aeca8fd30893d4cc
     d767094a142f17f4.19c1c4c8950f7692.8a63f6bf258c03f9.8866c12068c40da4
@@ -10281,11 +10281,11 @@
   after
     90bbb042414a6f17.7967ff231066d41a.bcc6d7a5f358f4fa.aeca8fd30893d4cc
     d767094a142f17f4.19c1c4c8950f7692.8a63f6bf258c03f9.8866c12068c40da4
-    0000000000000000.0000000000000000.8842d6a5210800f8.8842810008800484
+    750c73203fbfbb6d.0850a9f1dbcf150c.81d2287161a5f1be.45d1d779fb07e668
     457468b1dd0518af.a460ac097e32ee33.7ddee8a7c1ae7a76.3f58cb4c5be79bc3
-    d3449b0427f16762
+    0000000000000000
 
-VMINSS_128(reg)
+VPUNPCKLBW_128(reg)
   before
     5de4430df8af87f0.256c66e70a0de9e5.473dc87c19c43db5.5a55b24d64b45a4d
     3983bdd36daf371a.f0bfe8b0e3e4eb3c.4f33fab648123d3b.f401034f63c24c6e
@@ -10293,12 +10293,12 @@
     57ed1c46aca436f1.b7aa69a8072c72fc.fa998c2fd5104309.ce2c2617eb275940
     c741f2b6ab96ec49
   after
-    0000000000000000.0000000000000000.4f33fab648123d3b.f401034fdde40e06
+    0000000000000000.0000000000000000.27f4af015603994f.dd63e4c20e4c066e
     3983bdd36daf371a.f0bfe8b0e3e4eb3c.4f33fab648123d3b.f401034f63c24c6e
     c36c07c21f7db28c.823b6af78495dae0.168d3c23a8a82b74.27af5699dde40e06
     57ed1c46aca436f1.b7aa69a8072c72fc.fa998c2fd5104309.ce2c2617eb275940
     c741f2b6ab96ec49
-VMINSS_128(mem)
+VPUNPCKLBW_128(mem)
   before
     edbd3360393d814c.5050f8ccb0b0fdf6.6bda60af8bb66ebd.55a1e5466ad8c1a9
     1c6b6603b029d577.0ce297bec62d4346.7995cbf82a3e8c4e.84f243d4038ce0fe
@@ -10308,11 +10308,11 @@
   after
     edbd3360393d814c.5050f8ccb0b0fdf6.6bda60af8bb66ebd.55a1e5466ad8c1a9
     1c6b6603b029d577.0ce297bec62d4346.7995cbf82a3e8c4e.84f243d4038ce0fe
-    0000000000000000.0000000000000000.7995cbf82a3e8c4e.84f243d4038ce0fe
+    0000000000000000.0000000000000000.5584a1f2e54346d4.6a03d88cc1e0a9fe
     048b94e0cbfda9ef.3ac2109a9aac407a.18dfed002a791892.cf9f0006b3e4f479
     a292558202a260f7
 
-VMINSS_128(reg)
+VPUNPCKLBW_128(reg)
   before
     baffa125c57a5fda.769786f3a6fea195.64a9e15c8fc66eb5.5f059d97c344ff9e
     7130dd5b99fa2acf.60035baedb734811.bfee653b07810bec.72e8b020e83df729
@@ -10320,12 +10320,12 @@
     2f111930e2201b9e.10339accc1ea923e.7dc577ffee0a85fc.6811f5b943eb0972
     04ef1da1b3b89b88
   after
-    0000000000000000.0000000000000000.bfee653b07810bec.72e8b020e83df729
+    0000000000000000.0000000000000000.2c7252e8a4b08820.b4e8713dbcf76229
     7130dd5b99fa2acf.60035baedb734811.bfee653b07810bec.72e8b020e83df729
     2472069019ae0082.a09e8dfd85695a90.a9de98a29e6954ca.2c52a488b471bc62
     2f111930e2201b9e.10339accc1ea923e.7dc577ffee0a85fc.6811f5b943eb0972
     04ef1da1b3b89b88
-VMINSS_128(mem)
+VPUNPCKLBW_128(mem)
   before
     dab99a2b1de22ece.ee5911a78fdeb8d0.8e8dfd07ab04ad46.96effdbd96f1da2d
     c83ae7439f777e71.bd96ea61bc7413c3.f47a329a5dc367d5.52a8264930a98e0b
@@ -10335,11 +10335,11 @@
   after
     dab99a2b1de22ece.ee5911a78fdeb8d0.8e8dfd07ab04ad46.96effdbd96f1da2d
     c83ae7439f777e71.bd96ea61bc7413c3.f47a329a5dc367d5.52a8264930a98e0b
-    0000000000000000.0000000000000000.f47a329a5dc367d5.52a8264996f1da2d
+    0000000000000000.0000000000000000.9652efa8fd26bd49.9630f1a9da8e2d0b
     5795e1cd5a11437c.fb1e304e0955f29f.ec380479905da637.1ff65276abbe0678
     e9234cf1c432425f
 
-VMINSS_128(reg)
+VPUNPCKLBW_128(reg)
   before
     c40fdae840a8cda3.b2078717ca2d313c.2201955a60b8eedf.35a2989d4750a461
     0e06f8c9baabe4ee.9360ec9fc2e3cb09.c909cb59a7239891.d8cdeec8371831c3
@@ -10347,12 +10347,12 @@
     5a45d0f51a89a54b.5bfae91ab84ff679.07b79bdf773ee4f9.979ad1e83555e6d9
     6dd456b47ae287e6
   after
-    0000000000000000.0000000000000000.c909cb59a7239891.d8cdeec8371831c3
+    0000000000000000.0000000000000000.afd887cd82eee8c8.7e37c018083186c3
     0e06f8c9baabe4ee.9360ec9fc2e3cb09.c909cb59a7239891.d8cdeec8371831c3
     2154a0fecec7c3ed.d76d8e515d40cf0f.4c82cfb67b212b60.af8782e87ec00886
     5a45d0f51a89a54b.5bfae91ab84ff679.07b79bdf773ee4f9.979ad1e83555e6d9
     6dd456b47ae287e6
-VMINSS_128(mem)
+VPUNPCKLBW_128(mem)
   before
     0bff8d386973a6d9.16248319377cc8b5.f9d277e4ef1dff74.56f62d3f3807ff08
     4ee8f2601d1401e0.af3fb5d6c32c65d6.8ec3b69d1db5a42c.958980425a07b738
@@ -10362,11 +10362,11 @@
   after
     0bff8d386973a6d9.16248319377cc8b5.f9d277e4ef1dff74.56f62d3f3807ff08
     4ee8f2601d1401e0.af3fb5d6c32c65d6.8ec3b69d1db5a42c.958980425a07b738
-    0000000000000000.0000000000000000.8ec3b69d1db5a42c.958980423807ff08
+    0000000000000000.0000000000000000.5695f6892d803f42.385a0707ffb70838
     3323374d45b855d4.ec5486cb97f504f0.0d1b3488cf74b580.52df59e12edef2ad
     8939d85518cceb4a
 
-VMAXSS_128(reg)
+VPUNPCKHBW_128(reg)
   before
     2018081dd32173b8.8d0d0fe9f2d3c71a.47e71edc16257d40.b01b6b938bb29975
     73c7e5a3fb6ac4a4.fde605dad42e6423.f0e52535744362f8.b963423caeec09d7
@@ -10374,12 +10374,12 @@
     bcc9979d0006b3a6.8a903c67a8d50f2c.9c5071733b765f4e.70fac2189c7d7f91
     d6e262249eedfe40
   after
-    0000000000000000.0000000000000000.f0e52535744362f8.b963423c562bc2d2
+    0000000000000000.0000000000000000.43f099e597254435.4c74da43ef62c3f8
     73c7e5a3fb6ac4a4.fde605dad42e6423.f0e52535744362f8.b963423caeec09d7
     dd946b542b331bba.5d78950a07d5e81a.439997444cdaefc3.05bf366f562bc2d2
     bcc9979d0006b3a6.8a903c67a8d50f2c.9c5071733b765f4e.70fac2189c7d7f91
     d6e262249eedfe40
-VMAXSS_128(mem)
+VPUNPCKHBW_128(mem)
   before
     1341937d7888f90c.6ab363e91571c912.60fa75dcd2399484.5757ad30dda4ef45
     03e4cf1045592d21.459ecda406ff99ad.ba81bc55a20d344f.d0f849e5ccefda53
@@ -10389,11 +10389,11 @@
   after
     1341937d7888f90c.6ab363e91571c912.60fa75dcd2399484.5757ad30dda4ef45
     03e4cf1045592d21.459ecda406ff99ad.ba81bc55a20d344f.d0f849e5ccefda53
-    0000000000000000.0000000000000000.ba81bc55a20d344f.d0f849e5ccefda53
+    0000000000000000.0000000000000000.60bafa8175bcdc55.d2a2390d9434844f
     6b265d9629ce2ed4.eea76916efb6571b.6f1a6403a237b4ed.6d3b8eec070db566
     487430158bf81cc3
 
-VMAXSS_128(reg)
+VPUNPCKHBW_128(reg)
   before
     507920e7cc31cee8.9c5da65f798a74cb.745c92a61ef6bc46.81c4be100aa40c17
     e3945ccf68430880.f007ec132cace3ba.97434956998acb4f.88bb16d188b26f65
@@ -10401,12 +10401,12 @@
     173fa68c202204bb.70e75be92c542b32.20d24fc1e5dbd5a9.e4c2b02034de4517
     f26beb869a1530d4
   after
-    0000000000000000.0000000000000000.97434956998acb4f.88bb16d1376c9801
+    0000000000000000.0000000000000000.b197a64389499056.fd99fd8abfcbe14f
     e3945ccf68430880.f007ec132cace3ba.97434956998acb4f.88bb16d188b26f65
     5c12df37fbba0638.43f1aa9d5e4136ce.b1a68990fdfdbfe1.60cbe833376c9801
     173fa68c202204bb.70e75be92c542b32.20d24fc1e5dbd5a9.e4c2b02034de4517
     f26beb869a1530d4
-VMAXSS_128(mem)
+VPUNPCKHBW_128(mem)
   before
     6591134f851c1564.7067ab3b74083db6.55b57ee3b1f17b13.3e139556eeb14953
     1801a66912ffb2f2.c3d6ecae92f7eed5.cd278c770a25e59d.68b559b9b40a578a
@@ -10416,11 +10416,11 @@
   after
     6591134f851c1564.7067ab3b74083db6.55b57ee3b1f17b13.3e139556eeb14953
     1801a66912ffb2f2.c3d6ecae92f7eed5.cd278c770a25e59d.68b559b9b40a578a
-    0000000000000000.0000000000000000.cd278c770a25e59d.68b559b9b40a578a
+    0000000000000000.0000000000000000.55cdb5277e8ce377.b10af1257be5139d
     b3f0fb3d818bffbb.c6b70f959d22a82d.e5275d1ea680f259.514b489ee4763052
     c7d76bf686a1733a
 
-VMAXSS_128(reg)
+VPUNPCKHBW_128(reg)
   before
     b9f4fcce557f3f5f.5105b5cf9a4b274d.2fc3eae0c27528be.3e4c180921be0ee5
     83eef591ed9dd26e.a195c861c518f78e.0245f0a022011023.9945b03de0c332c9
@@ -10428,12 +10428,12 @@
     10a91489e6c637fa.c352ef35bf0779cb.55dd6c2f02f60718.c9e363349751854a
     562077cfc8f12c40
   after
-    0000000000000000.0000000000000000.0245f0a022011023.9945b03de0c332c9
+    0000000000000000.0000000000000000.9a028a451cf041a0.592253019c100723
     83eef591ed9dd26e.a195c861c518f78e.0245f0a022011023.9945b03de0c332c9
     821154abe9866613.7d6ab3df1dfd29a9.9a8a1c4159539c07.d4de9fa8fe9b1b31
     10a91489e6c637fa.c352ef35bf0779cb.55dd6c2f02f60718.c9e363349751854a
     562077cfc8f12c40
-VMAXSS_128(mem)
+VPUNPCKHBW_128(mem)
   before
     55605764ad87cb3e.8a0132957fea83ce.4d17f950c640a51f.8d8cdcd6b9778eff
     a3717fdf61201f71.4c66a93c507d843b.f9864e1a4fb667d2.a0e166a31b616d6b
@@ -10443,11 +10443,11 @@
   after
     55605764ad87cb3e.8a0132957fea83ce.4d17f950c640a51f.8d8cdcd6b9778eff
     a3717fdf61201f71.4c66a93c507d843b.f9864e1a4fb667d2.a0e166a31b616d6b
-    0000000000000000.0000000000000000.f9864e1a4fb667d2.a0e166a31b616d6b
+    0000000000000000.0000000000000000.4df91786f94e501a.c64f40b6a5671fd2
     9d319838a789d525.1888920c0d219893.2292c67055889f04.c3b1bd5a4ea1227c
     8bc3811e570f707a
 
-VANDNPS_128(reg)
+VMULSS_128(reg)
   before
     9eac51b77a1606ac.007981ed7270b0fd.dadcfc0d2f4a22d6.59c6e1d20afb8edb
     56b7279154431fbd.23c1a2387c8b2eba.536caf59fb135262.20d43795b1da03c1
@@ -10455,12 +10455,12 @@
     2967dab79c3ccd2e.14807d41be860a93.df74e282fbb29406.d1af81eb430e7167
     74136d56667be280
   after
-    0000000000000000.0000000000000000.a082000400042481.540940204420b820
+    0000000000000000.0000000000000000.536caf59fb135262.20d43795d79835c3
     56b7279154431fbd.23c1a2387c8b2eba.536caf59fb135262.20d43795b1da03c1
     113201188121f85a.e0d57806e1e30e88.e186a85c0b0764e3.548943a46532bae1
     2967dab79c3ccd2e.14807d41be860a93.df74e282fbb29406.d1af81eb430e7167
     74136d56667be280
-VANDNPS_128(mem)
+VMULSS_128(mem)
   before
     178084d2ea84ca58.fba3aedd4221dae6.9b902fd72e7fdf06.a983593768a01d77
     97c44049ec35e51b.e3327af30e5b5a2e.51cf09b34edb490d.9b000ae7ed5e3ce1
@@ -10470,11 +10470,11 @@
   after
     178084d2ea84ca58.fba3aedd4221dae6.9b902fd72e7fdf06.a983593768a01d77
     97c44049ec35e51b.e3327af30e5b5a2e.51cf09b34edb490d.9b000ae7ed5e3ce1
-    0000000000000000.0000000000000000.8a10264420249602.2083511000a00116
+    0000000000000000.0000000000000000.51cf09b34edb490d.9b000ae7ff800000
     9efd9cdcd8c1a20f.6679e7a289ffa61c.bb0d26ed0ce9cb8a.666e06e8b1782b53
     f8f94a1228ec73b2
 
-VANDNPS_128(reg)
+VMULSS_128(reg)
   before
     2220b7e6275f41bb.dd8a34cffbb3bd99.b8c880147081e91a.26a36123e2b35b58
     3f314ad24a5ed019.691d616f0b7dfabe.909b0026ee889158.309ab44fd7106f6a
@@ -10482,12 +10482,12 @@
     c63cce9e6f2d2586.d8846f6363cccd88.42f8a7df1d57fa43.91d7923a91b1170c
     a0b516d08d0d22f3
   after
-    0000000000000000.0000000000000000.4a24644011214882.85240b10080c8084
+    0000000000000000.0000000000000000.909b0026ee889158.309ab44f9f9ed932
     3f314ad24a5ed019.691d616f0b7dfabe.909b0026ee889158.309ab44fd7106f6a
     ad76fe412e735e79.1e82a1a7242c16aa.4a3c64469fa1d882.b5bc9b5d080cc5ec
     c63cce9e6f2d2586.d8846f6363cccd88.42f8a7df1d57fa43.91d7923a91b1170c
     a0b516d08d0d22f3
-VANDNPS_128(mem)
+VMULSS_128(mem)
   before
     bd23a20d182ba1d0.e8cfb957a81561ed.73f1478fe367db84.d41bc55d07363548
     c6ecb2db4f1851cd.6d7ab8d775b9505a.cb93a617c10bfbcb.5cf1ba2cf6cbc33c
@@ -10497,11 +10497,11 @@
   after
     bd23a20d182ba1d0.e8cfb957a81561ed.73f1478fe367db84.d41bc55d07363548
     c6ecb2db4f1851cd.6d7ab8d775b9505a.cb93a617c10bfbcb.5cf1ba2cf6cbc33c
-    0000000000000000.0000000000000000.3060418822640004.800a455101343440
+    0000000000000000.0000000000000000.cb93a617c10bfbcb.5cf1ba2cbe910735
     09c44fdf308c34d8.144ce6dc3e6332f4.21aae5eb059c64e9.bee51a6d5945caa4
     509b7db70441bb6f
 
-VANDNPS_128(reg)
+VMULSS_128(reg)
   before
     4834a7022624f0da.fb69d3ec112cde3f.ee0b0d3a71819d7a.d8b5be10a3a12518
     02fc94bb5a77a590.479acc3b0ecaaa76.9b123a0ea88aabb5.bc270e400edfe842
@@ -10509,12 +10509,12 @@
     2c49a9236aa27d90.62d00b4fca319207.e22a92cc948f9afc.7a6cff75be326735
     0dd799523a619a56
   after
-    0000000000000000.0000000000000000.60ac45c000011442.01c8412961200290
+    0000000000000000.0000000000000000.9b123a0ea88aabb5.bc270e4032c44870
     02fc94bb5a77a590.479acc3b0ecaaa76.9b123a0ea88aabb5.bc270e400edfe842
     da3f414c3dc8153e.cb23b5b8427351aa.78ae67c6800b9652.a9cb4f6963606a92
     2c49a9236aa27d90.62d00b4fca319207.e22a92cc948f9afc.7a6cff75be326735
     0dd799523a619a56
-VANDNPS_128(mem)
+VMULSS_128(mem)
   before
     3dd999ebf3f7c022.5365c8aa7d921931.e76d48ecc11227b8.33d4b68e81a2f560
     e53c7b2c060295c4.ade19a4f132225ce.38c5ea7c4422cdea.c8f6cf76e2d1e129
@@ -10524,11 +10524,11 @@
   after
     3dd999ebf3f7c022.5365c8aa7d921931.e76d48ecc11227b8.33d4b68e81a2f560
     e53c7b2c060295c4.ade19a4f132225ce.38c5ea7c4422cdea.c8f6cf76e2d1e129
-    0000000000000000.0000000000000000.c728008081102210.3300308801221440
+    0000000000000000.0000000000000000.38c5ea7c4422cdea.c8f6cf76250599a7
     1157d756a9a63b3d.662448a036587baa.aada4a215cfb3b7f.2fd6d16d72b05f9d
     b82bb153d879689f
 
-VORPS_128(reg)
+VSUBSS_128(reg)
   before
     f5297710248df3b7.4da748177056846c.7e841c24fc153d41.842e010e29de7b3a
     421b1f10ef793c90.718a8b3001aa6c20.38739375b3a36084.986e0c9ef21fbc26
@@ -10536,12 +10536,12 @@
     7c0f018a7805f638.e534781bef7007ce.012d5b2f6b64b4bd.e2e10d54e5eb3040
     d0acfd52488fdbc6
   after
-    0000000000000000.0000000000000000.ff7fbbfffbaf7e9f.dc6feebef2dfbe6f
+    0000000000000000.0000000000000000.38739375b3a36084.986e0c9ef21fbc26
     421b1f10ef793c90.718a8b3001aa6c20.38739375b3a36084.986e0c9ef21fbc26
     fb4fa3c0d7c77ed7.5bca1d8e77afae88.ef3ca9fffa8f1e1f.c465e6bcd2caba6f
     7c0f018a7805f638.e534781bef7007ce.012d5b2f6b64b4bd.e2e10d54e5eb3040
     d0acfd52488fdbc6
-VORPS_128(mem)
+VSUBSS_128(mem)
   before
     689430a217c1772d.21a834dc6dbfe05e.ed941ac584fa331f.c890a46fa2ae5d0b
     876324306c8ebfa0.46663820528078f6.4db67e775357eea6.a2b2802d3bfa57b5
@@ -10551,11 +10551,11 @@
   after
     689430a217c1772d.21a834dc6dbfe05e.ed941ac584fa331f.c890a46fa2ae5d0b
     876324306c8ebfa0.46663820528078f6.4db67e775357eea6.a2b2802d3bfa57b5
-    0000000000000000.0000000000000000.edb67ef7d7ffffbf.eab2a46fbbfe5fbf
+    0000000000000000.0000000000000000.4db67e775357eea6.a2b2802d3bfa57b5
     cbe93cb71f26465c.8081a3335e47a02a.896e7da20dc0ff08.fb63e1cf06c528cb
     32895f8c6f5d798f
 
-VORPS_128(reg)
+VSUBSS_128(reg)
   before
     eb9f6076ab25095f.a7375987b309fdfd.4d7603d9bd66a91f.1c9e10f430e3ce3b
     83efe0f955ac15e6.7a9e25463fb7505a.09bf24217cbc5035.78bf55fefc0a1b55
@@ -10563,12 +10563,12 @@
     bb704e7a652090cc.76e2bf3eada2bdfb.c3809a4d8c3f6676.fb06e6eb029622ec
     dac52aa5731254c1
   after
-    0000000000000000.0000000000000000.1bbf26797cfed03d.79bfddfefe4abfd5
+    0000000000000000.0000000000000000.09bf24217cbc5035.78bf55fefc0a1b55
     83efe0f955ac15e6.7a9e25463fb7505a.09bf24217cbc5035.78bf55fefc0a1b55
     54c6db810a7bd9d1.20e81edfde3bfca0.12a9027938d6d018.799ec9ac8e42a481
     bb704e7a652090cc.76e2bf3eada2bdfb.c3809a4d8c3f6676.fb06e6eb029622ec
     dac52aa5731254c1
-VORPS_128(mem)
+VSUBSS_128(mem)
   before
     f3a610c7fdc2f42d.1439335002277782.5658854ec7f74f96.7890e60715834ef9
     2074143ebdb3bf5c.bc6d88707e1bcaa0.9d16eafd49466d9e.8d25e4146e2ec34d
@@ -10578,11 +10578,11 @@
   after
     f3a610c7fdc2f42d.1439335002277782.5658854ec7f74f96.7890e60715834ef9
     2074143ebdb3bf5c.bc6d88707e1bcaa0.9d16eafd49466d9e.8d25e4146e2ec34d
-    0000000000000000.0000000000000000.df5eefffcff76f9e.fdb5e6177fafcffd
+    0000000000000000.0000000000000000.9d16eafd49466d9e.8d25e4146e2ec34d
     290a67d74d86c6b1.6445703a81faa2c2.d09986e6f3033fa3.460de3d802eb471b
     a2f9dd677515ceec
 
-VORPS_128(reg)
+VSUBSS_128(reg)
   before
     cf9978f828d6d23f.bd6aadd25680792f.1d81fabc40fea01f.74f7b4f7538a6cf9
     283ab0f9b7ba90c0.d6e702d103ea4720.9458e4384e1ffa93.efcc72568a3a156b
@@ -10590,12 +10590,12 @@
     cdaee7f8dc1d29fa.066cc78bbf40230a.2c07c6cbc5e9b072.da0e90aff04bcd55
     0113e78156c25425
   after
-    0000000000000000.0000000000000000.b55eed394ffffbdb.ffed7ff6bf3bf76f
+    0000000000000000.0000000000000000.9458e4384e1ffa93.efcc72563521f726
     283ab0f9b7ba90c0.d6e702d103ea4720.9458e4384e1ffa93.efcc72568a3a156b
     082881d5bf4e441a.4f4fe2c073d1ecb0.2516291947e9ebcb.1de53df0b521f726
     cdaee7f8dc1d29fa.066cc78bbf40230a.2c07c6cbc5e9b072.da0e90aff04bcd55
     0113e78156c25425
-VORPS_128(mem)
+VSUBSS_128(mem)
   before
     70c0be51039448c1.d11adfcea9b37c0b.d60c2f1e0643a95b.0577b5ba66aa8535
     02e0920a14cd6557.72b663c3c29d79fa.9bf9956561e73ace.0cb1f452c6b9a6c0
@@ -10605,11 +10605,11 @@
   after
     70c0be51039448c1.d11adfcea9b37c0b.d60c2f1e0643a95b.0577b5ba66aa8535
     02e0920a14cd6557.72b663c3c29d79fa.9bf9956561e73ace.0cb1f452c6b9a6c0
-    0000000000000000.0000000000000000.dffdbf7f67e7bbdf.0df7f5fae6bba7f5
+    0000000000000000.0000000000000000.9bf9956561e73ace.0cb1f452e6aa8535
     ffad1decd0a0091b.f6b105bb4a9a6020.74ec4bc0c93f6ccd.14b74f2e31edbadc
     cd1a6349742c25c5
 
-VSQRTSD_128(reg)
+VADDSS_128(reg)
   before
     2477b7bee5e8cd26.21f1cdecb35407a2.93a81995f1c5c2b0.3f8b93ac0d0c85b0
     741c45f721adecab.d7d86a876a9d1fd1.3b00ab3f5474becd.70a7cafbd7a99865
@@ -10617,12 +10617,12 @@
     746a056a698381cf.6bc45739c22488da.1f0236afc08c7260.708af2776a84a0f9
     f8e8dc7b6cda0c2e
   after
-    0000000000000000.0000000000000000.3b00ab3f5474becd.fff8000000000000
+    0000000000000000.0000000000000000.3b00ab3f5474becd.70a7cafbd7a99865
     741c45f721adecab.d7d86a876a9d1fd1.3b00ab3f5474becd.70a7cafbd7a99865
     1b540b62c407bfff.fc306ea710890bd5.4b05b62410338f24.e20d6b9b4222631a
     746a056a698381cf.6bc45739c22488da.1f0236afc08c7260.708af2776a84a0f9
     f8e8dc7b6cda0c2e
-VSQRTSD_128(mem)
+VADDSS_128(mem)
   before
     54f3a393633162e6.dbab2d7aacac70c6.025fa02a9b79520b.1444274e010da32f
     6279c5ab6c93604d.ab6381002a0fc691.9bcec564b8942495.8418866c6e425e3a
@@ -10632,11 +10632,11 @@
   after
     54f3a393633162e6.dbab2d7aacac70c6.025fa02a9b79520b.1444274e010da32f
     6279c5ab6c93604d.ab6381002a0fc691.9bcec564b8942495.8418866c6e425e3a
-    0000000000000000.0000000000000000.9bcec564b8942495.2a196527d561f7bc
+    0000000000000000.0000000000000000.9bcec564b8942495.8418866c6e425e3a
     0022088c23ae3ed6.fa689a1c45b09951.475894682c4dd363.48a07bd53ef560ba
     54ee09f8d98b2087
 
-VSQRTSD_128(reg)
+VADDSS_128(reg)
   before
     4cfdf44b10055941.48dd202c087e9851.314c57891b078e9f.120b3609bb0328fe
     8c1839387fee4994.b242837c6f8a882a.42d8301b9ac7db70.4fc2a4a3fdaf75a3
@@ -10644,12 +10644,12 @@
     54a5be94773e38b8.573a17de30871ca8.6113225f09b36b4e.936ad5780d1beab5
     51f4908912f3897b
   after
-    0000000000000000.0000000000000000.42d8301b9ac7db70.fff8000000000000
+    0000000000000000.0000000000000000.42d8301b9ac7db70.4fc2a4a3fdaf75a3
     8c1839387fee4994.b242837c6f8a882a.42d8301b9ac7db70.4fc2a4a3fdaf75a3
     708cd32cc3d22a2d.181dac6973decb8d.88561f3f617cbb71.dc485b240f5e777b
     54a5be94773e38b8.573a17de30871ca8.6113225f09b36b4e.936ad5780d1beab5
     51f4908912f3897b
-VSQRTSD_128(mem)
+VADDSS_128(mem)
   before
     f3b207443af112fa.94aff6db38bdb1e1.4c6440c6c49039a4.275b34e931f627b2
     5370b696a2213e5d.8cf6786ca2dccf52.d169a40f4806dcb0.377a524772d42b4a
@@ -10659,11 +10659,11 @@
   after
     f3b207443af112fa.94aff6db38bdb1e1.4c6440c6c49039a4.275b34e931f627b2
     5370b696a2213e5d.8cf6786ca2dccf52.d169a40f4806dcb0.377a524772d42b4a
-    0000000000000000.0000000000000000.d169a40f4806dcb0.33a4dd2fca16afe4
+    0000000000000000.0000000000000000.d169a40f4806dcb0.377a524772d42b4a
     c01badaba0487681.146a4621de27ecc3.ff2f0a719666a6a3.a66c9e34b58afac4
     bcd8c59aee7c3dfe
 
-VSQRTSD_128(reg)
+VADDSS_128(reg)
   before
     8d4ae885b136b71c.85a1ed466e57f99a.5c2f8b1ce96b631a.5f890462976845e2
     730f01619b46a6ca.7a565528ecc91148.cb610a120c7f706a.c0ed2864f9075be0
@@ -10671,12 +10671,12 @@
     f1c10a9d5396cd84.5f808e6e6603ef11.933ca2a00c453ba8.f502e046534adbc7
     814b6b008206bd09
   after
-    0000000000000000.0000000000000000.cb610a120c7f706a.fff8000000000000
+    0000000000000000.0000000000000000.cb610a120c7f706a.c0ed2864f9075be0
     730f01619b46a6ca.7a565528ecc91148.cb610a120c7f706a.c0ed2864f9075be0
     cb730e9b483844b3.7907613c35a97ab6.bf4cbd70e4ee4f60.fe26f361d94ea4c8
     f1c10a9d5396cd84.5f808e6e6603ef11.933ca2a00c453ba8.f502e046534adbc7
     814b6b008206bd09
-VSQRTSD_128(mem)
+VADDSS_128(mem)
   before
     7ece107a828e06b9.4247f1d558ee7fe8.088c57aa9ae42d84.a27db40f200f71ed
     c8574c9f70ef7104.184fbfadf4cc948c.50f938dcee57ef3c.4a5af02abed82ddc
@@ -10686,11 +10686,11 @@
   after
     7ece107a828e06b9.4247f1d558ee7fe8.088c57aa9ae42d84.a27db40f200f71ed
     c8574c9f70ef7104.184fbfadf4cc948c.50f938dcee57ef3c.4a5af02abed82ddc
-    0000000000000000.0000000000000000.50f938dcee57ef3c.fff8000000000000
+    0000000000000000.0000000000000000.50f938dcee57ef3c.4a5af02abed82ddc
     b3aa769f8469a019.c61902f25f47da43.2d2232d36324f32a.d11bd21001982666
     699771b4e0a7db59
 
-VCMPSD_128_0x0(reg)
+VDIVSS_128(reg)
   before
     08e029b3b7e606a6.0c0d5c51e29bdc3c.56726e3566fc82ae.7a76446fbd95acb8
     0c42f67922e0e2f9.22a5c85f9ed52aa9.dc7db1ca74677e08.d65a5eb2a7cad93a
@@ -10698,12 +10698,12 @@
     af80c10a2736a05f.f5a824409e92ef13.3addad97138c613c.2a019ad998a982cd
     db5db496d86d7635
   after
-    0000000000000000.0000000000000000.dc7db1ca74677e08.0000000000000000
+    0000000000000000.0000000000000000.dc7db1ca74677e08.d65a5eb2aa7e4875
     0c42f67922e0e2f9.22a5c85f9ed52aa9.dc7db1ca74677e08.d65a5eb2a7cad93a
     cf09d572be21acfd.d14037b5d323488c.b488c81c24130afe.1c99fc863ccc37dd
     af80c10a2736a05f.f5a824409e92ef13.3addad97138c613c.2a019ad998a982cd
     db5db496d86d7635
-VCMPSD_128_0x0(mem)
+VDIVSS_128(mem)
   before
     0b78c7a91722ce41.06f4b6adf7aafacb.69aa0bea1a2dde68.caca5ea8dc5fc16d
     961f4efe72d6481f.32b1b0c8cd09f5ec.0b1168a06400cfb7.c099d6b91c17643e
@@ -10713,11 +10713,11 @@
   after
     0b78c7a91722ce41.06f4b6adf7aafacb.69aa0bea1a2dde68.caca5ea8dc5fc16d
     961f4efe72d6481f.32b1b0c8cd09f5ec.0b1168a06400cfb7.c099d6b91c17643e
-    0000000000000000.0000000000000000.0b1168a06400cfb7.0000000000000000
+    0000000000000000.0000000000000000.0b1168a06400cfb7.c099d6b98015a6a7
     2c41a91eea6a8cfb.7436a412f5bac1ff.464276e2cf80aaf6.4d100c8f6e68656e
     9d4fc22bb9183b26
 
-VCMPSD_128_0x0(reg)
+VDIVSS_128(reg)
   before
     c3a22f79ebdd442d.f05474c14061cf52.4496961980230949.96a41e4429440b3e
     1b534fe49f44be30.7e22a4572086232a.576e7d487fa8e4f8.849b2c63c1715f2f
@@ -10725,12 +10725,12 @@
     d00399c1fe26f0d8.6c232008f48ced0b.b9b91bcb4b333d38.a67a6b851833d0c3
     92fb946010e164bd
   after
-    0000000000000000.0000000000000000.576e7d487fa8e4f8.0000000000000000
+    0000000000000000.0000000000000000.576e7d487fa8e4f8.849b2c634ed30e06
     1b534fe49f44be30.7e22a4572086232a.576e7d487fa8e4f8.849b2c63c1715f2f
     00af1fd871d8e3da.b478b4caa9e644ae.0a0b550a8fd48bb9.eaf41c2ab21262f8
     d00399c1fe26f0d8.6c232008f48ced0b.b9b91bcb4b333d38.a67a6b851833d0c3
     92fb946010e164bd
-VCMPSD_128_0x0(mem)
+VDIVSS_128(mem)
   before
     8c4213a7b527db11.e698bb0be2b921d5.84ed65fc1f84db6d.c0c4caf74f523420
     6e1a64472411f1ec.9dbd8022b71db17e.d6a3fd9146dbcaff.7b785efa38bcad1e
@@ -10740,11 +10740,11 @@
   after
     8c4213a7b527db11.e698bb0be2b921d5.84ed65fc1f84db6d.c0c4caf74f523420
     6e1a64472411f1ec.9dbd8022b71db17e.d6a3fd9146dbcaff.7b785efa38bcad1e
-    0000000000000000.0000000000000000.d6a3fd9146dbcaff.0000000000000000
+    0000000000000000.0000000000000000.d6a3fd9146dbcaff.7b785efa28e5c854
     5eb06d3ece03e8e5.62e3e468aa8ae183.9c021b53f5d49a65.7e0a253528a2150a
     7d81514666367b51
 
-VCMPSD_128_0x0(reg)
+VDIVSS_128(reg)
   before
     a0d052ddf946535d.24061d6d4123425c.287c7b6e00aaf937.c8439957b68df391
     434424687d5cd9db.421e8fa5ee172b09.ffd5a5f1b7cb6047.9ea15aade3d53d9d
@@ -10752,12 +10752,12 @@
     78cb2c06c5d0dddb.fac3aadc64ab98b8.54f1a320be430e29.bcdf9a00ee419308
     bb5810d4057c16be
   after
-    0000000000000000.0000000000000000.ffd5a5f1b7cb6047.0000000000000000
+    0000000000000000.0000000000000000.ffd5a5f1b7cb6047.9ea15aad7f800000
     434424687d5cd9db.421e8fa5ee172b09.ffd5a5f1b7cb6047.9ea15aade3d53d9d
     c129c3528d074876.95c340d1f0eb5e19.45385e5e6e7a535e.fbe6dc4197b833b6
     78cb2c06c5d0dddb.fac3aadc64ab98b8.54f1a320be430e29.bcdf9a00ee419308
     bb5810d4057c16be
-VCMPSD_128_0x0(mem)
+VDIVSS_128(mem)
   before
     d51cbaabf7767b05.c37559f2c245d4b6.4be84bb465649511.8a4e6ea345b0cc53
     e6f9156fe1397c08.fe7548811ff168b2.65ff9e4410211050.4199bd539f4fcb89
@@ -10767,11 +10767,11 @@
   after
     d51cbaabf7767b05.c37559f2c245d4b6.4be84bb465649511.8a4e6ea345b0cc53
     e6f9156fe1397c08.fe7548811ff168b2.65ff9e4410211050.4199bd539f4fcb89
-    0000000000000000.0000000000000000.65ff9e4410211050.0000000000000000
+    0000000000000000.0000000000000000.65ff9e4410211050.4199bd5399167102
     5e29cb730b5045f5.b4a25a386b1f5abf.64334b3dd1d97333.a62dd4ea395176c7
     0b0d95a9b2cc9b28
 
-VCMPSD_128_0x1(reg)
+VUNPCKLPS_128(reg)
   before
     620cc9456ea9f044.7c151e8a83bb8536.e668753992ba3028.02e79c7d20ebd32f
     07766c2a0872b1c8.0149123f632051e4.79b3408c89bb9462.d8be90268932a1c1
@@ -10779,12 +10779,12 @@
     acbaef8047fe66b6.b0b9ca33c90a7f35.2e07dcdc5924f4fc.9f004f5f168c7a59
     480411c773b7fdb6
   after
-    0000000000000000.0000000000000000.79b3408c89bb9462.ffffffffffffffff
+    0000000000000000.0000000000000000.c382a222d8be9026.27b99a158932a1c1
     07766c2a0872b1c8.0149123f632051e4.79b3408c89bb9462.d8be90268932a1c1
     56967ac51cb51a5f.c991227ec68c662a.c8ceb99eedb0c11a.c382a22227b99a15
     acbaef8047fe66b6.b0b9ca33c90a7f35.2e07dcdc5924f4fc.9f004f5f168c7a59
     480411c773b7fdb6
-VCMPSD_128_0x1(mem)
+VUNPCKLPS_128(mem)
   before
     9a5a66485947de5b.632cc8c924d8d279.928c864a87a65a31.09a8a3b06aa468b3
     71cec9cde548da72.d839ff0b50cf9953.4bd7d2af1d6db149.b4fe0c88bbbb5aec
@@ -10794,11 +10794,11 @@
   after
     9a5a66485947de5b.632cc8c924d8d279.928c864a87a65a31.09a8a3b06aa468b3
     71cec9cde548da72.d839ff0b50cf9953.4bd7d2af1d6db149.b4fe0c88bbbb5aec
-    0000000000000000.0000000000000000.4bd7d2af1d6db149.ffffffffffffffff
+    0000000000000000.0000000000000000.09a8a3b0b4fe0c88.6aa468b3bbbb5aec
     1d3eaa935dc912a7.6c547d2a03452cfe.b2050b143ea9c57f.e9f9b1f18edea893
     2b36e55a49037b59
 
-VCMPSD_128_0x1(reg)
+VUNPCKLPS_128(reg)
   before
     ae57ab76b4f0bd50.abd41fac8163c61e.43f9badfc2dc6f27.1880f1ec0237faf5
     ccaafeb16b2fa725.2eb7937abb9c85b8.486a473d40c0fd18.c4a356c20d1f9c38
@@ -10806,12 +10806,12 @@
     4d113b352fd96a17.839666e0de211302.4bdb3ea4e7a1ed00.630f91176b2e16d3
     0df25f6ff56d6783
   after
-    0000000000000000.0000000000000000.486a473d40c0fd18.ffffffffffffffff
+    0000000000000000.0000000000000000.9439b782c4a356c2.7c6d67730d1f9c38
     ccaafeb16b2fa725.2eb7937abb9c85b8.486a473d40c0fd18.c4a356c20d1f9c38
     e379da770b4e7883.82b481e726820a9f.d7f11fb0187e137c.9439b7827c6d6773
     4d113b352fd96a17.839666e0de211302.4bdb3ea4e7a1ed00.630f91176b2e16d3
     0df25f6ff56d6783
-VCMPSD_128_0x1(mem)
+VUNPCKLPS_128(mem)
   before
     6dac9d76363613b0.67be1d55745aba8d.0c2bbc5200835a0b.0274a08648b6c74f
     6109c7164b96d985.8ecc7d45755fa490.fb3d0128a8b69be7.570842c0d748dc16
@@ -10821,11 +10821,11 @@
   after
     6dac9d76363613b0.67be1d55745aba8d.0c2bbc5200835a0b.0274a08648b6c74f
     6109c7164b96d985.8ecc7d45755fa490.fb3d0128a8b69be7.570842c0d748dc16
-    0000000000000000.0000000000000000.fb3d0128a8b69be7.0000000000000000
+    0000000000000000.0000000000000000.0274a086570842c0.48b6c74fd748dc16
     71e1d1d45f489eda.6e3aa4411d2335ef.770c45aff7bdffc6.4b5033f0f213aabb
     a19d7abeb565dbf0
 
-VCMPSD_128_0x1(reg)
+VUNPCKLPS_128(reg)
   before
     0614f0951664374e.46f2a8cb96b316b2.e0326326fcfa54a3.bd603c39d7a99922
     d50292e1b29dfb7f.1dd75b0b10e496e2.cebb908a0785fc95.d86112d7ad961d00
@@ -10833,12 +10833,12 @@
     2072478809eaaa0b.454d461b40c9a1fb.8fb0217f13e3dbe1.fc9f48ffa8a0d6f4
     bd72a06206d58362
   after
-    0000000000000000.0000000000000000.cebb908a0785fc95.ffffffffffffffff
+    0000000000000000.0000000000000000.a3dd4275d86112d7.948f488cad961d00
     d50292e1b29dfb7f.1dd75b0b10e496e2.cebb908a0785fc95.d86112d7ad961d00
     69b35b0e249b632f.d45c6682eae7db96.952126d9db4e6b70.a3dd4275948f488c
     2072478809eaaa0b.454d461b40c9a1fb.8fb0217f13e3dbe1.fc9f48ffa8a0d6f4
     bd72a06206d58362
-VCMPSD_128_0x1(mem)
+VUNPCKLPS_128(mem)
   before
     c323c788c93b0b02.558d52bcfd170dbf.4e7676c22d95a43d.19b47de84bd08894
     eb7e375f0edd2901.634e79149aacc8f6.c9a37263ce589f87.8f78368020a0b034
@@ -10848,11 +10848,11 @@
   after
     c323c788c93b0b02.558d52bcfd170dbf.4e7676c22d95a43d.19b47de84bd08894
     eb7e375f0edd2901.634e79149aacc8f6.c9a37263ce589f87.8f78368020a0b034
-    0000000000000000.0000000000000000.c9a37263ce589f87.ffffffffffffffff
+    0000000000000000.0000000000000000.19b47de88f783680.4bd0889420a0b034
     0d62e8cc8c0619cb.7ef608e4454435a0.8937bf4399f070e5.af74b1ee10195cec
     11436a9c62db595d
 
-VCMPSD_128_0x2(reg)
+VCVTSI2SS_128(reg)
   before
     cf037028c1b0bf6b.bf821f3bfda564ee.437468338a5e5f6a.8537085afcddbd51
     45ffc000c924cbc3.027d910a60b1351f.51c9d358ea12d167.656b0d1b82f1f476
@@ -10860,12 +10860,12 @@
     c8df2a41411bc500.ac2f1278693d5b5e.bc27bcd169747bae.3c9f3b4c6abc0a99
     ec365d94028b62f0
   after
-    0000000000000000.0000000000000000.51c9d358ea12d167.0000000000000000
+    0000000000000000.0000000000000000.51c9d358ea12d167.656b0d1b4c22d8bc
     45ffc000c924cbc3.027d910a60b1351f.51c9d358ea12d167.656b0d1b82f1f476
     cf85558f14c4b911.b21db824d035488b.054046be00eac645.039f4a734837ce7f
     c8df2a41411bc500.ac2f1278693d5b5e.bc27bcd169747bae.3c9f3b4c6abc0a99
     ec365d94028b62f0
-VCMPSD_128_0x2(mem)
+VCVTSI2SS_128(mem)
   before
     f0322b362fb093af.8e5b3e82e9b62a3d.ca7f1bef48d628c3.d0c831fdc03c2c4e
     225d211d0a375902.7c438abeab202573.e9d94d76890a6ce7.9e70a1aea1cc15d2
@@ -10875,11 +10875,11 @@
   after
     f0322b362fb093af.8e5b3e82e9b62a3d.ca7f1bef48d628c3.d0c831fdc03c2c4e
     225d211d0a375902.7c438abeab202573.e9d94d76890a6ce7.9e70a1aea1cc15d2
-    0000000000000000.0000000000000000.e9d94d76890a6ce7.0000000000000000
+    0000000000000000.0000000000000000.e9d94d76890a6ce7.9e70a1aece7f0f4f
     8373766f409d9317.3f89bfd8e791cc7d.9ada21659e79481a.d905634f747a7d35
     fd8aad189dae756c
 
-VCMPSD_128_0x2(reg)
+VCVTSI2SS_128(reg)
   before
     4b45e215c0dc9436.6af6ccb1d2947f31.cd809f8d99b1f0a8.e419baa4abcb5882
     1f84ffb47a901840.f0d83be9841def8f.f314a8eed4d19a7d.9f926da48ae9cf58
@@ -10887,12 +10887,12 @@
     c9b9dd8421b639c3.49ed52ecb6164fc8.76412660543d6fd3.d86212932bbbe000
     0e51fc5b2686f32a
   after
-    0000000000000000.0000000000000000.f314a8eed4d19a7d.0000000000000000
+    0000000000000000.0000000000000000.f314a8eed4d19a7d.9f926da44e1a1bcd
     1f84ffb47a901840.f0d83be9841def8f.f314a8eed4d19a7d.9f926da48ae9cf58
     d591fe5f66543a36.f1e63f047144a15d.0c90d665347b05a7.a711b74f55e068c9
     c9b9dd8421b639c3.49ed52ecb6164fc8.76412660543d6fd3.d86212932bbbe000
     0e51fc5b2686f32a
-VCMPSD_128_0x2(mem)
+VCVTSI2SS_128(mem)
   before
     25a9f193624e5d73.5848978e46424f94.d4b7f28e6e9eb6fc.8c73934ad1a212ac
     f9376b27fc1ed906.dc8a28e97283ba54.6e1199d7b5e89125.a972198f46372adf
@@ -10902,11 +10902,11 @@
   after
     25a9f193624e5d73.5848978e46424f94.d4b7f28e6e9eb6fc.8c73934ad1a212ac
     f9376b27fc1ed906.dc8a28e97283ba54.6e1199d7b5e89125.a972198f46372adf
-    0000000000000000.0000000000000000.6e1199d7b5e89125.ffffffffffffffff
+    0000000000000000.0000000000000000.6e1199d7b5e89125.a972198fce3977b5
     4826e314b707fabc.3556c1424d547954.3ea4f20a63f49603.6c0661da891ead02
     c9341bb88f898f4a
 
-VCMPSD_128_0x2(reg)
+VCVTSI2SS_128(reg)
   before
     9f5edea1fe53d69c.7a1ed84411381737.c378bf1834fd46eb.2d769acd00cd3811
     48d1a6017208c0a3.da7b438139a136ad.b77d86f0928b5722.9b073be69e993ec4
@@ -10914,12 +10914,12 @@
     87c136d7d6656782.91986cce614d6d38.416057522087341e.639955ca473769c7
     7632c66d8b220670
   after
-    0000000000000000.0000000000000000.b77d86f0928b5722.ffffffffffffffff
+    0000000000000000.0000000000000000.b77d86f0928b5722.9b073be6cee9bbf3
     48d1a6017208c0a3.da7b438139a136ad.b77d86f0928b5722.9b073be69e993ec4
     22d970458535870b.430ba1b54a4f1449.6db10f34028be8a4.6424504157636647
     87c136d7d6656782.91986cce614d6d38.416057522087341e.639955ca473769c7
     7632c66d8b220670
-VCMPSD_128_0x2(mem)
+VCVTSI2SS_128(mem)
   before
     78bb20173e2ff76d.d4d7f625fe249eb1.9ff022b699a7fca5.8fd65bb4890e783c
     44ffdeb27d6af9eb.6566ab9a9cff6647.4bdd3e5b0e6a7ebd.b25e16c8d9a9f0a9
@@ -10929,11 +10929,11 @@
   after
     78bb20173e2ff76d.d4d7f625fe249eb1.9ff022b699a7fca5.8fd65bb4890e783c
     44ffdeb27d6af9eb.6566ab9a9cff6647.4bdd3e5b0e6a7ebd.b25e16c8d9a9f0a9
-    0000000000000000.0000000000000000.4bdd3e5b0e6a7ebd.ffffffffffffffff
+    0000000000000000.0000000000000000.4bdd3e5b0e6a7ebd.b25e16c8ceede310
     aeec766f0d9c1f18.c41de5a9a4369c53.e9a8998922584b9c.ecd8a2b29b506b22
     ba616b614674e686
 
-VCMPSD_128_0x3(reg)
+VANDPS_128(reg)
   before
     cd2dda7147dd84e9.042c486996aabb1f.49de621b46ab8121.941fd0eaf79c0dbc
     8388ee4f3b1783f8.94586f041a175857.8248c464cd6be805.4b5c5db87b78b236
@@ -10941,12 +10941,12 @@
     441aed206a2f8fc9.d6a3a9d2863c8409.8046282bf9fd2bbd.51566a46fa2a94eb
     57ace2e02e17497d
   after
-    0000000000000000.0000000000000000.8248c464cd6be805.0000000000000000
+    0000000000000000.0000000000000000.82000460c5020800.48081d984878b236
     8388ee4f3b1783f8.94586f041a175857.8248c464cd6be805.4b5c5db87b78b236
     36bda065bdae1d5f.3c3b662eb6eeb2ec.cba607f0d5020daa.ec2abdddc8f9f637
     441aed206a2f8fc9.d6a3a9d2863c8409.8046282bf9fd2bbd.51566a46fa2a94eb
     57ace2e02e17497d
-VCMPSD_128_0x3(mem)
+VANDPS_128(mem)
   before
     dbf8a0957fccd11a.07e9d2eddd2614e3.405bb4dca50c8bdb.fd722182d5e77fea
     b70620530a56e8ed.dd774a36b31dea59.542e04382f6a838e.9e77f05f064c45dc
@@ -10956,11 +10956,11 @@
   after
     dbf8a0957fccd11a.07e9d2eddd2614e3.405bb4dca50c8bdb.fd722182d5e77fea
     b70620530a56e8ed.dd774a36b31dea59.542e04382f6a838e.9e77f05f064c45dc
-    0000000000000000.0000000000000000.542e04382f6a838e.0000000000000000
+    0000000000000000.0000000000000000.400a04182508838a.9c722002044445c8
     eb9757973b17b1e7.2e00e4f0f6407306.ee586097f7013444.bc3cfd5fd6b916c1
     f194345aacd9990c
 
-VCMPSD_128_0x3(reg)
+VANDPS_128(reg)
   before
     baf5308c47a47ecc.fab206f51a66dc66.6193fd399b84a097.2b4764716b5266a1
     73aaed6142a601af.d2bf670ba3b985cc.17149aaf13f90c33.83819c4ebc62798d
@@ -10968,12 +10968,12 @@
     24439aa4ca80cf88.4edf2f0f219c44fb.77144ed2e9a7943d.f50a9abd5fec30c9
     c6f05728ea7e4d6f
   after
-    0000000000000000.0000000000000000.17149aaf13f90c33.0000000000000000
+    0000000000000000.0000000000000000.021092ae11290402.8280840804202805
     73aaed6142a601af.d2bf670ba3b985cc.17149aaf13f90c33.83819c4ebc62798d
     770067453a6b5d5e.4f8af6c5f11c6a44.aad0b6bef92bf486.d2d48518043c2837
     24439aa4ca80cf88.4edf2f0f219c44fb.77144ed2e9a7943d.f50a9abd5fec30c9
     c6f05728ea7e4d6f
-VCMPSD_128_0x3(mem)
+VANDPS_128(mem)
   before
     22523845c0ff3b57.d5bf83ea8f7093d7.a9898fd54e44d21c.da2a5c5780f82704
     e5fcba00fd7bb5aa.e6c01d8424c8e4f7.3d5691049421ced4.305edeba5aaaea86
@@ -10983,11 +10983,11 @@
   after
     22523845c0ff3b57.d5bf83ea8f7093d7.a9898fd54e44d21c.da2a5c5780f82704
     e5fcba00fd7bb5aa.e6c01d8424c8e4f7.3d5691049421ced4.305edeba5aaaea86
-    0000000000000000.0000000000000000.3d5691049421ced4.0000000000000000
+    0000000000000000.0000000000000000.290081040400c214.100a5c1200a82204
     10588d001f903f48.9780545f30dd205d.80846b49dda703b8.20552bc64463ef6d
     73aeee478d82a92a
 
-VCMPSD_128_0x3(reg)
+VANDPS_128(reg)
   before
     2856155688318353.30a1d71d3b42c8e9.f0d8e97adeb383fa.e77e3c381869b43c
     9b999b5ed2feb993.2762b2892f1fcda8.18e42098ce1f6319.f7ca9f3edc8fc306
@@ -10995,12 +10995,12 @@
     2b20b408c121270a.0a7c07fa0c873d2a.494b618cddef8d8c.82870b447138ee1f
     b5900c1b7ad281c5
   after
-    0000000000000000.0000000000000000.18e42098ce1f6319.0000000000000000
+    0000000000000000.0000000000000000.08e0200088106100.840010084405c102
     9b999b5ed2feb993.2762b2892f1fcda8.18e42098ce1f6319.f7ca9f3edc8fc306
     28c37cca06758697.d167982e16320bae.6df1f42599b0fd66.8c3410494625ed43
     2b20b408c121270a.0a7c07fa0c873d2a.494b618cddef8d8c.82870b447138ee1f
     b5900c1b7ad281c5
-VCMPSD_128_0x3(mem)
+VANDPS_128(mem)
   before
     001c90bb7c026362.00fc3f839e8ed899.ae6d7ad72e2b2046.0a3d643b356a4e37
     41f5120e94d15021.03a21aa73a48d5f0.98066eb39829702e.0a15f79d3eac7d15
@@ -11010,11 +11010,11 @@
   after
     001c90bb7c026362.00fc3f839e8ed899.ae6d7ad72e2b2046.0a3d643b356a4e37
     41f5120e94d15021.03a21aa73a48d5f0.98066eb39829702e.0a15f79d3eac7d15
-    0000000000000000.0000000000000000.98066eb39829702e.0000000000000000
+    0000000000000000.0000000000000000.88046a9308292006.0a15641934284c15
     12c0008174823ab7.0380ad9b1dd5a1a4.b35ec515b1644615.3ba3c22bd2b71514
     24f1f12e9497f58e
 
-VCMPSD_128_0x4(reg)
+VMINSS_128(reg)
   before
     bc53a295776f33ea.594b6578747bafe7.b84f5e429cc0e859.9bb7217399b9446b
     6017cfca16ca0bd3.0653b8d4f9441ee8.0b194d4349276c86.39e7ed7f38989f3e
@@ -11022,12 +11022,12 @@
     3df19253fa3a77fe.fe0e18670577de14.facddaffa09f16f7.0cfec6510d265b0a
     f77ecaf07bec345b
   after
-    0000000000000000.0000000000000000.0b194d4349276c86.ffffffffffffffff
+    0000000000000000.0000000000000000.0b194d4349276c86.39e7ed7fab0e13ba
     6017cfca16ca0bd3.0653b8d4f9441ee8.0b194d4349276c86.39e7ed7f38989f3e
     6c88763b0e34b8f6.f4a6758020e945e9.58297808c19967d7.6bbaa525ab0e13ba
     3df19253fa3a77fe.fe0e18670577de14.facddaffa09f16f7.0cfec6510d265b0a
     f77ecaf07bec345b
-VCMPSD_128_0x4(mem)
+VMINSS_128(mem)
   before
     0a052fec106d5ad8.2da0207d77678498.02581d77c3f9a695.4f4f6f9381c7b492
     20607133e9b488ae.99df1a2720471b70.db4f019b767b5899.b2fc3430009c7f56
@@ -11037,11 +11037,11 @@
   after
     0a052fec106d5ad8.2da0207d77678498.02581d77c3f9a695.4f4f6f9381c7b492
     20607133e9b488ae.99df1a2720471b70.db4f019b767b5899.b2fc3430009c7f56
-    0000000000000000.0000000000000000.db4f019b767b5899.ffffffffffffffff
+    0000000000000000.0000000000000000.db4f019b767b5899.b2fc343081c7b492
     c4c2784ed4c5ef14.554047a86852d588.7b7953d02db16dd9.11073a354a7f8603
     c6fd74754da43c45
 
-VCMPSD_128_0x4(reg)
+VMINSS_128(reg)
   before
     f84ece6e5ea60d5f.0a6136fb1fa8a0fb.5df971583e957120.fa42b9b8697c486d
     0545428d1a1236fc.c304c0a21e8049eb.5174f936b1ba86a6.bfe9ee640b78fe33
@@ -11049,12 +11049,12 @@
     1c586de801567e72.ff84298ea5447696.6ddb0f30dde00f2b.8601b1b9ee31e908
     420a383a6706966e
   after
-    0000000000000000.0000000000000000.5174f936b1ba86a6.ffffffffffffffff
+    0000000000000000.0000000000000000.5174f936b1ba86a6.bfe9ee640b78fe33
     0545428d1a1236fc.c304c0a21e8049eb.5174f936b1ba86a6.bfe9ee640b78fe33
     472fce3c1c74f2c9.cc76922fec5ba710.8efbd9af5d4f52c6.a43a6cc12db04a59
     1c586de801567e72.ff84298ea5447696.6ddb0f30dde00f2b.8601b1b9ee31e908
     420a383a6706966e
-VCMPSD_128_0x4(mem)
+VMINSS_128(mem)
   before
     b2207e2fb63b0fb7.de0c1bfe644616a2.39faffab664771a8.4d609623cdf8f982
     b311fd84f7dc0e0f.eb97d4e9e2cff605.57a492724b715572.89d66bf6ca234e76
@@ -11064,11 +11064,11 @@
   after
     b2207e2fb63b0fb7.de0c1bfe644616a2.39faffab664771a8.4d609623cdf8f982
     b311fd84f7dc0e0f.eb97d4e9e2cff605.57a492724b715572.89d66bf6ca234e76
-    0000000000000000.0000000000000000.57a492724b715572.ffffffffffffffff
+    0000000000000000.0000000000000000.57a492724b715572.89d66bf6cdf8f982
     d9af9bfebd949099.516159ee9dde7d18.aac4ddafee68c8e2.85c4ebe959e323e8
     fdd58fe124901dbd
 
-VCMPSD_128_0x4(reg)
+VMINSS_128(reg)
   before
     410670686a8170e0.b5f5b1fb7ac38b25.64391ce0127b9c1e.98d18dfde54dcede
     ada48aeaca4159fc.9245f208988efd6e.3017da5711e2f208.da43e9a56f88ad43
@@ -11076,12 +11076,12 @@
     6c575b8f425edcd2.bf32e1036a2935ee.66183884203b3737.c58195b2ae31e6f7
     27e6ddf09bb8b79e
   after
-    0000000000000000.0000000000000000.3017da5711e2f208.ffffffffffffffff
+    0000000000000000.0000000000000000.3017da5711e2f208.da43e9a5a926213d
     ada48aeaca4159fc.9245f208988efd6e.3017da5711e2f208.da43e9a56f88ad43
     9cfbdad3dd5c14be.4c6ad8113401a2a3.124890bf379ebd82.4ae46d92a926213d
     6c575b8f425edcd2.bf32e1036a2935ee.66183884203b3737.c58195b2ae31e6f7
     27e6ddf09bb8b79e
-VCMPSD_128_0x4(mem)
+VMINSS_128(mem)
   before
     4cdfc2388bc4515d.7804098b92d4eee3.c76789c85510737c.89d2d01267469cd4
     1037bf779a636f61.1b4de0316b49869d.40d64a4e11c51878.d5c454d6a84a2a04
@@ -11091,11 +11091,11 @@
   after
     4cdfc2388bc4515d.7804098b92d4eee3.c76789c85510737c.89d2d01267469cd4
     1037bf779a636f61.1b4de0316b49869d.40d64a4e11c51878.d5c454d6a84a2a04
-    0000000000000000.0000000000000000.40d64a4e11c51878.ffffffffffffffff
+    0000000000000000.0000000000000000.40d64a4e11c51878.d5c454d6a84a2a04
     e538f28588882be7.9be7fa30276237c0.f5920b496ec2856c.5b7c0cac8a6eacd0
     4dda389763a619c3
 
-VCMPSD_128_0x5(reg)
+VMAXSS_128(reg)
   before
     d99f4067a6089dfa.ae781f2e9e2640c1.2ecf355f411dc87f.e97703974724c6bc
     5b162088f01e7520.8648557c4486c98f.ca8389ea5408cf98.bec5055561815e2a
@@ -11103,12 +11103,12 @@
     b14e546d079c10ec.d3c7c9bbadbe2ab9.89846dc1d49b2d87.7bd018d2ca618113
     1b24216851fc85e6
   after
-    0000000000000000.0000000000000000.ca8389ea5408cf98.0000000000000000
+    0000000000000000.0000000000000000.ca8389ea5408cf98.bec5055561815e2a
     5b162088f01e7520.8648557c4486c98f.ca8389ea5408cf98.bec5055561815e2a
     2f8dd266dc77dde2.49740f5d95b5837e.c951f33cfcae87b7.50498e6fd9e708e4
     b14e546d079c10ec.d3c7c9bbadbe2ab9.89846dc1d49b2d87.7bd018d2ca618113
     1b24216851fc85e6
-VCMPSD_128_0x5(mem)
+VMAXSS_128(mem)
   before
     0c12241e89c3d087.3da7a1090c1b4ce9.ff0f0084a9ad7a6e.6467f5e5785bfdb5
     29659ee18ec21d22.2fe2b5a6887fca86.ab162fa3a48f2ec6.b7478615857b33ed
@@ -11118,11 +11118,11 @@
   after
     0c12241e89c3d087.3da7a1090c1b4ce9.ff0f0084a9ad7a6e.6467f5e5785bfdb5
     29659ee18ec21d22.2fe2b5a6887fca86.ab162fa3a48f2ec6.b7478615857b33ed
-    0000000000000000.0000000000000000.ab162fa3a48f2ec6.0000000000000000
+    0000000000000000.0000000000000000.ab162fa3a48f2ec6.b7478615785bfdb5
     5c6ee33a729ab0f9.b53123945227844e.f09465930959b516.362eb4454809bf28
     19cd481d378f8e85
 
-VCMPSD_128_0x5(reg)
+VMAXSS_128(reg)
   before
     e599d6b1fda5b29a.28bca7a9888b6d8c.00dc75bdd98336d1.40a3643cab5a0064
     f4dd596b39d56916.929fd1d3dce31dca.229b7e9647f51ba5.80a24cecbc7d9f07
@@ -11130,12 +11130,12 @@
     4e002f067cb97aed.ac56480dabfe46f6.5881a50d454872ea.3c9fc30d9d5accfb
     71354c56a52cd1a4
   after
-    0000000000000000.0000000000000000.229b7e9647f51ba5.ffffffffffffffff
+    0000000000000000.0000000000000000.229b7e9647f51ba5.80a24cec59cf4f2b
     f4dd596b39d56916.929fd1d3dce31dca.229b7e9647f51ba5.80a24cecbc7d9f07
     a3e6ceb984adeca3.75e4dea688b07cdf.76b83a8d37087173.8a5c978d59cf4f2b
     4e002f067cb97aed.ac56480dabfe46f6.5881a50d454872ea.3c9fc30d9d5accfb
     71354c56a52cd1a4
-VCMPSD_128_0x5(mem)
+VMAXSS_128(mem)
   before
     04ebac568c511b52.52777abebd844da2.15c38df55fd8363c.2340bc820e425bb4
     d38d61f86fd46630.0997aa4de29aa26b.8af62848c04a09dc.35427a582d80687d
@@ -11145,11 +11145,11 @@
   after
     04ebac568c511b52.52777abebd844da2.15c38df55fd8363c.2340bc820e425bb4
     d38d61f86fd46630.0997aa4de29aa26b.8af62848c04a09dc.35427a582d80687d
-    0000000000000000.0000000000000000.8af62848c04a09dc.ffffffffffffffff
+    0000000000000000.0000000000000000.8af62848c04a09dc.35427a582d80687d
     90c4b7d19624ee2e.0301aaa14ad8c2f0.0cdc51e2fb2747dc.9a3edbd8dffedcbf
     a6d07759aa55bc8f
 
-VCMPSD_128_0x5(reg)
+VMAXSS_128(reg)
   before
     67d6a9eb3b21b00f.38f250e1130aa3a6.fee4713dc4180402.d128d7020daa2a94
     3b9a6ffb2feff3eb.8a3b2e44fc7e49fe.1d9f0e6193d3b8db.126aa33d3cf5e057
@@ -11157,12 +11157,12 @@
     878ea541aebe5964.a051a5ae7f415601.37d0b8ed9eec658c.7cfffdb96315b4ac
     5ceb84d193024a96
   after
-    0000000000000000.0000000000000000.1d9f0e6193d3b8db.ffffffffffffffff
+    0000000000000000.0000000000000000.1d9f0e6193d3b8db.126aa33d3cf5e057
     3b9a6ffb2feff3eb.8a3b2e44fc7e49fe.1d9f0e6193d3b8db.126aa33d3cf5e057
     7c69c5f3214ac2ce.646ccbe46c8d9b63.bc7f7c7753961924.ac6e3181a5152550
     878ea541aebe5964.a051a5ae7f415601.37d0b8ed9eec658c.7cfffdb96315b4ac
     5ceb84d193024a96
-VCMPSD_128_0x5(mem)
+VMAXSS_128(mem)
   before
     29fc40b550e7a33c.b9570d5071d8f35b.1bb6388e52a93603.eadebc2e1362d6bd
     bfffaf51b6d07ac7.6c0ff78c0723ce5c.b166fe7100cef796.30f486a64c82a963
@@ -11172,11 +11172,11 @@
   after
     29fc40b550e7a33c.b9570d5071d8f35b.1bb6388e52a93603.eadebc2e1362d6bd
     bfffaf51b6d07ac7.6c0ff78c0723ce5c.b166fe7100cef796.30f486a64c82a963
-    0000000000000000.0000000000000000.b166fe7100cef796.ffffffffffffffff
+    0000000000000000.0000000000000000.b166fe7100cef796.30f486a64c82a963
     b70b9461f0df9542.c97a473b197d3133.9fdb17ec5f840a1d.ea6c59eb7bf663c1
     15655a90a961c3d1
 
-VCMPSD_128_0x6(reg)
+VANDNPS_128(reg)
   before
     4497111c0ca77506.d0ab02adfb1e518a.2ac6a386cea43260.ae37625d482dd56a
     d24e79fb3f55b50c.226e12621f907b68.7d3173aec62c6348.480fd2807cc471f7
@@ -11184,12 +11184,12 @@
     807a4c638716cc3e.e18808b325420c97.6a935c46ec9145fb.8d630d8c37ec0a83
     f077d14df6967fda
   after
-    0000000000000000.0000000000000000.7d3173aec62c6348.0000000000000000
+    0000000000000000.0000000000000000.0206800019820090.0120214100118800
     d24e79fb3f55b50c.226e12621f907b68.7d3173aec62c6348.480fd2807cc471f7
     1dd58e9adff6be90.891e406a7943d008.1e07b2209ba20098.492fe141185599f1
     807a4c638716cc3e.e18808b325420c97.6a935c46ec9145fb.8d630d8c37ec0a83
     f077d14df6967fda
-VCMPSD_128_0x6(mem)
+VANDNPS_128(mem)
   before
     4e36a970705fb622.5687b0c4d3411dc1.0678e7283d9aeb41.bb236e8e53856d1e
     836d12e2c1516986.fd49b4276004ebc6.d4ba58b5e0562832.6e01e2626c0bb5ad
@@ -11199,11 +11199,11 @@
   after
     4e36a970705fb622.5687b0c4d3411dc1.0678e7283d9aeb41.bb236e8e53856d1e
     836d12e2c1516986.fd49b4276004ebc6.d4ba58b5e0562832.6e01e2626c0bb5ad
-    0000000000000000.0000000000000000.d4ba58b5e0562832.ffffffffffffffff
+    0000000000000000.0000000000000000.0240a7081d88c341.91220c8c13844812
     e273835f5be63554.2a1c91a8ac80f105.db63e0c6312baf96.6adae56326fb94bd
     6b6d6b67ff7ca396
 
-VCMPSD_128_0x6(reg)
+VANDNPS_128(reg)
   before
     3e7e45a8fabfc28b.c4da8442db9fc616.68c5629da251a096.cc62ef24185c7062
     3f5b6d92b4502c48.ede90524a2b3c4a5.e752c34549e9be5a.d6e48149f8218025
@@ -11211,12 +11211,12 @@
     3ba49c12d289d4c8.832e7892771af6d8.144c2a5f19a03125.a49c1b9b15997c3e
     216a1ba18963e1ed
   after
-    0000000000000000.0000000000000000.e752c34549e9be5a.0000000000000000
+    0000000000000000.0000000000000000.00013008341400a1.0013102205861b0a
     3f5b6d92b4502c48.ede90524a2b3c4a5.e752c34549e9be5a.d6e48149f8218025
     ca4ee191c8ba1e78.386b83f0cd2deb2c.0111b20c3dd584fb.d4b31122ed879b0a
     3ba49c12d289d4c8.832e7892771af6d8.144c2a5f19a03125.a49c1b9b15997c3e
     216a1ba18963e1ed
-VCMPSD_128_0x6(mem)
+VANDNPS_128(mem)
   before
     27eb8e1e67f28442.eea99b7f70498ae3.a9fc62f6bd85a2d4.7a5027a879d6ff85
     91e9ee00cb51216a.3ea9d8463b877b76.86a2bc08bb7bab4d.9069a654fa042bc7
@@ -11226,11 +11226,11 @@
   after
     27eb8e1e67f28442.eea99b7f70498ae3.a9fc62f6bd85a2d4.7a5027a879d6ff85
     91e9ee00cb51216a.3ea9d8463b877b76.86a2bc08bb7bab4d.9069a654fa042bc7
-    0000000000000000.0000000000000000.86a2bc08bb7bab4d.0000000000000000
+    0000000000000000.0000000000000000.295c42f604840090.6a1001a801d2d400
     06906ba092b03de1.2ac9018eceab01b3.d4a5b1e64c34c364.3d091687cd758d9f
     8b2901e457d13a8d
 
-VCMPSD_128_0x6(reg)
+VANDNPS_128(reg)
   before
     f98d5c557254350d.c7d07e352ec83388.7d82e4e8cca90eb4.fd9b448b17114a5b
     e4822445b98ab9cb.5ebd70dfc0e013b3.dd65f74a6a5446de.4e98378d0aa71e7e
@@ -11238,12 +11238,12 @@
     9c4fed523d4150af.7ad3dd203342843f.39dc99dbf0e22a57.d4da2e5cd7349bfb
     c2b72a01e942bdac
   after
-    0000000000000000.0000000000000000.dd65f74a6a5446de.ffffffffffffffff
+    0000000000000000.0000000000000000.209a00200028a001.a06100524100e080
     e4822445b98ab9cb.5ebd70dfc0e013b3.dd65f74a6a5446de.4e98378d0aa71e7e
     a6545620c8000472.a525bb8a62059a8b.a8bf34224238e6db.a26906da4105fafa
     9c4fed523d4150af.7ad3dd203342843f.39dc99dbf0e22a57.d4da2e5cd7349bfb
     c2b72a01e942bdac
-VCMPSD_128_0x6(mem)
+VANDNPS_128(mem)
   before
     46cc75b4923a1c3a.22bfe547b1d9d92d.b792528e4da48df8.eb0821e211de4dff
     3ee58e61ee2873d0.94ef3b6cc255dd99.3a2f94c0cc3671e5.1c8ec9a140b68c7f
@@ -11253,11 +11253,11 @@
   after
     46cc75b4923a1c3a.22bfe547b1d9d92d.b792528e4da48df8.eb0821e211de4dff
     3ee58e61ee2873d0.94ef3b6cc255dd99.3a2f94c0cc3671e5.1c8ec9a140b68c7f
-    0000000000000000.0000000000000000.3a2f94c0cc3671e5.ffffffffffffffff
+    0000000000000000.0000000000000000.8590420e01808c18.e300204211484180
     f55112593218fcc6.acc3edf12a2741ea.7d3374226b1ab806.67dc65fb3a2f4eb5
     393b526d3de848c4
 
-VCMPSD_128_0x7(reg)
+VORPS_128(reg)
   before
     fa254e49beae4e5a.6e3d777c5132a57e.0afe422bb8941a27.f7320928c3859392
     04e656f95a0d9c23.c95d984a937237ef.c42ae54453165c01.253e5ca3f0503a01
@@ -11265,12 +11265,12 @@
     671c768a50c8fe01.9869ff93f29406aa.bc8401c21e820e3f.11b12ea53a37d636
     86afa404906c4555
   after
-    0000000000000000.0000000000000000.c42ae54453165c01.ffffffffffffffff
+    0000000000000000.0000000000000000.f6baf5e7d7365c25.e53ffefffed87f7f
     04e656f95a0d9c23.c95d984a937237ef.c42ae54453165c01.253e5ca3f0503a01
     b5c964ebac926dcd.e37df1ad15e46e44.3692d0a796364425.e425ea7e0e88677e
     671c768a50c8fe01.9869ff93f29406aa.bc8401c21e820e3f.11b12ea53a37d636
     86afa404906c4555
-VCMPSD_128_0x7(mem)
+VORPS_128(mem)
   before
     20ebc8872b306e06.77298742e43b8b6e.c5ec3ce6478fba4c.b24a73008685f5fa
     bb31171a28910e76.423d937f017850be.44d426942fe04757.733222cd6bcc3703
@@ -11280,11 +11280,11 @@
   after
     20ebc8872b306e06.77298742e43b8b6e.c5ec3ce6478fba4c.b24a73008685f5fa
     bb31171a28910e76.423d937f017850be.44d426942fe04757.733222cd6bcc3703
-    0000000000000000.0000000000000000.44d426942fe04757.ffffffffffffffff
+    0000000000000000.0000000000000000.c5fc3ef66fefff5f.f37a73cdefcdf7fb
     640a2221b558a241.74aa8e394b7d70b9.abfeefae2ab6dc57.cb9328c51a53b6ad
     19a577c71cab6da7
 
-VCMPSD_128_0x7(reg)
+VORPS_128(reg)
   before
     a207f3080b776d9e.2b35d76d7ed60ef5.949b748db05e44bc.4bd9c5f175525ba4
     c40798f58242f33e.629aa7781820e117.dec3451710383f52.ae483840c375a309
@@ -11292,12 +11292,12 @@
     3f0c4e7f7a07802d.93428480314aaa57.61e699792e089dea.2d11e2aada7d7dce
     0103119eda7a8785
   after
-    0000000000000000.0000000000000000.dec3451710383f52.ffffffffffffffff
+    0000000000000000.0000000000000000.ffeffd5716bfbf7a.be5efbc4f37fefbb
     c40798f58242f33e.629aa7781820e117.dec3451710383f52.ae483840c375a309
     daef63f91e993a35.e6050c30a043d6d4.af6dfd4106979f28.b016c384312a6fb3
     3f0c4e7f7a07802d.93428480314aaa57.61e699792e089dea.2d11e2aada7d7dce
     0103119eda7a8785
-VCMPSD_128_0x7(mem)
+VORPS_128(mem)
   before
     08b9cd4d4e2e4a05.51aa57f53218ffd2.441d8a54e84119cd.517a142a25167843
     1eff91a152a58179.6a157ac6e358f3d1.d7619a98e034df62.db756abf864d6ae0
@@ -11307,11 +11307,11 @@
   after
     08b9cd4d4e2e4a05.51aa57f53218ffd2.441d8a54e84119cd.517a142a25167843
     1eff91a152a58179.6a157ac6e358f3d1.d7619a98e034df62.db756abf864d6ae0
-    0000000000000000.0000000000000000.d7619a98e034df62.ffffffffffffffff
+    0000000000000000.0000000000000000.d77d9adce875dfef.db7f7ebfa75f7ae3
     e76a21ed77083ef0.2581fa299f982e8c.1058c92005415e97.2dd0974af8688694
     adc7671741642804
 
-VCMPSD_128_0x7(reg)
+VORPS_128(reg)
   before
     3755027a64b9d167.5128e6bbd10e3c4a.7f1b4f93e1aeeca0.6ea2e03c6a71908f
     26c764ddfdf3be6a.3ba5a2e02b059e49.50b1ae088c240fbd.1d86f17880ce0956
@@ -11319,12 +11319,12 @@
     a8816e57044753fe.fc0ff4dc4cfc81e4.cb0478c48b5e78c5.dd4bf201313dbe00
     a7c4da260367733a
   after
-    0000000000000000.0000000000000000.50b1ae088c240fbd.ffffffffffffffff
+    0000000000000000.0000000000000000.f5b1bffdbfa6dfbd.fdcff9f9e4ee8d5e
     26c764ddfdf3be6a.3ba5a2e02b059e49.50b1ae088c240fbd.1d86f17880ce0956
     d86689ada99e2bb8.80aed3479ffb2118.f59013f53b86d591.f8cf78c164648418
     a8816e57044753fe.fc0ff4dc4cfc81e4.cb0478c48b5e78c5.dd4bf201313dbe00
     a7c4da260367733a
-VCMPSD_128_0x7(mem)
+VORPS_128(mem)
   before
     3108ac1bf7ee5ef4.f2630e45a97973e7.8a94828c4b127ad9.2c59dbe3173a3407
     59e1e4cc29dd3c58.125865e534c1c721.0809f741bb4bc722.75da37bc7ca64703
@@ -11334,11 +11334,11 @@
   after
     3108ac1bf7ee5ef4.f2630e45a97973e7.8a94828c4b127ad9.2c59dbe3173a3407
     59e1e4cc29dd3c58.125865e534c1c721.0809f741bb4bc722.75da37bc7ca64703
-    0000000000000000.0000000000000000.0809f741bb4bc722.ffffffffffffffff
+    0000000000000000.0000000000000000.8a9df7cdfb5bfffb.7ddbffff7fbe7707
     ef857712b423c1cf.43a928e86fc0fa32.40f28b6e58555062.3094ca513f5a5dd8
     5964fae4d5bcd908
 
-VCMPSD_128_0x8(reg)
+VSQRTSD_128(reg)
   before
     da9112e2b4dc9aa3.16e7ca7f4693df3b.0d9e8d23568f5162.b3fea1bdbd3d03b1
     0f6710b77748dd52.49107358859be001.1cd699bf93a4cb91.842a90c30277fb04
@@ -11346,12 +11346,12 @@
     053dac961b33d8a3.47e2b8ff7da47a4e.7e3e96ca81ce1c9f.b412e5a19b13aa69
     cb654451278cd8d2
   after
-    0000000000000000.0000000000000000.1cd699bf93a4cb91.0000000000000000
+    0000000000000000.0000000000000000.1cd699bf93a4cb91.fff8000000000000
     0f6710b77748dd52.49107358859be001.1cd699bf93a4cb91.842a90c30277fb04
     5432f0cfbb8cdec4.66caee898e47804e.ce9d4828c38aa66c.9142d26b4310f488
     053dac961b33d8a3.47e2b8ff7da47a4e.7e3e96ca81ce1c9f.b412e5a19b13aa69
     cb654451278cd8d2
-VCMPSD_128_0x8(mem)
+VSQRTSD_128(mem)
   before
     b0096c6702883bf0.7ed5427933c9089b.ca244ba46cbd8b2c.870780126afb6ad5
     40c8d7cf48128fee.1b47ace2a0daaa5a.c95c25667a9f6f14.4742016a199dcbbb
@@ -11361,11 +11361,11 @@
   after
     b0096c6702883bf0.7ed5427933c9089b.ca244ba46cbd8b2c.870780126afb6ad5
     40c8d7cf48128fee.1b47ace2a0daaa5a.c95c25667a9f6f14.4742016a199dcbbb
-    0000000000000000.0000000000000000.c95c25667a9f6f14.0000000000000000
+    0000000000000000.0000000000000000.c95c25667a9f6f14.fff8000000000000
     d2ca6b458702f83d.31e3f2fbe79f33d7.afdd9ced5ceb9fb5.5841b8fe3b72ba46
     619de612e6bcbe42
 
-VCMPSD_128_0x8(reg)
+VSQRTSD_128(reg)
   before
     909c9ce7c7acc79f.8ba58b2cb87f86e5.62a7c481fa6a92ee.4dbf308b6a6d63c6
     4289d5e97acd0f06.5fcbe014c4baf51e.27745c3fd1e1537a.d8c6fbf505e8ea91
@@ -11373,12 +11373,12 @@
     9a61c024c9d34ea9.c92c159be09c64f2.dd57cb103c01eaa4.267623dd54f72f07
     a0b779333fa3660a
   after
-    0000000000000000.0000000000000000.27745c3fd1e1537a.0000000000000000
+    0000000000000000.0000000000000000.27745c3fd1e1537a.3656705ddf49def8
     4289d5e97acd0f06.5fcbe014c4baf51e.27745c3fd1e1537a.d8c6fbf505e8ea91
     d1b18d849cabd326.2b0ae4ebc8c00014.dc95b5a0088fb228.2cbf78174a67ef43
     9a61c024c9d34ea9.c92c159be09c64f2.dd57cb103c01eaa4.267623dd54f72f07
     a0b779333fa3660a
-VCMPSD_128_0x8(mem)
+VSQRTSD_128(mem)
   before
     774df50628775077.fae36b359cd0be3c.16feee12265bdde4.85079bfb08c2389a
     870612402b7fa87b.4b848823b12e5d8a.ee4dec3bb9082717.32ef1fce095ed8b4
@@ -11388,11 +11388,11 @@
   after
     774df50628775077.fae36b359cd0be3c.16feee12265bdde4.85079bfb08c2389a
     870612402b7fa87b.4b848823b12e5d8a.ee4dec3bb9082717.32ef1fce095ed8b4
-    0000000000000000.0000000000000000.ee4dec3bb9082717.0000000000000000
+    0000000000000000.0000000000000000.ee4dec3bb9082717.fff8000000000000
     c20c259dec5e95f7.33520d47143f1a09.af8c43532f5d1cf0.089938d71758fc0b
     e8f3c4e75ecff99f
 
-VCMPSD_128_0x8(reg)
+VSQRTSD_128(reg)
   before
     3db7f68d48503808.a5f21298e34ba2c7.82176d549909b092.5016951a4c1d3fed
     612fc9377369f4f3.312a90ab639d0ddd.332b2fefd0656687.ec4bfb4424fb24da
@@ -11400,12 +11400,12 @@
     8b6e4244fb91d6fe.b4bf35c9709ef08e.2c70ce7cc6002163.85e9f46c77431f37
     3aea7f4429c4adff
   after
-    0000000000000000.0000000000000000.332b2fefd0656687.0000000000000000
+    0000000000000000.0000000000000000.332b2fefd0656687.4ff3fa4a50f66ce2
     612fc9377369f4f3.312a90ab639d0ddd.332b2fefd0656687.ec4bfb4424fb24da
     b2a839507ba56a0c.42801dc2895f9366.a3db518356de7893.5ff8f1bbd40485e4
     8b6e4244fb91d6fe.b4bf35c9709ef08e.2c70ce7cc6002163.85e9f46c77431f37
     3aea7f4429c4adff
-VCMPSD_128_0x8(mem)
+VSQRTSD_128(mem)
   before
     5ac70e2e0793ec67.47cce07f8fb87375.63b552ac3565df80.2b39a246bd589ea2
     c14c1d152cbd989b.4410106dd4a67e1f.2b2cf257f3c01d68.fc81ca4dd6712bfd
@@ -11415,11 +11415,11 @@
   after
     5ac70e2e0793ec67.47cce07f8fb87375.63b552ac3565df80.2b39a246bd589ea2
     c14c1d152cbd989b.4410106dd4a67e1f.2b2cf257f3c01d68.fc81ca4dd6712bfd
-    0000000000000000.0000000000000000.2b2cf257f3c01d68.0000000000000000
+    0000000000000000.0000000000000000.2b2cf257f3c01d68.359440811377d594
     d37dac8fbe50261a.6c761212df09ceb6.75d0a8b5cc6475ce.83bd03c2e01864b6
     f2490c0808bd886c
 
-VCMPSD_128_0xA(reg)
+VCMPSD_128_0x0(reg)
   before
     a384583cc353abed.37c124f962d180bc.5130dea2de958afc.b094b6411ec408a2
     f2bae4c8ad670be6.52dd0c11bddd37db.e5ff2a94fd19a424.740b3644dbe9d91d
@@ -11432,7 +11432,7 @@
     3b36aa1a6184e202.ff9de1c3ec7f07a3.852ef456d82058d9.9cffa5ac1cdea46b
     da46a89c7b376def.1ccc1dfc0ac3ab3f.8e0b37520c36e1c8.063e7e64ffb027b7
     8d923d58a0691c2e
-VCMPSD_128_0xA(mem)
+VCMPSD_128_0x0(mem)
   before
     0cc85f741a1740fc.2a34dabc980ae756.84383ea634b5e0dc.5ae0eff634e87c9c
     61ac5ea489c64e4c.894d3ae5548c8de6.12abbfae856262a5.46fb18adedc16502
@@ -11442,11 +11442,11 @@
   after
     0cc85f741a1740fc.2a34dabc980ae756.84383ea634b5e0dc.5ae0eff634e87c9c
     61ac5ea489c64e4c.894d3ae5548c8de6.12abbfae856262a5.46fb18adedc16502
-    0000000000000000.0000000000000000.12abbfae856262a5.ffffffffffffffff
+    0000000000000000.0000000000000000.12abbfae856262a5.0000000000000000
     f9ade8f0b8541b24.e030790216c64d2b.14d9d28a0e1a3b6d.ee2eae047f191033
     63df137c91b04a56
 
-VCMPSD_128_0xA(reg)
+VCMPSD_128_0x0(reg)
   before
     6704dab7a49ec2ba.f4626ae4b04b5204.91924fce5597df39.402c5b347d3e0bc4
     57ebfd215370b30c.35f5bb9d0d736416.bf4f4454a2468c1f.02b735ed844c18f8
@@ -11454,12 +11454,12 @@
     6b2a4c33f6edf429.f5e5b70a68830783.06087c39d86b2921.bca4ca39c957d7a5
     6b9e7ca43e6d0277
   after
-    0000000000000000.0000000000000000.bf4f4454a2468c1f.ffffffffffffffff
+    0000000000000000.0000000000000000.bf4f4454a2468c1f.0000000000000000
     57ebfd215370b30c.35f5bb9d0d736416.bf4f4454a2468c1f.02b735ed844c18f8
     8fde7a273ab15bf8.96325605ecd70c87.c8b255fe9a5e9188.3846dba03f511d34
     6b2a4c33f6edf429.f5e5b70a68830783.06087c39d86b2921.bca4ca39c957d7a5
     6b9e7ca43e6d0277
-VCMPSD_128_0xA(mem)
+VCMPSD_128_0x0(mem)
   before
     22016fcebb9c59d5.471b6fb323b1ba4c.2cda5a969e841035.d79db772f9fa9195
     bb971ea15bf299eb.7ffddf115c88eb0c.18dcbb97a9e5e5ca.95bd011398960592
@@ -11473,7 +11473,7 @@
     068ea1f67741c4f2.72c4971c63a17816.803ba9a5b0f9dd4c.4cceb342c22601d0
     fd5613a78432006b
 
-VCMPSD_128_0xA(reg)
+VCMPSD_128_0x0(reg)
   before
     0b9a7225357bfb3e.71876c4f2951263b.e640d7a069fa4eb7.b32f2d8ae3c37a90
     d3e4cd28718e2df4.2ee5e40370b961ec.26dd54b3ec967da6.0b615f935c1dd168
@@ -11481,12 +11481,12 @@
     02bd636df73f2abb.11fbc82927ba5238.7aaaf636d7c9d91c.9aaebec28fb49f7e
     8a62e3bf80078f15
   after
-    0000000000000000.0000000000000000.26dd54b3ec967da6.ffffffffffffffff
+    0000000000000000.0000000000000000.26dd54b3ec967da6.0000000000000000
     d3e4cd28718e2df4.2ee5e40370b961ec.26dd54b3ec967da6.0b615f935c1dd168
     b1811e1cd3f6d439.1a7284fd65823131.8ee70bc18702428e.649dbbac37149ffd
     02bd636df73f2abb.11fbc82927ba5238.7aaaf636d7c9d91c.9aaebec28fb49f7e
     8a62e3bf80078f15
-VCMPSD_128_0xA(mem)
+VCMPSD_128_0x0(mem)
   before
     0e83a691271b29ee.20e497887af66b24.ef4c2d73cf6c7f2a.4572137f77787dfb
     03de8322a0fb2a37.6841b6d7f8a6d520.90312ec77ca57536.4d8b5d06049a6bd9
@@ -11500,7 +11500,7 @@
     b0727d3675514fc3.e6d1a6c552220f84.8be6f43d4ed9ab46.80de69825368153c
     64b2234f4d2b4819
 
-VCMPSD_128_0xC(reg)
+VCMPSD_128_0x1(reg)
   before
     f306fa0ba393b5a5.204391900adeec5f.d49b6f3c67065843.9d4eb137aded63a4
     8b27ea22f229988a.707daf5ae068e019.5ccc1398e613b846.e27afbec7fb7d4c9
@@ -11513,7 +11513,7 @@
     8660ef00d67b2c75.7eee538014fae61e.dab08e456cd66c38.36364d46e043b9e4
     42ff0611ea14ae11.2560faeec1a0bb9a.aa92ddaf94dab0c6.754e2333ed9ecf1f
     7b8df99ec2d3d2a6
-VCMPSD_128_0xC(mem)
+VCMPSD_128_0x1(mem)
   before
     24c14b737aee7ea6.194e2ac1ca815a0b.41a01f9003671bb9.28c0fa42faacbf9c
     4bb4969e31fc8e4b.699a577c134d6c0e.ae7a3e53f85ac2a5.b084e36a3cd6d765
@@ -11527,7 +11527,7 @@
     880a04a60e1ecd32.df59bcc44e33b0e2.ea2b5be864f5d39b.4e01072abd680c82
     1c52399a36e7a32e
 
-VCMPSD_128_0xC(reg)
+VCMPSD_128_0x1(reg)
   before
     646a274ef9ef317d.54051f5b6c4b74cd.bf64ed2878655b0a.729a509215b5b6fc
     8194ccb4a20df21c.10f02316399a6fbc.869c17487b265bec.bbd4300de7d1cfdb
@@ -11540,7 +11540,7 @@
     d11d2437cecb24b7.97968bc392177b2c.914c368ff203ed34.a0a37744f656db65
     af522c4219b801fa.c4c5d34f92cf5448.3cc146697a874d8d.ffd49f235f4f96c6
     b23326963ec8bc29
-VCMPSD_128_0xC(mem)
+VCMPSD_128_0x1(mem)
   before
     978b8789adce08ba.767dde431e5dc68f.754777a556cdb53d.e4484442ae3eb7a3
     88aa3ee8cb6c37a7.84eb38a57948af25.84e9f4b0f91d5b36.e32b2b862bb56624
@@ -11550,11 +11550,11 @@
   after
     978b8789adce08ba.767dde431e5dc68f.754777a556cdb53d.e4484442ae3eb7a3
     88aa3ee8cb6c37a7.84eb38a57948af25.84e9f4b0f91d5b36.e32b2b862bb56624
-    0000000000000000.0000000000000000.84e9f4b0f91d5b36.ffffffffffffffff
+    0000000000000000.0000000000000000.84e9f4b0f91d5b36.0000000000000000
     02689e9b7ea12d3f.e1bfd23da31edbff.30bd659a4de566e7.5937a4ff6d118611
     88f92e0c6b0d6fd6
 
-VCMPSD_128_0xC(reg)
+VCMPSD_128_0x1(reg)
   before
     7f47923522f98db4.43a040c64c516c43.e9bd094aaa21979b.85865250377542f7
     9a6ecbe42d611d59.00ce280e37c87e52.a62fd869779967e7.a8a0076c708753ba
@@ -11567,7 +11567,7 @@
     35bad58728d05a6e.16bed25d5c141f97.765f3a04a713868e.76d501da1427555f
     ac77ac88b0d282a2.623bbba1d6400a3f.b39a2b89d51a313e.ccf2bb8640610310
     84c3b15c10421afa
-VCMPSD_128_0xC(mem)
+VCMPSD_128_0x1(mem)
   before
     7b145f499fd55648.5bf14d5561f3cf9f.be135dc5c159fc75.bb2ca7629e3aa4a0
     8eb1413709277327.9e73b259d5c07e11.071036b53b69b166.e860abfd9dff1a62
@@ -11581,7 +11581,7 @@
     73fd93cbe0353e46.4fc3bdb67d8cf007.d1ac7aa945a45228.25e23826aeab02b6
     ecc7b98cf9a8ec9f
 
-VCMPSD_128_0xD(reg)
+VCMPSD_128_0x2(reg)
   before
     497fb263ea7bc997.fe46fa47850965df.76285be7e7a32ce2.09e3de860fe6b751
     98561e181db0d64c.140a857675cc5db8.a1c6aeff8595bae3.9e6f67ded650cfe4
@@ -11589,12 +11589,12 @@
     7d903fc8bc6d7097.5135f89aa84daedc.72dc6295d03bbb06.4fbaddb3ccce06fb
     2310c20733f99ed6
   after
-    0000000000000000.0000000000000000.a1c6aeff8595bae3.0000000000000000
+    0000000000000000.0000000000000000.a1c6aeff8595bae3.ffffffffffffffff
     98561e181db0d64c.140a857675cc5db8.a1c6aeff8595bae3.9e6f67ded650cfe4
     3698f8152fd24f68.9115b143cd89e1fe.2ce9b16bf5eed6b6.6c1e939eb6ef550e
     7d903fc8bc6d7097.5135f89aa84daedc.72dc6295d03bbb06.4fbaddb3ccce06fb
     2310c20733f99ed6
-VCMPSD_128_0xD(mem)
+VCMPSD_128_0x2(mem)
   before
     c4ecbc88087dd9cc.ca8cec9b5e0d7486.3035d86722237f7f.d1edbdeab407a580
     0e1a492166647208.79d6fdfcb43f98e1.0ae0cd9758171213.a466bcd73ddfd2cf
@@ -11604,11 +11604,11 @@
   after
     c4ecbc88087dd9cc.ca8cec9b5e0d7486.3035d86722237f7f.d1edbdeab407a580
     0e1a492166647208.79d6fdfcb43f98e1.0ae0cd9758171213.a466bcd73ddfd2cf
-    0000000000000000.0000000000000000.0ae0cd9758171213.ffffffffffffffff
+    0000000000000000.0000000000000000.0ae0cd9758171213.0000000000000000
     0d9b094b3091b005.6d873714e6862f89.1f6ae2cc678b69bc.15c39b26ace0e09e
     6b3f725fca223a77
 
-VCMPSD_128_0xD(reg)
+VCMPSD_128_0x2(reg)
   before
     a654dee0fc9fc5d4.7a8735b4d2eece1d.6a865aa4fbb41a2e.12e1faa97722a529
     204edc14dfe3bf64.00f4e2e56ee03a2c.3903cf7132a315ef.70341799b3089237
@@ -11616,12 +11616,12 @@
     451f7b4626f1eac7.c684b45003afeedd.bdaba47378f52974.dd9d4e5e1eee6fe5
     a34c600c8407d6dc
   after
-    0000000000000000.0000000000000000.3903cf7132a315ef.ffffffffffffffff
+    0000000000000000.0000000000000000.3903cf7132a315ef.0000000000000000
     204edc14dfe3bf64.00f4e2e56ee03a2c.3903cf7132a315ef.70341799b3089237
     377867680e7a61d0.7baf8eca2071b15d.364c94e727e05b78.152fb5863748ec11
     451f7b4626f1eac7.c684b45003afeedd.bdaba47378f52974.dd9d4e5e1eee6fe5
     a34c600c8407d6dc
-VCMPSD_128_0xD(mem)
+VCMPSD_128_0x2(mem)
   before
     4506667c869ede25.a78f141bc3d494f3.bf3ed16134a6afd8.2a6dfb7fbe70bb8f
     9e98dc9a3fbf43ea.ba142e547fad9c01.41ab5febce60ae79.d9de957897dd4d77
@@ -11631,11 +11631,11 @@
   after
     4506667c869ede25.a78f141bc3d494f3.bf3ed16134a6afd8.2a6dfb7fbe70bb8f
     9e98dc9a3fbf43ea.ba142e547fad9c01.41ab5febce60ae79.d9de957897dd4d77
-    0000000000000000.0000000000000000.41ab5febce60ae79.0000000000000000
+    0000000000000000.0000000000000000.41ab5febce60ae79.ffffffffffffffff
     e473099148d11399.5e8cd79eca77b671.4fcac316ae53585f.6cfd84e271ba5f58
     0942d02ba94258aa
 
-VCMPSD_128_0xD(reg)
+VCMPSD_128_0x2(reg)
   before
     58674f11e4ec4178.8a55b841d0d9f6dc.a8185d88917e3f2b.941490902da37bfc
     b5b6fd00be43556d.563ec7507f9c264b.13e85484e7ad1677.d140bf3285e7cdef
@@ -11643,12 +11643,12 @@
     0805d8a9bc2af17f.d458f537c4815b60.b7878767b6b29d74.a76d359e317cec8a
     f8077340bee53289
   after
-    0000000000000000.0000000000000000.13e85484e7ad1677.ffffffffffffffff
+    0000000000000000.0000000000000000.13e85484e7ad1677.0000000000000000
     b5b6fd00be43556d.563ec7507f9c264b.13e85484e7ad1677.d140bf3285e7cdef
     7b7cd764d2d4d136.26fbb2a872255e13.f949b9006b907601.e41acde8d22b0965
     0805d8a9bc2af17f.d458f537c4815b60.b7878767b6b29d74.a76d359e317cec8a
     f8077340bee53289
-VCMPSD_128_0xD(mem)
+VCMPSD_128_0x2(mem)
   before
     b1b203ba9372978f.b69dfc3b19d1f0f3.3e210de891bad95d.a9eeba25669fc57d
     b03b62f9cf30d7c8.e38f3f8684560b3f.3e2275a6f7de9436.2bca4ea717e32ac7
@@ -11658,11 +11658,11 @@
   after
     b1b203ba9372978f.b69dfc3b19d1f0f3.3e210de891bad95d.a9eeba25669fc57d
     b03b62f9cf30d7c8.e38f3f8684560b3f.3e2275a6f7de9436.2bca4ea717e32ac7
-    0000000000000000.0000000000000000.3e2275a6f7de9436.ffffffffffffffff
+    0000000000000000.0000000000000000.3e2275a6f7de9436.0000000000000000
     ec177972e66dd680.26b514f8f627850d.74fb25fef716af30.4f108aa2e9a29fd1
     a9122af5433426e8
 
-VCMPSD_128_0xE(reg)
+VCMPSD_128_0x3(reg)
   before
     03b91bba0e4edbf1.e1022b85f9040d59.f5809cf6358c5be7.616b666fcb4188a7
     b951595fe57bf997.8bfa9a0be2fb1014.b1d6355ef2fd3d49.5644e79fa5868dab
@@ -11670,12 +11670,12 @@
     a983adf6283f636d.6f45a325a53a64e1.6452831958391454.c35b99e7e2900e09
     f533c2d97b6d02bb
   after
-    0000000000000000.0000000000000000.b1d6355ef2fd3d49.ffffffffffffffff
+    0000000000000000.0000000000000000.b1d6355ef2fd3d49.0000000000000000
     b951595fe57bf997.8bfa9a0be2fb1014.b1d6355ef2fd3d49.5644e79fa5868dab
     2726e14f6448bd87.c7cd43f2bd5e99dd.b703d89bca0967df.2d502478a4f27b68
     a983adf6283f636d.6f45a325a53a64e1.6452831958391454.c35b99e7e2900e09
     f533c2d97b6d02bb
-VCMPSD_128_0xE(mem)
+VCMPSD_128_0x3(mem)
   before
     9da31c398c9412a9.9bb6bbc0ccef26f4.602f3590b79a2f4c.12113144381b8155
     987622f23011fb00.59090719ede144c9.7657761f0e8bb449.1e8ade88073bea8e
@@ -11685,11 +11685,11 @@
   after
     9da31c398c9412a9.9bb6bbc0ccef26f4.602f3590b79a2f4c.12113144381b8155
     987622f23011fb00.59090719ede144c9.7657761f0e8bb449.1e8ade88073bea8e
-    0000000000000000.0000000000000000.7657761f0e8bb449.ffffffffffffffff
+    0000000000000000.0000000000000000.7657761f0e8bb449.0000000000000000
     f7782224a33e4898.a842452814c07b0b.8290f15afc4ddeab.c1dd250be1619f55
     0f4fb8222381633d
 
-VCMPSD_128_0xE(reg)
+VCMPSD_128_0x3(reg)
   before
     2bac3a02c40d130b.133f1574aa072331.f2c02fb652c50ed0.2f3a24ddcc36fc68
     7240a7185f93ea6e.f29aa3ceb455c7e2.788e48847d3dea93.7151f53551e0c468
@@ -11697,12 +11697,12 @@
     ec3b3392f6bc009e.693b855043b5593f.a74eef8c07b66fc3.24f96210eba544df
     4d22f56c38d874ae
   after
-    0000000000000000.0000000000000000.788e48847d3dea93.ffffffffffffffff
+    0000000000000000.0000000000000000.788e48847d3dea93.0000000000000000
     7240a7185f93ea6e.f29aa3ceb455c7e2.788e48847d3dea93.7151f53551e0c468
     3e56fcce919f2610.70544a1edd36efd8.95fa89fc30b44c00.24a2e04ca757f3d6
     ec3b3392f6bc009e.693b855043b5593f.a74eef8c07b66fc3.24f96210eba544df
     4d22f56c38d874ae
-VCMPSD_128_0xE(mem)
+VCMPSD_128_0x3(mem)
   before
     7be9174cabfb3f70.d83b4acf2876b7c3.b919d151ffdfbf42.08d7779fa0d09186
     8a19449c5f1b6151.5ea23cf1c659852c.3cbba80b2fbfde0e.16e11ca0948decf8
@@ -11712,11 +11712,11 @@
   after
     7be9174cabfb3f70.d83b4acf2876b7c3.b919d151ffdfbf42.08d7779fa0d09186
     8a19449c5f1b6151.5ea23cf1c659852c.3cbba80b2fbfde0e.16e11ca0948decf8
-    0000000000000000.0000000000000000.3cbba80b2fbfde0e.ffffffffffffffff
+    0000000000000000.0000000000000000.3cbba80b2fbfde0e.0000000000000000
     bae8ab3cfc7f981e.a8d5a294b0cc5978.4b7bec5e5ad235af.a5a8ad2103223f94
     defc9278b411af16
 
-VCMPSD_128_0xE(reg)
+VCMPSD_128_0x3(reg)
   before
     3402846e33d449f6.941ede641ddc2662.24380ded3473d7b3.8f3051cf8c1de6dd
     01047f701af648df.bfee0badef65fb75.aa3244db93745ce3.76da31aaa24e4083
@@ -11724,12 +11724,12 @@
     742f80449188697f.778b434e182c68b7.441c042751b26ecc.9c38574ee894dde9
     948594ef50c09901
   after
-    0000000000000000.0000000000000000.aa3244db93745ce3.ffffffffffffffff
+    0000000000000000.0000000000000000.aa3244db93745ce3.0000000000000000
     01047f701af648df.bfee0badef65fb75.aa3244db93745ce3.76da31aaa24e4083
     a34f7fe80503ea7e.1723ae018f26d282.961043ca695a25b1.db430adbb772fece
     742f80449188697f.778b434e182c68b7.441c042751b26ecc.9c38574ee894dde9
     948594ef50c09901
-VCMPSD_128_0xE(mem)
+VCMPSD_128_0x3(mem)
   before
     9ff63daa0c03ee41.d1f07fee5910018d.bdf0477ea682793d.0fa2845ce80772de
     9857cf6b376897d6.17dd7754fa27f055.c420357f5634c043.55f0c0d7c9e56e93
@@ -11739,11 +11739,11 @@
   after
     9ff63daa0c03ee41.d1f07fee5910018d.bdf0477ea682793d.0fa2845ce80772de
     9857cf6b376897d6.17dd7754fa27f055.c420357f5634c043.55f0c0d7c9e56e93
-    0000000000000000.0000000000000000.c420357f5634c043.ffffffffffffffff
+    0000000000000000.0000000000000000.c420357f5634c043.0000000000000000
     c8189bb04cc9d8af.c96f43003534bec2.840cc0a18bdee379.bf10594bda6d3d99
     9a7aaf1d432f8941
 
-VCMPSD_128_0x11(reg)
+VCMPSD_128_0x4(reg)
   before
     60dbb0e465abbc3d.b710cd0c6edde749.eeab0e1f074115be.f561549a47ee3702
     6c7f570cdf6c1239.0428d71d6f443be9.6b44c3a9220eb324.98afc3139589b1ba
@@ -11756,7 +11756,7 @@
     19b2a3014bfec9e0.8d2c36d16c0890b9.9c865d0a2126d2a0.48c488f890be0ecc
     c5bf8d3045ee1bdf.2ce865138038a2e6.debdd8afa015afde.e06a203655960a65
     3d6e05b7ff1f60b0
-VCMPSD_128_0x11(mem)
+VCMPSD_128_0x4(mem)
   before
     3c9cb568ab64cddb.caf412036ac745e1.bf27e0cfc7dd2c9b.8b3430023c688589
     b7c0ab3674710d0f.869b2fe755158293.20b723f15e05eb05.0038627091aa914d
@@ -11766,11 +11766,11 @@
   after
     3c9cb568ab64cddb.caf412036ac745e1.bf27e0cfc7dd2c9b.8b3430023c688589
     b7c0ab3674710d0f.869b2fe755158293.20b723f15e05eb05.0038627091aa914d
-    0000000000000000.0000000000000000.20b723f15e05eb05.0000000000000000
+    0000000000000000.0000000000000000.20b723f15e05eb05.ffffffffffffffff
     951959d5cf15f548.8f721e93ef4129b5.c0f5f317eb0bf7a6.b218414ed32c3bd3
     a78be696f98550ed
 
-VCMPSD_128_0x11(reg)
+VCMPSD_128_0x4(reg)
   before
     d3ba55a947fc8bd0.afe70a7f99c415a5.943ae933d538097e.b63c77f41802bc36
     94f389f35a1f2828.b6daf1f5f06bf8bc.c0a53a94f3d3eea6.eb03b3e605aba62a
@@ -11783,7 +11783,7 @@
     45807edfce7963a2.87bf8a23f01659b9.6dfe0f22e2a012da.3c1623dbcd1371af
     42af30dc3d9777ea.fc6251f5b6d1f5ca.f8936349402bb2c6.834044bd8d45d8f0
     9d4e917a604d981a
-VCMPSD_128_0x11(mem)
+VCMPSD_128_0x4(mem)
   before
     660d86fd63386d59.e7ca9b534603a1ab.f28fc2585ea98818.beae3375a9fe0915
     ba479f31b11113d8.8f1ebcb1824c1d92.45115a3603aaced2.199c7912b8a75573
@@ -11793,11 +11793,11 @@
   after
     660d86fd63386d59.e7ca9b534603a1ab.f28fc2585ea98818.beae3375a9fe0915
     ba479f31b11113d8.8f1ebcb1824c1d92.45115a3603aaced2.199c7912b8a75573
-    0000000000000000.0000000000000000.45115a3603aaced2.0000000000000000
+    0000000000000000.0000000000000000.45115a3603aaced2.ffffffffffffffff
     735e2e61a0bdc049.5da00dd3099ef981.7248ec17b5536134.01205c5039a9b70f
     464ff0c8e31a45a5
 
-VCMPSD_128_0x11(reg)
+VCMPSD_128_0x4(reg)
   before
     9280eb62a491b7fa.90d49c3579a93f91.3966356e8bc0d2e1.0494def2fb142736
     3f014a88189849ba.a8f51e6a0db480cb.8a9602a1b2eeec16.6366e7f8ae2e9051
@@ -11810,7 +11810,7 @@
     aa1c08a8d9be3793.978e31ed78e83d21.ab7a71d619b385cd.6b8a8217eaac57b4
     2f1e212d868cbc2e.396c4fabd75333c0.f75f7d7b5c9bd7b1.f8cc2b3acc9a3989
     e6f75e4d6f05f1fc
-VCMPSD_128_0x11(mem)
+VCMPSD_128_0x4(mem)
   before
     11d9973cf0f83d3b.2a529183b890153a.6a58f68e46001dd3.cc9122fb18321e6f
     553c53f36a7fd76f.f70654160e557e61.0621a184e0fcb887.845c5dc2e90598b3
@@ -11820,11 +11820,11 @@
   after
     11d9973cf0f83d3b.2a529183b890153a.6a58f68e46001dd3.cc9122fb18321e6f
     553c53f36a7fd76f.f70654160e557e61.0621a184e0fcb887.845c5dc2e90598b3
-    0000000000000000.0000000000000000.0621a184e0fcb887.0000000000000000
+    0000000000000000.0000000000000000.0621a184e0fcb887.ffffffffffffffff
     97b8416abb7be76d.771ac5a38f536fb2.ef76f455060ef181.11eb81d5378d107b
     9e4963faed5a8658
 
-VCMPSD_128_0x12(reg)
+VCMPSD_128_0x5(reg)
   before
     7e6fca1527931f6a.4e696b01c907d68d.e2126a76f4a46f33.f39b9409ca3d061f
     0eaab39382c2155d.8ecb081141580354.8eb95235ebe76e81.d3cb287f2aeabc0d
@@ -11832,12 +11832,12 @@
     af8ef76a09380a9a.18d68848de760986.1e43dd2b01705d2e.947f1c622ceffb8c
     2c9a75a6075ffb74
   after
-    0000000000000000.0000000000000000.8eb95235ebe76e81.ffffffffffffffff
+    0000000000000000.0000000000000000.8eb95235ebe76e81.0000000000000000
     0eaab39382c2155d.8ecb081141580354.8eb95235ebe76e81.d3cb287f2aeabc0d
     ab4518e19a75a5df.33ac93843f792aee.d95b7a4e11a7aa46.6ad32ca34221cf78
     af8ef76a09380a9a.18d68848de760986.1e43dd2b01705d2e.947f1c622ceffb8c
     2c9a75a6075ffb74
-VCMPSD_128_0x12(mem)
+VCMPSD_128_0x5(mem)
   before
     10f2b15cec7e8c5c.77cf4b996e95813a.1b1663483a5c5a49.b9bf773a57cec4e6
     1a514e71fa566a72.5f5611dc621a466c.1638a0707036da63.051944e6b04e1a1a
@@ -11847,11 +11847,11 @@
   after
     10f2b15cec7e8c5c.77cf4b996e95813a.1b1663483a5c5a49.b9bf773a57cec4e6
     1a514e71fa566a72.5f5611dc621a466c.1638a0707036da63.051944e6b04e1a1a
-    0000000000000000.0000000000000000.1638a0707036da63.0000000000000000
+    0000000000000000.0000000000000000.1638a0707036da63.ffffffffffffffff
     14589964fa67fbd2.0061df4b6dcaa935.695132e8d9f7554a.259b68c4d9e286a4
     af59b7cfe20e1453
 
-VCMPSD_128_0x12(reg)
+VCMPSD_128_0x5(reg)
   before
     5c2729285d8b822d.bc963f1b26b72775.707ee04fbb0dbf24.77e17e1043f6c96f
     8750ba39e6e60bdf.fa0d35e0e9f190f5.700f42160aa81354.ef821c11f71a5c9b
@@ -11859,12 +11859,12 @@
     c6e12b3794636079.acd20144a554073a.90c11a9e1813642a.882a3f49abfeceb6
     63c9bc5ae3d625fe
   after
-    0000000000000000.0000000000000000.700f42160aa81354.ffffffffffffffff
+    0000000000000000.0000000000000000.700f42160aa81354.0000000000000000
     8750ba39e6e60bdf.fa0d35e0e9f190f5.700f42160aa81354.ef821c11f71a5c9b
     8b1f676f1aa9ec14.ac88f79e5f21f17d.5c62020df526e072.ab0188d5106dcaf9
     c6e12b3794636079.acd20144a554073a.90c11a9e1813642a.882a3f49abfeceb6
     63c9bc5ae3d625fe
-VCMPSD_128_0x12(mem)
+VCMPSD_128_0x5(mem)
   before
     16aa7bf3d5038afc.92e302fbf19da4b9.d8b9d0bbd7958e57.6879883710fbd927
     7e98f9009c90bbdd.4d6fe829cce5f481.0a07def010f14102.40d64742796b7b16
@@ -11874,11 +11874,11 @@
   after
     16aa7bf3d5038afc.92e302fbf19da4b9.d8b9d0bbd7958e57.6879883710fbd927
     7e98f9009c90bbdd.4d6fe829cce5f481.0a07def010f14102.40d64742796b7b16
-    0000000000000000.0000000000000000.0a07def010f14102.ffffffffffffffff
+    0000000000000000.0000000000000000.0a07def010f14102.0000000000000000
     decf1e251bfb6bf7.fb57d26f6dcda858.f30aad4508271eab.60afa9630b103a78
     60c3444f6d5ecd44
 
-VCMPSD_128_0x12(reg)
+VCMPSD_128_0x5(reg)
   before
     cfab205faf637fb1.8dafbe160af26487.a84bce606c8583bf.6358643cff19c003
     0bb439fe6eac8a6b.61cd0c2c3f7817aa.b2fbc96a597a5a5e.493e4ca26e567e98
@@ -11886,12 +11886,12 @@
     5759139ad1379e7a.e9f2a372ea669d59.51baad796f4debf1.ea009c6722df4126
     5d75fc9f9f43be79
   after
-    0000000000000000.0000000000000000.b2fbc96a597a5a5e.0000000000000000
+    0000000000000000.0000000000000000.b2fbc96a597a5a5e.ffffffffffffffff
     0bb439fe6eac8a6b.61cd0c2c3f7817aa.b2fbc96a597a5a5e.493e4ca26e567e98
     6f2a8b9845c42b20.37f58551d69b418c.76b1bff9d13968e0.8287df6170e91595
     5759139ad1379e7a.e9f2a372ea669d59.51baad796f4debf1.ea009c6722df4126
     5d75fc9f9f43be79
-VCMPSD_128_0x12(mem)
+VCMPSD_128_0x5(mem)
   before
     b7b27cf5042147b7.1e8dcc6ead911e25.5492e47c97e6e93c.9d628d57cf431d3f
     d48399556c85990f.2212b281765fe8ce.549fc359fa26df61.b7f55dfd8ea53a73
@@ -11901,11 +11901,11 @@
   after
     b7b27cf5042147b7.1e8dcc6ead911e25.5492e47c97e6e93c.9d628d57cf431d3f
     d48399556c85990f.2212b281765fe8ce.549fc359fa26df61.b7f55dfd8ea53a73
-    0000000000000000.0000000000000000.549fc359fa26df61.ffffffffffffffff
+    0000000000000000.0000000000000000.549fc359fa26df61.0000000000000000
     c71097e3b71287b7.4d3ef5163c854ac9.83334c405016bb24.c50bbb5597e32944
     712640df1ad57237
 
-VCMPSD_128_0x16(reg)
+VCMPSD_128_0x6(reg)
   before
     5c5ca5e26a6597c3.556471ead1519b60.2d7d4b6e72f55973.6a52ee227cdf191a
     e0f9e5c9261fd391.167cd6aa604768d2.b93dbeb60508a2cb.560f1e88cc991202
@@ -11918,7 +11918,7 @@
     5a49fd02e78e6350.e62444117d00a939.4cca4a59904b617c.2335585e5f4e6208
     2697e7f84c3e83aa.a128360946861bc0.446fecc3af49d133.ad9219904e0cc459
     cff0db0ab7dff521
-VCMPSD_128_0x16(mem)
+VCMPSD_128_0x6(mem)
   before
     671c1cb9b6d1b18b.a031a117eebb6e4b.23532880d6e77a93.fb7a9e60ff8e2f9b
     50e2578766f0b4c4.236126cc6b9261e1.487397614a2f82df.ce355e9c1ca7b761
@@ -11932,7 +11932,7 @@
     846bac344be37d52.b9b681a3657c4f96.eabdd8114ca07b91.39eff5a22a8234b5
     8984c543545da19c
 
-VCMPSD_128_0x16(reg)
+VCMPSD_128_0x6(reg)
   before
     64fb9134ba3b2890.88c7beebb7cfbcff.8373509f1aa6c10e.2080a4b813e3e54f
     279f57dff9a8043e.4decba714518312a.c7f7d9df195b2c29.6967db792d3be836
@@ -11945,7 +11945,7 @@
     2ebb12b2ac317251.aea71cb411c89900.e18d1ad1fe24c994.a03efa40b6b63f71
     d69dbf187061ae77.89c4619f36eeb0ac.2c830fe0668fd7fb.a3d07efacb60a72d
     4cebe2918743dc95
-VCMPSD_128_0x16(mem)
+VCMPSD_128_0x6(mem)
   before
     7959a3f3066e99d6.798f587de0c4f459.b90f031ed093325c.0623b278ec279009
     05e73b0b65ea9b1b.74dedb4d98e77fa5.1953801dfcc5da39.caba01052d79316b
@@ -11959,7 +11959,7 @@
     a893e50c320a5e64.e2c28cde539a572b.ddfaf84c78fd8f30.7ffc90ae4e781ada
     2840c8a2673dda3f
 
-VCMPSD_128_0x16(reg)
+VCMPSD_128_0x6(reg)
   before
     2caa9c3caaec72a7.7948eeced8c596bf.0df0b3778d431cbc.f9f4ec53011c13a2
     e58806e6b3111ebf.184ebff6cd0303cf.00aab22c80db1666.b518aa8b8af7aef2
@@ -11972,7 +11972,7 @@
     b124040d1e361932.636fd5702dcf61c0.173d8767c7ee82d6.ee32adde329b1c4d
     eacb921e89e9a0ad.3478aa2815366bbd.aef52d96fe099bb8.810e743a121219de
     4877788a486b60d2
-VCMPSD_128_0x16(mem)
+VCMPSD_128_0x6(mem)
   before
     203b37b9f0afae54.eec9aa848db5efdc.6835bc0ba043def2.211ea124c2b79fb8
     e6242bb525ecbf91.17694aabc827416a.dc728603eb02768d.cc04dd7cae85c880
@@ -11986,7 +11986,7 @@
     a798a8c2a87f18eb.4cc30eec522ae156.ef9b33e62fc7049f.3a36a23f70ae7b1f
     b51a22817e217d4d
 
-VCMPSD_128_0x1E(reg)
+VCMPSD_128_0x7(reg)
   before
     d7eb5b3e24e495f4.5bbb27aa2dedd960.0f142cded9d4a70b.471f0ea961e5726f
     fef54ae3ff82ffc1.6c33cd0eb0834d3f.6838c041065360cf.4e549132c1e6f554
@@ -11999,7 +11999,7 @@
     8584eadaaa88f660.b6ce15db4d4d2fb5.b47bc88175334950.e004396d6ed54979
     c7e43790c281b87c.15567bfb1f583cee.4d293f0ac3019e37.d9fc804681be290b
     1607e4a918ae5235
-VCMPSD_128_0x1E(mem)
+VCMPSD_128_0x7(mem)
   before
     71f3e0824fb07f24.22602d72e2f97ec2.65987b5c42b03015.908d21498b489b33
     c78af0bd41d06e04.f145c9eaa77d87dd.826092e8d35fc757.d9f56aa86a957bee
@@ -12009,11 +12009,11 @@
   after
     71f3e0824fb07f24.22602d72e2f97ec2.65987b5c42b03015.908d21498b489b33
     c78af0bd41d06e04.f145c9eaa77d87dd.826092e8d35fc757.d9f56aa86a957bee
-    0000000000000000.0000000000000000.826092e8d35fc757.0000000000000000
+    0000000000000000.0000000000000000.826092e8d35fc757.ffffffffffffffff
     d3ed3d0ac89b7d44.5a7bdf518dd64d44.93b2f136adf7ccda.edfc237bdb6dd653
     70348ac6a612ca54
 
-VCMPSD_128_0x1E(reg)
+VCMPSD_128_0x7(reg)
   before
     699f48e2f6ec91c6.425072f3945f15fe.ac625217e7c383e8.3fd333cf2ef8b274
     34885a3b69876753.1c8eabef8c705e58.e3e35b2456ecea12.28ab7a448d812cd8
@@ -12021,12 +12021,12 @@
     b008665427313470.81cf1acd6eaff39d.6cdf1bc3e0203ea6.21ab0c73535cc7b0
     e96c4e04f2c6607c
   after
-    0000000000000000.0000000000000000.e3e35b2456ecea12.0000000000000000
+    0000000000000000.0000000000000000.e3e35b2456ecea12.ffffffffffffffff
     34885a3b69876753.1c8eabef8c705e58.e3e35b2456ecea12.28ab7a448d812cd8
     2d3dba3d9b6f8aa7.3d7564e9ccdc147e.5949f4e475dcc06d.2a044481e59ef433
     b008665427313470.81cf1acd6eaff39d.6cdf1bc3e0203ea6.21ab0c73535cc7b0
     e96c4e04f2c6607c
-VCMPSD_128_0x1E(mem)
+VCMPSD_128_0x7(mem)
   before
     5d138621dfe87dc3.193659ecaa58a257.c46a478691f3b6e1.76f2cb2d3443a369
     5b6b31b735cfd7b0.c4139072bf71100b.e11069024fb61a76.d5ce008f0cd12961
@@ -12036,11 +12036,11 @@
   after
     5d138621dfe87dc3.193659ecaa58a257.c46a478691f3b6e1.76f2cb2d3443a369
     5b6b31b735cfd7b0.c4139072bf71100b.e11069024fb61a76.d5ce008f0cd12961
-    0000000000000000.0000000000000000.e11069024fb61a76.0000000000000000
+    0000000000000000.0000000000000000.e11069024fb61a76.ffffffffffffffff
     6162ccfa8d193a2e.500ab6f411a6da84.1eb07af10de7b540.fd11ebe7ba608ba2
     7f1097b5c878df43
 
-VCMPSD_128_0x1E(reg)
+VCMPSD_128_0x7(reg)
   before
     c607ba2bca2c44c9.2298b580c895b917.e8bb9ec885daafa2.f441603b456d63ce
     2c434db45d07f7e1.dcb0012edc056756.334cb93afc30743c.160f2bf789a2a25d
@@ -12048,12 +12048,12 @@
     c8bab7afa4633676.aab5aeb200f23e89.4e3979a56170bc92.aa8e5d76a346c22c
     d5d7bd11b1cd1bc5
   after
-    0000000000000000.0000000000000000.334cb93afc30743c.0000000000000000
+    0000000000000000.0000000000000000.334cb93afc30743c.ffffffffffffffff
     2c434db45d07f7e1.dcb0012edc056756.334cb93afc30743c.160f2bf789a2a25d
     0e104dbc1c953337.6a762bf0e576ff18.8c0704b5113364fd.5fe45612f4912e18
     c8bab7afa4633676.aab5aeb200f23e89.4e3979a56170bc92.aa8e5d76a346c22c
     d5d7bd11b1cd1bc5
-VCMPSD_128_0x1E(mem)
+VCMPSD_128_0x7(mem)
   before
     ba8bf1ce3a33f50e.b68d86f990fc3a4b.763b08604887e0d4.d72e16768872b8a7
     377874995b830c33.34d5b6067ded7b61.acd2b5e7da41a126.8232d69420c593e7
@@ -12067,7 +12067,7 @@
     64295d09d412dfc4.51f32a1ac703a803.c266f42c4a516f8e.ad96b068198fd99a
     e58ec2f5b21ebc65
 
-VPSHUFB_128(reg)
+VCMPSD_128_0x8(reg)
   before
     b0c5e7802c2f6e0b.ce86b98663691488.a76166f85d420be6.5afb7fc260bff4fb
     68871b73264d2c39.3e4a56c1fadb75d8.fd74f34a63089cbb.cbd24ce130828720
@@ -12075,12 +12075,12 @@
     13dca14603e1bbdc.a4394022ae3daece.18b9f1f6325936e9.a9759d676c35cb3c
     cdd919a6103df28c
   after
-    0000000000000000.0000000000000000.00bb0008d20000f3.000000e1000000d2
+    0000000000000000.0000000000000000.fd74f34a63089cbb.0000000000000000
     68871b73264d2c39.3e4a56c1fadb75d8.fd74f34a63089cbb.cbd24ce130828720
     6b205b3c3904329b.9142afa6b573bfe1.ae78ce7a76e1962d.f2b6d774d5a5e526
     13dca14603e1bbdc.a4394022ae3daece.18b9f1f6325936e9.a9759d676c35cb3c
     cdd919a6103df28c
-VPSHUFB_128(mem)
+VCMPSD_128_0x8(mem)
   before
     3aafc71dddc91943.bd06ebfd206f04a9.51fd861f0445fecc.96825a2932fdb89a
     ccc323b8f1e5fa8c.c6eb34cd2b3a49ae.7559fb8bd1986a06.8421047f125857ee
@@ -12090,11 +12090,11 @@
   after
     3aafc71dddc91943.bd06ebfd206f04a9.51fd861f0445fecc.96825a2932fdb89a
     ccc323b8f1e5fa8c.c6eb34cd2b3a49ae.7559fb8bd1986a06.8421047f125857ee
-    0000000000000000.0000000000000000.570000757f040000.0000986a58000000
+    0000000000000000.0000000000000000.7559fb8bd1986a06.0000000000000000
     d0d4d60a57ffdc86.6017b4687cb9b60d.9207675c414d89e1.200c0b44e465e029
     85f1618b0e2e4069
 
-VPSHUFB_128(reg)
+VCMPSD_128_0x8(reg)
   before
     cbdbe8a688deaffa.f96a259ae215568f.aaf4e30bfb8456c0.43f2569a1cc7b4d9
     4d159cffee026789.b76d12fd23eb7adb.c3bd0178d8bde25b.dca564f6debbebbe
@@ -12102,12 +12102,12 @@
     74ad7c1ff1d4a450.62edb7f13608b2ea.cd3ffa5c1da6acf8.3192d2b88a436ffd
     a66529f7abee35b0
   after
-    0000000000000000.0000000000000000.6400bde200000000.dc00c37800a50000
+    0000000000000000.0000000000000000.c3bd0178d8bde25b.0000000000000000
     4d159cffee026789.b76d12fd23eb7adb.c3bd0178d8bde25b.dca564f6debbebbe
     66ed7904de25a5c2.e6aa1a21368d0595.05bd0a19afef958a.37ec0f5ca536ebbb
     74ad7c1ff1d4a450.62edb7f13608b2ea.cd3ffa5c1da6acf8.3192d2b88a436ffd
     a66529f7abee35b0
-VPSHUFB_128(mem)
+VCMPSD_128_0x8(mem)
   before
     722f90032444f7ff.d2a29fbec59aa1e0.070267583f673e05.7790ceabbd6f6351
     70bd84c910507217.db18e04cf603d81e.b1b5a5446eb66513.5ffc80742cd5f643
@@ -12117,11 +12117,11 @@
   after
     722f90032444f7ff.d2a29fbec59aa1e0.070267583f673e05.7790ceabbd6f6351
     70bd84c910507217.db18e04cf603d81e.b1b5a5446eb66513.5ffc80742cd5f643
-    0000000000000000.0000000000000000.5fd55f13b15fb580.5f00000000b12cf6
+    0000000000000000.0000000000000000.b1b5a5446eb66513.0000000000000000
     77550035b2ba8150.62b7aae5dcf0e452.8424bc58ac5673b7.59557421e5a99e9c
     23daacdd67302c5c
 
-VPSHUFB_128(reg)
+VCMPSD_128_0x8(reg)
   before
     9ba9b4c228838663.37f680b1a1318eca.98772ac8ca8b30a0.65788c58f3bed2a4
     1d10873cc330e75e.9a8c7d98738f44bc.e9e9b84a85f9a64c.ba9adb8dd047bc35
@@ -12129,12 +12129,12 @@
     afd17ea0f9c5b1e0.b8c2da54312d99ba.500eecdbcf81ff6c.3578e342b9e920ed
     12cb959afe1b126d
   after
-    0000000000000000.0000000000000000.00bae900000000bc.bc9a8d00e9000000
+    0000000000000000.0000000000000000.e9e9b84a85f9a64c.0000000000000000
     1d10873cc330e75e.9a8c7d98738f44bc.e9e9b84a85f9a64c.ba9adb8dd047bc35
     055921b8d5c28cf9.7ce171d544de5e52.b2574fd7a7c78101.615624e15efced94
     afd17ea0f9c5b1e0.b8c2da54312d99ba.500eecdbcf81ff6c.3578e342b9e920ed
     12cb959afe1b126d
-VPSHUFB_128(mem)
+VCMPSD_128_0x8(mem)
   before
     d31db5d7499d7f40.77c49b62cbc691be.2cfb33015585b11e.1d5a89c397b15a39
     5638bfe3b57b2291.b87d7368e850693f.b358f9c8cdf462aa.778724f99be5ce13
@@ -12144,11 +12144,11 @@
   after
     d31db5d7499d7f40.77c49b62cbc691be.2cfb33015585b11e.1d5a89c397b15a39
     5638bfe3b57b2291.b87d7368e850693f.b358f9c8cdf462aa.778724f99be5ce13
-    0000000000000000.0000000000000000.c8009bce24000058.f9f400000000f462
+    0000000000000000.0000000000000000.b358f9c8cdf462aa.0000000000000000
     0efc811d617dfd60.1a7544f57231f0dd.69adb85527447ded.3db34104c987f5a0
     624abbb02b0d1fab
 
-VCVTTSD2SI_32(reg)
+VCMPSD_128_0xA(reg)
   before
     83f2235b39c75274.fc3d3222dab8ad35.f24b3552169f1851.513eaaf2413e60fb
     fdf773718f40cca6.1a77bda7e4808339.b318d2a575c72719.bb22f85a1f7ecbe2
@@ -12156,12 +12156,12 @@
     6748c08e869f80f7.5a0a51e21ce5947c.64c7fddbd272ec54.8916993794012cea
     a5bee485645c9a63
   after
-    83f2235b39c75274.fc3d3222dab8ad35.f24b3552169f1851.513eaaf2413e60fb
+    0000000000000000.0000000000000000.b318d2a575c72719.ffffffffffffffff
     fdf773718f40cca6.1a77bda7e4808339.b318d2a575c72719.bb22f85a1f7ecbe2
     2aa5a95eca04c7ee.46789e999be03c97.bb2816592b3359e1.85261f78dc107bce
     6748c08e869f80f7.5a0a51e21ce5947c.64c7fddbd272ec54.8916993794012cea
-    0000000000000000
-VCVTTSD2SI_32(mem)
+    a5bee485645c9a63
+VCMPSD_128_0xA(mem)
   before
     b3e97b4d682e8064.102bb56d5e9e326e.34fa536f82994613.0c418395090d1a1f
     9065db7bbb819b1a.819c8368ee8c1aff.ae141e2dea0a0f89.0ee1a5f4699220ed
@@ -12171,11 +12171,11 @@
   after
     b3e97b4d682e8064.102bb56d5e9e326e.34fa536f82994613.0c418395090d1a1f
     9065db7bbb819b1a.819c8368ee8c1aff.ae141e2dea0a0f89.0ee1a5f4699220ed
-    19fc7efb7964a7b0.16e525e9d3f57455.a52430066f44ab0a.c5f45e65918c396b
+    0000000000000000.0000000000000000.ae141e2dea0a0f89.0000000000000000
     287be2babfe05f53.2b539a5ea9667c1d.f6f604e82e52d6c1.8fc6aa521a88a344
-    0000000000000000
+    c6a38529a3119825
 
-VCVTTSD2SI_32(reg)
+VCMPSD_128_0xA(reg)
   before
     c7d7eb55c5b354ba.9aae82a2a903802f.1c32db310b6a6d02.7b5517be42404bdb
     efaed9411efb15ae.4c61daa052d8c66f.45cde5d0958e84b1.110fe374c71ac784
@@ -12183,12 +12183,12 @@
     20743a0ee4aa9166.db76a38f52c9b0cd.ae6b461f9363141c.e1bf9b3097c4c330
     d24e7e0e19acbb8c
   after
-    c7d7eb55c5b354ba.9aae82a2a903802f.1c32db310b6a6d02.7b5517be42404bdb
+    0000000000000000.0000000000000000.45cde5d0958e84b1.0000000000000000
     efaed9411efb15ae.4c61daa052d8c66f.45cde5d0958e84b1.110fe374c71ac784
     98734a5b4a7415ae.186067a1d66ced40.0272b5a6e45cfdd6.95eee6f6dbed06e7
     20743a0ee4aa9166.db76a38f52c9b0cd.ae6b461f9363141c.e1bf9b3097c4c330
-    0000000000000000
-VCVTTSD2SI_32(mem)
+    d24e7e0e19acbb8c
+VCMPSD_128_0xA(mem)
   before
     44670c7c7db0aa27.e1fba5c6882ac481.71700c58e1fecc43.a70694a73f2c0430
     13d5c066dedc4c2d.385587efd37fecab.b61b1de7a014fdce.488d9caa83450abd
@@ -12198,11 +12198,11 @@
   after
     44670c7c7db0aa27.e1fba5c6882ac481.71700c58e1fecc43.a70694a73f2c0430
     13d5c066dedc4c2d.385587efd37fecab.b61b1de7a014fdce.488d9caa83450abd
-    1b6615b9583d5cc9.81ceddf661354391.87415228aa19ff99.ed4d5894fc396270
+    0000000000000000.0000000000000000.b61b1de7a014fdce.0000000000000000
     38e48a5f08de9727.18b1a245cdd906df.beaf28071c188dd1.f191c6d2459547f5
-    0000000000000000
+    b2a7e1cefbe4f6f7
 
-VCVTTSD2SI_32(reg)
+VCMPSD_128_0xA(reg)
   before
     8bdaa5f5b9b2ab23.471c984609cbb975.5a4cd24ab3f67041.38301a70111e64a1
     d7750fb41c8ba124.22dabc5978107edc.a1e96a6fb018be62.d192a44fa5363f36
@@ -12210,12 +12210,12 @@
     3c16c1a73e904457.ae1838b20ed5dfac.b15dbece5d9df693.d02570201dcdf55e
     eeeeabe938644749
   after
-    8bdaa5f5b9b2ab23.471c984609cbb975.5a4cd24ab3f67041.38301a70111e64a1
+    0000000000000000.0000000000000000.a1e96a6fb018be62.ffffffffffffffff
     d7750fb41c8ba124.22dabc5978107edc.a1e96a6fb018be62.d192a44fa5363f36
     f4c51a76bffc16a7.a5ea738371baa18b.4ad664225fcc2cee.659f4290f56cdcbc
     3c16c1a73e904457.ae1838b20ed5dfac.b15dbece5d9df693.d02570201dcdf55e
-    0000000080000000
-VCVTTSD2SI_32(mem)
+    eeeeabe938644749
+VCMPSD_128_0xA(mem)
   before
     9ac76ed9633d8da8.0db403b236d467e1.182f87d16e6bf36b.32cb73de451857fa
     b27b35dab96584a8.c1ebd9054353bdf1.bffdddccaa8a9bf5.296b7fc0b4c78cd2
@@ -12225,11 +12225,11 @@
   after
     9ac76ed9633d8da8.0db403b236d467e1.182f87d16e6bf36b.32cb73de451857fa
     b27b35dab96584a8.c1ebd9054353bdf1.bffdddccaa8a9bf5.296b7fc0b4c78cd2
-    11d87cda56e7e875.b606410c00998032.7f4cb590e13e9176.f28bdfdf4538d1c5
+    0000000000000000.0000000000000000.bffdddccaa8a9bf5.ffffffffffffffff
     93a8bfc457cf753a.465335310933ed51.34e98a072c91921a.e9768ea795f7617f
-    0000000000000000
+    6a7787853f8f7aad
 
-VCVTTSD2SI_64(reg)
+VCMPSD_128_0xC(reg)
   before
     d1dbc9e3e08c56fb.14b97b84d72ae624.cf1cb3e1fbac3ffa.baa0da1ea991590b
     7aee4d2e137a3115.6fd52b06f303f85e.abaeb7887190b4d8.ec3d21c2744aa478
@@ -12237,12 +12237,12 @@
     01500f3ca05bd85a.286158006d60ef74.d05d3d6c5bcbf2e5.c958805d6213b071
     2a6e912dbd3deb55
   after
-    d1dbc9e3e08c56fb.14b97b84d72ae624.cf1cb3e1fbac3ffa.baa0da1ea991590b
+    0000000000000000.0000000000000000.abaeb7887190b4d8.ffffffffffffffff
     7aee4d2e137a3115.6fd52b06f303f85e.abaeb7887190b4d8.ec3d21c2744aa478
     c0fc11d374e649a6.82c94b36c6666715.37553b93086c8697.a88bd9dda8c62c8b
     01500f3ca05bd85a.286158006d60ef74.d05d3d6c5bcbf2e5.c958805d6213b071
-    8000000000000000
-VCVTTSD2SI_64(mem)
+    2a6e912dbd3deb55
+VCMPSD_128_0xC(mem)
   before
     a99a8838d54e9864.983845d733661bde.3c68cc5003fc4ba9.d011b8810739336b
     21a8e26cc75574ca.e1feaf0fc8924dde.9cac2513a54638dd.94bfa83da74386d8
@@ -12252,11 +12252,11 @@
   after
     a99a8838d54e9864.983845d733661bde.3c68cc5003fc4ba9.d011b8810739336b
     21a8e26cc75574ca.e1feaf0fc8924dde.9cac2513a54638dd.94bfa83da74386d8
-    6d6419b4ae5b3ab2.37f04750fb6bab05.23f7de336e4b723f.79b1090bd87427d6
+    0000000000000000.0000000000000000.9cac2513a54638dd.ffffffffffffffff
     6b99abfca76ea748.f8580b06697d7100.ac17739e7b16b4f8.d934d85935585212
-    8000000000000000
+    11940f925b7c4237
 
-VCVTTSD2SI_64(reg)
+VCMPSD_128_0xC(reg)
   before
     7d1dac23e56b34f2.f5151331ce9977ba.7f83f69dad55db7b.15d6613ee7b3bb37
     791aab766fb164ee.e9a2cd3d3de86632.27bc0481647f2521.38012201cf2f4326
@@ -12264,12 +12264,12 @@
     91a4bb15f6746d5c.7b22298e692490e5.4e8c79e199f546a0.20ca129d80f2c5c6
     9c00394e825137cf
   after
-    7d1dac23e56b34f2.f5151331ce9977ba.7f83f69dad55db7b.15d6613ee7b3bb37
+    0000000000000000.0000000000000000.27bc0481647f2521.ffffffffffffffff
     791aab766fb164ee.e9a2cd3d3de86632.27bc0481647f2521.38012201cf2f4326
     61d906f896db0dd8.210d560d136830dc.4e51311e2a858a9f.f36334d24e9508f2
     91a4bb15f6746d5c.7b22298e692490e5.4e8c79e199f546a0.20ca129d80f2c5c6
-    0000000000000000
-VCVTTSD2SI_64(mem)
+    9c00394e825137cf
+VCMPSD_128_0xC(mem)
   before
     44d323d170be1a38.65c9c53a2a09bd25.d1adc2aa5e294379.85bbd934505a97d1
     f20d4e126545292e.399220d1ce243ce0.007a9d4f0b8104c3.4d284c85e841b7dd
@@ -12279,11 +12279,11 @@
   after
     44d323d170be1a38.65c9c53a2a09bd25.d1adc2aa5e294379.85bbd934505a97d1
     f20d4e126545292e.399220d1ce243ce0.007a9d4f0b8104c3.4d284c85e841b7dd
-    837b35fe7df321dd.694bc8487f542538.e55436688f3b90f0.0420ce3eff35e371
+    0000000000000000.0000000000000000.007a9d4f0b8104c3.ffffffffffffffff
     d4e9547fd5d3be70.5142b90ad922b3da.5a090ae10360a42b.04ee5ccd31c25739
-    0000000000000000
+    abe0f09d19754fe0
 
-VCVTTSD2SI_64(reg)
+VCMPSD_128_0xC(reg)
   before
     5341881a54d90613.bf22278288f2bc14.4dc2f083761c2271.3c6393a685fef9a1
     595c1fb07d7ab97d.21f42bf4b35bd6f5.b916681ff5cdb0ab.672f50a331204e7e
@@ -12291,12 +12291,12 @@
     f0f33bd70aa501a9.ba8eb3d2df3b511b.506e0c70038514b2.094d4ef57422e31b
     3736892244199b33
   after
-    5341881a54d90613.bf22278288f2bc14.4dc2f083761c2271.3c6393a685fef9a1
+    0000000000000000.0000000000000000.b916681ff5cdb0ab.ffffffffffffffff
     595c1fb07d7ab97d.21f42bf4b35bd6f5.b916681ff5cdb0ab.672f50a331204e7e
     1a7eb2cb30e5a3cc.d629dbc0711ac93e.f08b1d4af0c29731.b839bac422d35ded
     f0f33bd70aa501a9.ba8eb3d2df3b511b.506e0c70038514b2.094d4ef57422e31b
-    8000000000000000
-VCVTTSD2SI_64(mem)
+    3736892244199b33
+VCMPSD_128_0xC(mem)
   before
     1ec2e638aec44362.3807b840a74610c2.aaef2f1518cb2ab9.34082ffdcaa563d8
     9abbe121cd3095d4.4e062472a25509c3.8018cc7739d50f44.f8a8845de3abbf4f
@@ -12306,11 +12306,11 @@
   after
     1ec2e638aec44362.3807b840a74610c2.aaef2f1518cb2ab9.34082ffdcaa563d8
     9abbe121cd3095d4.4e062472a25509c3.8018cc7739d50f44.f8a8845de3abbf4f
-    87eef6cbbd684eb4.8e3b7bda975d2b58.19d505e35d66bde8.f79906fde72565c4
+    0000000000000000.0000000000000000.8018cc7739d50f44.ffffffffffffffff
     c127a2219b79292f.55f4b9e223eab02c.51f15646a189efd0.8f26b147749e91e3
-    0000000000000000
+    1b9d82a926a37f57
 
-VCVTSI2SS_64(reg)
+VCMPSD_128_0xD(reg)
   before
     f648748e98bf6acd.2432600e826ee370.fd7bdbf8e189d5eb.043a3b8a204a6328
     7e748361677e8ff1.8cdbac808f5338a4.e31ddc876ec5d642.0e7a309cf6b6d31d
@@ -12318,12 +12318,12 @@
     017ee886891676f0.db36dea0891fa294.d9e26bc063455a68.96123bdb1abc998d
     cd024ae09f6f6760
   after
-    0000000000000000.0000000000000000.e31ddc876ec5d642.0e7a309cde4bf6d4
+    0000000000000000.0000000000000000.e31ddc876ec5d642.0000000000000000
     7e748361677e8ff1.8cdbac808f5338a4.e31ddc876ec5d642.0e7a309cf6b6d31d
     0d6dab902e6c2a6e.d5ed0262dd35e4f7.6326b8fb652aeedd.4b7eb26940d8fcdb
     017ee886891676f0.db36dea0891fa294.d9e26bc063455a68.96123bdb1abc998d
     cd024ae09f6f6760
-VCVTSI2SS_64(mem)
+VCMPSD_128_0xD(mem)
   before
     cb195863ebfc2280.b4f537af1508b025.7a80bd27ae1d2fa8.a19cf14203a1568e
     6c25e24f1b6f8618.841c92786dcc14b7.8d981ae1693c475e.17a247ede2cb1dfb
@@ -12333,11 +12333,11 @@
   after
     cb195863ebfc2280.b4f537af1508b025.7a80bd27ae1d2fa8.a19cf14203a1568e
     6c25e24f1b6f8618.841c92786dcc14b7.8d981ae1693c475e.17a247ede2cb1dfb
-    0000000000000000.0000000000000000.8d981ae1693c475e.17a247eddebcc61d
+    0000000000000000.0000000000000000.8d981ae1693c475e.ffffffffffffffff
     06475c1795393762.e6ae6295f40049a3.84623ea20f0a0763.7dbd506ecbb6ff5d
     246bfc1d0d8f92aa
 
-VCVTSI2SS_64(reg)
+VCMPSD_128_0xD(reg)
   before
     ea9466a4fd66e0ed.b8f643ca18a7fd6c.32b0cdc359869256.1fabfe8032d22709
     2a848c7138c627d5.7dc99698ed2c5c9f.0992363ffc10f516.9ef32b435aeac202
@@ -12345,12 +12345,12 @@
     87e8f989fe538a3f.af0a723003a8d32d.cc2aefd5665ef76f.bdabc2242c3b579b
     13b4221b0d8cca93
   after
-    0000000000000000.0000000000000000.0992363ffc10f516.9ef32b435d9da111
+    0000000000000000.0000000000000000.0992363ffc10f516.ffffffffffffffff
     2a848c7138c627d5.7dc99698ed2c5c9f.0992363ffc10f516.9ef32b435aeac202
     408669ee5a3ca00c.308cd26b33d30f26.c8a29877762aad90.df0443d6a45e9379
     87e8f989fe538a3f.af0a723003a8d32d.cc2aefd5665ef76f.bdabc2242c3b579b
     13b4221b0d8cca93
-VCVTSI2SS_64(mem)
+VCMPSD_128_0xD(mem)
   before
     bfebe1a6635ea88e.5df439adc0971f19.d511f2d47bb864e2.6f7837c7653a0f60
     9b1b79b24bbbacb8.1df723c63d949c47.7d6bce41b70e7d6f.0ed66db8124a310f
@@ -12360,11 +12360,11 @@
   after
     bfebe1a6635ea88e.5df439adc0971f19.d511f2d47bb864e2.6f7837c7653a0f60
     9b1b79b24bbbacb8.1df723c63d949c47.7d6bce41b70e7d6f.0ed66db8124a310f
-    0000000000000000.0000000000000000.7d6bce41b70e7d6f.0ed66db85edef070
+    0000000000000000.0000000000000000.7d6bce41b70e7d6f.0000000000000000
     579a2af83f4c1947.ca12ea87d6eb3d4e.c74b8b2be9bd3ac2.b0f59047df328155
     6b4d75be39242844
 
-VCVTSI2SS_64(reg)
+VCMPSD_128_0xD(reg)
   before
     92e737e3af79c9a1.ef80390b8397f905.70c1bf082b5dd97e.2169647e172e56e1
     810dd323ddbd9f18.2790134fc99ef0a1.6f982e2da9b84db3.6d0a894c7816ea88
@@ -12372,12 +12372,12 @@
     273086a5d443dc02.eb5e1516c9111325.ece9cf17965aacd6.4f09a80746786d21
     9cfe9acbea0ad36a
   after
-    0000000000000000.0000000000000000.6f982e2da9b84db3.6d0a894cdec602ca
+    0000000000000000.0000000000000000.6f982e2da9b84db3.ffffffffffffffff
     810dd323ddbd9f18.2790134fc99ef0a1.6f982e2da9b84db3.6d0a894c7816ea88
     940c44eb607ce754.dd9633af2c6dba47.25e13563ef88d597.88fc76802980b3e4
     273086a5d443dc02.eb5e1516c9111325.ece9cf17965aacd6.4f09a80746786d21
     9cfe9acbea0ad36a
-VCVTSI2SS_64(mem)
+VCMPSD_128_0xD(mem)
   before
     4ca7c8b93143a2eb.96c595bfd49dbccd.2eb43572bb95b665.22fcf8b33cb90f1d
     3cd0aebe382e96d1.3d176ea4fc16c162.826310ae1f066033.2166aca57d313a18
@@ -12387,11 +12387,11 @@
   after
     4ca7c8b93143a2eb.96c595bfd49dbccd.2eb43572bb95b665.22fcf8b33cb90f1d
     3cd0aebe382e96d1.3d176ea4fc16c162.826310ae1f066033.2166aca57d313a18
-    0000000000000000.0000000000000000.826310ae1f066033.2166aca55e0bf3e3
+    0000000000000000.0000000000000000.826310ae1f066033.0000000000000000
     47d193b9f44cdc7c.a3216a7e36972c99.ceffe476abdcb82c.ee6ea7383e9ed6d8
     73a4e5b1f6aac0f5
 
-VCVTSI2SD_64(reg)
+VCMPSD_128_0xE(reg)
   before
     32619e2fb8006277.1b428a87e196a698.1a71864d80b70a93.7d84d5da0b59deae
     88f1cf1e212bf707.9f62291cfec385c8.39ae5c966226fe06.ad9371ce4cf3fb6f
@@ -12399,12 +12399,12 @@
     64ba85005731ed07.22e2504836f37117.de1f22496021170a.017e9617e3ac095c
     dcf2184371e372e1
   after
-    0000000000000000.0000000000000000.39ae5c966226fe06.c3c186f3de470e47
+    0000000000000000.0000000000000000.39ae5c966226fe06.0000000000000000
     88f1cf1e212bf707.9f62291cfec385c8.39ae5c966226fe06.ad9371ce4cf3fb6f
     cfa072eacdb7bc53.adfeec6366dd353a.5b24e6c67970449f.3af8323f8bb5cb9a
     64ba85005731ed07.22e2504836f37117.de1f22496021170a.017e9617e3ac095c
     dcf2184371e372e1
-VCVTSI2SD_64(mem)
+VCMPSD_128_0xE(mem)
   before
     a82035b05166c254.a38b04ca5b24c6cf.dad9cfb7890ef68e.1deb0b8cb4c6b5f2
     41d467499e42b5e2.e85ee9b6761c8256.b1b1e79c7c3c7fc9.73d39ef910eb5703
@@ -12414,11 +12414,11 @@
   after
     a82035b05166c254.a38b04ca5b24c6cf.dad9cfb7890ef68e.1deb0b8cb4c6b5f2
     41d467499e42b5e2.e85ee9b6761c8256.b1b1e79c7c3c7fc9.73d39ef910eb5703
-    0000000000000000.0000000000000000.b1b1e79c7c3c7fc9.43bdeb0b8cb4c6b6
+    0000000000000000.0000000000000000.b1b1e79c7c3c7fc9.ffffffffffffffff
     4afeffaef03272fd.f53dd9a05f4d9552.2c30d079afff913d.d92bae0552e19e54
     9f32247c6fcbbaea
 
-VCVTSI2SD_64(reg)
+VCMPSD_128_0xE(reg)
   before
     ee8533ce0565cc5a.710b5c532d5fb4e3.74e1dc77659d6520.886f994828ac91cd
     2072d767b03a0f50.d6cfc0d548148a93.69b8371ff223085e.73bee93eb19b85d3
@@ -12426,12 +12426,12 @@
     a146d01eb2c61b7c.c7a7891b8647dd03.252ee1920fffb9d7.65bb144b60713ceb
     2501e53bbf6f7756
   after
-    0000000000000000.0000000000000000.69b8371ff223085e.43c280f29ddfb7bc
+    0000000000000000.0000000000000000.69b8371ff223085e.ffffffffffffffff
     2072d767b03a0f50.d6cfc0d548148a93.69b8371ff223085e.73bee93eb19b85d3
     93440db30ad6c177.5414a51e5c5dae3a.300ee404a16abab7.c8e83e4565d92a79
     a146d01eb2c61b7c.c7a7891b8647dd03.252ee1920fffb9d7.65bb144b60713ceb
     2501e53bbf6f7756
-VCVTSI2SD_64(mem)
+VCMPSD_128_0xE(mem)
   before
     e4882f019ee096e6.a7c51c1542955c0b.0b54e7b8e1ddd21b.a3652935d76c3f6b
     7e1a6d8917cf56c6.020ded0256cfbecf.fce73ce2892b4aad.0800b85a9640891f
@@ -12441,11 +12441,11 @@
   after
     e4882f019ee096e6.a7c51c1542955c0b.0b54e7b8e1ddd21b.a3652935d76c3f6b
     7e1a6d8917cf56c6.020ded0256cfbecf.fce73ce2892b4aad.0800b85a9640891f
-    0000000000000000.0000000000000000.fce73ce2892b4aad.c3d726b5b28a24f0
+    0000000000000000.0000000000000000.fce73ce2892b4aad.ffffffffffffffff
     b292b58f4d58a929.22280f727cb6d8a8.54eeb7893321b3f2.f48c9cd666465895
     3317e905b09155b0
 
-VCVTSI2SD_64(reg)
+VCMPSD_128_0xE(reg)
   before
     c8356d666172069a.050fb8e5420ab303.a19358cdc67a0714.74fad6df6ce01cfd
     0e3124641473a700.a2c99fae416a4ede.e3f616ce04da4967.b01cdb716288f731
@@ -12453,12 +12453,12 @@
     22f61ce6f10ba7ee.2e200945d3662645.23d8e277ce9bf06c.f0d288f9f8c0f5cb
     acfd28c7cf699088
   after
-    0000000000000000.0000000000000000.e3f616ce04da4967.c3d4c0b5ce0c259c
+    0000000000000000.0000000000000000.e3f616ce04da4967.ffffffffffffffff
     0e3124641473a700.a2c99fae416a4ede.e3f616ce04da4967.b01cdb716288f731
     63580a6a6523738d.678ae6d4698536e5.459e45e3d361d84b.e620422a322401bd
     22f61ce6f10ba7ee.2e200945d3662645.23d8e277ce9bf06c.f0d288f9f8c0f5cb
     acfd28c7cf699088
-VCVTSI2SD_64(mem)
+VCMPSD_128_0xE(mem)
   before
     f46f9e81d32a8e1f.a657554353b97fcf.d55584eb9d1adb29.d9eee8f69215cf78
     a6f266132110abbd.4dc7b1ee28b836db.36f6d4b4e3ab11be.c42c53ccba5aaf18
@@ -12468,11 +12468,11 @@
   after
     f46f9e81d32a8e1f.a657554353b97fcf.d55584eb9d1adb29.d9eee8f69215cf78
     a6f266132110abbd.4dc7b1ee28b836db.36f6d4b4e3ab11be.c42c53ccba5aaf18
-    0000000000000000.0000000000000000.36f6d4b4e3ab11be.c3c3088b84b6f518
+    0000000000000000.0000000000000000.36f6d4b4e3ab11be.ffffffffffffffff
     b45edd70097731bd.7003c3d999db3426.9aabe05c519aefaa.a455482ea77664cb
     52d6cb91a565b134
 
-VCVTSI2SD_32(reg)
+VCMPSD_128_0x10(reg)
   before
     a4b0a3fc774ff0e4.c8df8413db121276.a56770f36d16f3bd.55579413b00f0f59
     f62fccd9b9c15d84.b5a26d3d670101e6.6b0a310924d3812f.3aa00d9cfc92a069
@@ -12480,12 +12480,12 @@
     0a4c029eff6baf4b.8b1df6db1b0bfc9b.1e3ddddea900fd57.f6343bd5c5f30359
     8418e85c7bea4e93
   after
-    0000000000000000.0000000000000000.6b0a310924d3812f.41defa93a4c00000
+    0000000000000000.0000000000000000.6b0a310924d3812f.0000000000000000
     f62fccd9b9c15d84.b5a26d3d670101e6.6b0a310924d3812f.3aa00d9cfc92a069
     a49f4296084633c3.587315dcc850bb39.1f380289599d1b29.2650c6e34f305d05
     0a4c029eff6baf4b.8b1df6db1b0bfc9b.1e3ddddea900fd57.f6343bd5c5f30359
     8418e85c7bea4e93
-VCVTSI2SD_32(mem)
+VCMPSD_128_0x10(mem)
   before
     adc749668c1efadd.8381065c3bbb0dc8.2b6d8e267b3f8037.c265c073af896264
     4d0fdbdd159dc263.6d8c4c3e58c288e7.152f58a904f70339.69fba5b608c387fd
@@ -12495,11 +12495,11 @@
   after
     adc749668c1efadd.8381065c3bbb0dc8.2b6d8e267b3f8037.c265c073af896264
     4d0fdbdd159dc263.6d8c4c3e58c288e7.152f58a904f70339.69fba5b608c387fd
-    0000000000000000.0000000000000000.152f58a904f70339.c1d41da767000000
+    0000000000000000.0000000000000000.152f58a904f70339.0000000000000000
     63957fc7fdaa99d6.014f8c1ca226c9bb.323973070425f422.2ba56bf3207b0181
     ff5042c51811cdc5
 
-VCVTSI2SD_32(reg)
+VCMPSD_128_0x10(reg)
   before
     469a0df5d3884944.906c89119450201a.63a07eef079b05c7.1e19bcbbb2b2da61
     5acec7edec6db1ab.a40bb4791370b34b.a4f6a095bef85024.c39a2756f9f4b0b6
@@ -12507,12 +12507,12 @@
     5c28f9e9a9ae33e0.f1d05953374fef22.38e06a0b8b97fe84.a8b253f5c4c41754
     a0e10dd1806a20f4
   after
-    0000000000000000.0000000000000000.a4f6a095bef85024.c1dfe577c3000000
+    0000000000000000.0000000000000000.a4f6a095bef85024.0000000000000000
     5acec7edec6db1ab.a40bb4791370b34b.a4f6a095bef85024.c39a2756f9f4b0b6
     983a6c1bff4b40a6.7b3e7aeb95160f94.229cf07a60c8e47f.fd8930c6f6f6304d
     5c28f9e9a9ae33e0.f1d05953374fef22.38e06a0b8b97fe84.a8b253f5c4c41754
     a0e10dd1806a20f4
-VCVTSI2SD_32(mem)
+VCMPSD_128_0x10(mem)
   before
     c1e2d84546f5085c.02e568c58523c605.e28fcc9d14271121.410c08b3dbf1d9de
     e781323d30718bb6.e6beb71a303535c2.2a4550b549a82fbc.9b6dc8ddeb63b23a
@@ -12522,11 +12522,11 @@
   after
     c1e2d84546f5085c.02e568c58523c605.e28fcc9d14271121.410c08b3dbf1d9de
     e781323d30718bb6.e6beb71a303535c2.2a4550b549a82fbc.9b6dc8ddeb63b23a
-    0000000000000000.0000000000000000.2a4550b549a82fbc.c1c2071311000000
+    0000000000000000.0000000000000000.2a4550b549a82fbc.0000000000000000
     b2c88169e66851f2.d8eee2de616195b4.2fc9770028da5178.aefe9b6cbcbd4ea7
     1fc6a6a8b6bd890f
 
-VCVTSI2SD_32(reg)
+VCMPSD_128_0x10(reg)
   before
     51f2c317e004b12a.0f086e75eafd0c2b.9edfb7261f93ff40.a32f130b0ba3cdf1
     9ed0ed25d61f03a2.e116d8b582b15208.121a5a971c933513.dfbdb094b54636b6
@@ -12534,12 +12534,12 @@
     fdcd58cf98fe135a.53cc1982e4ac6e58.74a2ffa5412af341.1c7fd9cfd14bbed7
     d54c5e5a7ac5558b
   after
-    0000000000000000.0000000000000000.121a5a971c933513.41deb15562c00000
+    0000000000000000.0000000000000000.121a5a971c933513.0000000000000000
     9ed0ed25d61f03a2.e116d8b582b15208.121a5a971c933513.dfbdb094b54636b6
     64aa203e3599ba23.03be3e15cc92dfb3.90edc99ef3eb72da.be3ec88643cf48f5
     fdcd58cf98fe135a.53cc1982e4ac6e58.74a2ffa5412af341.1c7fd9cfd14bbed7
     d54c5e5a7ac5558b
-VCVTSI2SD_32(mem)
+VCMPSD_128_0x10(mem)
   before
     c471d3145a49c93b.c68591429cdb4bf3.ac0be6e6e509bc24.1a86f919a1d9f4f3
     c7bab4e78ee4d613.1c1ec805ddbb9b99.e949222fecb78543.dee5b167af86b09d
@@ -12549,11 +12549,11 @@
   after
     c471d3145a49c93b.c68591429cdb4bf3.ac0be6e6e509bc24.1a86f919a1d9f4f3
     c7bab4e78ee4d613.1c1ec805ddbb9b99.e949222fecb78543.dee5b167af86b09d
-    0000000000000000.0000000000000000.e949222fecb78543.c1d78982c3400000
+    0000000000000000.0000000000000000.e949222fecb78543.0000000000000000
     75e8ab8b608da9ee.da221d2783b57abe.84edd41d79347628.2f43503d48084c88
     75da2e9e0af4a321
 
-VPOR_128(reg)
+VCMPSD_128_0x11(reg)
   before
     491cbc88ea0fa761.d964ba3536b2e848.fb25335f20e78095.98ec439a381b1747
     0655f46785e292f5.bf3424a8cf1eaf7b.193937966a4c8f2a.02190fab6c832368
@@ -12561,12 +12561,12 @@
     b0dc57b45ae50fc8.8500fd9ebdfac81b.b7c4f6b174e1bc3c.442cb339a6036a62
     d4aa838ee2331e93
   after
-    0000000000000000.0000000000000000.9fbb37beff7def2a.9e3fbfbf7ef777f8
+    0000000000000000.0000000000000000.193937966a4c8f2a.0000000000000000
     0655f46785e292f5.bf3424a8cf1eaf7b.193937966a4c8f2a.02190fab6c832368
     0ad1d4a776fba089.052466d249ddbbb3.8eaa2438fd71e528.9c3fb63c327755b8
     b0dc57b45ae50fc8.8500fd9ebdfac81b.b7c4f6b174e1bc3c.442cb339a6036a62
     d4aa838ee2331e93
-VPOR_128(mem)
+VCMPSD_128_0x11(mem)
   before
     2a86a02805142c76.53c27afacc2d195e.1d9464f8498192df.f0d3a96d6c295111
     208c88f128b15138.51ce37e6695efbf9.a7ab17cc097ed42d.952239d880d3df54
@@ -12576,11 +12576,11 @@
   after
     2a86a02805142c76.53c27afacc2d195e.1d9464f8498192df.f0d3a96d6c295111
     208c88f128b15138.51ce37e6695efbf9.a7ab17cc097ed42d.952239d880d3df54
-    0000000000000000.0000000000000000.bfbf77fc49ffd6ff.f5f3b9fdecfbdf55
+    0000000000000000.0000000000000000.a7ab17cc097ed42d.0000000000000000
     6046a6c4e450d008.ca8c745c92ac36e8.05965292920cb311.93b4e26c6d83d9d3
     a48ef26d7fa0bd67
 
-VPOR_128(reg)
+VCMPSD_128_0x11(reg)
   before
     91d9cfcd1c508a18.6192d4a6b56ba16e.fdd4ebbe56e10795.9001d15c94b5c700
     b6e076f7e31f7d93.7437bd68f6717962.fb74ee76b52f9ff6.7f208d5039034428
@@ -12588,12 +12588,12 @@
     18560e5e594cc596.3bbfad3c3e732da7.c3e88495b2471882.f4aaaa67dfc469d1
     33ac0362164e88aa
   after
-    0000000000000000.0000000000000000.fff7ffffff2fbff6.ffbf8f5bbf07e6bc
+    0000000000000000.0000000000000000.fb74ee76b52f9ff6.0000000000000000
     b6e076f7e31f7d93.7437bd68f6717962.fb74ee76b52f9ff6.7f208d5039034428
     6ff1e2596e9ad284.7302dcf6c5701411.1eb777ef4a223cb6.acbf025b9e05e6b4
     18560e5e594cc596.3bbfad3c3e732da7.c3e88495b2471882.f4aaaa67dfc469d1
     33ac0362164e88aa
-VPOR_128(mem)
+VCMPSD_128_0x11(mem)
   before
     4593883662ae006c.0c5df97241c29176.a83aac267c87814f.475510d4882a7005
     0729b5d1dcf18d43.a9509c01c18773cf.963f55a09bb6cc36.0448171868557fec
@@ -12603,11 +12603,11 @@
   after
     4593883662ae006c.0c5df97241c29176.a83aac267c87814f.475510d4882a7005
     0729b5d1dcf18d43.a9509c01c18773cf.963f55a09bb6cc36.0448171868557fec
-    0000000000000000.0000000000000000.be3ffda6ffb7cd7f.475d17dce87f7fed
+    0000000000000000.0000000000000000.963f55a09bb6cc36.ffffffffffffffff
     0695f709d04dd5de.4b2dff41fb2e689f.661697f5ef9b3670.9df3885fb9b9b695
     3043e93a600955af
 
-VPOR_128(reg)
+VCMPSD_128_0x11(reg)
   before
     6d49b5cb83d29bdd.fc02057e817f08fa.07aeb6c9ed29f36d.ff8027a85b68cd1a
     b052e87cbca0c5ca.1150ab69d2c23fdb.dc4d167de7a38464.89a4519a18814bb3
@@ -12615,12 +12615,12 @@
     b89e75f3e17db592.08bbb052c2b1ad9b.3d10c2156446a781.e04a65f0f7c9eb62
     6564462b510f85cf
   after
-    0000000000000000.0000000000000000.fd5d1fffe7abd676.e9eed3bb5bf36ff7
+    0000000000000000.0000000000000000.dc4d167de7a38464.0000000000000000
     b052e87cbca0c5ca.1150ab69d2c23fdb.dc4d167de7a38464.89a4519a18814bb3
     55ab7fbba7000f22.214965b7de2538ad.25541bc785295632.e04e92b943f36c67
     b89e75f3e17db592.08bbb052c2b1ad9b.3d10c2156446a781.e04a65f0f7c9eb62
     6564462b510f85cf
-VPOR_128(mem)
+VCMPSD_128_0x11(mem)
   before
     4b67b1566cd2f5da.3578c69005a3f2c6.a270062799745ad2.82cd06d22086b1fd
     6d21225d651df9b0.28856efeb0ff036a.cb35e5237f7afd7d.4ed7e36a5476b053
@@ -12630,11 +12630,11 @@
   after
     4b67b1566cd2f5da.3578c69005a3f2c6.a270062799745ad2.82cd06d22086b1fd
     6d21225d651df9b0.28856efeb0ff036a.cb35e5237f7afd7d.4ed7e36a5476b053
-    0000000000000000.0000000000000000.eb75e727ff7effff.cedfe7fa74f6b1ff
+    0000000000000000.0000000000000000.cb35e5237f7afd7d.0000000000000000
     dae508af5f7ca86c.e067b4fd098690af.391e2b3ceb7b10e2.ef0159db9593813c
     7cbaea8cdbd8ca27
 
-VPXOR_128(reg)
+VCMPSD_128_0x12(reg)
   before
     00ef04c809fdf89b.dc8874d398a8cbaa.5dd44a66efca85a9.37db8b32a890f9f3
     d8eda3fcbb8e4946.8b11d6821f8c7163.c0a42750cb733dc3.34d763fee416c628
@@ -12642,12 +12642,12 @@
     f57461f81d203fea.5f046e3584ae36f4.a89da758d826e805.9abf6bc84babffb2
     bc43939eaed0e35d
   after
-    0000000000000000.0000000000000000.a5876078f07dc96b.38084d72580df287
+    0000000000000000.0000000000000000.c0a42750cb733dc3.0000000000000000
     d8eda3fcbb8e4946.8b11d6821f8c7163.c0a42750cb733dc3.34d763fee416c628
     6100c4928e15f7d1.c24babaa0f3556c2.652347283b0ef4a8.0cdf2e8cbc1b34af
     f57461f81d203fea.5f046e3584ae36f4.a89da758d826e805.9abf6bc84babffb2
     bc43939eaed0e35d
-VPXOR_128(mem)
+VCMPSD_128_0x12(mem)
   before
     4d3724fb00989bdd.f1947898053b5c3d.3d069a119b03cd24.e45e424e40475386
     286698c95e0fe45e.b2ae04e0e1f08b76.371eae297041d67f.77b114740ffd72d6
@@ -12657,11 +12657,11 @@
   after
     4d3724fb00989bdd.f1947898053b5c3d.3d069a119b03cd24.e45e424e40475386
     286698c95e0fe45e.b2ae04e0e1f08b76.371eae297041d67f.77b114740ffd72d6
-    0000000000000000.0000000000000000.0a183438eb421b5b.93ef563a4fba2150
+    0000000000000000.0000000000000000.371eae297041d67f.0000000000000000
     30a91f6cac371811.eefb6c15e75e0f47.f3c077bdc1a63065.0f414d054f5aba95
     cb15ad47f9195c5c
 
-VPXOR_128(reg)
+VCMPSD_128_0x12(reg)
   before
     4eac346a799da2a3.15542819d4007b9c.22c740da482edb39.6de1251176e4f947
     f351deda6c72c715.b46b06e777a85fd7.8abc79f60fc9a9bf.7449a951583b2505
@@ -12669,12 +12669,12 @@
     12f98c521941a12c.940c2e9ba1c2990f.66500be338913a3e.97192346156396bf
     6d1a12d2284b5214
   after
-    0000000000000000.0000000000000000.089a6a23da721c37.978bd638dc8c55cd
+    0000000000000000.0000000000000000.8abc79f60fc9a9bf.0000000000000000
     f351deda6c72c715.b46b06e777a85fd7.8abc79f60fc9a9bf.7449a951583b2505
     1552a7046d25095e.ebb934c4b23a80ef.822613d5d5bbb588.e3c27f6984b770c8
     12f98c521941a12c.940c2e9ba1c2990f.66500be338913a3e.97192346156396bf
     6d1a12d2284b5214
-VPXOR_128(mem)
+VCMPSD_128_0x12(mem)
   before
     3f91c7fbd87b61f4.449488310b52ce29.8d2e70585f4d6764.92875b8dd4d6768d
     eb4abeab42007e8a.096d970ee0e4ca01.b0ed77e708e6a619.6218013d4416a223
@@ -12684,11 +12684,11 @@
   after
     3f91c7fbd87b61f4.449488310b52ce29.8d2e70585f4d6764.92875b8dd4d6768d
     eb4abeab42007e8a.096d970ee0e4ca01.b0ed77e708e6a619.6218013d4416a223
-    0000000000000000.0000000000000000.3dc307bf57abc17d.f09f5ab090c0d4ae
+    0000000000000000.0000000000000000.b0ed77e708e6a619.0000000000000000
     3cb16355b237d58a.b70cde6ea1be22f5.e86dc02c8e746556.5e733c6311b9c1ce
     42d5cab1a6342c3c
 
-VPXOR_128(reg)
+VCMPSD_128_0x12(reg)
   before
     3ac19db680d9779f.9af70926f001874c.5a690fcac51cf568.b4c7fcb9a1805e35
     a281b1de3a37e1a4.42afe12f584f3875.fe3643d33b2c8967.1becebc911cab825
@@ -12696,12 +12696,12 @@
     31b18c47c047fd44.dba5189913a885aa.bd4ba49c9090deb7.2bcbd61e724a7de6
     8b1cca3c9c986110
   after
-    0000000000000000.0000000000000000.ff8b35269a5691fa.e246e08fe9959674
+    0000000000000000.0000000000000000.fe3643d33b2c8967.0000000000000000
     a281b1de3a37e1a4.42afe12f584f3875.fe3643d33b2c8967.1becebc911cab825
     d663029571d7a4f7.0ea5675c052da330.01bd76f5a17a189d.f9aa0b46f85f2e51
     31b18c47c047fd44.dba5189913a885aa.bd4ba49c9090deb7.2bcbd61e724a7de6
     8b1cca3c9c986110
-VPXOR_128(mem)
+VCMPSD_128_0x12(mem)
   before
     f669638c915495fa.11b84c60c4122835.857b6ed39fcb990e.8f2cca34a6fc1861
     487e1bfa6e8ad7d1.d1c33d4d18c56079.e8f2e7f4c5a39d89.d3ace2297e4a0346
@@ -12711,11 +12711,11 @@
   after
     f669638c915495fa.11b84c60c4122835.857b6ed39fcb990e.8f2cca34a6fc1861
     487e1bfa6e8ad7d1.d1c33d4d18c56079.e8f2e7f4c5a39d89.d3ace2297e4a0346
-    0000000000000000.0000000000000000.6d8989275a680487.5c80281dd8b61b27
+    0000000000000000.0000000000000000.e8f2e7f4c5a39d89.ffffffffffffffff
     112fdde04d966ff4.6019a24f2210eaa5.49f6309f4c9f6073.22b8dddbe7b8d674
     e4ddb870aff23714
 
-VPSUBB_128(reg)
+VCMPSD_128_0x13(reg)
   before
     88d07511a93d389f.4064de3088833f99.e8fc0e3c10c0b4e5.ff1bf701e6dc973a
     6ade122c722514c2.c690f04f1b1a0bda.bf139cadbe887b27.de12d1fb89fdadc7
@@ -12723,12 +12723,12 @@
     587bd97ddffd5180.470033a6b67989e2.cf100bc8cb8ef360.87a5ab675c1c66e6
     09daa4b1c43280cf
   after
-    0000000000000000.0000000000000000.7c6855a0f695ff10.1c6b988237ef4f80
+    0000000000000000.0000000000000000.bf139cadbe887b27.0000000000000000
     6ade122c722514c2.c690f04f1b1a0bda.bf139cadbe887b27.de12d1fb89fdadc7
     e6538a2ca5360929.7f808d2721688fe4.43ab470dc8f37c17.c2a73979520e5e47
     587bd97ddffd5180.470033a6b67989e2.cf100bc8cb8ef360.87a5ab675c1c66e6
     09daa4b1c43280cf
-VPSUBB_128(mem)
+VCMPSD_128_0x13(mem)
   before
     24109e43a55c692f.1ca1fc8bbb052971.fadc5db6f757b301.be8de54a63e41bae
     b41417091ca6dd31.8e13eec2d6daccab.73e087450010ca6d.6d70cfff2b8131af
@@ -12738,11 +12738,11 @@
   after
     24109e43a55c692f.1ca1fc8bbb052971.fadc5db6f757b301.be8de54a63e41bae
     b41417091ca6dd31.8e13eec2d6daccab.73e087450010ca6d.6d70cfff2b8131af
-    0000000000000000.0000000000000000.79042a8f09b9176c.afe3eab5c89d1601
+    0000000000000000.0000000000000000.73e087450010ca6d.0000000000000000
     a2b674e239cd55ce.ec062f5c361d66a5.2c8ecc8dd741aeda.7c94c8b2bcc21774
     946dce88bd7d5e91
 
-VPSUBB_128(reg)
+VCMPSD_128_0x13(reg)
   before
     dbdbd6425fb08310.b9eb4fcd18c1d1c0.90207696b4a3d5bd.23d2df1eded1f333
     ae29da4a3de6c29c.b51f999bfd05c804.51b57daae126ffcd.506de3dd1c6c1589
@@ -12750,12 +12750,12 @@
     6999cbf91f8c7c8d.cbaf679546ae1536.9f7fb70cb5537784.c1daa995aff0dfdb
     bb4565673cf1ff2e
   after
-    0000000000000000.0000000000000000.c4a43fa889f4dd4c.bf4291276e504582
+    0000000000000000.0000000000000000.51b57daae126ffcd.0000000000000000
     ae29da4a3de6c29c.b51f999bfd05c804.51b57daae126ffcd.506de3dd1c6c1589
     6aa5d80ef4ab56e2.711ccd3a03a5f5c8.8d113e0258322281.912b52b6ae1cd007
     6999cbf91f8c7c8d.cbaf679546ae1536.9f7fb70cb5537784.c1daa995aff0dfdb
     bb4565673cf1ff2e
-VPSUBB_128(mem)
+VCMPSD_128_0x13(mem)
   before
     5d370116702dec2f.0853b0775b14704a.9da4e398e32be47a.e34de43395163d83
     817df99068af6108.a31d81f443cf6ec5.c5c7be2ff6281ec1.b4c5bfe29406ae29
@@ -12765,11 +12765,11 @@
   after
     5d370116702dec2f.0853b0775b14704a.9da4e398e32be47a.e34de43395163d83
     817df99068af6108.a31d81f443cf6ec5.c5c7be2ff6281ec1.b4c5bfe29406ae29
-    0000000000000000.0000000000000000.2823db9713fd3a47.d178dbaffff071a6
+    0000000000000000.0000000000000000.c5c7be2ff6281ec1.0000000000000000
     c335ef9111b6d6f3.3e14dc9b891076a3.83c67ec9ebd4c107.72e6748d5c9f841d
     152745615e5f60c2
 
-VPSUBB_128(reg)
+VCMPSD_128_0x13(reg)
   before
     b742b56dee7dd8be.993fe3f1fc534e5e.f5d85d9d1fadf95e.d23a5ba4069aa35e
     b285c11ea98428bf.61cd25cb19673e51.18debc4ed1ae7687.e50c87c40611df68
@@ -12777,12 +12777,12 @@
     27ae99200e7d3f7a.3ba37b9d5e207981.12db006efa0a4cd2.cbfab87f27405842
     55aeb7f380100d6c
   after
-    0000000000000000.0000000000000000.156ec93396104ebd.4c040bb1fecdad18
+    0000000000000000.0000000000000000.18debc4ed1ae7687.0000000000000000
     b285c11ea98428bf.61cd25cb19673e51.18debc4ed1ae7687.e50c87c40611df68
     643a63e12a008c6e.f9aa2e0b86fc63f9.0370f31b3b9e28ca.99087c1308443250
     27ae99200e7d3f7a.3ba37b9d5e207981.12db006efa0a4cd2.cbfab87f27405842
     55aeb7f380100d6c
-VPSUBB_128(mem)
+VCMPSD_128_0x13(mem)
   before
     14f0f35a2ec00cf7.592d5e49f0887e8d.0484896dbedf3b16.a16bdeb5a97c1d4c
     e58beaa24e5c1212.5403afc76dad8554.3119d367c24466e4.0c6c8a5ae583d9e3
@@ -12792,11 +12792,11 @@
   after
     14f0f35a2ec00cf7.592d5e49f0887e8d.0484896dbedf3b16.a16bdeb5a97c1d4c
     e58beaa24e5c1212.5403afc76dad8554.3119d367c24466e4.0c6c8a5ae583d9e3
-    0000000000000000.0000000000000000.2d954afa04652bce.6b01aca53c07bc97
+    0000000000000000.0000000000000000.3119d367c24466e4.0000000000000000
     28fff582518a22a3.19e3e171a571d9ac.228f0c8a2330e7d9.e5f138737379fd1b
     0c0c33befc81dd13
 
-VPSUBD_128(reg)
+VCMPSD_128_0x14(reg)
   before
     7fc8eb18824c97d9.537003f26d34a471.9a85bb76992a9f95.9f07f28bb9d0b459
     9a715ceda0676718.006bbaf36bfa1d7e.56ae1180982b1de2.f06405666247dac1
@@ -12804,12 +12804,12 @@
     37ba5bb916bb38b3.4b2e18537a0be303.eac51d54243b2f57.79f8a0595fe620fa
     6ac81f4aeb27b924
   after
-    0000000000000000.0000000000000000.af0233855b288fa3.00f3456026a8c584
+    0000000000000000.0000000000000000.56ae1180982b1de2.ffffffffffffffff
     9a715ceda0676718.006bbaf36bfa1d7e.56ae1180982b1de2.f06405666247dac1
     b95383a9f35e897d.09bc986f66e849f5.a7abddfb3d028e3f.ef70c0063b9f153d
     37ba5bb916bb38b3.4b2e18537a0be303.eac51d54243b2f57.79f8a0595fe620fa
     6ac81f4aeb27b924
-VPSUBD_128(mem)
+VCMPSD_128_0x14(mem)
   before
     9eabbbc5fa6f9ae7.72f2e087a50cb268.a28eb68cc46da8d4.7b4bccf5ea603cd7
     f16fefb7a8c97f6e.c5460e803edc3045.eaa8ee045f1d5493.b688e64c2bfff06a
@@ -12819,11 +12819,11 @@
   after
     9eabbbc5fa6f9ae7.72f2e087a50cb268.a28eb68cc46da8d4.7b4bccf5ea603cd7
     f16fefb7a8c97f6e.c5460e803edc3045.eaa8ee045f1d5493.b688e64c2bfff06a
-    0000000000000000.0000000000000000.481a37789aafabbf.3b3d1957419fb393
+    0000000000000000.0000000000000000.eaa8ee045f1d5493.ffffffffffffffff
     64c60fab54e44979.227656a5f72b2f2d.bd3a1d66fb90508d.9b554cc88bd9417c
     fc7e90c6e32d5452
 
-VPSUBD_128(reg)
+VCMPSD_128_0x14(reg)
   before
     778e2f28252900ec.3cf1f48789bda456.e4e968a851c12790.004a0c27326d1820
     68d1255cee5b7ff5.a32c6188ced8f5a8.2fa91385230615cc.a44486d82cc5b652
@@ -12831,12 +12831,12 @@
     1c1f07e7838ee807.8d01c3adf5066458.cc3f2583a0d0c181.7e2407bad31b6840
     6da307c3b831f356
   after
-    0000000000000000.0000000000000000.d2a7bedb197ee13e.1e5181732a1ece04
+    0000000000000000.0000000000000000.2fa91385230615cc.ffffffffffffffff
     68d1255cee5b7ff5.a32c6188ced8f5a8.2fa91385230615cc.a44486d82cc5b652
     2b936fcdd94e0d1a.7542d29c3e42f699.5d0154aa0987348e.85f3056502a6e84e
     1c1f07e7838ee807.8d01c3adf5066458.cc3f2583a0d0c181.7e2407bad31b6840
     6da307c3b831f356
-VPSUBD_128(mem)
+VCMPSD_128_0x14(mem)
   before
     2d3c816dcff344ba.97c2eb1787a84a67.c934b1a91030fb0f.d6ad847a846bf852
     9abbf1a2346d1898.f8c916c7812770e7.04a6167baacd76eb.d9986cfc4fe615ac
@@ -12846,11 +12846,11 @@
   after
     2d3c816dcff344ba.97c2eb1787a84a67.c934b1a91030fb0f.d6ad847a846bf852
     9abbf1a2346d1898.f8c916c7812770e7.04a6167baacd76eb.d9986cfc4fe615ac
-    0000000000000000.0000000000000000.3b7164d29a9c7bdc.02eae882cb7a1d5a
+    0000000000000000.0000000000000000.04a6167baacd76eb.ffffffffffffffff
     ea9aa46156bb3975.db2d325bca86f7f5.e67a3a51cd8d0bc0.3515c85211aaefae
     483f33fd3e0b25ad
 
-VPSUBD_128(reg)
+VCMPSD_128_0x14(reg)
   before
     c21618e4c47c30e6.8692dfc34ba7fecb.16241b16507dd0dc.4674f12d8ec99d12
     00e572723e874e05.3ea00061fd7a354c.a7ae3b033c095d92.15de0f903ea70338
@@ -12858,12 +12858,12 @@
     399f763280a1ada2.772ee5010a0beb7e.3aa91120b912821d.6f307597dd7a3eb2
     b2b2b41304878a5e
   after
-    0000000000000000.0000000000000000.bd97ac76105182ce.e75afd2c447308d9
+    0000000000000000.0000000000000000.a7ae3b033c095d92.ffffffffffffffff
     00e572723e874e05.3ea00061fd7a354c.a7ae3b033c095d92.15de0f903ea70338
     5efa3e1249bab9b5.f090842789429a24.ea168e8d2bb7dac4.2e831264fa33fa5f
     399f763280a1ada2.772ee5010a0beb7e.3aa91120b912821d.6f307597dd7a3eb2
     b2b2b41304878a5e
-VPSUBD_128(mem)
+VCMPSD_128_0x14(mem)
   before
     d5d34cc68a669b8e.eb21183d7fc6677a.ae46a1db9de0e287.f5b3be2881a7924a
     b260b79b8c242d6f.d1cb1fa0e3b724e6.73a333a15ecd3c6a.768093111f0146f6
@@ -12873,11 +12873,11 @@
   after
     d5d34cc68a669b8e.eb21183d7fc6677a.ae46a1db9de0e287.f5b3be2881a7924a
     b260b79b8c242d6f.d1cb1fa0e3b724e6.73a333a15ecd3c6a.768093111f0146f6
-    0000000000000000.0000000000000000.c55c91c6c0ec59e3.80ccd4e99d59b4ac
+    0000000000000000.0000000000000000.73a333a15ecd3c6a.ffffffffffffffff
     0eedfb5a716bc3f3.a9cc4d19492c9131.135fcaa2d7200870.3993a3364f35887e
     3370d54b19268fb2
 
-VPADDD_128(reg)
+VCMPSD_128_0x15(reg)
   before
     64401ff0290e2a14.4585cc1d8d0b3fee.53b96b0882c7ba66.a657c7b4c89ef3eb
     264f7c931c769453.a6ba60b395bb2c4a.a1ffdfff905dd5e1.36c38a63566430f1
@@ -12885,12 +12885,12 @@
     d15a5f7f19fcc813.5a26c603d67447d2.99c6b7b19aacd059.be2f5244bbfa914c
     6dc5504fc9e22efa
   after
-    0000000000000000.0000000000000000.91ea84679fd8f42f.d73619fdf3e3ac9e
+    0000000000000000.0000000000000000.a1ffdfff905dd5e1.ffffffffffffffff
     264f7c931c769453.a6ba60b395bb2c4a.a1ffdfff905dd5e1.36c38a63566430f1
     d7e9e89e8dec0a19.0e563506a4844532.efeaa4680f7b1e4e.a0728f9a9d7f7bad
     d15a5f7f19fcc813.5a26c603d67447d2.99c6b7b19aacd059.be2f5244bbfa914c
     6dc5504fc9e22efa
-VPADDD_128(mem)
+VCMPSD_128_0x15(mem)
   before
     8a0104a6e5420ee2.71eedea15b3009ec.64f68f964896ee58.fbdf1245cd7c28ad
     efafea352b26ed30.14f06070ef160a51.09910dac15f7f6ed.7180b390457862f6
@@ -12900,11 +12900,11 @@
   after
     8a0104a6e5420ee2.71eedea15b3009ec.64f68f964896ee58.fbdf1245cd7c28ad
     efafea352b26ed30.14f06070ef160a51.09910dac15f7f6ed.7180b390457862f6
-    0000000000000000.0000000000000000.6e879d425e8ee545.6d5fc5d512f48ba3
+    0000000000000000.0000000000000000.09910dac15f7f6ed.ffffffffffffffff
     04913caca2ab96b1.ce725dc580263c6d.955c140d32a317fb.088eb4fb72226b1a
     e2920cf35fe8b24c
 
-VPADDD_128(reg)
+VCMPSD_128_0x15(reg)
   before
     404f9a520109ca24.6c5da16b0c65d83c.9f89d123b468e47d.33239631ba06a9ca
     7e115984f311f14e.8dca281210d20add.e13f38deaa8c3cc8.dce6bd870dd88b5b
@@ -12912,12 +12912,12 @@
     09d35a1239095746.6abb8cca53fa2913.2bb7cf1c4fa6ebc1.bf90e67986f7336d
     b10fe1ede45c6f47
   after
-    0000000000000000.0000000000000000.d31ec640a9a8bdc3.4957c18255fd0732
+    0000000000000000.0000000000000000.e13f38deaa8c3cc8.0000000000000000
     7e115984f311f14e.8dca281210d20add.e13f38deaa8c3cc8.dce6bd870dd88b5b
     f72445f6d28d6175.43a54d8ec900e6c0.f1df8d62ff1c80fb.6c7103fb48247bd7
     09d35a1239095746.6abb8cca53fa2913.2bb7cf1c4fa6ebc1.bf90e67986f7336d
     b10fe1ede45c6f47
-VPADDD_128(mem)
+VCMPSD_128_0x15(mem)
   before
     1eb970437d5fed91.0e6b9546c50f0e6c.ded662b1cbcd8eff.eb11f77635b6bac7
     e25b0f686d0d6779.6438f0fd112dc394.7bc24a314c84d2b3.8e3b03de4dd629b9
@@ -12927,11 +12927,11 @@
   after
     1eb970437d5fed91.0e6b9546c50f0e6c.ded662b1cbcd8eff.eb11f77635b6bac7
     e25b0f686d0d6779.6438f0fd112dc394.7bc24a314c84d2b3.8e3b03de4dd629b9
-    0000000000000000.0000000000000000.5a98ace2185261b2.794cfb54838ce480
+    0000000000000000.0000000000000000.7bc24a314c84d2b3.ffffffffffffffff
     dfb76fcbc59741cd.6fa1fba35adf1799.a04240a9dbcfe71d.e82ab385857cd60f
     5887519cdd198ccb
 
-VPADDD_128(reg)
+VCMPSD_128_0x15(reg)
   before
     1ae4c170d7f7d223.d00927e1648c1992.ddd5a36b908b2ecd.e06c4679217b2f2c
     8a8b016d0fa2e4c3.8783df76ca5bdea3.0a6e5b66f67e32b4.b9984f91e03b46b2
@@ -12939,12 +12939,12 @@
     e3ebde92ac915a89.bc1d40ca5db81e5c.15fdf0a6c36bf345.a626574a3b29d1d1
     71204ec20f6ebcc3
   after
-    0000000000000000.0000000000000000.5f257c671ec393ab.c12b266e15582f8c
+    0000000000000000.0000000000000000.0a6e5b66f67e32b4.0000000000000000
     8a8b016d0fa2e4c3.8783df76ca5bdea3.0a6e5b66f67e32b4.b9984f91e03b46b2
     03ca0cff23a7fd56.e2f0137514104c2d.54b72101284560f7.0792d6dd351ce8da
     e3ebde92ac915a89.bc1d40ca5db81e5c.15fdf0a6c36bf345.a626574a3b29d1d1
     71204ec20f6ebcc3
-VPADDD_128(mem)
+VCMPSD_128_0x15(mem)
   before
     464b3833ccf866db.853b739348ed3707.f1d7e161c25e115b.aa8cc4c2627c2848
     007590878ed28b46.4506c86c9345cf7d.5ce872265f0ee157.70b09ac2a2053bad
@@ -12954,11 +12954,11 @@
   after
     464b3833ccf866db.853b739348ed3707.f1d7e161c25e115b.aa8cc4c2627c2848
     007590878ed28b46.4506c86c9345cf7d.5ce872265f0ee157.70b09ac2a2053bad
-    0000000000000000.0000000000000000.4ec05387216cf2b2.1b3d5f84048163f5
+    0000000000000000.0000000000000000.5ce872265f0ee157.ffffffffffffffff
     92f17a8d94a734c3.8f3c9f5aa31f2300.494155eaaebe07f5.fae7381a73aceb4b
     7791fa4a3ce3ffdc
 
-VPMOVZXBW_128(reg)
+VCMPSD_128_0x16(reg)
   before
     9500ac0e16c1e17f.23dc04160fba312e.d03f1947a1b85665.81229fc298d5d5ef
     ae804bd19cd2cce0.08f5ed33ff4d999b.a0ed42bdbe7e3671.618ac9772a277095
@@ -12966,12 +12966,12 @@
     44e342041ebfb18a.42e0c9d9b025982d.597a93f4c2c3e730.8522ae2cb5a9fb97
     82ea6004e6f2644c
   after
-    9500ac0e16c1e17f.23dc04160fba312e.d03f1947a1b85665.81229fc298d5d5ef
-    0000000000000000.0000000000000000.00c40046004f00f7.008000bf00930014
+    0000000000000000.0000000000000000.a0ed42bdbe7e3671.ffffffffffffffff
+    ae804bd19cd2cce0.08f5ed33ff4d999b.a0ed42bdbe7e3671.618ac9772a277095
     1f5dd4ff6ba3feaa.1f08b0d0816d2736.5a93172895fefdd1.c4464ff780bf9314
     44e342041ebfb18a.42e0c9d9b025982d.597a93f4c2c3e730.8522ae2cb5a9fb97
     82ea6004e6f2644c
-VPMOVZXBW_128(mem)
+VCMPSD_128_0x16(mem)
   before
     956ae36a2ea58a5c.795e914d51b2222b.4f4ab43ba982a8aa.fbf1b28de259323c
     9b6eb24aa9cf28f5.1a19be44a1098c3a.2013ede0878f12d9.9a437060904c189e
@@ -12980,12 +12980,12 @@
     05513f650acfc98c
   after
     956ae36a2ea58a5c.795e914d51b2222b.4f4ab43ba982a8aa.fbf1b28de259323c
-    0000000000000000.0000000000000000.00fb00f100b2008d.00e200590032003c
-    71c14a90747bfb43.8362c356aa4f2c63.9305f1b5675893e7.94bbcad76929d605
+    9b6eb24aa9cf28f5.1a19be44a1098c3a.2013ede0878f12d9.9a437060904c189e
+    0000000000000000.0000000000000000.2013ede0878f12d9.ffffffffffffffff
     f1302528abb5bf72.10839ef007103e51.82ec3ba764e9e700.44a6bb5f087ca71a
     05513f650acfc98c
 
-VPMOVZXBW_128(reg)
+VCMPSD_128_0x16(reg)
   before
     340652530ab07605.f987c1fe69892fad.1dc94a7c54d9feb1.ca9647a19b4fca4f
     2e11f097a5aaea32.639299ffca040820.0680c4682e35a72e.48ce928e2795f701
@@ -12993,12 +12993,12 @@
     ef5ebfce191b1b56.d0f4ee2ee71de562.dc700e0df7d8a732.5116d1f6b0f2223c
     95bfbe48e522971e
   after
-    340652530ab07605.f987c1fe69892fad.1dc94a7c54d9feb1.ca9647a19b4fca4f
-    0000000000000000.0000000000000000.00d6005f0096005c.002500c8002b0041
+    0000000000000000.0000000000000000.0680c4682e35a72e.ffffffffffffffff
+    2e11f097a5aaea32.639299ffca040820.0680c4682e35a72e.48ce928e2795f701
     4dc0169c764a63be.0c1d2915eb3106f9.27f4061f31b17675.d65f965c25c82b41
     ef5ebfce191b1b56.d0f4ee2ee71de562.dc700e0df7d8a732.5116d1f6b0f2223c
     95bfbe48e522971e
-VPMOVZXBW_128(mem)
+VCMPSD_128_0x16(mem)
   before
     7e26d93edf614712.6e36e7992ba94fa5.8ce26234dbd36087.8142d79e1f367610
     e9179fc5babdee45.27958a6948813a58.1ab50315e25f3495.72b45d3e43571ebc
@@ -13007,12 +13007,12 @@
     a4c837b0b1c88948
   after
     7e26d93edf614712.6e36e7992ba94fa5.8ce26234dbd36087.8142d79e1f367610
-    0000000000000000.0000000000000000.0081004200d7009e.001f003600760010
-    b05e8ac7934148e2.76c7a4aa0b2e1a1b.57374cbc19cd1db8.0a139d59ffc8dce1
+    e9179fc5babdee45.27958a6948813a58.1ab50315e25f3495.72b45d3e43571ebc
+    0000000000000000.0000000000000000.1ab50315e25f3495.ffffffffffffffff
     b0c6183186fa1016.b81832c8103c2999.1f35b9149b2ad61b.a7ab915bef14eb2c
     a4c837b0b1c88948
 
-VPMOVZXBW_128(reg)
+VCMPSD_128_0x16(reg)
   before
     5db58ac5de6ff0e2.c51cc4f0adf3030d.47d42f30f438a37f.4e7bc70b85821deb
     2dc0860414955da6.cb2d0bef2738ddf2.8046974c53adc678.c0d4f18df2dfac53
@@ -13020,12 +13020,12 @@
     865b6ab40a8f385a.1aaa565c7ed83538.60809954ef33f256.ddf389ddc7dd949e
     4051ef84669665d8
   after
-    5db58ac5de6ff0e2.c51cc4f0adf3030d.47d42f30f438a37f.4e7bc70b85821deb
-    0000000000000000.0000000000000000.0051000e00b30084.00ff004f003f0080
+    0000000000000000.0000000000000000.8046974c53adc678.0000000000000000
+    2dc0860414955da6.cb2d0bef2738ddf2.8046974c53adc678.c0d4f18df2dfac53
     723328dbefc60b40.9ec367190ed65af2.bfbc678ac728cc31.510eb384ff4f3f80
     865b6ab40a8f385a.1aaa565c7ed83538.60809954ef33f256.ddf389ddc7dd949e
     4051ef84669665d8
-VPMOVZXBW_128(mem)
+VCMPSD_128_0x16(mem)
   before
     56f26266f9856e5b.c7844afd027c1ea3.1bb053a3944a2bf1.bfdf2b18655c7492
     fba35d6d9cb66d52.8ffac4217217f9c5.7da0dada6b38f749.38251841c52f8d92
@@ -13034,12 +13034,12 @@
     d758db527c16bfdf
   after
     56f26266f9856e5b.c7844afd027c1ea3.1bb053a3944a2bf1.bfdf2b18655c7492
-    0000000000000000.0000000000000000.00bf00df002b0018.0065005c00740092
-    0b305c876a361cea.3c09d28cf6ee076d.1c4568ed20af576b.279e5c3bac377a01
+    fba35d6d9cb66d52.8ffac4217217f9c5.7da0dada6b38f749.38251841c52f8d92
+    0000000000000000.0000000000000000.7da0dada6b38f749.ffffffffffffffff
     6264db9f7f10384e.28fc72aa2b8c8246.d46c77c8cebb0584.e895f472b500778c
     d758db527c16bfdf
 
-VPMOVZXWD_128(reg)
+VCMPSD_128_0x17(reg)
   before
     50310c479f0690a5.db0d56a0f8507dac.b1219ee7ac7ea7fd.80e185589266bebf
     af6d86beb75b248b.54f54a78f103a62d.31c254b0164fb13d.fe700d8787be3d49
@@ -13047,12 +13047,12 @@
     8f3e3dde3c658765.b3b58a5ad0ef974f.8aab4c9113bf680b.dd0b7c7675a380f9
     f5b05b0ea749bc77
   after
-    50310c479f0690a5.db0d56a0f8507dac.b1219ee7ac7ea7fd.80e185589266bebf
-    0000000000000000.0000000000000000.000029e500008c42.0000c9cf00003f4e
+    0000000000000000.0000000000000000.31c254b0164fb13d.ffffffffffffffff
+    af6d86beb75b248b.54f54a78f103a62d.31c254b0164fb13d.fe700d8787be3d49
     5058422162a1b73c.a8e9321284347000.062c906f058bdeb3.29e58c42c9cf3f4e
     8f3e3dde3c658765.b3b58a5ad0ef974f.8aab4c9113bf680b.dd0b7c7675a380f9
     f5b05b0ea749bc77
-VPMOVZXWD_128(mem)
+VCMPSD_128_0x17(mem)
   before
     4f9ea4f57acaaff3.c86b745fe032ceb2.5025ce3def41d746.1a8b8683df768bf0
     c6a2d3190a34149a.562ae212ea95c9ce.5d057ba5fd35eb12.131739b0023c850f
@@ -13061,12 +13061,12 @@
     03c201d09963cc7d
   after
     4f9ea4f57acaaff3.c86b745fe032ceb2.5025ce3def41d746.1a8b8683df768bf0
-    0000000000000000.0000000000000000.00001a8b00008683.0000df7600008bf0
-    358865657492a797.97c98362f719b366.b4200c7f16d790df.cf9d61831b9e9014
+    c6a2d3190a34149a.562ae212ea95c9ce.5d057ba5fd35eb12.131739b0023c850f
+    0000000000000000.0000000000000000.5d057ba5fd35eb12.ffffffffffffffff
     7a1cd4c5d4f02617.e69254baa34ac925.3344fdb8583482d8.ab67fa6ac327e9aa
     03c201d09963cc7d
 
-VPMOVZXWD_128(reg)
+VCMPSD_128_0x17(reg)
   before
     33fa702136df743a.6f2a9e25455b4b46.9ed2508889b547b8.b53bca3adc577c2a
     975b45c938261e8d.f27d3e71e3ded34f.1dd5723845e469ca.15d2f0f3c04d3b01
@@ -13074,12 +13074,12 @@
     6cc70fcfda4667a4.0e26f17e185dfba2.dc531ee9b1c4881e.e30f33b717def8eb
     084e499ac2936d58
   after
-    33fa702136df743a.6f2a9e25455b4b46.9ed2508889b547b8.b53bca3adc577c2a
-    0000000000000000.0000000000000000.000031d50000e9ce.0000202000007b88
+    0000000000000000.0000000000000000.1dd5723845e469ca.ffffffffffffffff
+    975b45c938261e8d.f27d3e71e3ded34f.1dd5723845e469ca.15d2f0f3c04d3b01
     8c317c343bc50622.dde23096cb857a5f.bee6b93474666a08.31d5e9ce20207b88
     6cc70fcfda4667a4.0e26f17e185dfba2.dc531ee9b1c4881e.e30f33b717def8eb
     084e499ac2936d58
-VPMOVZXWD_128(mem)
+VCMPSD_128_0x17(mem)
   before
     7d5da7633c4a97f9.946bfc04b1377ebf.5f13fc17e7711443.d5669ec3998cfcb7
     1c07cafea10f32fa.60673d415d248720.ad75cc4b53ce7f6e.036d362fc7490580
@@ -13088,12 +13088,12 @@
     6b29611011b9edb1
   after
     7d5da7633c4a97f9.946bfc04b1377ebf.5f13fc17e7711443.d5669ec3998cfcb7
-    0000000000000000.0000000000000000.0000d56600009ec3.0000998c0000fcb7
-    c3192d570eeef988.2c08d1f07a98be73.d51ae008797ff851.c4b2e197d888dd25
+    1c07cafea10f32fa.60673d415d248720.ad75cc4b53ce7f6e.036d362fc7490580
+    0000000000000000.0000000000000000.ad75cc4b53ce7f6e.ffffffffffffffff
     4c5f4c5a9ef4a9cf.539ab17fa31f5e64.b1cdb13974903c16.72829b6967d4c151
     6b29611011b9edb1
 
-VPMOVZXWD_128(reg)
+VCMPSD_128_0x17(reg)
   before
     09f22df771c49cf0.94a5a3f46e2cfefa.3368da597445a59e.1e59bdc9610d07e9
     a92bfd8c23800cbb.77b6ae0f9aa3b436.27c049e98a97cccd.f98b7ea65b0315f7
@@ -13101,12 +13101,12 @@
     6018976df03c19a3.7f6dd27c737b318f.bb3ae6e0f3edb1bd.641115f5e788e973
     adfde13eb22f2739
   after
-    09f22df771c49cf0.94a5a3f46e2cfefa.3368da597445a59e.1e59bdc9610d07e9
-    0000000000000000.0000000000000000.00001c2f000072bb.00007e7d0000226c
+    0000000000000000.0000000000000000.27c049e98a97cccd.ffffffffffffffff
+    a92bfd8c23800cbb.77b6ae0f9aa3b436.27c049e98a97cccd.f98b7ea65b0315f7
     a81ecc3ac47977bd.d260ea993c6486ae.8becf99d80a0129e.1c2f72bb7e7d226c
     6018976df03c19a3.7f6dd27c737b318f.bb3ae6e0f3edb1bd.641115f5e788e973
     adfde13eb22f2739
-VPMOVZXWD_128(mem)
+VCMPSD_128_0x17(mem)
   before
     d3bf5483fa7e97e9.2e65589242542f19.5baae2a658f57105.13f40d1f7e09e6d5
     b222e9b1db82f7b0.6f510d13564df5ca.42e396020adc013b.ee6768c4be80ed93
@@ -13115,12 +13115,12 @@
     310d9256d0814367
   after
     d3bf5483fa7e97e9.2e65589242542f19.5baae2a658f57105.13f40d1f7e09e6d5
-    0000000000000000.0000000000000000.000013f400000d1f.00007e090000e6d5
-    26f31cb2724501ba.7d28b15dc9b4a763.10e46b7ca23f9f5e.aadef53c4ede01a3
+    b222e9b1db82f7b0.6f510d13564df5ca.42e396020adc013b.ee6768c4be80ed93
+    0000000000000000.0000000000000000.42e396020adc013b.ffffffffffffffff
     0cff6974dbd67232.b53540dd3714818f.a179dc003e270599.a2a7aff3cbb05fb0
     310d9256d0814367
 
-VPBLENDVB_128(reg)
+VCMPSD_128_0x18(reg)
   before
     b55b9bd0f9dee973.3e104de1303e0545.73c6b6fd3af9befb.d16e647afaa2ef19
     89dec5cce4528c81.98f243e7908b771e.1325102b71f09b53.7c8e82d7f1bb1b0a
@@ -13128,12 +13128,12 @@
     90b36cff69b0bc51.395e556bdb02e8d5.69805d5de5422475.b38269e502f923ed
     f7ee2a7053357937
   after
-    0000000000000000.0000000000000000.139f102b75f09b53.7ea68201f17f1b97
+    0000000000000000.0000000000000000.1325102b71f09b53.0000000000000000
     89dec5cce4528c81.98f243e7908b771e.1325102b71f09b53.7c8e82d7f1bb1b0a
     08e20cb82a69693c.f873c77114c984ea.f19f49d275845342.7ea6af01407f4397
     90b36cff69b0bc51.395e556bdb02e8d5.69805d5de5422475.b38269e502f923ed
     f7ee2a7053357937
-VPBLENDVB_128(mem)
+VCMPSD_128_0x18(mem)
   before
     26b6708c5040ffa2.7b9de10d3db2c06c.377e69c1fe445e0a.d714483a5ab44897
     1ca6b7271525725a.27eb684e40fbb238.cea0805f9c9aa3b6.97a706d47369fc55
@@ -13143,11 +13143,11 @@
   after
     26b6708c5040ffa2.7b9de10d3db2c06c.377e69c1fe445e0a.d714483a5ab44897
     1ca6b7271525725a.27eb684e40fbb238.cea0805f9c9aa3b6.97a706d47369fc55
-    0000000000000000.0000000000000000.cea0695ffe445eb6.9714483a5ab4fc55
+    0000000000000000.0000000000000000.cea0805f9c9aa3b6.0000000000000000
     cc2c348764ae0e5f.2ee798194a935096.371aa424b2b48a21.7df8edf0fac50254
     5b4f0d49a285cded
 
-VPBLENDVB_128(reg)
+VCMPSD_128_0x18(reg)
   before
     fbd5f10f5cb618d1.3f5c6324276aaf04.412c3b7c87fb737f.c00aa922648fa338
     b9d693afc5e51ead.e9e382ef21302da6.8406dec165d974c9.532ba119ffaf7b77
@@ -13155,12 +13155,12 @@
     fe780629116b4efc.512881bf2c0caf8f.0ba819a5722dff34.0334569e62ec5717
     d9b30d056120d3d0
   after
-    0000000000000000.0000000000000000.84c0de5665d98fc9.532ba1f4ff1f7b77
+    0000000000000000.0000000000000000.8406dec165d974c9.0000000000000000
     b9d693afc5e51ead.e9e382ef21302da6.8406dec165d974c9.532ba119ffaf7b77
     f09ef193789d1c2d.a58d0dd46f0d4470.54c07f567fbb8f22.cb4b06f4a01fce07
     fe780629116b4efc.512881bf2c0caf8f.0ba819a5722dff34.0334569e62ec5717
     d9b30d056120d3d0
-VPBLENDVB_128(mem)
+VCMPSD_128_0x18(mem)
   before
     2894a514bac9fe61.3eb2cedc2ddaf0c7.c87f599d753a2b2f.0609a81cd9b901ab
     cba39cb788f394f4.0c96461868763d39.e55d115865a1747b.a12e282651edd134
@@ -13170,11 +13170,11 @@
   after
     2894a514bac9fe61.3eb2cedc2ddaf0c7.c87f599d753a2b2f.0609a81cd9b901ab
     cba39cb788f394f4.0c96461868763d39.e55d115865a1747b.a12e282651edd134
-    0000000000000000.0000000000000000.c87f115875a1742f.a109a81cd9ed0134
+    0000000000000000.0000000000000000.e55d115865a1747b.0000000000000000
     817a9369f6f7efd2.c18f32dba866cbc4.85e1111aac505bca.28f7eca3e27cca2b
     cb3328ee33ee6bf1
 
-VPBLENDVB_128(reg)
+VCMPSD_128_0x18(reg)
   before
     7e63467c0437ca78.4cda8d51cde92d75.613c9f3ae6d38335.c01f52f73aaf7224
     9dd540baf2e4236d.db99d47c898cc5ca.fec3abd2b29cd7fe.11156363e07846db
@@ -13182,12 +13182,12 @@
     8faabdf19497b150.b95e3e4f2212f63d.a393925e66774346.6958e595e379130e
     273d4f3377c985e2
   after
-    0000000000000000.0000000000000000.f67253d2b29cd7fe.1115c049ba7846db
+    0000000000000000.0000000000000000.fec3abd2b29cd7fe.0000000000000000
     9dd540baf2e4236d.db99d47c898cc5ca.fec3abd2b29cd7fe.11156363e07846db
     84d314129980b17c.0c81e6d847eb74fe.f6725310a94f03ca.568fc049bab7921a
     8faabdf19497b150.b95e3e4f2212f63d.a393925e66774346.6958e595e379130e
     273d4f3377c985e2
-VPBLENDVB_128(mem)
+VCMPSD_128_0x18(mem)
   before
     6d0a790f93b4a3c3.1aa737c47fb65e96.bffe58cf360e07b2.6373642a86a1d21e
     158bdf1653442add.81137ef6f768f6f9.fb2cb043a1ea628a.905ec5dea458edfd
@@ -13197,11 +13197,11 @@
   after
     6d0a790f93b4a3c3.1aa737c47fb65e96.bffe58cf360e07b2.6373642a86a1d21e
     158bdf1653442add.81137ef6f768f6f9.fb2cb043a1ea628a.905ec5dea458edfd
-    0000000000000000.0000000000000000.bf2cb0cf36ea078a.6373c52aa4a1d21e
+    0000000000000000.0000000000000000.fb2cb043a1ea628a.0000000000000000
     fed94f512c89636a.53706426fcb6d2c9.80600cb6e574e912.a58525b34c9eb682
     44581cab0d45dc80
 
-VPMINSD_128(reg)
+VCMPSD_128_0x19(reg)
   before
     c266923c3da97e35.f83d525d7e558c35.75f7fbfdc26b8e8d.82ff078ef8398c19
     79fc83d27857d84e.c4868144e3f70ee9.e41f4fe383e2241e.2a5c300bd00e6a34
@@ -13209,12 +13209,12 @@
     05eac7bd7cbea25b.45f2535058ef0cbb.16821f8d6c4bce5b.d780fd9f401bc750
     95de99901169bdaa
   after
-    0000000000000000.0000000000000000.e41f4fe383e2241e.2a5c300b89003f8c
+    0000000000000000.0000000000000000.e41f4fe383e2241e.ffffffffffffffff
     79fc83d27857d84e.c4868144e3f70ee9.e41f4fe383e2241e.2a5c300bd00e6a34
     c664ecd959da2577.3f7e58f1787ca5b2.fb345d44dea9d02a.5243041789003f8c
     05eac7bd7cbea25b.45f2535058ef0cbb.16821f8d6c4bce5b.d780fd9f401bc750
     95de99901169bdaa
-VPMINSD_128(mem)
+VCMPSD_128_0x19(mem)
   before
     682a53d417f8dec6.93dc12ea7e908ba7.b2aeef4d9f5c0131.90559328cc55595d
     2c31a8596ed3e6d2.ca85c8cdfadb1b06.627ea6d46bcf3e3f.c7f9b4829752aedd
@@ -13224,11 +13224,11 @@
   after
     682a53d417f8dec6.93dc12ea7e908ba7.b2aeef4d9f5c0131.90559328cc55595d
     2c31a8596ed3e6d2.ca85c8cdfadb1b06.627ea6d46bcf3e3f.c7f9b4829752aedd
-    0000000000000000.0000000000000000.b2aeef4d9f5c0131.905593289752aedd
+    0000000000000000.0000000000000000.627ea6d46bcf3e3f.ffffffffffffffff
     f79a0fd2819f9a64.a62a6661d30d24b0.fb895a30fbfa82d6.d8e3ee24e455a606
     6bc1ff449d74c007
 
-VPMINSD_128(reg)
+VCMPSD_128_0x19(reg)
   before
     2aa0add332b69436.b6961a9f75a7be43.03bf46eb660c1352.9c5c4fddf9c801b6
     70ccf43d40a85e3e.d67caf5c2a2cb8c0.7a3b81dae5b59bb8.f0734fc5eacdb8df
@@ -13236,12 +13236,12 @@
     053a3e5236c9c28b.a934685649da2247.2618f9971131607e.219d65f216aac2ba
     b64773108a9a8cc5
   after
-    0000000000000000.0000000000000000.67ea149ae5b59bb8.d39ad8d2ea14657c
+    0000000000000000.0000000000000000.7a3b81dae5b59bb8.ffffffffffffffff
     70ccf43d40a85e3e.d67caf5c2a2cb8c0.7a3b81dae5b59bb8.f0734fc5eacdb8df
     9b90d0ee63d559cc.33174bf5bd394609.67ea149ae992f68d.d39ad8d2ea14657c
     053a3e5236c9c28b.a934685649da2247.2618f9971131607e.219d65f216aac2ba
     b64773108a9a8cc5
-VPMINSD_128(mem)
+VCMPSD_128_0x19(mem)
   before
     6d667c1861f07fc8.0b1439d55511d528.139f846ceb1c09a9.13102e3df61e1737
     24c4fef6b7b956f0.0a6cbde35d38ce4e.4f241a21be0ab659.8a20aef836e45563
@@ -13251,11 +13251,11 @@
   after
     6d667c1861f07fc8.0b1439d55511d528.139f846ceb1c09a9.13102e3df61e1737
     24c4fef6b7b956f0.0a6cbde35d38ce4e.4f241a21be0ab659.8a20aef836e45563
-    0000000000000000.0000000000000000.139f846cbe0ab659.8a20aef8f61e1737
+    0000000000000000.0000000000000000.4f241a21be0ab659.ffffffffffffffff
     ff705ae452d2a35d.5fc15051965460e8.aaaba51c691b5554.86b37f5e362b59c6
     c2cfc9e02ec59655
 
-VPMINSD_128(reg)
+VCMPSD_128_0x19(reg)
   before
     f9314d28f0684b08.da562ccccf3991fb.6d565889006172b3.8046923a7856bff8
     862709a118a1b48a.25ac673a3b43536d.e399d9fbc17d59b8.982ae9a7296ddf9a
@@ -13263,12 +13263,12 @@
     11fa17d50d0291ad.77d70559526e467f.78553642be14991f.fa00c523e061348b
     fd8a43091d55e131
   after
-    0000000000000000.0000000000000000.e399d9fbc17d59b8.982ae9a7986d7367
+    0000000000000000.0000000000000000.e399d9fbc17d59b8.0000000000000000
     862709a118a1b48a.25ac673a3b43536d.e399d9fbc17d59b8.982ae9a7296ddf9a
     c5fbf9b643fb0d88.bb3d861ab3fca6df.1dd4cf15783553a2.cd242651986d7367
     11fa17d50d0291ad.77d70559526e467f.78553642be14991f.fa00c523e061348b
     fd8a43091d55e131
-VPMINSD_128(mem)
+VCMPSD_128_0x19(mem)
   before
     b08e1bef6c563485.c870616910427da6.374460e135a7ee77.4e660bee31a66ad8
     f1d7c9c2e86feab5.45a9d2deeb480d1e.d55113a077b35bf3.fc5449856d78007b
@@ -13278,11 +13278,11 @@
   after
     b08e1bef6c563485.c870616910427da6.374460e135a7ee77.4e660bee31a66ad8
     f1d7c9c2e86feab5.45a9d2deeb480d1e.d55113a077b35bf3.fc5449856d78007b
-    0000000000000000.0000000000000000.d55113a035a7ee77.fc54498531a66ad8
+    0000000000000000.0000000000000000.d55113a077b35bf3.ffffffffffffffff
     896c98dad91a6e53.0094191c93d4073e.1f7b73708971742a.50f6f024ae096e2f
     ae435104ebe1be97
 
-VPMAXSD_128(reg)
+VCMPSD_128_0x1A(reg)
   before
     549c0c806028c398.984fb0f986c5b51a.f6dde8bc9972ea3d.832f1759923b973c
     9e4e1c02aa6bbadf.a5a78fb3d0b74d6c.2319cdede505606c.35b403286a086f83
@@ -13290,12 +13290,12 @@
     8eed2bcc2c126dee.24eb90adada5675f.8e9acfb3c13cf909.f75ca528f8d92d5e
     be185231e7f58b4b
   after
-    0000000000000000.0000000000000000.2319cded141aa777.35b403286a086f83
+    0000000000000000.0000000000000000.2319cdede505606c.0000000000000000
     9e4e1c02aa6bbadf.a5a78fb3d0b74d6c.2319cdede505606c.35b403286a086f83
     e8a57df86534df18.8a42b0f6d4fef574.e194c61c141aa777.12d4b4c92de3b82a
     8eed2bcc2c126dee.24eb90adada5675f.8e9acfb3c13cf909.f75ca528f8d92d5e
     be185231e7f58b4b
-VPMAXSD_128(mem)
+VCMPSD_128_0x1A(mem)
   before
     44d437d115438e1c.ec7223ec9b8ea10e.4f6da9c478b96058.8477e22088f793cf
     655bd0f29ecff2fe.5e7f5fc34f36b724.e895792750449c8c.2177fdce06d8b074
@@ -13305,11 +13305,11 @@
   after
     44d437d115438e1c.ec7223ec9b8ea10e.4f6da9c478b96058.8477e22088f793cf
     655bd0f29ecff2fe.5e7f5fc34f36b724.e895792750449c8c.2177fdce06d8b074
-    0000000000000000.0000000000000000.4f6da9c478b96058.2177fdce06d8b074
+    0000000000000000.0000000000000000.e895792750449c8c.0000000000000000
     e9fe106c33d3cba4.ee659846f43778e0.cf072b8199f5cc54.bb0f379d9639660d
     723f5096e0d27759
 
-VPMAXSD_128(reg)
+VCMPSD_128_0x1A(reg)
   before
     3ec25f8050c0fb35.03b1ae9b7763b9bf.c3d58dca1da99bde.d6e9065041323840
     7ce462c7828f2f4c.2860f0fd8661f79b.1dfeb6b5fb778f82.baa1871b6717d617
@@ -13317,12 +13317,12 @@
     be34311d9e0296dd.03e2510777d85746.ccab99714453de6b.8ac16b569b0b9c33
     2dc3c69ee2313bd1
   after
-    0000000000000000.0000000000000000.572c1174292b9278.58fa29cf6717d617
+    0000000000000000.0000000000000000.1dfeb6b5fb778f82.ffffffffffffffff
     7ce462c7828f2f4c.2860f0fd8661f79b.1dfeb6b5fb778f82.baa1871b6717d617
     88f054d813cc4f4b.34d7537d7dd94364.572c1174292b9278.58fa29cf27b16404
     be34311d9e0296dd.03e2510777d85746.ccab99714453de6b.8ac16b569b0b9c33
     2dc3c69ee2313bd1
-VPMAXSD_128(mem)
+VCMPSD_128_0x1A(mem)
   before
     1dcab7921630fc0a.7bfaf504c0bd41af.714d68879068ef6c.dac64b1ae77ab008
     36a2bb1d53139c0a.19909df7158a8c6d.5ae313eae598c902.dcca21d9ae2d43fa
@@ -13332,11 +13332,11 @@
   after
     1dcab7921630fc0a.7bfaf504c0bd41af.714d68879068ef6c.dac64b1ae77ab008
     36a2bb1d53139c0a.19909df7158a8c6d.5ae313eae598c902.dcca21d9ae2d43fa
-    0000000000000000.0000000000000000.714d6887e598c902.dcca21d9e77ab008
+    0000000000000000.0000000000000000.5ae313eae598c902.ffffffffffffffff
     52fae9ad5ab5690c.6b5786b6c587f15b.0dc31604b2012d31.2bbe2e4e1b649f8f
     30445cdbf800e08a
 
-VPMAXSD_128(reg)
+VCMPSD_128_0x1A(reg)
   before
     9ae49f2f6958d38b.0e100c895c8d0d67.d720bf5958d083e3.8fa5669562543122
     c3e9f4b60bf8b33d.632831add77a8039.95e9ccb98f5aa507.fce33ab8bc746533
@@ -13344,12 +13344,12 @@
     c650c10d513c2c67.488e717eaabfc3f0.77a74e60526388d2.07a25f63e5515066
     5cbca8c4ea247ee1
   after
-    0000000000000000.0000000000000000.01fda74203b29373.30490e58df6f8690
+    0000000000000000.0000000000000000.95e9ccb98f5aa507.ffffffffffffffff
     c3e9f4b60bf8b33d.632831add77a8039.95e9ccb98f5aa507.fce33ab8bc746533
     099e56dc7a6abd4d.2d0ed306e8867ead.01fda74203b29373.30490e58df6f8690
     c650c10d513c2c67.488e717eaabfc3f0.77a74e60526388d2.07a25f63e5515066
     5cbca8c4ea247ee1
-VPMAXSD_128(mem)
+VCMPSD_128_0x1A(mem)
   before
     0d6165670bf6cd2c.584b31b52cfa3d36.9074840339310a2e.5334bc8018f9c1d1
     f55e123863d3f974.19dba241a82e2c66.e08b897fb2e61092.f0f0ee0cf000791b
@@ -13359,11 +13359,11 @@
   after
     0d6165670bf6cd2c.584b31b52cfa3d36.9074840339310a2e.5334bc8018f9c1d1
     f55e123863d3f974.19dba241a82e2c66.e08b897fb2e61092.f0f0ee0cf000791b
-    0000000000000000.0000000000000000.e08b897f39310a2e.5334bc8018f9c1d1
+    0000000000000000.0000000000000000.e08b897fb2e61092.ffffffffffffffff
     d98f2d152adad7aa.9bea79b1f12e949d.0d805b11d14f487e.e2248a1c48935a43
     ee35ed78ff37fa78
 
-VANDPD_128(reg)
+VCMPSD_128_0x1C(reg)
   before
     2ca403f1397c09a9.8e5c92f8d11e01f0.1500d66ef61084fa.a0f51ffdae1af25e
     f7bfc9f291eec581.e9b0d8ba1f9cf8e2.2edb24be0c9a4269.adccc692e5594b14
@@ -13371,12 +13371,12 @@
     a92451420e8a2ed8.0520f58722763b7c.b01085c7d8d4172c.a1d0a964d064f9b5
     4094de7abb48c6f7
   after
-    0000000000000000.0000000000000000.02c8200c0c180000.0cc0c29280180b04
+    0000000000000000.0000000000000000.2edb24be0c9a4269.ffffffffffffffff
     f7bfc9f291eec581.e9b0d8ba1f9cf8e2.2edb24be0c9a4269.adccc692e5594b14
     add039e9a41968ad.c8587b45316077ad.43c8600dce580996.0ed1cabb92180fce
     a92451420e8a2ed8.0520f58722763b7c.b01085c7d8d4172c.a1d0a964d064f9b5
     4094de7abb48c6f7
-VANDPD_128(mem)
+VCMPSD_128_0x1C(mem)
   before
     c9eae5e770d032c0.46060c676acc55af.7ed4c46a0feb007c.d1028f58c89ca6d8
     169f3b980a09f83c.e2c467c5546c17de.0d4063dc13ca82d9.02e97a2c373cf345
@@ -13386,11 +13386,11 @@
   after
     c9eae5e770d032c0.46060c676acc55af.7ed4c46a0feb007c.d1028f58c89ca6d8
     169f3b980a09f83c.e2c467c5546c17de.0d4063dc13ca82d9.02e97a2c373cf345
-    0000000000000000.0000000000000000.0c40404803ca0058.00000a08001ca240
+    0000000000000000.0000000000000000.0d4063dc13ca82d9.ffffffffffffffff
     7050c1775fbc85fb.8300e9dd44f35ef2.e16f011ad1f7ab58.05c5e44e0831b515
     8e525b73a19ea3cf
 
-VANDPD_128(reg)
+VCMPSD_128_0x1C(reg)
   before
     9604a38c2a133ffb.34e6e97d524ec496.4016096e82f35c30.ddcaf9bec45dcbd3
     7b27b803401bc444.2e0a4f779ac04d94.6c37b8e9be80e575.610db0a13d5e975a
@@ -13398,12 +13398,12 @@
     49ef3ac081157cdf.2f2ac7f79b753067.7cc9b449a1728ac6.6c7b51cf385e263e
     ad3e31f4f07561f2
   after
-    0000000000000000.0000000000000000.6026b0a994002565.4104a0a119048418
+    0000000000000000.0000000000000000.6c37b8e9be80e575.ffffffffffffffff
     7b27b803401bc444.2e0a4f779ac04d94.6c37b8e9be80e575.610db0a13d5e975a
     980797467e426f57.38877051541edd20.61aef3b99426356d.4704a4ad5b05cc19
     49ef3ac081157cdf.2f2ac7f79b753067.7cc9b449a1728ac6.6c7b51cf385e263e
     ad3e31f4f07561f2
-VANDPD_128(mem)
+VCMPSD_128_0x1C(mem)
   before
     e418c206a0573864.ea2d9fdde41f278a.f0bfd0558bd00195.1ad3f90781ef1e2a
     eed77ef3630f68be.d70bc20944edab01.55120757413c0dd5.9517bd5ecf292e45
@@ -13413,11 +13413,11 @@
   after
     e418c206a0573864.ea2d9fdde41f278a.f0bfd0558bd00195.1ad3f90781ef1e2a
     eed77ef3630f68be.d70bc20944edab01.55120757413c0dd5.9517bd5ecf292e45
-    0000000000000000.0000000000000000.5012005501100195.1013b90681290e00
+    0000000000000000.0000000000000000.55120757413c0dd5.ffffffffffffffff
     eb2f6d0b9433c2dc.04da2e3e6902300a.7e22f0f76e74c63d.9680b3882706b153
     d33ddd3268c09c9d
 
-VANDPD_128(reg)
+VCMPSD_128_0x1C(reg)
   before
     5e6576258868f24f.9661960e3ab665f7.fd636f206661aaf2.fa769a6e1c58eabd
     93437ace2289f114.84a7dc9b634050ac.b2bc5ec0d0b4ed58.8bb86238007d3900
@@ -13425,12 +13425,12 @@
     6c55b4ee3667d58a.999eac03b096f08e.bf1234ee5964c04d.5c373d7ad8b8487d
     540a48c805e67f0f
   after
-    0000000000000000.0000000000000000.3230568040842448.09b04000006d2900
+    0000000000000000.0000000000000000.b2bc5ec0d0b4ed58.ffffffffffffffff
     93437ace2289f114.84a7dc9b634050ac.b2bc5ec0d0b4ed58.8bb86238007d3900
     ce25e597d3afd399.91ccba9e2cdc3f25.7e33f78c428736e8.0db5c44336ef6f31
     6c55b4ee3667d58a.999eac03b096f08e.bf1234ee5964c04d.5c373d7ad8b8487d
     540a48c805e67f0f
-VANDPD_128(mem)
+VCMPSD_128_0x1C(mem)
   before
     d1fc611bd784d114.c720e23ee83c3392.78e72fb70b7b1d15.d0a61354b0d9c934
     afd8045e6a9ff9b8.3cd26bf285ba285e.0a74bda45a9582e3.0c3b8f29e3718b49
@@ -13440,11 +13440,11 @@
   after
     d1fc611bd784d114.c720e23ee83c3392.78e72fb70b7b1d15.d0a61354b0d9c934
     afd8045e6a9ff9b8.3cd26bf285ba285e.0a74bda45a9582e3.0c3b8f29e3718b49
-    0000000000000000.0000000000000000.08642da40a110001.00220300a0518900
+    0000000000000000.0000000000000000.0a74bda45a9582e3.ffffffffffffffff
     fe7cd9654579bf8b.e41a7e3bece3caf0.b78aefdd439ee80b.79984ecf503c2cab
     62f78a7ac1868350
 
-VMULPD_256(reg)
+VCMPSD_128_0x1D(reg)
   before
     e68853437e2484d3.27dd0300c451d412.cf4901a7f0a6ee0f.8aaa8a0114a460bb
     6295a59724a16adf.2058a73b75d5afe8.448ecf294e419ba1.803f220f49110164
@@ -13452,12 +13452,12 @@
     b356d4919969d945.f7cb4e42dc12aa30.3b8d3c1a8a357ad0.44f335994d4cac51
     cbabaaed54342feb
   after
-    5612983247323198.a82374bccdef3919.a2d60a1a6fa9f6a8.b462adcbacf6a80a
+    0000000000000000.0000000000000000.448ecf294e419ba1.0000000000000000
     6295a59724a16adf.2058a73b75d5afe8.448ecf294e419ba1.803f220f49110164
     336b7ce24e897321.c7b9410374110d39.9e36e42ba3430b53.741332f3fdef8632
     b356d4919969d945.f7cb4e42dc12aa30.3b8d3c1a8a357ad0.44f335994d4cac51
     cbabaaed54342feb
-VMULPD_256(mem)
+VCMPSD_128_0x1D(mem)
   before
     e4070adb2fb2cb2f.3fa2aa0ea0ccd8f6.8b5c48e6cae342f9.76dfd463a0a526c5
     6dd3d34ff9d23b47.349af9c7003eaee1.6136adda599090c2.ab78a770801e49de
@@ -13467,11 +13467,11 @@
   after
     e4070adb2fb2cb2f.3fa2aa0ea0ccd8f6.8b5c48e6cae342f9.76dfd463a0a526c5
     6dd3d34ff9d23b47.349af9c7003eaee1.6136adda599090c2.ab78a770801e49de
-    fff0000000000000.344f77b66c52636d.aca40bc9cb03eac0.e26885d707369c51
+    0000000000000000.0000000000000000.6136adda599090c2.0000000000000000
     3bea8c7acc298aa5.c4c2f39a3981ca13.3ff8a661cbb041fe.72aeee8b0f5ce629
     bde35a70f63ad8b5
 
-VMULPD_256(reg)
+VCMPSD_128_0x1D(reg)
   before
     728ff2ca18503214.39cd76090d78e043.1889958b4a6989b3.007832cde73b1cca
     ecfeb105112c30f2.1550b7cdad99fb65.452da16824910d3c.7172173913d19d45
@@ -13479,12 +13479,12 @@
     a45494cef56407de.db6633a97c8370e8.953ce494a1ce57bb.d702e2c2125484f6
     8432beb61b586185
   after
-    368b68695099b6b9.82a09d8731050039.ab382461236a70ef.7ff0000000000000
+    0000000000000000.0000000000000000.452da16824910d3c.ffffffffffffffff
     ecfeb105112c30f2.1550b7cdad99fb65.452da16824910d3c.7172173913d19d45
     897c938d7b590dfc.ad3fcdb4c9999739.a5fa129d6284935b.70b1d4926e81819a
     a45494cef56407de.db6633a97c8370e8.953ce494a1ce57bb.d702e2c2125484f6
     8432beb61b586185
-VMULPD_256(mem)
+VCMPSD_128_0x1D(mem)
   before
     510be55ba698d672.98d4b13519d85743.7d906598e26441a1.713e13ba7cfc9409
     1c5ad29bce209ce9.c346e52c83413cd8.6d8bdf6d1846c78d.954e9c7b8f9987f1
@@ -13494,11 +13494,11 @@
   after
     510be55ba698d672.98d4b13519d85743.7d906598e26441a1.713e13ba7cfc9409
     1c5ad29bce209ce9.c346e52c83413cd8.6d8bdf6d1846c78d.954e9c7b8f9987f1
-    2d7761f373765456.1c2d9c0adc9ca8cb.7ff0000000000000.c69cc593251b61fd
+    0000000000000000.0000000000000000.6d8bdf6d1846c78d.0000000000000000
     1789eea1673a1228.2933827e9b24b041.ab1f9c796343e1b5.25c3a97fcf517f3d
     49c1259a3484fbf9
 
-VMULPD_256(reg)
+VCMPSD_128_0x1D(reg)
   before
     25fbeb0042571dff.0101163e0fe43948.1e46e3b180b5b86c.b051d789af75ed48
     14bff61d945521fb.571ff427c506a3a2.b87b4c251c6c4378.74834a2e3bd99ebf
@@ -13506,12 +13506,12 @@
     a011cb2c7502be83.ba7dc28dcae22fb6.4f7f2380e879d5dd.aa16caeb8168de0b
     d30fcddb73ace538
   after
-    49273b2e88b22e8c.fff0000000000000.cdac868848847b5b.fff0000000000000
+    0000000000000000.0000000000000000.b87b4c251c6c4378.ffffffffffffffff
     14bff61d945521fb.571ff427c506a3a2.b87b4c251c6c4378.74834a2e3bd99ebf
     7457425dc60a4398.f6af0448a5ac0c63.5520b8460bd48f0f.d4807255227cb047
     a011cb2c7502be83.ba7dc28dcae22fb6.4f7f2380e879d5dd.aa16caeb8168de0b
     d30fcddb73ace538
-VMULPD_256(mem)
+VCMPSD_128_0x1D(mem)
   before
     2b38f911155181fa.f4378df63ccacf67.7f55abe251b5c9c8.03e5893f4fe8548f
     8e5eca7882656d7c.cc168527b8edb2f1.22033933553195c4.ce9ee7efddac46d1
@@ -13521,11 +13521,11 @@
   after
     2b38f911155181fa.f4378df63ccacf67.7f55abe251b5c9c8.03e5893f4fe8548f
     8e5eca7882656d7c.cc168527b8edb2f1.22033933553195c4.ce9ee7efddac46d1
-    8000000000000000.7ff0000000000000.616a09969e90a741.9294ccc38a334fd5
+    0000000000000000.0000000000000000.22033933553195c4.0000000000000000
     e5cb478e2f082972.772e046f3c76dca6.6d10397a4550b72d.143977d2dd6476b3
     48b3a2de86702cab
 
-VMOVUPD_EtoG_128(reg)
+VCMPSD_128_0x1E(reg)
   before
     02afb58bc60145e3.91acec15a7af6f3e.0300835d7ef39c29.ce07a348690c84f1
     9e7aaa4438a4fe07.b8b8257d5af4f77b.82ba2763e3fb1e01.7c04a2c27ba17350
@@ -13533,12 +13533,12 @@
     ecad2f8f244d3fc1.e78444a4e28ab7f6.cd19d0638cdf5662.2f3f5469d783aa8d
     ec16fe6f59e96ac3
   after
-    02afb58bc60145e3.91acec15a7af6f3e.0300835d7ef39c29.ce07a348690c84f1
+    0000000000000000.0000000000000000.82ba2763e3fb1e01.ffffffffffffffff
     9e7aaa4438a4fe07.b8b8257d5af4f77b.82ba2763e3fb1e01.7c04a2c27ba17350
     78607f7779e492c2.36bc6eb364e47b54.52a9edec091b9ddb.53d2b4d4961a4175
-    0000000000000000.0000000000000000.52a9edec091b9ddb.53d2b4d4961a4175
+    ecad2f8f244d3fc1.e78444a4e28ab7f6.cd19d0638cdf5662.2f3f5469d783aa8d
     ec16fe6f59e96ac3
-VMOVUPD_EtoG_128(mem)
+VCMPSD_128_0x1E(mem)
   before
     65222fd139573c45.56adb6f8d66c3faf.a7dc223af0f2698c.5156cc3607d18543
     7830617c92d9dd3c.12ac111e2acccf39.52908463a9294b43.38acded0167f652a
@@ -13548,11 +13548,11 @@
   after
     65222fd139573c45.56adb6f8d66c3faf.a7dc223af0f2698c.5156cc3607d18543
     7830617c92d9dd3c.12ac111e2acccf39.52908463a9294b43.38acded0167f652a
-    0000000000000000.0000000000000000.a7dc223af0f2698c.5156cc3607d18543
+    0000000000000000.0000000000000000.52908463a9294b43.0000000000000000
     d982bd58214b7c40.f0d52f512a808dd0.d93bc51a8d3192c3.a3d2300a633d2bb8
     df3a6981d76589b8
 
-VMOVUPD_EtoG_128(reg)
+VCMPSD_128_0x1E(reg)
   before
     eeeba76f5178886d.df5edf638f52f1a3.ca99ec360eed3435.6ccb9b81f11b6ee3
     2d31e7416b036583.ed6bf265e69e252d.668b6b8904ca5be5.5be6e62a6f036bd5
@@ -13560,12 +13560,12 @@
     acab593df0aea885.964ce003c032b965.542ba325970917d9.b9f0c9f32ffeb8d9
     e17658eaa9297f44
   after
-    eeeba76f5178886d.df5edf638f52f1a3.ca99ec360eed3435.6ccb9b81f11b6ee3
+    0000000000000000.0000000000000000.668b6b8904ca5be5.ffffffffffffffff
     2d31e7416b036583.ed6bf265e69e252d.668b6b8904ca5be5.5be6e62a6f036bd5
     f9582361c1915ca8.e177744c423ad40a.20f7aab4a8a53d8d.8159210126f545c3
-    0000000000000000.0000000000000000.20f7aab4a8a53d8d.8159210126f545c3
+    acab593df0aea885.964ce003c032b965.542ba325970917d9.b9f0c9f32ffeb8d9
     e17658eaa9297f44
-VMOVUPD_EtoG_128(mem)
+VCMPSD_128_0x1E(mem)
   before
     d4b94cd3ad825730.a378844093e786c9.e7b7b2767c93916b.5d7254476d822574
     6d83209b5a16fcc8.3a09a1d547c7321e.b284669091681848.9917b985c59da30a
@@ -13575,11 +13575,11 @@
   after
     d4b94cd3ad825730.a378844093e786c9.e7b7b2767c93916b.5d7254476d822574
     6d83209b5a16fcc8.3a09a1d547c7321e.b284669091681848.9917b985c59da30a
-    0000000000000000.0000000000000000.e7b7b2767c93916b.5d7254476d822574
+    0000000000000000.0000000000000000.b284669091681848.0000000000000000
     05df5974181c9baf.b9aa9d6a4fade3ad.2274666f379f2235.17ae8b0a6ce7dddb
     1038f128f42e126c
 
-VMOVUPD_EtoG_128(reg)
+VCMPSD_128_0x1E(reg)
   before
     ac51fa136d46a6a9.bc09b65e63a70e55.58527541dccb603f.802ea90a00191d9d
     4544a23876bcd63e.89ebe2d6c59c3e57.07ef2e5ceac19b92.c67abefd9338b68c
@@ -13587,12 +13587,12 @@
     e2ecc0dba2effa1e.d9069d1f3ff5c323.05363409f6613a2e.7ef94f9c8592b6ad
     a7c3c3201de59438
   after
-    ac51fa136d46a6a9.bc09b65e63a70e55.58527541dccb603f.802ea90a00191d9d
+    0000000000000000.0000000000000000.07ef2e5ceac19b92.ffffffffffffffff
     4544a23876bcd63e.89ebe2d6c59c3e57.07ef2e5ceac19b92.c67abefd9338b68c
     395fe501a81bded6.4a515cc75a08e6e3.22ccc5251419cf53.d12522340c06ab2d
-    0000000000000000.0000000000000000.22ccc5251419cf53.d12522340c06ab2d
+    e2ecc0dba2effa1e.d9069d1f3ff5c323.05363409f6613a2e.7ef94f9c8592b6ad
     a7c3c3201de59438
-VMOVUPD_EtoG_128(mem)
+VCMPSD_128_0x1E(mem)
   before
     2a4ef9abed0d01f9.9e382e33fdc565c2.14d722ca90729143.0c7a79752d2516ce
     e1686e2b1315b81d.c78f2b7358285c6d.d59168b268880b70.93e28fd355f09fe0
@@ -13602,11 +13602,11 @@
   after
     2a4ef9abed0d01f9.9e382e33fdc565c2.14d722ca90729143.0c7a79752d2516ce
     e1686e2b1315b81d.c78f2b7358285c6d.d59168b268880b70.93e28fd355f09fe0
-    0000000000000000.0000000000000000.14d722ca90729143.0c7a79752d2516ce
+    0000000000000000.0000000000000000.d59168b268880b70.0000000000000000
     5e7401b7d0f6f73d.d48ec36077c5dd8a.5cea24ed1eb4f6a0.91501f1ae5cbac08
     c0ef91da86f4a776
 
-VADDPD_256(reg)
+VPSHUFB_128(reg)
   before
     dfe2c43d87543f07.ddff189b9fe8f690.6fcd56e47518df54.db23931734e2dffb
     4976b4af8578b164.00485e2333e930f6.e9476801e1295dd5.5073b13042da6412
@@ -13614,12 +13614,12 @@
     73b2bc70e6391339.a54463d01b4d45ab.e51dfab674b1bcaf.8f8cefdbb4583527
     11ec074650f7f87c
   after
-    5cf85d9c1beb393c.a41b4d3ba807619b.e9476801e1295dd5.5073b13042da6412
+    0000000000000000.0000000000000000.005d004250000000.000000da3000dada
     4976b4af8578b164.00485e2333e930f6.e9476801e1295dd5.5073b13042da6412
     5cf85d9c1beb393c.a41b4d3ba807619b.9c49f623578293ba.98a8fc2264a84212
     73b2bc70e6391339.a54463d01b4d45ab.e51dfab674b1bcaf.8f8cefdbb4583527
     11ec074650f7f87c
-VADDPD_256(mem)
+VPSHUFB_128(mem)
   before
     fa94be4f5490493e.eaf0cc9781ee7a07.df8e1bcca8c89751.21107226d442155f
     265092e2db30e298.1c00897e8997ab53.2ec7f11c6a8314b9.aa6d59e012c0da77
@@ -13629,11 +13629,11 @@
   after
     fa94be4f5490493e.eaf0cc9781ee7a07.df8e1bcca8c89751.21107226d442155f
     265092e2db30e298.1c00897e8997ab53.2ec7f11c6a8314b9.aa6d59e012c0da77
-    fa94be4f5490493e.eaf0cc9781ee7a07.df8e1bcca8c89751.aa6d59e012c0da77
+    0000000000000000.0000000000000000.00006a00000000da.da77c06d00c0592e
     b7337e56e4b2dec7.26c2fa384ef35b14.7b31e86afeea7f82.169964de99b3978d
     b1ff81fa1a4107e4
 
-VADDPD_256(reg)
+VPSHUFB_128(reg)
   before
     0a01fd10eaecd252.d4f28e109eadb9f3.b40ca7e343be51e1.31fb003f08ade43b
     7de8d48ba4403684.a4f5ab034bdecc68.6f57f1fe14ac01dc.6ce22718b8e26466
@@ -13641,12 +13641,12 @@
     219d84604815b3e2.cdf7f948ef138edb.d81f4d31bd237e09.e13b908678cba4c3
     d344caf3c099dc4e
   after
-    7de8d48ba4403684.a4f5ab034bdecc68.6f57f1fe14ac01dc.6ce22718b8e26466
+    0000000000000000.0000000000000000.0000000057ac0000.dc0000000100006f
     7de8d48ba4403684.a4f5ab034bdecc68.6f57f1fe14ac01dc.6ce22718b8e26466
     660302d7e5ca6d25.0308501d0751d551.b1efd4f45e4aa7b0.08b4d9e02992ba2f
     219d84604815b3e2.cdf7f948ef138edb.d81f4d31bd237e09.e13b908678cba4c3
     d344caf3c099dc4e
-VADDPD_256(mem)
+VPSHUFB_128(mem)
   before
     ba9b02141e061ffb.0a0154926aad4667.de8d22721e2fb432.3e355621ccc3c395
     710cb4d5ad2028f7.7d7d70d9e61f605f.12984886b1b10381.417bed3027b6b2fe
@@ -13656,11 +13656,11 @@
   after
     ba9b02141e061ffb.0a0154926aad4667.de8d22721e2fb432.3e355621ccc3c395
     710cb4d5ad2028f7.7d7d70d9e61f605f.12984886b1b10381.417bed3027b6b2fe
-    710cb4d5ad2028f7.7d7d70d9e61f605f.de8d22721e2fb432.417bed3027b6b2ff
+    0000000000000000.0000000000000000.0000b6b6981200b6.98ed7bb200000000
     c46c76e8d0897f8b.71e87a575ebf1c5a.5238771c72190ab9.89cbb25c33c87d18
     886cd9501cfdd122
 
-VADDPD_256(reg)
+VPSHUFB_128(reg)
   before
     926d7c14c1b6bfb9.17f27f129bf0457b.aa705f66910535b5.17667976d7163bfa
     041c9913bf7f828a.aac2f28c0834c169.dc3e80398f54c634.6f38686a10aa85e3
@@ -13668,12 +13668,12 @@
     91b02f71346d7a88.047007203680cef2.a0e063e05b3e404b.47f7f9d16cc45260
     7f7d941bc7634e4c
   after
-    3bc32bb8b1e25840.5ba84b423360b182.65a0d83ef4380b82.6f38686a10aa85e3
+    0000000000000000.0000000000000000.6800003e00348f00.6854000034000000
     041c9913bf7f828a.aac2f28c0834c169.dc3e80398f54c634.6f38686a10aa85e3
     3bc32bb8b1e25840.5ba84b423360b182.65a0d83ef4380b82.357abee438e0a3a2
     91b02f71346d7a88.047007203680cef2.a0e063e05b3e404b.47f7f9d16cc45260
     7f7d941bc7634e4c
-VADDPD_256(mem)
+VPSHUFB_128(mem)
   before
     bbd60bb065c8528f.632d9fa9e3ac270e.83e6a01230a0d7e4.e94b1e8a60f1a03d
     d5cfdb7a63001b58.0d8779cc5b2a997d.b3d694043bcd8684.9b2d03aaa0de6802
@@ -13683,11 +13683,11 @@
   after
     bbd60bb065c8528f.632d9fa9e3ac270e.83e6a01230a0d7e4.e94b1e8a60f1a03d
     d5cfdb7a63001b58.0d8779cc5b2a997d.b3d694043bcd8684.9b2d03aaa0de6802
-    d5cfdb7a63001b58.632d9fa9e3ac270e.b3d694043bcd8684.e94b1e8a60f1a03d
+    0000000000000000.0000000000000000.000000de02000000.003bd60002000094
     17d17262ee15ec27.590158831313bfc8.95537b98f57bc982.af8640fa3f931fb6
     c7959001d77486fe
 
-VSUBPD_256(reg)
+VCVTTSD2SI_32(reg)
   before
     ba4afa2d18be45c9.f7713257b30c6b85.b3ba56f08c97ebfc.ff786513dc15d436
     e2f27ceba1fd97c4.25e23b3247059f18.557facf73e8accca.8a479a3d45eb7749
@@ -13695,12 +13695,12 @@
     454bb5c9f48be8f9.df62144a4d2d158b.e1605587baeea0e2.7412d2520b7c6f3b
     8aa7cd15a0503d72
   after
-    e2f27ceba1fd97c4.ffee07dfc60c440b.557facf73e8accca.938c95044b0a6be7
+    ba4afa2d18be45c9.f7713257b30c6b85.b3ba56f08c97ebfc.ff786513dc15d436
     e2f27ceba1fd97c4.25e23b3247059f18.557facf73e8accca.8a479a3d45eb7749
     9dda11a50bbdba9b.7fee07dfc60c440b.9b9d5806c4789fdd.138c95044b0a6be7
     454bb5c9f48be8f9.df62144a4d2d158b.e1605587baeea0e2.7412d2520b7c6f3b
-    8aa7cd15a0503d72
-VSUBPD_256(mem)
+    0000000000000000
+VCVTTSD2SI_32(mem)
   before
     32150338278f92b7.389464c2f8f35d8a.220add60f775cfc4.8314a0e8bd770a84
     4629efa7bb472a37.d0001bfbb27f57fc.24b2de0be1ef2ee1.dd05339469a01a70
@@ -13710,11 +13710,11 @@
   after
     32150338278f92b7.389464c2f8f35d8a.220add60f775cfc4.8314a0e8bd770a84
     4629efa7bb472a37.d0001bfbb27f57fc.24b2de0be1ef2ee1.dd05339469a01a70
-    4629efa7bb472a37.d0001bfbb27f57fc.24b2de0be1ef2b85.dd05339469a01a70
+    a3b00d4e7883c11e.6adad5e2bfbd10f8.c225943927a8ee0f.4b7f0cf658f30c52
     2573d9197b501297.63708ee2ba39c52d.d63179d4e3abca79.29cd267c29ff1bd5
-    d33c7d91764d85a6
+    0000000000000000
 
-VSUBPD_256(reg)
+VCVTTSD2SI_32(reg)
   before
     a4180da2db6b8470.a941cff4e0b9dacf.150c42673f7db245.3da00bca34047f4c
     faadd319f4e454e0.09e56cccc2cad4f1.ddfbeedeeb1712ed.d340c50633bfc9b4
@@ -13722,12 +13722,12 @@
     a232eeedb5195b61.d0de881f6e1552a6.20021a4d277b1e9b.fc3da200b18e0bf1
     4734bd9667b87b1f
   after
-    faadd319f4e454e0.a22a2b8b3d8fbe2a.ddfbeedeeb1712ed.f4db2374ffe963dc
+    a4180da2db6b8470.a941cff4e0b9dacf.150c42673f7db245.3da00bca34047f4c
     faadd319f4e454e0.09e56cccc2cad4f1.ddfbeedeeb1712ed.d340c50633bfc9b4
     3047ca635f4533a2.222a2b8b3d8fbe2a.17898cb15a9322d0.74db2374ffe963dc
     a232eeedb5195b61.d0de881f6e1552a6.20021a4d277b1e9b.fc3da200b18e0bf1
-    4734bd9667b87b1f
-VSUBPD_256(mem)
+    0000000080000000
+VCVTTSD2SI_32(mem)
   before
     318bf0223d756f91.abb93b2194ec09c9.efcbff7271684d90.52b1941fee5d41f9
     960db7904ed0a573.a92aae6d984a7888.5bbe0d7260926a15.0ae3f4914cc5c897
@@ -13737,11 +13737,11 @@
   after
     318bf0223d756f91.abb93b2194ec09c9.efcbff7271684d90.52b1941fee5d41f9
     960db7904ed0a573.a92aae6d984a7888.5bbe0d7260926a15.0ae3f4914cc5c897
-    b18bf0223d756f91.2bb93b2194ebfc72.6fcbff7271684d90.d2b1941fee5d41f9
+    52878eccb7d6d7f2.f6cf413b5cc0e548.f0832d0a5aa16660.a4e53811dc3eef21
     41c5f2c39392c13a.f0f5f2f97dd98cb5.8ae5db2679a0fd9e.7c015a0a3b54f242
-    ee8458e704930ca7
+    0000000080000000
 
-VSUBPD_256(reg)
+VCVTTSD2SI_32(reg)
   before
     56ba2e16d4887afb.3f935e5ffe102176.f2e8bc129622a97c.05b293b2d99cebfb
     10eed60246be78eb.28bd4e8e155db1d3.57f39cf243267849.3db4d19a97a0eba2
@@ -13749,12 +13749,12 @@
     ea8491c2821e134e.2b54aa52b691549f.be858ab7cb901aa3.538ad12e9af11480
     eaf68ab21956b50f
   after
-    f86e4e17f7c14223.580f3e3bf4842e7d.fd648c05217134c7.3db4d19a97a0eba2
+    56ba2e16d4887afb.3f935e5ffe102176.f2e8bc129622a97c.05b293b2d99cebfb
     10eed60246be78eb.28bd4e8e155db1d3.57f39cf243267849.3db4d19a97a0eba2
     786e4e17f7c14223.d80f3e3bf4842e7d.7d648c05217134c7.0db812caceb8bac0
     ea8491c2821e134e.2b54aa52b691549f.be858ab7cb901aa3.538ad12e9af11480
-    eaf68ab21956b50f
-VSUBPD_256(mem)
+    0000000000000000
+VCVTTSD2SI_32(mem)
   before
     aec8b94364f35899.c27d9b6d84602819.fc5a0fbe7791de66.77a39174de0e6589
     7accdbcb99d5ba49.5ca568859814bc2f.29ebe86d548f89fd.050a9da9f6775224
@@ -13764,11 +13764,11 @@
   after
     aec8b94364f35899.c27d9b6d84602819.fc5a0fbe7791de66.77a39174de0e6589
     7accdbcb99d5ba49.5ca568859814bc2f.29ebe86d548f89fd.050a9da9f6775224
-    7accdbcb99d5ba49.5ca568859814bc2f.7c5a0fbe7791de66.f7a39174de0e6589
+    2ccd6b38d407974c.1348f5775ac50d3d.8dd4b14b68971191.c206abc0ad581d20
     9f98e5753095aacd.45b23dae67ff55ee.04e1e742d0b6324e.0be3b627a23c022b
-    3dedb9486eaf3dee
+    0000000080000000
 
-VDIVPD_256(reg)
+VCVTTSD2SI_64(reg)
   before
     b26fb391b03e0918.aef9c56ec98cb0f9.4d2e3c955b4ed1f0.69dd043fa7f7a75f
     c7b69d6d0174a353.37bc870fbcf765fb.8709ee9ad13fbcec.9a96862e0a662df0
@@ -13776,12 +13776,12 @@
     41c4358e460630ae.2398a3f91e5acb34.000d5cabb435d389.cc6aa693e2005b46
     861e3de18f437b61
   after
-    2f9701e17702ecd1.61fec7f3409bdc74.8000000000000000.8000000000000000
+    b26fb391b03e0918.aef9c56ec98cb0f9.4d2e3c955b4ed1f0.69dd043fa7f7a75f
     c7b69d6d0174a353.37bc870fbcf765fb.8709ee9ad13fbcec.9a96862e0a662df0
     d80f744800dd464b.15ada84425e38400.4e904f28655d5491.71d6e8fc1410802f
     41c4358e460630ae.2398a3f91e5acb34.000d5cabb435d389.cc6aa693e2005b46
-    861e3de18f437b61
-VDIVPD_256(mem)
+    0000000000000000
+VCVTTSD2SI_64(mem)
   before
     7abe27d137e39cad.5f21dbab717a9b25.3f48f41ac66af4c2.f8cd108f59527580
     8516e24ff7ef7a56.8c74620b1dc5c35f.438b1793371fbbd7.911b6740f1407823
@@ -13791,11 +13791,11 @@
   after
     7abe27d137e39cad.5f21dbab717a9b25.3f48f41ac66af4c2.f8cd108f59527580
     8516e24ff7ef7a56.8c74620b1dc5c35f.438b1793371fbbd7.911b6740f1407823
-    8000000000000000.8000000000000000.44315f0896db5d2f.0000000000000000
+    84f2e947eb70d087.2508c71be574e606.0d2b88518d84de9f.29455d2a188c161e
     511db9a52e745b6d.8628044565123ec6.77f5c43ee5a51745.1a95efba68c18c1c
-    c259175a806b15ca
+    8000000000000000
 
-VDIVPD_256(reg)
+VCVTTSD2SI_64(reg)
   before
     7bdbd378f916eed4.ca64cc55dc06d733.0b2117f63a2c084d.5eb546485a8e23f5
     a3681f7e714f53e5.c994a0431232ff07.103ffb9b004c8044.9f368a59094cbedd
@@ -13803,12 +13803,12 @@
     acd253f7cd99b1ce.cdd9788a848a4682.0a1a276dccd46839.9aaf494582758fff
     0e3ebcf785f83e92
   after
-    4f0aa7a9fef4da73.de0bdccebcd274c3.8000000000000000.cae05aad3d097c6c
+    7bdbd378f916eed4.ca64cc55dc06d733.0b2117f63a2c084d.5eb546485a8e23f5
     a3681f7e714f53e5.c994a0431232ff07.103ffb9b004c8044.9f368a59094cbedd
     944cf5da84a280a9.2b77b05bec059012.f1cead9f5201e15a.14460d5f0deaa327
     acd253f7cd99b1ce.cdd9788a848a4682.0a1a276dccd46839.9aaf494582758fff
-    0e3ebcf785f83e92
-VDIVPD_256(mem)
+    0000000000000000
+VCVTTSD2SI_64(mem)
   before
     4ac0e161327f6b0c.45483441e9c221fd.898874baf9cedd83.b66e67730b53518d
     2bfe346fa416d398.bcf8942473a90de5.3c4f21d965dc1041.5318681caa09d803
@@ -13818,11 +13818,11 @@
   after
     4ac0e161327f6b0c.45483441e9c221fd.898874baf9cedd83.b66e67730b53518d
     2bfe346fa416d398.bcf8942473a90de5.3c4f21d965dc1041.5318681caa09d803
-    212ca1277d6846d0.b7a03f6258c5e496.f2b45e2b1b167e09.dc99b012bfd2cc4f
+    8dc7320df8ca3263.6e2f6f0c07d8b030.c2f9fad2e4c09ce7.3c6226d446823847
     4ce6552849a64498.b539c16542dd488b.f7537b9093873da1.cd999d077a4bae05
-    6209ca22e3f075e8
+    0000000000000000
 
-VDIVPD_256(reg)
+VCVTTSD2SI_64(reg)
   before
     56fea88f1cfbcb9c.44261baab3b7c464.ee62879bc0440fa1.b72920018d3bae9d
     07c333bbc2faeace.5155ff8153086ff3.75f6bc1a1c97411f.de476610efebad04
@@ -13830,12 +13830,12 @@
     0cf14101c202755b.1aab12daa39b3608.de8e64a5df37da01.d28ac2b858683fca
     5648d02a984e4c7f
   after
-    8000000000000000.4207dde43308ec00.fff0000000000000.d4bd0a320ab1d863
+    56fea88f1cfbcb9c.44261baab3b7c464.ee62879bc0440fa1.b72920018d3bae9d
     07c333bbc2faeace.5155ff8153086ff3.75f6bc1a1c97411f.de476610efebad04
     d0a6671370780f2a.4f3d7e9744a50170.a7405c4ff2641cb0.4979c8a9d4a0f405
     0cf14101c202755b.1aab12daa39b3608.de8e64a5df37da01.d28ac2b858683fca
-    5648d02a984e4c7f
-VDIVPD_256(mem)
+    8000000000000000
+VCVTTSD2SI_64(mem)
   before
     b07d6ee9b05fd551.19f1bbf356235a0e.8e6b39358bf5c9e6.772ace877e9ab8be
     bef619e2bba6966c.51f2d354c567f8ef.87486e9419bf7737.ce6198636c1cf292
@@ -13845,11 +13845,11 @@
   after
     b07d6ee9b05fd551.19f1bbf356235a0e.8e6b39358bf5c9e6.772ace877e9ab8be
     bef619e2bba6966c.51f2d354c567f8ef.87486e9419bf7737.ce6198636c1cf292
-    4e680749108f0b8f.77f0fc0f87cbe2f6.38ccb7fba4f3157c.97250104d5a6e480
+    5b7f4c02d52f4dfc.12408490ad5a8ba9.e1102de36806fb27.3f7fbda44446c32a
     63e483341b07b42c.b627cb13aa8951e8.788df30e95d513e1.26d039b6a3a66831
-    df9f090524c71d54
+    8000000000000000
 
-VPCMPEQQ_128(reg)
+VCVTSI2SS_64(reg)
   before
     c63a27fd64351d3f.b2f03a63a9398828.9bf3a2495680845a.288c3a01bb387992
     37eb910afe7da69d.2471ed7d9ad1851d.1bef079e50c961a9.cdd980a8f73cea65
@@ -13857,12 +13857,12 @@
     26c23714b2c93d64.e0fd391f1665e8a1.60aa68569887088f.658df7c31f54db23
     118c1f0f4381d466
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.1bef079e50c961a9.cdd980a85d8c60f8
     37eb910afe7da69d.2471ed7d9ad1851d.1bef079e50c961a9.cdd980a8f73cea65
     8eff42988f2af21b.9531196d0adc6637.9468f57e32f22381.434040f064ec2187
     26c23714b2c93d64.e0fd391f1665e8a1.60aa68569887088f.658df7c31f54db23
     118c1f0f4381d466
-VPCMPEQQ_128(mem)
+VCVTSI2SS_64(mem)
   before
     220836beec7ec87c.5d806ae803e5c525.e3a1c97fd978c788.dc015d901f124a7f
     73ceb7be37577291.8e85d9821f0ac409.79e945797022bf18.65b9cf9a622125fc
@@ -13872,11 +13872,11 @@
   after
     220836beec7ec87c.5d806ae803e5c525.e3a1c97fd978c788.dc015d901f124a7f
     73ceb7be37577291.8e85d9821f0ac409.79e945797022bf18.65b9cf9a622125fc
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.79e945797022bf18.65b9cf9ade0ffa8a
     4a68e75e22cfdb65.4e9358b427a019ed.cd94f3ec8869e8e1.097b1aca8ef99a4f
     dd1debc9afdaab7d
 
-VPCMPEQQ_128(reg)
+VCVTSI2SS_64(reg)
   before
     2e502a47fc6f46e9.86d48fd6f985127d.943461254a29e745.43901c3c411d9272
     5660d1b01242a63e.74ba914ee248ef44.454c950ba8ec1d70.bd5f21d73e98445c
@@ -13884,12 +13884,12 @@
     9e474cf306d8a855.d22393ee58238e8d.54116de6834db0f0.29a9b09a7112b3e9
     d3bc329be028e8e5
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.454c950ba8ec1d70.bd5f21d7de310f36
     5660d1b01242a63e.74ba914ee248ef44.454c950ba8ec1d70.bd5f21d73e98445c
     b299de708ce10829.eee569b2f8232fe5.bc27efd2dc74f71a.16ce7ea89ae6bbca
     9e474cf306d8a855.d22393ee58238e8d.54116de6834db0f0.29a9b09a7112b3e9
     d3bc329be028e8e5
-VPCMPEQQ_128(mem)
+VCVTSI2SS_64(mem)
   before
     f1d28096033415e9.76b518a51db2c16f.fa3e8cef1e52c767.6b550bb43803869e
     5db91677f543f722.96313df36dfb9023.4303ce9f64bf98a0.5b41c3a69823b2cf
@@ -13899,11 +13899,11 @@
   after
     f1d28096033415e9.76b518a51db2c16f.fa3e8cef1e52c767.6b550bb43803869e
     5db91677f543f722.96313df36dfb9023.4303ce9f64bf98a0.5b41c3a69823b2cf
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.4303ce9f64bf98a0.5b41c3a65ed6aa17
     93250c9cb798c9e2.1e7e810f250b4007.a9ba23c0e67cecde.3a3c76aac7cf036d
     e1e46894ce739f31
 
-VPCMPEQQ_128(reg)
+VCVTSI2SS_64(reg)
   before
     d1636652f0b18328.144363b7c0f531c0.3ee89ab5c6ea988f.7e452c0959e5e83b
     68046a52c813ea00.5561f26808863e84.168ffba70f689661.e3a970b2beba6ba7
@@ -13911,12 +13911,12 @@
     f6e079c50c7834fd.82cca93dc66d3668.5ec38a1c0c737492.d03095d4ccdaf659
     10e97025ad3d75f9
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.168ffba70f689661.e3a970b25d874b81
     68046a52c813ea00.5561f26808863e84.168ffba70f689661.e3a970b2beba6ba7
     001572fff3271262.304b359cab54ac57.02bea2509d127629.b5b369a73008314d
     f6e079c50c7834fd.82cca93dc66d3668.5ec38a1c0c737492.d03095d4ccdaf659
     10e97025ad3d75f9
-VPCMPEQQ_128(mem)
+VCVTSI2SS_64(mem)
   before
     52ad7486ef3c6b56.a6b27b10af938f7b.27b1c93974dc99e1.85e8af77f618cb49
     70471fe4afe3939f.6dd8754c79035d89.fbc7117bd2ae91ef.d57a0ecdfa8cb8f9
@@ -13926,11 +13926,11 @@
   after
     52ad7486ef3c6b56.a6b27b10af938f7b.27b1c93974dc99e1.85e8af77f618cb49
     70471fe4afe3939f.6dd8754c79035d89.fbc7117bd2ae91ef.d57a0ecdfa8cb8f9
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.fbc7117bd2ae91ef.d57a0ecddef42ea1
     b32c5743185b6d9f.ab4a3e48f1134503.a1b00a810ca82f78.5d15661bba1143f7
     4cb558eaae3b599c
 
-VSUBPD_128(reg)
+VCVTSI2SD_64(reg)
   before
     d4f373652b65f5ea.900fdc1cf84395b0.db3005dfd6cbd7c7.2a1db21d20e84d4b
     5019b4f6cd19538f.baf8f8a2c603e15a.9198b3185209cccb.52ea73af53bbef63
@@ -13938,12 +13938,12 @@
     9350940fed544388.650be1629a3ed030.0021b61c7d43d142.efd22e668948b311
     1b872062c31a4bfe
   after
-    0000000000000000.0000000000000000.aacf455e005761bb.75e2c923c32dd3ec
+    0000000000000000.0000000000000000.9198b3185209cccb.43bb872062c31a4c
     5019b4f6cd19538f.baf8f8a2c603e15a.9198b3185209cccb.52ea73af53bbef63
     1b74160b2fe5ae35.0db325c09da80bcc.2acf455e005761bb.f5e2c923c32dd3ec
     9350940fed544388.650be1629a3ed030.0021b61c7d43d142.efd22e668948b311
     1b872062c31a4bfe
-VSUBPD_128(mem)
+VCVTSI2SD_64(mem)
   before
     57ca19058daf59e1.12f92d6ea4f34e35.9ecea874d8cfecb2.70da02c064595a0d
     7e6a9739021197e4.f6bbda94f04d0ae8.94c6f4e274691a7f.d64625b5522436c7
@@ -13953,11 +13953,11 @@
   after
     57ca19058daf59e1.12f92d6ea4f34e35.9ecea874d8cfecb2.70da02c064595a0d
     7e6a9739021197e4.f6bbda94f04d0ae8.94c6f4e274691a7f.d64625b5522436c7
-    0000000000000000.0000000000000000.1ecea874d8cfecb2.f0da02c064595a0d
+    0000000000000000.0000000000000000.94c6f4e274691a7f.43dc3680b0191657
     fded10095e7196fb.59b964e5b463880e.2688108234e69faa.f466e142b109d9bb
     64b272b25a3c184c
 
-VSUBPD_128(reg)
+VCVTSI2SD_64(reg)
   before
     39e2ca247a549b7d.0d69037c7d87ce68.908d39e86537c2d9.7bead78d90e16e5f
     d140e502acde9ef9.77706a31b89b27a6.9baa14631bf69d5b.fdb214a3b9153f0e
@@ -13965,12 +13965,12 @@
     b7b856b6b7751284.ce528411f0ee2c42.9eefc86c0367292d.f7a3e1a4e554da0d
     286469671f791bb4
   after
-    0000000000000000.0000000000000000.575cefc0702d563d.fdb214a3b9153f0e
+    0000000000000000.0000000000000000.9baa14631bf69d5b.43c43234b38fbc8e
     d140e502acde9ef9.77706a31b89b27a6.9baa14631bf69d5b.fdb214a3b9153f0e
     8718c0ba8c645c6d.19cfc1142aba5ddf.d75cefc0702d563d.88ac44b2cd8ccfe4
     b7b856b6b7751284.ce528411f0ee2c42.9eefc86c0367292d.f7a3e1a4e554da0d
     286469671f791bb4
-VSUBPD_128(mem)
+VCVTSI2SD_64(mem)
   before
     f6bb57e697054f06.bd6ba364c99afcec.71c4301425454ff9.4dae9ad46d3051d7
     3c74280d6807322f.f47ca32f5d61564e.e0f3400ae6cb8331.41e761634d150be7
@@ -13980,11 +13980,11 @@
   after
     f6bb57e697054f06.bd6ba364c99afcec.71c4301425454ff9.4dae9ad46d3051d7
     3c74280d6807322f.f47ca32f5d61564e.e0f3400ae6cb8331.41e761634d150be7
-    0000000000000000.0000000000000000.f1c4301425454ff9.cdae9ad46d3051d7
+    0000000000000000.0000000000000000.e0f3400ae6cb8331.43d36ba6b51b4c14
     a43c5f038696f4b3.6aebadcb7c0348b7.8eb37c7b7a910dd2.63f2bfa6d86025e6
     4a5d4d32bddffc2f
 
-VSUBPD_128(reg)
+VCVTSI2SD_64(reg)
   before
     e571c19586a9558c.7ee2beaa0b3c4b68.5fe1af763ff65914.86dea0ce85e9db94
     907a173bd04a6cac.401bf0a95a8640a3.f76654edf5bac91d.b8f319c48ca0aa86
@@ -13992,12 +13992,12 @@
     869955015443c3df.f071b960c438f85c.7c4c78f2a8e6b9e2.3e13f746fb583aac
     49b454aa9c727337
   after
-    0000000000000000.0000000000000000.f76654edf5bac91d.b8f319c48ca0aa86
+    0000000000000000.0000000000000000.f76654edf5bac91d.43d26d152aa71c9d
     907a173bd04a6cac.401bf0a95a8640a3.f76654edf5bac91d.b8f319c48ca0aa86
     a7c34990364f7c39.c8b16fed8e819190.8dc6989d39dbd57e.02c16248aac136d4
     869955015443c3df.f071b960c438f85c.7c4c78f2a8e6b9e2.3e13f746fb583aac
     49b454aa9c727337
-VSUBPD_128(mem)
+VCVTSI2SD_64(mem)
   before
     0072f660a91a9da4.894936f8c7b27b4c.952749f017b83233.2245ef59dd67b1f6
     3d1758543d5d731d.0c1de8e32b29e029.949e9b88a40bfb40.d9fdf93c75e8f866
@@ -14007,11 +14007,11 @@
   after
     0072f660a91a9da4.894936f8c7b27b4c.952749f017b83233.2245ef59dd67b1f6
     3d1758543d5d731d.0c1de8e32b29e029.949e9b88a40bfb40.d9fdf93c75e8f866
-    0000000000000000.0000000000000000.15273aa253662c35.d9fdf93c75e8f866
+    0000000000000000.0000000000000000.949e9b88a40bfb40.43c122f7aceeb3d9
     bd484ca76be116e5.0263af41335da5ea.0b03767fda6028ae.eedab62b3c1f6607
     0397620da3ed0492
 
-VADDPD_128(reg)
+VCVTSI2SD_32(reg)
   before
     9b42911dddece227.b76dd6dd3d3a5b8c.2d6ebd8d10327c24.3d89f7b7bb790567
     10293fc685a83c75.a8aa1102075e3cef.48cd8c7c4d3ef080.37002aa745966007
@@ -14019,12 +14019,12 @@
     05d60994908953e7.df9a87c5f135c59c.bdbb5ef3592ca24d.f6f39660c70e83aa
     7308c800f680c306
   after
-    0000000000000000.0000000000000000.48cd8c7c4d3ef080.d6358b3b95c4f6b9
+    0000000000000000.0000000000000000.48cd8c7c4d3ef080.c1a2fe79f4000000
     10293fc685a83c75.a8aa1102075e3cef.48cd8c7c4d3ef080.37002aa745966007
     bf96687437ae4e26.6cca7801e458763b.afce187a870d3eaa.d6358b3b95c4f6b9
     05d60994908953e7.df9a87c5f135c59c.bdbb5ef3592ca24d.f6f39660c70e83aa
     7308c800f680c306
-VADDPD_128(mem)
+VCVTSI2SD_32(mem)
   before
     293e9c083e2671f8.3c351c902cc58863.dde6ba3c4900e43d.d0e1585360265816
     f4638e65bc0d4aac.c1fe9fd5a5ef2947.437a8e5109c5914b.438b040737889bb1
@@ -14034,11 +14034,11 @@
   after
     293e9c083e2671f8.3c351c902cc58863.dde6ba3c4900e43d.d0e1585360265816
     f4638e65bc0d4aac.c1fe9fd5a5ef2947.437a8e5109c5914b.438b040737889bb1
-    0000000000000000.0000000000000000.dde6ba3c4900e43d.d0e1585360265816
+    0000000000000000.0000000000000000.437a8e5109c5914b.41d8099605800000
     3aa5bdcac8cc6c0d.2502e3eba53b9ef5.b2a905062f6f7f5c.b8a05f17c7b1bb0b
     73a1074bb7901022
 
-VADDPD_128(reg)
+VCVTSI2SD_32(reg)
   before
     fd575083e807e2bb.6b5bf2ab8fbc2e11.bcd59b946274e918.74dda17dcd6b3ab8
     b40e362af6a26e82.222e3590fb1c0a88.1142b3366ecb9152.0d88ce4242917130
@@ -14046,12 +14046,12 @@
     15afc9741670a347.8f5fd516335e027e.651cf114e102e4bd.3376c767248e4526
     79518c9fc87b5afc
   after
-    0000000000000000.0000000000000000.1142b3366ecb9152.59770642abeee0f1
+    0000000000000000.0000000000000000.1142b3366ecb9152.c1cbc25282000000
     b40e362af6a26e82.222e3590fb1c0a88.1142b3366ecb9152.0d88ce4242917130
     f212b5ac7cebf022.3aec026528f9bc9e.8096263c64ccd050.59770642abeee0f1
     15afc9741670a347.8f5fd516335e027e.651cf114e102e4bd.3376c767248e4526
     79518c9fc87b5afc
-VADDPD_128(mem)
+VCVTSI2SD_32(mem)
   before
     06d3d2d4b3c3dc9f.77306ff161bcc49f.fd542b8f37579655.1c220e2980f90646
     b6ca13f40272873a.76e2a18cf95c8fd3.60977fbc50f1354e.01f27be8de3d7597
@@ -14061,11 +14061,11 @@
   after
     06d3d2d4b3c3dc9f.77306ff161bcc49f.fd542b8f37579655.1c220e2980f90646
     b6ca13f40272873a.76e2a18cf95c8fd3.60977fbc50f1354e.01f27be8de3d7597
-    0000000000000000.0000000000000000.fd542b8f37579655.1c220e2980f90646
+    0000000000000000.0000000000000000.60977fbc50f1354e.c1dfc1be6e800000
     ee427ba23a31460a.b70a9fcf7dc51286.743711e334358259.c524320f44de253f
     5c1d74508652dfee
 
-VADDPD_128(reg)
+VCVTSI2SD_32(reg)
   before
     9111f6ebf544d415.2f5c99085c5bd397.b1176150a2a7425c.de2c48b536f8a9c2
     c04bb24b2f3f415f.031aa308501a79cc.b784a19f830c0cbf.ad9e6deabe8bcbfe
@@ -14073,12 +14073,12 @@
     7bc5ce097382730f.d3b16c87248dfee1.58b2885ceb905dde.e92c7132cd52ef9d
     0fe0481c8d9e6858
   after
-    0000000000000000.0000000000000000.b784a19f830c0cbf.bc5afc70e7faa338
+    0000000000000000.0000000000000000.b784a19f830c0cbf.c1dc9865ea000000
     c04bb24b2f3f415f.031aa308501a79cc.b784a19f830c0cbf.ad9e6deabe8bcbfe
     4419a6dbd0d06279.4548168f357cf3d6.269f5a2abd80ab5c.bc5afc70e7faa338
     7bc5ce097382730f.d3b16c87248dfee1.58b2885ceb905dde.e92c7132cd52ef9d
     0fe0481c8d9e6858
-VADDPD_128(mem)
+VCVTSI2SD_32(mem)
   before
     0942fe1a43ebcd96.c09c2440b4e1afcd.882324de3b585618.aa0b27a1aac75bf2
     b51e0e180943d883.6feba6ec307a535d.3f68b77e96e9b6a8.78f4346495b1e444
@@ -14088,11 +14088,11 @@
   after
     0942fe1a43ebcd96.c09c2440b4e1afcd.882324de3b585618.aa0b27a1aac75bf2
     b51e0e180943d883.6feba6ec307a535d.3f68b77e96e9b6a8.78f4346495b1e444
-    0000000000000000.0000000000000000.3f68b77e96e9b6a8.78f4346495b1e444
+    0000000000000000.0000000000000000.3f68b77e96e9b6a8.c1d54e2903800000
     8f732cc53c4ad318.7a1b1b534787c2aa.279e624e868e8182.f8a9851a61d08250
     630cc1e3791d1062
 
-VUNPCKLPD_128(reg)
+VPOR_128(reg)
   before
     b9315adb2e4c1862.7584334bdf103a19.8e9606e61a1305be.1027725453ba6424
     57624d6e1cebd5fc.7d3f838104123978.7db70d9f9809a055.6bb34e55d3dc3fce
@@ -14100,12 +14100,12 @@
     db1b2e1610a860ac.5ee2f3af42fbe902.581f5b2f0361cdbe.eb085bf65f34d0ec
     c768836da282fdb8
   after
-    0000000000000000.0000000000000000.1510723c2301cfad.6bb34e55d3dc3fce
+    0000000000000000.0000000000000000.fdff2fffdcfdee5d.7fb37e7df3ddffef
     57624d6e1cebd5fc.7d3f838104123978.7db70d9f9809a055.6bb34e55d3dc3fce
     99ec9509de8684db.81709a54c65c8962.a1cb2ae85cf4ce1c.1510723c2301cfad
     db1b2e1610a860ac.5ee2f3af42fbe902.581f5b2f0361cdbe.eb085bf65f34d0ec
     c768836da282fdb8
-VUNPCKLPD_128(mem)
+VPOR_128(mem)
   before
     86fc688e08f6133d.793b14034fdda71a.f1630b7d93fa1385.fcfd9bde28dbd7e9
     05908645ae9ccea6.ce98443b36b193d2.14bd5cacd566c416.ebb1e76368ee2846
@@ -14115,11 +14115,11 @@
   after
     86fc688e08f6133d.793b14034fdda71a.f1630b7d93fa1385.fcfd9bde28dbd7e9
     05908645ae9ccea6.ce98443b36b193d2.14bd5cacd566c416.ebb1e76368ee2846
-    0000000000000000.0000000000000000.fcfd9bde28dbd7e9.ebb1e76368ee2846
+    0000000000000000.0000000000000000.f5ff5ffdd7fed797.fffdffff68ffffef
     aee7592728af22d6.12386e3c6e684ccf.7d309eda9fb2ab15.15d08f9ca711934c
     0ad1e428de38244d
 
-VUNPCKLPD_128(reg)
+VPOR_128(reg)
   before
     b8d935399f29ed31.91420728343433f5.b81361ddf763926c.7ce086b15eaa58da
     7c347c3b876f29a4.a3cedd70f01cd9a9.865b8e79982d6c02.7b9999997f3f7c5e
@@ -14127,12 +14127,12 @@
     b713e1c33a2bedeb.c5a4f182e642d37e.09628252945ed4cb.ec5a2c47546e1851
     16faa6e741200819
   after
-    0000000000000000.0000000000000000.5729527c1d7cd2cc.7b9999997f3f7c5e
+    0000000000000000.0000000000000000.d75fef7dfe7f7d3e.7fb9dbfd7f7ffede
     7c347c3b876f29a4.a3cedd70f01cd9a9.865b8e79982d6c02.7b9999997f3f7c5e
     b32eb79a31961554.c15557ea7772cf1d.d75cef7cee52193e.5729527c1d7cd2cc
     b713e1c33a2bedeb.c5a4f182e642d37e.09628252945ed4cb.ec5a2c47546e1851
     16faa6e741200819
-VUNPCKLPD_128(mem)
+VPOR_128(mem)
   before
     b1d33947ff9e5e4f.e52ef6203eb9ec15.8c86282458999ff7.77b9426827ded857
     99b26252abf5d820.99cdf21fd8cc4f7f.f2c977bcea82efb5.7dac2c28425d628b
@@ -14142,11 +14142,11 @@
   after
     b1d33947ff9e5e4f.e52ef6203eb9ec15.8c86282458999ff7.77b9426827ded857
     99b26252abf5d820.99cdf21fd8cc4f7f.f2c977bcea82efb5.7dac2c28425d628b
-    0000000000000000.0000000000000000.77b9426827ded857.7dac2c28425d628b
+    0000000000000000.0000000000000000.fecf7fbcfa9bfff7.7fbd6e6867dffadf
     c0b1681e3b5b2341.03c291af3fb331c2.0b9d4e7fdb3b0faf.c09a6a5b828af6a1
     b52cb7a4de4f79db
 
-VUNPCKLPD_128(reg)
+VPOR_128(reg)
   before
     b38b1d493344726e.b76a3cb658836dea.71b12b19449f27f3.76c8cd8173235543
     140298b51df41c07.6b5897aad1b3c9dd.d5539cd4503f7113.ef82552a9bcd11cb
@@ -14154,12 +14154,12 @@
     736cbf931db576f9.7906ce564d5caa53.efdff4edebd1f1d3.80d56d1d0898d66a
     4f06f64086d258d8
   after
-    0000000000000000.0000000000000000.549761646e45fd74.ef82552a9bcd11cb
+    0000000000000000.0000000000000000.dff3fddcfe3f7bdf.ff97756effcdfdff
     140298b51df41c07.6b5897aad1b3c9dd.d5539cd4503f7113.ef82552a9bcd11cb
     36df255437ebb551.b848f4e6c4f7f447.8bf3e14cfe224bcf.549761646e45fd74
     736cbf931db576f9.7906ce564d5caa53.efdff4edebd1f1d3.80d56d1d0898d66a
     4f06f64086d258d8
-VUNPCKLPD_128(mem)
+VPOR_128(mem)
   before
     9df877b904fd3eeb.29f662dc6cdf9eaa.8c5ea3e787eda72e.5d61d323b2da9eca
     45756c749c2745ce.b2ca0a9cbff56711.cc1cef838fb6a603.31c6795aefc88f60
@@ -14169,11 +14169,11 @@
   after
     9df877b904fd3eeb.29f662dc6cdf9eaa.8c5ea3e787eda72e.5d61d323b2da9eca
     45756c749c2745ce.b2ca0a9cbff56711.cc1cef838fb6a603.31c6795aefc88f60
-    0000000000000000.0000000000000000.5d61d323b2da9eca.31c6795aefc88f60
+    0000000000000000.0000000000000000.cc5eefe78fffa72f.7de7fb7bffda9fea
     1843a26091a7a6b6.b17a5a32e311cfb0.42f9d89076229d4e.7b690b7c3e842c1d
     a83fef3f876a509a
 
-VUNPCKHPD_128(reg)
+VPXOR_128(reg)
   before
     ac278ab3b766a867.f92bdc6924147714.def0fae0ec31e640.31b06ed98edc0c1c
     e26fd84368036f30.a6d0796542af59f1.4fde8fb5696b8e36.bdfd6adee4ff6e94
@@ -14181,12 +14181,12 @@
     534a7e6cc4503d64.d07dd2e292a13fde.6e56898331638301.1b8985ccb7adfa33
     a5609c8d6d519db3
   after
-    0000000000000000.0000000000000000.6092151cf74d043d.4fde8fb5696b8e36
+    0000000000000000.0000000000000000.2f4c9aa99e268a0b.7c51235577691176
     e26fd84368036f30.a6d0796542af59f1.4fde8fb5696b8e36.bdfd6adee4ff6e94
     a661d65d39cde3a1.fafcf73e0985087c.6092151cf74d043d.c1ac498b93967fe2
     534a7e6cc4503d64.d07dd2e292a13fde.6e56898331638301.1b8985ccb7adfa33
     a5609c8d6d519db3
-VUNPCKHPD_128(mem)
+VPXOR_128(mem)
   before
     3dfc09bad18d228d.4776cedca519bc28.061d843bfb0fbb46.d377e655b438492f
     bd2b4840fd6e45ee.dd30c11979b49b97.76a88b3760dc38de.ec4028fe1b589073
@@ -14196,11 +14196,11 @@
   after
     3dfc09bad18d228d.4776cedca519bc28.061d843bfb0fbb46.d377e655b438492f
     bd2b4840fd6e45ee.dd30c11979b49b97.76a88b3760dc38de.ec4028fe1b589073
-    0000000000000000.0000000000000000.061d843bfb0fbb46.76a88b3760dc38de
+    0000000000000000.0000000000000000.70b50f0c9bd38398.3f37ceabaf60d95c
     e96d2e02234b59f4.5e8281ab688c6728.78b485c58cc12450.aaff4b8607aa93ec
     078b253cc3f4c778
 
-VUNPCKHPD_128(reg)
+VPXOR_128(reg)
   before
     88f0d47ad4b96dca.4d19cc185561c1f0.01b246d7bbe2cca2.c1cb702f8bf00b82
     897a54aad586c18e.09862c36bf4bb824.b7a09e81713a8177.b6ffa0ebf5afe394
@@ -14208,12 +14208,12 @@
     7b2db8951a66611b.fcd72339b1cb41de.c8e9f8fb741dcbe5.0fe9bb0a7c06540b
     2d37a044d1b766c7
   after
-    0000000000000000.0000000000000000.da998514251fc255.b7a09e81713a8177
+    0000000000000000.0000000000000000.6d391b9554254322.87e52f0e12a88427
     897a54aad586c18e.09862c36bf4bb824.b7a09e81713a8177.b6ffa0ebf5afe394
     6675a13a63e6fe70.fa82ca477f15f9b9.da998514251fc255.311a8fe5e70767b3
     7b2db8951a66611b.fcd72339b1cb41de.c8e9f8fb741dcbe5.0fe9bb0a7c06540b
     2d37a044d1b766c7
-VUNPCKHPD_128(mem)
+VPXOR_128(mem)
   before
     65d2b88102275914.24ed93279590263b.ec53b1f7707a4cbd.dbdbf1a4f9c1d8d5
     948581ab2960e81e.bc03305c70f3897d.a4c0f26dd92dd582.70bd6e7a509624d1
@@ -14223,11 +14223,11 @@
   after
     65d2b88102275914.24ed93279590263b.ec53b1f7707a4cbd.dbdbf1a4f9c1d8d5
     948581ab2960e81e.bc03305c70f3897d.a4c0f26dd92dd582.70bd6e7a509624d1
-    0000000000000000.0000000000000000.ec53b1f7707a4cbd.a4c0f26dd92dd582
+    0000000000000000.0000000000000000.4893439aa957993f.ab669fdea957fc04
     4761137bcf63cd16.2e5c9e5fb88d1716.df9f7b3216d15472.917ce15de7046b9c
     d4f2d0425eb5dfc2
 
-VUNPCKHPD_128(reg)
+VPXOR_128(reg)
   before
     0987320417c782a5.8423d4f886449a5d.bf3867055dddbac5.1aaabb5823d9c2f3
     8d870310afc790ee.272d3512a31ff511.af99e0fed295ec46.8fd69de64a169e0b
@@ -14235,12 +14235,12 @@
     edf7e2b2ebbee169.1248c9d385f53f6f.2119d89a9e6ae86c.92c537ec535c93af
     d91fe83a6e7d2393
   after
-    0000000000000000.0000000000000000.5ccb07b7b33fe744.af99e0fed295ec46
+    0000000000000000.0000000000000000.f352e74961aa0b02.9727002fec853bed
     8d870310afc790ee.272d3512a31ff511.af99e0fed295ec46.8fd69de64a169e0b
     ba3d3fd0c240474c.0d4bb3b84401975e.5ccb07b7b33fe744.18f19dc9a693a5e6
     edf7e2b2ebbee169.1248c9d385f53f6f.2119d89a9e6ae86c.92c537ec535c93af
     d91fe83a6e7d2393
-VUNPCKHPD_128(mem)
+VPXOR_128(mem)
   before
     c9cb2ba1120313bd.82ffe921c6ce9bf2.12f2f3508107a770.59d04d152c9f2a69
     3e947c0c5cfa1d5a.d5a24e88f0fbb192.e913ae1b55448d8e.623d6493fb6cebe8
@@ -14250,11 +14250,11 @@
   after
     c9cb2ba1120313bd.82ffe921c6ce9bf2.12f2f3508107a770.59d04d152c9f2a69
     3e947c0c5cfa1d5a.d5a24e88f0fbb192.e913ae1b55448d8e.623d6493fb6cebe8
-    0000000000000000.0000000000000000.12f2f3508107a770.e913ae1b55448d8e
+    0000000000000000.0000000000000000.fbe15d4bd4432afe.3bed2986d7f3c181
     26b1389e5067719c.25e928f39fdddfc9.8cedc34cf26cbdd0.53636547cbfcd41b
     f4b6475603d77626
 
-VUNPCKHPS_128(reg)
+VPSUBB_128(reg)
   before
     d4eebb18ec798564.529c9c9d32f73398.da2593ce5caa70b8.0f3e168af470804c
     5056bcf9226f3e7e.73d5fe512a2600b8.bd2b4e52d8c54c6e.da36e9c63eceb095
@@ -14262,12 +14262,12 @@
     8de955c9e2849dfd.0461ac83ca97a90e.7dc8a1067a12d8e2.b54f00e717c9463c
     7c073ca5df7e24f2
   after
-    0000000000000000.0000000000000000.2a4854ebbd2b4e52.aeb9b199d8c54c6e
+    0000000000000000.0000000000000000.93e3fa672a0c9bd5.129330db543ca7bf
     5056bcf9226f3e7e.73d5fe512a2600b8.bd2b4e52d8c54c6e.da36e9c63eceb095
     c53b46663f44dc23.6528daa453029326.2a4854ebaeb9b199.c8a3b9ebea9209d6
     8de955c9e2849dfd.0461ac83ca97a90e.7dc8a1067a12d8e2.b54f00e717c9463c
     7c073ca5df7e24f2
-VUNPCKHPS_128(mem)
+VPSUBB_128(mem)
   before
     fb97e9115ebd5f25.06ace58fa5bcbbb9.2b4cf1dbaaeffe9d.12f7310dd95c00f8
     0dcb8118b193b301.8ad0f32524777202.b8b423970f184eff.4521016e67246485
@@ -14277,11 +14277,11 @@
   after
     fb97e9115ebd5f25.06ace58fa5bcbbb9.2b4cf1dbaaeffe9d.12f7310dd95c00f8
     0dcb8118b193b301.8ad0f32524777202.b8b423970f184eff.4521016e67246485
-    0000000000000000.0000000000000000.2b4cf1dbb8b42397.aaeffe9d0f184eff
+    0000000000000000.0000000000000000.8d6832bc65295062.332ad0618ec8648d
     594e66a241319461.266a766dc8a79fed.702e44eadb0bceea.f4954eea7d5ccdb5
     2978c3de3ee44cb1
 
-VUNPCKHPS_128(reg)
+VPSUBB_128(reg)
   before
     6b8567db9e19f6d4.4c36abffb6129a3f.f778e3f825348ce7.54d8295a79ed75cc
     1809374c388708cb.41f1cca56eb9a875.4317be02ae74031f.0c30edde0cd00830
@@ -14289,12 +14289,12 @@
     1fa648408b4153e4.a51394811a8acf9a.bf38ab43b53f7df7.6c19fed283c6dd30
     cc43451b9ff19824
   after
-    0000000000000000.0000000000000000.679302f74317be02.fff43f40ae74031f
+    0000000000000000.0000000000000000.dc84bc0baf80c4df.962ee37c5b11c7ed
     1809374c388708cb.41f1cca56eb9a875.4317be02ae74031f.0c30edde0cd00830
     8b502ea0a8bbbe42.164c468287327b2f.679302f7fff43f40.76020a62b1bf4143
     1fa648408b4153e4.a51394811a8acf9a.bf38ab43b53f7df7.6c19fed283c6dd30
     cc43451b9ff19824
-VUNPCKHPS_128(mem)
+VPSUBB_128(mem)
   before
     704a5927204d2d4a.325681997ca3045e.cc12318e45cc60e2.a752b5526ce1f9ef
     36fbb8e423e55acf.1eaed617186f0d5b.65149c952405e932.7b2c1c91bf67eed5
@@ -14304,11 +14304,11 @@
   after
     704a5927204d2d4a.325681997ca3045e.cc12318e45cc60e2.a752b5526ce1f9ef
     36fbb8e423e55acf.1eaed617186f0d5b.65149c952405e932.7b2c1c91bf67eed5
-    0000000000000000.0000000000000000.cc12318e65149c95.45cc60e22405e932
+    0000000000000000.0000000000000000.99026b07df398950.d4da673f5386f5e6
     938a441d1dfa66a5.f581c133bf731690.6155c4416b89d69d.5754f34baa4d361a
     17395a9e7bc401d1
 
-VUNPCKHPS_128(reg)
+VPSUBB_128(reg)
   before
     330f0ed158503525.e40169724c90be4e.98954fa902c38e20.7b2b7bbe0cecb10f
     07220c4fdd7a0fc3.c551c9266d919d06.8480e8f460ac4ee4.7935eee5d1767539
@@ -14316,12 +14316,12 @@
     472ed2db51dda58c.abb02760f209e050.ab0a2db8da7b95b6.8c15f9e2342da868
     5a8288900b728ec5
   after
-    0000000000000000.0000000000000000.178e897f8480e8f4.74bb918760ac4ee4
+    0000000000000000.0000000000000000.6df25f75ecf1bd5d.44f65542fd4497f1
     07220c4fdd7a0fc3.c551c9266d919d06.8480e8f460ac4ee4.7935eee5d1767539
     efbd4f83a7d0cb57.1348df279b0bbff8.178e897f74bb9187.353f99a3d432de48
     472ed2db51dda58c.abb02760f209e050.ab0a2db8da7b95b6.8c15f9e2342da868
     5a8288900b728ec5
-VUNPCKHPS_128(mem)
+VPSUBB_128(mem)
   before
     7b53c497750d4d8a.6bbf94c2782dd80f.67561dbe8f98bb3b.9d41d00a2f78931d
     cc5528e58f0aa1e3.b6bd8ea5b74da18b.24053e2b8ec30de5.4a806ee10f3fca67
@@ -14331,11 +14331,11 @@
   after
     7b53c497750d4d8a.6bbf94c2782dd80f.67561dbe8f98bb3b.9d41d00a2f78931d
     cc5528e58f0aa1e3.b6bd8ea5b74da18b.24053e2b8ec30de5.4a806ee10f3fca67
-    0000000000000000.0000000000000000.67561dbe24053e2b.8f98bb3b8ec30de5
+    0000000000000000.0000000000000000.bdaf216dff2b52aa.ad3f9ed7e0c7374a
     69175903405cf704.36301e0aef2be420.11b2ede61f1d0525.40408ccfdd58ce56
     425b04bd04c31452
 
-VMOVUPS_EtoG_128(reg)
+VPSUBD_128(reg)
   before
     6fad67e1262782e3.6e6f1eab11c97024.213cad662001d691.f948740bea652312
     2181b2a5de1053b3.1228fb4900c86f88.a5e6646cd9d64eac.521716f18779a76e
@@ -14343,12 +14343,12 @@
     87e2ecc281a310c2.a7e9ed18aeadebce.e43f3e2a55afbf8e.c79397aca437d523
     9bd76f5a5df8f6d3
   after
-    6fad67e1262782e3.6e6f1eab11c97024.213cad662001d691.f948740bea652312
-    0000000000000000.0000000000000000.1d78408ab737881c.f8ec4d8211664f65
+    0000000000000000.0000000000000000.886e23e2229ec690.592ac96f76135809
+    2181b2a5de1053b3.1228fb4900c86f88.a5e6646cd9d64eac.521716f18779a76e
     b524df77c80bc46f.310c6cca2b65ae5c.1d78408ab737881c.f8ec4d8211664f65
     87e2ecc281a310c2.a7e9ed18aeadebce.e43f3e2a55afbf8e.c79397aca437d523
     9bd76f5a5df8f6d3
-VMOVUPS_EtoG_128(mem)
+VPSUBD_128(mem)
   before
     5086517857b66ea1.f307d4f1a4647559.5089fb20a4abdf07.588759ba4fca30ae
     c26abaf2af7cf8ba.55df9372cedb2ddf.08b911cf296b4936.d39c8da542141727
@@ -14358,11 +14358,11 @@
   after
     5086517857b66ea1.f307d4f1a4647559.5089fb20a4abdf07.588759ba4fca30ae
     c26abaf2af7cf8ba.55df9372cedb2ddf.08b911cf296b4936.d39c8da542141727
-    cd5024b48056514a.09b626b09a937501.aa44ab105afae385.b3cad657ca1aafa6
-    0000000000000000.0000000000000000.5089fb20a4abdf07.588759ba4fca30ae
+    0000000000000000.0000000000000000.b82f16af84bf6a2f.7b1533ebf249e679
+    4d040dabe651357c.6bd78818a519886a.14f845ce53636a20.525c313c826835d6
     0ea099c00688e564
 
-VMOVUPS_EtoG_128(reg)
+VPSUBD_128(reg)
   before
     41e00a4ff308fbfb.1d52f0c1ff78607d.d790b4148af8a3c8.219f5cf72fb29a34
     49698056e474b248.1b064ae3e4d78d79.a92ba911e5bc02c4.ad076a760af42eed
@@ -14370,12 +14370,12 @@
     43866c78443cf6b3.0dcf4ffd886fdf10.ee3ad6bf70247b4d.b14560262f7e75fc
     e2b4402fb1dfa0ab
   after
-    41e00a4ff308fbfb.1d52f0c1ff78607d.d790b4148af8a3c8.219f5cf72fb29a34
-    0000000000000000.0000000000000000.3cf5607b53f1e10d.94faed370134e376
+    0000000000000000.0000000000000000.6c36489691ca21b7.180c7d3f09bf4b77
+    49698056e474b248.1b064ae3e4d78d79.a92ba911e5bc02c4.ad076a760af42eed
     8087f83f765647f7.22ec95feb37b799b.3cf5607b53f1e10d.94faed370134e376
     43866c78443cf6b3.0dcf4ffd886fdf10.ee3ad6bf70247b4d.b14560262f7e75fc
     e2b4402fb1dfa0ab
-VMOVUPS_EtoG_128(mem)
+VPSUBD_128(mem)
   before
     0212073fa2621fae.eeb1da6bebb2fa29.ba7cf3cb7ebf7d03.1a450848d7e00d30
     ec2d33401f13af32.de563d8606429005.04bffd56b1780da1.1c64f18124b2d363
@@ -14385,11 +14385,11 @@
   after
     0212073fa2621fae.eeb1da6bebb2fa29.ba7cf3cb7ebf7d03.1a450848d7e00d30
     ec2d33401f13af32.de563d8606429005.04bffd56b1780da1.1c64f18124b2d363
-    7ecf3f1f43ff0c62.6dbf9234327af4f2.c664e9893ea54c16.50e18dd8f4250992
-    0000000000000000.0000000000000000.ba7cf3cb7ebf7d03.1a450848d7e00d30
+    0000000000000000.0000000000000000.4a43098b32b8909e.021fe9394cd2c633
+    92c6a7c92b31f16b.f839d3e10ae6629c.de3734504153f58d.1109d9b8e3c5ea68
     bd28d08d8c1eb392
 
-VMOVUPS_EtoG_128(reg)
+VPSUBD_128(reg)
   before
     af8a6dc38bbda0bc.06dce829f2b61b78.db10fef92b1015b0.26045997d58cc632
     427bafc67d2dec91.b4de7c2ab49846b6.72900ee830864ada.7c96d44a165e7933
@@ -14397,12 +14397,12 @@
     bf390ae4a8b294ee.32d592c49ca98e74.2dbacdfc5785291f.be3dbda511fc77f3
     62e9222503df3a0b
   after
-    af8a6dc38bbda0bc.06dce829f2b61b78.db10fef92b1015b0.26045997d58cc632
-    0000000000000000.0000000000000000.1905ff1ab5d43dc6.babb215621d5cab9
+    0000000000000000.0000000000000000.598a0fce7ab20d14.c1dbb2f4f488ae7a
+    427bafc67d2dec91.b4de7c2ab49846b6.72900ee830864ada.7c96d44a165e7933
     d4478f02fdfbd4be.7a97e1ba8ee52e51.1905ff1ab5d43dc6.babb215621d5cab9
     bf390ae4a8b294ee.32d592c49ca98e74.2dbacdfc5785291f.be3dbda511fc77f3
     62e9222503df3a0b
-VMOVUPS_EtoG_128(mem)
+VPSUBD_128(mem)
   before
     848bcec0128ad02e.619e1dd619de68ce.ba620c34f9ef234c.08fd75f8b2254c91
     feee3c645b0af487.14c2c346ed0c8b09.ec0cc9f6c1c3a905.0718f27b6140e0c9
@@ -14412,11 +14412,11 @@
   after
     848bcec0128ad02e.619e1dd619de68ce.ba620c34f9ef234c.08fd75f8b2254c91
     feee3c645b0af487.14c2c346ed0c8b09.ec0cc9f6c1c3a905.0718f27b6140e0c9
-    ade0e9fcf96a6443.36f1f89ebfc73a4c.a59d47f71131dbca.865840f200632173
-    0000000000000000.0000000000000000.ba620c34f9ef234c.08fd75f8b2254c91
+    0000000000000000.0000000000000000.31aabdc2c7d485b9.fe1b7c83af1b9438
+    6e2b4f7408b7da8d.2177b94c2c9bb143.c2e20121054676c7.e0095bc82c194d3b
     7376406881ee9ecc
 
-VADDPS_256(reg)
+VPADDD_128(reg)
   before
     9aedea40996f50d2.1b9decb7a6fc1392.33a000bbcf152b99.1da77361b80d362a
     b1b855bb1327a1fa.91003bb4ec45ca7e.c6b7cb5744c0e5fb.93b71aa44693d71d
@@ -14424,12 +14424,12 @@
     1f7e5e4a976e0b5f.48cbe084e614a5b9.e2e3dbc617da0992.40ecf3df6509aa64
     30a81eb02e115511
   after
-    b1b855bb1327a1e6.ac21b854f89ebc7c.c6b7cb5744c0e5fb.93b71aa4cce30b8f
+    0000000000000000.0000000000000000.fdc1e0e36ce90110.94978b781376ebe9
     b1b855bb1327a1fa.91003bb4ec45ca7e.c6b7cb5744c0e5fb.93b71aa44693d71d
     14257d4589a3cbf0.ac21b854f89ebc7c.370a158c28281b15.00e070d4cce314cc
     1f7e5e4a976e0b5f.48cbe084e614a5b9.e2e3dbc617da0992.40ecf3df6509aa64
     30a81eb02e115511
-VADDPS_256(mem)
+VPADDD_128(mem)
   before
     aae06e334208d0fe.2d10f537d9149df4.42cc2e30d1b24160.248f1771ac61ea1e
     8b605d54befad958.9c263d76ed21bc5b.74ee1e45d5854b9e.575ac7f98349fb67
@@ -14439,11 +14439,11 @@
   after
     aae06e334208d0fe.2d10f537d9149df4.42cc2e30d1b24160.248f1771ac61ea1e
     8b605d54befad958.9c263d76ed21bc5b.74ee1e45d5854b9e.575ac7f98349fb67
-    aae06e334206db4b.2d10f537ed21bc5b.74ee1e45d585fddf.575ac7f9ac61ea1e
+    0000000000000000.0000000000000000.b7ba4c75a7378cfe.7be9df6a2fabe585
     f2670d205bfb7f01.0913d09ef4a3944d.f3c9d4569af79c8e.037c70516a6e9cda
     346b61f9b0c2a55d
 
-VADDPS_256(reg)
+VPADDD_128(reg)
   before
     c8aab62daaa8cc4b.3087c5a3b52395a9.c080135e212ec530.f819932b93af5a98
     19836a5bf2ab5052.451e0d74e776296d.47a2f8228e517395.a6bbe31716cb78e8
@@ -14451,12 +14451,12 @@
     6535df52dd395b55.64e43fb140cab5fb.343595639a8d3993.6d242ce92760be0d
     3d831ba6edf16039
   after
-    19836a5bf2ab5052.451e0d74e776296d.f9c57a55d897db27.d97a42083d57b0ab
+    0000000000000000.0000000000000000.4168727766e94ebc.8036251f54232993
     19836a5bf2ab5052.451e0d74e776296d.47a2f8228e517395.a6bbe31716cb78e8
     844379ee24576b1b.0df962800cfff47a.f9c57a55d897db27.d97a42083d57b0ab
     6535df52dd395b55.64e43fb140cab5fb.343595639a8d3993.6d242ce92760be0d
     3d831ba6edf16039
-VADDPS_256(mem)
+VPADDD_128(mem)
   before
     27648d2bad16505c.18a798f3b8dc59aa.25ab20f5a0e4261d.523e46b870bec885
     0693fc6583dc4ba1.f9e4a13d51cda4c6.2e1981374858040b.b12b87c0f7b6c5a8
@@ -14466,11 +14466,11 @@
   after
     27648d2bad16505c.18a798f3b8dc59aa.25ab20f5a0e4261d.523e46b870bec885
     0693fc6583dc4ba1.f9e4a13d51cda4c6.2e1981374858040b.b12b87c0f7b6c5a8
-    27648d2bad16505c.f9e4a13d51cda4c6.2e19818d4858040b.523e46b8f7b6c2ad
+    0000000000000000.0000000000000000.53c4a22ce93c2a28.0369ce7868758e2d
     130bc7a4df785044.b4ed907c30c60c06.851eb465dd7ff6fe.9de5ae99862df934
     e4498b43c7c3a7f4
 
-VADDPS_256(reg)
+VPADDD_128(reg)
   before
     dac2ea4f2751b395.f8ec19819d67d3f9.47526f4aade6a282.8b4c7e29034a825b
     dd9cc52b456259c5.434a5ac3e0265180.78b28c7059847375.4752b89be09f6b34
@@ -14478,12 +14478,12 @@
     75a2e4ff253e627c.77b0962268452db8.24927579ab68b971.56166d393119430b
     5f6be03ddd55aa62
   after
-    dd9cc52b456259c1.cff20554e0265180.78b28c7059847370.4752b89be09f6b34
+    0000000000000000.0000000000000000.1c0b71cc28b03000.df4f9842722ad8e9
     dd9cc52b456259c5.434a5ac3e0265180.78b28c7059847375.4752b89be09f6b34
     47221a41ba82d42e.cff20554c5c18507.a358e55ccf2bbc8b.97fcdfa7918b6db5
     75a2e4ff253e627c.77b0962268452db8.24927579ab68b971.56166d393119430b
     5f6be03ddd55aa62
-VADDPS_256(mem)
+VPADDD_128(mem)
   before
     90c9b3a0b04c5ee5.c36620d01f213c5c.19508a18e4bd02bf.56aa38328ac5a5d3
     c3fa624dc7091ac1.8dbbc82047b7a17a.8f9e5b225535c349.97ee2bf508d1be5c
@@ -14493,11 +14493,11 @@
   after
     90c9b3a0b04c5ee5.c36620d01f213c5c.19508a18e4bd02bf.56aa38328ac5a5d3
     c3fa624dc7091ac1.8dbbc82047b7a17a.8f9e5b225535c349.97ee2bf508d1be5c
-    c3fa624dc7091ac1.c36620d047b7a17a.19508a04e4bd02bf.56aa38328ab889ed
+    0000000000000000.0000000000000000.a8eee53a39f2c608.ee9864279397642f
     a30845342f069d33.064851ed8a2ef71e.6c7389238957f495.b2258d464e1f6196
     45b0f5ac4f7a659e
 
-VSUBPS_256(reg)
+VPMOVZXBW_128(reg)
   before
     56977ccc5eb3847e.087d7147b85fdc20.6c172942df2661fc.8993ddf18218ddaf
     40241f101855fbe1.dff56954f4ad1317.bea85fc6d00245c8.eb900083e20aa0fc
@@ -14505,12 +14505,12 @@
     1364a6b8fb05e0e2.5722ae0cf85d5ccd.963cd10cf79369d9.ef54a0a441afa7dc
     49b2150b787a63c9
   after
-    e1a5d9e598810784.dff56954f4ad1317.d845ede6794dde2e.ef388dc7e20aa0fc
-    40241f101855fbe1.dff56954f4ad1317.bea85fc6d00245c8.eb900083e20aa0fc
+    56977ccc5eb3847e.087d7147b85fdc20.6c172942df2661fc.8993ddf18218ddaf
+    0000000000000000.0000000000000000.006f0037006d00c6.00c2003800fb00a7
     61a5d9e518ec0574.063eaa4700feff41.5845ede6f94dde2e.6f376dc6c238fba7
     1364a6b8fb05e0e2.5722ae0cf85d5ccd.963cd10cf79369d9.ef54a0a441afa7dc
     49b2150b787a63c9
-VSUBPS_256(mem)
+VPMOVZXBW_128(mem)
   before
     571f48e685a5e998.b4ae82f45c2bc6d8.af6ef38ff6d6e5e5.d4d706a666612176
     f665b621843cf675.9ece6904d8eaf302.ebeef4bc197657b6.6e62891ee14244b0
@@ -14519,12 +14519,12 @@
     fba3b7fbb4d27dc9
   after
     571f48e685a5e998.b4ae82f45c2bc6d8.af6ef38ff6d6e5e5.d4d706a666612176
-    f665b621843cf675.9ece6904d8eaf302.ebeef4bc197657b6.6e62891ee14244b0
-    f665b621058e4ac9.34ae82f4dc2d9cbe.ebeef4bc76d6e5e5.6e62891ee6615207
+    0000000000000000.0000000000000000.00d400d7000600a6.0066006100210076
+    0252daa8904c468d.2e1258560acfa50b.e56e2d807b486e6b.c02b54e204c30c34
     58b03067c6e0950c.c1c54a558e6516a0.7aba1bc53859e631.267d655d6c6fb6ae
     fba3b7fbb4d27dc9
 
-VSUBPS_256(reg)
+VPMOVZXBW_128(reg)
   before
     9dea462879789e31.d24c344a41059e1d.b1323b6d0138836d.869d38796db47a33
     679f0e5056ee5594.4df1623d1dc61eed.5ba6270affd5281d.e6e502873565e79e
@@ -14532,12 +14532,12 @@
     e27d3b42ca7875f5.b68a2e046b4d7278.4ed3e183099a08d8.0dcf8a60f0fb3b5e
     8d0a41041bf79b0b
   after
-    679f0e5068bfde9c.4df1623df72fd0a7.5ba6270affd5281d.f45cf4da3565e898
-    679f0e5056ee5594.4df1623d1dc61eed.5ba6270affd5281d.e6e502873565e79e
+    9dea462879789e31.d24c344a41059e1d.b1323b6d0138836d.869d38796db47a33
+    0000000000000000.0000000000000000.0074005c00f400da.00ad007900e9009e
     b50b0cdfe8bfde9c.a56d372c772fd0a7.1c6d0b9823c7405c.745cf4daad79e99e
     e27d3b42ca7875f5.b68a2e046b4d7278.4ed3e183099a08d8.0dcf8a60f0fb3b5e
     8d0a41041bf79b0b
-VSUBPS_256(mem)
+VPMOVZXBW_128(mem)
   before
     d0d894b24979c2d0.4c4097e399a4554c.5c16c3af142bbe8c.4e24a7384edbbc3a
     b207ff56978e6fda.4e9f1c30f0cfba4d.73db721b8ed5700e.78ab59218e159731
@@ -14546,12 +14546,12 @@
     8a83c75442137042
   after
     d0d894b24979c2d0.4c4097e399a4554c.5c16c3af142bbe8c.4e24a7384edbbc3a
-    b207ff56978e6fda.4e9f1c30f0cfba4d.73db721b8ed5700e.78ab59218e159731
-    50d894b2c979c2d0.4e991771f0cfba4d.73db721b942bd93a.78ab5921cedbbc3a
+    0000000000000000.0000000000000000.004e002400a70038.004e00db00bc003a
+    0f61fedd20425c55.43e8c7936b85e2a3.d7a6b833f657462b.28b6f1ac63d4d667
     c3b40d31009f476c.8965927aa85307fb.644310e267befa0e.ba8f6c446ca5b588
     8a83c75442137042
 
-VSUBPS_256(reg)
+VPMOVZXBW_128(reg)
   before
     f5defd4a84aa423e.aacaa94054b3e94c.7a637b5040c56601.f67df616fe1649e4
     55ec0b91cbf7682b.a0704df438890120.742e7d81d1653b60.6922e6bad669efd9
@@ -14559,12 +14559,12 @@
     66509bc2dee1a082.289b9dff1dad7e57.ef5abda44c6436db.62d8d503bb362ece
     a083cc7f00c64026
   after
-    55ec0b91cbf7682b.a0704df4472e4915.742e7d8177c1c1c5.6922e6bad669efd9
-    55ec0b91cbf7682b.a0704df438890120.742e7d81d1653b60.6922e6bad669efd9
+    f5defd4a84aa423e.aacaa94054b3e94c.7a637b5040c56601.f67df616fe1649e4
+    0000000000000000.0000000000000000.009900fc005c00ba.000c00c500a70018
     06f8eb95b6851eb3.8171753bc72e4915.d2119579f7c1c1c5.99fc5cba0cc5a718
     66509bc2dee1a082.289b9dff1dad7e57.ef5abda44c6436db.62d8d503bb362ece
     a083cc7f00c64026
-VSUBPS_256(mem)
+VPMOVZXBW_128(mem)
   before
     2ec6bd1bf683994d.d03e1684e2952946.73b8412e57125c11.2853f36e6fdbd34f
     ea7024c4ba79f46e.a00f58485b2ff6a8.3d96deb3906a9e6f.da4a3243fab1d7cc
@@ -14573,12 +14573,12 @@
     5611fe3e25e79c36
   after
     2ec6bd1bf683994d.d03e1684e2952946.73b8412e57125c11.2853f36e6fdbd34f
-    ea7024c4ba79f46e.a00f58485b2ff6a8.3d96deb3906a9e6f.da4a3243fab1d7cc
-    ea7024c47683994d.503e168462952aa6.f3b8412ed7125c11.da4a3243fab1d7cf
+    0000000000000000.0000000000000000.0028005300f3006e.006f00db00d3004f
+    af4c7e6467b20eb6.320f5d78e73b4257.62ffef7ae5c0019f.5f89769089727cff
     592546e9193ca251.e28a228222444bfd.bdc0f06f712041cb.155dbcbfb9abff94
     5611fe3e25e79c36
 
-VMULPS_256(reg)
+VPMOVZXWD_128(reg)
   before
     7ff33a776ab28f92.c3c8f73eed236e6b.0ccca1d0a7d64b46.2ca55d7e51971a1f
     ec4d6bd823991353.cb02104eff712c2e.0b20d8d0127d7fdf.8a79b394a03047c8
@@ -14586,12 +14586,12 @@
     039d9dbf63e8c0b7.216563544a787066.fd325c930d3d71b0.82220781fdf990c8
     d48ffd3043412377
   after
-    7f800000d148302d.d71e8e0fff800000.0985aea600000000.00010e0bdcab21c6
-    ec4d6bd823991353.cb02104eff712c2e.0b20d8d0127d7fdf.8a79b394a03047c8
+    7ff33a776ab28f92.c3c8f73eed236e6b.0ccca1d0a7d64b46.2ca55d7e51971a1f
+    0000000000000000.0000000000000000.0000b20a00006d9b.00007bf8000085f2
     fa6d8ecced276526.4b9c0a076a3499c9.3dd4c3ed00c62274.b20a6d9b7bf885f2
     039d9dbf63e8c0b7.216563544a787066.fd325c930d3d71b0.82220781fdf990c8
     d48ffd3043412377
-VMULPS_256(mem)
+VPMOVZXWD_128(mem)
   before
     861bcc9668dcfb2b.642a961d226962b1.28289621bc486f32.a787a12dd36ca840
     7293ee9e89d5d40f.79607452c53585c1.3bb01f5bdbb05058.961f8d2af1e103d0
@@ -14600,12 +14600,12 @@
     a170149c68584234
   after
     861bcc9668dcfb2b.642a961d226962b1.28289621bc486f32.a787a12dd36ca840
-    7293ee9e89d5d40f.79607452c53585c1.3bb01f5bdbb05058.961f8d2af1e103d0
-    b9340f65b3389408.7f800000a8257cb7.2467f7ba588a0b5a.0005487e7f800000
+    0000000000000000.0000000000000000.0000a7870000a12d.0000d36c0000a840
+    76c2e133c1386a50.9e8a33cae8d96593.38cb7aecc4bccf05.28461cf30127be0b
     6c7620432c117819.2ff6d0f128df40d2.f94323c19279aa64.b7474af59fcb149e
     a170149c68584234
 
-VMULPS_256(reg)
+VPMOVZXWD_128(reg)
   before
     400b7455f75a837a.327928b9e76dbb97.88ee453421d5502a.5be597c762f29ba2
     f265688ae95e141b.a29973810e57eff5.05bf90fd6e47d248.3b7d51e84f345feb
@@ -14613,12 +14613,12 @@
     fb86fa1d63991621.f45bc7b80d061804.db1c96d575cc1b85.e0be8830f23f4f4c
     5ffffc2ee022f3bd
   after
-    c4b5d8917f800000.0000c0698bba4123.00000000da95dfee.6fd48d647f800000
-    f265688ae95e141b.a29973810e57eff5.05bf90fd6e47d248.3b7d51e84f345feb
+    400b7455f75a837a.327928b9e76dbb97.88ee453421d5502a.5be597c762f29ba2
+    0000000000000000.0000000000000000.000073d60000cd12.000076490000b16a
     11caeca9d9ef31c4.99a07f88bcdccf60.02b5acbaabc002d8.73d6cd127649b16a
     fb86fa1d63991621.f45bc7b80d061804.db1c96d575cc1b85.e0be8830f23f4f4c
     5ffffc2ee022f3bd
-VMULPS_256(mem)
+VPMOVZXWD_128(mem)
   before
     ca67a7f85bfd5ae8.0ae4905125e8ffdd.8d96c7fe1ee4860c.ec4048bc67f75afc
     fec0047a7fdc3ff9.9b32a8b3b86927a5.411cfb470a7fd5a5.916dc0da1ecefbe9
@@ -14627,12 +14627,12 @@
     8f1f9eb6f6cf8028
   after
     ca67a7f85bfd5ae8.0ae4905125e8ffdd.8d96c7fe1ee4860c.ec4048bc67f75afc
-    fec0047a7fdc3ff9.9b32a8b3b86927a5.411cfb470a7fd5a5.916dc0da1ecefbe9
-    7f8000007fdc3ff9.800000009ed434f5.8f38ebbd00000000.3e3294304747fe9e
+    0000000000000000.0000000000000000.0000ec40000048bc.000067f700005afc
+    d7d78fa069cc5f1e.0bba41aebaa8cb25.ecbbe07eeee5c0fa.26eef99b36dc39f7
     3277c55635d77680.b4c954aec72f2608.6b3df18ee5210438.0610ef6b49ae52d3
     8f1f9eb6f6cf8028
 
-VMULPS_256(reg)
+VPMOVZXWD_128(reg)
   before
     1c6703e8d6cbffa3.e96e2088fe0c404e.f3abde207a8c76fa.986faa650c405d8b
     0934196e882e0df0.d9861e23e07478b2.25acdc6e6f4bf5a9.501d87ee7e4d861e
@@ -14640,12 +14640,12 @@
     728c4822cb5bc1ae.d44df140621225ee.cd3b2152911c72e8.d11d9fc6b5613bb6
     5206d0edb2813f13
   after
-    8000251600000000.7893fa0a7f800000.8a4da85f73c4b053.7f8000007f800000
-    0934196e882e0df0.d9861e23e07478b2.25acdc6e6f4bf5a9.501d87ee7e4d861e
+    1c6703e8d6cbffa3.e96e2088fe0c404e.f3abde207a8c76fa.986faa650c405d8b
+    0000000000000000.0000000000000000.00006f1300000515.0000585400003d1e
     b1d2dcb2a585e4ba.de8d3a11f81ddbd8.a418490543f6dfbe.6f13051558543d1e
     728c4822cb5bc1ae.d44df140621225ee.cd3b2152911c72e8.d11d9fc6b5613bb6
     5206d0edb2813f13
-VMULPS_256(mem)
+VPMOVZXWD_128(mem)
   before
     ce9c17766ac00361.a7af5a28963ddf77.9793bd9b3960111d.fc6061bff646e8d1
     21a9ed4ef92845cb.ab880c32a1b67cc2.032b1c0d99125d94.8dd403ba0e027e25
@@ -14654,12 +14654,12 @@
     240216309a155661
   after
     ce9c17766ac00361.a7af5a28963ddf77.9793bd9b3960111d.fc6061bff646e8d1
-    21a9ed4ef92845cb.ab880c32a1b67cc2.032b1c0d99125d94.8dd403ba0e027e25
-    b0cf385cff800000.13ba607f00000087.8000000093001baa.4ab9d436c4cac87b
+    0000000000000000.0000000000000000.0000fc60000061bf.0000f6460000e8d1
+    27fad05f7cc7be7e.dc615cab8952d23a.f4e089849f34c37d.dce305ae73db7092
     bc5b3a970fa92da5.948645ffe89e1d8c.468080eb66d3ff04.45d96206c45df9c1
     240216309a155661
 
-VDIVPS_256(reg)
+VPBLENDVB_128(reg)
   before
     d5aa1e97948ec31c.bc98a9e0cdd84c6d.3145c49a5d259b64.d5d57e2e0bfacf56
     b41c74a84b547b9e.027d9928d262d802.0de9d3e88273866d.7cacfd3aa9b5ed9f
@@ -14667,12 +14667,12 @@
     6c92ff7366f9bfaa.d56de86224b52641.f60e964d4d9595c5.87107358421905c5
     a235624474d977f9
   after
-    d5f29cc72cde4308.00000000d689406f.c69dfe2400000000.7f8000008c2080de
+    0000000000000000.0000000000000000.86e970e882141b54.19acfd3aa9b5ed0b
     b41c74a84b547b9e.027d9928d262d802.0de9d3e88273866d.7cacfd3aa9b5ed9f
     1da516cd5df4bc95.6cd5845a3b538d8f.86bd7055f3141b54.19d27bf95d11160b
     6c92ff7366f9bfaa.d56de86224b52641.f60e964d4d9595c5.87107358421905c5
     a235624474d977f9
-VDIVPS_256(mem)
+VPBLENDVB_128(mem)
   before
     450cc2a7105e28d4.fd2d2c0601f0c38c.1911402ca7966043.ba28413c2c82326b
     4e60116f32b3d482.2cc297f3cb6403e5.138d08a4e302f7c2.2f576e8f2a652cf2
@@ -14682,11 +14682,11 @@
   after
     450cc2a7105e28d4.fd2d2c0601f0c38c.1911402ca7966043.ba28413c2c82326b
     4e60116f32b3d482.2cc297f3cb6403e5.138d08a4e302f7c2.2f576e8f2a652cf2
-    48cbc17161cf3909.80000000ff800000.39f8915c7adef5a0.b4a3e3d63d614ef7
+    0000000000000000.0000000000000000.198d40a4a796f743.ba576e8f2c652cf2
     feb369da75fe0c05.d30f1c8759f324ad.9e3dd94ef0a72be6.97243a0df9432956
     4459d3110254a48b
 
-VDIVPS_256(reg)
+VPBLENDVB_128(reg)
   before
     10d3dc289a8d6d51.5e486a56cf0c0f33.045d2d0756277f75.e509da59f9fa40e2
     58df52bd5f7ac055.938c4ae61f1afee3.43d66e90f2080564.54dc3bc12b06a20c
@@ -14694,12 +14694,12 @@
     ccd77717df9df2c5.eb4d94f30e688b7b.5a796c6d7403856a.16ca0d5c737f3b94
     217d7767c303eb4b
   after
-    1f8f80e8b1405f17.80000000deb927b2.978a07bb6a5463fb.ced66b75ca9e10c9
+    0000000000000000.0000000000000000.43d66e90f208f364.54833bc12b06a28e
     58df52bd5f7ac055.938c4ae61f1afee3.43d66e90f2080564.54dc3bc12b06a20c
     78c7323eeda6d842.784a847780359341.ebc6d98ec723f327.c58378749fda0c8e
     ccd77717df9df2c5.eb4d94f30e688b7b.5a796c6d7403856a.16ca0d5c737f3b94
     217d7767c303eb4b
-VDIVPS_256(mem)
+VPBLENDVB_128(mem)
   before
     c4683180aa71d8df.b05d1db2d2eb4a89.c663f647e6c0a2bb.eb3b22999334f6d8
     d956b79344d5bd7b.80a4217c611d1b3b.e756275f2348932d.f957f87ec043831e
@@ -14709,11 +14709,11 @@
   after
     c4683180aa71d8df.b05d1db2d2eb4a89.c663f647e6c0a2bb.eb3b22999334f6d8
     d956b79344d5bd7b.80a4217c611d1b3b.e756275f2348932d.f957f87ec043831e
-    546cbb5ed9e23f89.0fbe064ecdaaef13.60707e52800042a3.4d93b9336c8a4a43
+    0000000000000000.0000000000000000.e756f6472348a22d.f93b227e9343f6d8
     cd6f185704b1627d.54a32f4ec45a1b18.6606e28c3e18f65a.00d1f024b628e1e0
     b1c60bbdb71629b4
 
-VDIVPS_256(reg)
+VPBLENDVB_128(reg)
   before
     4f4635be36127d10.6331ebe06141993b.10f4322dd17ec29b.7e5b66795479e06c
     389d6b95cfa819a0.dd277a14e1f7b9b2.283683eceab5d2bb.4abda7da3f3a9461
@@ -14721,12 +14721,12 @@
     56ffe772c2ce180a.e8dfbc29bc05a479.dcbcfbb7b18d2084.72dc54a8060d4da2
     8530b8ed1938ca47
   after
-    b204ddb2eebe3ade.ff8000007f800000.800000007ea59bf6.e242e1ae634d2a1f
+    0000000000000000.0000000000000000.f8b51cf6ab8cd225.4af9a79b3f3a9464
     389d6b95cfa819a0.dd277a14e1f7b9b2.283683eceab5d2bb.4abda7da3f3a9461
     c617a7ad2062380f.151d41dda1df7e0d.f8b51cf6ab8c8825.a7f9229b1b68cf64
     56ffe772c2ce180a.e8dfbc29bc05a479.dcbcfbb7b18d2084.72dc54a8060d4da2
     8530b8ed1938ca47
-VDIVPS_256(mem)
+VPBLENDVB_128(mem)
   before
     bdc2cb5672f2017e.45a226505378f23d.323868e24f76e622.30991b9b9747d686
     f65d07cf2d49af74.ed4d60b36fea0553.d0f6c0f6753d0133.5096780efa43e5d4
@@ -14736,11 +14736,11 @@
   after
     bdc2cb5672f2017e.45a226505378f23d.323868e24f76e622.30991b9b9747d686
     f65d07cf2d49af74.ed4d60b36fea0553.d0f6c0f6753d0133.5096780efa43e5d4
-    78113d6b00000355.e7221fbe5bf0a6d3.de2b45ff6543f8bf.5f7b96767f800000
+    0000000000000000.0000000000000000.d038c0e24f76e633.50961b0e9743e5d4
     dbe3efa236fc5f4c.dbe6b7b8b55cc1d9.73cc64dbecffb13e.6323da51a536010b
     0f4bd7f92545854a
 
-VPCMPGTQ_128(reg)
+VPMINSD_128(reg)
   before
     f7c301e192c65387.3f6492d3bd70d985.da6ccb331872e3a2.317da9857511bf91
     76d954738748a76e.141f4fc515b0b92d.022acae275822dff.b2c1893901aa94fd
@@ -14748,12 +14748,12 @@
     ae0a664a7a78d0e8.81730899abc69f79.40797a9090bf2722.6d360f70949e8acd
     5fffadcad311238a
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000
+    0000000000000000.0000000000000000.b06ab0336918da9b.b2c18939add5efad
     76d954738748a76e.141f4fc515b0b92d.022acae275822dff.b2c1893901aa94fd
     ead7cd1da054bdaa.36e0a3635bc9bd70.b06ab0336918da9b.d26682e4add5efad
     ae0a664a7a78d0e8.81730899abc69f79.40797a9090bf2722.6d360f70949e8acd
     5fffadcad311238a
-VPCMPGTQ_128(mem)
+VPMINSD_128(mem)
   before
     848bd6df853b7310.1dbe1d65b13f1dd4.d1a3fc521fb31c75.0ea4236784034f42
     b8a70899c628398b.953feedce036df19.023efb7cd69df090.7634a723e47090a4
@@ -14763,11 +14763,11 @@
   after
     848bd6df853b7310.1dbe1d65b13f1dd4.d1a3fc521fb31c75.0ea4236784034f42
     b8a70899c628398b.953feedce036df19.023efb7cd69df090.7634a723e47090a4
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    0000000000000000.0000000000000000.d1a3fc52d69df090.0ea4236784034f42
     bcbe75b16777120d.0cd8c98b97e1b660.77e106d177958bd1.84bb30fa52f748e5
     e2482eed9828371a
 
-VPCMPGTQ_128(reg)
+VPMINSD_128(reg)
   before
     4a6df775b9b32e43.4552a7e5fff39e6d.c387cd9c58ae42ba.73810bd399bbcb4f
     187487fe5123690c.4da5d27097608e72.f233dab781da341d.c0ba0af56d0e529c
@@ -14775,12 +14775,12 @@
     565bedc454e49a2d.49bb003834438d19.29b200bf7c8038b1.bc2ce64a9a6a2352
     24fbbc552b8ae513
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.f233dab781da341d.c0ba0af50f9adbe4
     187487fe5123690c.4da5d27097608e72.f233dab781da341d.c0ba0af56d0e529c
     a8aadaf5fb052421.b084713d4acc9f47.f628ed49aef1c736.395a7f240f9adbe4
     565bedc454e49a2d.49bb003834438d19.29b200bf7c8038b1.bc2ce64a9a6a2352
     24fbbc552b8ae513
-VPCMPGTQ_128(mem)
+VPMINSD_128(mem)
   before
     4c947c30dd06df52.7dd2bbd9f74c08dc.f616fb4e72cf1414.e81d11838612c339
     12c4a2c7ccebcb3c.7b5d409f80c9aadb.9261df691f7eef63.90b41b036933a37b
@@ -14790,11 +14790,11 @@
   after
     4c947c30dd06df52.7dd2bbd9f74c08dc.f616fb4e72cf1414.e81d11838612c339
     12c4a2c7ccebcb3c.7b5d409f80c9aadb.9261df691f7eef63.90b41b036933a37b
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.9261df691f7eef63.90b41b038612c339
     e41311d8d31d6bbf.68da5fedb6347978.06f54f62387494af.069a0ae3285455db
     8d80e81c3c6b9f52
 
-VPCMPGTQ_128(reg)
+VPMINSD_128(reg)
   before
     6cc3aec098422e32.a9cc522c238398b1.1065f24e9b3a1e6e.97d8d317dbd2d504
     00af5a3bda643f28.7a4ae9eb2181a7fd.fe332c10d785e764.86da2f835e825b5d
@@ -14802,12 +14802,12 @@
     b2b1526779bad604.b4c90a5d94765d56.1bc88568c11bd3fe.f26d612d730a26ce
     26972e423df9e23d
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000
+    0000000000000000.0000000000000000.8d90099fd785e764.86da2f83dd91e2e7
     00af5a3bda643f28.7a4ae9eb2181a7fd.fe332c10d785e764.86da2f835e825b5d
     a390e8fa9b5d0edf.355b5302e72354d0.8d90099f05a10f05.b1c8e091dd91e2e7
     b2b1526779bad604.b4c90a5d94765d56.1bc88568c11bd3fe.f26d612d730a26ce
     26972e423df9e23d
-VPCMPGTQ_128(mem)
+VPMINSD_128(mem)
   before
     2a10c3bf566bd361.896096ef1006d543.d4618ce941857cba.03269dd5a87d6ffa
     d8a69d8dda6bb566.84e7aefffbce4547.72ef54910d5d6e29.a0f74c5355561fa6
@@ -14817,11 +14817,11 @@
   after
     2a10c3bf566bd361.896096ef1006d543.d4618ce941857cba.03269dd5a87d6ffa
     d8a69d8dda6bb566.84e7aefffbce4547.72ef54910d5d6e29.a0f74c5355561fa6
-    0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000
+    0000000000000000.0000000000000000.d4618ce90d5d6e29.a0f74c53a87d6ffa
     a6540dcf95473ac0.56b050633eff6a50.941ca6e46c95bad6.6d225f347396a9bc
     5414bb6d1b17fc7f
 
-VPEXTRQ_128_0x0(reg)
+VPMAXSD_128(reg)
   before
     62a99f68fa3c52a1.7d059b1c043a566f.e58ad090ce8097ad.d0532968370d8c6c
     f12c0690ac93e8cf.6f015d6a4feb53ad.076c16f423ad2580.f9b1e2b8907e21bd
@@ -14829,12 +14829,12 @@
     06304d17f705c4fe.150e6fbde6bade8d.797ce1118a385836.820de66c5b79823f
     9ba329a8041bc7c8
   after
-    62a99f68fa3c52a1.7d059b1c043a566f.e58ad090ce8097ad.d0532968370d8c6c
+    0000000000000000.0000000000000000.1aa31dfb23ad2580.f9b1e2b893f334f5
     f12c0690ac93e8cf.6f015d6a4feb53ad.076c16f423ad2580.f9b1e2b8907e21bd
     5eebec51cca8fab5.5916d0a79067eca9.1aa31dfbd8115274.eb004dc093f334f5
     06304d17f705c4fe.150e6fbde6bade8d.797ce1118a385836.820de66c5b79823f
-    d0532968370d8c6c
-VPEXTRQ_128_0x0(mem)
+    9ba329a8041bc7c8
+VPMAXSD_128(mem)
   before
     10909361abe5bfbb.4348264ec8388156.80b6b69a6aeee585.80415fa2d5af7471
     be9f9f816ce42545.727f7162dbcd6e6a.76da21293b11bcbf.8b3f911a5301e2d2
@@ -14842,13 +14842,13 @@
     35518daaa9ae2ecd.177952d23949c776.73c6540d2d52cda3.1c1506705e68a2b5
     5b86402522946d8e
   after
-    10909361abe5bfbb.4348264ec8388156.80b6b69a6aeee585.f5c275e5a2bbdd05
+    10909361abe5bfbb.4348264ec8388156.80b6b69a6aeee585.80415fa2d5af7471
     be9f9f816ce42545.727f7162dbcd6e6a.76da21293b11bcbf.8b3f911a5301e2d2
-    819bc9f66222b692.ef212cc0cd4ec7e6.d3462d56722e2164.f5c275e5a2bbdd05
+    0000000000000000.0000000000000000.76da21296aeee585.8b3f911a5301e2d2
     35518daaa9ae2ecd.177952d23949c776.73c6540d2d52cda3.1c1506705e68a2b5
     5b86402522946d8e
 
-VPEXTRQ_128_0x0(reg)
+VPMAXSD_128(reg)
   before
     0d5f20728bcc7a3e.b68d688b5e914823.44d5e006bc4aacc5.3225143a88887fa6
     90eda1c2349b046f.e01bd5849cd9c2bf.d37fd0c7f1dbaf7f.ec31e8c99edcf199
@@ -14856,12 +14856,12 @@
     7558761ab72e8205.9f5c556e25c6c07c.87f0cb9fe4e306e7.c17bbdbe6d100802
     9452b6fc5d0725d0
   after
-    0d5f20728bcc7a3e.b68d688b5e914823.44d5e006bc4aacc5.3225143a88887fa6
+    0000000000000000.0000000000000000.20c42080758b0f52.7db44da79edcf199
     90eda1c2349b046f.e01bd5849cd9c2bf.d37fd0c7f1dbaf7f.ec31e8c99edcf199
     3e7cbf80b98d48cd.8fc65081809256ce.20c42080758b0f52.7db44da78c5be1aa
     7558761ab72e8205.9f5c556e25c6c07c.87f0cb9fe4e306e7.c17bbdbe6d100802
-    3225143a88887fa6
-VPEXTRQ_128_0x0(mem)
+    9452b6fc5d0725d0
+VPMAXSD_128(mem)
   before
     d205b34b794df23e.8fcdc2fbca0bedc3.eca76037a883bef4.644fcd8fd871d1ed
     57603099ddec2c78.ea26a08f8db0c6b2.5175eec824d40a63.132c23bcefc0ac0e
@@ -14869,13 +14869,13 @@
     a53c9cdfea6bd603.cfb8fe81947eb2d6.d8c480f279647ed4.5794b87df5d28152
     a4b6efea1cadf3ce
   after
-    d205b34b794df23e.8fcdc2fbca0bedc3.eca76037a883bef4.f0d5c892c55cd3f6
+    d205b34b794df23e.8fcdc2fbca0bedc3.eca76037a883bef4.644fcd8fd871d1ed
     57603099ddec2c78.ea26a08f8db0c6b2.5175eec824d40a63.132c23bcefc0ac0e
-    fe2eaad1a3f38fab.e0b10a429ca7497f.ac907a0db6c661f4.f0d5c892c55cd3f6
+    0000000000000000.0000000000000000.5175eec824d40a63.644fcd8fefc0ac0e
     a53c9cdfea6bd603.cfb8fe81947eb2d6.d8c480f279647ed4.5794b87df5d28152
     a4b6efea1cadf3ce
 
-VPEXTRQ_128_0x0(reg)
+VPMAXSD_128(reg)
   before
     33876943d57a6516.275782afcc63beab.118878b610c13c62.b1df7c648aba1e2e
     5f5323f6bdc312d4.6049d82d65e403d0.036d724eadfa24cf.13aceb4d04d5fd30
@@ -14883,12 +14883,12 @@
     030b431687ff1069.66e4c5e32eb69340.68a5db59b884fdff.e18a0f39a48867d6
     0635bc1303376ad3
   after
-    33876943d57a6516.275782afcc63beab.118878b610c13c62.b1df7c648aba1e2e
+    0000000000000000.0000000000000000.036d724e06b7a6cb.13aceb4d04d5fd30
     5f5323f6bdc312d4.6049d82d65e403d0.036d724eadfa24cf.13aceb4d04d5fd30
     8666176d6f1737b7.2bde1a45d2fc619e.02b3eab606b7a6cb.d9f6489b03c0d703
     030b431687ff1069.66e4c5e32eb69340.68a5db59b884fdff.e18a0f39a48867d6
-    b1df7c648aba1e2e
-VPEXTRQ_128_0x0(mem)
+    0635bc1303376ad3
+VPMAXSD_128(mem)
   before
     23c1cb153bdb9c26.328fa35ca209d897.eb2653f4961e56e3.929141a25eeb661a
     16fab92b6880b9fc.6e3f31ab5bc0cdec.986f4262254166b2.dcc118ff957a1dc6
@@ -14896,13 +14896,13 @@
     eaa71f4313faa2e0.824ecc141a6728be.d649310a2ae55b86.41200aa2243e6483
     13e71dc0b48b6cec
   after
-    23c1cb153bdb9c26.328fa35ca209d897.eb2653f4961e56e3.a3825ddbf8bd5eb0
+    23c1cb153bdb9c26.328fa35ca209d897.eb2653f4961e56e3.929141a25eeb661a
     16fab92b6880b9fc.6e3f31ab5bc0cdec.986f4262254166b2.dcc118ff957a1dc6
-    b9ae0141a7317c81.1565eb6e4fb12915.488c0e1bf82a7eda.a3825ddbf8bd5eb0
+    0000000000000000.0000000000000000.eb2653f4254166b2.dcc118ff5eeb661a
     eaa71f4313faa2e0.824ecc141a6728be.d649310a2ae55b86.41200aa2243e6483
     13e71dc0b48b6cec
 
-VPEXTRQ_128_0x1(reg)
+VANDPD_128(reg)
   before
     752392a14530b296.83b38f1dc9e7e746.1045d006566e0892.2072291ad77fb9e4
     c31f63b272b8722e.629ccdbce40506df.1d98f3b1a252033d.00d371391c03541d
@@ -14910,12 +14910,12 @@
     938b0e1011a14ed7.5d38a5f5bb01c557.207e87e3d4e43ccc.f66ce151ddfa2fd6
     c33c02229086e8ae
   after
-    752392a14530b296.83b38f1dc9e7e746.1045d006566e0892.2072291ad77fb9e4
+    0000000000000000.0000000000000000.019032818000022d.001301101402441d
     c31f63b272b8722e.629ccdbce40506df.1d98f3b1a252033d.00d371391c03541d
     59288e5dd7afe760.612f560a815fbcd6.0391328198a0566d.53378552157ee75f
     938b0e1011a14ed7.5d38a5f5bb01c557.207e87e3d4e43ccc.f66ce151ddfa2fd6
-    1045d006566e0892
-VPEXTRQ_128_0x1(mem)
+    c33c02229086e8ae
+VANDPD_128(mem)
   before
     987462b14b2bcd12.cd92df35bb1be23f.33833667aff8dd8f.cea9f041f2a8f306
     4fe07feb2af79b2e.638afd3a72a8e146.bddb864e784fbfaa.6b5f6809907ab5c8
@@ -14923,13 +14923,13 @@
     d684de0cc132e242.137c1190762c0bdb.61e64f28fb4fd438.de9b7683b5764c93
     6cba040e76b899f4
   after
-    987462b14b2bcd12.cd92df35bb1be23f.33833667aff8dd8f.d80d0f95331328d4
+    987462b14b2bcd12.cd92df35bb1be23f.33833667aff8dd8f.cea9f041f2a8f306
     4fe07feb2af79b2e.638afd3a72a8e146.bddb864e784fbfaa.6b5f6809907ab5c8
-    c54cd5ba47f50e30.b1be648ad2d48596.d80d0f95331328d4.51ececa647e6bebe
+    0000000000000000.0000000000000000.3183064628489d8a.4a0960019028b100
     d684de0cc132e242.137c1190762c0bdb.61e64f28fb4fd438.de9b7683b5764c93
     6cba040e76b899f4
 
-VPEXTRQ_128_0x1(reg)
+VANDPD_128(reg)
   before
     589391b22537e28c.5f5318cbb2b8d290.e50effbafa3baec3.3230c1f3ed0f7f02
     ff731adb5e806209.3a87fee536969b47.82c22a73fb8eabf7.28b8e1e22460e460
@@ -14937,12 +14937,12 @@
     e9780c6de19dfb5b.5949bed76983a79f.92bb2843e22da3fa.f3b11cddd2e2ce82
     80bb2fc0812bcc9f
   after
-    589391b22537e28c.5f5318cbb2b8d290.e50effbafa3baec3.3230c1f3ed0f7f02
+    0000000000000000.0000000000000000.00c20a2010802a26.080820e02440c060
     ff731adb5e806209.3a87fee536969b47.82c22a73fb8eabf7.28b8e1e22460e460
     bba699f6be1e5714.44ea0c456ad5f993.48e28f2814b03e26.1f492ce1bc4cc07c
     e9780c6de19dfb5b.5949bed76983a79f.92bb2843e22da3fa.f3b11cddd2e2ce82
-    e50effbafa3baec3
-VPEXTRQ_128_0x1(mem)
+    80bb2fc0812bcc9f
+VANDPD_128(mem)
   before
     a232e078e63574ff.e5356ead628a8b8a.557090874fab6398.bc98f3310091151f
     36e3acef1d0b82cd.0b28bb23dd70424d.142aff413a5ae6a9.21c7eb5f0a69d242
@@ -14950,13 +14950,13 @@
     1e2381cf6e4dc465.46e4075d3358183c.4b8ba183887a38c6.1147532755a31731
     5230bb99cd1d1855
   after
-    a232e078e63574ff.e5356ead628a8b8a.557090874fab6398.724586f1439befff
+    a232e078e63574ff.e5356ead628a8b8a.557090874fab6398.bc98f3310091151f
     36e3acef1d0b82cd.0b28bb23dd70424d.142aff413a5ae6a9.21c7eb5f0a69d242
-    169a0d1341bab436.b89fef39efdc5d4f.724586f1439befff.1f920d379e41130f
+    0000000000000000.0000000000000000.142090010a0a6288.2080e31100011002
     1e2381cf6e4dc465.46e4075d3358183c.4b8ba183887a38c6.1147532755a31731
     5230bb99cd1d1855
 
-VPEXTRQ_128_0x1(reg)
+VANDPD_128(reg)
   before
     409a40fba23a5327.2c49830fc1d06f87.1244fefa4672afc1.7bcacde325047f29
     35d1deb86f870452.1bda8fbf555071c7.780bd07bc3b65d8a.decc84fe35447d55
@@ -14964,12 +14964,12 @@
     a8d556f362deb765.0c69b61fb2746854.82fdf6de6de9f197.ad4b88111f1795b6
     d161cce232c22643
   after
-    409a40fba23a5327.2c49830fc1d06f87.1244fefa4672afc1.7bcacde325047f29
+    0000000000000000.0000000000000000.5001504a43a65d02.504c04be14447155
     35d1deb86f870452.1bda8fbf555071c7.780bd07bc3b65d8a.decc84fe35447d55
     8f21913cd08f6682.c7a022cb47d88553.d485794e47af5f43.505e44bed446f175
     a8d556f362deb765.0c69b61fb2746854.82fdf6de6de9f197.ad4b88111f1795b6
-    1244fefa4672afc1
-VPEXTRQ_128_0x1(mem)
+    d161cce232c22643
+VANDPD_128(mem)
   before
     976b8d1d2853604a.de3a2849c10130a5.c6ffc9a7b331d6f9.dec14198d2f04f32
     dd3446ad1dd7fef4.8b9d03ab878310ee.d12ed64f651a8b6c.441b58e61151b4c1
@@ -14977,13 +14977,13 @@
     5636908276e559e8.be88c43ebfd5f04e.498ccfb14da1b86d.9dc4d8f18f4f856b
     49ab388705036adc
   after
-    976b8d1d2853604a.de3a2849c10130a5.c6ffc9a7b331d6f9.08c45a04e43b42d9
+    976b8d1d2853604a.de3a2849c10130a5.c6ffc9a7b331d6f9.dec14198d2f04f32
     dd3446ad1dd7fef4.8b9d03ab878310ee.d12ed64f651a8b6c.441b58e61151b4c1
-    7e8972802e59bd70.0c48e38353f091ed.08c45a04e43b42d9.0f583635c7975df0
+    0000000000000000.0000000000000000.c02ec00721108268.4401408010500400
     5636908276e559e8.be88c43ebfd5f04e.498ccfb14da1b86d.9dc4d8f18f4f856b
     49ab388705036adc
 
-VPSRLQ_0x05_128(reg)
+VMULPD_256(reg)
   before
     6f595462c64246f2.4007199d12888e88.fba8a34967bd69bc.6f51b341bc57a854
     6b1927ed6e955657.1ac88bbe1d4d177d.20f67b0ee83438e4.55e181a24c69d0b9
@@ -14991,12 +14991,12 @@
     5403e3c8e0ac00c0.0a4816c3f26e1815.9348067be301c610.d68dcc8440d3b3b0
     274140dddd42e699
   after
-    0000000000000000.0000000000000000.049a4033df180e30.06b46e6422069d9d
+    c3642fa7bd16452a.9a1f4335cf3ae569.8000000000000000.eef8d91abce861fb
     6b1927ed6e955657.1ac88bbe1d4d177d.20f67b0ee83438e4.55e181a24c69d0b9
     9839ad96988ad5b8.bf4460d1b440b1f3.8abc48fbddc79871.d906b5bf19e4eac9
     5403e3c8e0ac00c0.0a4816c3f26e1815.9348067be301c610.d68dcc8440d3b3b0
     274140dddd42e699
-VPSRLQ_0x05_128(mem)
+VMULPD_256(mem)
   before
     aaf08fb60b3e41b1.fac4c3efe388131c.d9a1297ef4e20710.98e4b2fa956efd6d
     396434fbe6d27e23.e5c84b773da94a78.061913f0d5a83b10.f5dd47e48f9b7b33
@@ -15006,11 +15006,11 @@
   after
     aaf08fb60b3e41b1.fac4c3efe388131c.d9a1297ef4e20710.98e4b2fa956efd6d
     396434fbe6d27e23.e5c84b773da94a78.061913f0d5a83b10.f5dd47e48f9b7b33
-    b26bab988b0b591c.735b76cc889be17f.6f7d5204b1cd7040.067fc1a56e137a0f
+    a464ea7b5b15e67a.7ff0000000000000.9fcae639f9012ddb.4ed2f0b40b85ef0e
     efcf717a15f490c7.ffc8415a63ea13dd.ee9861a6a55c62cc.27151ca9ce6236ac
     b4ed545d4a15edb7
 
-VPSRLQ_0x05_128(reg)
+VMULPD_256(reg)
   before
     0951662b7fb7d9dc.ce5d018ba199dd51.e45da68e67231d40.6138bcc2cd62cce2
     828e4d8007d437c6.29e1d6b94a06fde6.8064a3d233d23a52.a227df4444ea6bac
@@ -15018,12 +15018,12 @@
     50c38a7187b1389b.c7fa4518656aa5df.49fb523e8dbea034.02266e2a90b0370d
     d8cdd2669e07dcfd
   after
-    0000000000000000.0000000000000000.024fda91f46df501.00113371548581b8
+    be8e5875e397f9ee.c71a21758c5cb972.8000000000000000.0000000000000000
     828e4d8007d437c6.29e1d6b94a06fde6.8064a3d233d23a52.a227df4444ea6bac
     7bf005c981f94322.dd276fee2d48abb1.2d2a33946081a7bf.8e3347182600fb56
     50c38a7187b1389b.c7fa4518656aa5df.49fb523e8dbea034.02266e2a90b0370d
     d8cdd2669e07dcfd
-VPSRLQ_0x05_128(mem)
+VMULPD_256(mem)
   before
     edf4eeb96b10a651.5d53d9e3b58953de.c128d6220f79a59c.2e23fc3e5314615d
     1d663f0d13d85136.feecec8da80cd097.a87b9cf8467f6813.39ed2eff501026e5
@@ -15033,11 +15033,11 @@
   after
     edf4eeb96b10a651.5d53d9e3b58953de.c128d6220f79a59c.2e23fc3e5314615d
     1d663f0d13d85136.feecec8da80cd097.a87b9cf8467f6813.39ed2eff501026e5
-    45f14050b36a98d7.8fd9c1dafbc6ea71.58c01586268ba970.c7a7e3ed203d2a79
+    cb6d1abc09399a71.fff0000000000000.29b56e81555959d1.282239f288f33dcc
     3f5f6c6d66d23861.6c6753364b43df19.aec3bdb8cca625e0.329b17745e27aac4
     d716c600a65be173
 
-VPSRLQ_0x05_128(reg)
+VMULPD_256(reg)
   before
     1365edfd95640d32.e87d414f491ced00.f0e29f0d3310e93a.84500e7a54de988f
     40d186d7c7ce68ac.1c173be4775572df.79969fcc50b84481.b73286b9d93ebea9
@@ -15045,12 +15045,12 @@
     e03804d361f79d84.95ef8ad426c2df0f.07d9b0ad97cbe130.a429d85a4ba811cb
     16d5aa9470c9b72c
   after
-    0000000000000000.0000000000000000.003ecd856cbe5f09.05214ec2d25d408e
+    bc8c006a2fc31d97.9422c0c803b101a8.7ff0000000000000.9a7b5b5cf574d5b6
     40d186d7c7ce68ac.1c173be4775572df.79969fcc50b84481.b73286b9d93ebea9
     bba98ffbd7262e8e.b7f9d4170d88852b.62cf51dd3dc82e9a.2337a05f77d35259
     e03804d361f79d84.95ef8ad426c2df0f.07d9b0ad97cbe130.a429d85a4ba811cb
     16d5aa9470c9b72c
-VPSRLQ_0x05_128(mem)
+VMULPD_256(mem)
   before
     550793fb0343ffa8.0bc9dfcd02ceef39.92c5d807de0e3fb8.c3ffb9a9f94d9aef
     3d8b0e7a2021a76b.98a91e5355356159.8a463a9d53785f52.f48f663b00da9485
@@ -15060,11 +15060,11 @@
   after
     550793fb0343ffa8.0bc9dfcd02ceef39.92c5d807de0e3fb8.c3ffb9a9f94d9aef
     3d8b0e7a2021a76b.98a91e5355356159.8a463a9d53785f52.f48f663b00da9485
-    aa2d97fde16f69a0.e324bbd3f7ba2f91.593f2c809e0dfd08.f4d3b5d147ff0d9c
+    52a3ef86846c90e2.8000000000000000.0000000000000000.789f2136f677ed31
     78b8aa7065390173.4986b4b883e9948d.db7c2b9dddd8d207.2118a1d66a483fe0
     d6aa26b6063f66fe
 
-VPMULUDQ_128(reg)
+VMOVUPD_EtoG_128(reg)
   before
     6ed440ddb772c0a2.83f9c3bfc58c2d11.241b056e964ccdf9.ecc9b2e12ce59d7a
     46e4ecb7186c8777.a7bd5fd62074a7a6.d12fa861cb721680.68f23d37a641188e
@@ -15072,12 +15072,12 @@
     27e1e7345be74e67.a9f90d0d302f7763.1002d9ae0d30c690.100750c88c131148
     f58bcfdc30a20646
   after
-    0000000000000000.0000000000000000.987fd82302bf1b00.438499f7e93ba592
+    6ed440ddb772c0a2.83f9c3bfc58c2d11.241b056e964ccdf9.ecc9b2e12ce59d7a
     46e4ecb7186c8777.a7bd5fd62074a7a6.d12fa861cb721680.68f23d37a641188e
     bb2425b0c5baf82a.bfcef9a18ffb2c5d.ab0d9bfdbfe4aace.2bc3488a67f7006f
-    27e1e7345be74e67.a9f90d0d302f7763.1002d9ae0d30c690.100750c88c131148
+    0000000000000000.0000000000000000.ab0d9bfdbfe4aace.2bc3488a67f7006f
     f58bcfdc30a20646
-VPMULUDQ_128(mem)
+VMOVUPD_EtoG_128(mem)
   before
     b51c43b270af9c94.e8682eb0757fc7d9.400917041f1c45e4.5b5b5ee052e1a672
     2c84273667468f5f.5802f68eb00f9d2c.60cc947477cc520b.e86226002983861f
@@ -15087,11 +15087,11 @@
   after
     b51c43b270af9c94.e8682eb0757fc7d9.400917041f1c45e4.5b5b5ee052e1a672
     2c84273667468f5f.5802f68eb00f9d2c.60cc947477cc520b.e86226002983861f
-    0000000000000000.0000000000000000.0e8ef8fd124a08cc.0d70b88c94c8d3ce
+    0000000000000000.0000000000000000.400917041f1c45e4.5b5b5ee052e1a672
     ae0b30f9ec447b1a.b9a7fb24f7445228.aa97d36bd4ab18fd.38ac71b6fecc358d
     b288eb25358b7ba5
 
-VPMULUDQ_128(reg)
+VMOVUPD_EtoG_128(reg)
   before
     df4298306e6bb239.72c34d0fb2c2ec63.61482fb43b02a929.8d378ecb10f14920
     1a27744545f814f4.5c82ca839ffbaad8.292fd45710e74ebb.68b9ac53262ba999
@@ -15099,12 +15099,12 @@
     29a2ab3a3f4a4c92.1648d53760ccfbf9.89fa6386db577144.7a92fd8b4eace540
     69822913990b39c6
   after
-    0000000000000000.0000000000000000.0127c733a09804ce.075d8f282d9833a6
+    df4298306e6bb239.72c34d0fb2c2ec63.61482fb43b02a929.8d378ecb10f14920
     1a27744545f814f4.5c82ca839ffbaad8.292fd45710e74ebb.68b9ac53262ba999
     bf837ccf57bfde83.4a152342d0fa70a6.6da6e779117f7c8a.19e8a8ef3165f496
-    29a2ab3a3f4a4c92.1648d53760ccfbf9.89fa6386db577144.7a92fd8b4eace540
+    0000000000000000.0000000000000000.6da6e779117f7c8a.19e8a8ef3165f496
     69822913990b39c6
-VPMULUDQ_128(mem)
+VMOVUPD_EtoG_128(mem)
   before
     c083a8732c8eac51.b6d0fdf29a2899cc.9ee75b4d6c7b07fc.da7644ea09fa6792
     5d62f4982642f910.c0596e6404e202dd.bcbe30720f1550dc.ba68861137f59b23
@@ -15114,11 +15114,11 @@
   after
     c083a8732c8eac51.b6d0fdf29a2899cc.9ee75b4d6c7b07fc.da7644ea09fa6792
     5d62f4982642f910.c0596e6404e202dd.bcbe30720f1550dc.ba68861137f59b23
-    0000000000000000.0000000000000000.06643dd317e59c90.022e5ef176ab8ef6
+    0000000000000000.0000000000000000.9ee75b4d6c7b07fc.da7644ea09fa6792
     d5eae8ddb96b14d5.bfaa9e21721f1838.2e43bd968b3987e1.9ada1e59061fabb8
     52f26c51de680016
 
-VPMULUDQ_128(reg)
+VMOVUPD_EtoG_128(reg)
   before
     0aaf0bbd26388364.682b87d58af85a33.6c0b5546aeba3cd8.39896b6d9ddaee5e
     1e5df7087b1b6f51.b079e44232e56a74.06f71cd469626c00.4c375a03b6958168
@@ -15126,12 +15126,12 @@
     c9bba7eaba4b75b2.d070ca287010db4d.75a0c6dacb0adf97.f5fbe8176e8b1ed2
     44a9806f45dea08a
   after
-    0000000000000000.0000000000000000.1a32b0404b8ed000.aceee863e3588478
+    0aaf0bbd26388364.682b87d58af85a33.6c0b5546aeba3cd8.39896b6d9ddaee5e
     1e5df7087b1b6f51.b079e44232e56a74.06f71cd469626c00.4c375a03b6958168
     e9482d9d799d0187.89a27c0fca3e01c3.ebbaed363fa3e45c.41190542f277fd2b
-    c9bba7eaba4b75b2.d070ca287010db4d.75a0c6dacb0adf97.f5fbe8176e8b1ed2
+    0000000000000000.0000000000000000.ebbaed363fa3e45c.41190542f277fd2b
     44a9806f45dea08a
-VPMULUDQ_128(mem)
+VMOVUPD_EtoG_128(mem)
   before
     0bee4734947b3e7e.1904635addb0077f.5fb04a794066b43e.02f4a22baa229a5e
     2498bb54766eb5db.356d5d597c59f29a.132e78ee554d47c1.ec047d957777515c
@@ -15141,11 +15141,11 @@
   after
     0bee4734947b3e7e.1904635addb0077f.5fb04a794066b43e.02f4a22baa229a5e
     2498bb54766eb5db.356d5d597c59f29a.132e78ee554d47c1.ec047d957777515c
-    0000000000000000.0000000000000000.15758ac9d61114be.4f6561e98af937c8
+    0000000000000000.0000000000000000.5fb04a794066b43e.02f4a22baa229a5e
     bf46985265871d7f.41d2f7b49fa4c669.5a13cff5bffb8d2f.4a8320644c0aa2b0
     778be1a18d5fb45d
 
-VPSLLQ_0x05_128(reg)
+VADDPD_256(reg)
   before
     717d91a82c22b2f2.f9e3f808aac6871e.e8668fe95b5e2674.a613f05e4ddab972
     95a72ce3c5ded81b.f613f5c8f28ab8d5.cc4b555c038cd07d.8680af9c907a8ff8
@@ -15153,12 +15153,12 @@
     cbcf14aa57728ad6.a960b316fdd6663e.b73659b08a72f138.75d4f843a62b2b7b
     3c537a85b15469d0
   after
-    0000000000000000.0000000000000000.e6cb36114e5e2700.ba9f0874c5656f60
+    3f53afc0f51f6183.f613f5c8f28ab8d5.cc4b555c038cd07d.d7278999a4e7cbec
     95a72ce3c5ded81b.f613f5c8f28ab8d5.cc4b555c038cd07d.8680af9c907a8ff8
     3f53afc0f51f6183.92a40a7e5ae16fd1.48cc457b34b90030.d7278999a4e7cbec
     cbcf14aa57728ad6.a960b316fdd6663e.b73659b08a72f138.75d4f843a62b2b7b
     3c537a85b15469d0
-VPSLLQ_0x05_128(mem)
+VADDPD_256(mem)
   before
     08708a4be26d4218.9565590c88628ec1.17156c7df7765b47.77d68f69a042e142
     b4f6a4815483727f.f9627954237cabf0.b88db29d65cc0719.e2f6e21113b50afa
@@ -15168,11 +15168,11 @@
   after
     08708a4be26d4218.9565590c88628ec1.17156c7df7765b47.77d68f69a042e142
     b4f6a4815483727f.f9627954237cabf0.b88db29d65cc0719.e2f6e21113b50afa
-    1eb2451324a1b430.531170edc54a1b0f.6895006463e429df.56e24e147e58a80b
+    b4f6a4815483727f.f9627954237cabf0.b88db29d65cc0719.77d68f69a042e142
     2171e7ed6dd3c558.ffc03b43095b1bc9.03f9d2bc0ccb7bc6.2de8cfde7db6f921
     c55362dbad5b37ea
 
-VPSLLQ_0x05_128(reg)
+VADDPD_256(reg)
   before
     786e0277a9d39f10.99fd08fb4c266122.59b9d4c28c38e6ca.6584a4937c8cbafa
     a486ab1e0eab6c3f.6223232adca544bb.bd4a39d6e96fb9bf.6904f3d4d033a2a6
@@ -15180,12 +15180,12 @@
     d2dd083e81a9296b.566c38978158cd09.135f556ea3186734.cc0ef44492655b18
     e2319f4b3907a536
   after
-    0000000000000000.0000000000000000.6beaadd4630ce680.81de88924cab6300
+    a486b0f45e098836.6223232adca544bb.bd4a39d6e96fb9bf.ed43396b23cdeef7
     a486ab1e0eab6c3f.6223232adca544bb.bd4a39d6e96fb9bf.6904f3d4d033a2a6
     a3e7593d786fdc24.58aeb4643a5c294f.87bd66ecbd8bd054.ed43396b23cdeef7
     d2dd083e81a9296b.566c38978158cd09.135f556ea3186734.cc0ef44492655b18
     e2319f4b3907a536
-VPSLLQ_0x05_128(mem)
+VADDPD_256(mem)
   before
     0a78b76c32c0887d.8eb4b58fc8e790bf.3a272aadcda4eb15.bd7c03ca37a3b90c
     22afb6939c9bbf18.31b85b9ae7b54ccd.dfad06943b4d41a1.e15f6d6a16b70388
@@ -15195,11 +15195,11 @@
   after
     0a78b76c32c0887d.8eb4b58fc8e790bf.3a272aadcda4eb15.bd7c03ca37a3b90c
     22afb6939c9bbf18.31b85b9ae7b54ccd.dfad06943b4d41a1.e15f6d6a16b70388
-    05a11aad90a40733.1834f6cd7a9d9a40.20c84837e75d89d7.da568ebcdce18153
+    22afb6939c9bbf18.31b85b9ae7b54ccd.dfad06943b4d41a1.e15f6d6a16b70388
     8e1c5ea42ce81bfc.9f7582931d2db6c5.db456c82ece280e3.06ab622b24ac6f1a
     c0ace6238aa40888
 
-VPSLLQ_0x05_128(reg)
+VADDPD_256(reg)
   before
     63a3150fab55894a.9beafe668c72b99d.23c7fc586ef1dc08.eaefef6166e8e1f2
     4ddcea5e224c2e0c.06d877ddcb4f9b42.fe765f88067347b4.2b944cc072796a30
@@ -15207,12 +15207,12 @@
     62497ccd853ad23d.6a43e09f582f1d4b.2c1bd0d981e7dff9.affb84aeae72dee7
     aa55581616f143b9
   after
-    0000000000000000.0000000000000000.837a1b303cfbff20.ff7095d5ce5bdce0
+    d9a564798c153279.adb243f7068a7e18.fe765f88067347b4.78ffff8b2ba4d5c8
     4ddcea5e224c2e0c.06d877ddcb4f9b42.fe765f88067347b4.2b944cc072796a30
     d9a564798c153279.adb243f7068a7e18.8dcea78f83423476.78ffff8b2ba4d5c8
     62497ccd853ad23d.6a43e09f582f1d4b.2c1bd0d981e7dff9.affb84aeae72dee7
     aa55581616f143b9
-VPSLLQ_0x05_128(mem)
+VADDPD_256(mem)
   before
     47d9f5ad802cbe69.46132fc6a7494a06.1b59c9c1dd4a3606.37a8d6d29bf083ea
     6053d961072f0c23.df507ad191cdd67e.9abf7b49b2e88376.0ac3b6e76de85ef5
@@ -15222,11 +15222,11 @@
   after
     47d9f5ad802cbe69.46132fc6a7494a06.1b59c9c1dd4a3606.37a8d6d29bf083ea
     6053d961072f0c23.df507ad191cdd67e.9abf7b49b2e88376.0ac3b6e76de85ef5
-    d28f7f1dc807e815.8b4d5858dc53b151.c4407023f314c1c6.01b66b82945baac5
+    6053d961072f0c23.df507ad191cdd67e.1b59c1e30add7be5.37a8d6d29bf083ea
     7a5864ccdebf1068.a454c5c92666182c.76a9263bbbdbab23.78cef111acd6a307
     cb5744fe50e48766
 
-VPMAXUD_128(reg)
+VSUBPD_256(reg)
   before
     569d61b71c12908f.327c025c66643e4b.88b1be8f0b9247bb.8ac6187e2647feb9
     75eb43a7adeafa2e.d7c5d7b87b012fe8.91b23d15266479a9.dd63c2d6516776b3
@@ -15234,12 +15234,12 @@
     ded346dc8ccee57c.59f91384be534802.86ccc2167027d954.b14c2f7955ecc486
     e930ea9c666a12b6
   after
-    0000000000000000.0000000000000000.91b23d15266479a9.dd63c2d65744cf3e
+    75eb43a7adeafa2e.d7c5d7b87b012fe8.9ca240c91467eba3.dd63c2d6516776b3
     75eb43a7adeafa2e.d7c5d7b87b012fe8.91b23d15266479a9.dd63c2d6516776b3
     838fe63a9efb03ee.46005ecc3aa29e6c.1ca240c91467eba3.4c4ba1305744cf3e
     ded346dc8ccee57c.59f91384be534802.86ccc2167027d954.b14c2f7955ecc486
     e930ea9c666a12b6
-VPMAXUD_128(mem)
+VSUBPD_256(mem)
   before
     d0c44d85a7cb75fa.e1045ff912f1dd83.ed7c73cd2321e9d7.297dc068d6317f69
     42d4d41f331aa87f.e86e2efdcdef27b0.de54f99186183d16.6201342ce310188e
@@ -15249,11 +15249,11 @@
   after
     d0c44d85a7cb75fa.e1045ff912f1dd83.ed7c73cd2321e9d7.297dc068d6317f69
     42d4d41f331aa87f.e86e2efdcdef27b0.de54f99186183d16.6201342ce310188e
-    0000000000000000.0000000000000000.ed7c73cd86183d16.6201342ce310188e
+    50c44d85a7cb75fa.e86e2efdcdef27b0.6d7c73cd2321e9d7.6201342ce310188e
     3798401b9eb271fc.711cdb6b50ad9f2b.4737673eb4adec85.07b273b5617e16b6
     2a7635540925f212
 
-VPMAXUD_128(reg)
+VSUBPD_256(reg)
   before
     533e5e13c8d1b22d.72e41c55b5147f4b.acf9b1ad508646d0.77d947feb864c00c
     de54eb60390f92b3.a8db0cf087954d8a.5a3e2c85f4692f4c.74013deb297436ae
@@ -15261,12 +15261,12 @@
     8a9d1e50a36fa1b3.75fd19fdcd201c8b.843303ac9b82b573.45135df9c3ccfcf1
     d1947ef2242dc2eb
   after
-    0000000000000000.0000000000000000.d9384961f4692f4c.74013deb297436ae
+    de54eb60390f92b3.354a8cd9303f98e6.5a3e2c9e3dcb0a31.74013deb297436ae
     de54eb60390f92b3.a8db0cf087954d8a.5a3e2c85f4692f4c.74013deb297436ae
     2705d7a6f96ace51.b54a8cd9303f98e6.d9384961dae49549.1a7bc6f023e80c96
     8a9d1e50a36fa1b3.75fd19fdcd201c8b.843303ac9b82b573.45135df9c3ccfcf1
     d1947ef2242dc2eb
-VPMAXUD_128(mem)
+VSUBPD_256(mem)
   before
     9acba6c763161caf.6368bcccd4a84885.c4c02e467a4395a5.b67b56d2d5d0cb77
     7c8550649b93c469.0eb1ad8527a3ff72.7e5f47a252b5be5f.cd5c3e3f24591201
@@ -15276,11 +15276,11 @@
   after
     9acba6c763161caf.6368bcccd4a84885.c4c02e467a4395a5.b67b56d2d5d0cb77
     7c8550649b93c469.0eb1ad8527a3ff72.7e5f47a252b5be5f.cd5c3e3f24591201
-    0000000000000000.0000000000000000.c4c02e467a4395a5.cd5c3e3fd5d0cb77
+    7c8550649b93c469.e368bcccd4a84885.7e5f47a252b5be5f.cd5c3e3f24591201
     faad1aa7687bf073.4af17a5fa50e8c4e.a360753ff4b31364.1618bf9e6e4d2655
     008b4f68a2d06b77
 
-VPMAXUD_128(reg)
+VSUBPD_256(reg)
   before
     3ec764295abed1d0.4fb3322434fdec19.937f4d570895da96.c55a8359f758b608
     2d18fb4e33a49509.2d6cbc1a6a442766.1ebc633cfd0d28a9.c3618535947bfafc
@@ -15288,12 +15288,12 @@
     89289b70b68526d1.f323181d834e49a4.69734a7f0e02b2e3.bfc056e4126c5587
     76b21c8e2b52e375
   after
-    0000000000000000.0000000000000000.47f4b97bfd0d28a9.c3618535ea289b6d
+    2d18fb4e33a49509.efa23573265b5d86.c7f4b97b2003b134.f83ff7bfea289b6d
     2d18fb4e33a49509.2d6cbc1a6a442766.1ebc633cfd0d28a9.c3618535947bfafc
     27ca0e41c80df3d0.6fa23573265b5d86.47f4b97b2003b134.783ff7bfea289b6d
     89289b70b68526d1.f323181d834e49a4.69734a7f0e02b2e3.bfc056e4126c5587
     76b21c8e2b52e375
-VPMAXUD_128(mem)
+VSUBPD_256(mem)
   before
     78e0c7aa4ee70264.af809d4698996bb8.94b9e1039d2aa8ed.e28412b363976761
     a015d2259a356d7f.f61c112f0bd4fe30.2d310d1191fa368d.0d750d85ba4d0b5b
@@ -15303,11 +15303,11 @@
   after
     78e0c7aa4ee70264.af809d4698996bb8.94b9e1039d2aa8ed.e28412b363976761
     a015d2259a356d7f.f61c112f0bd4fe30.2d310d1191fa368d.0d750d85ba4d0b5b
-    0000000000000000.0000000000000000.94b9e1039d2aa8ed.e28412b3ba4d0b5b
+    f8e0c7aa4ee70264.f61c112f0bd4fe30.2d310d1191fa368d.628412b363976761
     d6c7f9e416321beb.52533be912f0fd85.bbf67a5576a7ce80.e8228db0df4c1471
     51770ae1e5aeefe6
 
-VPMINUD_128(reg)
+VDIVPD_256(reg)
   before
     dbdaaa5f5e61ab86.9cdc0c0180f8d594.2086ea94dee9e1b9.68dcb4639e9c502b
     e4996996e5f282fd.f829702b81a8cb1a.7e2efa01aa390330.7dd3404a10b6f1dd
@@ -15315,12 +15315,12 @@
     df5736e08fdb7324.e69a195bbaf75f6b.5a0c2ed4b510f091.5327404e40867e04
     cc1cab453654e3d2
   after
-    0000000000000000.0000000000000000.7e2efa01136d9f94.7dd3404a10b6f1dd
+    5c8add8cd14f66ab.6f9e92793ccde362.f5861e1acceac0c1.e51908627da40dcb
     e4996996e5f282fd.f829702b81a8cb1a.7e2efa01aa390330.7dd3404a10b6f1dd
     c7fe44f317ecb1f9.c87aa050364ebba8.c896689d136d9f94.d8a89bf4e7ff6cc1
     df5736e08fdb7324.e69a195bbaf75f6b.5a0c2ed4b510f091.5327404e40867e04
     cc1cab453654e3d2
-VPMINUD_128(mem)
+VDIVPD_256(mem)
   before
     1d5358c4e6775756.8aee3bcbea4c062a.2f56553929ae748f.90da4a132baf33d5
     2397c3b66bfa95bd.22104f1ec3caa4b8.807ad2d4a080b53f.c64db7c511d4a309
@@ -15330,11 +15330,11 @@
   after
     1d5358c4e6775756.8aee3bcbea4c062a.2f56553929ae748f.90da4a132baf33d5
     2397c3b66bfa95bd.22104f1ec3caa4b8.807ad2d4a080b53f.c64db7c511d4a309
-    0000000000000000.0000000000000000.2f56553929ae748f.90da4a1311d4a309
+    4633a74dcd0f3fe9.d711430e025794a7.9113379d771c4d45.7562162cd2f4f9cb
     bf7ac4a8665162e3.8d2495b1611ef31b.a52a7cf514a2aef5.a25175319fe6fef8
     007bbec47fea6009
 
-VPMINUD_128(reg)
+VDIVPD_256(reg)
   before
     ce79487a40a5dfbc.0cb0537f133e68f9.17afbfc85e0c1c48.334ea1524a0ade52
     68990fbf7ca3b8bd.7e248f7a06ba2aa3.fff4e8f8493741ac.3709f71ef6bd2aed
@@ -15342,12 +15342,12 @@
     6f6a45a6db9a6857.42f5028d2d94cc5d.5adf28535a766ecc.147823af26320987
     a5c3f14de20c13e0
   after
-    0000000000000000.0000000000000000.a2400cad493741ac.3709f71e37c64ff0
+    7f6309af3fb1b338.cc7159f7b93e3ce6.fffce8f8493741ac.e8cffd5c8ac4fc18
     68990fbf7ca3b8bd.7e248f7a06ba2aa3.fff4e8f8493741ac.3709f71ef6bd2aed
     29250fffd27127b7.f1a2f5865bd3620a.a2400cadbe2c9df4.8e29f94337c64ff0
     6f6a45a6db9a6857.42f5028d2d94cc5d.5adf28535a766ecc.147823af26320987
     a5c3f14de20c13e0
-VPMINUD_128(mem)
+VDIVPD_256(mem)
   before
     1dd6e00984602a24.95b3ac2036abb649.4beb317c980a26c6.841d3656b9a1eedf
     587d6bcf2a3b0a82.f74e40da7c2f4f38.e94efe40b9402a71.7c463423763a5ada
@@ -15357,11 +15357,11 @@
   after
     1dd6e00984602a24.95b3ac2036abb649.4beb317c980a26c6.841d3656b9a1eedf
     587d6bcf2a3b0a82.f74e40da7c2f4f38.e94efe40b9402a71.7c463423763a5ada
-    0000000000000000.0000000000000000.4beb317c980a26c6.7c463423763a5ada
+    7a94941e060e5715.7ff0000000000000.dd523c5b2ff77941.fff0000000000000
     87b64529f1b31436.dea6dfba3fc14cbf.548e63f38b1d2240.4788eec77be3e437
     d139a176fb0c7bf0
 
-VPMINUD_128(reg)
+VDIVPD_256(reg)
   before
     9905349f4ad2ee41.33e08c964a68b6e6.1bfbe3b9f3e729af.d903f3bb75db8ebc
     fb38a2ad03c178d6.12ce60bc16d4115d.05d104a604b0404d.63161107838b952a
@@ -15369,12 +15369,12 @@
     fd030028254cc47a.d9269ce778ffe157.4c308effaa5c0b40.f544e7db81ea638d
     b6f9983ba9b3a2db
   after
-    0000000000000000.0000000000000000.05d104a604b0404d.63161107838b952a
+    e80981d2cbc8dab6.527136a1ea704945.8000000000000000.d4735f31268a2a5d
     fb38a2ad03c178d6.12ce60bc16d4115d.05d104a604b0404d.63161107838b952a
     531ee80cc366565a.004c3c897103e1ca.f6743eef0da8cd44.ce9239c3d436f3b6
     fd030028254cc47a.d9269ce778ffe157.4c308effaa5c0b40.f544e7db81ea638d
     b6f9983ba9b3a2db
-VPMINUD_128(mem)
+VDIVPD_256(mem)
   before
     ec7bc7cf659b6ccc.5532e86dc600fde2.7927fcc446d6ce30.6150ee42785838ef
     7397f084d3b07d8a.b7f89b47410d3f3d.bc1dd80bf8946482.93225c2512268dfa
@@ -15384,11 +15384,11 @@
   after
     ec7bc7cf659b6ccc.5532e86dc600fde2.7927fcc446d6ce30.6150ee42785838ef
     7397f084d3b07d8a.b7f89b47410d3f3d.bc1dd80bf8946482.93225c2512268dfa
-    0000000000000000.0000000000000000.7927fcc446d6ce30.6150ee4212268dfa
+    c70b935c1a3be04e.a2b4d27cbd151169.82e3e80bdb3a565b.8000000000000000
     e3cc21fd348f6224.0979526b3762c87e.9a13f68777f17941.ba074f761d6ea6db
     67b3cdbec4fee108
 
-VPMULLD_128(reg)
+VPCMPEQQ_128(reg)
   before
     a0404754a9923642.857d20995f71ae57.b0cc4f8ce9c389bc.eeac2f947baa7104
     c2f9bba665b5e136.e8f90a06abb03208.d2e606f3e6ad419e.5469d4bbd37802f1
@@ -15396,12 +15396,12 @@
     2c237f2ad8da27fa.607d8d001772cd97.f49e983f304e88fc.cb7e5408ed89ddf4
     926f2605e7e39f62
   after
-    0000000000000000.0000000000000000.6c255b71fe66d4c2.796a5f78c6f10a12
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     c2f9bba665b5e136.e8f90a06abb03208.d2e606f3e6ad419e.5469d4bbd37802f1
     272c241f97f41d8f.e70a5b2f3457a864.ca12750bcaad2dcf.aa1662e89a69e732
     2c237f2ad8da27fa.607d8d001772cd97.f49e983f304e88fc.cb7e5408ed89ddf4
     926f2605e7e39f62
-VPMULLD_128(mem)
+VPCMPEQQ_128(mem)
   before
     ddb354cda483eba9.2d2bc635c6f43a23.2d1d1e656f0d5ccc.abd469fdb41c8fd0
     86175a4a42757bf4.8690f7abfdcc94b5.2cb8884a5935132f.4d01e6b0f3a37ef8
@@ -15411,11 +15411,11 @@
   after
     ddb354cda483eba9.2d2bc635c6f43a23.2d1d1e656f0d5ccc.abd469fdb41c8fd0
     86175a4a42757bf4.8690f7abfdcc94b5.2cb8884a5935132f.4d01e6b0f3a37ef8
-    0000000000000000.0000000000000000.b728713283932d74.7c3f2bf08be3b180
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     666fe0188a815949.b1a00489b4ec07c6.2c0bdd455159e333.be70d1a5100e04f3
     464937c0260a121d
 
-VPMULLD_128(reg)
+VPCMPEQQ_128(reg)
   before
     274a397f67eff74c.55fa57406eb220ab.3ae4d9c86c4b9a9d.e55bbe32986e762a
     bfbdd14f6e49f129.12d696cea1661bc0.8bb48622dc99628e.40d56a4fe03f1f00
@@ -15423,12 +15423,12 @@
     802cb9d4408e0fa4.6aac5ecc65859fba.f52c5dd85733846c.487710cbe347a5f8
     ad360201d895fb72
   after
-    0000000000000000.0000000000000000.41e34a881928b5b8.24b54847963f3f00
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     bfbdd14f6e49f129.12d696cea1661bc0.8bb48622dc99628e.40d56a4fe03f1f00
     68effd9dd8a53a63.7acd1aae3fa807b7.005d0904a1629c44.17455c8945d99be1
     802cb9d4408e0fa4.6aac5ecc65859fba.f52c5dd85733846c.487710cbe347a5f8
     ad360201d895fb72
-VPMULLD_128(mem)
+VPCMPEQQ_128(mem)
   before
     2350af163dcf577a.61c0ff5f4390ac99.bc3fde152e08a0f6.c56a7f0c999755b1
     868f92f83002763d.69f7cdac7c384ded.4d521673b73dc696.ce66690b031a4cc0
@@ -15438,11 +15438,11 @@
   after
     2350af163dcf577a.61c0ff5f4390ac99.bc3fde152e08a0f6.c56a7f0c999755b1
     868f92f83002763d.69f7cdac7c384ded.4d521673b73dc696.ce66690b031a4cc0
-    0000000000000000.0000000000000000.8180916fda2a9424.70776184e5ead0c0
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     84afead12f81eba3.597ced3902a78964.9d279f2277ee70b4.f8c48a1ac1af9beb
     d1beb8024dd96c5f
 
-VPMULLD_128(reg)
+VPCMPEQQ_128(reg)
   before
     52a59f657152524c.d628589f72e5ba9e.fb64395186879cdf.1381e84be7826c8a
     d6c53cafcaa6895f.85f6ebe9b3713c03.321efbdab13ca46a.388bd93a85f97d75
@@ -15450,12 +15450,12 @@
     5ce085a98910dea6.6ac575a29e3247be.d23ad6f06b567d5e.ffdfa41ac1bdcc38
     59c175e397238368
   after
-    0000000000000000.0000000000000000.298eac5a3a4bb6e0.6070c09e98f55f20
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     d6c53cafcaa6895f.85f6ebe9b3713c03.321efbdab13ca46a.388bd93a85f97d75
     bb6a8a4cf3614f43.6de7219c0e312cff.5bf631411f52dbb0.e811eedb705e5ea0
     5ce085a98910dea6.6ac575a29e3247be.d23ad6f06b567d5e.ffdfa41ac1bdcc38
     59c175e397238368
-VPMULLD_128(mem)
+VPCMPEQQ_128(mem)
   before
     d283df220b9b3f5d.14722930273e7331.585d64e97f80496b.f335e65431d3c81f
     46f05ec33b31bb43.416e734f69784993.137b685bce25ed33.1b325dda0e55f6a0
@@ -15465,11 +15465,11 @@
   after
     d283df220b9b3f5d.14722930273e7331.585d64e97f80496b.f335e65431d3c81f
     46f05ec33b31bb43.416e734f69784993.137b685bce25ed33.1b325dda0e55f6a0
-    0000000000000000.0000000000000000.212486d3e0fdaf51.88faa788caf5dd60
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     8ffe87dc3ee8e690.66cfe5014c3dab86.6079a47524a90fc2.eb6572f87b9aee91
     4c33076943742f59
 
-VPMAXUW_128(reg)
+VSUBPD_128(reg)
   before
     2334f3ab92844490.1c37292b48220d4f.17cd066d24e1af70.aaf0d3f463a003e2
     ccb4332a035569e3.144cd08d7ea9e4af.ab63bd2010c0e5e0.311d094f801f8bcc
@@ -15477,12 +15477,12 @@
     04609b8fbd6bd18c.b5391b36ddd49501.f08bd90b9760d500.66ca764ac2e641b0
     cbe1a6c11f46e902
   after
-    0000000000000000.0000000000000000.ab63bd20ad66e5e0.d1cdc07296328bcc
+    0000000000000000.0000000000000000.ab63bd2010c0e5e0.51cdc072963261ad
     ccb4332a035569e3.144cd08d7ea9e4af.ab63bd2010c0e5e0.311d094f801f8bcc
     a3fec1523374d9fe.5309f8edfc8b28dc.80df0486ad668881.d1cdc072963261ad
     04609b8fbd6bd18c.b5391b36ddd49501.f08bd90b9760d500.66ca764ac2e641b0
     cbe1a6c11f46e902
-VPMAXUW_128(mem)
+VSUBPD_128(mem)
   before
     deddcdc4ca5e13cf.4a24bc4e3dc98d3a.15aab7563d8ee64a.59b5371c69390708
     7a8c6540de3b7c42.d39721f9511749b3.5126473839c7d8e5.15a71a23bf7d5c46
@@ -15492,11 +15492,11 @@
   after
     deddcdc4ca5e13cf.4a24bc4e3dc98d3a.15aab7563d8ee64a.59b5371c69390708
     7a8c6540de3b7c42.d39721f9511749b3.5126473839c7d8e5.15a71a23bf7d5c46
-    0000000000000000.0000000000000000.5126b7563d8ee64a.59b5371cbf7d5c46
+    0000000000000000.0000000000000000.5126473839c7d8e5.d9b5371c69390708
     bc2fdd4fb271facc.1bb9a3c79eb8b0b9.ca7233f373e48fbb.fa1561c769785913
     da2abb3cf5467bfa
 
-VPMAXUW_128(reg)
+VSUBPD_128(reg)
   before
     7e378c5775b0aec7.1bbbb4bbabe3873b.9201b9c21123d29d.bed988a3e9e1cb4f
     428acd8686412f25.7229ed4f7d494300.ba27025a86aee5fd.fe7dc1c56b8b98e4
@@ -15504,12 +15504,12 @@
     9b2d93cdc8090a45.7dda779f1d22373f.92401e11e75ac9df.cea7cf10011bd4bf
     16c69c114d18bb5e
   after
-    0000000000000000.0000000000000000.f1787bfb99e8e5fd.fe7dc1c56b8bb1a5
+    0000000000000000.0000000000000000.71787bfb99e82384.fe7dc1c56b8b98e4
     428acd8686412f25.7229ed4f7d494300.ba27025a86aee5fd.fe7dc1c56b8b98e4
     826d7b34c38539c0.9f4405f744b0ea48.f1787bfb99e82384.64285a4614f0b1a5
     9b2d93cdc8090a45.7dda779f1d22373f.92401e11e75ac9df.cea7cf10011bd4bf
     16c69c114d18bb5e
-VPMAXUW_128(mem)
+VSUBPD_128(mem)
   before
     1a513e3414f423ad.e71610bd3358dc60.e7b6bf3323aee710.f8cbe9080b9213b9
     b414306573bac7d8.c373ee709dfeecbd.bba359a0735db6e8.8165d74ca21b3cc0
@@ -15519,11 +15519,11 @@
   after
     1a513e3414f423ad.e71610bd3358dc60.e7b6bf3323aee710.f8cbe9080b9213b9
     b414306573bac7d8.c373ee709dfeecbd.bba359a0735db6e8.8165d74ca21b3cc0
-    0000000000000000.0000000000000000.e7b6bf33735de710.f8cbe908a21b3cc0
+    0000000000000000.0000000000000000.67b6bf3323aee710.78cbe9080b9213b9
     1e71f4a16835b776.9bbdbed0e481b4ea.0ce374b15f599f5c.68f50d6b97521eff
     7f834d1f2d174f8f
 
-VPMAXUW_128(reg)
+VSUBPD_128(reg)
   before
     2750a0cfa65e4ffc.a6a3bf8435027a3f.4f41a855f875e513.43ceed2d33bd3250
     bea802e99db25bf0.343dca250aea6995.036ae34c7cf1442e.52fba832c176d4fa
@@ -15531,12 +15531,12 @@
     2429e40777b2861f.d5d990523b38be97.dbdb3d4546af7ae9.6c4ad58379153322
     2e043fa8db1369f8
   after
-    0000000000000000.0000000000000000.1384e34c7cf1442e.52fba832c176d4fa
+    0000000000000000.0000000000000000.93846c230d800ce7.52fba832c176d4fa
     bea802e99db25bf0.343dca250aea6995.036ae34c7cf1442e.52fba832c176d4fa
     9ed770d8af9faf18.a50b917003f841a4.13846c230d800ce7.163522ab248f4087
     2429e40777b2861f.d5d990523b38be97.dbdb3d4546af7ae9.6c4ad58379153322
     2e043fa8db1369f8
-VPMAXUW_128(mem)
+VSUBPD_128(mem)
   before
     3930db0567959d35.ade95ce492761db2.a17343b5ceb69c9b.b7ba541dc409cae0
     699a258738a78d04.9365d3da9b77b07c.e3a42787d97f96db.026fac19221a3879
@@ -15546,11 +15546,11 @@
   after
     3930db0567959d35.ade95ce492761db2.a17343b5ceb69c9b.b7ba541dc409cae0
     699a258738a78d04.9365d3da9b77b07c.e3a42787d97f96db.026fac19221a3879
-    0000000000000000.0000000000000000.e3a443b5d97f9c9b.b7baac19c409cae0
+    0000000000000000.0000000000000000.e3a42787d97f96db.37ba541dc409cae0
     a957b5a51aae8b0a.eabcafc2e862b968.3cff6f24c520d1c2.5a860f2bf1925c40
     1e81131898118bc6
 
-VPEXTRW_128_EregOnly_toG_0x0(reg)
+VADDPD_128(reg)
   before
     c18148d89078c79e.7043f21b64b91399.12300c8b6563a7e1.0bc0cbc8de1089c0
     a1d2aad875524d73.cc9ccd646285456b.088e581d3fd28142.c149488adf7a4eab
@@ -15558,12 +15558,12 @@
     8495e644748f26c6.b3c84e23f18e9986.ce3cad4d8127e86a.52e2911806eeeff6
     e58b56bd650f42af
   after
-    c18148d89078c79e.7043f21b64b91399.12300c8b6563a7e1.0bc0cbc8de1089c0
+    0000000000000000.0000000000000000.28248fe5153a8336.c149488adf7a4eab
     a1d2aad875524d73.cc9ccd646285456b.088e581d3fd28142.c149488adf7a4eab
     19bf3582e22b59f2.992fc26e331dddab.28248fe5153a8336.3a666056e36bdcae
     8495e644748f26c6.b3c84e23f18e9986.ce3cad4d8127e86a.52e2911806eeeff6
-    00000000000089c0
-VPEXTRW_128_EregOnly_toG_0x0(mem)
+    e58b56bd650f42af
+VADDPD_128(mem)
   before
     cf2b2c2f1cdb9204.40a1b788c60bf29c.f633eb71b8e33327.5624afc31f26ed8a
     ec8f8d5b465d9b22.a82da6bc742bf71f.3e3c1743a52868bb.1d268fb28cc2cd41
@@ -15573,11 +15573,11 @@
   after
     cf2b2c2f1cdb9204.40a1b788c60bf29c.f633eb71b8e33327.5624afc31f26ed8a
     ec8f8d5b465d9b22.a82da6bc742bf71f.3e3c1743a52868bb.1d268fb28cc2cd41
-    1883f72effa11934.1785ae4b1b7971fd.67ae4e85d36af46e.7d8f4c856387c63c
+    0000000000000000.0000000000000000.f633eb71b8e33327.5624afc31f26ed8a
     2fd3e59364b4c767.ebf7cca157839edf.4d560a235fb4926b.d3aadfaa41021226
     7bc5458cc1beedac
 
-VPEXTRW_128_EregOnly_toG_0x0(reg)
+VADDPD_128(reg)
   before
     d02b7b988048957a.0d4ad47591a162e7.7ecefa2ac3d4b873.cb01c9096412ffdf
     30277c38192a443b.8eb63ec2a174a6df.2d553652fbf9fc65.bf790624ff91f7f5
@@ -15585,12 +15585,12 @@
     7e14cfe74a2caa48.e898784adbfe17e9.50a6c53041ecf112.7602eaa4641f77b9
     f0ac89e3674777c0
   after
-    d02b7b988048957a.0d4ad47591a162e7.7ecefa2ac3d4b873.cb01c9096412ffdf
+    0000000000000000.0000000000000000.55d97b869c7da561.bf790624ff91f7f5
     30277c38192a443b.8eb63ec2a174a6df.2d553652fbf9fc65.bf790624ff91f7f5
     f60644d928f2379c.8de1a165b03a4e7c.55d97b869c7da561.048b3d5e4b3c35da
     7e14cfe74a2caa48.e898784adbfe17e9.50a6c53041ecf112.7602eaa4641f77b9
-    000000000000ffdf
-VPEXTRW_128_EregOnly_toG_0x0(mem)
+    f0ac89e3674777c0
+VADDPD_128(mem)
   before
     5053970670bff118.249d1acf1b63d8ec.7aa73f5d3dccbd53.7c0811bd87d31a25
     71c58ff89a93a3f0.44ec20fc3623fe34.1fda728af3b1fce5.334b5a9a09bd5d45
@@ -15600,11 +15600,11 @@
   after
     5053970670bff118.249d1acf1b63d8ec.7aa73f5d3dccbd53.7c0811bd87d31a25
     71c58ff89a93a3f0.44ec20fc3623fe34.1fda728af3b1fce5.334b5a9a09bd5d45
-    2ecceda701d04772.3a4fddd938f858cb.b2fd8ebe18b88fcd.d2bb9c326436f51f
+    0000000000000000.0000000000000000.7aa73f5d3dccbd53.7c0811bd87d31a25
     65352efec2819aca.61104dd4bb6f225e.11db0ee3c9ed3334.b5a3d3f033cb1f5e
     3950fb42130717af
 
-VPEXTRW_128_EregOnly_toG_0x0(reg)
+VADDPD_128(reg)
   before
     b80f11939f7619be.f1cccce9f9b25725.177d6c585e149798.16426ee6215da349
     8f290f4f74a56036.ad5c4554c1703caf.b7e037d1bb71f426.9ffc2ab43d139d35
@@ -15612,12 +15612,12 @@
     b5a6b8b86771b013.299bb65b75c168fe.24babe52148855ed.a99ca75d2e821a49
     e21a60113d5315c8
   after
-    b80f11939f7619be.f1cccce9f9b25725.177d6c585e149798.16426ee6215da349
+    0000000000000000.0000000000000000.b7e037d1bb71f426.9ffc2ab43d139d35
     8f290f4f74a56036.ad5c4554c1703caf.b7e037d1bb71f426.9ffc2ab43d139d35
     1aedf3e22d1f29c4.77b3142b36c60393.9c86a9ab6e1475b3.86d6be38381bdb27
     b5a6b8b86771b013.299bb65b75c168fe.24babe52148855ed.a99ca75d2e821a49
-    000000000000a349
-VPEXTRW_128_EregOnly_toG_0x0(mem)
+    e21a60113d5315c8
+VADDPD_128(mem)
   before
     0f1b653f7e9b8acf.bc9f5b3ebd2530d0.a1e1a5ce996b291b.a9ca7232485ad17d
     0a6d32d30f64338b.8b26d7decbc9e7a7.b9515f72bfd30018.8900c2b8a7152512
@@ -15627,11 +15627,11 @@
   after
     0f1b653f7e9b8acf.bc9f5b3ebd2530d0.a1e1a5ce996b291b.a9ca7232485ad17d
     0a6d32d30f64338b.8b26d7decbc9e7a7.b9515f72bfd30018.8900c2b8a7152512
-    b1da44b90cbdcd27.7e8527052ee90e43.4eb75f310202aa1e.1eaaa94ecc458d55
+    0000000000000000.0000000000000000.b9515f72bfd30018.a9ca7232485ad17d
     de2f15de8faf13d0.f10949208110e451.3ddf21f97f06e25b.c6122362547744f5
     db852c5eda35879c
 
-VPEXTRW_128_EregOnly_toG_0x7(reg)
+VUNPCKLPD_128(reg)
   before
     bb4ec0b0fb0e92f7.6e38232cb748c2b2.40fe399a61caa37c.609421b551ea66fb
     c0bbdcc3528ba0b1.3ec1ea909e9396f8.c7b0f1de6aa38971.94a4dc5195baf02a
@@ -15639,12 +15639,12 @@
     adad99dc13a7b8f4.09828f4b1a709c62.ed7aae7964e4b468.a00070d9e05108e2
     2fe5419d202e0ec5
   after
-    bb4ec0b0fb0e92f7.6e38232cb748c2b2.40fe399a61caa37c.609421b551ea66fb
+    0000000000000000.0000000000000000.b5d9cdb966833c13.94a4dc5195baf02a
     c0bbdcc3528ba0b1.3ec1ea909e9396f8.c7b0f1de6aa38971.94a4dc5195baf02a
     48177b037b3aee77.2895e4f7609d4bcf.e26a6f5a3728cfdc.b5d9cdb966833c13
     adad99dc13a7b8f4.09828f4b1a709c62.ed7aae7964e4b468.a00070d9e05108e2
-    00000000000040fe
-VPEXTRW_128_EregOnly_toG_0x7(mem)
+    2fe5419d202e0ec5
+VUNPCKLPD_128(mem)
   before
     3f54bcf142280be5.4cca32bab65c3ad5.bd52667ae71b46de.442aaaa78e6472c2
     ac185ec1614abb71.81ba4209ffe7afc6.20d2e56fe4a7056f.42c7605050324695
@@ -15654,11 +15654,11 @@
   after
     3f54bcf142280be5.4cca32bab65c3ad5.bd52667ae71b46de.442aaaa78e6472c2
     ac185ec1614abb71.81ba4209ffe7afc6.20d2e56fe4a7056f.42c7605050324695
-    52ffa2fa99a1d993.a9c9c6358ad45472.0ecf88162c229440.459dcae147dd6c8e
+    0000000000000000.0000000000000000.442aaaa78e6472c2.42c7605050324695
     0dd3048607382278.1e43b9abf4ad6586.6312cb5bdc97b07e.a8f8e6c40eee1f58
     c623af6641f39ca0
 
-VPEXTRW_128_EregOnly_toG_0x7(reg)
+VUNPCKLPD_128(reg)
   before
     fd6c21347e771f12.b9610053c71b524b.3d7317d5d9011dad.fb6a2b2a0f131555
     a81d39995e07e459.3275134cf3562438.62a7dd21d459b994.b3a2236fe2a17ff0
@@ -15666,12 +15666,12 @@
     c9ea47d77d782219.fb5f6b710507a214.2e468dcb7d4a8d51.ede0cc0cd5245023
     297f743b2e313014
   after
-    fd6c21347e771f12.b9610053c71b524b.3d7317d5d9011dad.fb6a2b2a0f131555
+    0000000000000000.0000000000000000.65852f16704da97b.b3a2236fe2a17ff0
     a81d39995e07e459.3275134cf3562438.62a7dd21d459b994.b3a2236fe2a17ff0
     2283f2007f2e2622.54dbb85caaf6566d.e92905f9814375e7.65852f16704da97b
     c9ea47d77d782219.fb5f6b710507a214.2e468dcb7d4a8d51.ede0cc0cd5245023
-    0000000000003d73
-VPEXTRW_128_EregOnly_toG_0x7(mem)
+    297f743b2e313014
+VUNPCKLPD_128(mem)
   before
     f42ea59097800579.f79e3789f37214e9.03cca8762393c459.8d4a700263fa3c7f
     2ab9daf82b1e8a7f.0aebbb827da7373f.48f0eb571da87a6a.6281aa0ad0e0bf1c
@@ -15681,11 +15681,11 @@
   after
     f42ea59097800579.f79e3789f37214e9.03cca8762393c459.8d4a700263fa3c7f
     2ab9daf82b1e8a7f.0aebbb827da7373f.48f0eb571da87a6a.6281aa0ad0e0bf1c
-    a7ec8f5e06167c52.5c1cd12eb8a3c8c6.a695b10012527e70.0936384f5f8752d5
+    0000000000000000.0000000000000000.8d4a700263fa3c7f.6281aa0ad0e0bf1c
     479241ae4574971d.4b7f73f940f2032b.f988755e1b9b8c9a.deb7153dad7b3156
     3d4e3c405549974a
 
-VPEXTRW_128_EregOnly_toG_0x7(reg)
+VUNPCKLPD_128(reg)
   before
     8248acc4f37cc15e.e6796bd40345960d.315e9f4faf212419.1d95b35b56916212
     09f15e3624a1eb3d.5f6b89bc5d94364d.6c06519da4bc663d.ed87e7e5df40ba04
@@ -15693,12 +15693,12 @@
     4d807c90aeee2d0f.54a3918253dd4970.4ce133cd8a6240d6.064e234c49f5e309
     05bb220162152b73
   after
-    8248acc4f37cc15e.e6796bd40345960d.315e9f4faf212419.1d95b35b56916212
+    0000000000000000.0000000000000000.472c8ee6d1b2519d.ed87e7e5df40ba04
     09f15e3624a1eb3d.5f6b89bc5d94364d.6c06519da4bc663d.ed87e7e5df40ba04
     2e954f0084435094.903517526e6d330a.56c3834db94d0643.472c8ee6d1b2519d
     4d807c90aeee2d0f.54a3918253dd4970.4ce133cd8a6240d6.064e234c49f5e309
-    000000000000315e
-VPEXTRW_128_EregOnly_toG_0x7(mem)
+    05bb220162152b73
+VUNPCKLPD_128(mem)
   before
     223d07f3381ce608.c1fde0513e2ebe59.8680743827ef33aa.aaab5c87b4874fa3
     38a14e0de819d0f4.e85a78aed1903e1f.049a3a6107afaee4.cd6ffae9d2467056
@@ -15708,11 +15708,11 @@
   after
     223d07f3381ce608.c1fde0513e2ebe59.8680743827ef33aa.aaab5c87b4874fa3
     38a14e0de819d0f4.e85a78aed1903e1f.049a3a6107afaee4.cd6ffae9d2467056
-    22b3743b8d15a562.1de13e15039feb0c.a8bb61e70e2a754c.0f77095e812ddf9a
+    0000000000000000.0000000000000000.aaab5c87b4874fa3.cd6ffae9d2467056
     be3ef469441e207f.bbdf30f16fe8ffcd.50b065b8596b460c.cd1086525cc8d81b
     63866b31ffa19686
 
-VPMINUW_128(reg)
+VUNPCKHPD_128(reg)
   before
     2d25b66707475687.e6104a84293ffe76.20a048aeb1f6b60d.d745c0be037edb50
     87396360104354ca.78f3f2765784fb74.a77085b866554e79.1846f0e72970f145
@@ -15720,12 +15720,12 @@
     5cefcf4c9372f9c3.451f2993ffac4033.8a6c566497380c84.3cbcbc4f561f8ff1
     d6c8506696f48f00
   after
-    0000000000000000.0000000000000000.a77085b8299201bd.1846701e29704317
+    0000000000000000.0000000000000000.ab9ae07c299201bd.a77085b866554e79
     87396360104354ca.78f3f2765784fb74.a77085b866554e79.1846f0e72970f145
     cd0d6c88b523ccfa.4eb4682ceafad2a4.ab9ae07c299201bd.f07f701ee64c4317
     5cefcf4c9372f9c3.451f2993ffac4033.8a6c566497380c84.3cbcbc4f561f8ff1
     d6c8506696f48f00
-VPMINUW_128(mem)
+VUNPCKHPD_128(mem)
   before
     9c70a94fc2d7006f.8e29871644bc18d2.3a00b095b1a7014d.9e30e4dd4bd3aa7b
     688141f6f5d49d6c.bf089054678e64d3.072379201cf5d11d.45338554e2ef194e
@@ -15735,11 +15735,11 @@
   after
     9c70a94fc2d7006f.8e29871644bc18d2.3a00b095b1a7014d.9e30e4dd4bd3aa7b
     688141f6f5d49d6c.bf089054678e64d3.072379201cf5d11d.45338554e2ef194e
-    0000000000000000.0000000000000000.072379201cf5014d.453385544bd3194e
+    0000000000000000.0000000000000000.3a00b095b1a7014d.072379201cf5d11d
     8608242fe14e4eb9.93e485d86df8775a.9d5ec27e90c08c91.b826f1e827dd5436
     3cadb3de0dc59aa3
 
-VPMINUW_128(reg)
+VUNPCKHPD_128(reg)
   before
     c2a47981455f9f9c.8f186598d2e3da63.ed7a6af789a7b537.1d0e3a29d054f08e
     a7553e3d6c37a0cc.0fbfd7703bc2824a.b7e49039850f10b6.e630e40c3a6c52f0
@@ -15747,12 +15747,12 @@
     f918b6b0f6cd8584.e4063b19e38e197c.0b6890d68f331049.c4fabf2af95a0499
     9039e73d8747ca38
   after
-    0000000000000000.0000000000000000.4d709039850f10b6.d4903c133a6c52f0
+    0000000000000000.0000000000000000.4d70f30afeb9c583.b7e49039850f10b6
     a7553e3d6c37a0cc.0fbfd7703bc2824a.b7e49039850f10b6.e630e40c3a6c52f0
     450dff7e1ed7d8e0.e2cbf4a237f70399.4d70f30afeb9c583.d4903c13e91570e5
     f918b6b0f6cd8584.e4063b19e38e197c.0b6890d68f331049.c4fabf2af95a0499
     9039e73d8747ca38
-VPMINUW_128(mem)
+VUNPCKHPD_128(mem)
   before
     151b3239afe880ed.1fc2614090a5e163.f13d25c35a947f21.4c196109d5082db5
     2f6a1b088c4ae0e4.1457fb9889e9292a.e63c2f8bb915f2b1.6ecf64106bc55773
@@ -15762,11 +15762,11 @@
   after
     151b3239afe880ed.1fc2614090a5e163.f13d25c35a947f21.4c196109d5082db5
     2f6a1b088c4ae0e4.1457fb9889e9292a.e63c2f8bb915f2b1.6ecf64106bc55773
-    0000000000000000.0000000000000000.e63c25c35a947f21.4c1961096bc52db5
+    0000000000000000.0000000000000000.f13d25c35a947f21.e63c2f8bb915f2b1
     9282b8d4d67f904b.d671ec5407eb6b1e.f3c195269db4ef49.c179ed46f924c593
     ab056c4d29de814d
 
-VPMINUW_128(reg)
+VUNPCKHPD_128(reg)
   before
     e5c60cd819b03a09.93e364a77b6a5813.5c8e3c90c3c0dea4.c4e0e8d05aebf0a7
     ca08c95265252d72.99e29eff4645bbcd.20c66b444e322dc1.ecf64c486ecdeea2
@@ -15774,12 +15774,12 @@
     093f8ac3842ab0fe.24e9adebbcfd41c8.d2b756c93f1e4d72.b03a33530ebfd11f
     0500afbed1e82df8
   after
-    0000000000000000.0000000000000000.20c66b4443cd2dc1.46d03b7b6ecda566
+    0000000000000000.0000000000000000.7e6575de43cd9322.20c66b444e322dc1
     ca08c95265252d72.99e29eff4645bbcd.20c66b444e322dc1.ecf64c486ecdeea2
     b8179f27aaca9635.804ae2c7521d75a5.7e6575de43cd9322.46d03b7bf665a566
     093f8ac3842ab0fe.24e9adebbcfd41c8.d2b756c93f1e4d72.b03a33530ebfd11f
     0500afbed1e82df8
-VPMINUW_128(mem)
+VUNPCKHPD_128(mem)
   before
     21ed2ba65beb761d.1bcb87928ed1b878.608979589ff1dc62.78080a71ddb0975e
     e0cf24f9c9d468bb.48099000644cea50.12f7c4f81806029e.cca38e42ba0fac92
@@ -15789,11 +15789,11 @@
   after
     21ed2ba65beb761d.1bcb87928ed1b878.608979589ff1dc62.78080a71ddb0975e
     e0cf24f9c9d468bb.48099000644cea50.12f7c4f81806029e.cca38e42ba0fac92
-    0000000000000000.0000000000000000.12f779581806029e.78080a71ba0f975e
+    0000000000000000.0000000000000000.608979589ff1dc62.12f7c4f81806029e
     b69d798dbf8a3511.67c6bc6ae6ebbbc9.456cc5853ac0deaf.eeebf3109e662b80
     742fcde4de760b92
 
-VPHMINPOSUW_128(reg)
+VUNPCKHPS_128(reg)
   before
     18ed6592cd83a89c.8622cfa6806e8921.10ded53dca28d2c1.7e0c72491b7e0cdb
     3573b98406193c4a.69cb90d99369755a.45d7ec60ea6803c8.9ba98ef2018cb45a
@@ -15801,12 +15801,12 @@
     4f0382e9c7113b40.d7b8473e25d109f5.c49b01425022a2ad.f60e009f4fc966ff
     ea6d4e7cee10e77d
   after
-    18ed6592cd83a89c.8622cfa6806e8921.10ded53dca28d2c1.7e0c72491b7e0cdb
-    0000000000000000.0000000000000000.0000000000000000.00000000000109f6
+    0000000000000000.0000000000000000.63fcfc3d45d7ec60.e3378988ea6803c8
+    3573b98406193c4a.69cb90d99369755a.45d7ec60ea6803c8.9ba98ef2018cb45a
     290cc42825c40447.3a6439131786b7e7.63fcfc3de3378988.7a11946b09f69457
     4f0382e9c7113b40.d7b8473e25d109f5.c49b01425022a2ad.f60e009f4fc966ff
     ea6d4e7cee10e77d
-VPHMINPOSUW_128(mem)
+VUNPCKHPS_128(mem)
   before
     34fafbed02d8d2ff.03a5f033888b1ee0.1b953548dc5727af.c5fef7daceb488e4
     ae8082dea82be5ae.a03e087203bfe9d4.e1c57f1b5523cf42.c272db71f87977d9
@@ -15816,11 +15816,11 @@
   after
     34fafbed02d8d2ff.03a5f033888b1ee0.1b953548dc5727af.c5fef7daceb488e4
     ae8082dea82be5ae.a03e087203bfe9d4.e1c57f1b5523cf42.c272db71f87977d9
-    0000000000000000.0000000000000000.0000000000000000.0000000000071b95
+    0000000000000000.0000000000000000.1b953548e1c57f1b.dc5727af5523cf42
     a6ab0ef118a86d49.09852b7f98822666.675119d103bea8a1.21bd5a4cc2ce64ab
     3a2ced689975d8e0
 
-VPHMINPOSUW_128(reg)
+VUNPCKHPS_128(reg)
   before
     bfdb5d338d804783.dce70cea1ae95c8d.8dca2e25ea2a115d.df455f8a6fa651c6
     0c17a71a3a7aeb40.b24dd3141ee661af.6b37cb7067bad257.49bcf3be0e037473
@@ -15828,12 +15828,12 @@
     6e67b6e82c6cc5b6.b2c7b2a79a459f3f.a4b4c8a650c8cd07.6767ed4458511218
     d2324d6f3a590767
   after
-    bfdb5d338d804783.dce70cea1ae95c8d.8dca2e25ea2a115d.df455f8a6fa651c6
-    0000000000000000.0000000000000000.0000000000000000.00000000000600cd
+    0000000000000000.0000000000000000.fe1600cd6b37cb70.aac1a80167bad257
+    0c17a71a3a7aeb40.b24dd3141ee661af.6b37cb7067bad257.49bcf3be0e037473
     7d2dc6873bf001c2.05a9e1593fab39dc.fe1600cdaac1a801.82844e58fde3cbd5
     6e67b6e82c6cc5b6.b2c7b2a79a459f3f.a4b4c8a650c8cd07.6767ed4458511218
     d2324d6f3a590767
-VPHMINPOSUW_128(mem)
+VUNPCKHPS_128(mem)
   before
     a0b1e9c3bf0864ee.3b1273a7aa7d72c7.9372c0e94abf5105.b75d1f69f45d7e14
     aeb03d2d0469e6db.4079fa3251ac45a2.8578890b6c260959.945d0181330cf7d5
@@ -15843,11 +15843,11 @@
   after
     a0b1e9c3bf0864ee.3b1273a7aa7d72c7.9372c0e94abf5105.b75d1f69f45d7e14
     aeb03d2d0469e6db.4079fa3251ac45a2.8578890b6c260959.945d0181330cf7d5
-    0000000000000000.0000000000000000.0000000000000000.0000000000021f69
+    0000000000000000.0000000000000000.9372c0e98578890b.4abf51056c260959
     f55dfef53c734891.61af525987994c65.0dc0389f74e87d5e.1d91585fefe43021
     805dc4fea5276804
 
-VPHMINPOSUW_128(reg)
+VUNPCKHPS_128(reg)
   before
     1eb1aba266b2574b.e7a363296733a0b3.36151ccd4f6ef9a4.5a9b18e9925bb166
     51d70ab8cd133aa2.889a7024c2d60dea.b369a0bcaf93bb5e.2800a1c391ebdcad
@@ -15855,12 +15855,12 @@
     e9cb1ce5fe85cc2e.48c5731c76f21445.1405c2bca9fb70ed.b797a3d8a59006a6
     306113eaf0bd7db1
   after
-    1eb1aba266b2574b.e7a363296733a0b3.36151ccd4f6ef9a4.5a9b18e9925bb166
-    0000000000000000.0000000000000000.0000000000000000.00000000000734f5
+    0000000000000000.0000000000000000.34f5d892b369a0bc.4493ce3daf93bb5e
+    51d70ab8cd133aa2.889a7024c2d60dea.b369a0bcaf93bb5e.2800a1c391ebdcad
     761cdbaa76d64eb4.b40ca2d168664a61.34f5d8924493ce3d.53ba51198ea3ba5e
     e9cb1ce5fe85cc2e.48c5731c76f21445.1405c2bca9fb70ed.b797a3d8a59006a6
     306113eaf0bd7db1
-VPHMINPOSUW_128(mem)
+VUNPCKHPS_128(mem)
   before
     9ae51d3d8e36dbaa.0732c9d601aef3bb.1e9361f1078327c1.b1e759a47a56db1b
     d1ef3ebc9908dbbe.2a9bdce719ddfd08.1341e73c38273f02.66e59ab854304c73
@@ -15870,11 +15870,11 @@
   after
     9ae51d3d8e36dbaa.0732c9d601aef3bb.1e9361f1078327c1.b1e759a47a56db1b
     d1ef3ebc9908dbbe.2a9bdce719ddfd08.1341e73c38273f02.66e59ab854304c73
-    0000000000000000.0000000000000000.0000000000000000.0000000000050783
+    0000000000000000.0000000000000000.1e9361f11341e73c.078327c138273f02
     16c5b1ed67e4b5e5.f2a7281eff7aac91.ca6babe5e7d66c82.8769061092932e4f
     ab862a2d2e33182c
 
-VPMAXSW_128(reg)
+VMOVUPS_EtoG_128(reg)
   before
     58f0e7254282f8e2.dc28fd7862070551.4fe0591a0300ca25.4380e21a9ff9fa18
     e8f239646a0d0a1e.df424edf3bb2e987.224de2e88ebcbb28.4ca5a176655e7d24
@@ -15882,12 +15882,12 @@
     25f28e676805b2d6.0cc6f4f2f5d15703.9aefe8a8a603082e.7b4fa74f90205048
     596be7a52d9419b9
   after
-    0000000000000000.0000000000000000.224de2e83b39bc47.4ca564e3655e7d24
-    e8f239646a0d0a1e.df424edf3bb2e987.224de2e88ebcbb28.4ca5a176655e7d24
+    58f0e7254282f8e2.dc28fd7862070551.4fe0591a0300ca25.4380e21a9ff9fa18
+    0000000000000000.0000000000000000.c739bdf33b39bc47.c0a664e35712b0d0
     b9da1d564360898b.fbdd220f0df11bb4.c739bdf33b39bc47.c0a664e35712b0d0
     25f28e676805b2d6.0cc6f4f2f5d15703.9aefe8a8a603082e.7b4fa74f90205048
     596be7a52d9419b9
-VPMAXSW_128(mem)
+VMOVUPS_EtoG_128(mem)
   before
     36c89ed14a7bc64f.8a888803768ac0aa.eec940750e5d5ba1.f7bd5e716da7dc88
     ed304abf01e01436.42e60796097af0b4.7cb1828574a1e1ba.3aed1bbb29b07402
@@ -15897,11 +15897,11 @@
   after
     36c89ed14a7bc64f.8a888803768ac0aa.eec940750e5d5ba1.f7bd5e716da7dc88
     ed304abf01e01436.42e60796097af0b4.7cb1828574a1e1ba.3aed1bbb29b07402
-    0000000000000000.0000000000000000.7cb1407574a15ba1.3aed5e716da77402
-    5e546f91b45582a4.1f2c85522bcda619.1164d9f89a83660a.e1a65b83f622df04
+    5c70665b71cfbf99.aa59078dbb627fa0.944c370c44aaa679.bfcc1bf278ab0c47
+    0000000000000000.0000000000000000.eec940750e5d5ba1.f7bd5e716da7dc88
     fec6d6d93ea42be5
 
-VPMAXSW_128(reg)
+VMOVUPS_EtoG_128(reg)
   before
     717a885fecba2995.cea7df4de67d1b84.fbad7c53f347a4cc.cec7e6349138dc9b
     960c6d839df218c1.8a37347c24544465.9b26e8fbaf5db364.a93fd9ab45d6c556
@@ -15909,12 +15909,12 @@
     65fdc15277f6b43b.52397adf313b38d8.983410ef758bf6f6.25a162ff57fae0fb
     7f22f0b4ec99893e
   after
-    0000000000000000.0000000000000000.5ce5e8fbfb9a108e.7d992f4b45d6dd67
-    960c6d839df218c1.8a37347c24544465.9b26e8fbaf5db364.a93fd9ab45d6c556
+    717a885fecba2995.cea7df4de67d1b84.fbad7c53f347a4cc.cec7e6349138dc9b
+    0000000000000000.0000000000000000.5ce5c5b6fb9a108e.7d992f4bd368dd67
     c8c981b0edd73214.6dcee90889e4b972.5ce5c5b6fb9a108e.7d992f4bd368dd67
     65fdc15277f6b43b.52397adf313b38d8.983410ef758bf6f6.25a162ff57fae0fb
     7f22f0b4ec99893e
-VPMAXSW_128(mem)
+VMOVUPS_EtoG_128(mem)
   before
     65ea5454ae50955b.c8f428d5d7dadae1.174464eb39657bc3.ac60c414b6baa347
     b5c30bccba2cc07f.4cfab2a5aa0fdfb3.96bb211abd6d3f5e.f4b5dd915cb5512e
@@ -15924,11 +15924,11 @@
   after
     65ea5454ae50955b.c8f428d5d7dadae1.174464eb39657bc3.ac60c414b6baa347
     b5c30bccba2cc07f.4cfab2a5aa0fdfb3.96bb211abd6d3f5e.f4b5dd915cb5512e
-    0000000000000000.0000000000000000.174464eb39657bc3.f4b5dd915cb5512e
-    ffdb5ef51e7f618b.2b6220dd179d798a.361d098ea7473956.90092e3e463da26d
+    497a8f082b37c5d6.4f5b5b2e8b21005d.ad6a2f57d85f3fd5.cc7e57d003083d57
+    0000000000000000.0000000000000000.174464eb39657bc3.ac60c414b6baa347
     9ca05f47c1e3bd1c
 
-VPMAXSW_128(reg)
+VMOVUPS_EtoG_128(reg)
   before
     4c90e5581183ca11.b1b2f37eae1050ca.3e5cfb1ce90f86e7.0e9f2cab4532e70a
     fc25bcdcd2ab05f8.3ccbca8ef8f54ec1.e296ea599e016220.12bd129ace2b0520
@@ -15936,12 +15936,12 @@
     cc6e4eec14c0f34a.4ef22ff828eb6581.51f4f2791f9a7ad4.09fe1c9f1378851d
     b6b7378c07e55e5c
   after
-    0000000000000000.0000000000000000.7559ea59d1016220.1c4439475f3f51c2
-    fc25bcdcd2ab05f8.3ccbca8ef8f54ec1.e296ea599e016220.12bd129ace2b0520
+    4c90e5581183ca11.b1b2f37eae1050ca.3e5cfb1ce90f86e7.0e9f2cab4532e70a
+    0000000000000000.0000000000000000.7559e9fed1014ae0.1c4439475f3f51c2
     08abe03e9fe6a97c.7df15f13173a1699.7559e9fed1014ae0.1c4439475f3f51c2
     cc6e4eec14c0f34a.4ef22ff828eb6581.51f4f2791f9a7ad4.09fe1c9f1378851d
     b6b7378c07e55e5c
-VPMAXSW_128(mem)
+VMOVUPS_EtoG_128(mem)
   before
     fd3d07fc578f98ac.a4ba0051cec61f0e.8c98b5294615f7a3.d4b2033523592da7
     bb5b06d91d84ee38.ecdaf4d968836973.13b06d928dc3872c.58de169e79c9a006
@@ -15951,11 +15951,11 @@
   after
     fd3d07fc578f98ac.a4ba0051cec61f0e.8c98b5294615f7a3.d4b2033523592da7
     bb5b06d91d84ee38.ecdaf4d968836973.13b06d928dc3872c.58de169e79c9a006
-    0000000000000000.0000000000000000.13b06d924615f7a3.58de169e79c92da7
-    0c8d868f817de1b7.3bc99002ae5445d2.6d6663bc09dd9521.d7b438278eedb616
+    ccdcb21178cf1d2d.ff1b26f07f840c26.c006d31f1a02d347.3ac62a20be760f9c
+    0000000000000000.0000000000000000.8c98b5294615f7a3.d4b2033523592da7
     89f53d1f84b9d020
 
-VPMINSW_128(reg)
+VADDPS_256(reg)
   before
     add536743c669a65.583aff3e5799f501.fb30307b927f5024.f79b9a56756089e5
     9fa01e9353815092.8aaf970c132f1638.9b9c00c7c69168c8.3a73f3d77a986cc0
@@ -15963,12 +15963,12 @@
     5e26acdb0c2f6f52.132019b3b3fa6f1b.eab22689909cb2b4.5b37fb42c254ef6a
     f1bca3043bf00791
   after
-    0000000000000000.0000000000000000.9b9cfe53c691ca69.12b8ea2c3590fbde
+    bba1f1e665952d52.7ff8cce5d34b0087.7659fe53e717ca69.3a73f3d77a986cc0
     9fa01e9353815092.8aaf970c132f1638.9b9c00c7c69168c8.3a73f3d77a986cc0
     bba1f1e665952d52.7fb8cce5d34b0087.7659fe53e717ca69.12b8ea2c3590fbde
     5e26acdb0c2f6f52.132019b3b3fa6f1b.eab22689909cb2b4.5b37fb42c254ef6a
     f1bca3043bf00791
-VPMINSW_128(mem)
+VADDPS_256(mem)
   before
     b0135d5ebf71fd7e.e27949dce7d9503e.22b5fa63ce481e20.52f572d75dad5b54
     7408a53b68e38e5e.a4e7c65790210cc1.8841ebe1413fcac1.096ce0a8ecd503f6
@@ -15978,11 +15978,11 @@
   after
     b0135d5ebf71fd7e.e27949dce7d9503e.22b5fa63ce481e20.52f572d75dad5b54
     7408a53b68e38e5e.a4e7c65790210cc1.8841ebe1413fcac1.096ce0a8ecd503f6
-    0000000000000000.0000000000000000.8841ebe1ce48cac1.096ce0a8ecd503f6
+    7408a53b68e38e5e.e27949dce7d9503e.22b5fa63ce481e20.52f572d7ecd503f6
     7bfbcf3499c670a6.52444d68bdba093e.c871eff89c5d0989.d8290f82b99b3aee
     a806c8643151439d
 
-VPMINSW_128(reg)
+VADDPS_256(reg)
   before
     37499379d84e39fd.7691aa265b513965.f6ca50d67922c090.5badf969bd9c1308
     e33c6b2e4d1f59bb.e5f5034cb1fb8dc8.489c216d7357442a.b5100358a6b50ad4
@@ -15990,12 +15990,12 @@
     fd6532230b6a0600.94561fe58fe2c524.664f22c6945a9ee4.2e7f085f3da6ae00
     0422fb502496d3ba
   after
-    0000000000000000.0000000000000000.a404be9949e6cfb7.b26889b0a6b5aa18
+    e33c6b2e4d1f59bb.e5f5034cb9d228f5.489c216d7357442a.b513a57f71b4aa18
     e33c6b2e4d1f59bb.e5f5034cb1fb8dc8.489c216d7357442a.b5100358a6b50ad4
     062c4ced2a4fde83.a6f35692b9d227f9.a404be9949e6cfb7.b26889b071b4aa18
     fd6532230b6a0600.94561fe58fe2c524.664f22c6945a9ee4.2e7f085f3da6ae00
     0422fb502496d3ba
-VPMINSW_128(mem)
+VADDPS_256(mem)
   before
     121dde6f4291d570.2533193d8dfd0bde.8becdb2f4e352176.e9c94a61f240ed5c
     333c2ea9b4a16f4e.d8e2fea54b9329cb.667f055e13d9f71b.8bbe30d4ff22f7cc
@@ -16005,11 +16005,11 @@
   after
     121dde6f4291d570.2533193d8dfd0bde.8becdb2f4e352176.e9c94a61f240ed5c
     333c2ea9b4a16f4e.d8e2fea54b9329cb.667f055e13d9f71b.8bbe30d4ff22f7cc
-    0000000000000000.0000000000000000.8becdb2f13d9f71b.8bbe30d4f240ed5c
+    333c2ea94291d570.d8e2fea54b9329cb.667f055e4e352176.e9c94a61ff22f7cc
     1d15011902365f35.5312af14edf9a47c.3dd093181c42050c.99482bf793102f43
     bc75377d5333d5a1
 
-VPMINSW_128(reg)
+VADDPS_256(reg)
   before
     6e4ef38d328326a8.9f687d2916d12b95.d22b73f109e17899.ef25ef7a991fb4b1
     0a1d5992cb8d5f02.a30e5502eeb381ce.4d5625ced1fc5674.f7a8aa728c7dcd58
@@ -16017,12 +16017,12 @@
     6fcf182b9cfc7860.a5860ac4577bb67a.a70c4035d7fd1e12.75672acc41e9315e
     a33be7073c0ff215
   after
-    0000000000000000.0000000000000000.20ddc016d1fc5674.f7a8aa728c7dcd58
+    eb2f67f8cb8d5f02.a30e5502eeb381ce.4d5625cee2d779b8.f7a8aa720f6316f9
     0a1d5992cb8d5f02.a30e5502eeb381ce.4d5625ced1fc5674.f7a8aa728c7dcd58
     eb2f67f8badcbc5b.07d40692a5e81b0c.20ddc016e2d779b8.2f243fe90f670e2e
     6fcf182b9cfc7860.a5860ac4577bb67a.a70c4035d7fd1e12.75672acc41e9315e
     a33be7073c0ff215
-VPMINSW_128(mem)
+VADDPS_256(mem)
   before
     976df2871ce60f7e.f14b69980c79d0bd.5bf0df8421780d45.3e31a1984cfa812d
     2bc9c836fe7942c6.cced54a9a7e0001d.03dd00be1febde98.4197dfa9de5bddb6
@@ -16032,11 +16032,11 @@
   after
     976df2871ce60f7e.f14b69980c79d0bd.5bf0df8421780d45.3e31a1984cfa812d
     2bc9c836fe7942c6.cced54a9a7e0001d.03dd00be1febde98.4197dfa9de5bddb6
-    0000000000000000.0000000000000000.03dddf841febde98.3e31a198de5b812d
+    2bc9c836fe7942c6.f14b6998a7e0001d.5bf0df84218ac48c.419942ecde5bddb6
     a72fc2d53604dca2.01d7ed6bcc9ad799.9d7417502465d888.fb54e489c87673c1
     6a44a22f5749259b
 
-VPMAXUB_128(reg)
+VSUBPS_256(reg)
   before
     b5a52d3573afc092.46d0df9dc415bc8e.13b692f48e05f60c.46b5058064847b7d
     38c38206b7358253.f6ccb545c311a209.eeecc3d1ea89dd32.52aa2fda484986ab
@@ -16044,12 +16044,12 @@
     566576b92ace65e2.fa0081e587ff7259.738cb53ce30ef14b.04e028bd69f5c760
     61b8ee1edff5743f
   after
-    0000000000000000.0000000000000000.efecc3d1eab3ddb9.9eaa2fdaeac0b6ab
+    cfe99c0e4066a45c.f6ccb545d0064a3e.6f89497cfeb3c7b9.52aa2fda6ac0b63d
     38c38206b7358253.f6ccb545c311a209.eeecc3d1ea89dd32.52aa2fda484986ab
     4fe99c0ec066a489.94edc2b950064a3e.efc47a707eb3c7b9.9e1f114beac0b63d
     566576b92ace65e2.fa0081e587ff7259.738cb53ce30ef14b.04e028bd69f5c760
     61b8ee1edff5743f
-VPMAXUB_128(mem)
+VSUBPS_256(mem)
   before
     9174e15868cb7a07.a9810f738ff9ff07.05d16eb58309d488.d48e6fa1b7269794
     70e17c59218495e4.a48a60a88e74afa7.912c0615612f2df4.6f17a40b9688f541
@@ -16059,11 +16059,11 @@
   after
     9174e15868cb7a07.a9810f738ff9ff07.05d16eb58309d488.d48e6fa1b7269794
     70e17c59218495e4.a48a60a88e74afa7.912c0615612f2df4.6f17a40b9688f541
-    0000000000000000.0000000000000000.91d16eb5832fd4f4.d48ea4a1b788f594
+    70e17c59e8cb7a07.2980ecdb0fdb6912.912c0617612f2df4.6f17a40b37269794
     acf89b5d90ccf88b.01931e33c4884002.9daf233630ffb33a.c4ee719fe257c776
     35d400a088ddb456
 
-VPMAXUB_128(reg)
+VSUBPS_256(reg)
   before
     5070fa56a8dc4849.c03c17388074b9ad.1c2b846233399916.d46fa2cf5ac2586a
     71105b2edfe0c0fc.f3602b890e2d7f94.4edf92bbab69f854.fce9baa7d5d1e48a
@@ -16071,12 +16071,12 @@
     368744f000294c51.26760b3e7a080860.6cce9aa02577b7fc.8f3ba9c93005a044
     b2ab78ea48414737
   after
-    0000000000000000.0000000000000000.f5fc92bbc8a4f867.fce9e8acd5d1e4c3
+    74ff4149dfe0c0fc.f3602b89d806056c.75fc45ac48a49967.fce9baa3d5d1e48a
     71105b2edfe0c0fc.f3602b890e2d7f94.4edf92bbab69f854.fce9baa7d5d1e48a
     f4fe2093c976581b.212f533d5806056c.f5fc45acc8a49967.f1e9e8acbe3912c3
     368744f000294c51.26760b3e7a080860.6cce9aa02577b7fc.8f3ba9c93005a044
     b2ab78ea48414737
-VPMAXUB_128(mem)
+VSUBPS_256(mem)
   before
     3504d1fb21fac6c8.91f7c3b32386d74b.de02d0798f41449d.0ea18c025f6e8fbf
     f61431e8d83bd824.629a9947cb1736b4.249c1ddbb3bd754e.39c1174011135d5b
@@ -16086,11 +16086,11 @@
   after
     3504d1fb21fac6c8.91f7c3b32386d74b.de02d0798f41449d.0ea18c025f6e8fbf
     f61431e8d83bd824.629a9947cb1736b4.249c1ddbb3bd754e.39c1174011135d5b
-    0000000000000000.0000000000000000.de9cd0dbb3bd759d.39c18c405f6e8fbf
+    f61431e8d83bd824.629a9947cb1736b4.5e02d079b3bd754e.39c11740df6e8fbf
     9f84f2064e86a2ed.d6a83b92200b6086.cf323fc09baaa4bf.9618e9fd4e9cc9d0
     80e628541198e001
 
-VPMAXUB_128(reg)
+VSUBPS_256(reg)
   before
     6231f037bd73ddbb.3f7d4c0f45a8d4b0.30abff210485a246.ebc40c1c96351bd6
     99453d10eeb9fbab.8b5b9da58a8288ef.71110a32df64a826.0697524e10317612
@@ -16098,12 +16098,12 @@
     71f857584cb88ddc.9cfa10246b90698c.1536e686e882eff4.a82b36e4f3b2cba7
     e885cc20944d3c58
   after
-    0000000000000000.0000000000000000.f4265832df64aed1.fb978c4e26ac769e
+    ff6e0c4deeb9fbab.e1ec5fb2b8217bd4.74289c58df64a826.7b758c42a6ac729e
     99453d10eeb9fbab.8b5b9da58a8288ef.71110a32df64a826.0697524e10317612
     7f6e0c4d3ef7777d.61ec5fb238217bd4.f426582f4c34aed1.fb758c4226ac729e
     71f857584cb88ddc.9cfa10246b90698c.1536e686e882eff4.a82b36e4f3b2cba7
     e885cc20944d3c58
-VPMAXUB_128(mem)
+VSUBPS_256(mem)
   before
     974ecbe2248b83df.cc2f1c9fb1887875.18532be640db0d42.308dafa14ed9a83b
     9054ae17c0785a65.ea5e568c0cf475f3.b0c12ce4d30f2423.a176afee1ac61551
@@ -16113,11 +16113,11 @@
   after
     974ecbe2248b83df.cc2f1c9fb1887875.18532be640db0d42.308dafa14ed9a83b
     9054ae17c0785a65.ea5e568c0cf475f3.b0c12ce4d30f2423.a176afee1ac61551
-    0000000000000000.0000000000000000.b0c12ce6d3db2442.a18dafee4ed9a851
+    174ec88fc0785a65.ea5e568c31887875.b0c12ce4d30f2423.b08dafa1ced9a83b
     d44210868a8caa24.e2d71a0d0dcd9551.a80fd144a0609b15.f43244cb578ffa9c
     8f9cd233fe84ea29
 
-VPEXTRB_GtoE_128_0x0(reg)
+VMULPS_256(reg)
   before
     efc9877c7d3d7d35.d7c48899f0cb9bb5.74b99c78ed532f88.c0866d7e1394727d
     72055f126e49f16d.94b0d3cdd1e90df6.3bc4833a31a4cb55.6444dfa4b3e1acc1
@@ -16125,12 +16125,12 @@
     4dd969d517836710.b0fed74d77ef633a.d384707457d8f95f.c4c03665edf53887
     381713d7bdd30262
   after
-    efc9877c7d3d7d35.d7c48899f0cb9bb5.74b99c78ed532f88.c0866d7e1394727d
+    7f8000007f800000.3f136cf0dd5c1074.8d9710df6884614a.7f80000011ba05d5
     72055f126e49f16d.94b0d3cdd1e90df6.3bc4833a31a4cb55.6444dfa4b3e1acc1
     729b56616d31807d.e9d56f104af1bb14.9144cbbf764da563.7213a3a29d53050b
     4dd969d517836710.b0fed74d77ef633a.d384707457d8f95f.c4c03665edf53887
-    00000000000000c1
-VPEXTRB_GtoE_128_0x0(mem)
+    381713d7bdd30262
+VMULPS_256(mem)
   before
     a8e4b6e62cf91fc8.5d0993db07cae1d3.c7f6887073f0bf95.5dd26fc370d302f5
     f1f39b7c53744be4.0078d0ddda932c72.088afc655aff8b50.8b78c31a5ecafdd0
@@ -16138,13 +16138,13 @@
     7f061cf23f97bef0.6b43738a96d81ff1.7cb722765c796799.43ff5a8c28d9b807
     857896803b09f0bb
   after
-    a8e4b6e62cf91fc8.5d0993db07cae1d3.c7f6887073f0bf95.5dd26fc370d302d0
+    a8e4b6e62cf91fc8.5d0993db07cae1d3.c7f6887073f0bf95.5dd26fc370d302f5
     f1f39b7c53744be4.0078d0ddda932c72.088afc655aff8b50.8b78c31a5ecafdd0
-    f00f3e87504f41e3.90721c492b698298.5087b11849298598.b9c368e3bd48259d
+    5b59a48640edbc25.1e01db1ba2e945cb.9105d89c7f800000.a9cc7ca57f800000
     7f061cf23f97bef0.6b43738a96d81ff1.7cb722765c796799.43ff5a8c28d9b807
     857896803b09f0bb
 
-VPEXTRB_GtoE_128_0x0(reg)
+VMULPS_256(reg)
   before
     da79172a93650a65.7ba2afa93b577e38.eb36d20bb96d412b.66e6cb69aefbee7e
     a050d9f8cb7841b0.c0b07598619b3ce7.6e99343a2db322f0.ebe228df5bbbd674
@@ -16152,12 +16152,12 @@
     ecab10ae4df4f9db.965288ce98e0a628.e8daf14f7e8313cc.366df0003827b742
     b5945284a0eb2971
   after
-    da79172a93650a65.7ba2afa93b577e38.eb36d20bb96d412b.66e6cb69aefbee7e
+    932309ed0cc9890a.ad2e5583ee915c51.7dda8935800800df.7f8000009d11e84d
     a050d9f8cb7841b0.c0b07598619b3ce7.6e99343a2db322f0.ebe228df5bbbd674
     3247d85580cfd249.2bfceaabcc6fb628.4eb695829036ffec.e776b6c280c6daa7
     ecab10ae4df4f9db.965288ce98e0a628.e8daf14f7e8313cc.366df0003827b742
-    0000000000000074
-VPEXTRB_GtoE_128_0x0(mem)
+    b5945284a0eb2971
+VMULPS_256(mem)
   before
     3eb7583ad31deb61.2ac87e6dcf76f213.de7dcdeee2f9c812.9852450e92259c3c
     aea27f0eeec9ba3e.47ea1dffa1def89d.df4b34f5c6c7d913.bb678b2968a8d4e7
@@ -16165,13 +16165,13 @@
     b3ff1cc049c16f6e.936cde4da7951e54.7cfb586cc9afb809.c5a0e227cc8343a0
     655aebe192f2f206
   after
-    3eb7583ad31deb61.2ac87e6dcf76f213.de7dcdeee2f9c812.9852450e92259ce7
+    3eb7583ad31deb61.2ac87e6dcf76f213.de7dcdeee2f9c812.9852450e92259c3c
     aea27f0eeec9ba3e.47ea1dffa1def89d.df4b34f5c6c7d913.bb678b2968a8d4e7
-    e12142ec0cfc5234.a15ce9d160ba4924.758639d15f559657.ab68c10d9d99f77a
+    ade8c1a77f800000.33375b0e31d715be.7e4976cc6a42fe53.143e2e9dbb5a7084
     b3ff1cc049c16f6e.936cde4da7951e54.7cfb586cc9afb809.c5a0e227cc8343a0
     655aebe192f2f206
 
-VPEXTRB_GtoE_128_0x0(reg)
+VMULPS_256(reg)
   before
     e7e3d6a98b734158.000a8c76c224cc18.7864f8e112fcb6db.d0760eb421e2fe56
     a787a1ea51916c41.a40c0bfa9332265f.ae9134f73e7a4b63.4dc3d69482f92269
@@ -16179,12 +16179,12 @@
     5150c486bad5448a.61282a1dab7cc173.79baff5e48ec5f27.32028cccd104f794
     528d72fcf7101f03
   after
-    e7e3d6a98b734158.000a8c76c224cc18.7864f8e112fcb6db.d0760eb421e2fe56
+    8000000095f74fb2.e065dd0f2baaa6b1.0006ca71c697a5a5.de053e3f80000000
     a787a1ea51916c41.a40c0bfa9332265f.ae9134f73e7a4b63.4dc3d69482f92269
     0192470f83d9ae6e.7bd21739d7f5396f.8f3f8dfdc79b1a98.cfae2cf80900e16f
     5150c486bad5448a.61282a1dab7cc173.79baff5e48ec5f27.32028cccd104f794
-    0000000000000069
-VPEXTRB_GtoE_128_0x0(mem)
+    528d72fcf7101f03
+VMULPS_256(mem)
   before
     0b195b74963016e9.f30d15ba95136a42.31dac2942ad07998.c64e87865df855bc
     3973c220cb719871.43143518ad1f5b42.c9b35b8970ff1e0a.d4461fe1a34b3902
@@ -16192,13 +16192,13 @@
     63c1fac564832c1a.5d34d2fd0ace92c8.be0e7c9cc31c1e83.9f9674e131f7bb54
     1485285db069d0b7
   after
-    0b195b74963016e9.f30d15ba95136a42.31dac2942ad07998.c64e87865df85502
+    0b195b74963016e9.f30d15ba95136a42.31dac2942ad07998.c64e87865df855bc
     3973c220cb719871.43143518ad1f5b42.c9b35b8970ff1e0a.d4461fe1a34b3902
-    b76723edb1de60c8.9db2200aa0845535.04816fe89a156cf4.fdf0c5dbb67147a6
+    0512061a22262e6d.f6a35ba502b78718.bc1944465c4fc195.5b1fd68ac1c52349
     63c1fac564832c1a.5d34d2fd0ace92c8.be0e7c9cc31c1e83.9f9674e131f7bb54
     1485285db069d0b7
 
-VPEXTRB_GtoE_128_0x1(reg)
+VDIVPS_256(reg)
   before
     b909debcd051c37b.184cc496016db692.dfe4475d86894ea6.d327fd930822f1e2
     eb6e906b2c3dd04e.b1d6fb4aa4a7ba5d.7f0e7c97b142c77c.1e986eb98433a13e
@@ -16206,12 +16206,12 @@
     610add650a4f27cb.0412a6106a3c249a.8805124581dcdbbf.cbb2113d93a3879c
     e3f23b745e1a35f5
   after
-    b909debcd051c37b.184cc496016db692.dfe4475d86894ea6.d327fd930822f1e2
+    ff8000000a033090.e522b6d580003882.ff800000ca3c9087.0000000080000000
     eb6e906b2c3dd04e.b1d6fb4aa4a7ba5d.7f0e7c97b142c77c.1e986eb98433a13e
     04ff3cd561b932d9.0c291dcf683df6a6.99006b16268437f6.7d2d4bf8545ae9c3
     610add650a4f27cb.0412a6106a3c249a.8805124581dcdbbf.cbb2113d93a3879c
-    00000000000000a1
-VPEXTRB_GtoE_128_0x1(mem)
+    e3f23b745e1a35f5
+VDIVPS_256(mem)
   before
     a3bb458ad0ccaffc.5ed97089c48de9ce.745d10f9c4af0164.aa686d925fd5ee83
     e5d7ab6906c4b3db.58b9efac2affb48e.3ad6d97695a24831.5a7676685bfbadf0
@@ -16219,13 +16219,13 @@
     633b7c372cb744d2.aedca69f6cac59f9.348174dc063a0883.d3c3875f20ff1f6f
     559a865820f649da
   after
-    a3bb458ad0ccaffc.5ed97089c48de9ce.745d10f9c4af0164.aa686d925fd5eead
+    a3bb458ad0ccaffc.5ed97089c48de9ce.745d10f9c4af0164.aa686d925fd5ee83
     e5d7ab6906c4b3db.58b9efac2affb48e.3ad6d97695a24831.5a7676685bfbadf0
-    8713e9ff1b0efbbe.a9f6583ad82fc5b9.30487b73f722b72d.f37b2b3312da54b0
+    7f80000080000002.395ae8eda5e6a2bf.05f8ccfe106d6355.ef87ba9b3b9695d7
     633b7c372cb744d2.aedca69f6cac59f9.348174dc063a0883.d3c3875f20ff1f6f
     559a865820f649da
 
-VPEXTRB_GtoE_128_0x1(reg)
+VDIVPS_256(reg)
   before
     d44c248aae49109d.571bdffd54ca4943.c3b7d5477fffa9fa.204b409ddff6f760
     ae245e626786ad63.3d7e8e3daf54c83c.44d2e29fafb6f469.d27359a39d6342f0
@@ -16233,12 +16233,12 @@
     df7992b0c8ec60ab.5301c1db71fa1e79.fafc820ad57d6640.f40d672a3a7ed7d6
     1c17538351449986
   after
-    d44c248aae49109d.571bdffd54ca4943.c3b7d5477fffa9fa.204b409ddff6f760
+    b02fed55c0baff21.89b707109473bdb5.f6d746e256d4739e.ed1dec138019dada
     ae245e626786ad63.3d7e8e3daf54c83c.44d2e29fafb6f469.d27359a39d6342f0
     3d6f2e4ae6385fd9.f33205e35a5f7bea.8d7ac711985c74f2.24c53dd85d8ca35e
     df7992b0c8ec60ab.5301c1db71fa1e79.fafc820ad57d6640.f40d672a3a7ed7d6
-    0000000000000042
-VPEXTRB_GtoE_128_0x1(mem)
+    1c17538351449986
+VDIVPS_256(mem)
   before
     79ae7dd1bdeaa798.ee8e85fea82ded84.3ab83d110f2e6f14.e7a20ef702a606ff
     e8a062ff9b7cbb38.c8fa04a222874210.8523f571500928e7.b0b96743bc628fdd
@@ -16246,13 +16246,13 @@
     67c04aab1a96e7d5.4806929957b833f5.b24509602de2c5e8.466972a745c44fa0
     cb9a1b984c83fddf
   after
-    79ae7dd1bdeaa798.ee8e85fea82ded84.3ab83d110f2e6f14.e7a20ef702a6068f
+    79ae7dd1bdeaa798.ee8e85fea82ded84.3ab83d110f2e6f14.e7a20ef702a606ff
     e8a062ff9b7cbb38.c8fa04a222874210.8523f571500928e7.b0b96743bc628fdd
-    43b77df906079193.c7090907d3879afd.0e0e65e85196061f.b18c8a599e3e3e84
+    ae6b4e7e1d09dc4a.19e08a70b9c7153e.89e3d2397f800000.0892704ff92eab6d
     67c04aab1a96e7d5.4806929957b833f5.b24509602de2c5e8.466972a745c44fa0
     cb9a1b984c83fddf
 
-VPEXTRB_GtoE_128_0x1(reg)
+VDIVPS_256(reg)
   before
     9b6d8198500486ea.30874501f4367729.a83f9ac449a647a4.4d935ec701f7206e
     142ca013edd52470.7ad8ebe7b0f2febc.41fe1ef446de12b7.bbc5df08e8e4d4dc
@@ -16260,12 +16260,12 @@
     6ea0fb2b5e959197.024724143befe04d.91418613ce59c0b8.810655c7616f3622
     90ac431e2b265c51
   after
-    9b6d8198500486ea.30874501f4367729.a83f9ac449a647a4.4d935ec701f7206e
+    c2865b256fd35e27.7f80000086913148.10e1bc179c7113b7.2196bb15fff29d5e
     142ca013edd52470.7ad8ebe7b0f2febc.41fe1ef446de12b7.bbc5df08e8e4d4dc
     91247576bd81131b.227eb64a69d638b9.70901895e9ebd1da.d9a8080effb29d5e
     6ea0fb2b5e959197.024724143befe04d.91418613ce59c0b8.810655c7616f3622
-    00000000000000d4
-VPEXTRB_GtoE_128_0x1(mem)
+    90ac431e2b265c51
+VDIVPS_256(mem)
   before
     e2654cff78e4cb1a.06ee2e9f6c9bd891.f7fdb0334348b3a4.015c63db92b51bfe
     53ffee5665b43fa7.b7590a3f822225b5.dd6dd7919ded6de9.1a2fab57d08a1e57
@@ -16273,13 +16273,13 @@
     0201eb178cbb24bf.d0b4aeaf38dcbf29.ecabe2bfb44c85ef.ba296d1f2dd00af5
     f9e8df4382596b91
   after
-    e2654cff78e4cb1a.06ee2e9f6c9bd891.f7fdb0334348b3a4.015c63db92b51b1e
+    e2654cff78e4cb1a.06ee2e9f6c9bd891.f7fdb0334348b3a4.015c63db92b51bfe
     53ffee5665b43fa7.b7590a3f822225b5.dd6dd7919ded6de9.1a2fab57d08a1e57
-    bf44a4100da27324.dc2c8c763db3b3ae.9063131c63eac949.39045af525640470
+    b10edd912c49aec2.efe946bd80000000.24f002679a176c6a.584c0dab7d433b64
     0201eb178cbb24bf.d0b4aeaf38dcbf29.ecabe2bfb44c85ef.ba296d1f2dd00af5
     f9e8df4382596b91
 
-VPEXTRB_GtoE_128_0x2(reg)
+VPCMPGTQ_128(reg)
   before
     528eacccc38c65f1.f8033d58ff0a0ea1.f13d6e580f2885d2.cd11bf66aa1f5a08
     2166d02689f332c0.7d1318c0829bedf9.9913c7dc5f244154.0f6026fd616d07c0
@@ -16287,12 +16287,12 @@
     91e00efd1a93375e.a39557b125b578b5.f2d53525d9598a95.25ed83ab84b0d5bb
     b2c2719a27bb6d56
   after
-    528eacccc38c65f1.f8033d58ff0a0ea1.f13d6e580f2885d2.cd11bf66aa1f5a08
+    0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff
     2166d02689f332c0.7d1318c0829bedf9.9913c7dc5f244154.0f6026fd616d07c0
     c2be48bd731c0fab.6c00f73a307b7cf1.2682b6a7c45b2f5b.8d669470f6444742
     91e00efd1a93375e.a39557b125b578b5.f2d53525d9598a95.25ed83ab84b0d5bb
-    000000000000006d
-VPEXTRB_GtoE_128_0x2(mem)
+    b2c2719a27bb6d56
+VPCMPGTQ_128(mem)
   before
     10b1d92afd73cd40.ea1a20521ce3e784.fd9db2137e559d72.5b5942c23aab8fac
     1b8637451fe4afa4.29b6792815985bca.56e6864b5668a654.bb5bd8ea84dc794c
@@ -16300,13 +16300,13 @@
     a711c7d0bd1dec8d.c947f1085a627e64.746686edf6145735.d404908c410cefda
     4443a9deec23f31f
   after
-    10b1d92afd73cd40.ea1a20521ce3e784.fd9db2137e559d72.5b5942c23aab8fdc
+    10b1d92afd73cd40.ea1a20521ce3e784.fd9db2137e559d72.5b5942c23aab8fac
     1b8637451fe4afa4.29b6792815985bca.56e6864b5668a654.bb5bd8ea84dc794c
-    ae0c08d9ab18d0b0.aa0116eca03ecfdb.8a3a4e45caf95086.6f25f30a52788522
+    0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000
     a711c7d0bd1dec8d.c947f1085a627e64.746686edf6145735.d404908c410cefda
     4443a9deec23f31f
 
-VPEXTRB_GtoE_128_0x2(reg)
+VPCMPGTQ_128(reg)
   before
     1c303c6af049cd9e.e15ff01870ffbe6a.e1d308eade8fa510.f236aa2ff4c6768d
     b916449ee80bb802.37c3ff9ce0c80371.50f356fdc852808d.df7537f8e31a6bb9
@@ -16314,12 +16314,12 @@
     adfba4ab2690b32c.abfdc0086a45d6ae.a01b886540c741a4.757479cbfdd9c13f
     d6cc26ad625c9cf1
   after
-    1c303c6af049cd9e.e15ff01870ffbe6a.e1d308eade8fa510.f236aa2ff4c6768d
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     b916449ee80bb802.37c3ff9ce0c80371.50f356fdc852808d.df7537f8e31a6bb9
     7540bee571f4f1f8.870970482a8677ce.71f1d7acb5364b84.16f1a832dc1cf0e6
     adfba4ab2690b32c.abfdc0086a45d6ae.a01b886540c741a4.757479cbfdd9c13f
-    000000000000001a
-VPEXTRB_GtoE_128_0x2(mem)
+    d6cc26ad625c9cf1
+VPCMPGTQ_128(mem)
   before
     17c32bc626b13b27.bd93f45ca46c3c49.816a6ac8ba10db3d.38bb639306919f97
     1225050066e55b0e.0154a9648613c6fc.e31eea7439f343a6.971d66a2a321a109
@@ -16327,13 +16327,13 @@
     aa5f258cc7180d9e.95803329e8f3cfd2.bf865d412e322bb8.165cd214cfc17f1d
     efcf324e97e9d416
   after
-    17c32bc626b13b27.bd93f45ca46c3c49.816a6ac8ba10db3d.38bb639306919f21
+    17c32bc626b13b27.bd93f45ca46c3c49.816a6ac8ba10db3d.38bb639306919f97
     1225050066e55b0e.0154a9648613c6fc.e31eea7439f343a6.971d66a2a321a109
-    a5c02f493d03b7d2.d589bf2f69118ef0.afe3bcf801faca16.178f8cfeb10282a7
+    0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000
     aa5f258cc7180d9e.95803329e8f3cfd2.bf865d412e322bb8.165cd214cfc17f1d
     efcf324e97e9d416
 
-VPEXTRB_GtoE_128_0x2(reg)
+VPCMPGTQ_128(reg)
   before
     fd36aa19a506bd3f.ffcd63b5212f179f.9d83ffbf9f44c64e.f1d34739dda623ba
     9edb35e295a57544.7ed866b067549101.49df215b2b91af0f.1f96f8ce29636e45
@@ -16341,12 +16341,12 @@
     0411741a8e96458f.6ef0a8cd24f9c995.fdd2555a304c4612.e3ad9d7b0ae5ecac
     309a886cd6c297e0
   after
-    fd36aa19a506bd3f.ffcd63b5212f179f.9d83ffbf9f44c64e.f1d34739dda623ba
+    0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000
     9edb35e295a57544.7ed866b067549101.49df215b2b91af0f.1f96f8ce29636e45
     2c0bcf14055139d0.044aa96ab49339ef.f5e0946b2764c6c2.279bebeb2f73c887
     0411741a8e96458f.6ef0a8cd24f9c995.fdd2555a304c4612.e3ad9d7b0ae5ecac
-    0000000000000063
-VPEXTRB_GtoE_128_0x2(mem)
+    309a886cd6c297e0
+VPCMPGTQ_128(mem)
   before
     ea2c2aa9b018854e.833b2162ce01d42f.9695dfc6d491fe21.bd015e93e2d26cac
     ee30fe1eb4f27122.03d4d157611d2359.5907ca42df6894bd.91b9ad84d884743c
@@ -16354,13 +16354,13 @@
     3fbe2d61a86336af.7a812af8ee99f102.207eae6f7800d1d6.e5f20a3b019919ec
     1c0c10d96c152e64
   after
-    ea2c2aa9b018854e.833b2162ce01d42f.9695dfc6d491fe21.bd015e93e2d26c84
+    ea2c2aa9b018854e.833b2162ce01d42f.9695dfc6d491fe21.bd015e93e2d26cac
     ee30fe1eb4f27122.03d4d157611d2359.5907ca42df6894bd.91b9ad84d884743c
-    167280b7fd5d198a.e1278065e2766ebc.9311e62b62894695.d5453d98aeed9a6d
+    0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000
     3fbe2d61a86336af.7a812af8ee99f102.207eae6f7800d1d6.e5f20a3b019919ec
     1c0c10d96c152e64
 
-VPEXTRB_GtoE_128_0x3(reg)
+VPEXTRQ_128_0x0(reg)
   before
     d8df4cdf8cec1482.45df8006d01387c0.282ecc7c1f11e7d8.dd1b9ef93ed9f1ac
     74b7b9b7fcab09f2.04a3f4939176c6e7.487a615e146a8de9.a4b432b5cf216142
@@ -16372,8 +16372,8 @@
     74b7b9b7fcab09f2.04a3f4939176c6e7.487a615e146a8de9.a4b432b5cf216142
     4ce053ce59dd475f.58d408f5089ab150.36b1e40867311fe2.5215e78f48e3dec5
     bba516913e0e0b75.1d3f3516508a0129.4f1e54e7b4f1d86e.c30a3773c42c2460
-    00000000000000cf
-VPEXTRB_GtoE_128_0x3(mem)
+    dd1b9ef93ed9f1ac
+VPEXTRQ_128_0x0(mem)
   before
     5edf9d093780fa91.1f54ff6a47cb90e2.2fb0f9e48653759b.ed0faa689836f63a
     4057ab9465a4027e.d23708c7119f1450.6af3ce4ac500c7d5.6dcee4f6ae8db3f2
@@ -16381,13 +16381,13 @@
     795fe6c3391af9de.99cc6fba57bc03e0.cb1ea08ed037f84b.83e9f0e8e29efcd4
     d1ddbc2538710056
   after
-    5edf9d093780fa91.1f54ff6a47cb90e2.2fb0f9e48653759b.ed0faa689836f6ae
+    5edf9d093780fa91.1f54ff6a47cb90e2.2fb0f9e48653759b.2ba8fcfc93814b41
     4057ab9465a4027e.d23708c7119f1450.6af3ce4ac500c7d5.6dcee4f6ae8db3f2
     559344d8077ec334.329b2f133816d16b.aad432342a9db401.2ba8fcfc93814b41
     795fe6c3391af9de.99cc6fba57bc03e0.cb1ea08ed037f84b.83e9f0e8e29efcd4
     d1ddbc2538710056
 
-VPEXTRB_GtoE_128_0x3(reg)
+VPEXTRQ_128_0x0(reg)
   before
     71cf5a1f30859374.88870c3f16855fa9.6515c5280a1ee85b.a99f9544d4d94ee1
     bf0dc8426767f3da.5dd6323abacab2c0.f0c42bc9eec8ba87.20218c42518f73ec
@@ -16399,8 +16399,8 @@
     bf0dc8426767f3da.5dd6323abacab2c0.f0c42bc9eec8ba87.20218c42518f73ec
     17e101fa78a25a33.d61ad59f42f5ae51.98239f099f44b611.0c7100746466239b
     d59801b400c2052c.ce1d705aca130e85.b77f1c54b72017a5.485b70c728691918
-    0000000000000051
-VPEXTRB_GtoE_128_0x3(mem)
+    a99f9544d4d94ee1
+VPEXTRQ_128_0x0(mem)
   before
     252c2c7c3524cb2d.557ec4da9a533070.21ac7f576c2f8f8b.ab259e17d5e71bee
     7dac72b6b5f4fd1e.f2df47dae2e216ac.aa937e824755ed8d.ce5e22bc9326fc98
@@ -16408,13 +16408,13 @@
     4bd4388837b5c3a7.f8417a14ef2806bb.d3993d1212f12f36.15c11c60603947c2
     f0818c37a726299a
   after
-    252c2c7c3524cb2d.557ec4da9a533070.21ac7f576c2f8f8b.ab259e17d5e71b93
+    252c2c7c3524cb2d.557ec4da9a533070.21ac7f576c2f8f8b.7d79a3b18d68f650
     7dac72b6b5f4fd1e.f2df47dae2e216ac.aa937e824755ed8d.ce5e22bc9326fc98
     95f5a2c15720678d.0a07851e75faf48b.479ee9c77492e3b7.7d79a3b18d68f650
     4bd4388837b5c3a7.f8417a14ef2806bb.d3993d1212f12f36.15c11c60603947c2
     f0818c37a726299a
 
-VPEXTRB_GtoE_128_0x3(reg)
+VPEXTRQ_128_0x0(reg)
   before
     6b07eca1ffbad983.7915b1f770bece98.18db2227ebf788e5.294ff4503a7e8b36
     e29d390a03829329.fd8487fa1e48438b.c51f79c305f3b5b8.278e8c6b0b46b3e2
@@ -16426,8 +16426,8 @@
     e29d390a03829329.fd8487fa1e48438b.c51f79c305f3b5b8.278e8c6b0b46b3e2
     b19070de4f08923a.b2ec387d5e5de0ad.5d5a7c54daa8cade.a72081519e546567
     342c8c8980da135f.731b3f6c4b0b5f29.3bd8264606a30303.87d24dec11b55bf1
-    000000000000000b
-VPEXTRB_GtoE_128_0x3(mem)
+    294ff4503a7e8b36
+VPEXTRQ_128_0x0(mem)
   before
     d3c65ff6069c05c1.c8bc897732845247.1edb18b3025e7c2c.bae47305236f9bd4
     f79f9c3cc03c3261.c78e641400908a9c.8df9403f9f61f5e1.38cc5ffdd099cffd
@@ -16435,13 +16435,13 @@
     890eebe63d0ee4e9.7923a00c6104d83f.2b7f6ad2f8a7e614.9d5c06494434fa05
     3c9cb77443be6a3d
   after
-    d3c65ff6069c05c1.c8bc897732845247.1edb18b3025e7c2c.bae47305236f9bd0
+    d3c65ff6069c05c1.c8bc897732845247.1edb18b3025e7c2c.0fdbe79aa6acdb29
     f79f9c3cc03c3261.c78e641400908a9c.8df9403f9f61f5e1.38cc5ffdd099cffd
     ebc9a1e8c85e93b4.8eec17cd878df80a.9d4132fa3c208475.0fdbe79aa6acdb29
     890eebe63d0ee4e9.7923a00c6104d83f.2b7f6ad2f8a7e614.9d5c06494434fa05
     3c9cb77443be6a3d
 
-VPEXTRB_GtoE_128_0x4(reg)
+VPEXTRQ_128_0x1(reg)
   before
     4ae7f98942d5657c.ae3bf4223958e32a.e47ffa3f2d8366e4.117f64b2ec03d6e9
     2189c5f3da05286e.371c3a89d8494aa4.2b4c22d08595dda8.2c0c9c85363f1221
@@ -16453,8 +16453,8 @@
     2189c5f3da05286e.371c3a89d8494aa4.2b4c22d08595dda8.2c0c9c85363f1221
     1fcd191da9dbeec1.fe7d390537ecd682.a9d6122d05c67b35.59f48f39f26854e7
     9e01f0754be2f41e.e02a6b83714e43f1.bc68c8c14aa37937.7201b8b93b895868
-    0000000000000085
-VPEXTRB_GtoE_128_0x4(mem)
+    e47ffa3f2d8366e4
+VPEXTRQ_128_0x1(mem)
   before
     dbbd9ccde6e39a4a.fb6f46665ba67634.b9ee4ef0a37a4c1c.bf503ff8efb7165b
     e4044f3a7f354f03.9364175c75b4b0ad.66965d37e97cae30.0ed8733e918f8c4d
@@ -16462,13 +16462,13 @@
     e75fa572c75e8de1.df131b083adb3a7a.a7c3ef021e336cc2.fffb03a73ab8f649
     5a2e57a3792161ac
   after
-    dbbd9ccde6e39a4a.fb6f46665ba67634.b9ee4ef0a37a4c1c.bf503ff8efb7163e
+    dbbd9ccde6e39a4a.fb6f46665ba67634.b9ee4ef0a37a4c1c.c1ef14445d602559
     e4044f3a7f354f03.9364175c75b4b0ad.66965d37e97cae30.0ed8733e918f8c4d
     49a0292216afb727.c02c5fc43697dd36.c1ef14445d602559.054d61ffcbb618b9
     e75fa572c75e8de1.df131b083adb3a7a.a7c3ef021e336cc2.fffb03a73ab8f649
     5a2e57a3792161ac
 
-VPEXTRB_GtoE_128_0x4(reg)
+VPEXTRQ_128_0x1(reg)
   before
     7132585d257e968c.9a0b3f17ad4d8e5d.4c6546951c0d0326.f4df6a5f45014098
     a0520243d95ad196.3e7173fce48876c8.636ddcd878b873e5.840e0246f0d45d06
@@ -16480,8 +16480,8 @@
     a0520243d95ad196.3e7173fce48876c8.636ddcd878b873e5.840e0246f0d45d06
     42db52bf32424e75.af5dbe0c891c004e.8179da3beb68c764.331e32a43bba7f39
     b51a423fcbc148d6.c99b9b35b714ea1b.00d33a2c10aa3b4f.ddd9766341be615d
-    0000000000000046
-VPEXTRB_GtoE_128_0x4(mem)
+    4c6546951c0d0326
+VPEXTRQ_128_0x1(mem)
   before
     92842bb8f0525826.5359d02e4063fc65.68f786628b7ced5a.3dc8fa1684090b51
     550b9425d0f9e523.7ae4f8f82eb5a6cd.683cfb7f2061c837.94a41564e2117217
@@ -16489,13 +16489,13 @@
     f778ee232f3fcc2c.cf1301cde496cada.fab57439ffcff27e.00414de1ce4ef89d
     cd9961e8949b8fb6
   after
-    92842bb8f0525826.5359d02e4063fc65.68f786628b7ced5a.3dc8fa1684090b64
+    92842bb8f0525826.5359d02e4063fc65.68f786628b7ced5a.a538767893ce35df
     550b9425d0f9e523.7ae4f8f82eb5a6cd.683cfb7f2061c837.94a41564e2117217
     836d01a5dcef22c1.8409b409314281ba.a538767893ce35df.61b38784c74fad4c
     f778ee232f3fcc2c.cf1301cde496cada.fab57439ffcff27e.00414de1ce4ef89d
     cd9961e8949b8fb6
 
-VPEXTRB_GtoE_128_0x4(reg)
+VPEXTRQ_128_0x1(reg)
   before
     2408c103b4c0ad42.8ff6d88ae6f59f8f.b54ddcb0e33ebdd7.458070ae8170b83f
     61da699fcb4c8fee.26b53ac81d1e5617.9404401ecbc5965d.6165e6c434be464f
@@ -16507,8 +16507,8 @@
     61da699fcb4c8fee.26b53ac81d1e5617.9404401ecbc5965d.6165e6c434be464f
     df5b532874c87065.987f8fc8efc5aeef.c6842a8337b79019.2a30526534c556da
     fcd77c0b4bc28e54.c021567678f66344.a819944cc4a1e8b7.7bac317f9f90a50b
-    00000000000000c4
-VPEXTRB_GtoE_128_0x4(mem)
+    b54ddcb0e33ebdd7
+VPEXTRQ_128_0x1(mem)
   before
     2aeb34ca1fa2ef11.139ae1b3edc52366.7c6708bfd5be3041.970f7ce30d0edae2
     3e4552d46e02623e.80ef7d8bf65e6c49.a71c238d2128d313.edb2ddb6af8aa147
@@ -16516,13 +16516,13 @@
     2f6b2f4cb3aa91c8.cb834b80aa7f092c.b907806cf81385e5.412dfabd6ce1a16d
     f89eafc8bfd35287
   after
-    2aeb34ca1fa2ef11.139ae1b3edc52366.7c6708bfd5be3041.970f7ce30d0edab6
+    2aeb34ca1fa2ef11.139ae1b3edc52366.7c6708bfd5be3041.1c0e21cd794006e6
     3e4552d46e02623e.80ef7d8bf65e6c49.a71c238d2128d313.edb2ddb6af8aa147
     4c81d106955604c1.9e244c010117a4a6.1c0e21cd794006e6.074db33045a27a91
     2f6b2f4cb3aa91c8.cb834b80aa7f092c.b907806cf81385e5.412dfabd6ce1a16d
     f89eafc8bfd35287
 
-VPEXTRB_GtoE_128_0x9(reg)
+VPSRLQ_0x05_128(reg)
   before
     86ecccc0db05c88a.c2cee692e20bc47c.625975748e1fd585.58d5bc54baac0e3d
     48634f0e5b024023.e37875c43e845a0c.bef2c5494985445d.d7424f73dd185b1a
@@ -16530,12 +16530,12 @@
     d8fb755ff88e26c5.3bcc039defef9e6a.3a9ccd46b1d1ff3d.e12b6f02af963311
     2440f34b98c03783
   after
-    86ecccc0db05c88a.c2cee692e20bc47c.625975748e1fd585.58d5bc54baac0e3d
+    0000000000000000.0000000000000000.01d4e66a358e8ff9.07095b78157cb198
     48634f0e5b024023.e37875c43e845a0c.bef2c5494985445d.d7424f73dd185b1a
     9a4f341fdb56f6fd.6c3355cfe4210fa1.3d9a3a6b753c9461.101bb7b47a6129a7
     d8fb755ff88e26c5.3bcc039defef9e6a.3a9ccd46b1d1ff3d.e12b6f02af963311
-    0000000000000044
-VPEXTRB_GtoE_128_0x9(mem)
+    2440f34b98c03783
+VPSRLQ_0x05_128(mem)
   before
     b724bf7a50edef2a.5eb5103a4e350b27.2a0ffc1b7cf9c491.10467b4796cfc29c
     74a5507cf3281731.88c7ff1d78d7e2ce.16c8bb36a64c3d43.1de241d8c3c2182b
@@ -16543,13 +16543,13 @@
     e0a9ada46cf9ab12.3826cfa7b93e559d.56cb7cef43fa17f6.4823025e5eb97188
     1e60f62b06d4eaad
   after
-    b724bf7a50edef2a.5eb5103a4e350b27.2a0ffc1b7cf9c491.10467b4796cfc23d
+    b724bf7a50edef2a.5eb5103a4e350b27.2a0ffc1b7cf9c491.10467b4796cfc29c
     74a5507cf3281731.88c7ff1d78d7e2ce.16c8bb36a64c3d43.1de241d8c3c2182b
     388d203b9e7d6dc5.b27e41731201e667.dcc3bcd98af3c5ab.bbbd1a67d1373f96
     e0a9ada46cf9ab12.3826cfa7b93e559d.56cb7cef43fa17f6.4823025e5eb97188
     1e60f62b06d4eaad
 
-VPEXTRB_GtoE_128_0x9(reg)
+VPSRLQ_0x05_128(reg)
   before
     9ac0f0396415e8b3.46c472a47aa78e43.760ba627091b691d.61ae7566ee6df04f
     198eeef41506a543.47acec25e494d285.c878c35e9c235f93.d9362529a6590ce3
@@ -16557,12 +16557,12 @@
     8ba8e421dd2e4eb8.8b0feb5e39586bea.171ebca102e4df0f.81689743aecafc6b
     68aa5273376747b7
   after
-    9ac0f0396415e8b3.46c472a47aa78e43.760ba627091b691d.61ae7566ee6df04f
+    0000000000000000.0000000000000000.00b8f5e5081726f8.040b44ba1d7657e3
     198eeef41506a543.47acec25e494d285.c878c35e9c235f93.d9362529a6590ce3
     f517ebc8b4365e0c.bf2c9615c4cb3203.89bb21b811e272aa.9b30072487c926de
     8ba8e421dd2e4eb8.8b0feb5e39586bea.171ebca102e4df0f.81689743aecafc6b
-    000000000000005f
-VPEXTRB_GtoE_128_0x9(mem)
+    68aa5273376747b7
+VPSRLQ_0x05_128(mem)
   before
     2cc1b29e3dacc6ed.388bd36b2d7db3f4.852269ee5c483966.cdee91850bb6e26d
     a97b35b1dca6333a.560cb61240acc76b.8a318cb04ca557a2.07779ad0c9e3b771
@@ -16570,13 +16570,13 @@
     3e03924158e6cac8.581d45281cdfeebc.2573ad7afddc760c.76e33d4cd180c51a
     645fce5454077716
   after
-    2cc1b29e3dacc6ed.388bd36b2d7db3f4.852269ee5c483966.cdee91850bb6e257
+    2cc1b29e3dacc6ed.388bd36b2d7db3f4.852269ee5c483966.cdee91850bb6e26d
     a97b35b1dca6333a.560cb61240acc76b.8a318cb04ca557a2.07779ad0c9e3b771
     bba25699315f4cca.42798883b149c6ca.7608ce90227e82cb.2005d5eed7f899c6
     3e03924158e6cac8.581d45281cdfeebc.2573ad7afddc760c.76e33d4cd180c51a
     645fce5454077716
 
-VPEXTRB_GtoE_128_0x9(reg)
+VPSRLQ_0x05_128(reg)
   before
     45c38574fc19eb69.0e6a63946b446c61.f443e96f1efa79ee.733da45af6cdef92
     775c5d1764435cbd.07a347808987ecc0.723871c25227a40c.3c342f1c2b5da889
@@ -16584,12 +16584,12 @@
     3a5d6095e60d2819.e4ba35d050ea7983.85bf1a41c2e4c9ba.afd4f2f7b886cd78
     111622e84738b1c8
   after
-    45c38574fc19eb69.0e6a63946b446c61.f443e96f1efa79ee.733da45af6cdef92
+    0000000000000000.0000000000000000.042df8d20e17264d.057ea797bdc4366b
     775c5d1764435cbd.07a347808987ecc0.723871c25227a40c.3c342f1c2b5da889
     557652a9291107be.057ab9f0ccbb0712.2f48d88f55f1abc1.5c22caadb8965e1c
     3a5d6095e60d2819.e4ba35d050ea7983.85bf1a41c2e4c9ba.afd4f2f7b886cd78
-    00000000000000a4
-VPEXTRB_GtoE_128_0x9(mem)
+    111622e84738b1c8
+VPSRLQ_0x05_128(mem)
   before
     5eb4d66a82b9c539.845d834937c5fa7a.8031380c3222fd3e.d1e93344368d3ba2
     71798a6b8514c6f7.8dc1b830b9c4ba8c.b5a93c908d6e5070.6f121f044c773d26
@@ -16597,13 +16597,13 @@
     5eace39750897e08.50e94448bec9f475.5acf3c21207452e7.1090626bd03fe0b1
     cc7db0ea7635f910
   after
-    5eb4d66a82b9c539.845d834937c5fa7a.8031380c3222fd3e.d1e93344368d3b50
+    5eb4d66a82b9c539.845d834937c5fa7a.8031380c3222fd3e.d1e93344368d3ba2
     71798a6b8514c6f7.8dc1b830b9c4ba8c.b5a93c908d6e5070.6f121f044c773d26
     2833bbd66b55702d.b2d7f9b70797a4fc.5fefbf497ddb2e44.bb85dbeda12f0af2
     5eace39750897e08.50e94448bec9f475.5acf3c21207452e7.1090626bd03fe0b1
     cc7db0ea7635f910
 
-VPEXTRB_GtoE_128_0xE(reg)
+VPMULUDQ_128(reg)
   before
     4a99c1d72e9d91ba.efb1809a51bbadb3.c14495507ae6e5a5.811530058f457a85
     e630929c9402e65c.b60e0dcb89f7b95b.6334e63cd57bb435.b28c15e2e85b6049
@@ -16611,12 +16611,12 @@
     e8fe6163ddf3b237.5b00e86710bf5751.a5027d6cdf3adb2b.9e41a733c78458f5
     12164b8084aee235
   after
-    4a99c1d72e9d91ba.efb1809a51bbadb3.c14495507ae6e5a5.811530058f457a85
+    0000000000000000.0000000000000000.5bcb8339f86908af.4121333298287b17
     e630929c9402e65c.b60e0dcb89f7b95b.6334e63cd57bb435.b28c15e2e85b6049
     fc8d1ea745f032a1.918f0716154a5d2c.900535766e139dd3.c80269a347c1c05f
     e8fe6163ddf3b237.5b00e86710bf5751.a5027d6cdf3adb2b.9e41a733c78458f5
-    0000000000000034
-VPEXTRB_GtoE_128_0xE(mem)
+    12164b8084aee235
+VPMULUDQ_128(mem)
   before
     ff4dd1759b4d1b4b.05cd573bf798a1c7.ef2c2eab976361f6.fe79ba89c47dace9
     40b2b6fe286dbe64.b147fd9d2f6b3c00.2be154ccc5403749.f8b4e838b96749b8
@@ -16624,13 +16624,13 @@
     32358a7c115d364e.226c45ac6bc76617.0711315988db3ba3.3aa908014661de3b
     3bfbf2f215894d46
   after
-    ff4dd1759b4d1b4b.05cd573bf798a1c7.ef2c2eab976361f6.fe79ba89c47dace1
+    ff4dd1759b4d1b4b.05cd573bf798a1c7.ef2c2eab976361f6.fe79ba89c47dace9
     40b2b6fe286dbe64.b147fd9d2f6b3c00.2be154ccc5403749.f8b4e838b96749b8
-    b3107507451989ac.47b84df422f6bf8c.eae9d6b8b7649774.ed0004e75c84f144
+    0000000000000000.0000000000000000.74a573ec50e2c926.8e4e191a0361b878
     32358a7c115d364e.226c45ac6bc76617.0711315988db3ba3.3aa908014661de3b
     3bfbf2f215894d46
 
-VPEXTRB_GtoE_128_0xE(reg)
+VPMULUDQ_128(reg)
   before
     4c42be2765897a14.9beb714aa6458177.a0afe031a7696c4e.6025e09d54b0e003
     c9c9660ad1eba14f.c8ffa75b20de2853.1bcd1af072690fdd.cff15e6f38ef41c0
@@ -16638,12 +16638,12 @@
     77cb3f8e6e0bcbbe.e271ecfa355075d1.7dc85dc722b016b1.63e0bd6db7dc2bff
     3f9b947189a22ad9
   after
-    4c42be2765897a14.9beb714aa6458177.a0afe031a7696c4e.6025e09d54b0e003
+    0000000000000000.0000000000000000.2dbabef28ec548d3.11ef440d66dd48c0
     c9c9660ad1eba14f.c8ffa75b20de2853.1bcd1af072690fdd.cff15e6f38ef41c0
     0edee808f53dfda3.963da69d9c33e50d.f111f0536652886f.31402abb50a41c05
     77cb3f8e6e0bcbbe.e271ecfa355075d1.7dc85dc722b016b1.63e0bd6db7dc2bff
-    00000000000000cd
-VPEXTRB_GtoE_128_0xE(mem)
+    3f9b947189a22ad9
+VPMULUDQ_128(mem)
   before
     a23e2cb3e303d7c0.60dd6706d8e04749.8667f460084293cd.1a3e5db93f10f34e
     69950020e109ece0.25605cdece48acf3.60ea3bba3014fd2a.25bfec945bfc5cf4
@@ -16651,13 +16651,13 @@
     8e8f4d27363a4179.b3e89e5bcf02244e.21cb72f9f08a9fbe.f612a8b4ffaec105
     747bcdd2bf8b36c8
   after
-    a23e2cb3e303d7c0.60dd6706d8e04749.8667f460084293cd.1a3e5db93f10f3ea
+    a23e2cb3e303d7c0.60dd6706d8e04749.8667f460084293cd.1a3e5db93f10f34e
     69950020e109ece0.25605cdece48acf3.60ea3bba3014fd2a.25bfec945bfc5cf4
-    6e6c8ca29ec32664.229f1a81eccf3766.4ac83bf3c9d36d17.fb9706c312038d4c
+    0000000000000000.0000000000000000.018d29152301d8a2.16a932126e5fee58
     8e8f4d27363a4179.b3e89e5bcf02244e.21cb72f9f08a9fbe.f612a8b4ffaec105
     747bcdd2bf8b36c8
 
-VPEXTRB_GtoE_128_0xE(reg)
+VPMULUDQ_128(reg)
   before
     cf207189ed262544.a5c9bd99c67cf84b.3485e3d8126cae58.c1c05bb7c145514c
     644b90452509cd23.90e85ae669940805.01c4e564529a1330.0673731a57113dec
@@ -16665,12 +16665,12 @@
     ad66307d26dd33bc.4d0009be5a7822e2.ee531159376f58f8.f0421c7a4409b614
     4cf7a651d24dbaf4
   after
-    cf207189ed262544.a5c9bd99c67cf84b.3485e3d8126cae58.c1c05bb7c145514c
+    0000000000000000.0000000000000000.0d948e0c02551b30.46bb54ed03099a24
     644b90452509cd23.90e85ae669940805.01c4e564529a1330.0673731a57113dec
     8f49277204c26812.29b69ff93c8f2dd3.75efa16b2a168d81.cdb0340ccff820cb
     ad66307d26dd33bc.4d0009be5a7822e2.ee531159376f58f8.f0421c7a4409b614
-    00000000000000c4
-VPEXTRB_GtoE_128_0xE(mem)
+    4cf7a651d24dbaf4
+VPMULUDQ_128(mem)
   before
     bd994e7b96d2e997.18eda9d026e46ace.d8921221e05ba45e.c73c339a142eb241
     1ff590e6aba3ff28.2d2c8dd8a06649f3.a637380ee9446f73.5bf5029b5ee1d507
@@ -16678,13 +16678,13 @@
     260bd32b3a5bcfc6.c5fe87b97404ed29.7beec836f55bcf15.290b9889a75168bc
     19ff574fde265003
   after
-    bd994e7b96d2e997.18eda9d026e46ace.d8921221e05ba45e.c73c339a142eb237
+    bd994e7b96d2e997.18eda9d026e46ace.d8921221e05ba45e.c73c339a142eb241
     1ff590e6aba3ff28.2d2c8dd8a06649f3.a637380ee9446f73.5bf5029b5ee1d507
-    4ed7e97c2ecdb7d4.486dd90231ec0bd8.93bdf67191403f4c.08cc7bc6b013fef7
+    0000000000000000.0000000000000000.cc6f629dbc67983a.077af349f0b7f4c7
     260bd32b3a5bcfc6.c5fe87b97404ed29.7beec836f55bcf15.290b9889a75168bc
     19ff574fde265003
 
-VPEXTRB_GtoE_128_0xF(reg)
+VPSLLQ_0x05_128(reg)
   before
     36f4b383f11ef278.835dccdeec59002b.0029956806392a91.3a982a49319fdcfb
     da36a8937dc68ac6.4198508160d4092f.553bfe7d821700bd.ac859997601a222a
@@ -16692,12 +16692,12 @@
     2bd04ef46e538b9f.4ffde547fa6e8fc1.bd43d286aa00620f.195a8b9008e34811
     ccdb0614ba49a022
   after
-    36f4b383f11ef278.835dccdeec59002b.0029956806392a91.3a982a49319fdcfb
+    0000000000000000.0000000000000000.a87a50d5400c41e0.2b5172011c690220
     da36a8937dc68ac6.4198508160d4092f.553bfe7d821700bd.ac859997601a222a
     631132ea1ea95499.3c8ad900b0d7a4fd.207fbf63852ba958.ad82900a9ed85dce
     2bd04ef46e538b9f.4ffde547fa6e8fc1.bd43d286aa00620f.195a8b9008e34811
-    0000000000000055
-VPEXTRB_GtoE_128_0xF(mem)
+    ccdb0614ba49a022
+VPSLLQ_0x05_128(mem)
   before
     a1cf7e82cf15212b.90c1f71d0c506c81.58beef435aa683a9.88d235528e22668e
     76046dc563548659.ec2e29d2922d32ee.329973deeb8a3fdf.dd77e333cc1ef280
@@ -16705,13 +16705,13 @@
     8d5ca5807a59efd2.fdaf188cc7b56014.c9ccd9a51287fae6.953610e5c8d2926f
     b0e8888ebda21dc4
   after
-    a1cf7e82cf15212b.90c1f71d0c506c81.58beef435aa683a9.88d235528e226632
+    a1cf7e82cf15212b.90c1f71d0c506c81.58beef435aa683a9.88d235528e22668e
     76046dc563548659.ec2e29d2922d32ee.329973deeb8a3fdf.dd77e333cc1ef280
     264451cb93118cd7.9d64e07d9c761a90.b95aed05ca267d8f.187fd896017f4291
     8d5ca5807a59efd2.fdaf188cc7b56014.c9ccd9a51287fae6.953610e5c8d2926f
     b0e8888ebda21dc4
 
-VPEXTRB_GtoE_128_0xF(reg)
+VPSLLQ_0x05_128(reg)
   before
     c5e13afb7d7b203c.8618e6ce35366a76.695bce69ae784025.3dbdb4a9dfb87210
     2f6c249aa4e9d784.ef438ea2dfb6bbee.3db3fd82ee4bf670.f3f7f9fc4ec5a038
@@ -16719,12 +16719,12 @@
     776c8e1b94b65034.7d1a088d72cdc90c.8e9bb614e74dd262.9179b24481a51135
     32591d107c8fcc61
   after
-    c5e13afb7d7b203c.8618e6ce35366a76.695bce69ae784025.3dbdb4a9dfb87210
+    0000000000000000.0000000000000000.d376c29ce9ba4c40.2f36489034a226a0
     2f6c249aa4e9d784.ef438ea2dfb6bbee.3db3fd82ee4bf670.f3f7f9fc4ec5a038
     4cd642d6cd797e48.a2ab1be895e59c67.d605a14122b8bda0.c647248c7bbb418b
     776c8e1b94b65034.7d1a088d72cdc90c.8e9bb614e74dd262.9179b24481a51135
-    000000000000003d
-VPEXTRB_GtoE_128_0xF(mem)
+    32591d107c8fcc61
+VPSLLQ_0x05_128(mem)
   before
     83b2e3dc89862d3c.0b7806d5962d8af2.5b5ed17b937d000a.c2c23966d8967062
     62527f94c395f1f1.6647a5706e696831.1741f3a013fefb8c.cec625a3921dd54b
@@ -16732,13 +16732,13 @@
     36922a79312d919b.dd5d48f91261fedd.9d162e3ca2a82fcf.de94288ece1bdf8a
     9bf7371589a9fc38
   after
-    83b2e3dc89862d3c.0b7806d5962d8af2.5b5ed17b937d000a.c2c23966d8967017
+    83b2e3dc89862d3c.0b7806d5962d8af2.5b5ed17b937d000a.c2c23966d8967062
     62527f94c395f1f1.6647a5706e696831.1741f3a013fefb8c.cec625a3921dd54b
     a9036e2547c9d4ad.e3246758b9f6259b.8f90e8e70e5e77bf.0ef37637b0713bca
     36922a79312d919b.dd5d48f91261fedd.9d162e3ca2a82fcf.de94288ece1bdf8a
     9bf7371589a9fc38
 
-VPEXTRB_GtoE_128_0xF(reg)
+VPSLLQ_0x05_128(reg)
   before
     9f66a0367da6cf80.e3cb317e9bcde5e8.b23c45bf16352fa2.1ea1408be8e8e1e7
     472f5e5f459e940d.8d7afe1ea4b58cc0.bc0f581760fef497.effb9bc0fe2b4734
@@ -16746,12 +16746,12 @@
     f2f9c975c2b1e3a8.496adae4fc8fc2bf.e3bcb62938a028c0.ed50188c08e8211c
     d2e233fb357a0d0e
   after
-    9f66a0367da6cf80.e3cb317e9bcde5e8.b23c45bf16352fa2.1ea1408be8e8e1e7
+    0000000000000000.0000000000000000.7796c52714051800.aa0311811d042380
     472f5e5f459e940d.8d7afe1ea4b58cc0.bc0f581760fef497.effb9bc0fe2b4734
     ef9c6dfa7d1e878c.116b0d4765f2424e.59207f6b8d488867.eaf2b9c7ff7c1de2
     f2f9c975c2b1e3a8.496adae4fc8fc2bf.e3bcb62938a028c0.ed50188c08e8211c
-    00000000000000bc
-VPEXTRB_GtoE_128_0xF(mem)
+    d2e233fb357a0d0e
+VPSLLQ_0x05_128(mem)
   before
     76748601a13e9ee6.ae946f3bafe4e50e.1242e2e18599c93f.b82ef7bcfe92104b
     b5d18e88684090cd.7eb859b7e141c96a.49c0a0291b1a13f9.32c4408f7aa87bb6
@@ -16759,13 +16759,13 @@
     7520a9ce7930857f.cac9ee8682af26b2.6cde2e50e0b75fcc.8988d6aa0676cddc
     1d4e1dc94d442cee
   after
-    76748601a13e9ee6.ae946f3bafe4e50e.1242e2e18599c93f.b82ef7bcfe921049
+    76748601a13e9ee6.ae946f3bafe4e50e.1242e2e18599c93f.b82ef7bcfe92104b
     b5d18e88684090cd.7eb859b7e141c96a.49c0a0291b1a13f9.32c4408f7aa87bb6
     6cc7c57ea78d9ef2.beb08557f457cb67.c8b090abdb215b19.aec98b104970a6ad
     7520a9ce7930857f.cac9ee8682af26b2.6cde2e50e0b75fcc.8988d6aa0676cddc
     1d4e1dc94d442cee
 
-VPMINUB_128(reg)
+VPMAXUD_128(reg)
   before
     c7675adabb68fe8f.ada9b563fb3601a0.fe5091b12ad717f6.1116f60546ead83e
     e31f8b47ec6e806d.f02e652b48aacd83.b58e6842855ad9e0.932465b62ac5859b
@@ -16773,12 +16773,12 @@
     e29bb6e9044c838a.075ca301b50d4839.2167a74acaa2c455.9ef025bddba566c3
     df476eebdfc113e8
   after
-    0000000000000000.0000000000000000.4d8e6842325aaa1b.932465502a55200e
+    0000000000000000.0000000000000000.b58e6842855ad9e0.ced3f650a855200e
     e31f8b47ec6e806d.f02e652b48aacd83.b58e6842855ad9e0.932465b62ac5859b
     cec2ab7d7be0ee32.1a7b36117d98a651.4dd271a632c5aa1b.ced3f650a855200e
     e29bb6e9044c838a.075ca301b50d4839.2167a74acaa2c455.9ef025bddba566c3
     df476eebdfc113e8
-VPMINUB_128(mem)
+VPMAXUD_128(mem)
   before
     6da44ec4d1b6e3a6.7cf8a8f5243e7d22.939c28e70c146f65.8c980798eb806437
     24d34036cc8f912c.f8237e0f764116a6.9a0941b0a0b9d601.ecb38bfe31e8c570
@@ -16788,11 +16788,11 @@
   after
     6da44ec4d1b6e3a6.7cf8a8f5243e7d22.939c28e70c146f65.8c980798eb806437
     24d34036cc8f912c.f8237e0f764116a6.9a0941b0a0b9d601.ecb38bfe31e8c570
-    0000000000000000.0000000000000000.930928b00c146f01.8c98079831806437
+    0000000000000000.0000000000000000.9a0941b0a0b9d601.ecb38bfeeb806437
     7dd64a924f1d7a3a.0616c31922aa1720.89952096e80e573c.f7d2f4be9a8bbe91
     5b6fd0f1f5deccd2
 
-VPMINUB_128(reg)
+VPMAXUD_128(reg)
   before
     2224c1ebe4ec8d19.d7435a540feb2c1b.50762ae2b429f76e.294dde8dd6d7e933
     aa3fc41804413b11.cab16d5e48cead73.ecd46568e8e96658.b46120166f6dab4a
@@ -16800,12 +16800,12 @@
     69d3edbc45f250c6.ebc389fb97ff0b36.8abe435ca85de5af.facc208d1336b289
     6ebbd754567f6e0a
   after
-    0000000000000000.0000000000000000.367e65185b766658.066120166f6d5a4a
+    0000000000000000.0000000000000000.ecd46568e8e96658.b4612016cfde5aad
     aa3fc41804413b11.cab16d5e48cead73.ecd46568e8e96658.b46120166f6dab4a
     4d0ad4e4f06a1367.32edfe9d17d0b96d.367e6e185b76a28a.069d621ccfde5aad
     69d3edbc45f250c6.ebc389fb97ff0b36.8abe435ca85de5af.facc208d1336b289
     6ebbd754567f6e0a
-VPMINUB_128(mem)
+VPMAXUD_128(mem)
   before
     3d36025db5c74b5b.58e40b0a9f6530db.d0ff8a66e56761fa.44e1dfa16c296c73
     43091d944b1a05a9.778a2a3b9850ed52.bf6c7ec81c1275e4.c0333f5342677384
@@ -16815,11 +16815,11 @@
   after
     3d36025db5c74b5b.58e40b0a9f6530db.d0ff8a66e56761fa.44e1dfa16c296c73
     43091d944b1a05a9.778a2a3b9850ed52.bf6c7ec81c1275e4.c0333f5342677384
-    0000000000000000.0000000000000000.bf6c7e661c1261e4.44333f5342296c73
+    0000000000000000.0000000000000000.d0ff8a66e56761fa.c0333f536c296c73
     63e7143d8e0dffeb.b6c45df8ddbbf014.270d2c25b667c9dc.6d9437b09566ef37
     573ac8314b3fdd32
 
-VPMINUB_128(reg)
+VPMAXUD_128(reg)
   before
     73400cd083ba3b29.358ae88673c7b737.8df0685a6154aeb8.59d8def852288142
     1df000f8d96244c8.afb49cadffbb3b2f.04e26450f4943a6d.04057273475de87f
@@ -16827,12 +16827,12 @@
     8a81e493516b49ab.07d095477e819bd5.434321a5bd3aabbb.34b43211ad54b22b
     71cf550d562e8df4
   after
-    0000000000000000.0000000000000000.04e24e4534073a6d.030565734712b97f
+    0000000000000000.0000000000000000.77e44e45f4943a6d.04057273b112b9be
     1df000f8d96244c8.afb49cadffbb3b2f.04e26450f4943a6d.04057273475de87f
     b0979e15eac435b9.ac32ac9f4ff54900.77e44e453407d0df.03606582b112b9be
     8a81e493516b49ab.07d095477e819bd5.434321a5bd3aabbb.34b43211ad54b22b
     71cf550d562e8df4
-VPMINUB_128(mem)
+VPMAXUD_128(mem)
   before
     987b4a60c9ac0643.05facddeabe3be48.9e5ad190a96ceedc.c24bd9dc2ab808ad
     83858df721dbdb44.7f4d566293b9ce3d.4b9cde68ebc1fd3e.51477256180d2361
@@ -16842,11 +16842,11 @@
   after
     987b4a60c9ac0643.05facddeabe3be48.9e5ad190a96ceedc.c24bd9dc2ab808ad
     83858df721dbdb44.7f4d566293b9ce3d.4b9cde68ebc1fd3e.51477256180d2361
-    0000000000000000.0000000000000000.4b5ad168a96cee3e.51477256180d0861
+    0000000000000000.0000000000000000.9e5ad190ebc1fd3e.c24bd9dc2ab808ad
     19e3efa2f27a840f.dcb534c67facb1dd.5b77597225da43c9.0f4f38c4e46e81bc
     f6f25d8ffb923dbc
 
-VPMAXSB_128(reg)
+VPMINUD_128(reg)
   before
     5dba534e03bca72e.7bcf058ea302d030.7861827ebbe1fde0.75a8be7c56b6f04a
     a0f3166c977bfabe.13495a6ea96a68b4.81185f1ef5a4d4eb.17c1e4c50e2d4bd7
@@ -16854,12 +16854,12 @@
     2ae8f474d4e14ee5.5015adba260b6693.4ed6b7cbd50215c8.5edb60bf8419f6c7
     bc74ae4a7aa6bf82
   after
-    0000000000000000.0000000000000000.54265f1ef5a472eb.1bc14637694a4bd7
+    0000000000000000.0000000000000000.5426c814ca8172aa.17c1e4c50e2d4bd7
     a0f3166c977bfabe.13495a6ea96a68b4.81185f1ef5a4d4eb.17c1e4c50e2d4bd7
     1be9a35453587317.bb1c682e21be06c6.5426c814ca8172aa.1b8e4637694a0e9d
     2ae8f474d4e14ee5.5015adba260b6693.4ed6b7cbd50215c8.5edb60bf8419f6c7
     bc74ae4a7aa6bf82
-VPMAXSB_128(mem)
+VPMINUD_128(mem)
   before
     1224adc268fe24f9.283b0737b5a1c7d5.ae00a4fed45c4647.c9762aafb3b5f7f2
     3ab9d815692ce259.732fd80993241993.b2a9c9e648be600d.23501c2cff2655d4
@@ -16869,11 +16869,11 @@
   after
     1224adc268fe24f9.283b0737b5a1c7d5.ae00a4fed45c4647.c9762aafb3b5f7f2
     3ab9d815692ce259.732fd80993241993.b2a9c9e648be600d.23501c2cff2655d4
-    0000000000000000.0000000000000000.b200c9fe485c6047.23762a2cff2655f2
+    0000000000000000.0000000000000000.ae00a4fe48be600d.23501c2cb3b5f7f2
     73bda2f9163c5883.5d2aa08bb4a53b27.17658e52f1e23581.dfe56ea1526e746d
     fa38c671925fad7e
 
-VPMAXSB_128(reg)
+VPMINUD_128(reg)
   before
     63f68d8bb03c52f5.3cc53a62fa3588a5.b3c98f122fbb8256.310f26af5dbd6787
     776bbf5948939e81.48e0ee556135015f.c6392c5817c49302.60a7dc5fffd7c450
@@ -16881,12 +16881,12 @@
     0ba855c558dd1e83.99839a892a77bd4e.8fba5ed39be00383.6dd1936d54feeed9
     03fb8ca13e2233f1
   after
-    0000000000000000.0000000000000000.f1397358174caa02.60f92d5fff3f0850
+    0000000000000000.0000000000000000.c6392c58074caad8.60a7dc5ff33f0807
     776bbf5948939e81.48e0ee556135015f.c6392c5817c49302.60a7dc5fffd7c450
     90e25849f7f0cecc.73dc3abe68477fde.f1c573ca074caad8.80f92d50f33f0807
     0ba855c558dd1e83.99839a892a77bd4e.8fba5ed39be00383.6dd1936d54feeed9
     03fb8ca13e2233f1
-VPMAXSB_128(mem)
+VPMINUD_128(mem)
   before
     1e4393daceb7937c.4409b13b08e8ca51.96a38aa3c3d278da.fe65ebde700bd9b0
     9a7424031fc7caa6.97516816a29d0de3.460687f650636caf.981015592259690a
@@ -16896,11 +16896,11 @@
   after
     1e4393daceb7937c.4409b13b08e8ca51.96a38aa3c3d278da.fe65ebde700bd9b0
     9a7424031fc7caa6.97516816a29d0de3.460687f650636caf.981015592259690a
-    0000000000000000.0000000000000000.46068af6506378da.fe6515597059690a
+    0000000000000000.0000000000000000.460687f650636caf.981015592259690a
     25c5d5d6768dac85.fbc6d7ab06324b01.2fc795fbb557eee2.c298304c8a8fa6f8
     080e1a9c7990cbe3
 
-VPMAXSB_128(reg)
+VPMINUD_128(reg)
   before
     eab4910bb5e39aac.eb7ced57b35bce92.c48a883d082abee5.20be9e85c4d3f498
     c5d79105d9164fff.834d7f7823d5b8ee.176584e464fcb83e.3329a3f937b62348
@@ -16908,12 +16908,12 @@
     d2c41c4b4a4a59f1.966c024b05fecf42.cb914d229c5c33f9.3489934fb7ddea40
     d9177509fd3bfbe1
   after
-    0000000000000000.0000000000000000.5065c70c6433763e.46292143370a3648
+    0000000000000000.0000000000000000.176584e464fcb83e.3329a3f9290a361b
     c5d79105d9164fff.834d7f7823d5b8ee.176584e464fcb83e.3329a3f937b62348
     f3c316f781b42587.c8040826df0724c5.50a4c70cb63376b5.46d32143290a361b
     d2c41c4b4a4a59f1.966c024b05fecf42.cb914d229c5c33f9.3489934fb7ddea40
     d9177509fd3bfbe1
-VPMAXSB_128(mem)
+VPMINUD_128(mem)
   before
     1049435d152f242a.bc26a06fcf6327e8.c853ebd5b1c57592.e3781390af012db4
     b7eb7a371ec52348.0e359dcdad8bca19.3c833eaffe69d1e0.f6a714c48db19e92
@@ -16923,11 +16923,11 @@
   after
     1049435d152f242a.bc26a06fcf6327e8.c853ebd5b1c57592.e3781390af012db4
     b7eb7a371ec52348.0e359dcdad8bca19.3c833eaffe69d1e0.f6a714c48db19e92
-    0000000000000000.0000000000000000.3c533ed5fe6975e0.f67814c4af012db4
+    0000000000000000.0000000000000000.3c833eafb1c57592.e37813908db19e92
     c1ad102e6c088db2.5b88f2ece23a82d7.56f11302ec749e28.7a09b72a195bd76a
     a2d45135fe6e18bb
 
-VPMINSB_128(reg)
+VPMULLD_128(reg)
   before
     351617b51ebbc0e0.dd676723ebcd7256.0d66438471d90fbd.b5c78c54c6f5877a
     8e1b041614cd0b85.d7c0164dc9641b7f.9720fd07c8b6618c.c41660a6b181167b
@@ -16935,12 +16935,12 @@
     019d432cf4707efd.d9816ef5143aab0d.a35a9c7e41604797.665306fb2bf01938
     b1d8d1d5f2ea044d
   after
-    0000000000000000.0000000000000000.9702fde185b6b58c.c4ac0aa6b1810856
+    0000000000000000.0000000000000000.bcb92727d59dd0cc.1d52f07ea9ce6552
     8e1b041614cd0b85.d7c0164dc9641b7f.9720fd07c8b6618c.c41660a6b181167b
     082f14c47d303755.8d859a9a23da4558.55021ce1855fb5f1.61ac0ae5c9270856
     019d432cf4707efd.d9816ef5143aab0d.a35a9c7e41604797.665306fb2bf01938
     b1d8d1d5f2ea044d
-VPMINSB_128(mem)
+VPMULLD_128(mem)
   before
     1c07e6603b2086c0.d3b38eb8161a1d28.99820e4ab8910bcc.dd73794a9a43522b
     85acc086219e5bbd.dcbbf0d57eba4f83.a752f6852ce91fbf.5f98b0b22c971459
@@ -16950,11 +16950,11 @@
   after
     1c07e6603b2086c0.d3b38eb8161a1d28.99820e4ab8910bcc.dd73794a9a43522b
     85acc086219e5bbd.dcbbf0d57eba4f83.a752f6852ce91fbf.5f98b0b22c971459
-    0000000000000000.0000000000000000.9982f685b8910bbf.dd98b0b29a97142b
+    0000000000000000.0000000000000000.9400887211518134.d79d3574bf2fecf3
     bc88b95836a4ed09.ffd4e97492085f77.2193905df3d255f2.ab39190268bba731
     2d4d43c34ba4f233
 
-VPMINSB_128(reg)
+VPMULLD_128(reg)
   before
     679eb7ced62ce27f.4356cfdb9c4422ae.d17d78cc76cfb569.449b39d27d7aef8b
     b5777091a6e0b4c1.38ca9aaa115c9a8e.4a490f6610bc8f3a.26a31ade47542e08
@@ -16962,12 +16962,12 @@
     fcf5a1ec83faecd5.d7d445dc912442ae.9c79420dd835bd2c.98e2756709cf8a60
     dfb1e7bd39891f93
   after
-    0000000000000000.0000000000000000.c483a9adfdbc8f97.a3a3afde4754ce96
+    0000000000000000.0000000000000000.67bbbdee01fd8b36.61ddfcca81c568b0
     b5777091a6e0b4c1.38ca9aaa115c9a8e.4a490f6610bc8f3a.26a31ade47542e08
     73266a77564ba3a4.75b098b1aef810d5.c483a9adfd5a2897.a376af6b6c6dce96
     fcf5a1ec83faecd5.d7d445dc912442ae.9c79420dd835bd2c.98e2756709cf8a60
     dfb1e7bd39891f93
-VPMINSB_128(mem)
+VPMULLD_128(mem)
   before
     55b0815819a4495b.ae31115cc978cbff.3a021b17d6ede946.2f75d6f23dda89a4
     d6abbf26c42ec3e3.e426b734c2517ccf.7a06984e985fc4c8.d7c462c8c9d4caab
@@ -16977,11 +16977,11 @@
   after
     55b0815819a4495b.ae31115cc978cbff.3a021b17d6ede946.2f75d6f23dda89a4
     d6abbf26c42ec3e3.e426b734c2517ccf.7a06984e985fc4c8.d7c462c8c9d4caab
-    0000000000000000.0000000000000000.3a02981798edc4c8.d7c4d6c8c9d489a4
+    0000000000000000.0000000000000000.8543e9023171d6b0.ffa091108165588c
     69c51808edbd9ae5.4b6a92c74345420f.02be7461046a013d.d98a4ef8c4f89519
     eb9aa7296c3a99d8
 
-VPMINSB_128(reg)
+VPMULLD_128(reg)
   before
     842ce8fcaa0200d6.337b2bf5a3da6fb7.3552bf5c0278d0d8.010bcb15e61cdc87
     fe8d0bdc1ada07bf.785ed3c3949584fa.13221107e63720f6.4d5eb975b6a7da6c
@@ -16989,12 +16989,12 @@
     08edec7202f0e405.e3d6ceb698176181.1aad16548a86f4e4.3c4646e88e752db5
     9672dfd4cfd1fb72
   after
-    0000000000000000.0000000000000000.132285078a0d20f6.c283b86c90a7b617
+    0000000000000000.0000000000000000.14193a7a8a439324.4a21555c43a567b4
     fe8d0bdc1ada07bf.785ed3c3949584fa.13221107e63720f6.4d5eb975b6a7da6c
     b60a0e345950ea41.14388a5fdcfb96d9.402785368a0d6d16.c283b86c9016b617
     08edec7202f0e405.e3d6ceb698176181.1aad16548a86f4e4.3c4646e88e752db5
     9672dfd4cfd1fb72
-VPMINSB_128(mem)
+VPMULLD_128(mem)
   before
     aed5fd1c6c35db79.5082a101b24532ba.c10419b2e4f5a11d.fb00c0cd832ff10b
     5f391ead83ad8af7.ea172a4d04db100a.8a8ee941dba211da.416c7f0d11939f38
@@ -17004,11 +17004,11 @@
   after
     aed5fd1c6c35db79.5082a101b24532ba.c10419b2e4f5a11d.fb00c0cd832ff10b
     5f391ead83ad8af7.ea172a4d04db100a.8a8ee941dba211da.416c7f0d11939f38
-    0000000000000000.0000000000000000.8a8ee9b2dba2a1da.fb00c0cd83939f0b
+    0000000000000000.0000000000000000.f22988320c381fb2.822b7d699d838f68
     fc3756558e0b4406.846da4cc00fb6b2d.4ce506c43b967466.68be2e9259bd0152
     013c15af4c9b2d97
 
-VPERM2F128_0x00(reg)
+VPMAXUW_128(reg)
   before
     6e0301444364fa92.9f696546ba08c8ef.3cc68fd8e19d6057.fe4a4b91ddf6de8d
     0c5fefbbdba5a5ef.4ccc672ecf4a0a00.b54e3c50d5b1d4ce.0b3c04a099546984
@@ -17016,12 +17016,12 @@
     4605bd035cbc847d.3159309825caba44.5f1ad038655c2d4d.a5f1c234d63bd194
     eb4ec0928ddc2705
   after
-    b54e3c50d5b1d4ce.0b3c04a099546984.b54e3c50d5b1d4ce.0b3c04a099546984
+    0000000000000000.0000000000000000.b54ea9a2d5b1d4ce.4f85addd9954d178
     0c5fefbbdba5a5ef.4ccc672ecf4a0a00.b54e3c50d5b1d4ce.0b3c04a099546984
     359cd982afe96a59.de2ed6fbe9dcc662.4d51a9a278c1053c.4f85addd8ebcd178
     4605bd035cbc847d.3159309825caba44.5f1ad038655c2d4d.a5f1c234d63bd194
     eb4ec0928ddc2705
-VPERM2F128_0x00(mem)
+VPMAXUW_128(mem)
   before
     fc6722e1cfab8df7.9ce896ac7dab3107.201af0f09f21a0cf.47f7af80390b89ae
     b307640fbab5bf95.918f61e8af41aaa2.893d93f172ec3532.613242e58e5c540b
@@ -17031,11 +17031,11 @@
   after
     fc6722e1cfab8df7.9ce896ac7dab3107.201af0f09f21a0cf.47f7af80390b89ae
     b307640fbab5bf95.918f61e8af41aaa2.893d93f172ec3532.613242e58e5c540b
-    893d93f172ec3532.613242e58e5c540b.893d93f172ec3532.613242e58e5c540b
+    0000000000000000.0000000000000000.893df0f09f21a0cf.6132af808e5c89ae
     870f78b4f4a77b88.cb5cb9c9b493f7bc.35d86e9b940f5b2b.9af570b632122a67
     721504fab78fadbf
 
-VPERM2F128_0x00(reg)
+VPMAXUW_128(reg)
   before
     ebc43b0b2fdd8fc2.5c0f43047da87c34.c81a3f46bf674294.30e99f1d1c7f6419
     634e115535880e1d.47c7dee11d13393d.d5cda6064b124b2e.158ba3f66c940b8e
@@ -17043,12 +17043,12 @@
     bc218b455d28cd89.d38e74f71459db14.8f410800531f8655.09b51061dada27bc
     d0d572ca302313cc
   after
-    d5cda6064b124b2e.158ba3f66c940b8e.d5cda6064b124b2e.158ba3f66c940b8e
+    0000000000000000.0000000000000000.d5cdeb75f3214e35.be8bf413a3580eb5
     634e115535880e1d.47c7dee11d13393d.d5cda6064b124b2e.158ba3f66c940b8e
     34fe8244661d637b.2602c539f1f570ce.4ec0eb75f3214e35.be8bf413a3580eb5
     bc218b455d28cd89.d38e74f71459db14.8f410800531f8655.09b51061dada27bc
     d0d572ca302313cc
-VPERM2F128_0x00(mem)
+VPMAXUW_128(mem)
   before
     f0b7963cbe418d13.550427c2b73386f2.2b356808a24b363a.f49afb110898303b
     4627f8a2a23f53bd.5df052290fcccb63.0bc41c56b8d73f6d.d918bf16ad198893
@@ -17058,11 +17058,11 @@
   after
     f0b7963cbe418d13.550427c2b73386f2.2b356808a24b363a.f49afb110898303b
     4627f8a2a23f53bd.5df052290fcccb63.0bc41c56b8d73f6d.d918bf16ad198893
-    0bc41c56b8d73f6d.d918bf16ad198893.0bc41c56b8d73f6d.d918bf16ad198893
+    0000000000000000.0000000000000000.2b356808b8d73f6d.f49afb11ad198893
     ffdf68fadb0cade9.251b46612bd6e80c.cecab45ceaef46a9.93b3aba83a613048
     2067cb0e5940f9fc
 
-VPERM2F128_0x00(reg)
+VPMAXUW_128(reg)
   before
     9d71ac17d8565fd2.1bc06dc468f4bbc2.9ff0070b265f399c.6bd990ed3f93bd0a
     661b4a2f542fa076.dd5fa032baeb03af.f601474e91a504e4.feff1d6c8a01d027
@@ -17070,12 +17070,12 @@
     4b82ae3cb15c9dd6.be0781aa1e3b346f.af023550209aff49.79c437e3786bbd48
     19fabcb453800ea3
   after
-    f601474e91a504e4.feff1d6c8a01d027.f601474e91a504e4.feff1d6c8a01d027
+    0000000000000000.0000000000000000.f601474e91a5888f.feffd6c4ea45d027
     661b4a2f542fa076.dd5fa032baeb03af.f601474e91a504e4.feff1d6c8a01d027
     d7b2a1c26858f693.1f887d30edff42d9.879803960535888f.640ad6c4ea453c2d
     4b82ae3cb15c9dd6.be0781aa1e3b346f.af023550209aff49.79c437e3786bbd48
     19fabcb453800ea3
-VPERM2F128_0x00(mem)
+VPMAXUW_128(mem)
   before
     2078e223948fec6b.20d76c0acac8d3eb.96a7278d69ac949b.c88bdbe67d60a6c0
     6a09231c59a513cb.b1fcd7965027d27d.8335ebc3e95d1f89.2f7ff0c5b914b99d
@@ -17085,11 +17085,11 @@
   after
     2078e223948fec6b.20d76c0acac8d3eb.96a7278d69ac949b.c88bdbe67d60a6c0
     6a09231c59a513cb.b1fcd7965027d27d.8335ebc3e95d1f89.2f7ff0c5b914b99d
-    8335ebc3e95d1f89.2f7ff0c5b914b99d.8335ebc3e95d1f89.2f7ff0c5b914b99d
+    0000000000000000.0000000000000000.96a7ebc3e95d949b.c88bf0c5b914b99d
     3798eb5cde132b06.76eaa49c10ee1dca.0c4bbeddf9b0a55e.57d7570f3d731240
     d1d3a252bc37d05c
 
-VPERM2F128_0xFF(reg)
+VPEXTRW_128_EregOnly_toG_0x0(reg)
   before
     086a4c8e8a18e991.722e6a7cd6849438.634affee836fe1dd.606bc598c16a189d
     59e8512f42a39b88.6007f4d5c12b36b3.7babf7afd3145f1d.39a9da562f94a64e
@@ -17097,12 +17097,12 @@
     b9c85c4fe2e4b573.c5b41ee6e14c1432.a0a0af2e77f678d7.eaae1e906b6902b8
     7a0d46e4712d49c8
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    086a4c8e8a18e991.722e6a7cd6849438.634affee836fe1dd.606bc598c16a189d
     59e8512f42a39b88.6007f4d5c12b36b3.7babf7afd3145f1d.39a9da562f94a64e
     2099ada0816220f0.ddf00755bb14cda2.1c59884b9b67d337.73d079055e3a0b9d
     b9c85c4fe2e4b573.c5b41ee6e14c1432.a0a0af2e77f678d7.eaae1e906b6902b8
-    7a0d46e4712d49c8
-VPERM2F128_0xFF(mem)
+    000000000000189d
+VPEXTRW_128_EregOnly_toG_0x0(mem)
   before
     ffba6ceb8d9099fc.80c35ba802b295bd.f421b6764fdec88f.65cb66c4044c8ca8
     54810c92daa0b17e.d0d4a5157c5afd7c.460249f01fd6a5e4.c528ab79def64957
@@ -17112,11 +17112,11 @@
   after
     ffba6ceb8d9099fc.80c35ba802b295bd.f421b6764fdec88f.65cb66c4044c8ca8
     54810c92daa0b17e.d0d4a5157c5afd7c.460249f01fd6a5e4.c528ab79def64957
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    572ea2c675694b7a.07483603ec672959.962255407041665e.1d0179b99f7feb90
     e38cab7179f5241d.806b0bdfef655503.c24e55525c2ac828.caa3ccf0e673affe
     265aa18b4d5fd14d
 
-VPERM2F128_0xFF(reg)
+VPEXTRW_128_EregOnly_toG_0x0(reg)
   before
     8e72f2f470ce8d2b.d369a2810252f893.97891e1321e1bc24.a552c512ff9d876f
     5f36bd99ec4c1f42.058f03e12d8c8207.a8ee6d0d1d669b68.1afa216c76a75e5f
@@ -17124,12 +17124,12 @@
     a7f6af445da7b3cc.9be9f340d8c4ab9c.27bbacffe4bdb10c.2f658f9f4ead48e7
     85c0984fe7c2d1d9
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    8e72f2f470ce8d2b.d369a2810252f893.97891e1321e1bc24.a552c512ff9d876f
     5f36bd99ec4c1f42.058f03e12d8c8207.a8ee6d0d1d669b68.1afa216c76a75e5f
     f3f4fde55c66c23e.54cb4a7d16ae7fa6.0fe5f3377f812e7c.ff12e64cdc530b23
     a7f6af445da7b3cc.9be9f340d8c4ab9c.27bbacffe4bdb10c.2f658f9f4ead48e7
-    85c0984fe7c2d1d9
-VPERM2F128_0xFF(mem)
+    000000000000876f
+VPEXTRW_128_EregOnly_toG_0x0(mem)
   before
     dff07d4ac39d6423.d789cd228a9b2d98.b8b57b188fdac214.4ebd95d0e8a65fc3
     17bfba7a004bbbf1.dff955eb7fcf6e4d.85fa5df158fd7f3b.df35a81626c9754e
@@ -17139,11 +17139,11 @@
   after
     dff07d4ac39d6423.d789cd228a9b2d98.b8b57b188fdac214.4ebd95d0e8a65fc3
     17bfba7a004bbbf1.dff955eb7fcf6e4d.85fa5df158fd7f3b.df35a81626c9754e
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0bfacccdb7d69370.1c92420bd9ceb098.e08615b54e389f3c.3570e33d3ab02f59
     956c2e2e064ca7cc.e8a090ee34252f24.a3231f518e97de44.aeb941b1c1eac88f
     a45ebfde56007d9d
 
-VPERM2F128_0xFF(reg)
+VPEXTRW_128_EregOnly_toG_0x0(reg)
   before
     75a9573196808a2e.93e35c8909b9b530.a06e3c002b5e299e.ac9ef8b13327f77e
     7ce807141cf52bef.df29d2cadb2877c9.a04940ae5b07d8b2.d5c31ac25af3a717
@@ -17151,12 +17151,12 @@
     9a6d9c3e6cf017af.d55687ae5d3c0948.e857458ad3d84856.fb3b2ea39c71bc15
     af26184cef3a98d2
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    75a9573196808a2e.93e35c8909b9b530.a06e3c002b5e299e.ac9ef8b13327f77e
     7ce807141cf52bef.df29d2cadb2877c9.a04940ae5b07d8b2.d5c31ac25af3a717
     1465caf585ec9b8b.560c0ddd98a5a9c2.447e9a625eac790b.fc5e036f1e08aa3b
     9a6d9c3e6cf017af.d55687ae5d3c0948.e857458ad3d84856.fb3b2ea39c71bc15
-    af26184cef3a98d2
-VPERM2F128_0xFF(mem)
+    000000000000f77e
+VPEXTRW_128_EregOnly_toG_0x0(mem)
   before
     f5ea3b55346ffb9d.6b4c795d6e8ddb07.36d4be2a46fa5187.e8213e905417803e
     a75415aa861da1a3.e14d5ebd2650223e.56522e3b6dea3eaa.a0277fe27df55e70
@@ -17166,11 +17166,11 @@
   after
     f5ea3b55346ffb9d.6b4c795d6e8ddb07.36d4be2a46fa5187.e8213e905417803e
     a75415aa861da1a3.e14d5ebd2650223e.56522e3b6dea3eaa.a0277fe27df55e70
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    a2302137014f4510.5abe46ca30c42901.129b51cff1198cde.6bb706ebebff1e98
     c24adbe8c212a50f.30e92df029752cfc.447da5d0ec92f64f.a71bce1739c0fc61
     afa1d3d204c53377
 
-VPERM2F128_0x30(reg)
+VPEXTRW_128_EregOnly_toG_0x7(reg)
   before
     df931188e7980088.e36ec0a9e5717acd.c01b0f9badf067da.c9c2a52c7a613928
     933e85a57fc89e3e.e2684b6785788376.66a0e93757c01547.7d37cdceb8921195
@@ -17178,12 +17178,12 @@
     f6eefcc53c68414a.e50c4386adaf1c36.65d371f38e90bd81.e2e18593b14d6ede
     4bae0e90a6ed6c12
   after
-    26ed2a9667de4b45.9903f70cbe337a35.66a0e93757c01547.7d37cdceb8921195
+    df931188e7980088.e36ec0a9e5717acd.c01b0f9badf067da.c9c2a52c7a613928
     933e85a57fc89e3e.e2684b6785788376.66a0e93757c01547.7d37cdceb8921195
     26ed2a9667de4b45.9903f70cbe337a35.7fc4b530c37173f1.3ca899a2c13239c3
     f6eefcc53c68414a.e50c4386adaf1c36.65d371f38e90bd81.e2e18593b14d6ede
-    4bae0e90a6ed6c12
-VPERM2F128_0x30(mem)
+    000000000000c01b
+VPEXTRW_128_EregOnly_toG_0x7(mem)
   before
     53dbaf82b920ef8a.5e8bf79f99f1bdf9.a250a8bf6ef825a6.751819ea54a82ea6
     d633e45608f1b272.b91218911b06fafd.ac98a3a51c1851b1.0be1a783b045040a
@@ -17193,11 +17193,11 @@
   after
     53dbaf82b920ef8a.5e8bf79f99f1bdf9.a250a8bf6ef825a6.751819ea54a82ea6
     d633e45608f1b272.b91218911b06fafd.ac98a3a51c1851b1.0be1a783b045040a
-    53dbaf82b920ef8a.5e8bf79f99f1bdf9.ac98a3a51c1851b1.0be1a783b045040a
+    b0832af8af6d72f7.65cd59065d323603.dfb3b123d31d5b83.837819283ef47959
     bd97fb55c99feb45.bc09b86afb01abb7.176c4d25b0120047.392a69479b40c941
     8943954b62b6316b
 
-VPERM2F128_0x30(reg)
+VPEXTRW_128_EregOnly_toG_0x7(reg)
   before
     cf0f99a030e0ee86.d93bd5577293d988.1c123028920095c4.308ff397ce04fc29
     67d96fb2a04c393c.e03b33ecc756f7eb.df34beaebeba32d7.05e720654afe0a56
@@ -17205,12 +17205,12 @@
     fd9b86bdd819702b.1f7e6c7be476b6c2.02f108c0428f70bd.5869fbc5c93b4f40
     8d2ba22f0696fd55
   after
-    adef15ed4f865139.ae6391ffe4f3029a.df34beaebeba32d7.05e720654afe0a56
+    cf0f99a030e0ee86.d93bd5577293d988.1c123028920095c4.308ff397ce04fc29
     67d96fb2a04c393c.e03b33ecc756f7eb.df34beaebeba32d7.05e720654afe0a56
     adef15ed4f865139.ae6391ffe4f3029a.63ba5c671abbbc9b.74414f7b3f0ce7fa
     fd9b86bdd819702b.1f7e6c7be476b6c2.02f108c0428f70bd.5869fbc5c93b4f40
-    8d2ba22f0696fd55
-VPERM2F128_0x30(mem)
+    0000000000001c12
+VPEXTRW_128_EregOnly_toG_0x7(mem)
   before
     ef53c0a60f29af65.b32abe8ed791d3bb.0e593f4ee3ecce8f.1a26bd23d3c389e8
     59accf1402011f9b.2be8b9cde97ab698.59c18663fe60072c.05a377fd68e345c9
@@ -17220,11 +17220,11 @@
   after
     ef53c0a60f29af65.b32abe8ed791d3bb.0e593f4ee3ecce8f.1a26bd23d3c389e8
     59accf1402011f9b.2be8b9cde97ab698.59c18663fe60072c.05a377fd68e345c9
-    ef53c0a60f29af65.b32abe8ed791d3bb.59c18663fe60072c.05a377fd68e345c9
+    a9044d67fb290924.c12174e4aa61546c.db80bda650de1dc6.20b533bb9e79de0c
     ba25b58a15ad2b2b.d121ea41b5d1eae3.6f626004f673cb89.c8a7ebc71013905c
     57c79d8f5b3d9966
 
-VPERM2F128_0x30(reg)
+VPEXTRW_128_EregOnly_toG_0x7(reg)
   before
     2a5f457e1a8133d5.67dc83696c9a3fdd.b633174fa657b4aa.f335ec670b2acfa0
     9dbdddffea6d9b56.8ef534f01dfb0265.cea5f7791a7eee6d.42c4dbbcac0fe338
@@ -17232,12 +17232,12 @@
     d4f6d16c2b6bc43d.b67d2ba6fc4a83aa.03d4c1d6fadfa095.b044d8ed00952d99
     87cedca1eb4edbba
   after
-    0d2b6280668d0d95.093c420b44dd2ff1.cea5f7791a7eee6d.42c4dbbcac0fe338
+    2a5f457e1a8133d5.67dc83696c9a3fdd.b633174fa657b4aa.f335ec670b2acfa0
     9dbdddffea6d9b56.8ef534f01dfb0265.cea5f7791a7eee6d.42c4dbbcac0fe338
     0d2b6280668d0d95.093c420b44dd2ff1.74c1862dadd2d3d7.37daabf0f42fc37c
     d4f6d16c2b6bc43d.b67d2ba6fc4a83aa.03d4c1d6fadfa095.b044d8ed00952d99
-    87cedca1eb4edbba
-VPERM2F128_0x30(mem)
+    000000000000b633
+VPEXTRW_128_EregOnly_toG_0x7(mem)
   before
     9a4435f7d1648a0c.4f6a252fd496fdfb.6f836aad6151babf.d92aa3e09d329053
     c3725edbcfe6f5bb.dad25a36fd97f47b.121b7b0c90fb9059.510f28b73357e1bc
@@ -17247,11 +17247,11 @@
   after
     9a4435f7d1648a0c.4f6a252fd496fdfb.6f836aad6151babf.d92aa3e09d329053
     c3725edbcfe6f5bb.dad25a36fd97f47b.121b7b0c90fb9059.510f28b73357e1bc
-    9a4435f7d1648a0c.4f6a252fd496fdfb.121b7b0c90fb9059.510f28b73357e1bc
+    e024d33901dddaf2.d17c6deb43fce468.7912dbb0a456c1a7.c6ce4cc857d8cd7d
     cb2510fd8257f3de.90b258bb42500a6e.82320583ba6d08d3.96b50c7da6439141
     1b0e6243bb2368b5
 
-VPERM2F128_0x21(reg)
+VPMINUW_128(reg)
   before
     b3264c8733059084.614292136e5ffcab.73c11913951fa23a.07477573ed4c220a
     b849c6b4a974435b.7f47d367e201b384.d6f5ab5dd8f6e878.e61fa76a5a00ca77
@@ -17259,12 +17259,12 @@
     7ddf5678012a3cd0.be39887ad145160c.8cfc337ca1ea6cf8.1d4442224f15b8a5
     2e29a2ba118e74be
   after
-    159a0b07a86017d3.f98517561c94be47.b849c6b4a974435b.7f47d367e201b384
+    0000000000000000.0000000000000000.159a0b07a86017d3.e61f17561c94be47
     b849c6b4a974435b.7f47d367e201b384.d6f5ab5dd8f6e878.e61fa76a5a00ca77
     88c3ca35bafcbde6.ff0051e5fa4ad295.159a0b07a86017d3.f98517561c94be47
     7ddf5678012a3cd0.be39887ad145160c.8cfc337ca1ea6cf8.1d4442224f15b8a5
     2e29a2ba118e74be
-VPERM2F128_0x21(mem)
+VPMINUW_128(mem)
   before
     0900b50a7b0bb0be.f4eb64e81a89fac6.99bef21083ff3b12.976721285d1e2393
     8895f7feab9826d0.4a31f3f1a2a53474.6a5a0d952d83fcd6.9226d0777b8b784f
@@ -17274,11 +17274,11 @@
   after
     0900b50a7b0bb0be.f4eb64e81a89fac6.99bef21083ff3b12.976721285d1e2393
     8895f7feab9826d0.4a31f3f1a2a53474.6a5a0d952d83fcd6.9226d0777b8b784f
-    99bef21083ff3b12.976721285d1e2393.8895f7feab9826d0.4a31f3f1a2a53474
+    0000000000000000.0000000000000000.6a5a0d952d833b12.922621285d1e2393
     e529f483cc15b3dc.fe9f7c7e6e460ba5.610b4318d71a4542.c7d361ae4739eadc
     ba593c6e2e938005
 
-VPERM2F128_0x21(reg)
+VPMINUW_128(reg)
   before
     0d64c881e555a300.7bbfa8ebf41b412e.165d70dbe9e22082.3fb756ef0f454444
     1b40015408099078.26437aa85262fa43.7b87d380436ca1c5.84ab0964af6ad0b2
@@ -17286,12 +17286,12 @@
     dd9a6be6057db891.2b4669cd1ee1dc64.9f4bd7560277d534.b39a41d894d37f83
     552dbdb01230193e
   after
-    8a68a1da186fc91d.0cb2d963d295a5b8.1b40015408099078.26437aa85262fa43
+    0000000000000000.0000000000000000.7b87a1da186fa1c5.0cb20964af6aa5b8
     1b40015408099078.26437aa85262fa43.7b87d380436ca1c5.84ab0964af6ad0b2
     4238e351343e831a.c282e6a401f59a46.8a68a1da186fc91d.0cb2d963d295a5b8
     dd9a6be6057db891.2b4669cd1ee1dc64.9f4bd7560277d534.b39a41d894d37f83
     552dbdb01230193e
-VPERM2F128_0x21(mem)
+VPMINUW_128(mem)
   before
     ce39cad568b63017.47b0937e16546a8a.3d5b7e0ec5317dc8.167d6f5fa01101b6
     fa88e234b1738037.dec75984044ed6b0.d48fa15310f1399f.4b4a67608cc88951
@@ -17301,11 +17301,11 @@
   after
     ce39cad568b63017.47b0937e16546a8a.3d5b7e0ec5317dc8.167d6f5fa01101b6
     fa88e234b1738037.dec75984044ed6b0.d48fa15310f1399f.4b4a67608cc88951
-    3d5b7e0ec5317dc8.167d6f5fa01101b6.fa88e234b1738037.dec75984044ed6b0
+    0000000000000000.0000000000000000.3d5b7e0e10f1399f.167d67608cc801b6
     db2228518dc0ba03.ff27ad8fe4ddcb36.0180019908f3f155.5fe564ffbfbe9b7c
     f64b62743e159e65
 
-VPERM2F128_0x21(reg)
+VPMINUW_128(reg)
   before
     bb7bae927bbaed15.48044de759681c05.4109326b0f89cced.4fd53772ed4c668c
     0ac246c51438c339.d85b6f678876a700.201b456686897782.92786bffe646e4e5
@@ -17313,12 +17313,12 @@
     b6c6481bc3eff68d.d09396d580f62691.2003026acbb2baf5.66d8bde68a4af2b0
     b02cd4176c6df979
   after
-    f6aae1ede66808a1.a535192c11ec2a8d.0ac246c51438c339.d85b6f678876a700
+    0000000000000000.0000000000000000.201b4566868908a1.9278192c11ec2a8d
     0ac246c51438c339.d85b6f678876a700.201b456686897782.92786bffe646e4e5
     3f6d257aa21b5d7d.66f108bd36f71620.f6aae1ede66808a1.a535192c11ec2a8d
     b6c6481bc3eff68d.d09396d580f62691.2003026acbb2baf5.66d8bde68a4af2b0
     b02cd4176c6df979
-VPERM2F128_0x21(mem)
+VPMINUW_128(mem)
   before
     5fffd8add460fb14.cb19a9161341cc14.f10d959b817f937d.fb6fa54bd0f4ca2a
     4e1b4793dd2fb3af.d9b446d52d9c19be.a52b7ffb569f1813.e13dc5fa91b974ee
@@ -17328,11 +17328,11 @@
   after
     5fffd8add460fb14.cb19a9161341cc14.f10d959b817f937d.fb6fa54bd0f4ca2a
     4e1b4793dd2fb3af.d9b446d52d9c19be.a52b7ffb569f1813.e13dc5fa91b974ee
-    f10d959b817f937d.fb6fa54bd0f4ca2a.4e1b4793dd2fb3af.d9b446d52d9c19be
+    0000000000000000.0000000000000000.a52b7ffb569f1813.e13da54b91b974ee
     606154ff4393388f.55ee2154309f0a2e.3582083aead25ee8.422b6c76b9fd84cd
     74e4eb1b57946341
 
-VPERM2F128_0x12(reg)
+VPHMINPOSUW_128(reg)
   before
     222dd83f23deccf3.3b23ea5dd83f7d2d.7a2558eb525e274b.c9549ff0e1fc957f
     a8532d4eb668fa8e.c75fd9bb7ff8687a.08d3b9f7ae56ab3c.61f912f11cedd66f
@@ -17340,12 +17340,12 @@
     ac6504dda7699831.6173b82771bf23cf.d4c4ee1e8523da49.09ef7e80cc536109
     d1d76de779df230a
   after
-    a8532d4eb668fa8e.c75fd9bb7ff8687a.5d4442e4e014d2ad.d73ede28b6b1dbe3
-    a8532d4eb668fa8e.c75fd9bb7ff8687a.08d3b9f7ae56ab3c.61f912f11cedd66f
+    222dd83f23deccf3.3b23ea5dd83f7d2d.7a2558eb525e274b.c9549ff0e1fc957f
+    0000000000000000.0000000000000000.0000000000000000.00000000000642e4
     62a1e8b4aebd2abf.dfe09f0554c9b6a1.5d4442e4e014d2ad.d73ede28b6b1dbe3
     ac6504dda7699831.6173b82771bf23cf.d4c4ee1e8523da49.09ef7e80cc536109
     d1d76de779df230a
-VPERM2F128_0x12(mem)
+VPHMINPOSUW_128(mem)
   before
     0dc42a48d961df15.e2ea7e363cf97f91.27e59e0ef5e46a30.c89fba113810fdbd
     97802e8f09e64f53.607b512909f81d8b.0e00cfa4f94748ef.9720a029966678b4
@@ -17355,11 +17355,11 @@
   after
     0dc42a48d961df15.e2ea7e363cf97f91.27e59e0ef5e46a30.c89fba113810fdbd
     97802e8f09e64f53.607b512909f81d8b.0e00cfa4f94748ef.9720a029966678b4
-    97802e8f09e64f53.607b512909f81d8b.27e59e0ef5e46a30.c89fba113810fdbd
+    0000000000000000.0000000000000000.0000000000000000.00000000000727e5
     0999ff8048273d1f.a4f4f191be7468fb.b063ff91f7f0b939.3247af79c17e64dd
     b685cf89c6584e67
 
-VPERM2F128_0x12(reg)
+VPHMINPOSUW_128(reg)
   before
     849afb6ee6cb8025.a88dc4018efa3304.2274b8dedd098fc9.2244f6c0294fc31b
     f9d22d93bc6436c2.0681c1181401cecd.5831c776a43e5be1.26fe284f4b1b540d
@@ -17367,12 +17367,12 @@
     44da9852fb351c4c.709854b94ed4e2bd.5c91b2369cb5d49e.4f302a3dd527facc
     2d40f274747f88f1
   after
-    f9d22d93bc6436c2.0681c1181401cecd.a2761cc5b09e09ee.965e102a7b5e2839
-    f9d22d93bc6436c2.0681c1181401cecd.5831c776a43e5be1.26fe284f4b1b540d
+    849afb6ee6cb8025.a88dc4018efa3304.2274b8dedd098fc9.2244f6c0294fc31b
+    0000000000000000.0000000000000000.0000000000000000.00000000000409ee
     6f786366e4aeabeb.004073b2f545caa7.a2761cc5b09e09ee.965e102a7b5e2839
     44da9852fb351c4c.709854b94ed4e2bd.5c91b2369cb5d49e.4f302a3dd527facc
     2d40f274747f88f1
-VPERM2F128_0x12(mem)
+VPHMINPOSUW_128(mem)
   before
     0c5ae5bb74748bd5.d242c8c39d86c490.3353e21b3ab9d33c.e2cc8537050ff99a
     c94a7dfff211c2a3.76fdf026652ce163.253e98c3d6015950.8f7492348639b491
@@ -17382,11 +17382,11 @@
   after
     0c5ae5bb74748bd5.d242c8c39d86c490.3353e21b3ab9d33c.e2cc8537050ff99a
     c94a7dfff211c2a3.76fdf026652ce163.253e98c3d6015950.8f7492348639b491
-    c94a7dfff211c2a3.76fdf026652ce163.3353e21b3ab9d33c.e2cc8537050ff99a
+    0000000000000000.0000000000000000.0000000000000000.000000000001050f
     48da912ad775b7b0.719b156dd8a86469.06d46d958ce712e5.d33b46cd422bdb1a
     21f2e643b50bbf05
 
-VPERM2F128_0x12(reg)
+VPHMINPOSUW_128(reg)
   before
     0645af63b0ea299a.c31405e97553ee46.7f170a2bbc9644f4.ad178497de9dbebe
     e0819e9bd0555584.8b530e55010a4877.1315e689350987be.f3bab38f50e6efdc
@@ -17394,12 +17394,12 @@
     dfe5daffecfce10a.7212d4e151305358.3dcb45da5db029c1.cc4e4911015fce96
     17d8a97479a7f58a
   after
-    e0819e9bd0555584.8b530e55010a4877.89e3a6f5e28e6a73.b4887669fdce606b
-    e0819e9bd0555584.8b530e55010a4877.1315e689350987be.f3bab38f50e6efdc
+    0645af63b0ea299a.c31405e97553ee46.7f170a2bbc9644f4.ad178497de9dbebe
+    0000000000000000.0000000000000000.0000000000000000.000000000000606b
     09f3ae55b0d77e70.7c632a5996a4806e.89e3a6f5e28e6a73.b4887669fdce606b
     dfe5daffecfce10a.7212d4e151305358.3dcb45da5db029c1.cc4e4911015fce96
     17d8a97479a7f58a
-VPERM2F128_0x12(mem)
+VPHMINPOSUW_128(mem)
   before
     71f2117c81b29172.bda321042150bafd.492b88d94db77d60.8b1abfa442fbff51
     b668fd17348a5d7b.fe7b7cd0eb6044f6.dd79c32da747b9b4.cf1b10be2efc29d2
@@ -17409,11 +17409,11 @@
   after
     71f2117c81b29172.bda321042150bafd.492b88d94db77d60.8b1abfa442fbff51
     b668fd17348a5d7b.fe7b7cd0eb6044f6.dd79c32da747b9b4.cf1b10be2efc29d2
-    b668fd17348a5d7b.fe7b7cd0eb6044f6.492b88d94db77d60.8b1abfa442fbff51
+    0000000000000000.0000000000000000.0000000000000000.00000000000142fb
     719752b30cd7789f.1da5626dabe25ea8.abe7ba99e3b05aea.a9672898884e6851
     f74ae72e30b7f6a8
 
-VPERM2F128_0x03(reg)
+VPMAXSW_128(reg)
   before
     ab0f6dc54d05c79f.9ee8b28c69623e11.b28fe517da6c66b9.9e9f6f8afda13625
     2103b6ca7dc417e2.27c687a7e2ec2555.1cc26e370de10f80.bebd9b86e5cb165a
@@ -17421,12 +17421,12 @@
     c2a783ca85c728f9.ba537e53962b45fd.da337e8df1be37df.f45a44538cf6cc65
     c371bafc84111c92
   after
-    1cc26e370de10f80.bebd9b86e5cb165a.b472bfa75c81241c.e7fb4cf09281e995
+    0000000000000000.0000000000000000.1cc26e370de10f80.e60cb87be5cb165a
     2103b6ca7dc417e2.27c687a7e2ec2555.1cc26e370de10f80.bebd9b86e5cb165a
     b472bfa75c81241c.e7fb4cf09281e995.b58af73ae1ce96a9.e60cb87bb638b4b6
     c2a783ca85c728f9.ba537e53962b45fd.da337e8df1be37df.f45a44538cf6cc65
     c371bafc84111c92
-VPERM2F128_0x03(mem)
+VPMAXSW_128(mem)
   before
     2e1e9661ba945e6a.a6f0fe9d94235f26.7b9c97bc0af8f7ba.e809fe9bda3d2dcf
     132d546e498b4f19.bc972c8e261f074f.08a1151708f4b9f8.395773cf37d8b624
@@ -17436,11 +17436,11 @@
   after
     2e1e9661ba945e6a.a6f0fe9d94235f26.7b9c97bc0af8f7ba.e809fe9bda3d2dcf
     132d546e498b4f19.bc972c8e261f074f.08a1151708f4b9f8.395773cf37d8b624
-    08a1151708f4b9f8.395773cf37d8b624.2e1e9661ba945e6a.a6f0fe9d94235f26
+    0000000000000000.0000000000000000.7b9c15170af8f7ba.395773cf37d82dcf
     b7a16830e3062caa.ed339277422d9543.f20d2d5518a65fa5.178e2d5ebf906bb0
     5c0f699022c4103e
 
-VPERM2F128_0x03(reg)
+VPMAXSW_128(reg)
   before
     56398b99694437e2.2f9db5bd26a291e4.c1bec2470356f467.070dc00e6174bb6d
     5f588fe5309c1c47.8f2bd4a233e295a5.36d995e4b750b236.58f9a66aa6a11865
@@ -17448,12 +17448,12 @@
     11a429f7b1010f07.7b2e79251980696a.77eb153666e93e87.1ac560b89145c497
     433c2c8270d58b29
   after
-    36d995e4b750b236.58f9a66aa6a11865.d4b76fe11456fb1a.b51842cc25d3f418
+    0000000000000000.0000000000000000.36d907baf9a80c5d.58f95d54023831b9
     5f588fe5309c1c47.8f2bd4a233e295a5.36d995e4b750b236.58f9a66aa6a11865
     d4b76fe11456fb1a.b51842cc25d3f418.aacf07baf9a80c5d.bf9d5d54023831b9
     11a429f7b1010f07.7b2e79251980696a.77eb153666e93e87.1ac560b89145c497
     433c2c8270d58b29
-VPERM2F128_0x03(mem)
+VPMAXSW_128(mem)
   before
     18cf3b9ebbf3429b.7269b894a22695b9.be39f79b2af6b1c7.fb7bbac2999f8461
     734a0bf88daca71a.535318258353c8dd.5b073718753f875a.90c9f2cc2f571996
@@ -17463,11 +17463,11 @@
   after
     18cf3b9ebbf3429b.7269b894a22695b9.be39f79b2af6b1c7.fb7bbac2999f8461
     734a0bf88daca71a.535318258353c8dd.5b073718753f875a.90c9f2cc2f571996
-    5b073718753f875a.90c9f2cc2f571996.18cf3b9ebbf3429b.7269b894a22695b9
+    0000000000000000.0000000000000000.5b073718753fb1c7.fb7bf2cc2f571996
     2e28db17371c66ee.04c63bcf87f22929.0e18eedc2780d1d5.61d10b06f2fa23c4
     5524e50f57fe0f14
 
-VPERM2F128_0x03(reg)
+VPMAXSW_128(reg)
   before
     ca6642458e333c70.4723d4b347eb389b.8de6f7c1e27dceaa.ddf35dfac68fbb14
     1de21e143425e384.56357c3e4f85a804.065c74569e3f104c.76c07ed00ea22539
@@ -17475,12 +17475,12 @@
     cebb442d3c729681.c9d2cecdb5484dbd.3875a219a69a5ea5.7160c7540c0664e8
     8ccbe7dbf96eb2ca
   after
-    065c74569e3f104c.76c07ed00ea22539.abe575e8e56143fb.382c51a36af57056
+    0000000000000000.0000000000000000.065c745655c52dbc.76c07ed01dc62539
     1de21e143425e384.56357c3e4f85a804.065c74569e3f104c.76c07ed00ea22539
     abe575e8e56143fb.382c51a36af57056.cb72aefa55c52dbc.b34bcd4a1dc6c971
     cebb442d3c729681.c9d2cecdb5484dbd.3875a219a69a5ea5.7160c7540c0664e8
     8ccbe7dbf96eb2ca
-VPERM2F128_0x03(mem)
+VPMAXSW_128(mem)
   before
     e057a9c9ff0a6e42.e3b0854fd5e419c3.e5f470aa4b89fa64.a9b14a202a4ae2b4
     49d1890c3be7557c.461036bb4d44086d.685eb12549c43478.7972a4798061f495
@@ -17490,11 +17490,11 @@
   after
     e057a9c9ff0a6e42.e3b0854fd5e419c3.e5f470aa4b89fa64.a9b14a202a4ae2b4
     49d1890c3be7557c.461036bb4d44086d.685eb12549c43478.7972a4798061f495
-    685eb12549c43478.7972a4798061f495.e057a9c9ff0a6e42.e3b0854fd5e419c3
+    0000000000000000.0000000000000000.685e70aa4b893478.79724a202a4af495
     cac0943dc49293e9.6740d61d48fb19a8.133905a5eb5a3f95.abb25bd50bf6b07a
     c3c9b1b07a8cd2d8
 
-VPERM2F128_0x85(reg)
+VPMINSW_128(reg)
   before
     ac95a88d29b972b7.9acbb60448786274.dca8bceb046bb390.f3420f83c7cc87f7
     c0623cdab509ccc3.eff5e7cf72ce4c71.0fab02b30df8a890.aac4a9ae7a684c75
@@ -17502,12 +17502,12 @@
     dd2f2b71d1449d15.98d2642126fc6072.1fb29bde7c9a9788.0d5e7f9fd8513d77
     710fb23dbab4e053
   after
-    0000000000000000.0000000000000000.c0623cdab509ccc3.eff5e7cf72ce4c71
+    0000000000000000.0000000000000000.0faba3e0022ea890.aac4a9ae213b4a3c
     c0623cdab509ccc3.eff5e7cf72ce4c71.0fab02b30df8a890.aac4a9ae7a684c75
     5d7c6902b9091ca9.a509a38a5da10d0c.5c95a3e0022e3654.14895014213b4a3c
     dd2f2b71d1449d15.98d2642126fc6072.1fb29bde7c9a9788.0d5e7f9fd8513d77
     710fb23dbab4e053
-VPERM2F128_0x85(mem)
+VPMINSW_128(mem)
   before
     1c6765d8e372f0fc.9ec67f939a468db2.a41da880e8eb03cf.b44de7191ac708d7
     ea34155e7097289d.fa8f5fd4af9c252d.a5b6e993c07baf4e.77b482fd7542c4ed
@@ -17517,11 +17517,11 @@
   after
     1c6765d8e372f0fc.9ec67f939a468db2.a41da880e8eb03cf.b44de7191ac708d7
     ea34155e7097289d.fa8f5fd4af9c252d.a5b6e993c07baf4e.77b482fd7542c4ed
-    0000000000000000.0000000000000000.ea34155e7097289d.fa8f5fd4af9c252d
+    0000000000000000.0000000000000000.a41da880c07baf4e.b44d82fd1ac7c4ed
     5e5858d824420479.f7e2b9643071446c.f50258861fab1965.f7119570d84f1021
     6ba005d817f91897
 
-VPERM2F128_0x85(reg)
+VPMINSW_128(reg)
   before
     7e2ab59885215b83.bd48e4a484e21f0c.4f05298ad2094287.fd4c7c3edf644e54
     8bfb9f1ebd521694.afdc5d0ab6175247.b48917803224da31.6a158f5925ed7e16
@@ -17529,12 +17529,12 @@
     03a11728fc00e4d0.bb1f02550676f468.10e35a889614c7dc.e24f6f6db0a0bdc1
     a659353d2ee24503
   after
-    0000000000000000.0000000000000000.8bfb9f1ebd521694.afdc5d0ab6175247
+    0000000000000000.0000000000000000.80b91780e94eda31.17278f590c5264d6
     8bfb9f1ebd521694.afdc5d0ab6175247.b48917803224da31.6a158f5925ed7e16
     ee5ec1d55b198574.0fe03df7d9f05b58.80b97eb0e94e4813.17270cc50c5264d6
     03a11728fc00e4d0.bb1f02550676f468.10e35a889614c7dc.e24f6f6db0a0bdc1
     a659353d2ee24503
-VPERM2F128_0x85(mem)
+VPMINSW_128(mem)
   before
     3e11d821a225b8c7.250e9b853c966e53.8d6727125cb7d9a6.c051a773d2019436
     8843d6052773d139.b2f24b57b56460aa.63822818f4bec83b.ed5062dd3ba1eacd
@@ -17544,11 +17544,11 @@
   after
     3e11d821a225b8c7.250e9b853c966e53.8d6727125cb7d9a6.c051a773d2019436
     8843d6052773d139.b2f24b57b56460aa.63822818f4bec83b.ed5062dd3ba1eacd
-    0000000000000000.0000000000000000.8843d6052773d139.b2f24b57b56460aa
+    0000000000000000.0000000000000000.8d672712f4bec83b.c051a773d2019436
     9e43d17dd566e8db.794e1c0ac9dd6b83.8764afb4604faf21.29310ede032c2566
     f1abf94d9a2e80be
 
-VPERM2F128_0x85(reg)
+VPMINSW_128(reg)
   before
     a5e540ebcd145604.22abc5ea36225d61.6c5f35c49aa0fc5c.8dc32d206bf11fc9
     a12de1253869e1e4.c7bc0406191a6946.38176aa216cce5ba.0725778729898979
@@ -17556,12 +17556,12 @@
     e1121e192991091f.e50b5000d3ef36dc.cfaa147e7d90aeaf.c32660f331cd35a3
     bd5cf7d1b291f175
   after
-    0000000000000000.0000000000000000.a12de1253869e1e4.c7bc0406191a6946
+    0000000000000000.0000000000000000.3817b511d8ede5ba.cf580ad4b7248979
     a12de1253869e1e4.c7bc0406191a6946.38176aa216cce5ba.0725778729898979
     41cdd76578b95e09.6a4209bf995ac8b6.3bc1b511d8ed6247.cf580ad4b724a75e
     e1121e192991091f.e50b5000d3ef36dc.cfaa147e7d90aeaf.c32660f331cd35a3
     bd5cf7d1b291f175
-VPERM2F128_0x85(mem)
+VPMINSW_128(mem)
   before
     9ac64a58567b9500.dd48b2ace67c1dd4.16e255b4e2e46ee5.521e8254a040069f
     3730d5753a97de6f.91ba90894b07d7d2.d79295c9e3462dfc.1e69fcfedd89a6c3
@@ -17571,11 +17571,11 @@
   after
     9ac64a58567b9500.dd48b2ace67c1dd4.16e255b4e2e46ee5.521e8254a040069f
     3730d5753a97de6f.91ba90894b07d7d2.d79295c9e3462dfc.1e69fcfedd89a6c3
-    0000000000000000.0000000000000000.3730d5753a97de6f.91ba90894b07d7d2
+    0000000000000000.0000000000000000.d79295c9e2e42dfc.1e698254a040a6c3
     1c33842330964eab.908616d67f2a2d5b.7cb0b3c3287e2f07.05b300831817ac55
     d74a83354d758b1b
 
-VPERM2F128_0x5A(reg)
+VPMAXUB_128(reg)
   before
     63e8026c0d9ba2c6.1d64a08a7b92edd1.9478b71d86da403d.18b68980a56cea52
     06d97794f3172cff.4dc5e43874ef218a.c0d6925fa55ae91a.b6c6894e84f71c5c
@@ -17583,12 +17583,12 @@
     fce43868a2408cd1.aa47d516e601366b.0008e2859df8ec6f.6333f9c8d512d45b
     2b28604e80bad2a9
   after
-    06d97794f3172cff.4dc5e43874ef218a.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.c0eda15fa55ae99c.b6c6894ee0f7815c
     06d97794f3172cff.4dc5e43874ef218a.c0d6925fa55ae91a.b6c6894e84f71c5c
     1a69e01a9b756674.8822cc1839bba504.70eda1097935639c.30ac3017e02a8150
     fce43868a2408cd1.aa47d516e601366b.0008e2859df8ec6f.6333f9c8d512d45b
     2b28604e80bad2a9
-VPERM2F128_0x5A(mem)
+VPMAXUB_128(mem)
   before
     6458e193fc2e3765.08957beba304d9c2.90007a1e96ce90eb.cb755040ae2ebe40
     ea8df985667bbfbc.9acaa5103b4d8bf2.1419371c662d6faf.2f7fe8a7476316bb
@@ -17598,11 +17598,11 @@
   after
     6458e193fc2e3765.08957beba304d9c2.90007a1e96ce90eb.cb755040ae2ebe40
     ea8df985667bbfbc.9acaa5103b4d8bf2.1419371c662d6faf.2f7fe8a7476316bb
-    ea8df985667bbfbc.9acaa5103b4d8bf2.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.90197a1e96ce90eb.cb7fe8a7ae63bebb
     4d38db1d72cd26e9.c1eba0ec9ea008c0.6899e9abd4d2aab4.2e98822582fb475d
     82407d155d7798dd
 
-VPERM2F128_0x5A(reg)
+VPMAXUB_128(reg)
   before
     ddb5916030215eb6.e2479d9b4deb7e18.0d70687ca2c14cb7.f199d713aa307f4e
     9d43ba729787d794.348be5758411e891.4fa8075dab98e59e.8929cd220f50c9dc
@@ -17610,12 +17610,12 @@
     b8d93d9b94b5cd13.7ee5f9ed7ca6e513.2560bbc2429600e9.5629c1e1f807aa87
     4330b76ab4b7b9fb
   after
-    9d43ba729787d794.348be5758411e891.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.e3df7afbabb0e59e.8929cdc22050c9dc
     9d43ba729787d794.348be5758411e891.4fa8075dab98e59e.8929cd220f50c9dc
     1c35f5b72f343d25.1ed13097364b2181.e3df7afb58b00c20.0c1547c2203f438b
     b8d93d9b94b5cd13.7ee5f9ed7ca6e513.2560bbc2429600e9.5629c1e1f807aa87
     4330b76ab4b7b9fb
-VPERM2F128_0x5A(mem)
+VPMAXUB_128(mem)
   before
     aff7a64970592e14.cb798e8a6195c20a.2f93bc64742def74.7078c81e07d4fba6
     754b096a47f9c3fd.b262e4f132605ab7.0da7f5e63aecfdd0.22739c7c43f83a03
@@ -17625,11 +17625,11 @@
   after
     aff7a64970592e14.cb798e8a6195c20a.2f93bc64742def74.7078c81e07d4fba6
     754b096a47f9c3fd.b262e4f132605ab7.0da7f5e63aecfdd0.22739c7c43f83a03
-    754b096a47f9c3fd.b262e4f132605ab7.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.2fa7f5e674ecfdd0.7078c87c43f8fba6
     84c41b22b7643ff2.6d3f90d352e95de2.bf30bbbf9e440f27.28428aea8e21734b
     34ae9cd2d53de58f
 
-VPERM2F128_0x5A(reg)
+VPMAXUB_128(reg)
   before
     162c656c026e8b22.8383c39188479f55.f8cade26d9be42b8.4c3d3eee74f48d7a
     290ae123b241a0b1.4efecff3e5580f38.c7cf21a1d4afb8f3.76e029d9870dfd78
@@ -17637,12 +17637,12 @@
     5711e39809fb0b71.b456033cb0361132.a27277bc98124a4b.10182093d6a7a523
     3845253a4a415529
   after
-    290ae123b241a0b1.4efecff3e5580f38.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.c7cf55afe0affcf3.76e5f5d9f49afd78
     290ae123b241a0b1.4efecff3e5580f38.c7cf21a1d4afb8f3.76e029d9870dfd78
     cb920d63804162e7.c000bb32e9a44bc9.379855afe047fc40.18e5f56cf49a1c4c
     5711e39809fb0b71.b456033cb0361132.a27277bc98124a4b.10182093d6a7a523
     3845253a4a415529
-VPERM2F128_0x5A(mem)
+VPMAXUB_128(mem)
   before
     6e37804d6c73e889.28d3612ee9fad7fb.08cc24fb581a1b9f.65a98234989dddbf
     8cbbadb9564a1a70.9c248291bbca0430.962e985dfa5d263d.dc8972837e73f249
@@ -17652,11 +17652,11 @@
   after
     6e37804d6c73e889.28d3612ee9fad7fb.08cc24fb581a1b9f.65a98234989dddbf
     8cbbadb9564a1a70.9c248291bbca0430.962e985dfa5d263d.dc8972837e73f249
-    8cbbadb9564a1a70.9c248291bbca0430.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.96cc98fbfa5d269f.dca98283989df2bf
     f4aa6e47f8134a82.d9a29e6ea60f6c4d.d4e66eb7a22e2ebb.5673f1566531914d
     111579b3a0319320
 
-VPERMILPD_256_0x0(reg)
+VPEXTRB_GtoE_128_0x0(reg)
   before
     f091d6962fad07b8.f5abfa43e81fc004.5b6791c1f79b1f8d.3bd3c887dfd3a3f3
     4f31046dae3029c2.506f484710ffc4be.eeeb1790ab292328.4edc65a98708080b
@@ -17665,11 +17665,11 @@
     1f97af341d723650
   after
     f091d6962fad07b8.f5abfa43e81fc004.5b6791c1f79b1f8d.3bd3c887dfd3a3f3
-    dfc1d53e8fbf14da.dfc1d53e8fbf14da.e7cdc309b7d61b31.e7cdc309b7d61b31
+    4f31046dae3029c2.506f484710ffc4be.eeeb1790ab292328.4edc65a98708080b
     8a41ffa2ba4634e9.dfc1d53e8fbf14da.ef7a2c495d43b2cb.e7cdc309b7d61b31
     fd0fc4a3ee7b65da.7f6c1b167e6b6a84.bb60cc57a9780822.e3725d948a4b968e
-    1f97af341d723650
-VPERMILPD_256_0x0(mem)
+    000000000000000b
+VPEXTRB_GtoE_128_0x0(mem)
   before
     750835d68c58b6a3.04e64ddbe75cf841.0d3d98bafb1082e9.ace9f4252c5163d8
     c2906c67f107d4b3.fb1198b6417429c9.6300c71622b91a35.20609f21825cfd9a
@@ -17677,13 +17677,13 @@
     b119da0313f6d5b7.28976205857a53ee.da8c2ca7db49b530.fc4c6e501536e1f0
     1e588b5c8a1da2dd
   after
-    750835d68c58b6a3.04e64ddbe75cf841.0d3d98bafb1082e9.ace9f4252c5163d8
-    04e64ddbe75cf841.04e64ddbe75cf841.ace9f4252c5163d8.0d3d98bafb1082e9
+    750835d68c58b6a3.04e64ddbe75cf841.0d3d98bafb1082e9.ace9f4252c51639a
+    c2906c67f107d4b3.fb1198b6417429c9.6300c71622b91a35.20609f21825cfd9a
     e2fdcfd26b8e4aab.3edda1a09650331f.5e8124160e73ec93.7112c9b646251313
     b119da0313f6d5b7.28976205857a53ee.da8c2ca7db49b530.fc4c6e501536e1f0
     1e588b5c8a1da2dd
 
-VPERMILPD_256_0x0(reg)
+VPEXTRB_GtoE_128_0x0(reg)
   before
     31821b4441669385.0bb109e5084d3005.1788d951a781c5e3.b3ed59b3a6473137
     92181975d79bf095.cd91d966639e18be.66ff00f19aeec4aa.c56f29278b7a1bd5
@@ -17692,11 +17692,11 @@
     e9ba3e2de9c3caef
   after
     31821b4441669385.0bb109e5084d3005.1788d951a781c5e3.b3ed59b3a6473137
-    d185c57142f64911.d185c57142f64911.ecdf17f0a5ed3036.ecdf17f0a5ed3036
+    92181975d79bf095.cd91d966639e18be.66ff00f19aeec4aa.c56f29278b7a1bd5
     9d65845ce74af4b9.d185c57142f64911.7147d54ffa4f8dee.ecdf17f0a5ed3036
     aeb455630effdc9c.f45848f3c1607f28.93ab54d9622f5c5b.040aa0f910ac2c85
-    e9ba3e2de9c3caef
-VPERMILPD_256_0x0(mem)
+    00000000000000d5
+VPEXTRB_GtoE_128_0x0(mem)
   before
     77bb6f7a4b3fc79f.21528af8e845e4ea.12d8e1d6fbe8752f.2a7977f96f1b6d9f
     8adbaecb532cdfc2.528b1d860fa84850.07cf09070d9be853.90fb3c1dbc9efb64
@@ -17704,13 +17704,13 @@
     afa44729c3854f10.5efe533cbaf61214.e555fa0426af35a2.3d4e991e879a8122
     3cb629d33e2af074
   after
-    77bb6f7a4b3fc79f.21528af8e845e4ea.12d8e1d6fbe8752f.2a7977f96f1b6d9f
-    21528af8e845e4ea.21528af8e845e4ea.2a7977f96f1b6d9f.12d8e1d6fbe8752f
+    77bb6f7a4b3fc79f.21528af8e845e4ea.12d8e1d6fbe8752f.2a7977f96f1b6d64
+    8adbaecb532cdfc2.528b1d860fa84850.07cf09070d9be853.90fb3c1dbc9efb64
     fee5770c1c94ce84.9dab0c7922b4437a.ae0a3e73128494c0.237e9eb0e5444356
     afa44729c3854f10.5efe533cbaf61214.e555fa0426af35a2.3d4e991e879a8122
     3cb629d33e2af074
 
-VPERMILPD_256_0x0(reg)
+VPEXTRB_GtoE_128_0x0(reg)
   before
     7a044b3ba583cdf7.79e5980e630b1f93.f1d0ec3d76f9f1c9.877cbba866298624
     5582fac2582e5458.3874e8a71930fa38.b26cd5e8ef491c45.704afd4aeefd4472
@@ -17719,11 +17719,11 @@
     6c9d9a5b490f62e1
   after
     7a044b3ba583cdf7.79e5980e630b1f93.f1d0ec3d76f9f1c9.877cbba866298624
-    c81db2e100029c2c.c81db2e100029c2c.7c8d3ad5d9372ab9.7c8d3ad5d9372ab9
+    5582fac2582e5458.3874e8a71930fa38.b26cd5e8ef491c45.704afd4aeefd4472
     277e32d4f4b9c143.c81db2e100029c2c.fd2009a7c373ce35.7c8d3ad5d9372ab9
     4e42efdd14b04f63.04ac73a6358dc09a.2e3684e78e024445.870ff03743e4f625
-    6c9d9a5b490f62e1
-VPERMILPD_256_0x0(mem)
+    0000000000000072
+VPEXTRB_GtoE_128_0x0(mem)
   before
     0903b42d06c42b1a.241b2d4a559d3b64.caeca5e4d3db23b0.a1fb4215eb83b920
     390dba9a97100cfc.0654e985530ec1f3.f5abc685f6fa8197.b2bb409b77816b73
@@ -17731,13 +17731,13 @@
     c13c7cf0a39a0a69.5f1ac81af2aa896b.e9d1c2a53ed91c8e.1d5be96389247130
     30d38c7d48e23df2
   after
-    0903b42d06c42b1a.241b2d4a559d3b64.caeca5e4d3db23b0.a1fb4215eb83b920
-    241b2d4a559d3b64.241b2d4a559d3b64.a1fb4215eb83b920.caeca5e4d3db23b0
+    0903b42d06c42b1a.241b2d4a559d3b64.caeca5e4d3db23b0.a1fb4215eb83b973
+    390dba9a97100cfc.0654e985530ec1f3.f5abc685f6fa8197.b2bb409b77816b73
     d787298c17fec3b2.513b1efca88f1cbc.60b35177bbf6957e.bdc179e7cd8894ea
     c13c7cf0a39a0a69.5f1ac81af2aa896b.e9d1c2a53ed91c8e.1d5be96389247130
     30d38c7d48e23df2
 
-VPERMILPD_256_0xF(reg)
+VPEXTRB_GtoE_128_0x1(reg)
   before
     51765ea0a54d35db.d2fa2fb356f19d4c.8d3fe34bcded44ab.6bd195fb9ab2d2f6
     dc905c383df29598.e58bbebf4d0e3a88.37f46cfbd4e48928.c17f4765eb8a73e0
@@ -17746,11 +17746,11 @@
     5b936954b88d2d66
   after
     51765ea0a54d35db.d2fa2fb356f19d4c.8d3fe34bcded44ab.6bd195fb9ab2d2f6
-    2c6d81b1ac5c99d5.2c6d81b1ac5c99d5.b9865e96a4199390.b9865e96a4199390
+    dc905c383df29598.e58bbebf4d0e3a88.37f46cfbd4e48928.c17f4765eb8a73e0
     2c6d81b1ac5c99d5.d8bca502a3fd9b48.b9865e96a4199390.c9a753cf4e6fba79
     9f59c9778c177d3d.8559616774cb7db9.6f41b588d81b9f8c.5d143525de6c64ec
-    5b936954b88d2d66
-VPERMILPD_256_0xF(mem)
+    0000000000000073
+VPEXTRB_GtoE_128_0x1(mem)
   before
     9df16c46f7dfd012.8fa030f67cb07c7c.ca2e6ddadd839b07.b6706d3d0d73e9cb
     01f8b8e8b86d0a1d.5a8db39b16b2d340.81064546fa32b35d.e8618221deafacf7
@@ -17758,13 +17758,13 @@
     9a3321ee2e6e33ff.ed8cfa03b8217701.b9f34abfbda2bbd4.80b4b527c50091c8
     9eafca21142e29c4
   after
-    9df16c46f7dfd012.8fa030f67cb07c7c.ca2e6ddadd839b07.b6706d3d0d73e9cb
-    9df16c46f7dfd012.9df16c46f7dfd012.ca2e6ddadd839b07.b6706d3d0d73e9cb
+    9df16c46f7dfd012.8fa030f67cb07c7c.ca2e6ddadd839b07.b6706d3d0d73e9ac
+    01f8b8e8b86d0a1d.5a8db39b16b2d340.81064546fa32b35d.e8618221deafacf7
     6174cb27164497b3.5a6d4dd0f6a9bd33.87af659ae6e37fe8.625ef1a1e75a26bc
     9a3321ee2e6e33ff.ed8cfa03b8217701.b9f34abfbda2bbd4.80b4b527c50091c8
     9eafca21142e29c4
 
-VPERMILPD_256_0xF(reg)
+VPEXTRB_GtoE_128_0x1(reg)
   before
     179b2cf96e6f2c5f.890034281bfa992e.6d36b69efaa73d57.f19f6fa29c7b254c
     49c4d81d7250d443.08a681c3faf1866c.38b77d0f55c74be1.0c7f502f9f7b777c
@@ -17773,11 +17773,11 @@
     484e340c93d93a1a
   after
     179b2cf96e6f2c5f.890034281bfa992e.6d36b69efaa73d57.f19f6fa29c7b254c
-    8f76c9f8ba5b5d1c.8f76c9f8ba5b5d1c.a85b4cc1670bdd4a.a85b4cc1670bdd4a
+    49c4d81d7250d443.08a681c3faf1866c.38b77d0f55c74be1.0c7f502f9f7b777c
     8f76c9f8ba5b5d1c.f4f285aae661b6e4.a85b4cc1670bdd4a.e75f6953e0ad6e92
     45fcfaf6e21f0597.29b0bbc9fc55e4c2.1a6d1e20cc012e3f.5c0a36f87e1ec5b7
-    484e340c93d93a1a
-VPERMILPD_256_0xF(mem)
+    0000000000000077
+VPEXTRB_GtoE_128_0x1(mem)
   before
     87f5de793bea87e5.c7a36a8387250660.84aca00d57dacd34.eb3bef981f357b6b
     f5ccb02d935d6945.71b7120b44fb9d23.dfb2ae6013fb2d63.750fbb95fd31ff7b
@@ -17785,13 +17785,13 @@
     cf3abd17c19cda72.ac56febd78457c44.080b3ae7204141af.28fc35cec7b7a0f6
     08acdbe3ec5733b9
   after
-    87f5de793bea87e5.c7a36a8387250660.84aca00d57dacd34.eb3bef981f357b6b
-    87f5de793bea87e5.87f5de793bea87e5.84aca00d57dacd34.eb3bef981f357b6b
+    87f5de793bea87e5.c7a36a8387250660.84aca00d57dacd34.eb3bef981f357bff
+    f5ccb02d935d6945.71b7120b44fb9d23.dfb2ae6013fb2d63.750fbb95fd31ff7b
     6fa02613b63f9b65.9e84f0fab62c068a.178e63af4dc4c07e.15367e830183f81b
     cf3abd17c19cda72.ac56febd78457c44.080b3ae7204141af.28fc35cec7b7a0f6
     08acdbe3ec5733b9
 
-VPERMILPD_256_0xF(reg)
+VPEXTRB_GtoE_128_0x1(reg)
   before
     12946c2c0bf1ef10.f269ef25cf7ee297.f6793bbe27d03cfb.8ef7aff2a97f6d22
     a2fee517c1110ea6.b4f83a29fcf36f01.d738a06a5e5c825c.851c3ebe048a0005
@@ -17800,11 +17800,11 @@
     a8de61d914ea79fb
   after
     12946c2c0bf1ef10.f269ef25cf7ee297.f6793bbe27d03cfb.8ef7aff2a97f6d22
-    1438400ea942cd27.1438400ea942cd27.ade02a2eb9728a12.ade02a2eb9728a12
+    a2fee517c1110ea6.b4f83a29fcf36f01.d738a06a5e5c825c.851c3ebe048a0005
     1438400ea942cd27.f1b21a0f65063cdc.ade02a2eb9728a12.c94764354c6cb681
     c48c7b7f60106840.856409c426c40653.d3bed675d5a08fca.36439b459d334ac5
-    a8de61d914ea79fb
-VPERMILPD_256_0xF(mem)
+    0000000000000000
+VPEXTRB_GtoE_128_0x1(mem)
   before
     fbe332ddcc9eff4f.0e4791d582071a9d.4cda84325a388992.a41c9fab4e71ce30
     0b1d883de25a97ef.4eb47e7ca9b420ea.21e008471d6e81c7.7e46813bbf7283ef
@@ -17812,13 +17812,13 @@
     d163b8c2961bf0bd.20d9cf6d7c5d1701.6acc1912c352bebd.b933811efa313d2a
     d28c9749fd08bbfe
   after
-    fbe332ddcc9eff4f.0e4791d582071a9d.4cda84325a388992.a41c9fab4e71ce30
-    fbe332ddcc9eff4f.fbe332ddcc9eff4f.4cda84325a388992.a41c9fab4e71ce30
+    fbe332ddcc9eff4f.0e4791d582071a9d.4cda84325a388992.a41c9fab4e71ce83
+    0b1d883de25a97ef.4eb47e7ca9b420ea.21e008471d6e81c7.7e46813bbf7283ef
     b459e1e5712afe04.e0213fe073a2b6d2.e24210ed8c73a91c.bb8a7893c42ee9b3
     d163b8c2961bf0bd.20d9cf6d7c5d1701.6acc1912c352bebd.b933811efa313d2a
     d28c9749fd08bbfe
 
-VPERMILPD_256_0xA(reg)
+VPEXTRB_GtoE_128_0x2(reg)
   before
     64e2b67e673e9fdb.400789be6c382844.6a27298f5f728124.95499da1dd177bd8
     c981da2ad75f246e.dc11d0c60f8d64c5.1a584cb2b96c2de7.3f871a86f6cf9e96
@@ -17827,11 +17827,11 @@
     ceb63971571cb966
   after
     64e2b67e673e9fdb.400789be6c382844.6a27298f5f728124.95499da1dd177bd8
-    5eb500bae7f88763.814c0ac79c275e6d.8cb8314325d85af5.43500bad2b85e126
+    c981da2ad75f246e.dc11d0c60f8d64c5.1a584cb2b96c2de7.3f871a86f6cf9e96
     5eb500bae7f88763.814c0ac79c275e6d.8cb8314325d85af5.43500bad2b85e126
     80ca229833940465.0a86b1ac2f11d268.1c93d5ac3f4143fb.7f71ec02974501b2
-    ceb63971571cb966
-VPERMILPD_256_0xA(mem)
+    00000000000000cf
+VPEXTRB_GtoE_128_0x2(mem)
   before
     0bea6fe68615c76f.890c3e3258bfd621.55894360e3577ee1.2535355ba43323a5
     14db094e413ce5f9.d6c64ff3f1063a42.3d223bd1d4061c05.05e94cbbf03a369e
@@ -17839,13 +17839,13 @@
     f61f59a3c946433e.acd64199f115a866.53464e97e0cd20fd.b7bb903daab9e92f
     4070b5385149001f
   after
-    0bea6fe68615c76f.890c3e3258bfd621.55894360e3577ee1.2535355ba43323a5
-    0bea6fe68615c76f.890c3e3258bfd621.55894360e3577ee1.55894360e3577ee1
+    0bea6fe68615c76f.890c3e3258bfd621.55894360e3577ee1.2535355ba433233a
+    14db094e413ce5f9.d6c64ff3f1063a42.3d223bd1d4061c05.05e94cbbf03a369e
     c4538393a39ecf2f.c34552469bf46c75.9d1d16ea1f296900.17fc1637bee3ba93
     f61f59a3c946433e.acd64199f115a866.53464e97e0cd20fd.b7bb903daab9e92f
     4070b5385149001f
 
-VPERMILPD_256_0xA(reg)
+VPEXTRB_GtoE_128_0x2(reg)
   before
     106880944f1e3b0f.880b0769ce41fb52.eec31a578ff629c0.396961c432fcfe28
     82eef0bd3ec4d5aa.54e30ad0ce99b496.e358d8ec12222c30.2d51ca5d31c4bfaf
@@ -17854,11 +17854,11 @@
     eda6e3ea5827ab19
   after
     106880944f1e3b0f.880b0769ce41fb52.eec31a578ff629c0.396961c432fcfe28
-    f150fe20bdc80b9c.3873ddc6e75c2936.e8e377c51625ed61.09cb064ffa311fbc
+    82eef0bd3ec4d5aa.54e30ad0ce99b496.e358d8ec12222c30.2d51ca5d31c4bfaf
     f150fe20bdc80b9c.3873ddc6e75c2936.e8e377c51625ed61.09cb064ffa311fbc
     bbd8a72765b41993.0e87fc3632961860.59aff34c368ca800.aba48f84a84eda7b
-    eda6e3ea5827ab19
-VPERMILPD_256_0xA(mem)
+    00000000000000c4
+VPEXTRB_GtoE_128_0x2(mem)
   before
     ad9e7d6b25c84fc2.3ad4e83fd5173b39.b3eae30ccd523b3d.920749ee0fe298b9
     c557d9f52c3e81a1.cc8ebcd5a67aac3a.04690f34d39c4efc.ef3874183cb4fa37
@@ -17866,13 +17866,13 @@
     7040c8d056d783b3.956e0e27e1766e00.15eb232b930b38cb.855539b003f80334
     76d9ccf7d584220b
   after
-    ad9e7d6b25c84fc2.3ad4e83fd5173b39.b3eae30ccd523b3d.920749ee0fe298b9
-    ad9e7d6b25c84fc2.3ad4e83fd5173b39.b3eae30ccd523b3d.b3eae30ccd523b3d
+    ad9e7d6b25c84fc2.3ad4e83fd5173b39.b3eae30ccd523b3d.920749ee0fe298b4
+    c557d9f52c3e81a1.cc8ebcd5a67aac3a.04690f34d39c4efc.ef3874183cb4fa37
     129f73738894ffe3.cb531f54776ba943.dbd1fb9a61800fc7.cc8e7034598c0927
     7040c8d056d783b3.956e0e27e1766e00.15eb232b930b38cb.855539b003f80334
     76d9ccf7d584220b
 
-VPERMILPD_256_0xA(reg)
+VPEXTRB_GtoE_128_0x2(reg)
   before
     fb6524756cbba358.bc0753fab112c93e.842d83bc8225361c.8f8603d184488633
     6f473d966329c1c6.d0c090dcb5518fb0.f5db7c7ef6063f44.236d177a5044b42c
@@ -17881,11 +17881,11 @@
     19e066b8f225dd32
   after
     fb6524756cbba358.bc0753fab112c93e.842d83bc8225361c.8f8603d184488633
-    30c913c6575ab902.8937fb637fa08f34.45c3f4d9d8a5c223.ae6bdc10140a80e1
+    6f473d966329c1c6.d0c090dcb5518fb0.f5db7c7ef6063f44.236d177a5044b42c
     30c913c6575ab902.8937fb637fa08f34.45c3f4d9d8a5c223.ae6bdc10140a80e1
     9938a271e3dbc7b7.c33810792b0c86f7.ce32e839c48cfe66.0c4ecd81eba6a47f
-    19e066b8f225dd32
-VPERMILPD_256_0xA(mem)
+    0000000000000044
+VPEXTRB_GtoE_128_0x2(mem)
   before
     b2ee23a14491e625.06e0e703a4372792.5a8f4c0bd4a03025.ed74520a57492db9
     b1448128fef97c85.d20ddde835fb153e.2a072a06966948e9.fed530b92d688cc7
@@ -17893,13 +17893,13 @@
     54f70cc017e63f3a.fc25cc5c39e888bc.e68ebce3d7c7b5e4.6723355c0ff8cac7
     76a9542a54832010
   after
-    b2ee23a14491e625.06e0e703a4372792.5a8f4c0bd4a03025.ed74520a57492db9
-    b2ee23a14491e625.06e0e703a4372792.5a8f4c0bd4a03025.5a8f4c0bd4a03025
+    b2ee23a14491e625.06e0e703a4372792.5a8f4c0bd4a03025.ed74520a57492d68
+    b1448128fef97c85.d20ddde835fb153e.2a072a06966948e9.fed530b92d688cc7
     f3aefa393b665b7d.5b0a808d33b2cc69.106e26548e728b6f.5ea17db0e173573d
     54f70cc017e63f3a.fc25cc5c39e888bc.e68ebce3d7c7b5e4.6723355c0ff8cac7
     76a9542a54832010
 
-VPERMILPD_256_0x5(reg)
+VPEXTRB_GtoE_128_0x3(reg)
   before
     e77dd7854b9e96c4.b0ed32a9b084e3e8.10a8bdc3e42a87e6.8934699d8e758174
     16ecb9d891d76790.e35ae9e01f4d04b2.f5e0502dcf030391.d52ba870cf87ac4b
@@ -17908,11 +17908,11 @@
     46f6a9b1e08fbe2d
   after
     e77dd7854b9e96c4.b0ed32a9b084e3e8.10a8bdc3e42a87e6.8934699d8e758174
-    c90bab52824c5ec5.5f42f691c1bad120.a641f547b409f293.0619800596ff3969
+    16ecb9d891d76790.e35ae9e01f4d04b2.f5e0502dcf030391.d52ba870cf87ac4b
     5f42f691c1bad120.c90bab52824c5ec5.0619800596ff3969.a641f547b409f293
     1ecb8a1b78d20e20.3dccf6e9f58dad4c.9e9f49b9d6aa651b.d741cc0e5c080f7b
-    46f6a9b1e08fbe2d
-VPERMILPD_256_0x5(mem)
+    00000000000000cf
+VPEXTRB_GtoE_128_0x3(mem)
   before
     ce2d091c5faabcd6.afd271e251ab5b3b.1d694593931dac74.1bbea8b42b91c253
     4bb2673cf266c5a1.6ea5a852e9d1f31d.44ad143b78071869.d7c1976230408ebc
@@ -17920,13 +17920,13 @@
     93d60d46caeee750.e6daf3dec436f7e9.d75e2434891a2667.80a71a88bb225dd3
     2421a5d7796ed9d9
   after
-    ce2d091c5faabcd6.afd271e251ab5b3b.1d694593931dac74.1bbea8b42b91c253
-    afd271e251ab5b3b.ce2d091c5faabcd6.1bbea8b42b91c253.1bbea8b42b91c253
+    ce2d091c5faabcd6.afd271e251ab5b3b.1d694593931dac74.1bbea8b42b91c230
+    4bb2673cf266c5a1.6ea5a852e9d1f31d.44ad143b78071869.d7c1976230408ebc
     99513ffbb7ce95bb.b78e2ad7dbd11373.8e66e0cdc157ac56.2ff6142f81410203
     93d60d46caeee750.e6daf3dec436f7e9.d75e2434891a2667.80a71a88bb225dd3
     2421a5d7796ed9d9
 
-VPERMILPD_256_0x5(reg)
+VPEXTRB_GtoE_128_0x3(reg)
   before
     79b0b28a58b2b3c1.170c4e0a46d3788b.57d500d13f8ddb2a.fa625c5eed5b40ca
     d9a03b0bf3792736.00c17d3248880499.65cb4b1ee860fae3.d53e04370826b7a9
@@ -17935,11 +17935,11 @@
     47d9750bbf3ea0e9
   after
     79b0b28a58b2b3c1.170c4e0a46d3788b.57d500d13f8ddb2a.fa625c5eed5b40ca
-    2abf16a9eb1946a5.a13c3ec8e74f71e5.43be98a9f7884630.6e08d22f5c3e91c0
+    d9a03b0bf3792736.00c17d3248880499.65cb4b1ee860fae3.d53e04370826b7a9
     a13c3ec8e74f71e5.2abf16a9eb1946a5.6e08d22f5c3e91c0.43be98a9f7884630
     2dd2b62bcfc1cc7a.70d3955d4b93fbdc.cdd7907237b0dc6c.1fae95a1d58cab8c
-    47d9750bbf3ea0e9
-VPERMILPD_256_0x5(mem)
+    0000000000000008
+VPEXTRB_GtoE_128_0x3(mem)
   before
     960db6d4d0abe172.daaca0a2485a75a0.b0c976398501df69.de86815214441794
     e714d4e625de2c54.0217f698eda7a703.c46d3629b46fae79.fc5fa23b8f857de3
@@ -17947,13 +17947,13 @@
     03ce939a09c8cbd2.36d0dbb12d899a33.dcee40f5647dfbd1.d4c260d8d240bda9
     44e4f664d0d10e77
   after
-    960db6d4d0abe172.daaca0a2485a75a0.b0c976398501df69.de86815214441794
-    daaca0a2485a75a0.960db6d4d0abe172.de86815214441794.de86815214441794
+    960db6d4d0abe172.daaca0a2485a75a0.b0c976398501df69.de8681521444178f
+    e714d4e625de2c54.0217f698eda7a703.c46d3629b46fae79.fc5fa23b8f857de3
     18bb492fd9e43bbb.025fb6795b32a051.8a8b5019f5ea2338.85afed9945004b06
     03ce939a09c8cbd2.36d0dbb12d899a33.dcee40f5647dfbd1.d4c260d8d240bda9
     44e4f664d0d10e77
 
-VPERMILPD_256_0x5(reg)
+VPEXTRB_GtoE_128_0x3(reg)
   before
     3360aba9de3f7b1c.86192d13d09697c6.fab661adff38d158.986382aa1b35f271
     fb847c1395174046.7b6793864a5a5dc2.aa5c45d76ec9836a.98b79222391cc344
@@ -17962,11 +17962,11 @@
     cfdb715c096eb0a3
   after
     3360aba9de3f7b1c.86192d13d09697c6.fab661adff38d158.986382aa1b35f271
-    c08641df9421d7f3.fa9a640f94e5999f.bab4ed4bd8402b75.a210819c16cbea15
+    fb847c1395174046.7b6793864a5a5dc2.aa5c45d76ec9836a.98b79222391cc344
     fa9a640f94e5999f.c08641df9421d7f3.a210819c16cbea15.bab4ed4bd8402b75
     8aef5f077433c1d3.2f40b40acaf6c184.3e1c136992c74307.d8270e0f14ade631
-    cfdb715c096eb0a3
-VPERMILPD_256_0x5(mem)
+    0000000000000039
+VPEXTRB_GtoE_128_0x3(mem)
   before
     7c9e931dd58f44f8.09cf6969d48ff58f.a56266f307e6d9a2.dacdf6a87e4bcae9
     b93aee3e911c5f5b.d1867ea04d84717f.feb8d58667fbd979.d26f26c777e2ba6a
@@ -17974,13 +17974,13 @@
     563144504fac19fe.b0a8bb3c006b2fa9.ca2fd85b02ca8300.46b55f52fe7ac8f3
     7af15f95c5935d54
   after
-    7c9e931dd58f44f8.09cf6969d48ff58f.a56266f307e6d9a2.dacdf6a87e4bcae9
-    09cf6969d48ff58f.7c9e931dd58f44f8.dacdf6a87e4bcae9.dacdf6a87e4bcae9
+    7c9e931dd58f44f8.09cf6969d48ff58f.a56266f307e6d9a2.dacdf6a87e4bca77
+    b93aee3e911c5f5b.d1867ea04d84717f.feb8d58667fbd979.d26f26c777e2ba6a
     637c00aa5b22bdf9.405f9b177d9f704e.170e7db007447e34.824da03119185034
     563144504fac19fe.b0a8bb3c006b2fa9.ca2fd85b02ca8300.46b55f52fe7ac8f3
     7af15f95c5935d54
 
-VPERMILPD_128_0x0(reg)
+VPEXTRB_GtoE_128_0x4(reg)
   before
     7a4f9c6908f04d03.6f22361988c73095.7eabda7a7174ea3b.f4e96475759ba608
     a1191237631cd2ab.881e53f2227ebeeb.07b5f43d6c47ddb1.71069ce97bc2a179
@@ -17989,11 +17989,11 @@
     73ad24981bb6fef8
   after
     7a4f9c6908f04d03.6f22361988c73095.7eabda7a7174ea3b.f4e96475759ba608
-    0000000000000000.0000000000000000.1e54fca2314c317f.1e54fca2314c317f
+    a1191237631cd2ab.881e53f2227ebeeb.07b5f43d6c47ddb1.71069ce97bc2a179
     4d9cbe6c73a328f9.7ef015c73add7f2b.a51206f28e6f43b7.1e54fca2314c317f
     d9249b74d3118d99.2d63fa85ecf12e82.b50e0a03737859f8.d59d008eb2441145
-    73ad24981bb6fef8
-VPERMILPD_128_0x0(mem)
+    00000000000000e9
+VPEXTRB_GtoE_128_0x4(mem)
   before
     d452e5ac87aeb4c3.a0fca5bc1ff33b36.71457d1653c5881c.93f5feddb6ef5b21
     d457beb61339efd3.0072d8aef5d46f7d.26601b688b654924.9c13ddedf35f84dd
@@ -18001,13 +18001,13 @@
     21afa95df836e271.f763aa44a8c558b7.537494fbe03aef30.9a224d5bcd5b3ec1
     48acd692a2ff4740
   after
-    d452e5ac87aeb4c3.a0fca5bc1ff33b36.71457d1653c5881c.93f5feddb6ef5b21
-    0000000000000000.0000000000000000.93f5feddb6ef5b21.71457d1653c5881c
+    d452e5ac87aeb4c3.a0fca5bc1ff33b36.71457d1653c5881c.93f5feddb6ef5bed
+    d457beb61339efd3.0072d8aef5d46f7d.26601b688b654924.9c13ddedf35f84dd
     4f872ba3da636a54.54d031b8ee416419.28814e66b1dd2dc7.2ab3a49dc75512d9
     21afa95df836e271.f763aa44a8c558b7.537494fbe03aef30.9a224d5bcd5b3ec1
     48acd692a2ff4740
 
-VPERMILPD_128_0x0(reg)
+VPEXTRB_GtoE_128_0x4(reg)
   before
     909d3aaee1cd6703.269bb2d18ac01357.477741c0bfec8502.8304681535884c8c
     ce41761a2750dbb5.3a17c4ecac0cb931.9e58f197ce4327a8.94ff469fcbd1ff07
@@ -18016,11 +18016,11 @@
     a461f6162f107be6
   after
     909d3aaee1cd6703.269bb2d18ac01357.477741c0bfec8502.8304681535884c8c
-    0000000000000000.0000000000000000.622fab85bf23c6cc.622fab85bf23c6cc
+    ce41761a2750dbb5.3a17c4ecac0cb931.9e58f197ce4327a8.94ff469fcbd1ff07
     5ee484440f14df03.38ef5a9979278f2c.5a52b73571557c52.622fab85bf23c6cc
     9cd1629836a5af99.feeff0c30d1c5274.d5b08d0645aebeaf.c96111b32c8a5b08
-    a461f6162f107be6
-VPERMILPD_128_0x0(mem)
+    000000000000009f
+VPEXTRB_GtoE_128_0x4(mem)
   before
     d1fbd598e3c3e193.e4550b8037908622.67e2035885f7bd34.6dc07176e5db2a68
     2bfb2b2765af4b3b.92bd7b69af60a14b.4f960e43fcc58e99.7ccc5ef2ee67fb2c
@@ -18028,13 +18028,13 @@
     d55c2818405e1529.8f63a1ef71e0922b.0b6cfccb5a674d00.730b44b9aacdc080
     12d634de94bf2a68
   after
-    d1fbd598e3c3e193.e4550b8037908622.67e2035885f7bd34.6dc07176e5db2a68
-    0000000000000000.0000000000000000.6dc07176e5db2a68.67e2035885f7bd34
+    d1fbd598e3c3e193.e4550b8037908622.67e2035885f7bd34.6dc07176e5db2af2
+    2bfb2b2765af4b3b.92bd7b69af60a14b.4f960e43fcc58e99.7ccc5ef2ee67fb2c
     8e2d72add0de7309.0153aec039a23cbf.92d58c708f917fce.602150e4fcde6fa5
     d55c2818405e1529.8f63a1ef71e0922b.0b6cfccb5a674d00.730b44b9aacdc080
     12d634de94bf2a68
 
-VPERMILPD_128_0x0(reg)
+VPEXTRB_GtoE_128_0x4(reg)
   before
     99cd1ebe5740eb0a.de55c852d23befc9.973b4e64f4a9e03b.9827d7407754b35a
     653efdc48edd3d11.84e4ce49a27fbb13.7526b3895e86629a.14d19bbc05636f0a
@@ -18043,11 +18043,11 @@
     b8682f8a61d6f5ca
   after
     99cd1ebe5740eb0a.de55c852d23befc9.973b4e64f4a9e03b.9827d7407754b35a
-    0000000000000000.0000000000000000.5a38c2291da13b39.5a38c2291da13b39
+    653efdc48edd3d11.84e4ce49a27fbb13.7526b3895e86629a.14d19bbc05636f0a
     d073ce5ed5215d2a.a2d5b7e8cb383633.856fcccc4a0553f5.5a38c2291da13b39
     37b98bf7ca988601.16f4fd1b69721b56.2263939854b1f1f7.4826ca74dd18d316
-    b8682f8a61d6f5ca
-VPERMILPD_128_0x0(mem)
+    00000000000000bc
+VPEXTRB_GtoE_128_0x4(mem)
   before
     88ca6b56c4e75b84.f65c32fb06cff641.ba0d1ece993827a8.aa4e06591917764d
     9218fcc32356c26e.69a8bed62751e797.6ceb95ee76961654.787c207b34c21ea2
@@ -18055,13 +18055,13 @@
     c8a80a35427e8284.db6a76c287673e33.662a7620a94b8d6d.55d03992df17cbfc
     1c8f3160a5da4759
   after
-    88ca6b56c4e75b84.f65c32fb06cff641.ba0d1ece993827a8.aa4e06591917764d
-    0000000000000000.0000000000000000.aa4e06591917764d.ba0d1ece993827a8
+    88ca6b56c4e75b84.f65c32fb06cff641.ba0d1ece993827a8.aa4e06591917767b
+    9218fcc32356c26e.69a8bed62751e797.6ceb95ee76961654.787c207b34c21ea2
     b41e5dbf992fe5b5.ece92bf4c9aa96ae.065cde651d98a487.e739dd6a423e27a4
     c8a80a35427e8284.db6a76c287673e33.662a7620a94b8d6d.55d03992df17cbfc
     1c8f3160a5da4759
 
-VPERMILPD_128_0x3(reg)
+VPEXTRB_GtoE_128_0x9(reg)
   before
     9ac0bf3e3313d664.ac817f113b505308.937899aafd131cd2.6622d80c37ba8c31
     29b0e19a224cb6cc.3a76393fa0b0146c.6e60921ac83a6c36.e4107f13e2f25eff
@@ -18070,11 +18070,11 @@
     e294f50badc21c63
   after
     9ac0bf3e3313d664.ac817f113b505308.937899aafd131cd2.6622d80c37ba8c31
-    0000000000000000.0000000000000000.c86c5c7c84696a0c.c86c5c7c84696a0c
+    29b0e19a224cb6cc.3a76393fa0b0146c.6e60921ac83a6c36.e4107f13e2f25eff
     27ab93de1013213b.4f54b2ac8cab83dd.c86c5c7c84696a0c.babfea23c7fdbe05
     eefdcf7899f3535e.c8e568421b4b5a87.ffe9f43ecc2b51ff.c5fd922701ea6a6c
-    e294f50badc21c63
-VPERMILPD_128_0x3(mem)
+    000000000000006c
+VPEXTRB_GtoE_128_0x9(mem)
   before
     eb518dbbe6939014.dcf293d358798ae0.7ff5d6ee6a9f5695.6e2254cb3c0d5ebc
     bd01d823c96884ab.4bd5d95bea30006e.5152799d94b03234.71657a8e719acdef
@@ -18082,13 +18082,13 @@
     2c6475cbfa4fd73f.1f99e1a2f4629b5c.b61f4ab0eb3e7ed4.a334056b98e5c065
     8a5a625cc2bcbc00
   after
-    eb518dbbe6939014.dcf293d358798ae0.7ff5d6ee6a9f5695.6e2254cb3c0d5ebc
-    0000000000000000.0000000000000000.7ff5d6ee6a9f5695.6e2254cb3c0d5ebc
+    eb518dbbe6939014.dcf293d358798ae0.7ff5d6ee6a9f5695.6e2254cb3c0d5e32
+    bd01d823c96884ab.4bd5d95bea30006e.5152799d94b03234.71657a8e719acdef
     346d522f714eb256.98f4a07ceaa4f2b3.1ac7cc39b68cac90.64fc61f5065eda43
     2c6475cbfa4fd73f.1f99e1a2f4629b5c.b61f4ab0eb3e7ed4.a334056b98e5c065
     8a5a625cc2bcbc00
 
-VPERMILPD_128_0x3(reg)
+VPEXTRB_GtoE_128_0x9(reg)
   before
     74b87535216e0ac1.82b1bfe3817aae92.3d119939a5f53915.022771ed50d3652c
     bf9a39605088e553.101fab6422d8f57c.4ca8c5ad99e90689.d8abbddc00561cc5
@@ -18097,11 +18097,11 @@
     3416500deeec7fcd
   after
     74b87535216e0ac1.82b1bfe3817aae92.3d119939a5f53915.022771ed50d3652c
-    0000000000000000.0000000000000000.a9a9606b6bcb3f65.a9a9606b6bcb3f65
+    bf9a39605088e553.101fab6422d8f57c.4ca8c5ad99e90689.d8abbddc00561cc5
     c64eaa4aec958a64.b37cb538f7776629.a9a9606b6bcb3f65.1577a86918d360cb
     e41ec4609021359d.4792594d1f62bec4.b06266ddb7261f54.9557b080b357ed6a
-    3416500deeec7fcd
-VPERMILPD_128_0x3(mem)
+    0000000000000006
+VPEXTRB_GtoE_128_0x9(mem)
   before
     ce8204fce4a1d120.7758840dd9b822ad.a82e148eb4a6b87a.bd1dd3711a86e303
     3f65483ab17fa090.da46e4bc62e78c3d.b21c61e6d24e1176.2d27a4912f78c71e
@@ -18109,13 +18109,13 @@
     16c3724f43eca576.7f7179d5a53bc994.311da1901bfbd0f2.a1595f2ae140de46
     5e17417ab62d89ab
   after
-    ce8204fce4a1d120.7758840dd9b822ad.a82e148eb4a6b87a.bd1dd3711a86e303
-    0000000000000000.0000000000000000.a82e148eb4a6b87a.bd1dd3711a86e303
+    ce8204fce4a1d120.7758840dd9b822ad.a82e148eb4a6b87a.bd1dd3711a86e311
+    3f65483ab17fa090.da46e4bc62e78c3d.b21c61e6d24e1176.2d27a4912f78c71e
     638c99b17294a849.6835e2dbc73ab0fc.4127bc43966685e5.5acdd4ab93870750
     16c3724f43eca576.7f7179d5a53bc994.311da1901bfbd0f2.a1595f2ae140de46
     5e17417ab62d89ab
 
-VPERMILPD_128_0x3(reg)
+VPEXTRB_GtoE_128_0x9(reg)
   before
     ed557707addd442c.33d64ffe3f915244.7945a616987815b2.5dc88cb97e18adcb
     aa5dfb3d63d94b75.9890acac82916cdf.b4ff630a3b7cce01.a3f5faabdac9d999
@@ -18124,11 +18124,11 @@
     a3802867dfcf8e85
   after
     ed557707addd442c.33d64ffe3f915244.7945a616987815b2.5dc88cb97e18adcb
-    0000000000000000.0000000000000000.8ae9ae1d2ad4312e.8ae9ae1d2ad4312e
+    aa5dfb3d63d94b75.9890acac82916cdf.b4ff630a3b7cce01.a3f5faabdac9d999
     f17dcb8873afd931.20bf064429f8ae72.8ae9ae1d2ad4312e.de7066504c1b108b
     1dffe2547aea2b0d.a72dd7b250d0d62a.585182bb020b7ae4.ea054c95ef190ecb
-    a3802867dfcf8e85
-VPERMILPD_128_0x3(mem)
+    00000000000000ce
+VPEXTRB_GtoE_128_0x9(mem)
   before
     e4ad77b0394a4de6.8c303d0e13167cb4.09a79de211279e32.7b81db515eade4d0
     8b57b35e1995071a.995cd620dac00ad3.21f9d3c08b09c3b7.4dc6b649db47ac9e
@@ -18136,13 +18136,13 @@
     7755e895d8cc5aa9.fdd4b70165bcc828.e8558036149a13e7.72bede13a690458e
     7c0925bd2c588e09
   after
-    e4ad77b0394a4de6.8c303d0e13167cb4.09a79de211279e32.7b81db515eade4d0
-    0000000000000000.0000000000000000.09a79de211279e32.7b81db515eade4d0
+    e4ad77b0394a4de6.8c303d0e13167cb4.09a79de211279e32.7b81db515eade4c3
+    8b57b35e1995071a.995cd620dac00ad3.21f9d3c08b09c3b7.4dc6b649db47ac9e
     734b5a5c9abc774c.a0ceabf86c730f16.cdeff638d88000e5.2b6b0e1114640ef9
     7755e895d8cc5aa9.fdd4b70165bcc828.e8558036149a13e7.72bede13a690458e
     7c0925bd2c588e09
 
-VUNPCKLPD_256(reg)
+VPEXTRB_GtoE_128_0xE(reg)
   before
     a69adc7a43472515.7541d7f7f0d06c5d.0bb8f6a6602670b6.4df6efa75b63b6e9
     4cbb00b686e9465e.47dba56dfed56993.28c76555f93d446b.daa0be75cbe6a519
@@ -18150,12 +18150,12 @@
     7de0815b0278145a.db48ca46690e1237.fb96bf7e77a360fc.d83a6ddc8f4a5bad
     01c3454d1d44996a
   after
-    cbefcce31de50c78.47dba56dfed56993.691d698e7d2f9ea1.daa0be75cbe6a519
+    a69adc7a43472515.7541d7f7f0d06c5d.0bb8f6a6602670b6.4df6efa75b63b6e9
     4cbb00b686e9465e.47dba56dfed56993.28c76555f93d446b.daa0be75cbe6a519
     cbb98edd92cb2c91.cbefcce31de50c78.af4dfe79cd8e80f4.691d698e7d2f9ea1
     7de0815b0278145a.db48ca46690e1237.fb96bf7e77a360fc.d83a6ddc8f4a5bad
-    01c3454d1d44996a
-VUNPCKLPD_256(mem)
+    00000000000000c7
+VPEXTRB_GtoE_128_0xE(mem)
   before
     c2846ccc42281304.bf7bd59c727d3a65.55b41b80ff5c37fd.6aeea3d0940b2031
     f54861451b0287a6.edd8870c7f64d95d.13fd397efada36f5.57a1a7dcc04ffb3c
@@ -18163,13 +18163,13 @@
     250d9dd556ca47b5.7d03f12adf0e76c5.cf59d1779196b52e.1a46fbcdb1a0f48a
     a8d2448cb0c58a25
   after
-    c2846ccc42281304.bf7bd59c727d3a65.55b41b80ff5c37fd.6aeea3d0940b2031
+    c2846ccc42281304.bf7bd59c727d3a65.55b41b80ff5c37fd.6aeea3d0940b20fd
     f54861451b0287a6.edd8870c7f64d95d.13fd397efada36f5.57a1a7dcc04ffb3c
-    bf7bd59c727d3a65.edd8870c7f64d95d.6aeea3d0940b2031.57a1a7dcc04ffb3c
+    78dd9da4c3dfaf7d.63419118c5bb2fee.f3f0a22d7794cc4c.1dfac50c95fd2ecc
     250d9dd556ca47b5.7d03f12adf0e76c5.cf59d1779196b52e.1a46fbcdb1a0f48a
     a8d2448cb0c58a25
 
-VUNPCKLPD_256(reg)
+VPEXTRB_GtoE_128_0xE(reg)
   before
     25e89cb42df72c47.d9a5dec4f1d00d79.976aa2b069e8ea8e.8503424a65edadc6
     ebd400b0c5c2169d.7171db5eaffcbbf5.0dc2a11500d5c9f5.efbc71910ea46f41
@@ -18177,12 +18177,12 @@
     c662d8d9b455b193.b8d5fa3e07f6c1c8.7c75752bc319b24a.5286fb2b5164448f
     04314d562284ceb9
   after
-    c73d108dad5a0e56.7171db5eaffcbbf5.ea4edb38a9c8b8cb.efbc71910ea46f41
+    25e89cb42df72c47.d9a5dec4f1d00d79.976aa2b069e8ea8e.8503424a65edadc6
     ebd400b0c5c2169d.7171db5eaffcbbf5.0dc2a11500d5c9f5.efbc71910ea46f41
     57e46aee13b384d2.c73d108dad5a0e56.3b57e8c440614da5.ea4edb38a9c8b8cb
     c662d8d9b455b193.b8d5fa3e07f6c1c8.7c75752bc319b24a.5286fb2b5164448f
-    04314d562284ceb9
-VUNPCKLPD_256(mem)
+    00000000000000c2
+VPEXTRB_GtoE_128_0xE(mem)
   before
     da184da539341376.929c45dd4334da8b.2004135ed7dd9277.2e6743b528883691
     b10a7804b281cff2.18dcad665cdd3a67.db97d9d83c1a3b8e.ac7a4ece083b1326
@@ -18190,13 +18190,13 @@
     d23b3ba337209bd6.c3a160b89fba937a.bb1a5a892fc807a6.7c330c5eaf9acbe8
     8571b7acae5e1d6e
   after
-    da184da539341376.929c45dd4334da8b.2004135ed7dd9277.2e6743b528883691
+    da184da539341376.929c45dd4334da8b.2004135ed7dd9277.2e6743b528883697
     b10a7804b281cff2.18dcad665cdd3a67.db97d9d83c1a3b8e.ac7a4ece083b1326
-    929c45dd4334da8b.18dcad665cdd3a67.2e6743b528883691.ac7a4ece083b1326
+    65d2485fa876be59.b56f0de09cdb0fd3.c65bc7974fba7939.52fa93e202bc86b4
     d23b3ba337209bd6.c3a160b89fba937a.bb1a5a892fc807a6.7c330c5eaf9acbe8
     8571b7acae5e1d6e
 
-VUNPCKLPD_256(reg)
+VPEXTRB_GtoE_128_0xE(reg)
   before
     cb008f399896b9f1.d413ccba7c8a2395.9fbea25800070209.97a00c99f550a2fe
     a92b90720bcddb1e.4724789293c012c3.a511cf2d5b4d9a2b.36bb5bb3bf5f0670
@@ -18204,12 +18204,12 @@
     9c89fe94fb6aa024.f0240d31a4c2141c.9f8ddb2871f530db.2ddcbdb6ce3f184c
     3d7ac8764b283e10
   after
-    073bb91696cf248c.4724789293c012c3.7436c2c4a900ef26.36bb5bb3bf5f0670
+    cb008f399896b9f1.d413ccba7c8a2395.9fbea25800070209.97a00c99f550a2fe
     a92b90720bcddb1e.4724789293c012c3.a511cf2d5b4d9a2b.36bb5bb3bf5f0670
     7a40b7c1a390bfa0.073bb91696cf248c.31e8e3a44d18958d.7436c2c4a900ef26
     9c89fe94fb6aa024.f0240d31a4c2141c.9f8ddb2871f530db.2ddcbdb6ce3f184c
-    3d7ac8764b283e10
-VUNPCKLPD_256(mem)
+    0000000000000011
+VPEXTRB_GtoE_128_0xE(mem)
   before
     80dd60f13bc81d9b.69536356b0e7bb55.deaaefd1d6a59f9e.4b4db224646fa7c0
     d2ce0011ba2b711c.3feae2735d944ce1.ad9bdbe14b85803e.91746406c11335e9
@@ -18217,13 +18217,13 @@
     129248f4d86666aa.72ae196e10abbeb3.5ee9c2026869388b.5b2649292b0589b5
     974a7542706dc6b1
   after
-    80dd60f13bc81d9b.69536356b0e7bb55.deaaefd1d6a59f9e.4b4db224646fa7c0
+    80dd60f13bc81d9b.69536356b0e7bb55.deaaefd1d6a59f9e.4b4db224646fa79b
     d2ce0011ba2b711c.3feae2735d944ce1.ad9bdbe14b85803e.91746406c11335e9
-    69536356b0e7bb55.3feae2735d944ce1.4b4db224646fa7c0.91746406c11335e9
+    0f1c24c4e55bf5bd.789975579efb8e71.39c14e4d1c6d7529.cd4eed39256b1701
     129248f4d86666aa.72ae196e10abbeb3.5ee9c2026869388b.5b2649292b0589b5
     974a7542706dc6b1
 
-VUNPCKHPD_256(reg)
+VPEXTRB_GtoE_128_0xF(reg)
   before
     dd046cf08f2e0ba0.b9fbe98fad587f10.8773cb244e2d1853.f8dfb5ea4886868f
     89a12aa025d4942f.df258180833bfe1b.153586e5f50fd8fd.e26fa2f2dacf1a62
@@ -18231,12 +18231,12 @@
     83b4ecb2230061db.17e78b149c0a19ce.07e00839ec21781d.1b8d5b1383160824
     21b21f04d22cd86b
   after
-    f76dabbccdeb9d09.89a12aa025d4942f.7640471ea1dd395c.153586e5f50fd8fd
+    dd046cf08f2e0ba0.b9fbe98fad587f10.8773cb244e2d1853.f8dfb5ea4886868f
     89a12aa025d4942f.df258180833bfe1b.153586e5f50fd8fd.e26fa2f2dacf1a62
     f76dabbccdeb9d09.60da8eb3741d9df6.7640471ea1dd395c.fa6505073a50b230
     83b4ecb2230061db.17e78b149c0a19ce.07e00839ec21781d.1b8d5b1383160824
-    21b21f04d22cd86b
-VUNPCKHPD_256(mem)
+    0000000000000015
+VPEXTRB_GtoE_128_0xF(mem)
   before
     e7a1cdc5429ee030.89c2e8ecc49e1e51.e218f590180c2dcf.2561c7a47569d1eb
     4b26e141ef79daa0.64e29bd84c520d16.9c38461103329724.2a0f7fc9d5417f73
@@ -18244,13 +18244,13 @@
     59222c1f72979630.0e8c16737e29783f.4c7992d69813577c.5d20caf690cdcd5f
     421d56d5229be51c
   after
-    e7a1cdc5429ee030.89c2e8ecc49e1e51.e218f590180c2dcf.2561c7a47569d1eb
+    e7a1cdc5429ee030.89c2e8ecc49e1e51.e218f590180c2dcf.2561c7a47569d19c
     4b26e141ef79daa0.64e29bd84c520d16.9c38461103329724.2a0f7fc9d5417f73
-    e7a1cdc5429ee030.4b26e141ef79daa0.e218f590180c2dcf.9c38461103329724
+    270dd766f6c883e7.726101e156a76dd7.2015fc847a8511fa.73352c16ab33bf60
     59222c1f72979630.0e8c16737e29783f.4c7992d69813577c.5d20caf690cdcd5f
     421d56d5229be51c
 
-VUNPCKHPD_256(reg)
+VPEXTRB_GtoE_128_0xF(reg)
   before
     7f76ca1ffd274242.bc315b5980f3d0a7.94add7fa61646bfb.fa3184f179e727d7
     70772440bc00217e.2b05e0fe3ce7ed7a.5f113fe29ae582b6.080a4fc33b0d3b36
@@ -18258,12 +18258,12 @@
     dea678b758c255e6.a130dd3c2bc8c0de.38d1f48580e70adc.b0495c38cb8121b3
     024997b4d3e76c28
   after
-    716e60a4fcafbe7b.70772440bc00217e.cd034a97c638f81d.5f113fe29ae582b6
+    7f76ca1ffd274242.bc315b5980f3d0a7.94add7fa61646bfb.fa3184f179e727d7
     70772440bc00217e.2b05e0fe3ce7ed7a.5f113fe29ae582b6.080a4fc33b0d3b36
     716e60a4fcafbe7b.846c37fbc17fa9d2.cd034a97c638f81d.50cd6d37f79250c6
     dea678b758c255e6.a130dd3c2bc8c0de.38d1f48580e70adc.b0495c38cb8121b3
-    024997b4d3e76c28
-VUNPCKHPD_256(mem)
+    000000000000005f
+VPEXTRB_GtoE_128_0xF(mem)
   before
     24989b962aceeb52.136a6ae66cc4216b.5f1e4cae97cdedc8.fec53a186580f49e
     f003e2cbec445a5d.6c07309bd5415fb5.9b02023b209bedbd.792d17bd108ef210
@@ -18271,13 +18271,13 @@
     fa5e2ed9240cfcc3.fafc2e4b15de204a.f8db315bfbbf5576.028486e92a3b18b3
     c80c1049d1f1b93c
   after
-    24989b962aceeb52.136a6ae66cc4216b.5f1e4cae97cdedc8.fec53a186580f49e
+    24989b962aceeb52.136a6ae66cc4216b.5f1e4cae97cdedc8.fec53a186580f49b
     f003e2cbec445a5d.6c07309bd5415fb5.9b02023b209bedbd.792d17bd108ef210
-    24989b962aceeb52.f003e2cbec445a5d.5f1e4cae97cdedc8.9b02023b209bedbd
+    4357ea3d36557774.45c9c9442fc64a71.2fa77ad1e23d7be8.075387de1e9e3fde
     fa5e2ed9240cfcc3.fafc2e4b15de204a.f8db315bfbbf5576.028486e92a3b18b3
     c80c1049d1f1b93c
 
-VUNPCKHPD_256(reg)
+VPEXTRB_GtoE_128_0xF(reg)
   before
     b3362269ae4d5d24.efe42a8cd075a678.e7ec5c1e23161bed.d368a1c5842d3592
     2050b7b75eda4118.ffb75b40599c30bd.68e45028f6f87806.9a1b48fb9b94d769
@@ -18285,12 +18285,12 @@
     f17f5a8aa4b8b9d2.e170485f6c57d8a8.9520779159f04648.5f23287be27b55f7
     15105a9d4913a806
   after
-    6ca4cb9e7c24a1c3.2050b7b75eda4118.d93205d529137240.68e45028f6f87806
+    b3362269ae4d5d24.efe42a8cd075a678.e7ec5c1e23161bed.d368a1c5842d3592
     2050b7b75eda4118.ffb75b40599c30bd.68e45028f6f87806.9a1b48fb9b94d769
     6ca4cb9e7c24a1c3.06a23be3d98e58be.d93205d529137240.2ac1a1e95cfff927
     f17f5a8aa4b8b9d2.e170485f6c57d8a8.9520779159f04648.5f23287be27b55f7
-    15105a9d4913a806
-VUNPCKHPD_256(mem)
+    0000000000000068
+VPEXTRB_GtoE_128_0xF(mem)
   before
     2953b23caed3ad7f.0c2d61e87321c4f1.6aeefda22f016da7.fafba3c8211d30c9
     75b7ab422dc8228f.1afada2285ebffcb.7ee8d6973d9ad2e6.630f83e61e256c70
@@ -18298,13 +18298,13 @@
     28167637e67e4723.7a2017dedfd4f562.b780e647acc7ffd6.b012548825f7c9de
     4d983ce467da61fe
   after
-    2953b23caed3ad7f.0c2d61e87321c4f1.6aeefda22f016da7.fafba3c8211d30c9
+    2953b23caed3ad7f.0c2d61e87321c4f1.6aeefda22f016da7.fafba3c8211d307e
     75b7ab422dc8228f.1afada2285ebffcb.7ee8d6973d9ad2e6.630f83e61e256c70
-    2953b23caed3ad7f.75b7ab422dc8228f.6aeefda22f016da7.7ee8d6973d9ad2e6
+    d60ac49ce1fcc162.7532c3a575a3a60d.f92a502ab22dc492.2ca81558eb9535e8
     28167637e67e4723.7a2017dedfd4f562.b780e647acc7ffd6.b012548825f7c9de
     4d983ce467da61fe
 
-VSHUFPS_0x39_256(reg)
+VPMINUB_128(reg)
   before
     5e87cad64dc73cf3.47a83efe59576fff.8512d337600a2777.94b514da44733fdf
     3e2bf9cc744c946a.0f8c99dd5595f621.f252f11e93d279f8.6c9756cf983d3fd9
@@ -18312,12 +18312,12 @@
     dfc22a71f44cae8d.0a79f5925a6e11ea.62ef484381456cec.7d8d0790e35d724e
     6e3a6e3411ca1d21
   after
-    5a6e11eadfc22a71.744c946a0f8c99dd.e35d724e62ef4843.93d279f86c9756cf
+    0000000000000000.0000000000000000.1d2d6f1e15b72690.1b97281398323fd9
     3e2bf9cc744c946a.0f8c99dd5595f621.f252f11e93d279f8.6c9756cf983d3fd9
     4bd0c53178f4a60f.5c8d02bff74498b6.1d2d6ffe15b72690.1bf02813c432bcef
     dfc22a71f44cae8d.0a79f5925a6e11ea.62ef484381456cec.7d8d0790e35d724e
     6e3a6e3411ca1d21
-VSHUFPS_0x39_256(mem)
+VPMINUB_128(mem)
   before
     cac3d9e96b867895.584d24f884dfe791.f51aef429b211ce8.1de47858740985b7
     6cf3c49d0d9c40d5.10bdb032c5398fc6.f83d6bb9d56876dd.aa57fcab898eae9e
@@ -18327,11 +18327,11 @@
   after
     cac3d9e96b867895.584d24f884dfe791.f51aef429b211ce8.1de47858740985b7
     6cf3c49d0d9c40d5.10bdb032c5398fc6.f83d6bb9d56876dd.aa57fcab898eae9e
-    cac3d9e984dfe791.10bdb0320d9c40d5.f51aef42740985b7.aa57fcabd56876dd
+    0000000000000000.0000000000000000.f51a6b429b211cdd.1d5778587409859e
     f77c0baf9607066c.b17a6a6fc9741675.bb39d9afa6e4075a.aaebedb98b0d1e6f
     d5a3524bb01edeb1
 
-VSHUFPS_0x39_256(reg)
+VPMINUB_128(reg)
   before
     420afacb67209ebe.976c5fe5b6747c1b.5160924ac36c6e47.32aac3077531b53b
     4d6ce2a34ca09943.ed3423c98d6b4f46.a25b3a89de5c24fb.31cd1fd6ad41a2c2
@@ -18339,12 +18339,12 @@
     ac505e0f13483364.307cec4bd229fbc1.c2c0ffdfe5519ab7.3c571f8ec9e02874
     fe57ba4ee68539f7
   after
-    d229fbc1ac505e0f.4ca09943ed3423c9.c9e02874c2c0ffdf.de5c24fb31cd1fd6
+    0000000000000000.0000000000000000.a25b3a89b55c243c.316d1f0a6a228a1c
     4d6ce2a34ca09943.ed3423c98d6b4f46.a25b3a89de5c24fb.31cd1fd6ad41a2c2
     51150441fc290cec.d7a0d44738f93a19.feb76096b5cf743c.966d6a0a6a228a1c
     ac505e0f13483364.307cec4bd229fbc1.c2c0ffdfe5519ab7.3c571f8ec9e02874
     fe57ba4ee68539f7
-VSHUFPS_0x39_256(mem)
+VPMINUB_128(mem)
   before
     ba39b835dc1f79d0.b96bec7b2c884a58.d393e9c278074c6a.4bc113cf096fd118
     4bc99331c7baa42c.d4b0a8f0e3758c73.9eb3469645a0e93f.f30798d2beb4560a
@@ -18354,11 +18354,11 @@
   after
     ba39b835dc1f79d0.b96bec7b2c884a58.d393e9c278074c6a.4bc113cf096fd118
     4bc99331c7baa42c.d4b0a8f0e3758c73.9eb3469645a0e93f.f30798d2beb4560a
-    ba39b8352c884a58.d4b0a8f0c7baa42c.d393e9c2096fd118.f30798d245a0e93f
+    0000000000000000.0000000000000000.9e93469645074c3f.4b0713cf096f560a
     5b22d516ee20a91c.a3eb9fa59d8784d0.18391109c630fb20.1392e6c149e43952
     436fa78557e70f01
 
-VSHUFPS_0x39_256(reg)
+VPMINUB_128(reg)
   before
     03c1ca0c654122f2.928433d66203fc08.1079d1bdd8c4b16a.7f387680b140e783
     afd349c2107fb0d0.0ec3605b3b172927.fa61228e21dffadc.7e6f2c05343a0fc2
@@ -18366,12 +18366,12 @@
     3b6b506cacd52804.460b14608e0004ab.b973120c4fdcd0f6.b0b479e9711d0788
     9b5a0720621f4d65
   after
-    8e0004ab3b6b506c.107fb0d00ec3605b.711d0788b973120c.21dffadc7e6f2c05
+    0000000000000000.0000000000000000.bf61228515639bd1.7e6f2c05342b0f0b
     afd349c2107fb0d0.0ec3605b3b172927.fa61228e21dffadc.7e6f2c05343a0fc2
     a3f32214f42cf347.acacd78f9667eda4.bff18e8515639bd1.efa9ae846b2b310b
     3b6b506cacd52804.460b14608e0004ab.b973120c4fdcd0f6.b0b479e9711d0788
     9b5a0720621f4d65
-VSHUFPS_0x39_256(mem)
+VPMINUB_128(mem)
   before
     8d68d6155b3ac1cf.d388cf38d4048bb3.baab93b840ec2a6a.4634a9916cd7d4f7
     63aa61b5787c1df2.c7969be209475700.e25ad085c7391a0b.c0804f7e07dfe47f
@@ -18381,11 +18381,11 @@
   after
     8d68d6155b3ac1cf.d388cf38d4048bb3.baab93b840ec2a6a.4634a9916cd7d4f7
     63aa61b5787c1df2.c7969be209475700.e25ad085c7391a0b.c0804f7e07dfe47f
-    8d68d615d4048bb3.c7969be2787c1df2.baab93b86cd7d4f7.c0804f7ec7391a0b
+    0000000000000000.0000000000000000.ba5a938540391a0b.46344f7e07d7d47f
     26fa9ba28ba37f11.33b40b8508381d21.c111762bc6254ba4.efe9b945294717d6
     5b9d75f6e8bfb2fd
 
-VUNPCKLPS_256(reg)
+VPMAXSB_128(reg)
   before
     260c30c09574495b.cc9f43c7baa0fe65.635da7550bfd8e4e.31b1d6dc76db03f5
     aa83e70fccf3189d.c6a897477cf35522.5f2680b489055ac9.c58fe4b16b2276d8
@@ -18393,12 +18393,12 @@
     50b335ec4b7c4c7c.211733052bcc7d86.2a4bdacf6c10ed57.cc34fb7895907d06
     f793fc4103cf88a9
   after
-    eee2130dc6a89747.eea841747cf35522.5a761c96c58fe4b1.c104607a6b2276d8
+    0000000000000000.0000000000000000.5f5c930e21055a3d.5a761cb16b22767a
     aa83e70fccf3189d.c6a897477cf35522.5f2680b489055ac9.c58fe4b16b2276d8
     444c944f2ac75a6f.eee2130deea84174.835c930e21ddbb3d.5a761c96c104607a
     50b335ec4b7c4c7c.211733052bcc7d86.2a4bdacf6c10ed57.cc34fb7895907d06
     f793fc4103cf88a9
-VUNPCKLPS_256(mem)
+VPMAXSB_128(mem)
   before
     b7619bdf25cf3e8f.2b06c553c99f2a71.3b14741b506ac685.b23f5364082b2ec3
     e868543c1a9b5be3.2f9040ee43bb2ff9.18a4513b788fd89c.7683f93791b9b82c
@@ -18408,11 +18408,11 @@
   after
     b7619bdf25cf3e8f.2b06c553c99f2a71.3b14741b506ac685.b23f5364082b2ec3
     e868543c1a9b5be3.2f9040ee43bb2ff9.18a4513b788fd89c.7683f93791b9b82c
-    2b06c5532f9040ee.c99f2a7143bb2ff9.b23f53647683f937.082b2ec391b9b82c
+    0000000000000000.0000000000000000.3b14743b786ad89c.763f5364082b2e2c
     0d5406e8e7c9b987.2577e874950fa175.8bb1cf49429b46c5.212fbd4bd85f99a7
     c12ed364ce8f6911
 
-VUNPCKLPS_256(reg)
+VPMAXSB_128(reg)
   before
     0cae066c20627228.b9d0f60ef842722f.cf6d0d37a65f86c0.d9c5680f1d9b1a2e
     60fb52ce6b64f099.46b7f0a44ab881f6.13ca0ddf21d8824f.5a9e8e906b51a760
@@ -18420,12 +18420,12 @@
     8f2b26565b283f38.73f1f3d023c8958f.d9e98f8ec777b2e7.65c96e6fd110dbcd
     a6b520a62231fa61
   after
-    90d3709646b7f0a4.fa36a4074ab881f6.ea05bcb65a9e8e90.49c9a9866b51a760
+    0000000000000000.0000000000000000.4dda0ddf2107d24f.5a05bcb66b51a960
     60fb52ce6b64f099.46b7f0a44ab881f6.13ca0ddf21d8824f.5a9e8e906b51a760
     1761b3f84b222110.90d37096fa36a407.4ddae4d8a307d2cd.ea05bcb649c9a986
     8f2b26565b283f38.73f1f3d023c8958f.d9e98f8ec777b2e7.65c96e6fd110dbcd
     a6b520a62231fa61
-VUNPCKLPS_256(mem)
+VPMAXSB_128(mem)
   before
     8b944e465638c16d.22a7a652370087be.cbddf43ee27b11b9.1342086d2ab55e49
     ef34753d8932ee1e.2d1f2f597c38344e.7463efcc525ad3b2.57324de1674b119e
@@ -18435,11 +18435,11 @@
   after
     8b944e465638c16d.22a7a652370087be.cbddf43ee27b11b9.1342086d2ab55e49
     ef34753d8932ee1e.2d1f2f597c38344e.7463efcc525ad3b2.57324de1674b119e
-    22a7a6522d1f2f59.370087be7c38344e.1342086d57324de1.2ab55e49674b119e
+    0000000000000000.0000000000000000.7463f43e527b11b9.57424d6d674b5e49
     a3e29bdd5e2c651d.1c364c39aff6b139.286dc4f9b6cd1cbf.6d082939e1b57fd3
     f684b7f455a0b10b
 
-VUNPCKLPS_256(reg)
+VPMAXSB_128(reg)
   before
     fac801f51414dbe7.ac89925f384527c3.b76dd9e9d694f7ee.ec889570e3791b2c
     d41f02a7ba9e3912.a41f72e681803fbe.3bd05f55d4c1945c.706d51b731815118
@@ -18447,12 +18447,12 @@
     79341acd28218007.d04cdab7d28d5b62.694e460dcbfabe14.2dc57865a1d7501a
     1cd0dba4fc3c9189
   after
-    6672b65fa41f72e6.56e9673a81803fbe.92e874ba706d51b7.bcf279ad31815118
+    0000000000000000.0000000000000000.3bd05f55470ac25c.706d74ba31f27918
     d41f02a7ba9e3912.a41f72e681803fbe.3bd05f55d4c1945c.706d51b731815118
     e0d4b675e2c80639.6672b65f56e9673a.02addae8470ac22f.92e874babcf279ad
     79341acd28218007.d04cdab7d28d5b62.694e460dcbfabe14.2dc57865a1d7501a
     1cd0dba4fc3c9189
-VUNPCKLPS_256(mem)
+VPMAXSB_128(mem)
   before
     3dd51763e82ef927.fd8b281a2932e129.bd7a5ad81277d963.cc00a032fb1ec3b7
     6a9fab8e81b8441f.c725dec88089654a.08c9b2b031b39b69.870fe3c274000fc3
@@ -18462,11 +18462,11 @@
   after
     3dd51763e82ef927.fd8b281a2932e129.bd7a5ad81277d963.cc00a032fb1ec3b7
     6a9fab8e81b8441f.c725dec88089654a.08c9b2b031b39b69.870fe3c274000fc3
-    fd8b281ac725dec8.2932e1298089654a.cc00a032870fe3c2.fb1ec3b774000fc3
+    0000000000000000.0000000000000000.087a5ad83177d969.cc0fe332741e0fc3
     5cb6c3d92cc673cf.9c5230f8a237ca3c.2cf4dc327e53dd32.767414d4af3467c8
     6161fa2da99ceb19
 
-VUNPCKHPS_256(reg)
+VPMINSB_128(reg)
   before
     14dcbaa15bf5a584.d89a41d07661cedf.5f7cc351a5a62264.bc6aa5b4e3cfd64d
     eb2f4f9d62c8d1b4.d27405e4ddc4fcfa.d919eebb6e8a8d3c.1c2f369c98cd031d
@@ -18474,12 +18474,12 @@
     7590e8d9dd116e15.ab394f0f7414bfff.5edcf974c4e390ab.b7daa24e607feb8a
     ac5774f0ac4c1e80
   after
-    42a7b58beb2f4f9d.5aa3ab5662c8d1b4.6475aca3d919eebb.9a7049706e8a8d3c
+    0000000000000000.0000000000000000.d919aca39a8a8d3c.1c110c9c98cd03cd
     eb2f4f9d62c8d1b4.d27405e4ddc4fcfa.d919eebb6e8a8d3c.1c2f369c98cd031d
     42a7b58b5aa3ab56.240f8bff7efcb84b.6475aca39a704970.26110cd6b95920cd
     7590e8d9dd116e15.ab394f0f7414bfff.5edcf974c4e390ab.b7daa24e607feb8a
     ac5774f0ac4c1e80
-VUNPCKHPS_256(mem)
+VPMINSB_128(mem)
   before
     df53fea9b7cb76da.e035e5f28a9e579e.44bcceffdc19ce42.219ad199896f9e9a
     2d9cbc639d09aec5.dee4a642fbd7a29d.c96683bbd1159e3f.0bfb318084a1b1e8
@@ -18489,11 +18489,11 @@
   after
     df53fea9b7cb76da.e035e5f28a9e579e.44bcceffdc19ce42.219ad199896f9e9a
     2d9cbc639d09aec5.dee4a642fbd7a29d.c96683bbd1159e3f.0bfb318084a1b1e8
-    df53fea92d9cbc63.b7cb76da9d09aec5.44bcceffc96683bb.dc19ce42d1159e3f
+    0000000000000000.0000000000000000.c9bc83bbd1159e3f.0b9ad18084a19e9a
     8b41c68e6cefb2fc.088c69379a7b4daa.0a5a7f47d3287819.bfd576418e24d153
     43e653f3d48e56c8
 
-VUNPCKHPS_256(reg)
+VPMINSB_128(reg)
   before
     5ccaa816c1cdd04d.523509d78daff5a1.eb1d63b400fe2512.7f3cbfef1956f94d
     67cd6f17f06d798d.a4a570d2f95e0886.d2e711189b5c4f9f.507524145cac2ced
@@ -18501,12 +18501,12 @@
     c45f495e87024af0.59299b8e24b791c2.1b557e46deda87d9.791852814a029c1b
     891a13a12e195003
   after
-    c03aa66067cd6f17.fefb8e35f06d798d.183571cfd2e71118.062106fd9b5c4f9f
+    0000000000000000.0000000000000000.d2e711cf9b21069f.50cf24a0b8accfed
     67cd6f17f06d798d.a4a570d2f95e0886.d2e711189b5c4f9f.507524145cac2ced
     c03aa660fefb8e35.5d5d786bcd08a8d8.183571cf062106fd.5acf2ca0b837cf23
     c45f495e87024af0.59299b8e24b791c2.1b557e46deda87d9.791852814a029c1b
     891a13a12e195003
-VUNPCKHPS_256(mem)
+VPMINSB_128(mem)
   before
     66a2e9ee7e89a604.cd86527e260eea6b.74d457271b797f71.369235e7be120edf
     ec7c5253595d5b4d.38fdbf2b77acaa52.8a2c2823cd592d11.c43790204256d6ba
@@ -18516,11 +18516,11 @@
   after
     66a2e9ee7e89a604.cd86527e260eea6b.74d457271b797f71.369235e7be120edf
     ec7c5253595d5b4d.38fdbf2b77acaa52.8a2c2823cd592d11.c43790204256d6ba
-    66a2e9eeec7c5253.7e89a604595d5b4d.74d457278a2c2823.1b797f71cd592d11
+    0000000000000000.0000000000000000.8ad42823cd592d11.c49290e7be12d6ba
     6355ca151a62d261.a406b1dba1cb7912.170ef5efd3a5bcd2.adec2706a92f1da2
     c0945a8cc3dd1206
 
-VUNPCKHPS_256(reg)
+VPMINSB_128(reg)
   before
     b6d52259f1c63af0.0cecd24a38aa0b85.5d3030b7b2650043.4631e9996028154b
     edfa7cd9d076cf0b.cd055b47518893a0.e8da01d0e5c09790.e030e25518fa1e65
@@ -18528,12 +18528,12 @@
     8a24d3a3105d3286.0cede54add2f806a.e4da8e6a23eae42d.c4f1d1b27ab8322b
     c74bbf2c5cbdb62f
   after
-    bf516379edfa7cd9.fc7a0e04d076cf0b.a14e2292e8da01d0.d76979a5e5c09790
+    0000000000000000.0000000000000000.a1da0192d7c09790.c0d6e20e17fa944c
     edfa7cd9d076cf0b.cd055b47518893a0.e8da01d0e5c09790.e030e25518fa1e65
     bf516379fc7a0e04.846ce3f87e0526de.a14e2292d76979a5.c0d65c0e1726944c
     8a24d3a3105d3286.0cede54add2f806a.e4da8e6a23eae42d.c4f1d1b27ab8322b
     c74bbf2c5cbdb62f
-VUNPCKHPS_256(mem)
+VPMINSB_128(mem)
   before
     a5b1a168da40da83.a8c0c8c4a8ab793e.4154de278a125c70.0dc841c265d212d5
     3aeff3520f4d5b54.76713e4961f11dd8.ff6d487da0b9771d.776537073aaa3f48
@@ -18543,11 +18543,11 @@
   after
     a5b1a168da40da83.a8c0c8c4a8ab793e.4154de278a125c70.0dc841c265d212d5
     3aeff3520f4d5b54.76713e4961f11dd8.ff6d487da0b9771d.776537073aaa3f48
-    a5b1a1683aeff352.da40da830f4d5b54.4154de27ff6d487d.8a125c70a0b9771d
+    0000000000000000.0000000000000000.ff54de278ab95c1d.0dc837c23aaa12d5
     f823d8e11037631c.93419f2ba4926e60.85e364407983591b.83dbde090c5f8a42
     dc4d869e40541f20
 
-VXORPD_256(reg)
+VPERM2F128_0x00(reg)
   before
     e79d61d07769a37a.d9b0635d142b626a.99f98160660693a6.06d90d8673bf98c4
     ff196b0b4d2d53fb.e2464e373fdaade6.bff5d4a9b9a1067e.7fb118f447ef06c4
@@ -18555,12 +18555,12 @@
     cbbffe4c43eb2724.d8b834b77c971b12.dcecbf247f7dc593.cd3746f8eb5c5e76
     5a7c6066f4b1c082
   after
-    7d12cab0100438ab.0ce95b6b9195af5c.dd7741d8814e05ea.b1861a8256f05982
+    bff5d4a9b9a1067e.7fb118f447ef06c4.bff5d4a9b9a1067e.7fb118f447ef06c4
     ff196b0b4d2d53fb.e2464e373fdaade6.bff5d4a9b9a1067e.7fb118f447ef06c4
     820ba1bb5d296b50.eeaf155cae4f02ba.6282957138ef0394.ce370276111f5f46
     cbbffe4c43eb2724.d8b834b77c971b12.dcecbf247f7dc593.cd3746f8eb5c5e76
     5a7c6066f4b1c082
-VXORPD_256(mem)
+VPERM2F128_0x00(mem)
   before
     4fd4ccac462a4194.35837e2a9cfec324.7e2d2833c6bcb51b.8a7f4e2e2bd68928
     8a0907b7fdd49cd8.1ea21dc103ef7afc.bada6cbea7cd8b01.c8863efcd8868bff
@@ -18570,11 +18570,11 @@
   after
     4fd4ccac462a4194.35837e2a9cfec324.7e2d2833c6bcb51b.8a7f4e2e2bd68928
     8a0907b7fdd49cd8.1ea21dc103ef7afc.bada6cbea7cd8b01.c8863efcd8868bff
-    c5ddcb1bbbfedd4c.2b2163eb9f11b9d8.c4f7448d61713e1a.42f970d2f35002d7
+    bada6cbea7cd8b01.c8863efcd8868bff.bada6cbea7cd8b01.c8863efcd8868bff
     3d3dd6c80ce9d3a9.d920a9cb6d982be2.680bd4ae9fdcdf12.6424328fa31d3820
     7a522e2ef91b5bc3
 
-VXORPD_256(reg)
+VPERM2F128_0x00(reg)
   before
     90267b3fbfa1ab58.6fd363a69c6c278d.63178e15a8699d49.9127f1ebeff3d395
     02e91530923a668a.5578aff9014f4554.dc9983c961471b37.c2ab4ee74624f5a5
@@ -18582,12 +18582,12 @@
     6a74215fcdd70778.b11b70abbb66d239.076d891bbf5a2b5a.a71bb8c77a06ae1b
     149fbd858fcfbdd9
   after
-    2e03ec5c9f49a08c.998e9b5556d1af7d.4268019b54f9fa6f.17c8296b86580acb
+    dc9983c961471b37.c2ab4ee74624f5a5.dc9983c961471b37.c2ab4ee74624f5a5
     02e91530923a668a.5578aff9014f4554.dc9983c961471b37.c2ab4ee74624f5a5
     2ceaf96c0d73c606.ccf634ac579eea29.9ef1825235bee158.d563678cc07cff6e
     6a74215fcdd70778.b11b70abbb66d239.076d891bbf5a2b5a.a71bb8c77a06ae1b
     149fbd858fcfbdd9
-VXORPD_256(mem)
+VPERM2F128_0x00(mem)
   before
     f9baf3b01ce2ead4.18d28b746df2678b.deb1dee249b2b8b0.715893929ba834e7
     3039d5363c4bef37.9151331a8a5020ec.3085fb3d1c8f59b9.39fd9c22663439ab
@@ -18597,11 +18597,11 @@
   after
     f9baf3b01ce2ead4.18d28b746df2678b.deb1dee249b2b8b0.715893929ba834e7
     3039d5363c4bef37.9151331a8a5020ec.3085fb3d1c8f59b9.39fd9c22663439ab
-    c983268620a905e3.8983b86ee7a24767.ee3425df553de109.48a50fb0fd9c0d4c
+    3085fb3d1c8f59b9.39fd9c22663439ab.3085fb3d1c8f59b9.39fd9c22663439ab
     07948d00a75073e6.59e229c1a9079046.b3162e100229bc34.54a89b3e3832268b
     5e468aa176be86fe
 
-VXORPD_256(reg)
+VPERM2F128_0x00(reg)
   before
     36cf68cd13b7d159.5f075c1c2a056a8b.5f8c6f9be378be98.9c6b3d5f4efff5fd
     388e312faba94547.7a0dc642b03f2a49.a087e3b50a5c36e7.1a2fea834f94d908
@@ -18609,12 +18609,12 @@
     2be2754139a9938f.6906605c3777f4bd.489f43558dadf42e.452f0ff6e1319297
     aa047e1eaa50de72
   after
-    f85fd31e72895932.4e798f1ce6334502.da9962ccb3630207.13035be56e63fd8a
+    a087e3b50a5c36e7.1a2fea834f94d908.a087e3b50a5c36e7.1a2fea834f94d908
     388e312faba94547.7a0dc642b03f2a49.a087e3b50a5c36e7.1a2fea834f94d908
     c0d1e231d9201c75.3474495e560c6f4b.7a1e8179b93f34e0.092cb16621f72482
     2be2754139a9938f.6906605c3777f4bd.489f43558dadf42e.452f0ff6e1319297
     aa047e1eaa50de72
-VXORPD_256(mem)
+VPERM2F128_0x00(mem)
   before
     14767cca9960c540.d30ee8ca68cfe640.f59188296f8d76cc.655427b32133b17e
     5f5385e6c96b022d.15a13638011e5035.b4df3baf1b59b1a4.2f8a2801115da87b
@@ -18624,11 +18624,11 @@
   after
     14767cca9960c540.d30ee8ca68cfe640.f59188296f8d76cc.655427b32133b17e
     5f5385e6c96b022d.15a13638011e5035.b4df3baf1b59b1a4.2f8a2801115da87b
-    4b25f92c500bc76d.c6afdef269d1b675.414eb38674d4c768.4ade0fb2306e1905
+    b4df3baf1b59b1a4.2f8a2801115da87b.b4df3baf1b59b1a4.2f8a2801115da87b
     0879a41e5ea77212.d72b5473e3695c99.3bf6379a3e44415d.36a8711a78c9332f
     2b29b2bd26243f3d
 
-VBROADCASTSD_256(reg)
+VPERM2F128_0xFF(reg)
   before
     3d5a00ffa05375a9.1e5bb312fbf01c62.0fbb1b18647d7561.bb5878d7ec7b0e97
     c689574d83e1111f.85d7bc2749650c81.51e1ae52bfe9961c.ddad347e7e988349
@@ -18636,12 +18636,12 @@
     b10b10b8f24b69d6.b5cdac606a04b1db.6222263674ffe01d.7c6412babcb659c7
     b05d2b27a1ce31eb
   after
-    3d5a00ffa05375a9.1e5bb312fbf01c62.0fbb1b18647d7561.bb5878d7ec7b0e97
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     c689574d83e1111f.85d7bc2749650c81.51e1ae52bfe9961c.ddad347e7e988349
     2300b3116a5a4e4a.18b93b476512009b.f8ea088d903bfb77.7fc3e97b10a85ea0
     b10b10b8f24b69d6.b5cdac606a04b1db.6222263674ffe01d.7c6412babcb659c7
     b05d2b27a1ce31eb
-VBROADCASTSD_256(mem)
+VPERM2F128_0xFF(mem)
   before
     f67ab0aed8fda138.caf86bafb63f9e71.37de8c5c7446de6e.ead502b707c080bb
     2c861e3b804e67d9.cb12bf6153c228c4.79b95629a0e5427f.ec4f9a7ee40a19fd
@@ -18650,12 +18650,12 @@
     655d9da85298074f
   after
     f67ab0aed8fda138.caf86bafb63f9e71.37de8c5c7446de6e.ead502b707c080bb
-    ead502b707c080bb.ead502b707c080bb.ead502b707c080bb.ead502b707c080bb
-    2c4ff0bbb2ce3dfb.11a408396461447e.592a86b20aeb983b.c4dbe9f5a769e48e
+    2c861e3b804e67d9.cb12bf6153c228c4.79b95629a0e5427f.ec4f9a7ee40a19fd
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     d49fa2188d87dfc9.f6fc42a586a72e49.b2fd99e3cd669dcd.cdc7eb8aed6a201a
     655d9da85298074f
 
-VBROADCASTSD_256(reg)
+VPERM2F128_0xFF(reg)
   before
     e7eafabb7180d6d7.ff44b0402a870b70.d7646a10542022d2.5ffe09a805620c62
     aebafd2fe6adc95e.8808961da7da7b1b.10297be66b595bc4.3ef954edcfeaa226
@@ -18663,12 +18663,12 @@
     8052ebea4407091c.281fdcabb0a61930.faf94883e1398f95.fe0c69a787ce33e9
     97bc2af5ae43a641
   after
-    e7eafabb7180d6d7.ff44b0402a870b70.d7646a10542022d2.5ffe09a805620c62
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     aebafd2fe6adc95e.8808961da7da7b1b.10297be66b595bc4.3ef954edcfeaa226
     1818a4704eab1b91.4db8d19d208becf7.fd97719366dd16cc.29b9f59e460a1b44
     8052ebea4407091c.281fdcabb0a61930.faf94883e1398f95.fe0c69a787ce33e9
     97bc2af5ae43a641
-VBROADCASTSD_256(mem)
+VPERM2F128_0xFF(mem)
   before
     d296b672d5742f77.41b3cc0a654ccfaa.f60b33337337c0f1.639dfc2379f702cc
     8966880c1a6d8bb8.b986453a4c06a9e8.94465221864b9b67.94cd8addcaa5aa1d
@@ -18677,12 +18677,12 @@
     6fa322e726c43d60
   after
     d296b672d5742f77.41b3cc0a654ccfaa.f60b33337337c0f1.639dfc2379f702cc
-    639dfc2379f702cc.639dfc2379f702cc.639dfc2379f702cc.639dfc2379f702cc
-    99f71cae993b752f.421851e896c2d282.dc9eb66105ed66be.e9d6ed1f6fcfc433
+    8966880c1a6d8bb8.b986453a4c06a9e8.94465221864b9b67.94cd8addcaa5aa1d
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     df17ee436de9aa09.3ab5ec7ede0a8723.acddd9df0b2adf21.be04215304008bbb
     6fa322e726c43d60
 
-VBROADCASTSD_256(reg)
+VPERM2F128_0xFF(reg)
   before
     58ffed4671a714cf.35907bb9b384e771.fba9136ac16d0477.ded03987b40cc0bc
     d5637ddb7f364db3.78303efb8617e594.e23fc017da74842c.4f4252461da2c6bd
@@ -18690,12 +18690,12 @@
     fb77dc5c5b86d38d.3610569345561bba.9385a1641fa48063.5fd89bb59d13309b
     b592c43eed070cd1
   after
-    58ffed4671a714cf.35907bb9b384e771.fba9136ac16d0477.ded03987b40cc0bc
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     d5637ddb7f364db3.78303efb8617e594.e23fc017da74842c.4f4252461da2c6bd
     421dce14effc23ba.84c1b3f503ae639e.4cc5f1f1c5ad44ec.db019e0661f5ac4d
     fb77dc5c5b86d38d.3610569345561bba.9385a1641fa48063.5fd89bb59d13309b
     b592c43eed070cd1
-VBROADCASTSD_256(mem)
+VPERM2F128_0xFF(mem)
   before
     bafc958c6bdefd1b.5bbea3205f5e99db.68e8a3c26819ca15.14ccccdc84e3743e
     4ae28a8d35a3bea7.c03e20ca9813b14e.f717176c89062bda.2ce66fc58ff85b29
@@ -18704,12 +18704,12 @@
     8d1dfa5fafaf20fe
   after
     bafc958c6bdefd1b.5bbea3205f5e99db.68e8a3c26819ca15.14ccccdc84e3743e
-    14ccccdc84e3743e.14ccccdc84e3743e.14ccccdc84e3743e.14ccccdc84e3743e
-    41101f2c67620c9e.85434ec7a12e5692.bf672d7ec426fc36.351f858bdc6f72cf
+    4ae28a8d35a3bea7.c03e20ca9813b14e.f717176c89062bda.2ce66fc58ff85b29
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     7b52d1551c27a32f.06192983163dc654.9ca661e53487f755.8cc30a9b08d2f5dd
     8d1dfa5fafaf20fe
 
-VCMPPD_128_0x4(reg)
+VPERM2F128_0x30(reg)
   before
     947b51456b922edf.d4731bf471ff3f84.9e0bad6b95cb3a40.6a9e2f8bf534d962
     fd270cb7db065c2c.284179f681f69bc9.ab66d6eab765f101.051c145e243a5d8a
@@ -18717,12 +18717,12 @@
     659c9bf441d107b8.310f62cf446d86d6.9088095c5aea13b5.12d910383a7e3ed9
     3cb11f1759d51359
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    246e26239997e590.538668456916742c.ab66d6eab765f101.051c145e243a5d8a
     fd270cb7db065c2c.284179f681f69bc9.ab66d6eab765f101.051c145e243a5d8a
     246e26239997e590.538668456916742c.8777a16b1a962544.49ec8b49dca440f8
     659c9bf441d107b8.310f62cf446d86d6.9088095c5aea13b5.12d910383a7e3ed9
     3cb11f1759d51359
-VCMPPD_128_0x4(mem)
+VPERM2F128_0x30(mem)
   before
     a33e34d256b47aa3.1dfd67967041fc4f.9ea8e57e2e068df6.21e50a2812eef7ff
     234dcc554c2730e4.a5dd8675c1720002.761d6c4044ee44b6.95dca03bde2c0ccf
@@ -18732,11 +18732,11 @@
   after
     a33e34d256b47aa3.1dfd67967041fc4f.9ea8e57e2e068df6.21e50a2812eef7ff
     234dcc554c2730e4.a5dd8675c1720002.761d6c4044ee44b6.95dca03bde2c0ccf
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    a33e34d256b47aa3.1dfd67967041fc4f.761d6c4044ee44b6.95dca03bde2c0ccf
     dd21726495fb79f9.9d48af9a3b48296b.d6ca77a962d8b4c7.9ac47de6248cbcaf
     e24dbb56d6c5cf17
 
-VCMPPD_128_0x4(reg)
+VPERM2F128_0x30(reg)
   before
     7f9f7ebe0d6a03b5.d07e78c71f738325.c46cb0b89b05c579.179af329a3f3e671
     cb06c38864059535.4c8df1a313b0ccf9.2d3ff4c48eb46152.3376636b7f8cb86b
@@ -18744,12 +18744,12 @@
     e443bff6e353c289.4eef2972a8a60a43.352237529c158718.6b820fe579692e02
     404a44f6cfc54bf6
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    23ce84227724c142.2c1958e28dbd109e.2d3ff4c48eb46152.3376636b7f8cb86b
     cb06c38864059535.4c8df1a313b0ccf9.2d3ff4c48eb46152.3376636b7f8cb86b
     23ce84227724c142.2c1958e28dbd109e.340d7828b0e038a3.062a435b12b0e7e2
     e443bff6e353c289.4eef2972a8a60a43.352237529c158718.6b820fe579692e02
     404a44f6cfc54bf6
-VCMPPD_128_0x4(mem)
+VPERM2F128_0x30(mem)
   before
     604d5c7831d0f8eb.68b06f72431cd6b5.8ddbe03e81787712.8bc92dadeedf8a5c
     a659d559ba94f10c.0c629101330d3773.c4a9f932323e1337.945056a443cb7d1b
@@ -18759,11 +18759,11 @@
   after
     604d5c7831d0f8eb.68b06f72431cd6b5.8ddbe03e81787712.8bc92dadeedf8a5c
     a659d559ba94f10c.0c629101330d3773.c4a9f932323e1337.945056a443cb7d1b
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    604d5c7831d0f8eb.68b06f72431cd6b5.c4a9f932323e1337.945056a443cb7d1b
     18b7d8e4b27dbb84.24c517083695d254.8e1b434293d7c736.2c29321b653721be
     7214dd7269cf4bf8
 
-VCMPPD_128_0x4(reg)
+VPERM2F128_0x30(reg)
   before
     db0eab16e0b8545e.fca25a675ab90334.500e7458804584cf.d9566b3679c25767
     c1629874657f799c.76c52cf799df87bf.0dcc326bcb4b738b.8ca4e502a9d2069f
@@ -18771,12 +18771,12 @@
     784cc1090bd4074e.a0e2b0f34e1a371c.a5d6c28bd18efc79.9ea4c0d3558eafd3
     b4ef19b009522226
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    825ea1f695aff65d.64ebca828cfb0553.0dcc326bcb4b738b.8ca4e502a9d2069f
     c1629874657f799c.76c52cf799df87bf.0dcc326bcb4b738b.8ca4e502a9d2069f
     825ea1f695aff65d.64ebca828cfb0553.b54a4eadb235dd35.85cf2d933e118f0a
     784cc1090bd4074e.a0e2b0f34e1a371c.a5d6c28bd18efc79.9ea4c0d3558eafd3
     b4ef19b009522226
-VCMPPD_128_0x4(mem)
+VPERM2F128_0x30(mem)
   before
     a47bb415776ba431.0179f41a647ae71b.07745b36fb47d946.39ba8c6fc5e20d02
     48160eedbae4f01d.773136943b2ed36f.766e4538b08fa9fc.cd43a7c72abe4c7d
@@ -18786,11 +18786,11 @@
   after
     a47bb415776ba431.0179f41a647ae71b.07745b36fb47d946.39ba8c6fc5e20d02
     48160eedbae4f01d.773136943b2ed36f.766e4538b08fa9fc.cd43a7c72abe4c7d
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    a47bb415776ba431.0179f41a647ae71b.766e4538b08fa9fc.cd43a7c72abe4c7d
     20a5ebab3127d94f.9e72d872d5eebe5e.d7cacc24a09dbebe.6474c17fb43c42f7
     20b3b8b812f5724f
 
-VCVTDQ2PD_128(reg)
+VPERM2F128_0x21(reg)
   before
     4cc8f0145067bf48.0b3167689c0aedeb.069230afcf123551.82c45fe8147b7b22
     44fd65ff0b1b678f.1bfb91494d7cbc1b.cd6d8705b874a87b.a555231afea456c2
@@ -18798,12 +18798,12 @@
     07faf733667eb2b5.1a78e028f0427be1.e38523acc61e7127.be702b77aa055169
     6d91677ba455e9c7
   after
-    4cc8f0145067bf48.0b3167689c0aedeb.069230afcf123551.82c45fe8147b7b22
-    0000000000000000.0000000000000000.41ba4b92a5000000.41df48c272c00000
+    4d50d9e02c9e5389.1a4b92a57d2309cb.44fd65ff0b1b678f.1bfb91494d7cbc1b
+    44fd65ff0b1b678f.1bfb91494d7cbc1b.cd6d8705b874a87b.a555231afea456c2
     649f13e5de9fa4cf.2ccee63b608b0209.4d50d9e02c9e5389.1a4b92a57d2309cb
     07faf733667eb2b5.1a78e028f0427be1.e38523acc61e7127.be702b77aa055169
     6d91677ba455e9c7
-VCVTDQ2PD_128(mem)
+VPERM2F128_0x21(mem)
   before
     037ac39d841f8e12.8b5a0c533e45cfed.c1c3fdfd19aee2d0.ec595fd622803f00
     5cf6bcc96870fc75.4b0a4eb2037e3522.fe7db8a7f8daf402.c2178bc8dd4ef9c1
@@ -18812,12 +18812,12 @@
     b0cc828e5dc20429
   after
     037ac39d841f8e12.8b5a0c533e45cfed.c1c3fdfd19aee2d0.ec595fd622803f00
-    0000000000000000.0000000000000000.c1b3a6a02a000000.41c1401f80000000
-    54d3cdeb6c53ef1d.a358b9bd50b82100.ab708e10a9d26da2.c20da2ef9316da15
+    5cf6bcc96870fc75.4b0a4eb2037e3522.fe7db8a7f8daf402.c2178bc8dd4ef9c1
+    c1c3fdfd19aee2d0.ec595fd622803f00.5cf6bcc96870fc75.4b0a4eb2037e3522
     c7db72efabd42236.ee8e49dec27cce35.a569f92646a309dd.4885a1b8de641fa9
     b0cc828e5dc20429
 
-VCVTDQ2PD_128(reg)
+VPERM2F128_0x21(reg)
   before
     562e43dcaabfc540.91dc28c242ff52eb.8af9fb83f458796b.c83477d4ee5883de
     96f7df1061e49d9b.8ea0694e4ce13b69.d1e5ca1782d75e4e.ef9c8306bbfd98d2
@@ -18825,12 +18825,12 @@
     54ee99d77fdb85cb.91a381452af8276e.d470b0bc25f0c6ce.be7736a635488242
     1d81d4ec1a07cf15
   after
-    562e43dcaabfc540.91dc28c242ff52eb.8af9fb83f458796b.c83477d4ee5883de
-    0000000000000000.0000000000000000.c19e419960000000.c1cb30fe0e000000
+    219eb2060986b98b.f86f99a8c99e03e4.96f7df1061e49d9b.8ea0694e4ce13b69
+    96f7df1061e49d9b.8ea0694e4ce13b69.d1e5ca1782d75e4e.ef9c8306bbfd98d2
     cc7353951fbfc9e5.9af4b381e58699db.219eb2060986b98b.f86f99a8c99e03e4
     54ee99d77fdb85cb.91a381452af8276e.d470b0bc25f0c6ce.be7736a635488242
     1d81d4ec1a07cf15
-VCVTDQ2PD_128(mem)
+VPERM2F128_0x21(mem)
   before
     f159f16694e5a78c.8ab3af421dc40df9.4f7b4f883745a24d.48a6bea571a1c0c2
     16cb0801c1f0c5d1.ca10904397079c1a.af469a352779c5a6.d78eda2d8926e414
@@ -18839,12 +18839,12 @@
     c56155b8b520a2f3
   after
     f159f16694e5a78c.8ab3af421dc40df9.4f7b4f883745a24d.48a6bea571a1c0c2
-    0000000000000000.0000000000000000.41d229afa9400000.41dc687030800000
-    67a396a7ba34e610.704f3844862f6fdb.8fd2dc38169e4ea2.df72ffc00a0a6d70
+    16cb0801c1f0c5d1.ca10904397079c1a.af469a352779c5a6.d78eda2d8926e414
+    4f7b4f883745a24d.48a6bea571a1c0c2.16cb0801c1f0c5d1.ca10904397079c1a
     c2ad15469dbbc676.d8bda3b288c9c2e7.cae9937d21c2f770.ba9f29cb8fd99981
     c56155b8b520a2f3
 
-VCVTDQ2PD_128(reg)
+VPERM2F128_0x21(reg)
   before
     5d047df5176ac474.02b403c88693212f.5ea6cefa3960d0eb.3c583bf063f17d3a
     dcd39fec52433dad.0385db1b90c8b366.5e55b3863480d693.c0eb4e7df9359b2c
@@ -18852,12 +18852,12 @@
     0229bfbdc1d41ffe.b7b539e178766a01.3b39a11f798cb97c.73aca9968f32933b
     5872e9f9c702e3af
   after
-    5d047df5176ac474.02b403c88693212f.5ea6cefa3960d0eb.3c583bf063f17d3a
-    0000000000000000.0000000000000000.41ca36a488000000.c1763f08d0000000
+    331850c415b5108a.346d4910fe9c0f73.dcd39fec52433dad.0385db1b90c8b366
+    dcd39fec52433dad.0385db1b90c8b366.5e55b3863480d693.c0eb4e7df9359b2c
     9f1cb60b0138474d.a0ed192ad7653748.331850c415b5108a.346d4910fe9c0f73
     0229bfbdc1d41ffe.b7b539e178766a01.3b39a11f798cb97c.73aca9968f32933b
     5872e9f9c702e3af
-VCVTDQ2PD_128(mem)
+VPERM2F128_0x21(mem)
   before
     c18d8527c318bdfc.6247b46e2da3006c.22acb82c8f0707bc.d105a003fc900f17
     88c7fa0a9e80db4e.19c2938ae2322845.bf9d11f73625cba6.50c84bdc394e4c05
@@ -18866,12 +18866,12 @@
     e3d3265d6657c97c
   after
     c18d8527c318bdfc.6247b46e2da3006c.22acb82c8f0707bc.d105a003fc900f17
-    0000000000000000.0000000000000000.c1c77d2ffe800000.c18b7f8748000000
-    8bedc3907447fad0.84e6577d7b0cd133.6853c02e8cdb72ea.16ce9d16cc51acf2
+    88c7fa0a9e80db4e.19c2938ae2322845.bf9d11f73625cba6.50c84bdc394e4c05
+    22acb82c8f0707bc.d105a003fc900f17.88c7fa0a9e80db4e.19c2938ae2322845
     a4ca5ba46278d5ae.fffffcb394bd38e2.fb9c41beab35b8b5.7e63921d52256d8b
     e3d3265d6657c97c
 
-VDIVPD_128(reg)
+VPERM2F128_0x12(reg)
   before
     a3695642a571fd70.b12c4132841f2a16.e6587f98cad298ff.52421191af405932
     18721c39aa024414.8cddee26f549b332.953fda99b9d62e36.4b12aa94b507108e
@@ -18879,12 +18879,12 @@
     950d5f0978b2ff1b.206091f035545337.bbe20d9b2fdcec9f.8e5f2ddc35fbb292
     92750df7e73f1592
   after
-    0000000000000000.0000000000000000.8000000000000000.ca2856c6950d9a47
+    18721c39aa024414.8cddee26f549b332.68fe0b20fc563632.c0d88ab4d8979af5
     18721c39aa024414.8cddee26f549b332.953fda99b9d62e36.4b12aa94b507108e
     a03a76ac1293dc14.12abdf6cd1012c2e.68fe0b20fc563632.c0d88ab4d8979af5
     950d5f0978b2ff1b.206091f035545337.bbe20d9b2fdcec9f.8e5f2ddc35fbb292
     92750df7e73f1592
-VDIVPD_128(mem)
+VPERM2F128_0x12(mem)
   before
     a6e4a8f30a6f7f21.5537d4bb79ebe9d5.90c97f9f3d4de279.ea37dd74eff68b2b
     a77a78bbbb98ac6a.3a04d02db0c8d8f0.3fb2256303f8961f.51487519d8305080
@@ -18894,11 +18894,11 @@
   after
     a6e4a8f30a6f7f21.5537d4bb79ebe9d5.90c97f9f3d4de279.ea37dd74eff68b2b
     a77a78bbbb98ac6a.3a04d02db0c8d8f0.3fb2256303f8961f.51487519d8305080
-    0000000000000000.0000000000000000.eed6c5d7afc10827.a70065aaef6643a2
+    a77a78bbbb98ac6a.3a04d02db0c8d8f0.90c97f9f3d4de279.ea37dd74eff68b2b
     e146ad5f36033edb.e7b64c0631a3b0f3.cb338ade40955c49.36d2f27492313c37
     6de3ce029b10daf0
 
-VDIVPD_128(reg)
+VPERM2F128_0x12(reg)
   before
     4ce0630b3e3f8e24.d1140814385d1b5c.6633c644b4b91134.5f63416ded9fe625
     2f16aefb1449947d.1e398a4437dfaa48.7b83b6f4dda46785.a243a0c2ca8c8516
@@ -18906,12 +18906,12 @@
     705c5341cf20844f.3fb4f0c99d8cd20e.d8cbed55922add05.a543476d813cf0e5
     1dfb879d9518351b
   after
-    0000000000000000.0000000000000000.fff0000000000000.8000000000000000
+    2f16aefb1449947d.1e398a4437dfaa48.82f21a8048f1ec91.709f24c8f267f447
     2f16aefb1449947d.1e398a4437dfaa48.7b83b6f4dda46785.a243a0c2ca8c8516
     71d1aa3fbcbb27a7.a47faedc4f95a9ca.82f21a8048f1ec91.709f24c8f267f447
     705c5341cf20844f.3fb4f0c99d8cd20e.d8cbed55922add05.a543476d813cf0e5
     1dfb879d9518351b
-VDIVPD_128(mem)
+VPERM2F128_0x12(mem)
   before
     b4925f4247067f16.8705a56feb04e721.cba2ccf63cd0e241.d75c2be056dd758c
     46d64b49b5128902.11169d33acf48bc8.2416bf4e496b948f.dcefd08b3196f1d3
@@ -18921,11 +18921,11 @@
   after
     b4925f4247067f16.8705a56feb04e721.cba2ccf63cd0e241.d75c2be056dd758c
     46d64b49b5128902.11169d33acf48bc8.2416bf4e496b948f.dcefd08b3196f1d3
-    0000000000000000.0000000000000000.98635bd698a45046.458211b5dabfe2be
+    46d64b49b5128902.11169d33acf48bc8.cba2ccf63cd0e241.d75c2be056dd758c
     cb90502e34b5d05b.f3a36b328b258a48.adbfd6341bdbd12b.684f41f69a468550
     a7b3048d615714de
 
-VDIVPD_128(reg)
+VPERM2F128_0x12(reg)
   before
     5c491ef4ad9d77db.769f61e37c658520.01b73a44e17e5b78.958df49918c8d4d0
     e35f8c9a1da4eaf4.8c8a76abf062ea86.f4649f9d4b135f2d.ba1017daf33d6940
@@ -18933,12 +18933,12 @@
     d737504bd226ef29.69239d20cb79b6e4.f5b817d4cd1febda.2a6961a0b1f03c30
     2ed57ffecc46f208
   after
-    0000000000000000.0000000000000000.fff0000000000000.01e7afb1c24f7743
+    e35f8c9a1da4eaf4.8c8a76abf062ea86.26f594a96670d015.f815bde3c7464da7
     e35f8c9a1da4eaf4.8c8a76abf062ea86.f4649f9d4b135f2d.ba1017daf33d6940
     984048e84af8a8d5.e91d0b71acbabcb9.26f594a96670d015.f815bde3c7464da7
     d737504bd226ef29.69239d20cb79b6e4.f5b817d4cd1febda.2a6961a0b1f03c30
     2ed57ffecc46f208
-VDIVPD_128(mem)
+VPERM2F128_0x12(mem)
   before
     df2893e735542a5b.fc919f2f51b9f99d.e769a6a669a99634.bbf7238a1daeeb28
     192d1a490727a154.639a3201623e02dc.41bba4eea35816d4.d5ffb437f2a80eac
@@ -18948,11 +18948,11 @@
   after
     df2893e735542a5b.fc919f2f51b9f99d.e769a6a669a99634.bbf7238a1daeeb28
     192d1a490727a154.639a3201623e02dc.41bba4eea35816d4.d5ffb437f2a80eac
-    0000000000000000.0000000000000000.9a413e4ae2b7ed81.59f5ec30b939a6e4
+    192d1a490727a154.639a3201623e02dc.e769a6a669a99634.bbf7238a1daeeb28
     977b6d24574a3bea.66e9101bac4b056d.f5b36d755962e8b6.769a5627980fa805
     b4c45f42a1939732
 
-VANDPD_256(reg)
+VPERM2F128_0x03(reg)
   before
     b6e8dd04a0b39844.945e32760eb1d6df.bbc6543b1ceb7618.08f12f8b0dd4b350
     d950cdd92efae7e8.89215af09e0da02b.c282cbf98fadd63d.666bd613cdf40eeb
@@ -18960,12 +18960,12 @@
     ed1fef6c6d2e5e95.cf7fbf0cbad2b075.55c843fcecc556ac.7241c02adf7066d2
     d836fc9169e3db77
   after
-    5140090928f0c0c8.00015a7002080029.c20242c0810c4209.6268d41284c404a2
+    c282cbf98fadd63d.666bd613cdf40eeb.7749292de9f5c0ca.54935f7e236a55f9
     d950cdd92efae7e8.89215af09e0da02b.c282cbf98fadd63d.666bd613cdf40eeb
     7749292de9f5c0ca.54935f7e236a55f9.d66a72c0a11c628b.eaecddfab4cfb5b2
     ed1fef6c6d2e5e95.cf7fbf0cbad2b075.55c843fcecc556ac.7241c02adf7066d2
     d836fc9169e3db77
-VANDPD_256(mem)
+VPERM2F128_0x03(mem)
   before
     fa970b1a6e35d1cc.971e1a025533fef6.d8b0f5867e546ecd.9ae93c190f33ee4c
     b2306bb10b7103fe.d192a65b3e90dc98.49f47ed98cf94b2a.00185883a4f26518
@@ -18975,11 +18975,11 @@
   after
     fa970b1a6e35d1cc.971e1a025533fef6.d8b0f5867e546ecd.9ae93c190f33ee4c
     b2306bb10b7103fe.d192a65b3e90dc98.49f47ed98cf94b2a.00185883a4f26518
-    b2100b100a3101cc.911202021410dc90.48b074800c504a08.0008180104326408
+    49f47ed98cf94b2a.00185883a4f26518.fa970b1a6e35d1cc.971e1a025533fef6
     58390cb97cd80fa7.6507d207807f4152.d7e075b6f4e150aa.a4d4eaef9594e3e3
     98f958c82990623a
 
-VANDPD_256(reg)
+VPERM2F128_0x03(reg)
   before
     1e5cd99fa00cb06d.fd414402871c5f76.77a26a3112293fc1.ac21dc18873bf124
     934a69de95960a27.aab1bd099a79ddd2.89e153cf155b6c22.59a38503d2eaa154
@@ -18987,12 +18987,12 @@
     b6f6a7496b02d2e2.87f95f0247b34ee0.1d7d0913db843f68.af9e8e2006751c88
     0fafe62b266960e4
   after
-    110a01d284900804.2811b008907941c2.8100024b04000020.19208402d2e80144
+    89e153cf155b6c22.59a38503d2eaa154.510e05f3a4b9ac14.3955f2bad1fd43e7
     934a69de95960a27.aab1bd099a79ddd2.89e153cf155b6c22.59a38503d2eaa154
     510e05f3a4b9ac14.3955f2bad1fd43e7.f7108a4b24a00220.bb34ec62f3f91b67
     b6f6a7496b02d2e2.87f95f0247b34ee0.1d7d0913db843f68.af9e8e2006751c88
     0fafe62b266960e4
-VANDPD_256(mem)
+VPERM2F128_0x03(mem)
   before
     b831706e70e1a2a7.1c4d4d4c83fcb73a.716981cb18a8b9ea.5773ce92d7945ca6
     86f1a8d6ffe99ffc.e05ef2688a3398cb.d170d20361e64230.013dd434b35b9885
@@ -19002,11 +19002,11 @@
   after
     b831706e70e1a2a7.1c4d4d4c83fcb73a.716981cb18a8b9ea.5773ce92d7945ca6
     86f1a8d6ffe99ffc.e05ef2688a3398cb.d170d20361e64230.013dd434b35b9885
-    8031204670e182a4.004c40488230900a.5160800300a00020.0131c41093101884
+    d170d20361e64230.013dd434b35b9885.b831706e70e1a2a7.1c4d4d4c83fcb73a
     015a13c05ddcba0e.f3e12a9bd48a3c43.6677f66cc9739923.148193917d4058d8
     36924524a37555a4
 
-VANDPD_256(reg)
+VPERM2F128_0x03(reg)
   before
     38a7288b19915fc2.679b3e1c65dd4f23.f9ebb58a4ec17982.530ec17620d9df27
     750e38307c21b3dd.614b074b229f8f7b.cde02f432766a0a9.276dab9e5fb93218
@@ -19014,12 +19014,12 @@
     15fed0e876cb29bc.842364d62c9400a2.50bae0bf6428a35d.f4b2d1f80219ef6f
     a5300403a0b0d02e
   after
-    4100300064208181.4000020b200d0641.cc0004002204a021.264d229001200200
+    cde02f432766a0a9.276dab9e5fb93218.4b11718067b08da1.cc34ea3bb02d3641
     750e38307c21b3dd.614b074b229f8f7b.cde02f432766a0a9.276dab9e5fb93218
     4b11718067b08da1.cc34ea3bb02d3641.cc0b9430fa04f063.be5f32d0a1204e21
     15fed0e876cb29bc.842364d62c9400a2.50bae0bf6428a35d.f4b2d1f80219ef6f
     a5300403a0b0d02e
-VANDPD_256(mem)
+VPERM2F128_0x03(mem)
   before
     ada747db94f2ae89.2e1f4fd346fdc2d8.65e4f00ab1dfa8c9.b637105a015cf643
     e8e1176dfcea45ad.f4c1ecad73d295a1.4b420ac25c1aebe3.5acf1e6f6b2e24c0
@@ -19029,11 +19029,11 @@
   after
     ada747db94f2ae89.2e1f4fd346fdc2d8.65e4f00ab1dfa8c9.b637105a015cf643
     e8e1176dfcea45ad.f4c1ecad73d295a1.4b420ac25c1aebe3.5acf1e6f6b2e24c0
-    a8a1074994e20489.24014c8142d08080.41400002101aa8c1.1207104a010c2440
+    4b420ac25c1aebe3.5acf1e6f6b2e24c0.ada747db94f2ae89.2e1f4fd346fdc2d8
     67d04b70972d8dfe.f3b76edd5197d8ed.9509d86e9292319f.cc80cab41cdb0531
     52305ebc9bcd2f7d
 
-VPMOVSXBW_128(reg)
+VPERM2F128_0x85(reg)
   before
     862cc2ed578c2411.631ea7b90190b684.e4a44a0d3b9ec0c7.b209853a55e6ac99
     c4bef1b3eea52198.0260806c4fd98782.f24134dbf279d2ff.44d8b03bae5bb235
@@ -19041,12 +19041,12 @@
     cdd7a0af1c132331.98ee95c0054f1598.d1bf1f0434d86338.370d70878fd54d06
     4f0dfeac51f35b92
   after
-    862cc2ed578c2411.631ea7b90190b684.e4a44a0d3b9ec0c7.b209853a55e6ac99
-    0000000000000000.0000000000000000.0027003fffd5005b.ffb8fffcfffeffa0
+    0000000000000000.0000000000000000.c4bef1b3eea52198.0260806c4fd98782
+    c4bef1b3eea52198.0260806c4fd98782.f24134dbf279d2ff.44d8b03bae5bb235
     6833e77afca362bf.1f6150759c15be25.77dc27b411b34a41.273fd55bb8fcfea0
     cdd7a0af1c132331.98ee95c0054f1598.d1bf1f0434d86338.370d70878fd54d06
     4f0dfeac51f35b92
-VPMOVSXBW_128(mem)
+VPERM2F128_0x85(mem)
   before
     4d0afab51761e470.51f619bceb7f9f9b.48d3ca39a5934908.5a371938f8755a90
     0cd1e08dff2ba4ce.4fdc4d0f047614a8.0adc6ccc99ee15a1.6f8f10baf8146bf6
@@ -19055,12 +19055,12 @@
     8fd7bb547c818f33
   after
     4d0afab51761e470.51f619bceb7f9f9b.48d3ca39a5934908.5a371938f8755a90
-    0000000000000000.0000000000000000.005a003700190038.fff80075005aff90
-    672f2c22255e56d6.23d438130381bb06.bcd5f565fc6b378e.6c1500f8d144d116
+    0cd1e08dff2ba4ce.4fdc4d0f047614a8.0adc6ccc99ee15a1.6f8f10baf8146bf6
+    0000000000000000.0000000000000000.0cd1e08dff2ba4ce.4fdc4d0f047614a8
     3cee5a5fa305b7b4.292cd633852ed35e.3989e3f1eb1668fb.ae13e55d1e8fc99c
     8fd7bb547c818f33
 
-VPMOVSXBW_128(reg)
+VPERM2F128_0x85(reg)
   before
     6cab7e4b86a65f87.65dae730982c8295.bc2e23dd2608965f.5cc5b15a81fc6716
     a1dc2badd98b7446.c0c14e811ee074a5.3a271c7c809c41b3.0356db8edb28ef09
@@ -19068,12 +19068,12 @@
     83843063c7c260af.78ac9a544e1dbd00.632eff49d61f3e05.49a2340349838828
     a0f55b1d95ca11ad
   after
-    6cab7e4b86a65f87.65dae730982c8295.bc2e23dd2608965f.5cc5b15a81fc6716
-    0000000000000000.0000000000000000.00080006ffde0078.0014ffa6ffbb0000
+    0000000000000000.0000000000000000.a1dc2badd98b7446.c0c14e811ee074a5
+    a1dc2badd98b7446.c0c14e811ee074a5.3a271c7c809c41b3.0356db8edb28ef09
     8ab6bde710bb0b19.276d0b3e512c490f.fe63bc7c32751006.0806de7814a6bb00
     83843063c7c260af.78ac9a544e1dbd00.632eff49d61f3e05.49a2340349838828
     a0f55b1d95ca11ad
-VPMOVSXBW_128(mem)
+VPERM2F128_0x85(mem)
   before
     ebcdceb1148813ba.e994818e9b2dafb2.8d4878ad30bd8ca4.c7d3e1500826085c
     04f40aabe3c84b7c.1630abd4288733ce.440e1f37141b7126.84a05ffb6517aab6
@@ -19082,12 +19082,12 @@
     71e6531492daf693
   after
     ebcdceb1148813ba.e994818e9b2dafb2.8d4878ad30bd8ca4.c7d3e1500826085c
-    0000000000000000.0000000000000000.ffc7ffd3ffe10050.000800260008005c
-    c83889f71e96721e.67a5a9a2095c29b1.77ca0ddc154029b2.f8df74b7887d60c0
+    04f40aabe3c84b7c.1630abd4288733ce.440e1f37141b7126.84a05ffb6517aab6
+    0000000000000000.0000000000000000.04f40aabe3c84b7c.1630abd4288733ce
     1463c981e0fe47cd.383f7962da39cc04.0448bd8a503a6f76.7ddd1cf10ee56526
     71e6531492daf693
 
-VPMOVSXBW_128(reg)
+VPERM2F128_0x85(reg)
   before
     2e46158bb0e84fb3.c2424536450d84b5.e44a178238a95a76.c553ac2ce014009b
     12485fc4059cab34.afa179006acee601.c9127d6dbe390db1.97b854ade2db9850
@@ -19095,12 +19095,12 @@
     ba667829c3235f03.b70efa8762980878.ab089654b5e6d433.dfc1c401a95dcd15
     0cfc83aca730e17d
   after
-    2e46158bb0e84fb3.c2424536450d84b5.e44a178238a95a76.c553ac2ce014009b
-    0000000000000000.0000000000000000.005600440033fffb.0071ff99fff3ffbf
+    0000000000000000.0000000000000000.12485fc4059cab34.afa179006acee601
+    12485fc4059cab34.afa179006acee601.c9127d6dbe390db1.97b854ade2db9850
     773a2c2a2d8147bf.b84be2cd6a4e28de.42e3a98f09742261.564433fb7199f3bf
     ba667829c3235f03.b70efa8762980878.ab089654b5e6d433.dfc1c401a95dcd15
     0cfc83aca730e17d
-VPMOVSXBW_128(mem)
+VPERM2F128_0x85(mem)
   before
     bac0ede68720ec24.38193f2d640f2faa.89b43f1c6db840fa.60ce40285c1b60d3
     c5db7c9c6438a935.4b9f7da2abd0f261.0a0a2c77a8ba8d90.bd81a4779da002ed
@@ -19109,12 +19109,12 @@
     5b20fd7f0883c3ca
   after
     bac0ede68720ec24.38193f2d640f2faa.89b43f1c6db840fa.60ce40285c1b60d3
-    0000000000000000.0000000000000000.0060ffce00400028.005c001b0060ffd3
-    0918aebb5a85d6dd.50442ff534f2e5d3.16dc3d842eabaa67.1d6dbcad1100f62b
+    c5db7c9c6438a935.4b9f7da2abd0f261.0a0a2c77a8ba8d90.bd81a4779da002ed
+    0000000000000000.0000000000000000.c5db7c9c6438a935.4b9f7da2abd0f261
     6242ff2d86122d48.a35450909c0244ad.89f6ef2f1c9654ab.dede863656c8773c
     5b20fd7f0883c3ca
 
-VPSUBUSW_128(reg)
+VPERM2F128_0x5A(reg)
   before
     ef7e1df2c2bd1382.ac26e9e004eb6ba1.a01bdce07e8b4a9a.3f24bd648d884788
     f846e3fd2102a60f.c390e9beee1d4b15.a3e4d05277193547.1431230f9e8c3f29
@@ -19122,12 +19122,12 @@
     d53f4d873be0805b.c8251db07db9e4fc.2cafdc481c76a490.8b1ca7770dfb2c68
     e591be0da47e9a5f
   after
-    0000000000000000.0000000000000000.773500005aa30000.00000000909112c1
+    f846e3fd2102a60f.c390e9beee1d4b15.0000000000000000.0000000000000000
     f846e3fd2102a60f.c390e9beee1d4b15.a3e4d05277193547.1431230f9e8c3f29
     d1c24a0bc0dfb61e.834c7cb563b28acf.09fc265123393f60.e4eb9d1c6aaef7ba
     d53f4d873be0805b.c8251db07db9e4fc.2cafdc481c76a490.8b1ca7770dfb2c68
     e591be0da47e9a5f
-VPSUBUSW_128(mem)
+VPERM2F128_0x5A(mem)
   before
     ce165dc84b43fdcb.6209ebdf2f8f4071.6ee9489b583b15c8.6949eda5015da284
     227700961d5710d7.d26b1d7e387a310c.51627a621146d85e.1c1655d36b7873e7
@@ -19137,11 +19137,11 @@
   after
     ce165dc84b43fdcb.6209ebdf2f8f4071.6ee9489b583b15c8.6949eda5015da284
     227700961d5710d7.d26b1d7e387a310c.51627a621146d85e.1c1655d36b7873e7
-    0000000000000000.0000000000000000.000031c70000c296.000000006a1b0000
+    227700961d5710d7.d26b1d7e387a310c.0000000000000000.0000000000000000
     7bfc4218b3993880.cf2b3142f6329985.3ea7df358a25079a.54781c52448080ad
     91a5717cea843467
 
-VPSUBUSW_128(reg)
+VPERM2F128_0x5A(reg)
   before
     b3360f2687edac41.37b8daa3afe0c676.14200b3ee41788b9.ff090b188411eb98
     1875efbdb64724e6.cf8166f147a5f4bc.acde6b3156679823.6e522e87cab65110
@@ -19149,12 +19149,12 @@
     182f69633c000243.00644a84b9da22eb.49e5a9ad397a0e48.c3c545bbb0579621
     60873256876dec12
   after
-    0000000000000000.0000000000000000.62f900001ced89db.000000001a5f0000
+    1875efbdb64724e6.cf8166f147a5f4bc.0000000000000000.0000000000000000
     1875efbdb64724e6.cf8166f147a5f4bc.acde6b3156679823.6e522e87cab65110
     1bae0eae141fd703.1e2162ee97f47f7f.f4b14b88e9af066f.664dc26f7a1ef62f
     182f69633c000243.00644a84b9da22eb.49e5a9ad397a0e48.c3c545bbb0579621
     60873256876dec12
-VPSUBUSW_128(mem)
+VPERM2F128_0x5A(mem)
   before
     1b60052e1b6bb52c.6b43fb4aca77e154.50189ba0cc629b2b.05c6800ee054eb5b
     ce1a3b2e895dad9e.6f35c0ce5b0fb0df.ec08d02ee998a36c.859fcc157ccadb53
@@ -19164,11 +19164,11 @@
   after
     1b60052e1b6bb52c.6b43fb4aca77e154.50189ba0cc629b2b.05c6800ee054eb5b
     ce1a3b2e895dad9e.6f35c0ce5b0fb0df.ec08d02ee998a36c.859fcc157ccadb53
-    0000000000000000.0000000000000000.9bf0348e1d360841.7fd94c0700000000
+    ce1a3b2e895dad9e.6f35c0ce5b0fb0df.0000000000000000.0000000000000000
     9163bc56614e1935.ffe6d55df4d30c1a.74cad651b740589f.416db4ca02b7dea5
     36f9474f24476a56
 
-VPSUBUSW_128(reg)
+VPERM2F128_0x5A(reg)
   before
     5ead402baaa2f99d.578a0056046505b2.413d1b4035161220.1835a0be9fca7be9
     16d79bcb3155c425.86c4962ff0a01036.a6a38670e8acf752.780c3d4d03311fe4
@@ -19176,12 +19176,12 @@
     a6b96302afef05ab.909caa1814b47101.45cbb36715fa51e9.d82de581acccd89c
     9010e8fe2a1767b1
   after
-    0000000000000000.0000000000000000.60d80000d2b2a569.0000000000000000
+    16d79bcb3155c425.86c4962ff0a01036.0000000000000000.0000000000000000
     16d79bcb3155c425.86c4962ff0a01036.a6a38670e8acf752.780c3d4d03311fe4
     bac2529954ea0a9b.fbdbfbcb410cf5ec.89630f59a91ef85c.6e1b2beafe83ffbc
     a6b96302afef05ab.909caa1814b47101.45cbb36715fa51e9.d82de581acccd89c
     9010e8fe2a1767b1
-VPSUBUSW_128(mem)
+VPERM2F128_0x5A(mem)
   before
     748eae4d94706527.3609c973dff0f200.23d31f0084a540a1.38256f07c7cb3ea6
     5e74b55a05e39129.c6fe805680780d47.8e4cd671aeea1ef7.bcbe3ea35b1efa3f
@@ -19191,11 +19191,11 @@
   after
     748eae4d94706527.3609c973dff0f200.23d31f0084a540a1.38256f07c7cb3ea6
     5e74b55a05e39129.c6fe805680780d47.8e4cd671aeea1ef7.bcbe3ea35b1efa3f
-    0000000000000000.0000000000000000.6a79b7712a450000.849900000000bb99
+    5e74b55a05e39129.c6fe805680780d47.0000000000000000.0000000000000000
     b7a8735f6d495e83.5607d127824dbb59.6032fb9b9da0f578.ebdd06849c77d2b2
     4dfbf69f809665e6
 
-VPSUBSW_128(reg)
+VPERMILPD_256_0x0(reg)
   before
     b287ea68b766b8a4.df8e222e9c547732.0eb264ec1cb3c77d.7e39602c9b2a67fa
     74cfdd4adc73079b.7d0b026c43a9ae1f.353338d496d0f042.e5b1f8f5c338d7e2
@@ -19203,12 +19203,12 @@
     83beb10a627688df.8efe42e16761615d.45e294bd9c608d61.fe26afdfff12a497
     69bcc6d84bf579bc
   after
-    0000000000000000.0000000000000000.ef517ffffa7062e1.e78b4916c426334b
-    74cfdd4adc73079b.7d0b026c43a9ae1f.353338d496d0f042.e5b1f8f5c338d7e2
+    b287ea68b766b8a4.df8e222e9c547732.0eb264ec1cb3c77d.7e39602c9b2a67fa
+    6eed8e047d54bd74.6eed8e047d54bd74.71673fe230d7025e.71673fe230d7025e
     f01dccb18c4a8e75.6eed8e047d54bd74.29d4494b8d317455.71673fe230d7025e
     83beb10a627688df.8efe42e16761615d.45e294bd9c608d61.fe26afdfff12a497
     69bcc6d84bf579bc
-VPSUBSW_128(mem)
+VPERMILPD_256_0x0(mem)
   before
     8cf4ffba308c3cf7.87fe8abffa833284.b90b9af11cdd5508.e5a9139660ec7713
     4499d66fcbe4aa74.5928523df1fec811.cbe0131fb9d4569f.6475c442745e7016
@@ -19217,12 +19217,12 @@
     bbedd672ab9a03c3
   after
     8cf4ffba308c3cf7.87fe8abffa833284.b90b9af11cdd5508.e5a9139660ec7713
-    4499d66fcbe4aa74.5928523df1fec811.cbe0131fb9d4569f.6475c442745e7016
-    0000000000000000.0000000000000000.12d5782e9cf70197.7eccb0ac1372f903
+    87fe8abffa833284.87fe8abffa833284.e5a9139660ec7713.b90b9af11cdd5508
+    6d78c7e537097f61.558a05f1e2728531.a04828575950204e.2091a22e7544b218
     e35d4f07910577e7.d76e9f456a6ba691.14115485195f6f42.744ba9c4fe297ac2
     bbedd672ab9a03c3
 
-VPSUBSW_128(reg)
+VPERMILPD_256_0x0(reg)
   before
     53c424a219228ac5.8214e9c0f4e64d35.3b221da7247667dd.03051696140cfea6
     971c8fc2e44d4b74.266811fe7db7be75.ddf07a82ad1e04c0.49f2e77466648aa8
@@ -19230,12 +19230,12 @@
     927fac7ffebd6b8c.ec1bfbb66f5b607c.4c0cc1529a76c0fd.4ae2aa4b82428930
     bd7d951c83e1730f
   after
-    0000000000000000.0000000000000000.91e47fff12a843c3.ff103d297fff0178
-    971c8fc2e44d4b74.266811fe7db7be75.ddf07a82ad1e04c0.49f2e77466648aa8
+    53c424a219228ac5.8214e9c0f4e64d35.3b221da7247667dd.03051696140cfea6
+    ab2743ac488585d3.ab2743ac488585d3.c2a2450c2c72cf71.c2a2450c2c72cf71
     e241133da7a8827d.ab2743ac488585d3.1a25b242a1f0b8e7.c2a2450c2c72cf71
     927fac7ffebd6b8c.ec1bfbb66f5b607c.4c0cc1529a76c0fd.4ae2aa4b82428930
     bd7d951c83e1730f
-VPSUBSW_128(mem)
+VPERMILPD_256_0x0(mem)
   before
     f7417f6a4b5a4a3a.012257f4861b414c.c712b6081045099c.d0f3a321363e58af
     d4f9e523f7b9c9de.8c750e08db4b416a.17d6ef8f47503d5f.0124551811d4bca9
@@ -19244,12 +19244,12 @@
     43721e2c30dc05fb
   after
     f7417f6a4b5a4a3a.012257f4861b414c.c712b6081045099c.d0f3a321363e58af
-    d4f9e523f7b9c9de.8c750e08db4b416a.17d6ef8f47503d5f.0124551811d4bca9
-    0000000000000000.0000000000000000.50c43987370b33c3.30317fffdb968000
+    012257f4861b414c.012257f4861b414c.d0f3a321363e58af.c712b6081045099c
+    2f704432a30bae27.90c5cf2898dba691.b83322352f87b7f0.3dedd2a4c6c32796
     e6731783695bb341.675e96be5957ad6e.86f7cbe8e5f6347b.df981631f297d623
     43721e2c30dc05fb
 
-VPSUBSW_128(reg)
+VPERMILPD_256_0x0(reg)
   before
     c5c7e4ff1c1fefcb.d4ceda0268b59556.6f8c5d37bb4993ad.5ced679284aa702d
     c1e2661854ebd13e.d54d099bb9260f95.029b2200593f91f9.18e0702128ae2732
@@ -19257,12 +19257,12 @@
     969e8bc811506cc0.7fe69dccc77abe3c.3c8b932ebb65cc6b.aef1bf9af2d7f5e3
     41a6fb5d4f1483e8
   after
-    0000000000000000.0000000000000000.c6107fff7fffc58e.69ef7fff35d7314f
-    c1e2661854ebd13e.d54d099bb9260f95.029b2200593f91f9.18e0702128ae2732
+    c5c7e4ff1c1fefcb.d4ceda0268b59556.6f8c5d37bb4993ad.5ced679284aa702d
+    c4bc213b7bb9de28.c4bc213b7bb9de28.959d647fee0e15b5.959d647fee0e15b5
     92119fe171cde702.c4bc213b7bb9de28.7dd6e084d0c5e6ff.959d647fee0e15b5
     969e8bc811506cc0.7fe69dccc77abe3c.3c8b932ebb65cc6b.aef1bf9af2d7f5e3
     41a6fb5d4f1483e8
-VPSUBSW_128(mem)
+VPERMILPD_256_0x0(mem)
   before
     298896b421d27def.28d62738cf009e27.e098f93bbc766bfc.9c04376cb7ad80e8
     41650a8b851b9d24.a4056d9d4869b7e0.c59fb17573b8a195.f78ec9a95f293d22
@@ -19271,12 +19271,12 @@
     888ae5927a4709fc
   after
     298896b421d27def.28d62738cf009e27.e098f93bbc766bfc.9c04376cb7ad80e8
-    41650a8b851b9d24.a4056d9d4869b7e0.c59fb17573b8a195.f78ec9a95f293d22
-    0000000000000000.0000000000000000.e507b83a7fff8000.5b8a923d7fff7fff
+    28d62738cf009e27.28d62738cf009e27.9c04376cb7ad80e8.e098f93bbc766bfc
+    6707d5cf96fea0b5.65775b631818f39a.08c541650a4d1b33.aa7544514f6341c7
     753c736a718442cc.c978ecf6d99990ff.87d726f69d3f9601.1105a3d024e9c680
     888ae5927a4709fc
 
-VPCMPEQW_128(reg)
+VPERMILPD_256_0xF(reg)
   before
     6b4f0304ec0845e5.48ce5e4932bb3e95.2a541dc22a76c8bc.1ca0db16479dcd2b
     16a2fb9017b8b7e7.bd8a1459f3ae523d.e656e834a43dd87c.a5eedcb025707ddf
@@ -19284,12 +19284,12 @@
     341d66aa05162de9.f9b0ceb8ebf9acd9.db0041b689b76fb7.ff45b302eaaa388f
     88e681930a28bbe4
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
-    16a2fb9017b8b7e7.bd8a1459f3ae523d.e656e834a43dd87c.a5eedcb025707ddf
+    6b4f0304ec0845e5.48ce5e4932bb3e95.2a541dc22a76c8bc.1ca0db16479dcd2b
+    e5cdc8a496e39bb0.e5cdc8a496e39bb0.57cb4bb6e679fbec.57cb4bb6e679fbec
     e5cdc8a496e39bb0.ae3c1084d36938f0.57cb4bb6e679fbec.fc8ba5b052c66246
     341d66aa05162de9.f9b0ceb8ebf9acd9.db0041b689b76fb7.ff45b302eaaa388f
     88e681930a28bbe4
-VPCMPEQW_128(mem)
+VPERMILPD_256_0xF(mem)
   before
     743b8b4dcd4da672.5fded11001dca841.78b1cae059696b25.cc3fc69e2c826e8b
     9f104d1d5024b664.c25c064125c24962.080c81e839c631ff.88d4d6dc68663411
@@ -19298,12 +19298,12 @@
     0e9723ccd5238f93
   after
     743b8b4dcd4da672.5fded11001dca841.78b1cae059696b25.cc3fc69e2c826e8b
-    9f104d1d5024b664.c25c064125c24962.080c81e839c631ff.88d4d6dc68663411
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    743b8b4dcd4da672.743b8b4dcd4da672.78b1cae059696b25.cc3fc69e2c826e8b
+    e63043f0afbaa6e7.b9e2ffa80e524cf8.858e6ebca61bba94.690d6edbdbf0fff7
     2369eab0041a3426.a0bebab3571aedb0.cc010d48bd74c210.cd34890721ab09e9
     0e9723ccd5238f93
 
-VPCMPEQW_128(reg)
+VPERMILPD_256_0xF(reg)
   before
     8980389693e5cca0.3385bd4b6e501a4e.d23a32cd9da66736.b732da7899dd049e
     9a3cc5d1f87cfebc.f25138ac0669148b.ada364637b81f735.23ec523856633d6b
@@ -19311,12 +19311,12 @@
     ef5d334b265a2cd5.ed291770367138f2.cb6ce2ae71554851.ee302f19e6f48370
     05508d11f0170801
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
-    9a3cc5d1f87cfebc.f25138ac0669148b.ada364637b81f735.23ec523856633d6b
+    8980389693e5cca0.3385bd4b6e501a4e.d23a32cd9da66736.b732da7899dd049e
+    9e17c4e9a0745f95.9e17c4e9a0745f95.8c454adf8e37d95a.8c454adf8e37d95a
     9e17c4e9a0745f95.3c99d7bfeb6fe008.8c454adf8e37d95a.ecfdef74111228a2
     ef5d334b265a2cd5.ed291770367138f2.cb6ce2ae71554851.ee302f19e6f48370
     05508d11f0170801
-VPCMPEQW_128(mem)
+VPERMILPD_256_0xF(mem)
   before
     0d2a864a4b867480.ea590e6126b9a028.e1cd72ab0578d974.c563273cc16581c5
     e28a94af144e821a.eb594f993d1df83b.f451665c74927fbb.d87816f619f6c063
@@ -19325,12 +19325,12 @@
     385ab05d6c1af7ed
   after
     0d2a864a4b867480.ea590e6126b9a028.e1cd72ab0578d974.c563273cc16581c5
-    e28a94af144e821a.eb594f993d1df83b.f451665c74927fbb.d87816f619f6c063
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0d2a864a4b867480.0d2a864a4b867480.e1cd72ab0578d974.c563273cc16581c5
+    603c352b667aeffa.4ea7f35d061370ba.02806f6f9ecbe5f3.5ff5a947169140d6
     630be4ac5e16774d.6f90f71b1e264450.e72707d1a02dc847.b527de9a53c43fcb
     385ab05d6c1af7ed
 
-VPCMPEQW_128(reg)
+VPERMILPD_256_0xF(reg)
   before
     42da1bfbfe20a4ea.c7c51d1d172fd63f.aa60563e20e2afaa.7f12ac6c95c6e4e4
     31f31be0a561846b.68345d6aaed0c7fb.5b630d32a9d4ee73.a60dd82e99a1f4f5
@@ -19338,12 +19338,12 @@
     2a1fcc2f9fc5c8af.d165de49e4db5283.8f316f3dbe88d705.1163bbd3414fe426
     0d55688f1b393a9d
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
-    31f31be0a561846b.68345d6aaed0c7fb.5b630d32a9d4ee73.a60dd82e99a1f4f5
+    42da1bfbfe20a4ea.c7c51d1d172fd63f.aa60563e20e2afaa.7f12ac6c95c6e4e4
+    5ff0ad78fc69d11f.5ff0ad78fc69d11f.dee4166354873d58.dee4166354873d58
     5ff0ad78fc69d11f.22261e803e0507ae.dee4166354873d58.38e40901c9cbb6a7
     2a1fcc2f9fc5c8af.d165de49e4db5283.8f316f3dbe88d705.1163bbd3414fe426
     0d55688f1b393a9d
-VPCMPEQW_128(mem)
+VPERMILPD_256_0xF(mem)
   before
     07878e2176967638.ecca74712b00a4ca.50be18b2bb5d64a7.ca94132c8262fa25
     ddc6a8756c715225.023ea1ab3ba6a31a.7dfc48a8e097f846.eb5afe9c3da1e064
@@ -19352,12 +19352,12 @@
     4af6432c4b368099
   after
     07878e2176967638.ecca74712b00a4ca.50be18b2bb5d64a7.ca94132c8262fa25
-    ddc6a8756c715225.023ea1ab3ba6a31a.7dfc48a8e097f846.eb5afe9c3da1e064
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    07878e2176967638.07878e2176967638.50be18b2bb5d64a7.ca94132c8262fa25
+    6adc327719d68b8e.c9c74f476c44ff4c.33edeb156e96cb8b.4ecf2cfa8ad1c570
     8a95a8139ad2dc9f.9bb17bb35965f40b.4e5b7ce7816599a3.4f3f9ab0057fe7f3
     4af6432c4b368099
 
-VPADDB_128(reg)
+VPERMILPD_256_0xA(reg)
   before
     9a3f23d9f883cd0f.18bf87350a700285.d54720599f95c004.a914770936101db9
     9d683622a7f10901.f2254aca86bdb96c.d4d73aa7d9619de2.22e25866a9a414fa
@@ -19365,12 +19365,12 @@
     2885e63d7c604107.f6d36cf90f90caeb.8c10bee89bfa7d00.daefbd8636b44bab
     d2c7392089490274
   after
-    0000000000000000.0000000000000000.c682ffaf7db56534.b674f3529ed04e8b
-    9d683622a7f10901.f2254aca86bdb96c.d4d73aa7d9619de2.22e25866a9a414fa
+    9a3f23d9f883cd0f.18bf87350a700285.d54720599f95c004.a914770936101db9
+    aebb7875f40c711b.f2926dbc29c3bd7f.f2abc508a454c852.94929becf52c3a91
     aebb7875f40c711b.f2926dbc29c3bd7f.f2abc508a454c852.94929becf52c3a91
     2885e63d7c604107.f6d36cf90f90caeb.8c10bee89bfa7d00.daefbd8636b44bab
     d2c7392089490274
-VPADDB_128(mem)
+VPERMILPD_256_0xA(mem)
   before
     56e48ba709f61c17.69127be6db7ab574.d9b4c36b56309bdc.fe5220b35be0f797
     44142f05d3c855c1.ccad33dcabe5080c.7601ef0017aeed7d.a4bde7d57f9173c4
@@ -19379,12 +19379,12 @@
     66ea737e5ee04a84
   after
     56e48ba709f61c17.69127be6db7ab574.d9b4c36b56309bdc.fe5220b35be0f797
-    44142f05d3c855c1.ccad33dcabe5080c.7601ef0017aeed7d.a4bde7d57f9173c4
-    0000000000000000.0000000000000000.4fb5b26b6dde8859.a20f0788da716a5b
+    56e48ba709f61c17.69127be6db7ab574.d9b4c36b56309bdc.d9b4c36b56309bdc
+    7621a22702c9689e.aca40a8c8b2e787c.aa866ba370167bfa.da9d0fbaa3992d32
     c9d85efab30812d9.6741fd6014e03e6f.520fb3407d740281.fc3d94cf6485608e
     66ea737e5ee04a84
 
-VPADDB_128(reg)
+VPERMILPD_256_0xA(reg)
   before
     74f1a7342c3724bf.1a05e168018e0f9f.57d206c5e5879992.486743c359d53e3c
     829c2c5e6a142dec.4374a65f09691b1b.daa1232897b0c390.6a5b98182044eb57
@@ -19392,12 +19392,12 @@
     0e101abaa996b8ca.9147e795b54b4ee7.052c879414b577d0.9d477ee9e17d8760
     68d7073c1360eea5
   after
-    0000000000000000.0000000000000000.249c731c6096bca7.fc12c5430f12b056
-    829c2c5e6a142dec.4374a65f09691b1b.daa1232897b0c390.6a5b98182044eb57
+    74f1a7342c3724bf.1a05e168018e0f9f.57d206c5e5879992.486743c359d53e3c
+    ec38fe67b5059fb6.21f02acae6a4f17a.4afb50f4c9e6f917.92b72d2befcec5ff
     ec38fe67b5059fb6.21f02acae6a4f17a.4afb50f4c9e6f917.92b72d2befcec5ff
     0e101abaa996b8ca.9147e795b54b4ee7.052c879414b577d0.9d477ee9e17d8760
     68d7073c1360eea5
-VPADDB_128(mem)
+VPERMILPD_256_0xA(mem)
   before
     cd334411a180b5fb.44727ac5e152b1d4.6d435bac916bee8f.657fc67616aa7869
     a926b255a5eb9a8d.eaa81cf3f9c5c97f.92b101fb96108c9e.c74207056b503a8e
@@ -19406,12 +19406,12 @@
     921ab8f86fe253fa
   after
     cd334411a180b5fb.44727ac5e152b1d4.6d435bac916bee8f.657fc67616aa7869
-    a926b255a5eb9a8d.eaa81cf3f9c5c97f.92b101fb96108c9e.c74207056b503a8e
-    0000000000000000.0000000000000000.fff45ca7277b7a2d.2cc1cd7b81fab2f7
+    cd334411a180b5fb.44727ac5e152b1d4.6d435bac916bee8f.6d435bac916bee8f
+    d87eccf33eac5788.5c00fcb08e7b3a78.dc5d556ee144e53f.88bf49adae33f7eb
     36050ed786d0a818.f6c414683b01416a.2813d4f18e15b59f.024385da7be0eb2b
     921ab8f86fe253fa
 
-VPADDB_128(reg)
+VPERMILPD_256_0xA(reg)
   before
     9490df7426c56b06.9f88f4ec99624b68.134162889de21a02.509ef970b88eb8e9
     65f1f5b83b166ff9.efd3fb20936efaa5.11c2e07a4fab00eb.31cc40d87bbca94a
@@ -19419,12 +19419,12 @@
     dfa3df4cf02f2a45.b5f05893af256f94.1c0562881522e663.8e3c240f3f644800
     c217bab777f66ead
   after
-    0000000000000000.0000000000000000.5c576c253c9230be.d83365eb6f66ee38
-    65f1f5b83b166ff9.efd3fb20936efaa5.11c2e07a4fab00eb.31cc40d87bbca94a
+    9490df7426c56b06.9f88f4ec99624b68.134162889de21a02.509ef970b88eb8e9
+    5f88f6314a609b7f.03b19d5e920072fa.4b958cabede730d3.a7672513f4aa45ee
     5f88f6314a609b7f.03b19d5e920072fa.4b958cabede730d3.a7672513f4aa45ee
     dfa3df4cf02f2a45.b5f05893af256f94.1c0562881522e663.8e3c240f3f644800
     c217bab777f66ead
-VPADDB_128(mem)
+VPERMILPD_256_0xA(mem)
   before
     1fc461f7b86d7220.418caa74c81059f7.e25aa7a908e9ac9f.e25d5c7b60e95e4a
     810f97ba1fd51186.e19055146f8e6340.65bd078db956e646.f8ea78f26cc6d331
@@ -19433,12 +19433,12 @@
     b0c76aa12b647dab
   after
     1fc461f7b86d7220.418caa74c81059f7.e25aa7a908e9ac9f.e25d5c7b60e95e4a
-    810f97ba1fd51186.e19055146f8e6340.65bd078db956e646.f8ea78f26cc6d331
-    0000000000000000.0000000000000000.4717ae36c13f92e5.da47d46dccaf317b
+    1fc461f7b86d7220.418caa74c81059f7.e25aa7a908e9ac9f.e25aa7a908e9ac9f
+    c4c3d8eec738060b.1bfbdb9a803586cd.1ce3f22cdd7ad9b6.b9f8b158d54882c7
     c4ad9e7ecda40fda.4b1938719892fc49.e299e6709061401a.83d3031936f8a7b6
     b0c76aa12b647dab
 
-VMOVAPS_EtoG_256(reg)
+VPERMILPD_256_0x5(reg)
   before
     9e1fe35c51184151.5c9a67574c25e620.cd35690552300261.93ab5e47ef15d99f
     a72869b6449e2f55.6a54ad6360c54808.fd9d68c24b9cd3c0.0be4d79c16a45e71
@@ -19447,11 +19447,11 @@
     b47819c64ee7d169
   after
     9e1fe35c51184151.5c9a67574c25e620.cd35690552300261.93ab5e47ef15d99f
-    282ff81b9e848362.c9a8ef8f2792f0bf.379b33151e60ac14.2612cb5a201a8bbb
+    c9a8ef8f2792f0bf.282ff81b9e848362.2612cb5a201a8bbb.379b33151e60ac14
     282ff81b9e848362.c9a8ef8f2792f0bf.379b33151e60ac14.2612cb5a201a8bbb
     7e7e8cf8fe557825.5561a6c8ba989b70.d77cc568680bc906.c0ffb86f29811eaa
     b47819c64ee7d169
-VMOVAPS_EtoG_256(mem)
+VPERMILPD_256_0x5(mem)
   before
     e0496a4baa586125.036221b7fe9e4b4a.ea4d4ff837e10549.398c1b28c4266645
     1f3e27eb5ade8909.1426b4c63aea387c.6336670dba7bea73.b9172fc2ce3fbe7b
@@ -19460,12 +19460,12 @@
     8491c0dd1df186a2
   after
     e0496a4baa586125.036221b7fe9e4b4a.ea4d4ff837e10549.398c1b28c4266645
-    1f3e27eb5ade8909.1426b4c63aea387c.6336670dba7bea73.b9172fc2ce3fbe7b
+    036221b7fe9e4b4a.e0496a4baa586125.398c1b28c4266645.398c1b28c4266645
     4c23cd9079870643.0e18408f4fc57a68.9eea69f25e72061d.b269ffa023e10e54
-    e0496a4baa586125.036221b7fe9e4b4a.ea4d4ff837e10549.398c1b28c4266645
+    45c3d627245f94fc.4b82c180d8bc4eba.7533d1923fd01471.82cd86305f99927d
     8491c0dd1df186a2
 
-VMOVAPS_EtoG_256(reg)
+VPERMILPD_256_0x5(reg)
   before
     14ffaa13f978256e.e5ecc09d7670ef63.28b23304715af01d.c6de1cdb7aa4d09b
     8d643e3e90b7ac8e.076807dc8cc9d3a1.01f29387b82c9c3d.6cb6c4b82bf7f8c8
@@ -19474,11 +19474,11 @@
     f24ccb00156b4717
   after
     14ffaa13f978256e.e5ecc09d7670ef63.28b23304715af01d.c6de1cdb7aa4d09b
-    4d0c7aca7d3c57ae.890425d28173fbe5.338fdc7546bc8dc7.428947166dd74624
+    890425d28173fbe5.4d0c7aca7d3c57ae.428947166dd74624.338fdc7546bc8dc7
     4d0c7aca7d3c57ae.890425d28173fbe5.338fdc7546bc8dc7.428947166dd74624
     ae4359235d926179.458c986a717c2459.18d50a3ab9980067.262220df5c4f77da
     f24ccb00156b4717
-VMOVAPS_EtoG_256(mem)
+VPERMILPD_256_0x5(mem)
   before
     84d4c565b3387107.0e54d8b5cc46079c.19cbdb8f79ef092a.0d0f1942ad4c31c9
     b68689fb53c1b3d5.c88df1ec64e385c2.df8f6a2fb5d86783.6e8b05f9bd625c98
@@ -19487,12 +19487,12 @@
     b17ad272b0730d4e
   after
     84d4c565b3387107.0e54d8b5cc46079c.19cbdb8f79ef092a.0d0f1942ad4c31c9
-    b68689fb53c1b3d5.c88df1ec64e385c2.df8f6a2fb5d86783.6e8b05f9bd625c98
+    0e54d8b5cc46079c.84d4c565b3387107.0d0f1942ad4c31c9.0d0f1942ad4c31c9
     652e93ad1013c7ad.3738a235c4f51798.74a2c1354044fa91.9793cbcc8569bc80
-    84d4c565b3387107.0e54d8b5cc46079c.19cbdb8f79ef092a.0d0f1942ad4c31c9
+    6e985f66073869bc.b9a2e6fa8509f8c9.b5d25d8e363e7e7f.e4746625a2ea8e2e
     b17ad272b0730d4e
 
-VMOVAPS_EtoG_256(reg)
+VPERMILPD_256_0x5(reg)
   before
     5af10b1d4a8f778c.ab8f6914533f562e.a817b9a945aa6502.7ce9b824b4d3af7a
     3b250e940cca0693.f9e12ea210314a2f.61e318ada0649aef.a6b450e4d60e48ae
@@ -19501,11 +19501,11 @@
     0f445a5a271ce054
   after
     5af10b1d4a8f778c.ab8f6914533f562e.a817b9a945aa6502.7ce9b824b4d3af7a
-    af62d64293b1f70f.355829fc5c1c01ea.4152fd7131c4d23b.10ffa1bbb7fb0646
+    355829fc5c1c01ea.af62d64293b1f70f.10ffa1bbb7fb0646.4152fd7131c4d23b
     af62d64293b1f70f.355829fc5c1c01ea.4152fd7131c4d23b.10ffa1bbb7fb0646
     14f35e937acf85ad.39c1d60e500b378b.a2af666395554a93.9495259373a6a46f
     0f445a5a271ce054
-VMOVAPS_EtoG_256(mem)
+VPERMILPD_256_0x5(mem)
   before
     5dd6bbfaee687423.c525a5f35eb1ed19.e2e8b1c40a0ba740.e1474eee67a33ea3
     5a18c461e5971c05.1e44a4cedae26bfe.0c99360aa6270e32.5b67b17e433bea16
@@ -19514,12 +19514,12 @@
     bae597853032937c
   after
     5dd6bbfaee687423.c525a5f35eb1ed19.e2e8b1c40a0ba740.e1474eee67a33ea3
-    5a18c461e5971c05.1e44a4cedae26bfe.0c99360aa6270e32.5b67b17e433bea16
+    c525a5f35eb1ed19.5dd6bbfaee687423.e1474eee67a33ea3.e1474eee67a33ea3
     e2d6f17a27b49628.7b9c59908bee3b09.939fe2cd3f6b2790.6a598c80c6a88998
-    5dd6bbfaee687423.c525a5f35eb1ed19.e2e8b1c40a0ba740.e1474eee67a33ea3
+    d2dcbe31d1cb9cb8.3779bea60c6198e6.53c830f7f1e3b084.6b69da5e8c7658d7
     bae597853032937c
 
-VCVTDQ2PD_256(reg)
+VPERMILPD_128_0x0(reg)
   before
     b418bf624e677536.04f6a872fee9ebe1.b027d27afac8c040.28de9c75d99c633b
     b34d4e5f83a13caf.55f02a29ca193fce.41f18e7af0aeecc4.eeaea23412a2fde0
@@ -19528,11 +19528,11 @@
     7e722b28bff38a1f
   after
     b418bf624e677536.04f6a872fee9ebe1.b027d27afac8c040.28de9c75d99c633b
-    41d1497bc4000000.c1dd17e938c00000.c1dfbed038400000.c1d1803198400000
+    0000000000000000.0000000000000000.8104bf1fb9ff399f.8104bf1fb9ff399f
     14d141ea6a6d2294.a195c042526753ab.4525ef108ba05b1d.8104bf1fb9ff399f
     33f0936ea0566390.c4b2e7aab2dfe4a5.1a0df2aa662947f8.bdac6e22eac1d4a6
     7e722b28bff38a1f
-VCVTDQ2PD_256(mem)
+VPERMILPD_128_0x0(mem)
   before
     a021721f57a21736.6cf64057c0e83d50.9913194b058eaee8.1af692b31dd5ed00
     ff86bff3cbd93619.1b2f441067b0ea7f.fe84d41367806c9f.a32ccb974d3189e3
@@ -19541,12 +19541,12 @@
     0492e69dc8d8765a
   after
     a021721f57a21736.6cf64057c0e83d50.9913194b058eaee8.1af692b31dd5ed00
-    c1d9bb39ad400000.41963abba0000000.41baf692b3000000.41bdd5ed00000000
+    0000000000000000.0000000000000000.1af692b31dd5ed00.9913194b058eaee8
     776e8f8e39a4a4f1.9ce79b083039a6ca.ced193ecf5bfdcf7.0ffa99c292c8564a
     e4a35dddbd101ded.4b6942a8b810afdc.e5c6d2c4cb59b81c.bcaef9a0872691e3
     0492e69dc8d8765a
 
-VCVTDQ2PD_256(reg)
+VPERMILPD_128_0x0(reg)
   before
     45f35c25f269415b.22f2a5cc72285d37.8403345d9abf3f63.1f2e0e86045abc39
     d91e57a4a0652d91.0c26e34875f81ffb.a3ff6d9373d59308.58d6c21ebccca67b
@@ -19555,11 +19555,11 @@
     94468622fa4a16d4
   after
     45f35c25f269415b.22f2a5cc72285d37.8403345d9abf3f63.1f2e0e86045abc39
-    4192aba6dc000000.c1c0920c43000000.41dae2da5e000000.41b0bd300d000000
+    0000000000000000.0000000000000000.6b8b697810bd300d.6b8b697810bd300d
     1d5cd4876f5877a9.800d943be18d2066.04aae9b7dedbe77a.6b8b697810bd300d
     6efccd38facf5b4e.59713393d2f21ca4.024fa533775f7663.361782801b39171c
     94468622fa4a16d4
-VCVTDQ2PD_256(mem)
+VPERMILPD_128_0x0(mem)
   before
     60e6f34ac8feea60.26494025de56142d.72203b3b6533cee0.fb3c9c75dbec7d6f
     78c243e5a2614fec.a28e28b9b678e0f1.a9e42b1fb65df347.4abccae7a60f384b
@@ -19568,12 +19568,12 @@
     d2a3779e846ef775
   after
     60e6f34ac8feea60.26494025de56142d.72203b3b6533cee0.fb3c9c75dbec7d6f
-    41dc880ecec00000.41d94cf3b8000000.c1930d8e2c000000.c1c209c148800000
+    0000000000000000.0000000000000000.fb3c9c75dbec7d6f.72203b3b6533cee0
     b7a5f4dda37e01a6.3e1982601fc1f947.d98a7c2be07b4705.4b1a2bf77352e3a3
     f85c8220e861bcb8.57344886b4bd9bdb.ddddac4bff9a8645.59a3bb10de44b922
     d2a3779e846ef775
 
-VCVTDQ2PD_256(reg)
+VPERMILPD_128_0x0(reg)
   before
     11665a0d005ed948.19b367988c163b4e.472c789712f90358.93ab366b30c46b34
     713860c9ef9f9a46.f4762133acaa3b95.6b4c0dffd4006e6b.d5bf96778f07b3fd
@@ -19582,11 +19582,11 @@
     8394935cd2db3330
   after
     11665a0d005ed948.19b367988c163b4e.472c789712f90358.93ab366b30c46b34
-    41bfe2032a000000.c1da687a90400000.c1df86ede9400000.41cb378d66800000
+    0000000000000000.0000000000000000.81e4485b366f1acd.81e4485b366f1acd
     5065853eedbe771c.67712bdc632877b9.1fe2032a965e15bf.81e4485b366f1acd
     0838c6d99446ac75.4c70017fcd9cace5.bf395684f5a03701.71e7c80444075bcf
     8394935cd2db3330
-VCVTDQ2PD_256(mem)
+VPERMILPD_128_0x0(mem)
   before
     91b72451fff75e1c.f7fe1e0483c374fe.803e1f0807139646.a79c037a8d510edd
     781cf7cde46898be.7703892d53c20d62.e0a802632d98f107.33580576f9fdd7fe
@@ -19595,12 +19595,12 @@
     479ae2ce505f34bb
   after
     91b72451fff75e1c.f7fe1e0483c374fe.803e1f0807139646.a79c037a8d510edd
-    c1dff0783e000000.419c4e5918000000.c1d618ff21800000.c1dcabbc48c00000
+    0000000000000000.0000000000000000.a79c037a8d510edd.803e1f0807139646
     158e89be9f399c43.e69303bea2ceb14e.467a247c59387956.bfb958e6d531ce11
     42db540f4c7727d6.9efa88250c739d6e.8f800340aafee95c.a70bf834be782ec1
     479ae2ce505f34bb
 
-VMOVHPD_128_LoadForm(reg)
+VPERMILPD_128_0x3(reg)
   before
     fbb1111f25711cab.dccdd6ac062df5a5.fd8415cd2c3d0c6d.98861a993af6fe47
     1f9e8193dc3a213c.bf318a81ea67c1d9.5d7ca5229fb93bf8.3b58e675252c7343
@@ -19609,11 +19609,11 @@
     5e8c594c24be7052
   after
     fbb1111f25711cab.dccdd6ac062df5a5.fd8415cd2c3d0c6d.98861a993af6fe47
-    1f9e8193dc3a213c.bf318a81ea67c1d9.5d7ca5229fb93bf8.3b58e675252c7343
+    0000000000000000.0000000000000000.1b303490007366bb.1b303490007366bb
     0eab2e960e46811b.c8d3ec7a133148a0.1b303490007366bb.55c1e2be88ad067c
     262514945a2276f3.d17f79839d984626.94eabe83ebf5c961.c28f89627e84711d
     5e8c594c24be7052
-VMOVHPD_128_LoadForm(mem)
+VPERMILPD_128_0x3(mem)
   before
     0685ce689566c149.c25830f959593c71.b700ab89a5a77797.22f74067fdcd9f96
     944662a2ee881e2b.3e907d32aa781140.56240076476b961e.22a3b4a8d2872508
@@ -19622,12 +19622,12 @@
     67579ed3f6732d79
   after
     0685ce689566c149.c25830f959593c71.b700ab89a5a77797.22f74067fdcd9f96
-    944662a2ee881e2b.3e907d32aa781140.56240076476b961e.22a3b4a8d2872508
-    0000000000000000.0000000000000000.22f74067fdcd9f96.22a3b4a8d2872508
+    0000000000000000.0000000000000000.b700ab89a5a77797.22f74067fdcd9f96
+    e59b93e64a314427.f519f7a9e60a2f0d.8ab5f3389eef60e7.f03918b305ae9760
     d54fdc20c66cef67.453e9accab9bd384.2f8001b9c63f911f.e80767f232ce304d
     67579ed3f6732d79
 
-VMOVHPD_128_LoadForm(reg)
+VPERMILPD_128_0x3(reg)
   before
     c777b7c0ec2aca90.402fb93c7d45da17.894c620595b73850.2151a4e7dc68e5f2
     65b1b027b17e4340.0208a7268bc9c265.1c904cc23feb9b1e.3cf45aadfb75178c
@@ -19636,11 +19636,11 @@
     1bbfc1c7aa6e3eb7
   after
     c777b7c0ec2aca90.402fb93c7d45da17.894c620595b73850.2151a4e7dc68e5f2
-    65b1b027b17e4340.0208a7268bc9c265.1c904cc23feb9b1e.3cf45aadfb75178c
+    0000000000000000.0000000000000000.5c54536e46c3389a.5c54536e46c3389a
     9d528473e0fbd332.f7a420cb0d03637a.5c54536e46c3389a.5c359ef74072e418
     cba52f10162eb715.fad0a2151fff7885.a3e4737445c94b6f.5ddfecb1c66c07c2
     1bbfc1c7aa6e3eb7
-VMOVHPD_128_LoadForm(mem)
+VPERMILPD_128_0x3(mem)
   before
     72a2972507844323.4bf8ae6aeea22b93.e958a8f2dcc9bfb0.4f8ea942d88b104a
     3d52ecb7fabbd331.7995fced05e36b58.9f07ae4d606ef227.ba9def449c94c2d6
@@ -19649,12 +19649,12 @@
     141d02b123d4c25c
   after
     72a2972507844323.4bf8ae6aeea22b93.e958a8f2dcc9bfb0.4f8ea942d88b104a
-    3d52ecb7fabbd331.7995fced05e36b58.9f07ae4d606ef227.ba9def449c94c2d6
-    0000000000000000.0000000000000000.4f8ea942d88b104a.ba9def449c94c2d6
+    0000000000000000.0000000000000000.e958a8f2dcc9bfb0.4f8ea942d88b104a
+    5a9c3b699e1ea90e.b1ca1505f67eb212.f8ab3112c8facd17.425c43e42c719ec0
     a44b012810b982e6.4ee1f51f5efe3d6a.d00eab2c2f770eac.4118a08f25addfb3
     141d02b123d4c25c
 
-VMOVHPD_128_LoadForm(reg)
+VPERMILPD_128_0x3(reg)
   before
     18b766b7c0738367.f72db8de6b991ae4.ae2798a5d8f0470f.02fd9a89b2f36f11
     a732c60b9b155e7f.2e0cde79cbc92d35.2ce8fb0400df0eab.6c4479156c7aad73
@@ -19663,11 +19663,11 @@
     8b20900200c3ea3d
   after
     18b766b7c0738367.f72db8de6b991ae4.ae2798a5d8f0470f.02fd9a89b2f36f11
-    a732c60b9b155e7f.2e0cde79cbc92d35.2ce8fb0400df0eab.6c4479156c7aad73
+    0000000000000000.0000000000000000.246f18a97357ccea.246f18a97357ccea
     1eda201b4d468f51.27b6eee44d557604.246f18a97357ccea.e9afc5ba7a1783fe
     dafa6f5275935189.bdf5640b0d4ab37e.f20aedffcde4be79.540af865f7d6aedd
     8b20900200c3ea3d
-VMOVHPD_128_LoadForm(mem)
+VPERMILPD_128_0x3(mem)
   before
     69bf087eb0ebf349.35dfb01bac87e1d2.cb96bcda26b39dce.f1037671a9131f04
     c9b1dcc32459852e.8cd5dde490ae7ad8.2f64733db49cf322.7fa8ad6da36f2d36
@@ -19676,12 +19676,12 @@
     148d47cf610cb373
   after
     69bf087eb0ebf349.35dfb01bac87e1d2.cb96bcda26b39dce.f1037671a9131f04
-    c9b1dcc32459852e.8cd5dde490ae7ad8.2f64733db49cf322.7fa8ad6da36f2d36
-    0000000000000000.0000000000000000.f1037671a9131f04.7fa8ad6da36f2d36
+    0000000000000000.0000000000000000.cb96bcda26b39dce.f1037671a9131f04
+    89c389bf77195b17.3b28f418bd955a48.c32d0420d4126fa3.f743905e588522bc
     83c18a5dc6383231.9e24f024cec7bbce.65bceb6fa120ce80.b4201ab063e03a42
     148d47cf610cb373
 
-VCVTPD2PS_256(reg)
+VUNPCKLPD_256(reg)
   before
     72d51328ed96c7fc.95775a892cc1c5a8.1115cd7260d0da16.efdca41638d3cce2
     29437b25a409b388.99b0782fc5c1d1a7.f046886f0e3df2cb.3f5aac02b43524f8
@@ -19689,12 +19689,12 @@
     16c50bbf01da025b.ebdf8699035344f0.629c84272f71002d.9ca09555cd3cd5eb
     63007094a2f8a620
   after
-    0000000000000000.0000000000000000.0000000080000000.ff8000003ad56016
+    6c3a5d3bae42125b.99b0782fc5c1d1a7.2f027d1d325494ec.3f5aac02b43524f8
     29437b25a409b388.99b0782fc5c1d1a7.f046886f0e3df2cb.3f5aac02b43524f8
     9725793421f1b2c4.6c3a5d3bae42125b.97051b8774994099.2f027d1d325494ec
     16c50bbf01da025b.ebdf8699035344f0.629c84272f71002d.9ca09555cd3cd5eb
     63007094a2f8a620
-VCVTPD2PS_256(mem)
+VUNPCKLPD_256(mem)
   before
     5eed88c8cc94c1b8.04702c34df51ddfa.f06c7035dffd2391.ad58beb9db506e33
     6a355adc681ce3de.bb71d9fd58e27f4d.58ad96fb5e4e6a6a.d485c5ab13c2c557
@@ -19704,11 +19704,11 @@
   after
     5eed88c8cc94c1b8.04702c34df51ddfa.f06c7035dffd2391.ad58beb9db506e33
     6a355adc681ce3de.bb71d9fd58e27f4d.58ad96fb5e4e6a6a.d485c5ab13c2c557
-    64a263bc919dc8bf.98160c88071726ff.006e74d89d51d6a9.336f966873534244
-    0000000000000000.0000000000000000.7f80000000000000.ff80000080000000
+    04702c34df51ddfa.bb71d9fd58e27f4d.ad58beb9db506e33.d485c5ab13c2c557
+    26011e5463222c87.f8aac340897e0cbd.c27a87b6b7132277.26612c5c989021a6
     09a983f31d049e2a
 
-VCVTPD2PS_256(reg)
+VUNPCKLPD_256(reg)
   before
     389197999f3cf47c.8d1e0890fbb8ca61.3578f99179a36e33.7b9f4983c99e0c03
     0e6664bab9c26047.75c59b5c756a5f7a.accdabe77310870c.07a73829ee014e77
@@ -19716,12 +19716,12 @@
     24071b1d27ee69fb.38e0b1557c535d17.b93c6f53f8f8d299.09938bb5e378ccc9
     360fe672eba580ff
   after
-    0000000000000000.0000000000000000.000000007f800000.8000000000000000
+    bac155a5ec44a6fd.75c59b5c756a5f7a.425fcf964345a400.07a73829ee014e77
     0e6664bab9c26047.75c59b5c756a5f7a.accdabe77310870c.07a73829ee014e77
     e974e7c208251d38.bac155a5ec44a6fd.baf5d3ae145395f4.425fcf964345a400
     24071b1d27ee69fb.38e0b1557c535d17.b93c6f53f8f8d299.09938bb5e378ccc9
     360fe672eba580ff
-VCVTPD2PS_256(mem)
+VUNPCKLPD_256(mem)
   before
     a69f5eb976d97dcd.1b6afc38b3ab7e3b.ccec2b5a42a23ef4.06ee7a40ba897aa4
     350f6e76a11f7f60.29eb867d47e799a5.50b23f9e5a3d06bf.fd56f0e2f694cbc4
@@ -19731,11 +19731,11 @@
   after
     a69f5eb976d97dcd.1b6afc38b3ab7e3b.ccec2b5a42a23ef4.06ee7a40ba897aa4
     350f6e76a11f7f60.29eb867d47e799a5.50b23f9e5a3d06bf.fd56f0e2f694cbc4
-    bf2a9296878341e4.acd4b65a7f2ff5e4.a1fe6a0fdf3070a5.fac2cda649a5ffa3
-    0000000000000000.0000000000000000.8000000000000000.ff80000000000000
+    1b6afc38b3ab7e3b.29eb867d47e799a5.06ee7a40ba897aa4.fd56f0e2f694cbc4
+    20bd460344128084.fe72863af80ed0a5.9b9c2698ed8839d1.597c0ef74e4753ed
     77d1ae40a2060350
 
-VCVTPD2PS_256(reg)
+VUNPCKLPD_256(reg)
   before
     ae0da9efe06e4a75.349407aaf5d7f86c.7d11f4884e106493.1958f125a1511d70
     5b7cfb6fa50c650b.d67b5078b6de64ca.84fdfbb21cc2ed5b.f9fd47a21695d8ae
@@ -19743,12 +19743,12 @@
     8622959232170634.39a96a35d5e40c92.99ebc5479163d228.4c36801cb5c4c1b5
     77615cf116c568d6
   after
-    0000000000000000.0000000000000000.7f800000ff800000.80000000ff800000
+    e43e9d58a23482c8.d67b5078b6de64ca.1658a2fb696225b6.f9fd47a21695d8ae
     5b7cfb6fa50c650b.d67b5078b6de64ca.84fdfbb21cc2ed5b.f9fd47a21695d8ae
     da69a12c8c6b90bc.e43e9d58a23482c8.6e829823feaea9a9.1658a2fb696225b6
     8622959232170634.39a96a35d5e40c92.99ebc5479163d228.4c36801cb5c4c1b5
     77615cf116c568d6
-VCVTPD2PS_256(mem)
+VUNPCKLPD_256(mem)
   before
     73a6b267aa73d646.bdf1d50e329d0521.b18734fd6cfabe56.5f86808b716aa585
     1bd0fe688adac631.da235c0a2988c72c.28a5759b8283563d.1d9dc45939515d6c
@@ -19758,11 +19758,11 @@
   after
     73a6b267aa73d646.bdf1d50e329d0521.b18734fd6cfabe56.5f86808b716aa585
     1bd0fe688adac631.da235c0a2988c72c.28a5759b8283563d.1d9dc45939515d6c
-    4dadbce2d404f5c2.390427f3b2658804.79d0abfb348a8e76.307d8d1e85a43888
-    0000000000000000.0000000000000000.7f800000af8ea872.800000007f800000
+    bdf1d50e329d0521.da235c0a2988c72c.5f86808b716aa585.1d9dc45939515d6c
+    e40769bfa4ff1f25.36e0303669bf8653.82d251099e1b232b.f272d847f2ed7085
     c0c89f3e1bba4111
 
-VPUNPCKHDQ_128(reg)
+VUNPCKHPD_256(reg)
   before
     f7cae0719d97e9d6.bcac80ed15d7ff88.2d03753deb22fbc5.1e77e4b1da43d088
     f1c6964b130ea280.b0667d5743965215.7ab8f176d41a2407.288ddee0070d52ba
@@ -19770,12 +19770,12 @@
     a1d752a34d003a36.604b1a8f49ff415e.850c7f2b48fb80aa.fb38fc7e9eb8c54c
     7a6517c740b12e04
   after
-    0000000000000000.0000000000000000.784da04c7ab8f176.bf343cc5d41a2407
+    0b06be371aada9bc.f1c6964b130ea280.784da04cbf343cc5.7ab8f176d41a2407
     f1c6964b130ea280.b0667d5743965215.7ab8f176d41a2407.288ddee0070d52ba
     0b06be371aada9bc.9e02dde94b4ad4f8.784da04cbf343cc5.7edfbd803e8565ed
     a1d752a34d003a36.604b1a8f49ff415e.850c7f2b48fb80aa.fb38fc7e9eb8c54c
     7a6517c740b12e04
-VPUNPCKHDQ_128(mem)
+VUNPCKHPD_256(mem)
   before
     d9328b46427c5b41.0f8550fa49919099.d40fb23558c05473.fc42887f0cfc2c63
     f26bd2e6c026092e.b25cb3a8a9eee892.d41920c79499ca62.383bb9b4a6c27c9c
@@ -19785,11 +19785,11 @@
   after
     d9328b46427c5b41.0f8550fa49919099.d40fb23558c05473.fc42887f0cfc2c63
     f26bd2e6c026092e.b25cb3a8a9eee892.d41920c79499ca62.383bb9b4a6c27c9c
-    0000000000000000.0000000000000000.d40fb235d41920c7.58c054739499ca62
+    d9328b46427c5b41.f26bd2e6c026092e.d40fb23558c05473.d41920c79499ca62
     c651ce3e9d45d6ca.02b499ba063b8df4.ec2d6f6005c4ce81.73a58171cecef73c
     2aaf0fd1942c99fb
 
-VPUNPCKHDQ_128(reg)
+VUNPCKHPD_256(reg)
   before
     16abb5c3a07fd0ea.38957bcd35d26ed0.68ce13f53c4252b6.bcd0483e722ed408
     95e66eb18f53d6b4.d675eb2eb96d7738.7240e338464409bd.88e9e7b97ce12d19
@@ -19797,12 +19797,12 @@
     b849093684b1428c.01390917f2fecbd9.e25f7382476b3c4c.88ac6732d94fc78c
     73ef410963228046
   after
-    0000000000000000.0000000000000000.7c5704ed7240e338.c0ceeeb6464409bd
+    01ac3609fc35e806.95e66eb18f53d6b4.7c5704edc0ceeeb6.7240e338464409bd
     95e66eb18f53d6b4.d675eb2eb96d7738.7240e338464409bd.88e9e7b97ce12d19
     01ac3609fc35e806.7abd9c4e4422ad2c.7c5704edc0ceeeb6.2d44c8bb40e795e2
     b849093684b1428c.01390917f2fecbd9.e25f7382476b3c4c.88ac6732d94fc78c
     73ef410963228046
-VPUNPCKHDQ_128(mem)
+VUNPCKHPD_256(mem)
   before
     cbd7d12cfc6e7c3a.1408e4a4c2511ff1.48b5ae76e00c8e6a.ffa32a6276a8312c
     6c319387bd3e7695.7337c2be53a3bde2.29fd08582959b10c.317127f9ea0f0602
@@ -19812,11 +19812,11 @@
   after
     cbd7d12cfc6e7c3a.1408e4a4c2511ff1.48b5ae76e00c8e6a.ffa32a6276a8312c
     6c319387bd3e7695.7337c2be53a3bde2.29fd08582959b10c.317127f9ea0f0602
-    0000000000000000.0000000000000000.48b5ae7629fd0858.e00c8e6a2959b10c
+    cbd7d12cfc6e7c3a.6c319387bd3e7695.48b5ae76e00c8e6a.29fd08582959b10c
     fa6b9d952d9c572e.a51077abdb8b2617.2c20c7513edd0b31.41d7e0fc0f91473d
     d7079440f9c32afc
 
-VPUNPCKHDQ_128(reg)
+VUNPCKHPD_256(reg)
   before
     f1f07eeb9650df60.9ee2de211341b6c4.315347560b396ab2.07932541422cb80d
     eadd996984c5a115.fbfc4194929a0371.30350a5dfec95e8a.ec02276311eab7a9
@@ -19824,12 +19824,12 @@
     eef8528fc2943f25.50445de3cd9a5abf.f20659339abb469b.470409ed82e196d3
     752ee02d5c32efb9
   after
-    0000000000000000.0000000000000000.fc02bb2d30350a5d.4ec53e48fec95e8a
+    201ce1275facadc8.eadd996984c5a115.fc02bb2d4ec53e48.30350a5dfec95e8a
     eadd996984c5a115.fbfc4194929a0371.30350a5dfec95e8a.ec02276311eab7a9
     201ce1275facadc8.ed8342dcc7b4fb61.fc02bb2d4ec53e48.b8394aa3c822c232
     eef8528fc2943f25.50445de3cd9a5abf.f20659339abb469b.470409ed82e196d3
     752ee02d5c32efb9
-VPUNPCKHDQ_128(mem)
+VUNPCKHPD_256(mem)
   before
     1e854b4f71218810.afbce90f4a0693d7.000b0f97c159dcb8.6e8cddd97c37b12d
     1ed3c640debb1e03.c1b5a0119290e48b.d9a4d3e3bffc3c77.cce1458d90c3bcaa
@@ -19839,11 +19839,11 @@
   after
     1e854b4f71218810.afbce90f4a0693d7.000b0f97c159dcb8.6e8cddd97c37b12d
     1ed3c640debb1e03.c1b5a0119290e48b.d9a4d3e3bffc3c77.cce1458d90c3bcaa
-    0000000000000000.0000000000000000.000b0f97d9a4d3e3.c159dcb8bffc3c77
+    1e854b4f71218810.1ed3c640debb1e03.000b0f97c159dcb8.d9a4d3e3bffc3c77
     9387de3b2d1d306f.44766350d31a70a8.767b81f3461f88fa.9e28adccc041a118
     cab2a72f144af361
 
-VBROADCASTSS_128(reg)
+VSHUFPS_0x39_256(reg)
   before
     483b734f0a94d545.bf85721d48fe2540.6dd6676405322269.f251638f07b7ed15
     740e0f983fab8270.b3aa067e2ab9065e.579a7bab6791c2db.072a4873436320a6
@@ -19851,12 +19851,12 @@
     46c5a455d372304e.609d1f6ab6ee7e2e.da82c8832c56bc84.6b1008c49529e2de
     73b5db08e55ae9db
   after
-    483b734f0a94d545.bf85721d48fe2540.6dd6676405322269.f251638f07b7ed15
+    b6ee7e2e46c5a455.3fab8270b3aa067e.9529e2deda82c883.6791c2db072a4873
     740e0f983fab8270.b3aa067e2ab9065e.579a7bab6791c2db.072a4873436320a6
     aa7876764e1c3790.4ac41649f05a8ff4.5c109d9195c48cab.90d0ab8b1330dedb
     46c5a455d372304e.609d1f6ab6ee7e2e.da82c8832c56bc84.6b1008c49529e2de
     73b5db08e55ae9db
-VBROADCASTSS_128(mem)
+VSHUFPS_0x39_256(mem)
   before
     848da1451ed0afff.a44195a26c3aa959.d1029ccd96808d3a.2b3df8ebc7d38d13
     7962d5655d96f076.203846c7b2ffdd5b.78bf095eaf1c7942.ac8d2a3603c83c04
@@ -19865,12 +19865,12 @@
     e8f29ea391ead3d7
   after
     848da1451ed0afff.a44195a26c3aa959.d1029ccd96808d3a.2b3df8ebc7d38d13
-    0000000000000000.0000000000000000.c7d38d13c7d38d13.c7d38d13c7d38d13
-    3002f356bdb8676b.16f6b232434d0900.33a0e3091bcffd72.babe59d17cc00502
+    7962d5655d96f076.203846c7b2ffdd5b.78bf095eaf1c7942.ac8d2a3603c83c04
+    848da1456c3aa959.203846c75d96f076.d1029ccdc7d38d13.ac8d2a36af1c7942
     843777035a43d20b.e1c7d54dbbb069f5.dd71a4baf6a4d6f7.af1b8027cc4723ba
     e8f29ea391ead3d7
 
-VBROADCASTSS_128(reg)
+VSHUFPS_0x39_256(reg)
   before
     c18dacb367345106.50cedd585142ea82.dff6ab86b5b539e6.51fdca5e5da7c0fd
     9739a7c2e9b1d9f3.7292a241bdc26efb.6bd03048cde7b47e.6d12d0df6be577af
@@ -19878,12 +19878,12 @@
     a5f4568d6376f5b5.24d6367f6771a5a5.9cb53917c9049e56.09026d2ced403bca
     4176fbd09a74c08a
   after
-    c18dacb367345106.50cedd585142ea82.dff6ab86b5b539e6.51fdca5e5da7c0fd
+    6771a5a5a5f4568d.e9b1d9f37292a241.ed403bca9cb53917.cde7b47e6d12d0df
     9739a7c2e9b1d9f3.7292a241bdc26efb.6bd03048cde7b47e.6d12d0df6be577af
     c4428c3cb4eea649.c45141aabbcd18a3.e0a161ffa0d3176a.0b7a322b3c69b73a
     a5f4568d6376f5b5.24d6367f6771a5a5.9cb53917c9049e56.09026d2ced403bca
     4176fbd09a74c08a
-VBROADCASTSS_128(mem)
+VSHUFPS_0x39_256(mem)
   before
     91a25a025e1301a7.969a012193d502e3.6cecfdacdbbad12e.fa58b4fce50684ed
     d35105ae5629bb4c.f3828a65df98097e.7a60121e36b35769.55d5ce1a8f6506dc
@@ -19892,12 +19892,12 @@
     f467b004fd2c8b6d
   after
     91a25a025e1301a7.969a012193d502e3.6cecfdacdbbad12e.fa58b4fce50684ed
-    0000000000000000.0000000000000000.e50684ede50684ed.e50684ede50684ed
-    e55179c09dc1aaa6.18f6ebc3e34a4532.28fef2bf9168f583.0b7a84de64ae60ce
+    d35105ae5629bb4c.f3828a65df98097e.7a60121e36b35769.55d5ce1a8f6506dc
+    91a25a0293d502e3.f3828a655629bb4c.6cecfdace50684ed.55d5ce1a36b35769
     a16c30244fe78ae0.614422a93c78f3ac.5492187d0be564a8.7691d0b2ff6dce70
     f467b004fd2c8b6d
 
-VBROADCASTSS_128(reg)
+VSHUFPS_0x39_256(reg)
   before
     df48203ef979d472.e46fa8c689a71727.2ab62a8186ac4e98.d8e80043bd376303
     95801ace90e0e52b.8b265c92660e0ca7.cf9800b95b7494a1.91cb27fcc669acc1
@@ -19905,12 +19905,12 @@
     cd24a19dfc284d67.70df69597cff2000.1de102f51defccbd.136c1efc469f0f15
     93c1e71af7baa102
   after
-    df48203ef979d472.e46fa8c689a71727.2ab62a8186ac4e98.d8e80043bd376303
+    7cff2000cd24a19d.90e0e52b8b265c92.469f0f151de102f5.5b7494a191cb27fc
     95801ace90e0e52b.8b265c92660e0ca7.cf9800b95b7494a1.91cb27fcc669acc1
     705b9c1f5debf943.705dc8750327268b.ac389ebc5a5cff74.5c0907963f88fc0e
     cd24a19dfc284d67.70df69597cff2000.1de102f51defccbd.136c1efc469f0f15
     93c1e71af7baa102
-VBROADCASTSS_128(mem)
+VSHUFPS_0x39_256(mem)
   before
     b8d4dedc6de56d03.092825b40b221d43.677ab92ceba1b831.7ede27d240b93627
     5e71802fc42d3041.7eb424d02366a582.31f836d96f19a84b.2a7c09be60467a5f
@@ -19919,12 +19919,12 @@
     9114f715c2fbb990
   after
     b8d4dedc6de56d03.092825b40b221d43.677ab92ceba1b831.7ede27d240b93627
-    0000000000000000.0000000000000000.40b9362740b93627.40b9362740b93627
-    616347fd199da5eb.89129a5de27f20d0.ab265b4b2173ac7a.7f08a4261823d410
+    5e71802fc42d3041.7eb424d02366a582.31f836d96f19a84b.2a7c09be60467a5f
+    b8d4dedc0b221d43.7eb424d0c42d3041.677ab92c40b93627.2a7c09be6f19a84b
     9e78b13388428a2b.868f84c7e3facbda.afd0a47020bc82e9.d8cbf57405db80e7
     9114f715c2fbb990
 
-VPMOVSXDQ_128(reg)
+VUNPCKLPS_256(reg)
   before
     052ea676ec0ebcb6.ef7a39be2c27992d.d276dd7bc361e24c.1ac28e338500e4c5
     9264fe011ea0c506.31365c8821588f1f.c715a1e31e42a0d2.c8c894806e498f39
@@ -19932,12 +19932,12 @@
     63589a490b72d8d2.f80c5f8e70d01e7d.1fa65b83b2a005c7.5d3fe4693b1faf9c
     fc4826dc57c49ce2
   after
-    052ea676ec0ebcb6.ef7a39be2c27992d.d276dd7bc361e24c.1ac28e338500e4c5
-    0000000000000000.0000000000000000.ffffffff95ae3244.fffffffff7a53f72
+    4078947f31365c88.84e2272a21588f1f.95ae3244c8c89480.f7a53f726e498f39
+    9264fe011ea0c506.31365c8821588f1f.c715a1e31e42a0d2.c8c894806e498f39
     9204fc24f43e102b.4078947f84e2272a.c2b6cd6d8f294317.95ae3244f7a53f72
     63589a490b72d8d2.f80c5f8e70d01e7d.1fa65b83b2a005c7.5d3fe4693b1faf9c
     fc4826dc57c49ce2
-VPMOVSXDQ_128(mem)
+VUNPCKLPS_256(mem)
   before
     4e95758a669fc271.60add6deffcb5aa6.35be38a1022e3042.3a32499324352290
     2ff24c5d84bcdc74.e44fac4e6bd2d254.d3599ba4550919a5.6fa392088074d81b
@@ -19946,12 +19946,12 @@
     425a68fd2c9fde0c
   after
     4e95758a669fc271.60add6deffcb5aa6.35be38a1022e3042.3a32499324352290
-    0000000000000000.0000000000000000.000000003a324993.0000000024352290
-    7a2b2743ce28a818.4d891605eb157b88.adab0583866c94d3.1a48324e63e86117
+    2ff24c5d84bcdc74.e44fac4e6bd2d254.d3599ba4550919a5.6fa392088074d81b
+    60add6dee44fac4e.ffcb5aa66bd2d254.3a3249936fa39208.243522908074d81b
     0d0c822660eee089.f5a9116f1c2092ed.a17ef02ab0635ef8.976c26d1681df92e
     425a68fd2c9fde0c
 
-VPMOVSXDQ_128(reg)
+VUNPCKLPS_256(reg)
   before
     7760f63e4afb4a5e.c360d9f4541a40f2.3af99af89a7d5330.8a9fda85f0fb3340
     92c8cc015ebc7ad0.78f5a998c9b98680.76c7ac0c00bafafd.44da3e81613fcfd5
@@ -19959,12 +19959,12 @@
     eaf13bb8db9e15c3.4e0da112a07dafb9.47085c86f502e8e2.9acd650848fc4a9d
     ef1d206bf58da227
   after
-    7760f63e4afb4a5e.c360d9f4541a40f2.3af99af89a7d5330.8a9fda85f0fb3340
-    0000000000000000.0000000000000000.ffffffffabfa9908.00000000203bede6
+    08956dfe78f5a998.d9d66c5ec9b98680.abfa990844da3e81.203bede6613fcfd5
+    92c8cc015ebc7ad0.78f5a998c9b98680.76c7ac0c00bafafd.44da3e81613fcfd5
     efdfe4b0056faa0e.08956dfed9d66c5e.065d4418ea62c2ff.abfa9908203bede6
     eaf13bb8db9e15c3.4e0da112a07dafb9.47085c86f502e8e2.9acd650848fc4a9d
     ef1d206bf58da227
-VPMOVSXDQ_128(mem)
+VUNPCKLPS_256(mem)
   before
     85b8451f44fab0af.de49ce867bd8f89b.2829c1c03bbb0abc.9313f2c4bc25a854
     3768500f51503162.2935988582a68f43.71b44af5c59b3a95.47cc013cdc573dfe
@@ -19973,12 +19973,12 @@
     6cfbdd4166c35811
   after
     85b8451f44fab0af.de49ce867bd8f89b.2829c1c03bbb0abc.9313f2c4bc25a854
-    0000000000000000.0000000000000000.ffffffff9313f2c4.ffffffffbc25a854
-    e3fabe27379ae16c.26ff95208a961667.047cb79b5b29fb6d.bf7d855cf025e58f
+    3768500f51503162.2935988582a68f43.71b44af5c59b3a95.47cc013cdc573dfe
+    de49ce8629359885.7bd8f89b82a68f43.9313f2c447cc013c.bc25a854dc573dfe
     633a095312e47cf8.31f4c2c53233c8b2.bf4b84a018720973.58747a8f951ad9b1
     6cfbdd4166c35811
 
-VPMOVSXDQ_128(reg)
+VUNPCKLPS_256(reg)
   before
     585fa8deffaa9c5a.95f3af7fff3bbd32.a5601adf140ae2d1.7cee2dee198120d0
     78ecd9d2fd5de239.53f32b9719aa6148.e08f98dacca69f70.19312e737963fbb3
@@ -19986,12 +19986,12 @@
     c4b05b7097556467.e7f3963c4601c1b2.1766fc24305df6dc.5fc72acec7cdefb6
     c0b21c7dee6d802e
   after
-    585fa8deffaa9c5a.95f3af7fff3bbd32.a5601adf140ae2d1.7cee2dee198120d0
-    0000000000000000.0000000000000000.0000000070e0041a.0000000054225746
+    7b04f98753f32b97.7d3d246419aa6148.70e0041a19312e73.542257467963fbb3
+    78ecd9d2fd5de239.53f32b9719aa6148.e08f98dacca69f70.19312e737963fbb3
     28ed6c89fc686659.7b04f9877d3d2464.3ccd3b22f7933d3a.70e0041a54225746
     c4b05b7097556467.e7f3963c4601c1b2.1766fc24305df6dc.5fc72acec7cdefb6
     c0b21c7dee6d802e
-VPMOVSXDQ_128(mem)
+VUNPCKLPS_256(mem)
   before
     716c5612e410c6db.a87fa4f16bb3170f.758c7da09101f55f.cca5d84a14910701
     4cc2557ac5c17de8.30a74179130bbcfc.ff9b29a1794a7c97.b6d7cc023ebbab56
@@ -20000,12 +20000,12 @@
     51170bc67c6e672a
   after
     716c5612e410c6db.a87fa4f16bb3170f.758c7da09101f55f.cca5d84a14910701
-    0000000000000000.0000000000000000.ffffffffcca5d84a.0000000014910701
-    2e81949fae8c6182.b87431752beb8fdb.63ec192a1be71285.3348d3b64b652086
+    4cc2557ac5c17de8.30a74179130bbcfc.ff9b29a1794a7c97.b6d7cc023ebbab56
+    a87fa4f130a74179.6bb3170f130bbcfc.cca5d84ab6d7cc02.149107013ebbab56
     f4728f6ebb7e2dd5.9c326d5050decb57.7b4ac62692e47256.9d44e9d4d61da03e
     51170bc67c6e672a
 
-VPMOVSXWD_128(reg)
+VUNPCKHPS_256(reg)
   before
     ac0d33fad8e5b3f5.7864c2d306a29e0c.382df2751d70ad1d.2483ae83fb4d5935
     08715fdb860dbe4c.9722a9bbae056f54.e8b1bd522f2e71d8.3a614b2c712f834f
@@ -20013,12 +20013,12 @@
     37b7b1544ba1044d.163185c07fb525c6.f48212e1905c8ee0.1e3f9a12f68c8ee3
     a3d742283c1fe8b5
   after
-    ac0d33fad8e5b3f5.7864c2d306a29e0c.382df2751d70ad1d.2483ae83fb4d5935
-    0000000000000000.0000000000000000.ffff9ab100001b0d.00001095ffffabd0
+    c2918ad508715fdb.2372c5db860dbe4c.0809c952e8b1bd52.21a352362f2e71d8
+    08715fdb860dbe4c.9722a9bbae056f54.e8b1bd522f2e71d8.3a614b2c712f834f
     c2918ad52372c5db.2d77c111cdb25ed9.0809c95221a35236.9ab11b0d1095abd0
     37b7b1544ba1044d.163185c07fb525c6.f48212e1905c8ee0.1e3f9a12f68c8ee3
     a3d742283c1fe8b5
-VPMOVSXWD_128(mem)
+VUNPCKHPS_256(mem)
   before
     05449139005a7571.c130cec49925b64e.2f1a71b6e11b8047.0768956b17e45f85
     205402325d4af044.bd48df92a98a188b.52ff01de0eef2d89.9f074c5d53c701cf
@@ -20027,12 +20027,12 @@
     16318ad3590c2c46
   after
     05449139005a7571.c130cec49925b64e.2f1a71b6e11b8047.0768956b17e45f85
-    0000000000000000.0000000000000000.00000768ffff956b.000017e400005f85
-    d0d1110070fa165a.874adf28185d66b0.5cacb224223de6b8.17ab3521df91b26a
+    205402325d4af044.bd48df92a98a188b.52ff01de0eef2d89.9f074c5d53c701cf
+    0544913920540232.005a75715d4af044.2f1a71b652ff01de.e11b80470eef2d89
     f1883a8e5576a3de.7c84caf38229db69.29edfe743b116800.cba04b2458cfac03
     16318ad3590c2c46
 
-VPMOVSXWD_128(reg)
+VUNPCKHPS_256(reg)
   before
     56abef987fd56dde.5f45fac727ca53fd.f6409c60827bb461.958d63ba72786f8c
     e55b75e165b5ac78.f6d4cc990203e1e2.52cc52dab4dd2d44.7c5a5de2e57eb688
@@ -20040,12 +20040,12 @@
     6487d4ace2eb1461.0f9796b5455289b1.207f57a42007ee7e.2ba6fc89ee93f783
     abbe99e0bbbb68d9
   after
-    56abef987fd56dde.5f45fac727ca53fd.f6409c60827bb461.958d63ba72786f8c
-    0000000000000000.0000000000000000.ffffba1e000066d9.ffffb02dfffffa21
+    218b1719e55b75e1.a73825c065b5ac78.ec72e7cc52cc52da.b5dd82c0b4dd2d44
+    e55b75e165b5ac78.f6d4cc990203e1e2.52cc52dab4dd2d44.7c5a5de2e57eb688
     218b1719a73825c0.92012bef032d0aba.ec72e7ccb5dd82c0.ba1e66d9b02dfa21
     6487d4ace2eb1461.0f9796b5455289b1.207f57a42007ee7e.2ba6fc89ee93f783
     abbe99e0bbbb68d9
-VPMOVSXWD_128(mem)
+VUNPCKHPS_256(mem)
   before
     1532bbc834b20b50.0c9da506b259b507.496486d7e5801cf2.4a3e9ecd92e6ae2d
     47cdde2f75839a14.73188893b20e4360.1c327941fec37daa.c6fdb8b3a606fe77
@@ -20054,12 +20054,12 @@
     be2ad30cc966a4b2
   after
     1532bbc834b20b50.0c9da506b259b507.496486d7e5801cf2.4a3e9ecd92e6ae2d
-    0000000000000000.0000000000000000.00004a3effff9ecd.ffff92e6ffffae2d
-    1c5d7c00993ad150.f74377bf7e97fb16.64ceeadfad256904.f007a2c2f9f31a08
+    47cdde2f75839a14.73188893b20e4360.1c327941fec37daa.c6fdb8b3a606fe77
+    1532bbc847cdde2f.34b20b5075839a14.496486d71c327941.e5801cf2fec37daa
     70ac1327bce46e31.f26b70f6b37f18d5.fc04559e0db49b2d.24a75767263a3d8d
     be2ad30cc966a4b2
 
-VPMOVSXWD_128(reg)
+VUNPCKHPS_256(reg)
   before
     1adc121e7f038a23.1f871e90fb8c2be2.c2dc6fa5ec52d74a.c29f36683a7cd051
     9309110ae49e2d8b.04ba1927713ec590.c1e26e36c69c7421.916d0a2b5187c49b
@@ -20067,12 +20067,12 @@
     51033c1c28fc95f1.e558d08f74f27e92.c0dd61b2cbc838a3.b9ce7748ac9cd853
     cbf9097b27bc7119
   after
-    1adc121e7f038a23.1f871e90fb8c2be2.c2dc6fa5ec52d74a.c29f36683a7cd051
-    0000000000000000.0000000000000000.0000453800004bd1.00006ee300003338
+    87fdcb3a9309110a.93c2c796e49e2d8b.4cc96b17c1e26e36.dcea2b05c69c7421
+    9309110ae49e2d8b.04ba1927713ec590.c1e26e36c69c7421.916d0a2b5187c49b
     87fdcb3a93c2c796.fd1180d83b07f767.4cc96b17dcea2b05.45384bd16ee33338
     51033c1c28fc95f1.e558d08f74f27e92.c0dd61b2cbc838a3.b9ce7748ac9cd853
     cbf9097b27bc7119
-VPMOVSXWD_128(mem)
+VUNPCKHPS_256(mem)
   before
     55867e56fc51b7b5.4d68601b40d7d248.975a8439390c163d.77694c752ec1d6a6
     354151c547676954.d67933a377dfbc46.f1e518c0a55f7b96.ceba28cba26142bb
@@ -20081,12 +20081,12 @@
     2b433c7778a5b01c
   after
     55867e56fc51b7b5.4d68601b40d7d248.975a8439390c163d.77694c752ec1d6a6
-    0000000000000000.0000000000000000.0000776900004c75.00002ec1ffffd6a6
-    46f5fdb423094122.4a80b22068a18d98.cdc30812d5f969c7.211df220c234b78e
+    354151c547676954.d67933a377dfbc46.f1e518c0a55f7b96.ceba28cba26142bb
+    55867e56354151c5.fc51b7b547676954.975a8439f1e518c0.390c163da55f7b96
     6370000fac43fc4a.04cad8feafa781ea.09c1d019e4e69bfc.ccdca4e02bc773ca
     2b433c7778a5b01c
 
-VDIVPS_128(reg)
+VXORPD_256(reg)
   before
     9ba0b651455aab2f.697cd6c3ff2156f9.5fa2a1a9e980d6e7.7fabedc3ee31ce62
     763e0cda2f739fb0.35e6f9ba37b00a5b.b956098db1b5c63b.0d4ddafb10e6bd25
@@ -20094,12 +20094,12 @@
     e06b41aac9fe65ab.8b041b25c80f73e5.d67ea8b15d68699c.dde814c50bbfc270
     d7795a2f1bfb5051
   after
-    0000000000000000.0000000000000000.22572a1993c838f9.80000000449a04d0
+    6f5630a5fd0856fb.949c1e5b464bdcc0.d566049b156148af.803fc95676f79855
     763e0cda2f739fb0.35e6f9ba37b00a5b.b956098db1b5c63b.0d4ddafb10e6bd25
     19683c7fd27bc94b.a17ae7e171fbd69b.6c300d16a4d48e94.8d7213ad66112570
     e06b41aac9fe65ab.8b041b25c80f73e5.d67ea8b15d68699c.dde814c50bbfc270
     d7795a2f1bfb5051
-VDIVPS_128(mem)
+VXORPD_256(mem)
   before
     58f260d7b3d28b3e.279317c9b089af7d.cd50117159f6a067.518ad6c879fe94ff
     3d1fa2aaef4e2e63.4a2cba4624a7e26c.442945b03fbf174b.3ba193c993214c6a
@@ -20109,11 +20109,11 @@
   after
     58f260d7b3d28b3e.279317c9b089af7d.cd50117159f6a067.518ad6c879fe94ff
     3d1fa2aaef4e2e63.4a2cba4624a7e26c.442945b03fbf174b.3ba193c993214c6a
-    0000000000000000.0000000000000000.b650444e25465a8c.2994f69180000000
+    65edc27d5c9ca55d.6dbfad8f942e4d11.897954c16649b72c.6a2b4501eadfd895
     9ec4ca7dc06b9e08.93e0580f22cef654.42b659bc7c20d6ea.c81fab36333f4d07
     231ffe79f0520f91
 
-VDIVPS_128(reg)
+VXORPD_256(reg)
   before
     5c59d0561c224dd2.d3d5a9558e23e4e0.72944b32e3ee4fa4.800130600ad196fe
     d01a1d38533c4278.dcc9b4086fb182a0.9de8fb64a1d181c2.630a35a85e939024
@@ -20121,12 +20121,12 @@
     d46119bc4f7b459c.d58e3eacdc81b88a.46a383a582126216.8985bad5c7772458
     8390329113b137be
   after
-    0000000000000000.0000000000000000.96b6613b5f37324d.ff800000d698da1c
+    09b4ffb463176e54.4fa7d389ef93b6d4.edc19e7556d5489b.a497d129cae311ad
     d01a1d38533c4278.dcc9b4086fb182a0.9de8fb64a1d181c2.630a35a85e939024
     d9aee28c302b2c2c.936e678180223474.70296511f704c959.c79de48194708189
     d46119bc4f7b459c.d58e3eacdc81b88a.46a383a582126216.8985bad5c7772458
     8390329113b137be
-VDIVPS_128(mem)
+VXORPD_256(mem)
   before
     9288c8a2952c74e7.1d7fc0354db9c974.7ef5b674a0dac80b.7da2538ddd888aa5
     923af9f368f398fe.1053d264c670f660.6a7149c8e73a2126.7071d033a4f17bb1
@@ -20136,11 +20136,11 @@
   after
     9288c8a2952c74e7.1d7fc0354db9c974.7ef5b674a0dac80b.7da2538ddd888aa5
     923af9f368f398fe.1053d264c670f660.6a7149c8e73a2126.7071d033a4f17bb1
-    0000000000000000.0000000000000000.2afb63e87f800000.323ead9e06e26076
+    00b23151fddfec19.0d2c12518bc93f14.1484ffbc47e0e92d.0dd383be7979f114
     d5fc1804749783a8.65512890967a3621.7bd4b5bc6f3c9dd4.f9b3c26de9ccaaf2
     48bd2fd99e57617f
 
-VDIVPS_128(reg)
+VXORPD_256(reg)
   before
     c2c839b43006d139.d0a4ff9de38bc393.7e12646626e5c24f.58538635e9f638c1
     c520dc6a3a6336cd.2c35702615fcda1d.b1bafba1a0fae541.e81662e956e70cf5
@@ -20148,12 +20148,12 @@
     d2e6de17275cd332.7646e1b82c827bbc.d5ee2bf6c44fe320.919830ae7b9c4ee9
     61ef1a986a7834ff
   after
-    0000000000000000.0000000000000000.1b48fabf1c1a7b24.7f8000001abd34c5
+    6e31c80d629ff82a.e84898ad3609596c.eb2f110c01b939e2.efffa52b85fcd86a
     c520dc6a3a6336cd.2c35702615fcda1d.b1bafba1a0fae541.e81662e956e70cf5
     ab11146758fccee7.c47de88b23f58371.5a95eaada143dca3.07e9c7c2d31bd49f
     d2e6de17275cd332.7646e1b82c827bbc.d5ee2bf6c44fe320.919830ae7b9c4ee9
     61ef1a986a7834ff
-VDIVPS_128(mem)
+VXORPD_256(mem)
   before
     55b9ff6bbdbb420e.94ed35e64310825b.1d5dd99a49b07e29.7e13bce8a5a73564
     48c45d158f6f3642.4f70154046a3160e.958e4b1b988a48e5.b14e98efe2d9101c
@@ -20163,11 +20163,11 @@
   after
     55b9ff6bbdbb420e.94ed35e64310825b.1d5dd99a49b07e29.7e13bce8a5a73564
     48c45d158f6f3642.4f70154046a3160e.958e4b1b988a48e5.b14e98efe2d9101c
-    0000000000000000.0000000000000000.b7a4326f8e48946e.800000007ca62a01
+    1d7da27e32d4744c.db9d20a605b39455.88d39281d13a36cc.cf5d2407477e2578
     9ac8719b2260bbc7.1b1d60467897e1bf.676d8eae3b731ff9.243921edd9f84b98
     1d81c7bbcdfe25b2
 
-VANDPS_256(reg)
+VBROADCASTSD_256(reg)
   before
     1010a74f8b0d76f1.b25a1f501bb3c471.e6dfc4c9dd108e17.7ab35798c79aa5a8
     5931bf13afb27bff.395b368a03a9a2ef.184da1889b9812a7.ce448ad1f49de157
@@ -20175,12 +20175,12 @@
     5c5d85e09ceb8f3a.03de8c4112accd19.2461b6678f078a26.a8721ee5a2696e5f
     e7a878975b493611
   after
-    51300b1186306b89.081930020308006e.0805a18809980206.0e408241d4898010
+    1010a74f8b0d76f1.b25a1f501bb3c471.e6dfc4c9dd108e17.7ab35798c79aa5a8
     5931bf13afb27bff.395b368a03a9a2ef.184da1889b9812a7.ce448ad1f49de157
     53320b75d6786f89.0a993136f74e116e.0eb5f3ee4dbca71e.3eeaa347de899030
     5c5d85e09ceb8f3a.03de8c4112accd19.2461b6678f078a26.a8721ee5a2696e5f
     e7a878975b493611
-VANDPS_256(mem)
+VBROADCASTSD_256(mem)
   before
     d6572c492636a672.cfff2bc09c9717bf.fef7c39571d2921d.b69ee75fff05f76b
     534db6e71f3b78ad.0764f881720943c4.d9b052202fc91ba5.21b881423643299b
@@ -20189,12 +20189,12 @@
     072b9da5a8f0ba5a
   after
     d6572c492636a672.cfff2bc09c9717bf.fef7c39571d2921d.b69ee75fff05f76b
-    534db6e71f3b78ad.0764f881720943c4.d9b052202fc91ba5.21b881423643299b
-    5245244106322020.0764288010010384.d8b0420021c01205.209881423601210b
+    b69ee75fff05f76b.b69ee75fff05f76b.b69ee75fff05f76b.b69ee75fff05f76b
+    3854925e606568ef.62d8e88fbbcd4ef4.6ed5b6cd699f25de.bffb807cd24c5d60
     62393d9808bf3463.3ba6f756126d76fb.9b326a883a5f6bf4.edb3e0796faccf66
     072b9da5a8f0ba5a
 
-VANDPS_256(reg)
+VBROADCASTSD_256(reg)
   before
     69b1b46d19a35be7.aec8318330559637.ed1c22431477f487.3a93ea3dbe15aa12
     6f8f203b5f52eebb.f6cdec09f7334b94.d68463c05c760742.29c3b2d812ce9e65
@@ -20202,12 +20202,12 @@
     d786e79dd9d1d9e2.ee68a59bccf99d9f.b95d1d1e3085d7f6.62c40c7099779559
     662c9445037f0f51
   after
-    650200391600ae3b.1004e80876220b80.5000200004760140.0083324012840201
+    69b1b46d19a35be7.aec8318330559637.ed1c22431477f487.3a93ea3dbe15aa12
     6f8f203b5f52eebb.f6cdec09f7334b94.d68463c05c760742.29c3b2d812ce9e65
     7512dd7d1688af7f.1814e91876660fa8.502bb83b87f7e9d8.428f3f4552950319
     d786e79dd9d1d9e2.ee68a59bccf99d9f.b95d1d1e3085d7f6.62c40c7099779559
     662c9445037f0f51
-VANDPS_256(mem)
+VBROADCASTSD_256(mem)
   before
     289356b1adb92e2f.f1363b0944b9a98e.55979a7d12f9b2a5.6b668cd7f4ac0d48
     85c7cb9eb231ad1d.1f70d32cf4cd5b2f.296b46ac66710ae5.c39103d16ef9c679
@@ -20216,12 +20216,12 @@
     48dd6a7d3b376102
   after
     289356b1adb92e2f.f1363b0944b9a98e.55979a7d12f9b2a5.6b668cd7f4ac0d48
-    85c7cb9eb231ad1d.1f70d32cf4cd5b2f.296b46ac66710ae5.c39103d16ef9c679
-    00834290a0312c0d.113013084489090e.0103022c027102a5.430000d164a80448
+    6b668cd7f4ac0d48.6b668cd7f4ac0d48.6b668cd7f4ac0d48.6b668cd7f4ac0d48
+    599271fa2ff44a47.bc7ead7284982b73.47b12413e46d608b.1e2c7c783af74036
     81c2c3af3f0dbfda.26aec44791a75403.8935b09fa7f971c5.d681f538f532b42a
     48dd6a7d3b376102
 
-VANDPS_256(reg)
+VBROADCASTSD_256(reg)
   before
     d18cd5b3a791816a.d7213dabff89c802.b84a1517b684138e.ccc3673acb22f9bc
     cbda3446d5cc510d.387c5bd98a7323ea.ce9f9a4e90bea4be.ec26c4d16df3b49f
@@ -20229,12 +20229,12 @@
     8583bb34ea17f1b7.8b56747b73c2baac.f5a335a2d1722abe.339f60a49abfb1d3
     124c97b85cd16c7e
   after
-    8312000240440108.001c1901885302aa.c2991048909e003e.c424405129711498
+    d18cd5b3a791816a.d7213dabff89c802.b84a1517b684138e.ccc3673acb22f9bc
     cbda3446d5cc510d.387c5bd98a7323ea.ce9f9a4e90bea4be.ec26c4d16df3b49f
     931382a362750d98.809f9925fdd78abf.c3f95159bade423f.c52c4251a9795d98
     8583bb34ea17f1b7.8b56747b73c2baac.f5a335a2d1722abe.339f60a49abfb1d3
     124c97b85cd16c7e
-VANDPS_256(mem)
+VBROADCASTSD_256(mem)
   before
     3eff64770cbc4ac2.fd75db67073e3815.356c67c7093f6fde.bfeb4397700598e7
     938444cfc58b06ce.5736dfa658771f5e.5aafeef6da5a6481.7c1b75a23424c865
@@ -20243,12 +20243,12 @@
     0519c487713c399a
   after
     3eff64770cbc4ac2.fd75db67073e3815.356c67c7093f6fde.bfeb4397700598e7
-    938444cfc58b06ce.5736dfa658771f5e.5aafeef6da5a6481.7c1b75a23424c865
-    12844447048802c2.5534db2600361814.102c66c6081a6480.3c0b418230048865
+    bfeb4397700598e7.bfeb4397700598e7.bfeb4397700598e7.bfeb4397700598e7
+    eda7b2aba44a5dcc.f012c25f774de13f.d6e986f2021f56c0.8a80c931b85af5e5
     28332af7c4060ae8.225580fd004dbc64.85e7a9a89e9b01c8.44663aaf98335c13
     0519c487713c399a
 
-VXORPS_256(reg)
+VCMPPD_128_0x4(reg)
   before
     2be56327dfffc726.20f6299f42cacb50.4a4b15ec9001ea79.4375d505cada20c4
     101514fb7d0b4365.b1ba2a8f39a25a2d.c4407e98c2f7a829.ec5f85f3a1e671e1
@@ -20256,12 +20256,12 @@
     8bd599eaba27f5a6.0d7821f804bfd4fd.1d55b8d77ed8c20b.6e766237c19b932d
     003b8764425adeb3
   after
-    01e2c6969ae2aa64.06f6823bff382e83.283fcbf5f04c9909.b72fb0939e2bdfab
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     101514fb7d0b4365.b1ba2a8f39a25a2d.c4407e98c2f7a829.ec5f85f3a1e671e1
     11f7d26de7e9e901.b74ca8b4c69a74ae.ec7fb56d32bb3120.5b7035603fcdae4a
     8bd599eaba27f5a6.0d7821f804bfd4fd.1d55b8d77ed8c20b.6e766237c19b932d
     003b8764425adeb3
-VXORPS_256(mem)
+VCMPPD_128_0x4(mem)
   before
     ed8c20d3df18490b.d8fc65de9151a201.91091148101d3746.b50f82433fda9796
     1035a970b4e1915f.56b832b609f12dbe.1ecdf29105bf59b6.0ff7101b134dec6c
@@ -20271,11 +20271,11 @@
   after
     ed8c20d3df18490b.d8fc65de9151a201.91091148101d3746.b50f82433fda9796
     1035a970b4e1915f.56b832b609f12dbe.1ecdf29105bf59b6.0ff7101b134dec6c
-    fdb989a36bf9d854.8e44576898a08fbf.8fc4e3d915a26ef0.baf892582c977bfa
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     6dbf7ce573c1a6ac.501ec1be4ac9cc0c.c21a7cba1bffc9ba.798364c363b804ac
     41c0236b16c8406d
 
-VXORPS_256(reg)
+VCMPPD_128_0x4(reg)
   before
     3a5b952f4c79ec2a.5d37bd9495f0ecfe.85617ac74b1758f5.923b1c7375b690a6
     c2a1b77da157438e.f538df215f5afffc.5b6824635d0db2f0.dbbe9fd428e10469
@@ -20283,12 +20283,12 @@
     eb5ef76415cbe5fe.8900b4875a0c7baf.55f53d03221fbfcb.47193a3e0ac4ea22
     228a4b1f7194d370
   after
-    f67f34bd11b9c1c8.fab48158b250642f.77e8989e463aa459.a3d1e01d786de047
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     c2a1b77da157438e.f538df215f5afffc.5b6824635d0db2f0.dbbe9fd428e10469
     34de83c0b0ee8246.0f8c5e79ed0a9bd3.2c80bcfd1b3716a9.786f7fc9508ce42e
     eb5ef76415cbe5fe.8900b4875a0c7baf.55f53d03221fbfcb.47193a3e0ac4ea22
     228a4b1f7194d370
-VXORPS_256(mem)
+VCMPPD_128_0x4(mem)
   before
     e78c2e59a2085b45.456d0ed66d7aa761.3d605f36c36d5cbb.3213a3e10d53ea03
     70ec60d6b82d3dcc.9c56c5805385051b.0978da744338f923.1f26ea01785fd3fc
@@ -20298,11 +20298,11 @@
   after
     e78c2e59a2085b45.456d0ed66d7aa761.3d605f36c36d5cbb.3213a3e10d53ea03
     70ec60d6b82d3dcc.9c56c5805385051b.0978da744338f923.1f26ea01785fd3fc
-    97604e8f1a256689.d93bcb563effa27a.341885428055a598.2d3549e0750c39ff
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     42f69e4d05b802a3.b5eaff303be48548.55ff304af93d5abb.99590cba412ccee4
     de13df2cd605582a
 
-VXORPS_256(reg)
+VCMPPD_128_0x4(reg)
   before
     a3f183905be68fe2.4238a21f74365d4a.2f2c7b0d75501e11.8d0604ba688f9641
     4440f4546d5ab1b7.7707e4e538940254.167986d4ad4943e2.4cf597695e7c7fd4
@@ -20310,12 +20310,12 @@
     8a602ea9a62ca16b.f18013fc31211d40.9f643acc8913204b.d0bbf02f505446d0
     4c2aac2084579c91
   after
-    590bdbb7c5b449e1.c936056e564aacb8.de649b3b2d127385.236df028a973af74
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     4440f4546d5ab1b7.7707e4e538940254.167986d4ad4943e2.4cf597695e7c7fd4
     1d4b2fe3a8eef856.be31e18b6edeaeec.c81d1def805b3067.6f986741f70fd0a0
     8a602ea9a62ca16b.f18013fc31211d40.9f643acc8913204b.d0bbf02f505446d0
     4c2aac2084579c91
-VXORPS_256(mem)
+VCMPPD_128_0x4(mem)
   before
     bfb019feb025900e.e7c9ef1206a2e7a1.edc1f9279e680b79.f999dbd664fc503b
     061ab1b7efcadc74.90d46e8a61dc07a5.8ec00cf5d0c033c5.300afb79aea2fce2
@@ -20325,11 +20325,11 @@
   after
     bfb019feb025900e.e7c9ef1206a2e7a1.edc1f9279e680b79.f999dbd664fc503b
     061ab1b7efcadc74.90d46e8a61dc07a5.8ec00cf5d0c033c5.300afb79aea2fce2
-    b9aaa8495fef4c7a.771d8198677ee004.6301f5d24ea838bc.c99320afca5eacd9
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     7bcb586718c56eaa.35fb92577ec9c5c5.3027ad2df4d02346.a8cba93afe57b708
     a2b42f313b7d3ede
 
-VORPS_256(reg)
+VCVTDQ2PD_128(reg)
   before
     e90724705791311c.62a85d363a342cd2.eaaf2f847895da3a.e82833701ea164d2
     da128464ee1ecb6e.8c9a7f8fdfaa3392.5a357a71dd53b92c.b516d7067eb1cf20
@@ -20337,12 +20337,12 @@
     2a7c761dfad4e8fb.19e9078f24d80b8d.e0e308375edbc539.feec6adf4fc415b5
     326c51faf7de6854
   after
-    db1fcf7efebecb7f.ddfe7fdfffba3f97.fbf77ff9dfd3bf6f.f7bed7df7ebfef7d
-    da128464ee1ecb6e.8c9a7f8fdfaa3392.5a357a71dd53b92c.b516d7067eb1cf20
+    e90724705791311c.62a85d363a342cd2.eaaf2f847895da3a.e82833701ea164d2
+    0000000000000000.0000000000000000.41dcef8577400000.41c80790ae800000
     d11f4b7a9ab04a7f.d56c395e24323f17.e3d76f884b929e47.73be15dd300f215d
     2a7c761dfad4e8fb.19e9078f24d80b8d.e0e308375edbc539.feec6adf4fc415b5
     326c51faf7de6854
-VORPS_256(mem)
+VCVTDQ2PD_128(mem)
   before
     eb0a46194569d665.4173ffb8a715e18f.34de660efba9541f.aca343e9b1bc69ac
     0591c528546f1b14.7251e5b940ff72e7.0217d0c8c6b0d6fa.a5641b09e1c0c74c
@@ -20351,12 +20351,12 @@
     2ea42a3eb21993f7
   after
     eb0a46194569d665.4173ffb8a715e18f.34de660efba9541f.aca343e9b1bc69ac
-    0591c528546f1b14.7251e5b940ff72e7.0217d0c8c6b0d6fa.a5641b09e1c0c74c
-    ef9bc739556fdf75.7373ffb9e7fff3ef.36dff6ceffb9d6ff.ade75be9f1fcefec
+    0000000000000000.0000000000000000.c1d4d72f05c00000.c1d390e595000000
+    5ccf4a1341fef28e.1961218b5e1fd8af.5f60c3a7a1f94c49.25728c0589741bc6
     cb8e52c6272118ff.92f1b09aa0004c92.2785ba99a7917439.8a1992484563a0c6
     2ea42a3eb21993f7
 
-VORPS_256(reg)
+VCVTDQ2PD_128(reg)
   before
     6f604f546b233006.309b582e23e54992.394b8f529f2f0d3c.35523189f48308f6
     a79afdf40d0cb39e.66c2d83550554174.6abdb920f937555a.6792a563a5dbc4ab
@@ -20364,12 +20364,12 @@
     70b3e4867aac591c.b58d37d4ae6a74d4.da14dea92d026da1.a49f7085a1efa8af
     6603c1a525c24756
   after
-    b79efdff3d6cf7ff.6fcedefdda7dfbf5.ebbdbb6efbb775da.ff93b573f7ffe6af
-    a79afdf40d0cb39e.66c2d83550554174.6abdb920f937555a.6792a563a5dbc4ab
+    6f604f546b233006.309b582e23e54992.394b8f529f2f0d3c.35523189f48308f6
+    0000000000000000.0000000000000000.c1d9fb1bfb400000.c1c4acccbd800000
     349c308b3460576d.49ce4ec9ca7dbbd1.81912a6e4aa46198.98139013d6a66685
     70b3e4867aac591c.b58d37d4ae6a74d4.da14dea92d026da1.a49f7085a1efa8af
     6603c1a525c24756
-VORPS_256(mem)
+VCVTDQ2PD_128(mem)
   before
     bc0bfd5f7b2cfea5.b82a164f7e7bf559.85c90d44182728aa.d192d23e3fdeb422
     8182a19fc2388ac9.684fc154d95966d0.97504e0323c1927e.c25601971bc373c7
@@ -20378,12 +20378,12 @@
     0845c87b8623d742
   after
     bc0bfd5f7b2cfea5.b82a164f7e7bf559.85c90d44182728aa.d192d23e3fdeb422
-    8182a19fc2388ac9.684fc154d95966d0.97504e0323c1927e.c25601971bc373c7
-    bd8bfddffb3cfeed.f86fd75fff7bf7d9.97d94f473be7bafe.d3d6d3bf3fdff7e7
+    0000000000000000.0000000000000000.c1c73696e1000000.41cfef5a11000000
+    90362a5113f2a7ee.dd6ce1002ad3ea2d.c5ec76ffeb426f7d.08ae67225d3ee63b
     c7f113628d67113f.71cf72be0a74ba1b.ed6aff238db87bd2.01e4004aa2da492b
     0845c87b8623d742
 
-VORPS_256(reg)
+VCVTDQ2PD_128(reg)
   before
     781ebc21a3a5cd2d.0180d9bd49a284e9.81c271fc17c81546.ea96675b252f71ab
     afb8d7a898ed6698.19b0f64d65afbb18.6992d925ed5c355c.973b2893ceb20f31
@@ -20391,12 +20391,12 @@
     de67720974fd759b.571d2ac12c7167b3.31f8d4e96271b7f3.7524abb4c40c2dfa
     5eff637449fc2795
   after
-    affad7fcffefe6be.fdfafe4dfdbffbff.ed9bffa5efff775e.d73fe9bbeeff0fb3
-    afb8d7a898ed6698.19b0f64d65afbb18.6992d925ed5c355c.973b2893ceb20f31
+    781ebc21a3a5cd2d.0180d9bd49a284e9.81c271fc17c81546.ea96675b252f71ab
+    0000000000000000.0000000000000000.c1c6ec1f24000000.c1d6ecbc1b400000
     0862157cff86e02e.ed4ae800fd9b73f7.858ba6a527bb5706.d227c1b8a44d0f93
     de67720974fd759b.571d2ac12c7167b3.31f8d4e96271b7f3.7524abb4c40c2dfa
     5eff637449fc2795
-VORPS_256(mem)
+VCVTDQ2PD_128(mem)
   before
     678466e55028b78e.8f12ebbb94dd628d.34f4387c0f3e5477.ca275f5b390b91cd
     6d7f2ff1f49c9a12.75b07bfffab2e2ae.619a8e1dc10cf670.aa62446848142040
@@ -20405,12 +20405,12 @@
     9159e16be24368ed
   after
     678466e55028b78e.8f12ebbb94dd628d.34f4387c0f3e5477.ca275f5b390b91cd
-    6d7f2ff1f49c9a12.75b07bfffab2e2ae.619a8e1dc10cf670.aa62446848142040
-    6fff6ff5f4bcbf9e.ffb2fbfffeffe2af.75febe7dcf3ef677.ea675f7b791fb1cd
+    0000000000000000.0000000000000000.c1caec5052800000.41cc85c8e6800000
+    4dbc3a8652658c4c.ee8e1e3f430933aa.b8dca8905eea09c9.2ef67e7d2c19a1fa
     e106038f858e4869.54f6d0e90a6d8f2e.178703c103e149af.b12f090481a450a4
     9159e16be24368ed
 
-VANDNPD_256(reg)
+VDIVPD_128(reg)
   before
     29c0031deb82267f.062b07f8aa248b94.05348d68eb6a32e6.58651a9ccbff714e
     d5b06a8639ecc606.99f5c1addc3211fa.5b965228848d5a7d.5842690ed34f3ed1
@@ -20418,12 +20418,12 @@
     d959f72d12719ba6.74ab47abd8e7d426.6af2e11a477224fa.062ea06311b6b635
     6bd3801f80e6d96e
   after
-    2044101046010129.64002c1223c48405.a06008946a600180.a3ac040124904124
+    0000000000000000.0000000000000000.e820283b17f2339e.a444b9aafaefc031
     d5b06a8639ecc606.99f5c1addc3211fa.5b965228848d5a7d.5842690ed34f3ed1
     f1741212670d832f.7431ad9a37c495c7.b3661a946e6141a0.f3ec6d0136de6b65
     d959f72d12719ba6.74ab47abd8e7d426.6af2e11a477224fa.062ea06311b6b635
     6bd3801f80e6d96e
-VANDNPD_256(mem)
+VDIVPD_128(mem)
   before
     ffa888209d77903c.e9ab1543d5a54717.752f0cccdba58a44.da84a326ab4d3f38
     9e793554877799ca.7cb669c04d34c62c.538876e95b0d734c.60695c22357dcd06
@@ -20433,11 +20433,11 @@
   after
     ffa888209d77903c.e9ab1543d5a54717.752f0cccdba58a44.da84a326ab4d3f38
     9e793554877799ca.7cb669c04d34c62c.538876e95b0d734c.60695c22357dcd06
-    6180882018000034.8109140390810113.2427080480a08800.9a84a3048a003238
+    0000000000000000.0000000000000000.1e493687bd607ca7.c5d3a951693043ea
     6d3f6a022bf28cd8.a027a0a0ca9529f9.16ed2ec84304cccd.1f5ca59d2c0d3500
     0f012cf5d1858685
 
-VANDNPD_256(reg)
+VDIVPD_128(reg)
   before
     852a9bed0d823b49.55cbeb541f85efb0.e7247bda077e8508.b3907462e3acb59d
     dd21ecf37c9190f8.b88400894eb692f9.230b7b2c68f3a26c.9d394fa8712dc008
@@ -20445,12 +20445,12 @@
     a3ac29d6601209ca.5fa8d747cf248b8c.e6c2dcc409ae12e6.c8cdb9e7c5e7305d
     c14f3fb9c4390ba0
   after
-    22121100802c4107.4230250291002006.8c248400820c1d92.2084300508922b31
+    0000000000000000.0000000000000000.b3d371ba0afae41d.2c74022e35872317
     dd21ecf37c9190f8.b88400894eb692f9.230b7b2c68f3a26c.9d394fa8712dc008
     73331d72b83dc13f.7234258bd59232de.af269d008a7ebdd2.b0b43d850992ab39
     a3ac29d6601209ca.5fa8d747cf248b8c.e6c2dcc409ae12e6.c8cdb9e7c5e7305d
     c14f3fb9c4390ba0
-VANDNPD_256(mem)
+VDIVPD_128(mem)
   before
     77084ce71f93fa2d.c9d80c8b0d9da545.5bac91aa5878582e.262b34e3800cdd53
     c6c25a5ef501b731.4102c3fd5e69d15b.420ccf9f8d9b57f1.c9aca1c98b2659c5
@@ -20460,11 +20460,11 @@
   after
     77084ce71f93fa2d.c9d80c8b0d9da545.5bac91aa5878582e.262b34e3800cdd53
     c6c25a5ef501b731.4102c3fd5e69d15b.420ccf9f8d9b57f1.c9aca1c98b2659c5
-    310804a10a92480c.88d80c0201942404.19a010205060080e.2603142200088412
+    0000000000000000.0000000000000000.265022b307927828.e370d6981d4fce15
     9f6c6ed27b4b8d4c.978499c855f5c809.400fc8ee697bd589.ac2aac9ad0bc576b
     a3be415e415051f7
 
-VANDNPD_256(reg)
+VDIVPD_128(reg)
   before
     6f9cdb98b6cfec38.e0f36ca9653e1ebc.2d73b2f935ce0bfa.104a7a214951ceb6
     6a0d77b5ccc665db.2bad5b7738766e52.85918d982717cd36.3b11a1964425e7b3
@@ -20472,12 +20472,12 @@
     61e0a14a4949e1f5.4be601ad0be23aa2.ea8a7dccb32ec242.11733cf6fcf86bd0
     75a6a7baf10f4e47
   after
-    9160080212009800.5040a00801881128.7a2a2007c8480048.842018293202180c
+    0000000000000000.0000000000000000.0000000000000000.ddd0df5182c0cfc8
     6a0d77b5ccc665db.2bad5b7738766e52.85918d982717cd36.3b11a1964425e7b3
     f1600f221ec0f88b.5b64b92a11fe393a.fb2a280fc85e4c6a.9d30b8397603ddad
     61e0a14a4949e1f5.4be601ad0be23aa2.ea8a7dccb32ec242.11733cf6fcf86bd0
     75a6a7baf10f4e47
-VANDNPD_256(mem)
+VDIVPD_128(mem)
   before
     a394776f7254423e.14d82898e8ee5bc4.d9fdafeb422f2fb4.b0fc8a3984146c69
     790b27039ad403e3.6796a17a983aa3a5.e0763fd2d3f0d19c.a8ce4bc4d89a858c
@@ -20487,11 +20487,11 @@
   after
     a394776f7254423e.14d82898e8ee5bc4.d9fdafeb422f2fb4.b0fc8a3984146c69
     790b27039ad403e3.6796a17a983aa3a5.e0763fd2d3f0d19c.a8ce4bc4d89a858c
-    8294506c6000401c.1048088060c45840.19898029000f2e20.1030803904046861
+    0000000000000000.0000000000000000.4667fb904cfda172.37c0fc05c507d5e8
     89bf187451b2dbe1.5e8f55a799f88c4c.c8bdf74871ff13a1.9dbdd5e177bcf874
     5373964bfb6fc892
 
-VANDNPS_256(reg)
+VANDPD_256(reg)
   before
     aab7fc8271f3f95b.7c95502a17296a93.b96289ca2282a56a.612416b0b7652a15
     00d700f275d5c57b.8523596df50ab5a2.242b9e302be47b49.e41c076fc570e010
@@ -20499,12 +20499,12 @@
     15d7d62e99e02074.4d96cc4f683c7285.9acb5c76305d52fd.14f250a6b0a2184a
     7968a0f5c3e111e0
   after
-    b0089f0880202880.0014a60202604819.db14014650080496.0b6240103a0b10ae
+    0015000024804120.8120082905023120.2021900001a04800.201007628020e010
     00d700f275d5c57b.8523596df50ab5a2.242b9e302be47b49.e41c076fc570e010
     b01d9f08a4a069a0.8134ae2b07627939.fb35914651a84c96.2b724772ba2bf0be
     15d7d62e99e02074.4d96cc4f683c7285.9acb5c76305d52fd.14f250a6b0a2184a
     7968a0f5c3e111e0
-VANDNPS_256(mem)
+VANDPD_256(mem)
   before
     37a0b24d0ff59aae.8d4fa0d2f12227a3.c3132dc534a45cb1.5d3afd2e638cca29
     2b650399b2e96ddd.72d2f95e47f1bada.c1784f7a88a6f3ea.a0ce6fd886c3f0c7
@@ -20514,11 +20514,11 @@
   after
     37a0b24d0ff59aae.8d4fa0d2f12227a3.c3132dc534a45cb1.5d3afd2e638cca29
     2b650399b2e96ddd.72d2f95e47f1bada.c1784f7a88a6f3ea.a0ce6fd886c3f0c7
-    1480b0440d149222.8d0d0080b0020521.0203208534000c11.5d309026610c0a28
+    2320020902e1088c.0042a05241202282.c1100d4000a450a0.000a6d080280c001
     20ca4ebd66a2e415.f72849e35e67740f.c02ac34c36aa1632.1695b7b70e763407
     005f85c2ab0bcb02
 
-VANDNPS_256(reg)
+VANDPD_256(reg)
   before
     db7f1471a9d7001e.da01416db1800075.4e9438b358261265.7a0f0e43c9c41a99
     023f602fa2670e08.3af662c1c16d56e7.833aa61cc0a22c72.2c0b082752a8bcbd
@@ -20526,12 +20526,12 @@
     a4d22089fb00a7f4.57492005a1a9a2b3.f867f0694c03c364.e37cfe6bbcfec4e9
     a188f2a2d589a44a
   after
-    d1c0054015003063.00010c243212a118.704510823348d181.90e027c0a0420240
+    002c602920460208.1a74228180650280.8322800800202c62.200b08265020b489
     023f602fa2670e08.3af662c1c16d56e7.833aa61cc0a22c72.2c0b082752a8bcbd
     d1ec65693546326b.1a752ea5b277a398.f367908a3368fde3.b0eb2fe6f062b6c9
     a4d22089fb00a7f4.57492005a1a9a2b3.f867f0694c03c364.e37cfe6bbcfec4e9
     a188f2a2d589a44a
-VANDNPS_256(mem)
+VANDPD_256(mem)
   before
     c6dc8577540f1018.d63d8cfc9221ab4e.cd40b4ceaa101165.ef86c425a7ffb8a0
     2e4335d6589ac57f.c579a52f96367827.582466eae8b7aada.3410072be1e91844
@@ -20541,11 +20541,11 @@
   after
     c6dc8577540f1018.d63d8cfc9221ab4e.cd40b4ceaa101165.ef86c425a7ffb8a0
     2e4335d6589ac57f.c579a52f96367827.582466eae8b7aada.3410072be1e91844
-    c09c802104051000.120408d000018348.8540900402001125.cb86c0040616a0a0
+    06400556500a0018.c439842c92202806.480024caa8100040.24000421a1e91800
     377ed9e258f4f9c5.4692ce81536a5f00.1de615d074f64cbb.1994cac160b40d73
     70264329deae1955
 
-VANDNPS_256(reg)
+VANDPD_256(reg)
   before
     85531b8ba9c5814f.90e9c5688edbf0fd.9108d77844a1f259.0f5c0970faa6cd7f
     b4674e526085800d.9c99be27b7f8207e.07807ddf11fb3edf.86f00c1526c669b6
@@ -20553,12 +20553,12 @@
     d073b5bffc323683.3df2c40453051a0a.e8a091aab24af325.73a12d1bde87e12c
     a1564355a24135c2
   after
-    498890a89c7a5332.2346010848074400.0043802046044120.580d92aa11209408
+    1026484200010009.14113e05a7500074.06003c0111013e1f.0660080002424884
     b4674e526085800d.9c99be27b7f8207e.07807ddf11fb3edf.86f00c1526c669b6
     59aed8ea9c7b533b.37573f0def574474.0643bc2157057f3f.5e6d9aaa1362dc8c
     d073b5bffc323683.3df2c40453051a0a.e8a091aab24af325.73a12d1bde87e12c
     a1564355a24135c2
-VANDNPS_256(mem)
+VANDPD_256(mem)
   before
     c35957427c9a947c.7504e23d19376494.8a35c9faff0d5c6c.0be2f6e6bd56d43c
     b776e5cf87a0ba84.a4ab5ad091141b18.f9ebcbda0e7bc6c7.c954e94114b65f31
@@ -20568,11 +20568,11 @@
   after
     c35957427c9a947c.7504e23d19376494.8a35c9faff0d5c6c.0be2f6e6bd56d43c
     b776e5cf87a0ba84.a4ab5ad091141b18.f9ebcbda0e7bc6c7.c954e94114b65f31
-    40091200781a0478.5104a02d08236484.02140020f1041828.02a216a6a940800c
+    8350454204809004.2400421011140010.8821c9da0e094444.0940e04014165430
     822d5f7aa2e1492f.106e1ce6018c0e2b.b2e4b208c6bb0617.8afb6605189f6263
     44c8e945fd4052f9
 
-VORPD_256(reg)
+VPMOVSXBW_128(reg)
   before
     0bf6e8559f65db1c.10604470e9352b2b.04225d40313ec412.b3be902ea7a45364
     39d1619f989a3b79.e0dc93b6d264c325.f31dda602bf9f11d.463c5bee5c24b85a
@@ -20580,12 +20580,12 @@
     3ebcaf9605616b90.b2e260e1f98808c6.2f17759eeebba24d.9753a4edb016bdef
     0b841b0387a1d5e6
   after
-    3bf56f9f9efabffd.edfedbb7fb7ccf6f.fbbfdef1abf9f1ff.4f3ddffe5c66fa7e
-    39d1619f989a3b79.e0dc93b6d264c325.f31dda602bf9f11d.463c5bee5c24b85a
+    0bf6e8559f65db1c.10604470e9352b2b.04225d40313ec412.b3be902ea7a45364
+    0000000000000000.0000000000000000.00490029ff8d0034.00000046fff20024
     2ba44f91866aacbc.cd6ec837797cce4a.38aa8eb18b49d1f7.49298d340046f224
     3ebcaf9605616b90.b2e260e1f98808c6.2f17759eeebba24d.9753a4edb016bdef
     0b841b0387a1d5e6
-VORPD_256(mem)
+VPMOVSXBW_128(mem)
   before
     83896e64a2f2f636.cc657b1ab00bb4a1.6d04d59f6e942cc4.33ae8c95efdb9eca
     d92f1afa1c16db0a.32ebb18924f5c29d.d89fa55df5adf871.a2bccd012b33021b
@@ -20594,12 +20594,12 @@
     02a76e3c560df4bb
   after
     83896e64a2f2f636.cc657b1ab00bb4a1.6d04d59f6e942cc4.33ae8c95efdb9eca
-    d92f1afa1c16db0a.32ebb18924f5c29d.d89fa55df5adf871.a2bccd012b33021b
-    dbaf7efebef6ff3e.feeffb9bb4fff6bd.fd9ff5dfffbdfcf5.b3becd95effb9edb
+    0000000000000000.0000000000000000.0033ffaeff8cff95.ffefffdbff9effca
+    eb3f99b31117418f.cc9a4c4ffcaad22d.d1814b08a9de26f8.d78d364e3e510aeb
     9388697a9e03e3f1.f6be48d8d5b62000.3274448aa7337286.2d6dc2e9c3c0f1e8
     02a76e3c560df4bb
 
-VORPD_256(reg)
+VPMOVSXBW_128(reg)
   before
     b08934b494c34f13.afd5053bdfe67e5b.0ca2a2914aa6e7c0.d9450ad00ab99a46
     955d12be186e3e99.19f1eae2efcbcefa.6a9454e4f7056419.a0c01bc7ef7b5865
@@ -20607,12 +20607,12 @@
     700e033464d5c6e6.4bca7b92edcb7d86.6ecdb50c6c417049.02e40b74ade5896f
     5424e203bea473b2
   after
-    9f7d13fe7ffffefd.bffbfafbefffcffa.6ede5cfeff5ff7b9.e4f1fbdfffff796f
-    955d12be186e3e99.19f1eae2efcbcefa.6a9454e4f7056419.a0c01bc7ef7b5865
+    b08934b494c34f13.afd5053bdfe67e5b.0ca2a2914aa6e7c0.d9450ad00ab99a46
+    0000000000000000.0000000000000000.0064ffb1fff20059.0071ff860069000f
     0b7003c47f9bfcfc.aeaa925beabe8ffa.6cde5c3e795fd3b9.64b1f2597186690f
     700e033464d5c6e6.4bca7b92edcb7d86.6ecdb50c6c417049.02e40b74ade5896f
     5424e203bea473b2
-VORPD_256(mem)
+VPMOVSXBW_128(mem)
   before
     373ff4f2c1cfe404.1e830e7863a8d804.ca1e207414ff53ca.ccad5cb96a367678
     88ffbc2dd1739890.731b21fe19a06d01.0871fdeb7a65cef4.e2ca4bb012cb22f0
@@ -20621,12 +20621,12 @@
     0b85a99213bc61c9
   after
     373ff4f2c1cfe404.1e830e7863a8d804.ca1e207414ff53ca.ccad5cb96a367678
-    88ffbc2dd1739890.731b21fe19a06d01.0871fdeb7a65cef4.e2ca4bb012cb22f0
-    bffffcffd1fffc94.7f9b2ffe7ba8fd05.ca7ffdff7effdffe.eeef5fb97aff76f8
+    0000000000000000.0000000000000000.ffccffad005cffb9.006a003600760078
+    2131b6a00b9b4a82.c9213731224ac38a.e1918fe43b0aa92d.0c6f805ffe8bb05d
     dfa15e378a54b707.7de24c7d1932134a.3249504c74f9a2a4.a6eaf631ca025c6c
     0b85a99213bc61c9
 
-VORPD_256(reg)
+VPMOVSXBW_128(reg)
   before
     998d95ee7446fc1f.9e1b30de6aa99b4b.ecab5c4e9be29cee.d564be0e403e7383
     ab4eb7b28a2b691b.3a6aa981c8a6b27a.70c6641043e89822.a7af5416bce6d8f6
@@ -20634,12 +20634,12 @@
     ca2a8a1d4338a7b4.7abb7d6c6cc96746.2a2448187624dce8.4805e9a7328c524b
     cfa8e00964a2de85
   after
-    bf5ebffafafbeb7b.bf7eed8dc8feb7ff.76ff7e30eff8dcb3.a7ffde5fbfffdfff
-    ab4eb7b28a2b691b.3a6aa981c8a6b27a.70c6641043e89822.a7af5416bce6d8f6
+    998d95ee7446fc1f.9e1b30de6aa99b4b.ecab5c4e9be29cee.d564be0e403e7383
+    0000000000000000.0000000000000000.ff84fff6ff8e004f.0003fffbff8f002b
     9d140a48f0f8e369.8f5c440dc058b7bf.667f5e30add04491.84f68e4f03fb8f2b
     ca2a8a1d4338a7b4.7abb7d6c6cc96746.2a2448187624dce8.4805e9a7328c524b
     cfa8e00964a2de85
-VORPD_256(mem)
+VPMOVSXBW_128(mem)
   before
     f5aaef62b54bef03.90de339e1e77f1a9.d554d08ceb087e3d.18001e3539739cd2
     96d9929c429240f1.4a7a02351d41fdf3.7df3ba58571eb7cd.8d5edaf49346bffc
@@ -20648,12 +20648,12 @@
     a582522e4058d7b0
   after
     f5aaef62b54bef03.90de339e1e77f1a9.d554d08ceb087e3d.18001e3539739cd2
-    96d9929c429240f1.4a7a02351d41fdf3.7df3ba58571eb7cd.8d5edaf49346bffc
-    f7fbfffef7dbeff3.dafe33bf1f77fdfb.fdf7fadcff1efffd.9d5edef5bb77bffe
+    0000000000000000.0000000000000000.00180000001e0035.00390073ff9cffd2
+    8eff45a427848e7d.534bf150dd23063f.4e64b6bccc19d025.e38b7ac01f2b8212
     b9e985677f2c95d0.099dfe5afaa94938.237340a36704836f.77d3f8047aad20bf
     a582522e4058d7b0
 
-VPERMILPS_256_0x0F(reg)
+VPSUBUSW_128(reg)
   before
     c9e484a90bb9e190.f363cdcf66961019.c6bc24bf0f5d028c.daebd4fb43ec8cd7
     3f4588e1795b7b0c.183999caf9cfbd82.e8f460ebb8cd6ce4.4e9aeeb07ddca98a
@@ -20661,12 +20661,12 @@
     9133fb39ad934d87.9228ad2592db9765.c7de0648390f4656.ddc8a6dc79050a81
     b0e03b2c7356c61b
   after
-    c9e484a90bb9e190.f363cdcf66961019.c6bc24bf0f5d028c.daebd4fb43ec8cd7
-    54e2563754e25637.63f05c4263f05c42.30e094b430e094b4.c990ac4ac990ac4a
+    0000000000000000.0000000000000000.21165aa37fbe268e.000047d404d79f09
+    3f4588e1795b7b0c.183999caf9cfbd82.e8f460ebb8cd6ce4.4e9aeeb07ddca98a
     63f05c4226cae0d0.0436654354e25637.c990ac4a9284c4ef.5b4a0bac30e094b4
     9133fb39ad934d87.9228ad2592db9765.c7de0648390f4656.ddc8a6dc79050a81
     b0e03b2c7356c61b
-VPERMILPS_256_0x0F(mem)
+VPSUBUSW_128(mem)
   before
     af5e46893adf85b1.25586130ab41fede.a0d9ee5ecfc73e38.3c28695148f92ec8
     b80d44ddebad036d.7aac8a94bb612f80.0916a3d928b105db.85bbd1d25bceb7ef
@@ -20675,12 +20675,12 @@
     f1210155c84a755e
   after
     af5e46893adf85b1.25586130ab41fede.a0d9ee5ecfc73e38.3c28695148f92ec8
-    ab41fede25586130.af5e46893adf85b1.48f92ec83c286951.a0d9ee5ecfc73e38
-    a6bbb016a2cbfc7c.ee7a73d27a7e1b1a.a9ab4882b8a5a97b.ffe33b350f1b1e78
+    b80d44ddebad036d.7aac8a94bb612f80.0916a3d928b105db.85bbd1d25bceb7ef
+    0000000000000000.0000000000000000.0000000000000000.4993688112d58927
     5532061f7a462b09.dc1017548324ff58.5b6459469cb0e544.04eca1e8ff6b9f0e
     f1210155c84a755e
 
-VPERMILPS_256_0x0F(reg)
+VPSUBUSW_128(reg)
   before
     23d056ea0545dd13.a03fc2e48f284e41.a0b9728872df17e5.fd0d530fefdd7661
     f4439d1253e713da.65ae6050fe7f1e50.95c080d9e43c9f6e.6a71b1cace3818ff
@@ -20688,12 +20688,12 @@
     e6a8edcb8f51d84d.c9e134d359babca0.871ba682bf0aed22.149e89c79eaa7e6c
     09fefce1c7d9bb93
   after
-    23d056ea0545dd13.a03fc2e48f284e41.a0b9728872df17e5.fd0d530fefdd7661
-    e3575a61e3575a61.c1c7d039c1c7d039.54ce874954ce8749.19723db319723db3
+    0000000000000000.0000000000000000.0ea5000025320000.55d328032f8e0000
+    f4439d1253e713da.65ae6050fe7f1e50.95c080d9e43c9f6e.6a71b1cace3818ff
     c1c7d0394dbc535f.7e4b5d51e3575a61.19723db374c6d29e.7d5eef6454ce8749
     e6a8edcb8f51d84d.c9e134d359babca0.871ba682bf0aed22.149e89c79eaa7e6c
     09fefce1c7d9bb93
-VPERMILPS_256_0x0F(mem)
+VPSUBUSW_128(mem)
   before
     3a4ac29deb66f7ec.bf32ef34b631df51.203e61c07cb7013b.3a07b6b261932ca5
     814e59e7285df1a0.a8b1d2e05ee8a416.612c60056957e55c.908269aff4edcad5
@@ -20702,12 +20702,12 @@
     f5432dad775c3c1f
   after
     3a4ac29deb66f7ec.bf32ef34b631df51.203e61c07cb7013b.3a07b6b261932ca5
-    b631df51bf32ef34.3a4ac29deb66f7ec.61932ca53a07b6b2.203e61c07cb7013b
-    bcd53caa97ca63dd.fd70933b22036249.6678ad8e3ba8232f.e4d8bbe517a5045b
+    814e59e7285df1a0.a8b1d2e05ee8a416.612c60056957e55c.908269aff4edcad5
+    0000000000000000.0000000000000000.40ee00000000e421.567b0000935a9e30
     c5ade8d456ba0acf.1abd2cb29f0d5796.0deec5480fb579e1.9154a9c0644616e6
     f5432dad775c3c1f
 
-VPERMILPS_256_0x0F(reg)
+VPSUBUSW_128(reg)
   before
     6af14516ec73b1b5.79a0d7518138a2a2.5be29baf7093bda8.305a231e008aa09e
     4eaaed696118b252.b57b870b3251e781.1c2cdba03120d02c.ac8843fb2b345791
@@ -20715,12 +20715,12 @@
     ce6dd97ab43a4753.301917ea9d816615.8e5ebf0af57ff138.2059ba7f9d3560cb
     cf9409fd1ca42b6a
   after
-    6af14516ec73b1b5.79a0d7518138a2a2.5be29baf7093bda8.305a231e008aa09e
-    880f9499880f9499.fbba1f11fbba1f11.abbe58e7abbe58e7.b9e7e9efb9e7e9ef
+    0000000000000000.0000000000000000.00001c9600000000.8c2f000000000000
+    4eaaed696118b252.b57b870b3251e781.1c2cdba03120d02c.ac8843fb2b345791
     fbba1f116fd77ba3.530a73ef880f9499.b9e7e9ef7f40cecd.5e43a2cdabbe58e7
     ce6dd97ab43a4753.301917ea9d816615.8e5ebf0af57ff138.2059ba7f9d3560cb
     cf9409fd1ca42b6a
-VPERMILPS_256_0x0F(mem)
+VPSUBUSW_128(mem)
   before
     47c10a33441775f0.240e150fcccf530f.2874efe68db01822.f7df5b5c306a7519
     65ac390d329af988.57ebd23e5222db82.18e678d175aa68eb.50b4b851cb8c981b
@@ -20729,12 +20729,12 @@
     922a2e3af8b70aa3
   after
     47c10a33441775f0.240e150fcccf530f.2874efe68db01822.f7df5b5c306a7519
-    cccf530f240e150f.47c10a33441775f0.306a7519f7df5b5c.2874efe68db01822
-    03211377023a745f.c44e0973e2bd1b59.da3c2d95707a109d.f52bd255637294eb
+    65ac390d329af988.57ebd23e5222db82.18e678d175aa68eb.50b4b851cb8c981b
+    0000000000000000.0000000000000000.00000000000050c9.00005cf59b222302
     feeb125ecf03a1a0.c884b718192e4e40.4b438a209b2dcc64.428ea5d493a6a634
     922a2e3af8b70aa3
 
-VPERMILPS_256_0xFA(reg)
+VPSUBSW_128(reg)
   before
     434a68f42d2efbe3.32d8b4acb5ff3e78.bdd9d99a9301b1e2.47c50b5d11ce5a6b
     b03c4f6ccf99b6a2.7bb2744fd13c0513.00986a65ebc080ec.aa8f2d38ef6974df
@@ -20742,12 +20742,12 @@
     2dc2154ac8797a47.bc603f4019a70340.e088ca87a63851e6.152a407850be3fbc
     d5932bb50d91677e
   after
-    434a68f42d2efbe3.32d8b4acb5ff3e78.bdd9d99a9301b1e2.47c50b5d11ce5a6b
-    344bdf10344bdf10.7983778979837789.ed0f66e6ed0f66e6.bdf9f609bdf9f609
+    0000000000000000.0000000000000000.20107fff45888000.9565ecc09eab3523
+    b03c4f6ccf99b6a2.7bb2744fd13c0513.00986a65ebc080ec.aa8f2d38ef6974df
     344bdf1079837789.b546cf313ec5b29c.ed0f66e6bdf9f609.506c6b9d500ad7eb
     2dc2154ac8797a47.bc603f4019a70340.e088ca87a63851e6.152a407850be3fbc
     d5932bb50d91677e
-VPERMILPS_256_0xFA(mem)
+VPSUBSW_128(mem)
   before
     6c74a541a08d0c5c.f6eeeb885706fa85.6ccc42677eedb22a.355190b64108ca2f
     b69a2c0627c0ea83.ea1b5f35c2b634f2.a156539287a37c87.49b4b6de2bf5a08f
@@ -20756,12 +20756,12 @@
     8e763b64d7e49ff5
   after
     6c74a541a08d0c5c.f6eeeb885706fa85.6ccc42677eedb22a.355190b64108ca2f
-    6c74a541a08d0c5c.f6eeeb88f6eeeb88.6ccc42677eedb22a.355190b6355190b6
-    8fcf3af2be35bc1e.67956cbda6166438.37c9eead53d61d83.76fe376bff8b0db3
+    b69a2c0627c0ea83.ea1b5f35c2b634f2.a156539287a37c87.49b4b6de2bf5a08f
+    0000000000000000.0000000000000000.8000112b80007fff.14632628eaedd660
     d3df4eef80f9405a.c7a80f8c9fb0c504.0af390a4fb915049.197a0fc95a574f46
     8e763b64d7e49ff5
 
-VPERMILPS_256_0xFA(reg)
+VPSUBSW_128(reg)
   before
     313cb5a813be3c6c.5e98e1eb89173062.689f420e48139401.f69eb3639ee0d206
     5d1a7b01a9726056.0bc470d1f69b4864.a4c803af3dc80ddc.d697d5d655d05fe5
@@ -20769,12 +20769,12 @@
     c549d9a355963035.40a9740b6a07e400.61db1cff7d5eecda.e7a3048975c089bc
     cf4d08a015d99e0b
   after
-    313cb5a813be3c6c.5e98e1eb89173062.689f420e48139401.f69eb3639ee0d206
-    705a88db705a88db.368b4860368b4860.d86d4ddbd86d4ddb.1b5d6c401b5d6c40
+    0000000000000000.0000000000000000.8000e6b0c06a2102.eef4d14de0107fff
+    5d1a7b01a9726056.0bc470d1f69b4864.a4c803af3dc80ddc.d697d5d655d05fe5
     705a88db368b4860.b831788de2924689.d86d4ddb1b5d6c40.88aa71e93e6cb313
     c549d9a355963035.40a9740b6a07e400.61db1cff7d5eecda.e7a3048975c089bc
     cf4d08a015d99e0b
-VPERMILPS_256_0xFA(mem)
+VPSUBSW_128(mem)
   before
     1b76fb1c3bc2ae2d.b83368c3a21e5382.7ff9e037a906dff3.995e6d850055ca56
     a9e858e80287744d.a56333a9baafeef3.50ed38fdbc9cf28e.dd413bdb3fd0425f
@@ -20783,12 +20783,12 @@
     8a2a6bee80cd9b85
   after
     1b76fb1c3bc2ae2d.b83368c3a21e5382.7ff9e037a906dff3.995e6d850055ca56
-    1b76fb1c3bc2ae2d.b83368c3b83368c3.7ff9e037a906dff3.995e6d85995e6d85
-    54709bf08635ad98.e82735bf39d53d33.9150f949bed4dafe.8ad2816bd75b8fa2
+    a9e858e80287744d.a56333a9baafeef3.50ed38fdbc9cf28e.dd413bdb3fd0425f
+    0000000000000000.0000000000000000.d0f458c61396129b.43e3ce563f7b7809
     f7da4020e4d71539.dcc96a73ba1d7cef.1df09e08ccbb536f.fa5c3ea36380efcb
     8a2a6bee80cd9b85
 
-VPERMILPS_256_0xFA(reg)
+VPSUBSW_128(reg)
   before
     968905b8c9ced27c.70f2c4643779675d.df97cf30d912e6d2.cf97a324015b190c
     7ac5096ddb0dce5d.9983a2a89c286130.4cdb5e623341b889.8513848b7ac2e702
@@ -20796,12 +20796,12 @@
     3b033c48c77b088d.6f445ce00bdb3791.d3f7efd5067a8322.69b5cbe6a6148ea8
     4f7329b39116dfaf
   after
-    968905b8c9ced27c.70f2c4643779675d.df97cf30d912e6d2.cf97a324015b190c
-    932a7279932a7279.5118ccd45118ccd4.7ee115757ee11575.64352dbf64352dbf
+    0000000000000000.0000000000000000.78e46e8d2cc73567.8000b8a57fff585a
+    7ac5096ddb0dce5d.9983a2a89c286130.4cdb5e623341b889.8513848b7ac2e702
     932a72795118ccd4.505b56d82fefbddd.7ee1157564352dbf.192ebd2852fc7b7d
     3b033c48c77b088d.6f445ce00bdb3791.d3f7efd5067a8322.69b5cbe6a6148ea8
     4f7329b39116dfaf
-VPERMILPS_256_0xFA(mem)
+VPSUBSW_128(mem)
   before
     a936537a2f0e28c0.cf9e6446dac1be33.d40b31ad4cf68d78.a568e9eeb89df45b
     51c8c5279d092605.ab45e5e026762972.597c4f290f4f79bd.527ffd2d1328bd19
@@ -20810,12 +20810,12 @@
     0ba7b6fe3ebc7e1e
   after
     a936537a2f0e28c0.cf9e6446dac1be33.d40b31ad4cf68d78.a568e9eeb89df45b
-    a936537a2f0e28c0.cf9e6446cf9e6446.d40b31ad4cf68d78.a568e9eea568e9ee
-    24f7fca6f71295aa.2b45ba80462686f7.dc6334426fefb88c.358a29fcb6aa1905
+    51c8c5279d092605.ab45e5e026762972.597c4f290f4f79bd.527ffd2d1328bd19
+    0000000000000000.0000000000000000.7fff1d7cc2597fff.7fff133f5a8bc8be
     ff8d73e3583631dc.abebe194d65e106e.378c5ce288e40613.a9d368c93aac46ce
     0ba7b6fe3ebc7e1e
 
-VPERMILPS_256_0xA3(reg)
+VPCMPEQW_128(reg)
   before
     b85110095b66fda2.bc57a6cbdc80b5c7.8780568673a90583.47c241f778391e7c
     0a1f70552f340105.38201148a0fcde96.1b5313c4b9949fe1.e9d3616c58fbbdf3
@@ -20823,12 +20823,12 @@
     115337606b72831a.dee480b556bb0e92.dadf5ad1ad76b429.4eb13e265ef37fbe
     ca17f543bb411a69
   after
-    b85110095b66fda2.bc57a6cbdc80b5c7.8780568673a90583.47c241f778391e7c
-    56b4c4f456b4c4f4.bfb667765f5cd44e.43a91b3443a91b34.46349fa5c2af16b9
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0a1f70552f340105.38201148a0fcde96.1b5313c4b9949fe1.e9d3616c58fbbdf3
     5f5cd44e56b4c4f4.50b63048bfb66776.c2af16b943a91b34.f789362d46349fa5
     115337606b72831a.dee480b556bb0e92.dadf5ad1ad76b429.4eb13e265ef37fbe
     ca17f543bb411a69
-VPERMILPS_256_0xA3(mem)
+VPCMPEQW_128(mem)
   before
     4787d570792c2cd3.7d5195f70af87a24.bf757c7d80168d17.be30db789487a86c
     a1cc5c9ab5bf7127.ffa2eb7fd0d4e4be.cf36a08b5ad4a031.caee961a936730a8
@@ -20837,12 +20837,12 @@
     75aef41b3b5aa6ef
   after
     4787d570792c2cd3.7d5195f70af87a24.bf757c7d80168d17.be30db789487a86c
-    792c2cd34787d570.7d5195f70af87a24.80168d17bf757c7d.be30db789487a86c
-    b5b405ab8b07a492.f49234645992fe93.eaf368cbff00050b.5a65852347a28b8a
+    a1cc5c9ab5bf7127.ffa2eb7fd0d4e4be.cf36a08b5ad4a031.caee961a936730a8
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     5d094c91160f8240.b66d6c1340bc0450.ec7851298ca676d2.c9e1a6004bc5f4be
     75aef41b3b5aa6ef
 
-VPERMILPS_256_0xA3(reg)
+VPCMPEQW_128(reg)
   before
     b9176be2b5f0ddca.7698ad3672e3c75c.a27e8ff621e031a0.b191d5911cd3b0b1
     f06a08bf5210d7fa.dc2da588bc902e13.1413997b998ac230.150972efcc916fd5
@@ -20850,12 +20850,12 @@
     abf9a0706b23ff0b.ff9946e088a25600.faf45417bc9d00bf.2a4ae53df9f66a9b
     93aab306afb41f95
   after
-    b9176be2b5f0ddca.7698ad3672e3c75c.a27e8ff621e031a0.b191d5911cd3b0b1
-    b048ce2cb048ce2c.0f21759078f1c620.4344f3ac4344f3ac.b7ef6e6a6876870c
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    f06a08bf5210d7fa.dc2da588bc902e13.1413997b998ac230.150972efcc916fd5
     78f1c620b048ce2c.6b94ae720f217590.6876870c4344f3ac.f4aea42fb7ef6e6a
     abf9a0706b23ff0b.ff9946e088a25600.faf45417bc9d00bf.2a4ae53df9f66a9b
     93aab306afb41f95
-VPERMILPS_256_0xA3(mem)
+VPCMPEQW_128(mem)
   before
     0b9a8874f5354883.e7ce951b1e2ea644.7307e9be421f8d8f.26d9fc079f1e2416
     6ee6e275e683a392.86bb9e8c65f4fe83.a5ac11f85aa5d868.48717b4889559c5c
@@ -20864,12 +20864,12 @@
     0a61dc2985b15385
   after
     0b9a8874f5354883.e7ce951b1e2ea644.7307e9be421f8d8f.26d9fc079f1e2416
-    f53548830b9a8874.e7ce951b1e2ea644.421f8d8f7307e9be.26d9fc079f1e2416
-    98593df49eaceaee.e60eb932dd014573.70523c7aeb40f1b8.bc07cd4615cda43e
+    6ee6e275e683a392.86bb9e8c65f4fe83.a5ac11f85aa5d868.48717b4889559c5c
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     65c113dd3abcd9c2.6111e07622e2b4c1.b0c6e53012fa95aa.dee9ef6de0127868
     0a61dc2985b15385
 
-VPERMILPS_256_0xA3(reg)
+VPCMPEQW_128(reg)
   before
     9cbc90e7a1357242.b0e8e21bd5bd2e3b.551211c5ce228a19.41d48806eae17f6b
     f0460711cf2b104a.579b259c8cbda384.1c5b488b804d0126.ff48a1e990016c26
@@ -20877,12 +20877,12 @@
     4e17305dd29abdee.25d5f715bce8df38.97f7b42d6096c511.71912682b3183f3d
     defe8a1169299cf1
   after
-    9cbc90e7a1357242.b0e8e21bd5bd2e3b.551211c5ce228a19.41d48806eae17f6b
-    ab1e6b4aab1e6b4a.7bc8f5ca624b3e14.d2f05695d2f05695.1f64180913397f35
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    f0460711cf2b104a.579b259c8cbda384.1c5b488b804d0126.ff48a1e990016c26
     624b3e14ab1e6b4a.35a6584c7bc8f5ca.13397f35d2f05695.c5edadc31f641809
     4e17305dd29abdee.25d5f715bce8df38.97f7b42d6096c511.71912682b3183f3d
     defe8a1169299cf1
-VPERMILPS_256_0xA3(mem)
+VPCMPEQW_128(mem)
   before
     e701545c5da2ed4f.0ff5d957e02b43e1.05f47fe46e2b1efb.02e3e2e1c7cb8a47
     6a66014faa8feb83.0333356d705e38d0.b0ce6ba5aa9d6e3f.b14705bca21ce0e2
@@ -20891,12 +20891,12 @@
     ef42056e062aa5ce
   after
     e701545c5da2ed4f.0ff5d957e02b43e1.05f47fe46e2b1efb.02e3e2e1c7cb8a47
-    5da2ed4fe701545c.0ff5d957e02b43e1.6e2b1efb05f47fe4.02e3e2e1c7cb8a47
-    41f90bd66cfc55ba.851b400d1ebeda66.013137458e498b2f.0071192a8d14048f
+    6a66014faa8feb83.0333356d705e38d0.b0ce6ba5aa9d6e3f.b14705bca21ce0e2
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     4a85f0ddc0f6e520.f0faf7a287d86250.d6e75fae363b30f8.4cab1b96263f31fa
     ef42056e062aa5ce
 
-VPERMILPS_256_0x5A(reg)
+VPADDB_128(reg)
   before
     4682d51ecb609ab8.5fd82b50c18858e0.a21c559846370f39.09bd5fcebd7f1bc6
     adb68710116d4c63.5ebc391b8cbe6a27.f6cd565cf8671cce.787fb490402205c4
@@ -20904,12 +20904,12 @@
     1b2e7d6d8d3edbaf.866aba6aee485af9.f30b32f9a36b44ab.76f64aaaa7b2cd02
     bd4483dac4b8229a
   after
-    4682d51ecb609ab8.5fd82b50c18858e0.a21c559846370f39.09bd5fcebd7f1bc6
-    21fe942b21fe942b.73def97c73def97c.fdf9d9e0fdf9d9e0.39f4c4bb39f4c4bb
+    0000000000000000.0000000000000000.3d254cb4315be089.75788d701a51b2e3
+    adb68710116d4c63.5ebc391b8cbe6a27.f6cd565cf8671cce.787fb490402205c4
     802c15b173def97c.21fe942b3ca5d620.4758f65839f4c4bb.fdf9d9e0da2fad1f
     1b2e7d6d8d3edbaf.866aba6aee485af9.f30b32f9a36b44ab.76f64aaaa7b2cd02
     bd4483dac4b8229a
-VPERMILPS_256_0x5A(mem)
+VPADDB_128(mem)
   before
     afad015c4d4c6812.da09bab1fc1a2fa7.67cc26c6bdb4afdb.543005acd558d74b
     29fe3f1c5d7b5b97.1909c8e75cfc3111.a1f05429c6f494f4.c8146bdb6845ba47
@@ -20918,12 +20918,12 @@
     2631e8908a8e9b17
   after
     afad015c4d4c6812.da09bab1fc1a2fa7.67cc26c6bdb4afdb.543005acd558d74b
-    da09bab1fc1a2fa7.da09bab1da09bab1.543005acd558d74b.543005ac543005ac
-    0503b9061050b655.347aa37d48721c98.11a1c0812414c370.a90360f4fac0294a
+    29fe3f1c5d7b5b97.1909c8e75cfc3111.a1f05429c6f494f4.c8146bdb6845ba47
+    0000000000000000.0000000000000000.08bc7aef83a843cf.1c4470873d9d9192
     2088eb0783d73677.87a847de5c082de9.91ade7b9f420f97b.5549e06127556001
     2631e8908a8e9b17
 
-VPERMILPS_256_0x5A(reg)
+VPADDB_128(reg)
   before
     790973ecc0f91539.57595109d11c962a.6edeb1763549a0b0.fede44bd5125f240
     ab1b7de164210b12.844168fa172c9499.456adcb16ec1b198.35015379582e6aeb
@@ -20931,12 +20931,12 @@
     1720ff4667da5a9c.338a9655f9db545e.32af66c072879b7d.6c4d77c9d17ec5a6
     250d85367cdc200e
   after
-    790973ecc0f91539.57595109d11c962a.6edeb1763549a0b0.fede44bd5125f240
-    840eabc5840eabc5.1293b84f1293b84f.10e290d910e290d9.a4fc9b4da4fc9b4d
+    0000000000000000.0000000000000000.ac00a0ac12bd4ce5.45e3e3527c768695
+    ab1b7de164210b12.844168fa172c9499.456adcb16ec1b198.35015379582e6aeb
     16b402db1293b84f.840eabc57012eaf1.6796c4fba4fc9b4d.10e290d924481caa
     1720ff4667da5a9c.338a9655f9db545e.32af66c072879b7d.6c4d77c9d17ec5a6
     250d85367cdc200e
-VPERMILPS_256_0x5A(mem)
+VPADDB_128(mem)
   before
     17f0350a416eeb0c.0aab6e8fff822ba4.6d82a598cd92900b.0101bc6c75edecd2
     1ec003333a41e0cc.4ca14d2075186714.0ec2557909435825.30d8c46b48bbccf8
@@ -20945,12 +20945,12 @@
     9471db94bd08140d
   after
     17f0350a416eeb0c.0aab6e8fff822ba4.6d82a598cd92900b.0101bc6c75edecd2
-    0aab6e8fff822ba4.0aab6e8f0aab6e8f.0101bc6c75edecd2.0101bc6c0101bc6c
-    164a6b9b8661bb7c.374e976665274c97.f21520e4c8fb69d7.1a80792a887c759c
+    1ec003333a41e0cc.4ca14d2075186714.0ec2557909435825.30d8c46b48bbccf8
+    0000000000000000.0000000000000000.7b44fa11d6d5e830.31d980d7bda8b8ca
     db5aea303fd83a45.28fd49ce6c3c14da.f54984c527c57f4e.1d44d713d0bc246a
     9471db94bd08140d
 
-VPERMILPS_256_0x5A(reg)
+VPADDB_128(reg)
   before
     da548018eaea8332.49bcfbdd81b41756.7bfb5dc325e1fc89.f328fc0941ad55b6
     4d37c20af3f1ab85.3c3c1a8e69000fd9.8c94d1b02da4404f.c880059a32c0a83a
@@ -20958,12 +20958,12 @@
     262f0ded0c971863.21c572ac991a3fe7.58c7c62798b3cad2.67c6b6570c94b448
     e94c575b2c6de62a
   after
-    da548018eaea8332.49bcfbdd81b41756.7bfb5dc325e1fc89.f328fc0941ad55b6
-    90a5c32f90a5c32f.75a6c8b175a6c8b1.501b1965501b1965.1f111bd91f111bd9
+    0000000000000000.0000000000000000.43a871b34cb55b28.189b1eff4ac8dc41
+    4d37c20af3f1ab85.3c3c1a8e69000fd9.8c94d1b02da4404f.c880059a32c0a83a
     47669dd875a6c8b1.90a5c32f12c9defa.b714a0031f111bd9.501b196518083407
     262f0ded0c971863.21c572ac991a3fe7.58c7c62798b3cad2.67c6b6570c94b448
     e94c575b2c6de62a
-VPERMILPS_256_0x5A(mem)
+VPADDB_128(mem)
   before
     b27b795c93a184d9.44dd0fb55350d546.cb66a4f119ffefc9.cbf94088331689e7
     9e1d96485e3c4a80.ffbb9d9de65b3c07.6a55d4eaaf85aacf.6cf509928dc693c4
@@ -20972,12 +20972,12 @@
     fba316df2920d1bf
   after
     b27b795c93a184d9.44dd0fb55350d546.cb66a4f119ffefc9.cbf94088331689e7
-    44dd0fb55350d546.44dd0fb544dd0fb5.cbf94088331689e7.cbf94088cbf94088
-    88002c0aa948f64c.b116b50f62468851.d95e7e8476b72c23.97081db241502614
+    9e1d96485e3c4a80.ffbb9d9de65b3c07.6a55d4eaaf85aacf.6cf509928dc693c4
+    0000000000000000.0000000000000000.35bb78dbc8849998.37ee491ac0dc1cab
     4eeeb68e8ed34268.b73a5378629cf7d1.f64d1ea98aa130f1.a87e7852ec3f7b84
     fba316df2920d1bf
 
-VPMULHW_128(reg)
+VMOVAPS_EtoG_256(reg)
   before
     ecc3f4c6947d6372.cbb4b0c02ce9eb01.6e73714583eac333.9ced314708507366
     d62a0c71cae56c49.da1e968c9d94ac43.300d0de060bb2822.a70c32480ccfb0ae
@@ -20985,12 +20985,12 @@
     0afce0c806ffd511.230d17a368df696f.4993ac35c017b15a.5bf2ee28136e0c65
     bc52a1de4fa6a22d
   after
-    0000000000000000.0000000000000000.0dcffb75e7d9f3ab.e00dfc7e00f8fc28
-    d62a0c71cae56c49.da1e968c9d94ac43.300d0de060bb2822.a70c32480ccfb0ae
+    ecc3f4c6947d6372.cbb4b0c02ce9eb01.6e73714583eac333.9ced314708507366
+    17245c4e67e128ef.59f7e5dffde34259.5a5422b7969b644b.f2749d9ab12aa5f4
     17245c4e67e128ef.59f7e5dffde34259.5a5422b7969b644b.f2749d9ab12aa5f4
     0afce0c806ffd511.230d17a368df696f.4993ac35c017b15a.5bf2ee28136e0c65
     bc52a1de4fa6a22d
-VPMULHW_128(mem)
+VMOVAPS_EtoG_256(mem)
   before
     f36033a881df2277.0bff924b43caad5a.132aaac5fc96ddb3.5717a7c57bba4cfa
     dbe71f72c4234a70.75797043bbcfed77.071c1a32d213594f.e12d10d5621071d7
@@ -21000,11 +21000,11 @@
   after
     f36033a881df2277.0bff924b43caad5a.132aaac5fc96ddb3.5717a7c57bba4cfa
     dbe71f72c4234a70.75797043bbcfed77.071c1a32d213594f.e12d10d5621071d7
-    0000000000000000.0000000000000000.0088f747009cf408.f583fa322f64223a
-    2c94f5b6ee027c1d.f8029d42cab494db.67aa7d99ba905c40.d9391822260747fb
+    4fb5e1283481d443.a6b6751c0999d113.d9ade1d508629b6f.431ee1d012a65b9e
+    f36033a881df2277.0bff924b43caad5a.132aaac5fc96ddb3.5717a7c57bba4cfa
     ffc9b1383ac0719a
 
-VPMULHW_128(reg)
+VMOVAPS_EtoG_256(reg)
   before
     1119a67ceb5b1426.4f51d7090db40029.c9a8e4219aac737b.8bde696c03a85bee
     6b77f55bd5676d4b.92b8040baea21a94.74f64725130eaa9e.2317213900b752a4
@@ -21012,12 +21012,12 @@
     67888e9bc1fb3113.ecb42cd0e4630236.c7b54d4d763e0f20.1bc4e67183e61bda
     33d0eab5422065b3
   after
-    0000000000000000.0000000000000000.e647157b08cdfaf4.03cefcaeffa708fd
-    6b77f55bd5676d4b.92b8040baea21a94.74f64725130eaa9e.2317213900b752a4
+    1119a67ceb5b1426.4f51d7090db40029.c9a8e4219aac737b.8bde696c03a85bee
+    692d9942936db8b6.d395f7aaecd8878a.5436c0bbd46675f1.091f21ecccc7fe8f
     692d9942936db8b6.d395f7aaecd8878a.5436c0bbd46675f1.091f21ecccc7fe8f
     67888e9bc1fb3113.ecb42cd0e4630236.c7b54d4d763e0f20.1bc4e67183e61bda
     33d0eab5422065b3
-VPMULHW_128(mem)
+VMOVAPS_EtoG_256(mem)
   before
     2e10aba224809743.c1d4d0d4fc9c130e.bae1206bb14e49c5.27bfe9499724b5d6
     e850a52546126eb8.d35d5c58e0dc9b51.1ae74d6670a61662.d1a0911ad3a3a3c0
@@ -21027,11 +21027,11 @@
   after
     2e10aba224809743.c1d4d0d4fc9c130e.bae1206bb14e49c5.27bfe9499724b5d6
     e850a52546126eb8.d35d5c58e0dc9b51.1ae74d6670a61662.d1a0911ad3a3a3c0
-    0000000000000000.0000000000000000.f8bc09cddd5f0673.f8cc09d7122b1ab9
-    0aff309eb8fdfa01.8f553ef1106b8d66.fbb1472c31ca3479.7416f1ea0a9e46de
+    3e5b522bc4e2a53e.f96e2c930748058b.e69331ad3c76263a.22a43f2cc5481489
+    2e10aba224809743.c1d4d0d4fc9c130e.bae1206bb14e49c5.27bfe9499724b5d6
     2543a2c23d31726a
 
-VPMULHW_128(reg)
+VMOVAPS_EtoG_256(reg)
   before
     8f784f20fa8ed7da.2906ba6c416f272c.f15c8dde94d26e8f.350d0bcf6caefd4a
     0ffff26ede40afda.773d6c807842e8eb.7ad016c63208e5b1.7073fa82092f3dda
@@ -21039,12 +21039,12 @@
     c1350f8d8ad4ab38.106b382a66401ad8.762fc23726118493.5a8c45c9d63611e6
     c0d79a353fd41db9
   after
-    0000000000000000.0000000000000000.38b2fa8007700caf.27c5fe80fe800453
-    0ffff26ede40afda.773d6c807842e8eb.7ad016c63208e5b1.7073fa82092f3dda
+    8f784f20fa8ed7da.2906ba6c416f272c.f15c8dde94d26e8f.350d0bcf6caefd4a
+    0125891985d33715.d070c2c67c84fb6c.88fdd31583992e79.89af8e322359b055
     0125891985d33715.d070c2c67c84fb6c.88fdd31583992e79.89af8e322359b055
     c1350f8d8ad4ab38.106b382a66401ad8.762fc23726118493.5a8c45c9d63611e6
     c0d79a353fd41db9
-VPMULHW_128(mem)
+VMOVAPS_EtoG_256(mem)
   before
     975c0a607a3e90fb.ac7d803789ce47ee.13fa4b985483025e.a0b1de99b4fd24aa
     bbe70f38a18125d8.1c47d8811f4e46e4.b5e876fc62586f28.61d124a5cbe84a6b
@@ -21054,11 +21054,11 @@
   after
     975c0a607a3e90fb.ac7d803789ce47ee.13fa4b985483025e.a0b1de99b4fd24aa
     bbe70f38a18125d8.1c47d8811f4e46e4.b5e876fc62586f28.61d124a5cbe84a6b
-    0000000000000000.0000000000000000.fa37232220770107.db95fb370f430aa8
-    5a3fcd9c29bfa912.fe952faa7e0c5f3f.461505574ce9c639.1c161a7003ed1799
+    084427a8d3a89a7c.6ee014d9e7dee5c6.d2033542abcb1c62.17d98ec9075f3281
+    975c0a607a3e90fb.ac7d803789ce47ee.13fa4b985483025e.a0b1de99b4fd24aa
     ced4c3055c1e365e
 
-VPUNPCKHQDQ_128(reg)
+VCVTDQ2PD_256(reg)
   before
     885f85f6ad7fcb7d.8da37d00c2d30ec6.28af25607f64f2fc.edeb602560bd29d9
     a5035cae929b11a2.7c3eb4c0b7ef87c5.487df2678771d8a8.a351c49a0353006e
@@ -21066,12 +21066,12 @@
     7cc53b238a35a3ac.0344a3042b70a053.da6102181ada8f80.acfd942569f7fe24
     b7daf914621c9b9e
   after
-    0000000000000000.0000000000000000.ba4a932b31bf4ef0.487df2678771d8a8
-    a5035cae929b11a2.7c3eb4c0b7ef87c5.487df2678771d8a8.a351c49a0353006e
+    885f85f6ad7fcb7d.8da37d00c2d30ec6.28af25607f64f2fc.edeb602560bd29d9
+    c1d16d5b35400000.41c8dfa778000000.41d104eb28000000.41d4ae0248c00000
     820b4599a8fe4578.05daecc8271fce3b.ba4a932b31bf4ef0.4413aca052b80923
     7cc53b238a35a3ac.0344a3042b70a053.da6102181ada8f80.acfd942569f7fe24
     b7daf914621c9b9e
-VPUNPCKHQDQ_128(mem)
+VCVTDQ2PD_256(mem)
   before
     407756595c349ebd.ed7b3ab9d5cb67ea.52485461e1edb83a.04103d9add4fd803
     25a026e0714ac1ac.337a3ec5254cccdd.ceb27cc965a2d31c.94a13f1d17a96526
@@ -21080,12 +21080,12 @@
     3f9dc9e6a28ffa04
   after
     407756595c349ebd.ed7b3ab9d5cb67ea.52485461e1edb83a.04103d9add4fd803
-    25a026e0714ac1ac.337a3ec5254cccdd.ceb27cc965a2d31c.94a13f1d17a96526
-    0000000000000000.0000000000000000.52485461e1edb83a.ceb27cc965a2d31c
+    41d4921518400000.c1be1247c6000000.419040f668000000.c1c15813fe800000
+    4121e895bd6ac198.a80e43b414440f31.524d952ad29cad24.e661050e63747294
     70c615645da159ad.a98346f341406c94.bce71d6e45e6027f.559c89d75d3d3afa
     3f9dc9e6a28ffa04
 
-VPUNPCKHQDQ_128(reg)
+VCVTDQ2PD_256(reg)
   before
     ffb2c0a5cef7ee5d.8d5b2b396cfa4616.932442ed45cc1eb0.e74a8f83d98c8d58
     f1256a827c0052b2.76aca40107814400.c03f330dbf726231.ae436754aa9b0cdc
@@ -21093,12 +21093,12 @@
     da58c843cf2658fe.18b0b5164f4b6205.560ee5747e429015.85273ada7521d094
     4ba92d67a7b18e1f
   after
-    0000000000000000.0000000000000000.8d1e15c148c174c4.c03f330dbf726231
-    f1256a827c0052b2.76aca40107814400.c03f330dbf726231.ae436754aa9b0cdc
+    ffb2c0a5cef7ee5d.8d5b2b396cfa4616.932442ed45cc1eb0.e74a8f83d98c8d58
+    c1dcb87a8fc00000.41d2305d31000000.c1b061dd33000000.c1c570e3e5000000
     7043c4e8483661ae.0584fea649430f96.8d1e15c148c174c4.ef9e22cdd51e3836
     da58c843cf2658fe.18b0b5164f4b6205.560ee5747e429015.85273ada7521d094
     4ba92d67a7b18e1f
-VPUNPCKHQDQ_128(mem)
+VCVTDQ2PD_256(mem)
   before
     1ff2766087d92f06.8ab074ffac5a734d.89fc433b34a5fb78.775b9e92fd83f1cf
     dbcc91b130a66f72.db97c3887c61ed48.36342603145e931c.4c513c87600fd49f
@@ -21107,12 +21107,12 @@
     9c204da9fcefe048
   after
     1ff2766087d92f06.8ab074ffac5a734d.89fc433b34a5fb78.775b9e92fd83f1cf
-    dbcc91b130a66f72.db97c3887c61ed48.36342603145e931c.4c513c87600fd49f
-    0000000000000000.0000000000000000.89fc433b34a5fb78.36342603145e931c
+    c1dd80ef31400000.41ca52fdbc000000.41ddd6e7a4800000.c183e07188000000
+    5c04fb47be220992.2b59b24adac4039b.f924d9590c81e91d.323cbbbf44727530
     7f662f0c4e5cbb90.d4413bb26311f1f1.b097d829381bb7a6.836717a744390f2f
     9c204da9fcefe048
 
-VPUNPCKHQDQ_128(reg)
+VCVTDQ2PD_256(reg)
   before
     d9b1583309202226.1ebea9eefb5d3e99.349c5c2ab2d3f3f7.355b9f5fb336bae4
     966734af07591176.17d8e5d8e23351d8.a5b6102064974459.663aabe799e1ae03
@@ -21120,12 +21120,12 @@
     ff7150324311ea1a.82819473cb8b12aa.2e5721325f52c6df.377c7e9e19105891
     90773ea4e9ad865a
   after
-    0000000000000000.0000000000000000.85db53fe14e821c2.a5b6102064974459
-    966734af07591176.17d8e5d8e23351d8.a5b6102064974459.663aabe799e1ae03
+    d9b1583309202226.1ebea9eefb5d3e99.349c5c2ab2d3f3f7.355b9f5fb336bae4
+    c1de892b00800000.41b4e821c2000000.41bd0176ad000000.419c953cb8000000
     2f8edd8b9125ebe3.44805fb51ee9ae7a.85db53fe14e821c2.1d0176ad07254f2e
     ff7150324311ea1a.82819473cb8b12aa.2e5721325f52c6df.377c7e9e19105891
     90773ea4e9ad865a
-VPUNPCKHQDQ_128(mem)
+VCVTDQ2PD_256(mem)
   before
     05be33ac960994b2.645e870fbaa84ac7.ada8fefd06263995.fe767727e0626e5b
     701cd8a33a2f40c8.b99f809091764995.a2c11b3febc6df67.4f83504934a356e3
@@ -21134,12 +21134,12 @@
     e73dc6f53506e578
   after
     05be33ac960994b2.645e870fbaa84ac7.ada8fefd06263995.fe767727e0626e5b
-    701cd8a33a2f40c8.b99f809091764995.a2c11b3febc6df67.4f83504934a356e3
-    0000000000000000.0000000000000000.ada8fefd06263995.a2c11b3febc6df67
+    c1d495c040c00000.419898e654000000.c178988d90000000.c1bf9d91a5000000
+    ae5fa874f12b44c6.5a82372065072130.3b9867259575bf4b.7ecca804f6a1ba22
     9b51210ad8095cd9.a351a62cd1e80f46.55f95c9c2141966e.e89b7bc4c2e9d6c5
     e73dc6f53506e578
 
-VPSRAW_0x05_128(reg)
+VMOVHPD_128_LoadForm(reg)
   before
     d8fe8403eb8424e6.13bfbf530ad6462c.ef59cb1e72a44f81.ccb0788ea9351ffb
     172ab05b7ff0cfbc.f275fc3aa39dbcec.9ce6a063e3c81c8d.7c8836e84c5e181f
@@ -21147,12 +21147,12 @@
     f0f14895b2bf584e.55e848937d4b3f61.86be5097a77550cb.f7ce88854d7c44db
     7ad415a0e48af1cb
   after
-    0000000000000000.0000000000000000.fc350284fd3b0286.ffbefc44026b0226
+    d8fe8403eb8424e6.13bfbf530ad6462c.ef59cb1e72a44f81.ccb0788ea9351ffb
     172ab05b7ff0cfbc.f275fc3aa39dbcec.9ce6a063e3c81c8d.7c8836e84c5e181f
     000c49678dd521a5.143e56abc16b7b44.05432368c1dfb317.414e129724c73b06
     f0f14895b2bf584e.55e848937d4b3f61.86be5097a77550cb.f7ce88854d7c44db
     7ad415a0e48af1cb
-VPSRAW_0x05_128(mem)
+VMOVHPD_128_LoadForm(mem)
   before
     a62c34d304fbfc01.4126ab4f893bad63.913d4edcf549c36e.7aa1215e31162f54
     57a2610acade22aa.50f56c03afd45f8f.a40be5734572c499.3f399427fc4f8b5f
@@ -21162,11 +21162,11 @@
   after
     a62c34d304fbfc01.4126ab4f893bad63.913d4edcf549c36e.7aa1215e31162f54
     57a2610acade22aa.50f56c03afd45f8f.a40be5734572c499.3f399427fc4f8b5f
-    69011831513c1ff2.79ab891cbf17a87f.6a1c874588d1fe0b.2fd2a460a4aca198
+    0000000000000000.0000000000000000.7aa1215e31162f54.3f399427fc4f8b5f
     b817d534b623ae04.1893fe06568ec6de.bf3db23cda722cf3.a8b84d74c4b7adaa
     04378bcff8feea42
 
-VPSRAW_0x05_128(reg)
+VMOVHPD_128_LoadForm(reg)
   before
     a19a5bdddd0c950b.20ae15ff149f8c0d.89fbc52d0fc8f259.7f39e14658620c7b
     d92fb80a0f6eeab2.7d93537e88ba7538.282edcfd874e6b9c.86de904d1eac58cf
@@ -21174,12 +21174,12 @@
     8e1a0972c75b8148.8577b949200357a7.6023e74922732f28.d84f5f07ef7f268e
     dcb3779133202051
   after
-    0000000000000000.0000000000000000.0301ff3a01130179.fec202f8ff7b0134
+    a19a5bdddd0c950b.20ae15ff149f8c0d.89fbc52d0fc8f259.7f39e14658620c7b
     d92fb80a0f6eeab2.7d93537e88ba7538.282edcfd874e6b9c.86de904d1eac58cf
     0a409ec329af25e2.aa920b9e2d8225b2.51773ee259ae6b52.b0f73c3f475ccc1c
     8e1a0972c75b8148.8577b949200357a7.6023e74922732f28.d84f5f07ef7f268e
     dcb3779133202051
-VPSRAW_0x05_128(mem)
+VMOVHPD_128_LoadForm(mem)
   before
     97efffc92e4b778f.c209f58486ff3b90.e90dda6d7c47c842.b07ed39c7d29f3c9
     e5cf749bfd0de677.03595f6601268f65.b222e8f45d5c33af.9fd4ff48065df2e2
@@ -21189,11 +21189,11 @@
   after
     97efffc92e4b778f.c209f58486ff3b90.e90dda6d7c47c842.b07ed39c7d29f3c9
     e5cf749bfd0de677.03595f6601268f65.b222e8f45d5c33af.9fd4ff48065df2e2
-    a11f50f4bb712a33.ab554282d55cb874.bb8061cce04e561c.887166ba5a9a691f
+    0000000000000000.0000000000000000.b07ed39c7d29f3c9.9fd4ff48065df2e2
     a9aa11be8583fff0.174b9a469d2ef368.e2f4c1e02128ebb3.c7a0045d156d942b
     b7aed59cd261aeb2
 
-VPSRAW_0x05_128(reg)
+VMOVHPD_128_LoadForm(reg)
   before
     b6e8d5e52d02f562.d73d32e7765021d9.a385631df6277cee.024a821c3bf6afa0
     1f9801a3c3dca3e5.09a52f59abe34b1b.ac509a737bd38fb2.f64e226c4ac45d10
@@ -21201,12 +21201,12 @@
     9e8cca2f0e6e2615.e51fafcd4e8caa59.a0c93f4c7b7641a2.ce8febf8b9926b28
     6a640e0d51a94128
   after
-    0000000000000000.0000000000000000.fd0601fa03db020d.fe74ff5ffdcc0359
+    b6e8d5e52d02f562.d73d32e7765021d9.a385631df6277cee.024a821c3bf6afa0
     1f9801a3c3dca3e5.09a52f59abe34b1b.ac509a737bd38fb2.f64e226c4ac45d10
     4d0b54422f7cf4e7.19ac85023f483be2.8cf83ab4c9bf675f.9ccb1bbc6b9fb32f
     9e8cca2f0e6e2615.e51fafcd4e8caa59.a0c93f4c7b7641a2.ce8febf8b9926b28
     6a640e0d51a94128
-VPSRAW_0x05_128(mem)
+VMOVHPD_128_LoadForm(mem)
   before
     4a17fee54ff1f35b.6d695fd4fb3c731b.47c928a5f5ba57ac.440fa5a72d845927
     4b74396dcd753bec.15ec109e937418a4.1d786f7850dffc09.d41568327c76eb99
@@ -21216,11 +21216,11 @@
   after
     4a17fee54ff1f35b.6d695fd4fb3c731b.47c928a5f5ba57ac.440fa5a72d845927
     4b74396dcd753bec.15ec109e937418a4.1d786f7850dffc09.d41568327c76eb99
-    4a473a92e942d607.f463d8fa71a1505d.41f6fd317a065699.ac28855704d732a4
+    0000000000000000.0000000000000000.440fa5a72d845927.d41568327c76eb99
     215c7d3fbf627fda.6418b252325059f2.91114fbd8f3b218b.2895f78360346bf5
     a4a6ba232c18d138
 
-VPCMPGTD_128(reg)
+VCVTPD2PS_256(reg)
   before
     7ca8caa2050fa218.ad7f7e5f6ae4f48e.c3589d14710c6d0e.e793e206ac8a1909
     0ce6246b86a51842.cb7bbae007d1ef52.6b6f92aacb61c85d.204931f9ed00f940
@@ -21228,12 +21228,12 @@
     c34aa290f3e0e523.2831d0b2852169b5.0a518f073e084748.ac80f48e488f6387
     b69a5f089bc066ef
   after
-    0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000
+    0000000000000000.0000000000000000.00000000ff800000.7f80000000000000
     0ce6246b86a51842.cb7bbae007d1ef52.6b6f92aacb61c85d.204931f9ed00f940
     b0aec2ec4c677062.551dacadb1372d50.b9a88f82dbdca88d.19ffb8826da87e5b
     c34aa290f3e0e523.2831d0b2852169b5.0a518f073e084748.ac80f48e488f6387
     b69a5f089bc066ef
-VPCMPGTD_128(mem)
+VCVTPD2PS_256(mem)
   before
     131777db814741c0.a307c0c3159db432.2083a2db9e9c60ac.b8b48ea58f71e23a
     9fc4b7f51730b026.ab3216f15128193a.1adf9f1518b3ce62.201e88c86aa4b410
@@ -21243,11 +21243,11 @@
   after
     131777db814741c0.a307c0c3159db432.2083a2db9e9c60ac.b8b48ea58f71e23a
     9fc4b7f51730b026.ab3216f15128193a.1adf9f1518b3ce62.201e88c86aa4b410
-    0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff
-    b4dea0abc15b3e5f.a3fc5eef80de95e8.7fe40667a2e5feb9.8f375e4e3195f117
+    366d9c417888714c.3715a287401050e8.f011414a10726f02.9fdb79dc6c2cfb76
+    0000000000000000.0000000000000000.0000000080000000.0000000085a4752c
     4d7e3288536cd3a0
 
-VPCMPGTD_128(reg)
+VCVTPD2PS_256(reg)
   before
     35fbf1f7713cdcbc.f6e3411f0db3d48a.4a354996ad2023e5.a3256959e91938b3
     a3fc980825914918.d647fa89789eeffa.8a0a5ce96261368c.38a0e70b011ad91b
@@ -21255,12 +21255,12 @@
     82b58abcc0fc3f3f.e260a4f01e5ba258.41bcee3fd612df86.2574205e16af3fe7
     3565d4d84b5c7ca3
   after
-    0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000
+    0000000000000000.0000000000000000.80000000ff800000.8000000005073858
     a3fc980825914918.d647fa89789eeffa.8a0a5ce96261368c.38a0e70b011ad91b
     f4cb21260bf85660.31d847d51f274adb.bdc994523c2e0c88.1a21fa6807f29c1e
     82b58abcc0fc3f3f.e260a4f01e5ba258.41bcee3fd612df86.2574205e16af3fe7
     3565d4d84b5c7ca3
-VPCMPGTD_128(mem)
+VCVTPD2PS_256(mem)
   before
     26bf92c2c1060f7e.aa06ce38df2a3f62.c7ac8ec49045b39e.7130651bcc99ec31
     d450d70895b8b6a3.c80ae905050c9374.bb88803f92f138d8.a871f552bb506f36
@@ -21270,11 +21270,11 @@
   after
     26bf92c2c1060f7e.aa06ce38df2a3f62.c7ac8ec49045b39e.7130651bcc99ec31
     d450d70895b8b6a3.c80ae905050c9374.bb88803f92f138d8.a871f552bb506f36
-    0000000000000000.0000000000000000.00000000ffffffff.0000000000000000
-    d642e258c5652b7d.565a9542d4222718.40206cd6b3c192db.9f895181f37bc6fd
+    1ae21d96e27e2b3e.380cd88fcd307722.9ac0f64b3e6cef33.44ca9a503fc1a341
+    0000000000000000.0000000000000000.0000000080000000.fd6476257f800000
     17f8155173071117
 
-VPCMPGTD_128(reg)
+VCVTPD2PS_256(reg)
   before
     0665e22c5cf3c33b.e33ca13b5978718a.7d3e1e8bb56dde01.89735fcb0bfcddfb
     c91ab47f49cb1614.1d9cd629bac3ba91.0b056fd40c9dd98a.51864916622a8ebf
@@ -21282,12 +21282,12 @@
     3c8e5839a26b9297.87bd94da56334540.c96c541a8fdd8a2a.cd1cf75e7f8c0de7
     3a37b3337dd953a1
   after
-    0000000000000000.0000000000000000.0000000000000000.00000000ffffffff
+    0000000000000000.0000000000000000.ff80000000000000.000000007f800000
     c91ab47f49cb1614.1d9cd629bac3ba91.0b056fd40c9dd98a.51864916622a8ebf
     bd6488b4d719474e.602dfe100553c2bf.5bfb828a773e535e.7325a8a3d5565f55
     3c8e5839a26b9297.87bd94da56334540.c96c541a8fdd8a2a.cd1cf75e7f8c0de7
     3a37b3337dd953a1
-VPCMPGTD_128(mem)
+VCVTPD2PS_256(mem)
   before
     9542560eea48eeb0.a3e62278444d3398.70161475c86ffe3f.b1a4e2eef205b89a
     bc095edce3e59a40.4eb6e1df5c496500.f505facc7714aae9.6fee27743c431a59
@@ -21297,11 +21297,11 @@
   after
     9542560eea48eeb0.a3e62278444d3398.70161475c86ffe3f.b1a4e2eef205b89a
     bc095edce3e59a40.4eb6e1df5c496500.f505facc7714aae9.6fee27743c431a59
-    0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff
-    daf98afde7db1491.e1f22fd257c56eb0.48d5e95effc7cbed.dcecc743f22e6876
+    8957468783bd137c.9a4c92d983ed6579.f456c2cb802d056a.5e981f170822eb13
+    0000000000000000.0000000000000000.8000000080000000.7f80000080000000
     44371a6497f3cd2c
 
-VPMOVZXBD_128(reg)
+VPUNPCKHDQ_128(reg)
   before
     f1c513e692fe56e1.8abba7282a4c5bab.80f5b636745bbe50.cc4dea710fecb79f
     41e2b13580da3f42.746917f6691aa1f5.d3a12271753d8f06.5e8c41f0ccaa86ab
@@ -21309,12 +21309,12 @@
     36f8c4eaa3371fb7.6ab8e528480321cb.0523991c9514a662.188ae2e3bf20bc83
     f8e2232e2def9ba7
   after
-    f1c513e692fe56e1.8abba7282a4c5bab.80f5b636745bbe50.cc4dea710fecb79f
-    0000000000000000.0000000000000000.000000530000000d.000000f40000003e
+    0000000000000000.0000000000000000.36416fefd3a12271.f7f71d7d753d8f06
+    41e2b13580da3f42.746917f6691aa1f5.d3a12271753d8f06.5e8c41f0ccaa86ab
     8ed9edbdfc14c3fb.75cf5852bf54a59b.36416feff7f71d7d.d85c6ac8530df43e
     36f8c4eaa3371fb7.6ab8e528480321cb.0523991c9514a662.188ae2e3bf20bc83
     f8e2232e2def9ba7
-VPMOVZXBD_128(mem)
+VPUNPCKHDQ_128(mem)
   before
     5530ab96b8864dd6.9489332910cf8e23.2df23b642135d2af.9c919d65eb206461
     0c40f5067df28e3b.03d935e4e0694deb.9c47d4f266f57473.57d8763496a79425
@@ -21323,12 +21323,12 @@
     f8bbd805aa9a26cb
   after
     5530ab96b8864dd6.9489332910cf8e23.2df23b642135d2af.9c919d65eb206461
-    0000000000000000.0000000000000000.000000eb00000020.0000006400000061
-    f7de7e6a973e1903.e034c689ae9098ba.91842ebe324fc344.924420f73236725b
+    0c40f5067df28e3b.03d935e4e0694deb.9c47d4f266f57473.57d8763496a79425
+    0000000000000000.0000000000000000.2df23b649c47d4f2.2135d2af66f57473
     f3d5c0ad2377ab5a.88e6e38317d0ab3c.e975c4b5a1507a4e.a9219718595839ae
     f8bbd805aa9a26cb
 
-VPMOVZXBD_128(reg)
+VPUNPCKHDQ_128(reg)
   before
     db5ede29bf86755d.ddf239bd3ca8006b.553a863eb6b6c21f.81e612c1d00356bc
     ae55a5f034aa6112.8f016485feddd462.a57ead2528cd180d.33a395d0da7512bb
@@ -21336,12 +21336,12 @@
     93726617b0c9048f.be25c1eef084e7b5.3901752df2bf73bb.583026a3f1c31e1a
     83982d4036b8e4d3
   after
-    db5ede29bf86755d.ddf239bd3ca8006b.553a863eb6b6c21f.81e612c1d00356bc
-    0000000000000000.0000000000000000.000000dc000000b1.0000006c00000076
+    0000000000000000.0000000000000000.d2fc53a6a57ead25.08a1eab228cd180d
+    ae55a5f034aa6112.8f016485feddd462.a57ead2528cd180d.33a395d0da7512bb
     cded29c6a6922893.e6cebdf28622e26c.d2fc53a608a1eab2.dc77c7ccdcb16c76
     93726617b0c9048f.be25c1eef084e7b5.3901752df2bf73bb.583026a3f1c31e1a
     83982d4036b8e4d3
-VPMOVZXBD_128(mem)
+VPUNPCKHDQ_128(mem)
   before
     397c598fc69a7ccc.5e30594fefdb31b0.f3d2eb66570e9e69.36d90d2483b2f1d4
     57a8247cbe78a032.8973fddbfe55eda2.61a0b647d7cdc5b3.26d019f857069ea8
@@ -21350,12 +21350,12 @@
     3766c7db78c31b42
   after
     397c598fc69a7ccc.5e30594fefdb31b0.f3d2eb66570e9e69.36d90d2483b2f1d4
-    0000000000000000.0000000000000000.00000083000000b2.000000f1000000d4
-    b7e70cf3395b0d30.6f874e257ac17212.e45ca17b8dcc16bf.633294150848b6e4
+    57a8247cbe78a032.8973fddbfe55eda2.61a0b647d7cdc5b3.26d019f857069ea8
+    0000000000000000.0000000000000000.f3d2eb6661a0b647.570e9e69d7cdc5b3
     36078ce054517ff3.6eb7489bfeaefdac.58d225f095174dbb.4a4b7ae835037733
     3766c7db78c31b42
 
-VPMOVZXBD_128(reg)
+VPUNPCKHDQ_128(reg)
   before
     86d0785c6d15dfbd.b0d2202f2a65b1a7.e151e7a726a5c91b.99cebf9009bb28d0
     93d588d6b184ff4f.011644ccd7a46077.239f28b78f34140c.831cec4908c3612d
@@ -21363,12 +21363,12 @@
     57e0b56594ea416a.97342ea129d0241d.888a7d9093481123.c2ddecb31130e069
     cfe9b83c54ad9da1
   after
-    86d0785c6d15dfbd.b0d2202f2a65b1a7.e151e7a726a5c91b.99cebf9009bb28d0
-    0000000000000000.0000000000000000.000000ac0000003b.000000b5000000fc
+    0000000000000000.0000000000000000.92ee0636239f28b7.d5e6182b8f34140c
+    93d588d6b184ff4f.011644ccd7a46077.239f28b78f34140c.831cec4908c3612d
     bac1f3b5df9cb6a5.049d75a478194890.92ee0636d5e6182b.f2882706ac3bb5fc
     57e0b56594ea416a.97342ea129d0241d.888a7d9093481123.c2ddecb31130e069
     cfe9b83c54ad9da1
-VPMOVZXBD_128(mem)
+VPUNPCKHDQ_128(mem)
   before
     f576068d90bea9d0.c67eca526bf9dc4b.95a6ebb105d6b24b.63be8a3165e53da0
     10515193e170c021.63e62fe80156c2f4.dac128bf2836ac46.7dd82785e849d650
@@ -21377,12 +21377,12 @@
     e5793fecac9a8c3f
   after
     f576068d90bea9d0.c67eca526bf9dc4b.95a6ebb105d6b24b.63be8a3165e53da0
-    0000000000000000.0000000000000000.00000065000000e5.0000003d000000a0
-    fc46183864ce9ec1.8a65df93f18c3110.425061b6affcce39.342252f8b80119dd
+    10515193e170c021.63e62fe80156c2f4.dac128bf2836ac46.7dd82785e849d650
+    0000000000000000.0000000000000000.95a6ebb1dac128bf.05d6b24b2836ac46
     9421d46935e4fedc.9748d6bfd727624c.a91e1384b535d651.e2e906f6709841f3
     e5793fecac9a8c3f
 
-VPMOVSXBD_128(reg)
+VBROADCASTSS_128(reg)
   before
     971efa440994346d.b6ad02136fbf9d9d.e6d910d950b39453.eaf8b91457ec7eb9
     5524316c22117528.3db81f212f6a3631.d3648a4bf8bd01d2.e3aacf52b02d839e
@@ -21391,11 +21391,11 @@
     afc78b5921a815f0
   after
     971efa440994346d.b6ad02136fbf9d9d.e6d910d950b39453.eaf8b91457ec7eb9
-    0000000000000000.0000000000000000.ffffffdd00000005.ffffffa00000002b
+    5524316c22117528.3db81f212f6a3631.d3648a4bf8bd01d2.e3aacf52b02d839e
     7cd7e2ce949d8d1d.040ca67e90f187c3.ba373f836ad0e775.6f00d22bdd05a02b
     668208d8fac5b6f7.e9761318ae614a80.f69d2beb43797fe7.69c63c89fa7f928e
     afc78b5921a815f0
-VPMOVSXBD_128(mem)
+VBROADCASTSS_128(mem)
   before
     1cd03a88708ae580.7072a0f5f1142d63.c7c2e3daa6c53c94.e5e14af11d4308d4
     8baec5000333bd67.f6f4a49114162d0d.79bc90b09429182a.e250990097babcea
@@ -21404,12 +21404,12 @@
     c497779bd2a737cf
   after
     1cd03a88708ae580.7072a0f5f1142d63.c7c2e3daa6c53c94.e5e14af11d4308d4
-    0000000000000000.0000000000000000.0000001d00000043.00000008ffffffd4
+    0000000000000000.0000000000000000.1d4308d41d4308d4.1d4308d41d4308d4
     da2ba9aff5af5bd4.54521218ff58f4a0.dd2f9886929a9c6e.483612844b6ad8d3
     e3146080630978f1.e6d8e5f64f65bcc9.cde97648bf23828e.75dfb3e9d5e0983b
     c497779bd2a737cf
 
-VPMOVSXBD_128(reg)
+VBROADCASTSS_128(reg)
   before
     90a95a06dd4cf23b.8434685f684dd3eb.08d41997a0c9c233.27b4a6e335d186b4
     37635997935a052a.97593c38208726ed.1791ab678d11418b.c55da54110ae660c
@@ -21418,11 +21418,11 @@
     d6844e2d1be27cfd
   after
     90a95a06dd4cf23b.8434685f684dd3eb.08d41997a0c9c233.27b4a6e335d186b4
-    0000000000000000.0000000000000000.0000006dffffffc8.ffffffdcffffffc3
+    37635997935a052a.97593c38208726ed.1791ab678d11418b.c55da54110ae660c
     130f6fb88f5dac49.f94d59f7a8c42e24.6d5a95d3b3c8767d.85b0ee506dc8dcc3
     82fa98d76ee22244.87de39881c0fa7bb.677cd545ad7b9db4.4179fdfa672ba505
     d6844e2d1be27cfd
-VPMOVSXBD_128(mem)
+VBROADCASTSS_128(mem)
   before
     219d5dd4a4f91fd8.de70d05ecb74a4c6.1bd65ad797754ddf.6143662b17b4f2dd
     fc8fa7da1e7c48c1.85bd13bb439f6e7b.920237d03500dbbc.b6fb44ef8e01b0a3
@@ -21431,12 +21431,12 @@
     78c087b055d5be60
   after
     219d5dd4a4f91fd8.de70d05ecb74a4c6.1bd65ad797754ddf.6143662b17b4f2dd
-    0000000000000000.0000000000000000.00000017ffffffb4.fffffff2ffffffdd
+    0000000000000000.0000000000000000.17b4f2dd17b4f2dd.17b4f2dd17b4f2dd
     4427a72da678b4e5.d12d5e5971f0bb11.c92e4c6013bf0e7d.c4f06cffadee14b3
     d531d9b858f81e70.1f0baca4f1f2c832.9a2516714cbba14f.e66dd9c611065ab9
     78c087b055d5be60
 
-VPMOVSXBD_128(reg)
+VBROADCASTSS_128(reg)
   before
     d633722916e77b55.8c79b9684f09438d.cca5f9086031d18a.e2b50ff1fd02525d
     5c13969defc9ce43.43cbc327a8b6df69.324541f15a3a12c6.7da8b5ca419fdbd5
@@ -21445,11 +21445,11 @@
     d9d188ac9bf5e265
   after
     d633722916e77b55.8c79b9684f09438d.cca5f9086031d18a.e2b50ff1fd02525d
-    0000000000000000.0000000000000000.00000035ffffff9f.fffffff8ffffffe0
+    5c13969defc9ce43.43cbc327a8b6df69.324541f15a3a12c6.7da8b5ca419fdbd5
     65acf0787d06f3d7.d7f374e27e0bae2f.ae3881cb7a98c692.47cb83ea359ff8e0
     4f4a7b275b2b25bd.24bc4786ed156b0c.9dcab3025cd72a99.1ceaf53cf40d67ac
     d9d188ac9bf5e265
-VPMOVSXBD_128(mem)
+VBROADCASTSS_128(mem)
   before
     584cb72645632637.7538331426c3a1a0.06f3b8fd12dfd32c.5946d5039d847a88
     7627fe960f64ef4d.32c414ad795aa32c.596443350875a2ba.3ffae238d92af20a
@@ -21458,12 +21458,12 @@
     8556654f826c9ebf
   after
     584cb72645632637.7538331426c3a1a0.06f3b8fd12dfd32c.5946d5039d847a88
-    0000000000000000.0000000000000000.ffffff9dffffff84.0000007affffff88
+    0000000000000000.0000000000000000.9d847a889d847a88.9d847a889d847a88
     0f2dd9e91404f8d3.e4381b5cf17d670f.f9db6518ece393e3.ab30d70fab55cdcc
     ff2bc409704dfef6.e6e1428f29b628f3.c2249994d93664d2.f936aef2af92487a
     8556654f826c9ebf
 
-VPINSRB_128_1of3(reg)
+VPMOVSXDQ_128(reg)
   before
     abddf791bf6f0d48.21ed3ce3404dbde2.930b87b1bd942384.900b5b94ec7acfb4
     c71661240328cfc0.533fbc64a010f0c2.4902e52e4aa0936f.3f5b270440b990b5
@@ -21471,12 +21471,12 @@
     51d2a9ed0eea3e30.54c3c4077d0ba611.3c87dde9be78c602.b06acee41d5e08c2
     29c0a12ddeda3626
   after
-    0000000000000000.0000000000000000.4902e52e4aa0936f.3f5b270440b99026
-    c71661240328cfc0.533fbc64a010f0c2.4902e52e4aa0936f.3f5b270440b990b5
+    abddf791bf6f0d48.21ed3ce3404dbde2.930b87b1bd942384.900b5b94ec7acfb4
+    0000000000000000.0000000000000000.ffffffffabe279d0.fffffffff2016500
     354f9d74e92221d4.70edc077aba055c3.621259726c68b660.abe279d0f2016500
     51d2a9ed0eea3e30.54c3c4077d0ba611.3c87dde9be78c602.b06acee41d5e08c2
     29c0a12ddeda3626
-VPINSRB_128_1of3(mem)
+VPMOVSXDQ_128(mem)
   before
     f4b06e955083aa59.77ed80fb0d0a637f.db8c4402335c9fd7.31ac6fffdc5a0002
     ec06b10990652187.03ea1e0b8211cc6e.e115bd53e9a0fe42.9fce0a20639ca00c
@@ -21485,12 +21485,12 @@
     4f1aeafe8216391a
   after
     f4b06e955083aa59.77ed80fb0d0a637f.db8c4402335c9fd7.31ac6fffdc5a0002
-    ec06b10990652187.03ea1e0b8211cc6e.e115bd53e9a0fe42.9fce0a20639ca00c
-    0000000000000000.0000000000000000.e115bd53e9a0fe42.9fce0a20029ca00c
+    0000000000000000.0000000000000000.0000000031ac6fff.ffffffffdc5a0002
+    ed8de776b98a57db.51167f870a88b5a8.412baae6b9e27d7d.e039aab8eec9e1cb
     d2138ac7e7000882.bdbda0dc41fd59da.d99887a7c22fd9b5.51394c341a6e00eb
     4f1aeafe8216391a
 
-VPINSRB_128_1of3(reg)
+VPMOVSXDQ_128(reg)
   before
     34288284c34dc701.796218e737d3efa7.a22a7b77c2fbf5b0.8428d0821d91cd16
     5dae0f3178a0e74f.bd470dc4c50dc977.5eab0ec3290fc5d5.1da90264e91616cb
@@ -21498,12 +21498,12 @@
     eb55f9afb0c7cdca.8b03186208ec46c6.c8144a1d1ca6f0be.8eaa0ee83eb797e3
     1cc2e064ffec469e
   after
-    0000000000000000.0000000000000000.5eab0ec3290fc5d5.1da90264e916169e
-    5dae0f3178a0e74f.bd470dc4c50dc977.5eab0ec3290fc5d5.1da90264e91616cb
+    34288284c34dc701.796218e737d3efa7.a22a7b77c2fbf5b0.8428d0821d91cd16
+    0000000000000000.0000000000000000.ffffffff82e69837.000000003fca7000
     26f98e713e9ad5ae.798ee349acbd521d.4c8a552b13c305f5.82e698373fca7000
     eb55f9afb0c7cdca.8b03186208ec46c6.c8144a1d1ca6f0be.8eaa0ee83eb797e3
     1cc2e064ffec469e
-VPINSRB_128_1of3(mem)
+VPMOVSXDQ_128(mem)
   before
     0afa8a96a0723b5d.090e4e596bb40a51.cd7226fbf6a8609e.2d96eb04df41c3da
     321e89693d572f4d.da7088db0aecc9ec.1da68c0091fc5dd0.d959334cf822baf5
@@ -21512,12 +21512,12 @@
     182ecea363ddccfd
   after
     0afa8a96a0723b5d.090e4e596bb40a51.cd7226fbf6a8609e.2d96eb04df41c3da
-    321e89693d572f4d.da7088db0aecc9ec.1da68c0091fc5dd0.d959334cf822baf5
-    0000000000000000.0000000000000000.1da68c0091fc5dd0.d959334cda22baf5
+    0000000000000000.0000000000000000.000000002d96eb04.ffffffffdf41c3da
+    72fa58cbf1a6e19a.bbc7a39f29fc464a.556cc35ef6f4f989.27ac1e6204d410bc
     a45a73a7d86b0b6f.085e9c12666ebc15.539048ff419deff5.72daa8b09ee402db
     182ecea363ddccfd
 
-VPINSRB_128_1of3(reg)
+VPMOVSXDQ_128(reg)
   before
     73f58aa8ee4baacf.a50956e90fb36af9.1d836da05ad169f9.f1df98d18c02fc3f
     e17cda29dcbbd7fd.52d47e7db289ba64.568014b6a3ae87a4.0c222ebef630dc93
@@ -21525,12 +21525,12 @@
     61f424534fce111a.1bee8a4ca9111c8a.a435d226a20b08f9.2abc1c9e9014040d
     e4a96d68fae2c489
   after
-    0000000000000000.0000000000000000.568014b6a3ae87a4.0c222ebef630dc89
-    e17cda29dcbbd7fd.52d47e7db289ba64.568014b6a3ae87a4.0c222ebef630dc93
+    73f58aa8ee4baacf.a50956e90fb36af9.1d836da05ad169f9.f1df98d18c02fc3f
+    0000000000000000.0000000000000000.ffffffff812886b4.ffffffff98314b1f
     bc0dba94c8b89032.85876650dcfab7db.0fa28cbedc9352bf.812886b498314b1f
     61f424534fce111a.1bee8a4ca9111c8a.a435d226a20b08f9.2abc1c9e9014040d
     e4a96d68fae2c489
-VPINSRB_128_1of3(mem)
+VPMOVSXDQ_128(mem)
   before
     8cbcf4fdf1a947c0.2d7f16d40c8a9563.f1d5665e36daa69e.7185e05991a2e3fc
     fcc12d4c927449de.7af88a829b7759b6.e10876739e611043.d2ddb4c344e51f74
@@ -21539,12 +21539,12 @@
     0414a6830f2a7858
   after
     8cbcf4fdf1a947c0.2d7f16d40c8a9563.f1d5665e36daa69e.7185e05991a2e3fc
-    fcc12d4c927449de.7af88a829b7759b6.e10876739e611043.d2ddb4c344e51f74
-    0000000000000000.0000000000000000.e10876739e611043.d2ddb4c3fce51f74
+    0000000000000000.0000000000000000.000000007185e059.ffffffff91a2e3fc
+    1184943ef850850e.a6ad7ec9992199c2.c8523775feb318a5.228b49d0575ffa0f
     a7d1a6c03f48b87d.0be8ee15a2159131.8281245272db78ef.bfd99bec679dae76
     0414a6830f2a7858
 
-VPINSRB_128_2of3(reg)
+VPMOVSXWD_128(reg)
   before
     4d886701ec92945f.9a74ddbe84689d56.06f6d4d251de7cb0.eb5fb9f514e6ec4d
     f581d9d299613d37.c638b725e3bcf2c6.f3232e6d420897ea.e0b9724a02df32ed
@@ -21552,12 +21552,12 @@
     d731c01ed566290d.3a5742da5c33d61a.14092be85db14c41.d91041ba31cc1f9d
     96a64fadaad83f06
   after
-    0000000000000000.0000000000000000.f3232e6d420897ea.e006724a02df32ed
-    f581d9d299613d37.c638b725e3bcf2c6.f3232e6d420897ea.e0b9724a02df32ed
+    4d886701ec92945f.9a74ddbe84689d56.06f6d4d251de7cb0.eb5fb9f514e6ec4d
+    0000000000000000.0000000000000000.00003b5bffffcc3d.000058d2000004f8
     5a4af863b224b08d.08eaafdf775171f9.2fbbf75012201e8c.3b5bcc3d58d204f8
     d731c01ed566290d.3a5742da5c33d61a.14092be85db14c41.d91041ba31cc1f9d
     96a64fadaad83f06
-VPINSRB_128_2of3(mem)
+VPMOVSXWD_128(mem)
   before
     4ee77202de021f5f.c7802e719bb4e462.3949ea01af6cdf56.ff5bc6a2be475fb6
     dda124a6ea567cd6.88843cc7a2991c39.e18c253f8b0a46d8.4cfbc5e9d16f9097
@@ -21566,12 +21566,12 @@
     17adec4352c63c76
   after
     4ee77202de021f5f.c7802e719bb4e462.3949ea01af6cdf56.ff5bc6a2be475fb6
-    dda124a6ea567cd6.88843cc7a2991c39.e18c253f8b0a46d8.4cfbc5e9d16f9097
-    0000000000000000.0000000000000000.e18c253f8b0ab6d8.4cfbc5e9d16f9097
+    0000000000000000.0000000000000000.ffffff5bffffc6a2.ffffbe4700005fb6
+    1f9ee383e9e11294.7589e88b86a10e3e.0dee6e820d18c8cd.5736232833b41e8f
     efab2986f7af9cc8.e9db2d2be259f61c.9b3a41b550a32161.7c58dccd7fa2434b
     17adec4352c63c76
 
-VPINSRB_128_2of3(reg)
+VPMOVSXWD_128(reg)
   before
     848050f647ab45bd.2b93749c31cad89c.42c60812524c0f7f.663b1bc471b60cbf
     1f1f0252fbde9acc.ae2440b0b240803c.da9573ac73069615.4abe769b8b5d4614
@@ -21579,12 +21579,12 @@
     4fec45b60d5a16f0.f96d4782fc6b0693.3b13eeaa3601de84.cd7aa4521c999751
     234b6f0aca452591
   after
-    0000000000000000.0000000000000000.da9573ac73069615.4a91769b8b5d4614
-    1f1f0252fbde9acc.ae2440b0b240803c.da9573ac73069615.4abe769b8b5d4614
+    848050f647ab45bd.2b93749c31cad89c.42c60812524c0f7f.663b1bc471b60cbf
+    0000000000000000.0000000000000000.0000238fffffd027.ffffbba5ffff8b8b
     44d400c409e9764e.542907ae971d50d5.0e966c66e114c788.238fd027bba58b8b
     4fec45b60d5a16f0.f96d4782fc6b0693.3b13eeaa3601de84.cd7aa4521c999751
     234b6f0aca452591
-VPINSRB_128_2of3(mem)
+VPMOVSXWD_128(mem)
   before
     03cdab39e3b6f279.9cb3ce95a4bdb65d.78bd7b18fc385ca1.bb59f5e5115916b6
     48ced6cd80f7b932.867595ce6a9d9142.afe51f5cb3900f2c.ecb47e840ca8acca
@@ -21593,12 +21593,12 @@
     343af7ead7dbf806
   after
     03cdab39e3b6f279.9cb3ce95a4bdb65d.78bd7b18fc385ca1.bb59f5e5115916b6
-    48ced6cd80f7b932.867595ce6a9d9142.afe51f5cb3900f2c.ecb47e840ca8acca
-    0000000000000000.0000000000000000.afe51f5cb390b62c.ecb47e840ca8acca
+    0000000000000000.0000000000000000.ffffbb59fffff5e5.00001159000016b6
+    ce186bb0bf1438eb.6b7e98cbfa86e44a.79b1af3a3e7dda60.287084f1c37bdc6b
     7078e6d0bc1a29cd.a619d2faf004eb23.b1eda89eb80d7a68.ccd8029ad35ee146
     343af7ead7dbf806
 
-VPINSRB_128_2of3(reg)
+VPMOVSXWD_128(reg)
   before
     bde05c4c6b815d58.0cbac31891144907.93943fc6e9a4e176.356485753e4cab71
     c1172e2e2dd94ce8.7caa7f745d0f53c3.8d39dc9b81f204f2.e0e4c2a9eb4529a6
@@ -21606,12 +21606,12 @@
     ad680b1fa4d4b670.4cc3811944341973.1d349210fbc4bb0f.1a2a4cdc2c95fb46
     618992b3f705c609
   after
-    0000000000000000.0000000000000000.8d39dc9b81f204f2.e009c2a9eb4529a6
-    c1172e2e2dd94ce8.7caa7f745d0f53c3.8d39dc9b81f204f2.e0e4c2a9eb4529a6
+    bde05c4c6b815d58.0cbac31891144907.93943fc6e9a4e176.356485753e4cab71
+    0000000000000000.0000000000000000.ffff8d37ffffdb28.ffffdb04ffffaf34
     9d2b6afbb6710061.9e1495d03a15052e.f255a3e553788e41.8d37db28db04af34
     ad680b1fa4d4b670.4cc3811944341973.1d349210fbc4bb0f.1a2a4cdc2c95fb46
     618992b3f705c609
-VPINSRB_128_2of3(mem)
+VPMOVSXWD_128(mem)
   before
     401f28985a5fcfa9.4d1a0d07938eaac0.6484bf3998784bbf.6921a4881661c909
     91ba8a7771afd051.d98c6d1d1e2c18fe.c024cc1d51ec593d.346ad6b93fdcf2db
@@ -21620,12 +21620,12 @@
     1f5dfddb2af46c16
   after
     401f28985a5fcfa9.4d1a0d07938eaac0.6484bf3998784bbf.6921a4881661c909
-    91ba8a7771afd051.d98c6d1d1e2c18fe.c024cc1d51ec593d.346ad6b93fdcf2db
-    0000000000000000.0000000000000000.c024cc1d51ec093d.346ad6b93fdcf2db
+    0000000000000000.0000000000000000.00006921ffffa488.00001661ffffc909
+    3124343c5702862e.ad0b25cee1393bd6.3e6d22b28c9cfd1a.d859220f13c07330
     fd2ba3d32863ad6c.25e43387794150f3.b82b3fe26494f482.b33c86f72d9987b5
     1f5dfddb2af46c16
 
-VPINSRB_128_3of3(reg)
+VDIVPS_128(reg)
   before
     7a098329a55c5cfe.cf99522801df0136.9d6192b282d19202.0b2c9e9bf6e1f9a0
     1e8c154c3b5d9319.843bbd27fd813db8.71cf3fbd97743fae.143bbcc85d8ecaa1
@@ -21633,12 +21633,12 @@
     b54649c0255bca9b.084ab7d4d1675f97.9dad6f205625c590.b3b1212e1c3abbfb
     02b1613fab5053ab
   after
-    0000000000000000.0000000000000000.71cf3fab97743fae.143bbcc85d8ecaa1
+    0000000000000000.0000000000000000.ff80000080bc9882.a007aa637f800000
     1e8c154c3b5d9319.843bbd27fd813db8.71cf3fbd97743fae.143bbcc85d8ecaa1
     6931adb087834f15.f9dd60bd39551e20.fd79341354b791a4.ad231355b6a821b1
     b54649c0255bca9b.084ab7d4d1675f97.9dad6f205625c590.b3b1212e1c3abbfb
     02b1613fab5053ab
-VPINSRB_128_3of3(mem)
+VDIVPS_128(mem)
   before
     77ef507480f6a6ef.5f15e4eab271415a.8e503f5adfc4be4c.adb5eb50384a161d
     ec3768b9b73970f0.c4eb7a9aca4feffc.67b9733a8277f569.88dfa40f97b2c1f8
@@ -21648,11 +21648,11 @@
   after
     77ef507480f6a6ef.5f15e4eab271415a.8e503f5adfc4be4c.adb5eb50384a161d
     ec3768b9b73970f0.c4eb7a9aca4feffc.67b9733a8277f569.88dfa40f97b2c1f8
-    0000000000000000.0000000000000000.1db9733a8277f569.88dfa40f97b2c1f8
+    0000000000000000.0000000000000000.ff80000000000000.1a9d5b129ee27294
     49140824b8c458e0.2adc89370899e49b.83e7cfb7f111dd8d.14c4beea3a7d1546
     7c1717deb6f83512
 
-VPINSRB_128_3of3(reg)
+VDIVPS_128(reg)
   before
     1fbc9d121fe6a0db.e9418721bb24ee25.e48ff9fd671ba2f0.7d44f02df50f06ec
     5bfe4cf010d38f4d.faa920df9050ebda.c87854f9c19887d8.3a35acadfd94f863
@@ -21660,12 +21660,12 @@
     0a87165ffcdbf0e0.df54914a1d3e093e.7f20bc3fd3acb914.6d02ea7c8860264c
     9b7664a243c0da15
   after
-    0000000000000000.0000000000000000.c8785415c19887d8.3a35acadfd94f863
+    0000000000000000.0000000000000000.88c5c1b62d621276.0cb1a0c47f800000
     5bfe4cf010d38f4d.faa920df9050ebda.c87854f9c19887d8.3a35acadfd94f863
     8b2821e6264b4116.5816504951550a28.33e59695b099d000.9686812325ab6f1f
     0a87165ffcdbf0e0.df54914a1d3e093e.7f20bc3fd3acb914.6d02ea7c8860264c
     9b7664a243c0da15
-VPINSRB_128_3of3(mem)
+VDIVPS_128(mem)
   before
     fcae698371d547a6.366729c62e0fd957.6b3161d00e17a246.0976c162c45c7ebf
     6b7677092eae282d.6914568959713828.d8783cc640ed916c.2d33a16a1f355aae
@@ -21675,11 +21675,11 @@
   after
     fcae698371d547a6.366729c62e0fd957.6b3161d00e17a246.0976c162c45c7ebf
     6b7677092eae282d.6914568959713828.d8783cc640ed916c.2d33a16a1f355aae
-    0000000000000000.0000000000000000.bf783cc640ed916c.2d33a16a1f355aae
+    0000000000000000.0000000000000000.acb3213072488a54.633a5c3e9a528e78
     e8e69cb8c8d53ac7.5804e9d009f44787.c572ffb3d9bd65c5.b311e2d985944a06
     cdcb3c18c731d6c8
 
-VPINSRB_128_3of3(reg)
+VDIVPS_128(reg)
   before
     f11b61ece528697d.ad25aab9dc3de134.ccdf492cc52d6e6d.fcbee08177d0c050
     7b4e4dc1780440d2.f124b110ef96ee44.b7b8b294eac5fc5c.85a4bb6fc80f63a9
@@ -21687,12 +21687,12 @@
     308d6b1f739da90a.6593977084512404.668f9033dd433808.fa6d4f5cec426c76
     9de90133f94e4b43
   after
-    0000000000000000.0000000000000000.b7b8b243eac5fc5c.85a4bb6fc80f63a9
+    0000000000000000.0000000000000000.90a4acd04d01d06f.000000001b3ccd6b
     7b4e4dc1780440d2.f124b110ef96ee44.b7b8b294eac5fc5c.85a4bb6fc80f63a9
     c6b0fc041e529672.8fb02ca91eee1b26.76d9217213482b02.3bf00c6ae58608fc
     308d6b1f739da90a.6593977084512404.668f9033dd433808.fa6d4f5cec426c76
     9de90133f94e4b43
-VPINSRB_128_3of3(mem)
+VDIVPS_128(mem)
   before
     022e9dda27b6608e.143195801271b345.4e996e513ecac70a.e125fd44e3415f1c
     04099f3c92876884.cee77691975af1d1.26902e396765be65.44e96310c2cedcea
@@ -21702,11 +21702,11 @@
   after
     022e9dda27b6608e.143195801271b345.4e996e513ecac70a.e125fd44e3415f1c
     04099f3c92876884.cee77691975af1d1.26902e396765be65.44e96310c2cedcea
-    0000000000000000.0000000000000000.1c902e396765be65.44e96310c2cedcea
+    0000000000000000.0000000000000000.177090d4681105a2.a333f8fd1f08ee35
     4eb1c6e692914120.33bd4d78c69df786.127d56ca78329bc9.33270a8879c7c663
     7639440d894aab65
 
-VCOMISD_128(reg)
+VANDPS_256(reg)
   before
     11a866fde28dd7d2.4e16e3055de3891d.97743c25a70f3808.de0bb64b987cf82a
     60c06ec41f1b8453.5c405691d7cdb476.416ed233dec69d89.0ab9ee8397189b90
@@ -21714,12 +21714,12 @@
     8a1a1e88b6495348.0e172f9b429aa2e6.d65ae322c034c23b.eea5d8c4a3789d18
     5e7b81a6e9547594
   after
-    11a866fde28dd7d2.4e16e3055de3891d.97743c25a70f3808.de0bb64b987cf82a
+    20c048c41c008413.50401410124c3454.0066020208460080.00116a0191101900
     60c06ec41f1b8453.5c405691d7cdb476.416ed233dec69d89.0ab9ee8397189b90
     bfcc58cedc80ee97.52fc9c741a5c7e55.8cf70b0e084e62b6.70537b5d91133d26
     8a1a1e88b6495348.0e172f9b429aa2e6.d65ae322c034c23b.eea5d8c4a3789d18
-    0000000000000001
-VCOMISD_128(mem)
+    5e7b81a6e9547594
+VANDPS_256(mem)
   before
     9ea0f2ee7eb182c3.1df4be5c4901ed12.6a5b8df36c95dd56.79e557dca303fac3
     88e1a8887e9e80d4.d4a732b83035f9a3.44943166b359ebd1.d3e262a64c4745fb
@@ -21729,11 +21729,11 @@
   after
     9ea0f2ee7eb182c3.1df4be5c4901ed12.6a5b8df36c95dd56.79e557dca303fac3
     88e1a8887e9e80d4.d4a732b83035f9a3.44943166b359ebd1.d3e262a64c4745fb
-    f90a1e6106242af1.0b7f79060770b3a4.769097e234f18882.3e9e00ee588ce08f
+    88a0a0887e9080c0.14a432180001e902.401001622011c950.51e04284000340c3
     cee7cf6332513e47.1ec88cb46b3e56c4.dd1a3b520a696f96.18652d1e625f072a
-    0000000000000001
+    bb83e5a4074cf678
 
-VCOMISD_128(reg)
+VANDPS_256(reg)
   before
     844425ebe2dde927.e1443a7b1c307601.69ce682df82b1fad.56fd9aa251cd5d38
     d0f3e85f8fa01be0.0fedd896e3ce8e4c.48dd0adc48c44a0b.bb062fbe262a0e95
@@ -21741,12 +21741,12 @@
     5c4fe77ed2ea2e27.2c52a28172745243.32448d91a728b5d9.bcbaeb0ae9fda82f
     10fd0a120f8b09c4
   after
-    844425ebe2dde927.e1443a7b1c307601.69ce682df82b1fad.56fd9aa251cd5d38
+    d0d1284c8b200940.04ad0096a1040240.0040080c4884020b.a9002692240a0c91
     d0f3e85f8fa01be0.0fedd896e3ce8e4c.48dd0adc48c44a0b.bb062fbe262a0e95
     f9dd2a6cab21c952.34ad279fa1354353.17406d2ffa94128b.e9017692a58b3dd9
     5c4fe77ed2ea2e27.2c52a28172745243.32448d91a728b5d9.bcbaeb0ae9fda82f
-    0000000000000000
-VCOMISD_128(mem)
+    10fd0a120f8b09c4
+VANDPS_256(mem)
   before
     c196509632411cc4.56931c019f89880c.d4a6c52a73947448.f535676fee0a6da1
     ac5038836e2c9f5a.41f5c361ae8a11ac.06760c85bfa3688d.bb5ff53368c9768d
@@ -21756,11 +21756,11 @@
   after
     c196509632411cc4.56931c019f89880c.d4a6c52a73947448.f535676fee0a6da1
     ac5038836e2c9f5a.41f5c361ae8a11ac.06760c85bfa3688d.bb5ff53368c9768d
-    abf83ec3e0574cb2.7ac3da0b9c7705b4.9f8ef37e73ace83f.e20e354ab4ee0e4c
+    8010108222001c40.409100018e88000c.0426040033806008.b115652368086481
     9b5bde44a3cedff9.5d485c6905dea2cf.7bbaf701aabcb189.c58e22216b076f88
-    0000000000000000
+    bf2ab8222b9fd6ee
 
-VCOMISD_128(reg)
+VANDPS_256(reg)
   before
     2e30f4bb90437e29.584395f1d49d165b.46cf46e9834b22aa.76c593fa80de7f98
     6dead156357ea5e6.be7cdeb58ed1ab04.92a592f5b549c2f1.6c7c4355121e0d98
@@ -21768,12 +21768,12 @@
     caad5e47b1e95a95.f41616371096e2d8.be6e45669f285171.b91fd0e2d92a5c19
     c8a2a5ec450d94f2
   after
-    2e30f4bb90437e29.584395f1d49d165b.46cf46e9834b22aa.76c593fa80de7f98
+    45a04040355c84c0.a85414348e500b04.920412f135408241.282c005510080890
     6dead156357ea5e6.be7cdeb58ed1ab04.92a592f5b549c2f1.6c7c4355121e0d98
     d7a54a61b7dc84d1.a9d4357eee765b1e.9b163efb3564be4f.39ac84ff7c8918b4
     caad5e47b1e95a95.f41616371096e2d8.be6e45669f285171.b91fd0e2d92a5c19
-    0000000000000000
-VCOMISD_128(mem)
+    c8a2a5ec450d94f2
+VANDPS_256(mem)
   before
     41017e07dd3f7e6c.a04d0674bf3262de.7d0dfdcc0e3ffb5c.57f9a3a29022b802
     0207d721bdcbd3b3.b7d340547e43d75a.1f86672a067d63d7.c203551ba3dd2faf
@@ -21783,11 +21783,11 @@
   after
     41017e07dd3f7e6c.a04d0674bf3262de.7d0dfdcc0e3ffb5c.57f9a3a29022b802
     0207d721bdcbd3b3.b7d340547e43d75a.1f86672a067d63d7.c203551ba3dd2faf
-    e6822d2500bd52f2.6989065389a6f6b2.b64dcf3b145ad674.5bd7563d74e5f124
+    000156019d0b5220.a04100543e02425a.1d046508063d6354.4201010280002802
     c93cfbffc222b655.13bc56de7de9fa95.1e2eb1ec53e41060.7dc3a174a1c73b0c
-    0000000000000001
+    8611352dc30e4914
 
-VCOMISS_128(reg)
+VXORPS_256(reg)
   before
     d10e0bd2784757e7.8702bd9b2005ba0a.12b92c5ff69821ad.33f5892ae027ccc7
     ba0521d05cfda032.fba0efe535721a3b.c0c982438e3da5a7.d06dd4dfd62dc7d4
@@ -21795,12 +21795,12 @@
     d616f9891e10d6df.7a949433f61ce2c2.9d5aa3e5919fb6ef.17a4b0636eb86992
     77fa39084953889b
   after
-    d10e0bd2784757e7.8702bd9b2005ba0a.12b92c5ff69821ad.33f5892ae027ccc7
+    274150445641c292.f842e22c2b048e2f.baf2d4b46a5b6789.0309d92687297b60
     ba0521d05cfda032.fba0efe535721a3b.c0c982438e3da5a7.d06dd4dfd62dc7d4
     9d4471940abc62a0.03e20dc91e769414.7a3b56f7e466c22e.d3640df95104bcb4
     d616f9891e10d6df.7a949433f61ce2c2.9d5aa3e5919fb6ef.17a4b0636eb86992
-    0000000000000001
-VCOMISS_128(mem)
+    77fa39084953889b
+VXORPS_256(mem)
   before
     d13224d6fde3d6fa.c0c6b51b35863b98.3b81fe10da70c171.8371657b3472bb95
     ff18eeb8a6740edd.b9a19fb5eba9cb7a.2477c94ae57fed4c.89ce9824666d0ecd
@@ -21810,11 +21810,11 @@
   after
     d13224d6fde3d6fa.c0c6b51b35863b98.3b81fe10da70c171.8371657b3472bb95
     ff18eeb8a6740edd.b9a19fb5eba9cb7a.2477c94ae57fed4c.89ce9824666d0ecd
-    df78129b6111ee6d.1cf3b5c5da06c32f.0f4071cf34542180.0bbb394cc51cea43
+    2e2aca6e5b97d827.79672aaede2ff0e2.1ff6375a3f0f2c3d.0abffd5f521fb558
     4b1d0c6949c630d8.4408f2b6a1285f63.daa97089e2fb1b39.6685425fed098da2
-    0000000000000000
+    f477b1c979c23197
 
-VCOMISS_128(reg)
+VXORPS_256(reg)
   before
     12df82f606d313cd.21d4580f7b9f904a.8f2c52f5da9bdac3.5f7e44660b8194a2
     1c08af532fc76ef1.3b6a727913a9ccef.57abd1ec21ec71fb.7c8a6851cdf14be8
@@ -21822,12 +21822,12 @@
     64cb1248c68882b2.af5d024ae27ec380.d3e81db64b55e3a1.ea7c900185c15eb9
     f3f88d9eb438339c
   after
-    12df82f606d313cd.21d4580f7b9f904a.8f2c52f5da9bdac3.5f7e44660b8194a2
+    72359919bfed115e.4cc3a5ed3846521d.ad7bbae43249114d.771130678ca9b1de
     1c08af532fc76ef1.3b6a727913a9ccef.57abd1ec21ec71fb.7c8a6851cdf14be8
     6e3d364a902a7faf.77a9d7942bef9ef2.fad06b0813a560b6.0b9b58364158fa36
     64cb1248c68882b2.af5d024ae27ec380.d3e81db64b55e3a1.ea7c900185c15eb9
-    0000000000000001
-VCOMISS_128(mem)
+    f3f88d9eb438339c
+VXORPS_256(mem)
   before
     03dcc9f9ebc9340c.5afe3fba6d6eb3a7.c0546f895160f6c4.3d3fe26066853568
     f7f4c2ff46811f35.ac22b90b20674d39.87599b3c96a4f5eb.9521b674ffc393b6
@@ -21837,11 +21837,11 @@
   after
     03dcc9f9ebc9340c.5afe3fba6d6eb3a7.c0546f895160f6c4.3d3fe26066853568
     f7f4c2ff46811f35.ac22b90b20674d39.87599b3c96a4f5eb.9521b674ffc393b6
-    a90cf49ae06bae42.b6837ca67bff8d15.de37004fcd537a20.38da965cb29b3937
+    f4280b06ad482b39.f6dc86b14d09fe9e.470df4b5c7c4032f.a81e54149946a6de
     f6efd9b8d5949d60.d36c85f91bc3afe7.a2bb1cae117b4290.80b67c861d976299
-    0000000000000045
+    cb00665dd9454b85
 
-VCOMISS_128(reg)
+VXORPS_256(reg)
   before
     73064f4d843130aa.ba6bef434207a9ba.612bcf6f9b3eef5a.b0b16a457f270867
     d51234c2bae54db2.d14ab02942d08f7d.bb0a567498fd881b.e2e56600326489d0
@@ -21849,12 +21849,12 @@
     386fdeec34db1d1d.696429b26d95d3ed.435b0cdc7774b835.25375993d8beac0a
     eeec484204f3c533
   after
-    73064f4d843130aa.ba6bef434207a9ba.612bcf6f9b3eef5a.b0b16a457f270867
+    9b633beaac0a90f8.c9132b7cb02b87a8.865c410035763fce.f7c6ebcb74580828
     d51234c2bae54db2.d14ab02942d08f7d.bb0a567498fd881b.e2e56600326489d0
     4e710f2816efdd4a.18599b55f2fb08d5.3d561774ad8bb7d5.15238dcb463c81f8
     386fdeec34db1d1d.696429b26d95d3ed.435b0cdc7774b835.25375993d8beac0a
-    0000000000000001
-VCOMISS_128(mem)
+    eeec484204f3c533
+VXORPS_256(mem)
   before
     4c0fd5c5e5e9899f.f0579c78b13349d8.a137d72ed0a9aaf2.286533169145c6e6
     1b6d7d0997abb479.d277453a28859d26.9c9e22b536444a0f.4ac0878f98881e96
@@ -21864,11 +21864,11 @@
   after
     4c0fd5c5e5e9899f.f0579c78b13349d8.a137d72ed0a9aaf2.286533169145c6e6
     1b6d7d0997abb479.d277453a28859d26.9c9e22b536444a0f.4ac0878f98881e96
-    37d0baf9374601ee.3a19d59c365d54b4.36658531bb716f71.04b704b427ccfcee
+    5762a8cc72423de6.2220d94299b6d4fe.3da9f59be6ede0fd.62a5b49909cdd870
     7c040a81e0c52e29.848b490c7745ab2e.4b577c8f7d3cd444.b197a7efda9a9b9d
-    0000000000000001
+    afad6bae4e80394d
 
-VMOVUPS_YMM_to_YMMorMEM(reg)
+VORPS_256(reg)
   before
     58434c5c1f0910aa.c6d7e88caf34f557.0c179cf485ccdd3f.b74184bb95b236b3
     0aa54665e8c25c61.f114d008bfa012a4.2e0acac2ff7b2894.56ef17a221de51eb
@@ -21876,12 +21876,12 @@
     f5027638d3f1478c.5afaaf01149c4249.b054a8bda186f3b8.9cc7d34d0489a164
     fc89f3ea92204dfe
   after
-    0aa54665e8c25c61.f114d008bfa012a4.2e0acac2ff7b2894.56ef17a221de51eb
+    1fa55775edf65f7f.f996ffe9bfb453bf.6eafcfe3fffbeedc.56efb7ae3ddef1ff
     0aa54665e8c25c61.f114d008bfa012a4.2e0acac2ff7b2894.56ef17a221de51eb
     1f21553545365b1e.d9863fe12d14433b.46afcfe17ee0c6d8.042db32e3dcce017
     f5027638d3f1478c.5afaaf01149c4249.b054a8bda186f3b8.9cc7d34d0489a164
     fc89f3ea92204dfe
-VMOVUPS_YMM_to_YMMorMEM(mem)
+VORPS_256(mem)
   before
     ff3e90f0049da310.e693a3da2e805d58.503c9e559145cbf9.c8434fc201f9ede0
     81b3244d750d5ec7.5021db87f16ed82d.961887c9bf1a9c78.eacac25d3cc6eefb
@@ -21889,13 +21889,13 @@
     710e27b9c6f3f0d2.fa6454b32098f1a5.87cd38c2a0790192.bccbfa00b29cf8bc
     24deb6e225bc78ba
   after
-    710e27b9c6f3f0d2.fa6454b32098f1a5.87cd38c2a0790192.bccbfa00b29cf8bc
+    ff3e90f0049da310.e693a3da2e805d58.503c9e559145cbf9.c8434fc201f9ede0
     81b3244d750d5ec7.5021db87f16ed82d.961887c9bf1a9c78.eacac25d3cc6eefb
-    5eb52dec027b394e.8df817acb847f6b8.0a5ae74aba276ff2.7233fcf8ee7833b5
+    ffbfb4fd759dffd7.f6b3fbdfffeedd7d.d63c9fddbf5fdff9.eacbcfdf3dffeffb
     710e27b9c6f3f0d2.fa6454b32098f1a5.87cd38c2a0790192.bccbfa00b29cf8bc
     24deb6e225bc78ba
 
-VMOVUPS_YMM_to_YMMorMEM(reg)
+VORPS_256(reg)
   before
     06b72e08e267f05b.988a8ca1de82417e.f4b18f0ac4ec069f.e93ff81f8a1b0e84
     bda45de085269c4c.aef7d98e6533e680.d52bc31b41cf7053.0b7aa24c961951f6
@@ -21903,12 +21903,12 @@
     1fe6d153f0157fce.16d01d2b322c1f30.bfd4062034743698.037ea4c5835b6c04
     91dff5eb9bb7bcf9
   after
-    bda45de085269c4c.aef7d98e6533e680.d52bc31b41cf7053.0b7aa24c961951f6
+    bfef7ff5afa7bc7d.aef7dbef7d33fe81.ff3fef5f73cf7c7f.cb7bb27df699d7f6
     bda45de085269c4c.aef7d98e6533e680.d52bc31b41cf7053.0b7aa24c961951f6
     a7ef3fd5ab87b839.8e208b6d78129c01.fa1dec5432ce6c6d.cb4bb235e0808712
     1fe6d153f0157fce.16d01d2b322c1f30.bfd4062034743698.037ea4c5835b6c04
     91dff5eb9bb7bcf9
-VMOVUPS_YMM_to_YMMorMEM(mem)
+VORPS_256(mem)
   before
     4f3a2090459e321d.80d30dc6ee5d2eb5.20d40cb2b08c2a36.819c0eebe24d0a80
     1b5aa1a19c1e8b9b.2803f19a44ea019d.8af8d2f00d3f7b42.9ac1ff21d9e623d3
@@ -21916,13 +21916,13 @@
     491d96b8c318d558.b95b9f156203011b.ead0d83ed6cad917.44528c7e0f851764
     8d55207d87a469fb
   after
-    491d96b8c318d558.b95b9f156203011b.ead0d83ed6cad917.44528c7e0f851764
+    4f3a2090459e321d.80d30dc6ee5d2eb5.20d40cb2b08c2a36.819c0eebe24d0a80
     1b5aa1a19c1e8b9b.2803f19a44ea019d.8af8d2f00d3f7b42.9ac1ff21d9e623d3
-    cf0cf40abd4383a0.72c1783b8c483330.2e08edd0664fcb7e.678fd52eb4cabe3a
+    5f7aa1b1dd9ebb9f.a8d3fddeeeff2fbd.aafcdef2bdbf7b76.9bddffebfbef2bd3
     491d96b8c318d558.b95b9f156203011b.ead0d83ed6cad917.44528c7e0f851764
     8d55207d87a469fb
 
-VMOVUPS_YMM_to_YMMorMEM(reg)
+VORPS_256(reg)
   before
     9ee68e98b8b2f2ab.63570295cba93eee.5b1b609463a8a709.981c0f2579bc5f38
     d34fd1393d3ceb22.fb86b38ff0027a8e.b24fb9252ac361a7.16b70e746c301a0e
@@ -21930,12 +21930,12 @@
     19dcc6c2b4f0250f.10f8da86033e5a9f.f33e20297c87ffa2.ed0d55f2b1ce1e87
     006095fa3a11e083
   after
-    d34fd1393d3ceb22.fb86b38ff0027a8e.b24fb9252ac361a7.16b70e746c301a0e
+    dbdff5ffbffcfb2b.fbfebb9fff327fee.be4fbd377edf6ba7.3eff5f74ef32dece
     d34fd1393d3ceb22.fb86b38ff0027a8e.b24fb9252ac361a7.16b70e746c301a0e
     88dde5ceb2cc9309.eb7828904f304566.1c41a53254de6aa0.3e6e5114cb32c6c4
     19dcc6c2b4f0250f.10f8da86033e5a9f.f33e20297c87ffa2.ed0d55f2b1ce1e87
     006095fa3a11e083
-VMOVUPS_YMM_to_YMMorMEM(mem)
+VORPS_256(mem)
   before
     51338d198306c6e3.e2987180de34dcde.47d1475c29397668.959126753e495c56
     bd52ba39a7ba8cd4.3f5ce076cd23f422.6ad0e9fedc2c55eb.5c88b48238b1bc6a
@@ -21943,13 +21943,13 @@
     57a39f30f28cac18.2430ffb768323bbc.e770c2565a2a4bd1.cd8e558e3da07862
     2e35606782404c9d
   after
-    57a39f30f28cac18.2430ffb768323bbc.e770c2565a2a4bd1.cd8e558e3da07862
+    51338d198306c6e3.e2987180de34dcde.47d1475c29397668.959126753e495c56
     bd52ba39a7ba8cd4.3f5ce076cd23f422.6ad0e9fedc2c55eb.5c88b48238b1bc6a
-    20889648c338ef82.8c76110f1d49ab88.56c13e583823b255.a56ec5bb034a5c8a
+    fd73bf39a7becef7.ffdcf1f6df37fcfe.6fd1effefd3d77eb.dd99b6f73ef9fc7e
     57a39f30f28cac18.2430ffb768323bbc.e770c2565a2a4bd1.cd8e558e3da07862
     2e35606782404c9d
 
-VDPPD_128_1of4(reg)
+VANDNPD_256(reg)
   before
     25afe3b06db513e7.3c6d50df51c27cc2.65d7a7da4d6be169.f9a9efe45e4eda8c
     0f48d8d69a8b0aee.acb32640fbe71ead.aab703e4657fd93c.693843ef5f9a1bb1
@@ -21957,12 +21957,12 @@
     27060e6a2c8c77dd.9de32dc8a22cc3f6.af51cc5ea46aad03.ce864d28c9dca7ec
     7cdffb2e6be96859
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    4004250124446510.0340993f04004000.450810020a8006c1.10c038002001c44c
     0f48d8d69a8b0aee.acb32640fbe71ead.aab703e4657fd93c.693843ef5f9a1bb1
     464c3d45a64f6d5c.83419b3f0d074c05.4f1c11424efb5ee1.11e83961791bcc6d
     27060e6a2c8c77dd.9de32dc8a22cc3f6.af51cc5ea46aad03.ce864d28c9dca7ec
     7cdffb2e6be96859
-VDPPD_128_1of4(mem)
+VANDNPD_256(mem)
   before
     f7bdc0617a4fcde1.0ec445afc9cf651e.d66457c7d7643fab.28a431a60258024f
     1bec16ac121990af.57d0e08219a273cb.0a929528c7ba7b50.155f3a8405529970
@@ -21972,11 +21972,11 @@
   after
     f7bdc0617a4fcde1.0ec445afc9cf651e.d66457c7d7643fab.28a431a60258024f
     1bec16ac121990af.57d0e08219a273cb.0a929528c7ba7b50.155f3a8405529970
-    c43a7bfb50536ef0.5e77d94eb693dd8f.153763d88e3b3412.d1cfe56648e2ad13
+    e411c04168464d40.0804052dc04d0414.d46442c7104404ab.28a001220208020f
     ce726b3a4f0a23cf.7f052e7f3f2ede17.d3203ec149f2261d.ba402db767977be3
     2afe0ee3fffa3f8e
 
-VDPPD_128_1of4(reg)
+VANDNPD_256(reg)
   before
     7f558456ac9934bd.145f60552c496a7a.16c6db814dfeb30e.2019a1d114eb0c9c
     13908c7c0900971f.74ced838021c001a.7f05dac07f8f9821.d8ee08f20a33a4bc
@@ -21984,12 +21984,12 @@
     6ce63f9144529726.ef623e060bb009f0.3731c3a5b825814a.f85bd31ce8ddd48e
     198b2efc0858e698
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    446d2181b2b92040.890106c7ed80a1c4.00102128006041dc.0600e70045c40301
     13908c7c0900971f.74ced838021c001a.7f05dac07f8f9821.d8ee08f20a33a4bc
     44fd21c1b2b9a45d.c98b4ecfed90a1de.161029a86e6dc9fc.d66aef1247d5a7a9
     6ce63f9144529726.ef623e060bb009f0.3731c3a5b825814a.f85bd31ce8ddd48e
     198b2efc0858e698
-VDPPD_128_1of4(mem)
+VANDNPD_256(mem)
   before
     15c77e9ec45198f2.e898e2595a56ab24.c21f24ca7588f37c.3eb5a423f942fdb7
     c7db3eee38d4a6c9.155f068391521d04.1d8d7d0549251caf.87e8c88fcc5179f1
@@ -21999,11 +21999,11 @@
   after
     15c77e9ec45198f2.e898e2595a56ab24.c21f24ca7588f37c.3eb5a423f942fdb7
     c7db3eee38d4a6c9.155f068391521d04.1d8d7d0549251caf.87e8c88fcc5179f1
-    0d93ebd87eeece49.4d87a87d85d12971.de7ac3a5a3923fb5.6e162c53cedc30a2
+    10044010c4011832.e880e0584a04a220.c21200ca3488e350.3815242031028406
     c2bbff48b5aaca9d.ed5bc3b1d05f0a18.e0b074959edb1ab9.4e8bcbdd9a725f76
     8592a197cc9c421a
 
-VDPPD_128_1of4(reg)
+VANDNPD_256(reg)
   before
     6e79aaef01e8143a.c11ef82bf61457f2.5229538d1189fda4.fefc0bc1560d67e8
     658ae250d4e11382.e88a516b5f393173.d63b547ce1da3ec2.162a0515e833e36e
@@ -22011,12 +22011,12 @@
     ec5dd1ddc70c8237.1aa814b718e2bbab.ae5e9b43a4229963.a05c0ee5088c572d
     cbf71639cfd7c7be
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    801004262214681c.114186940004020c.00c483821e04011c.0104d86810480810
     658ae250d4e11382.e88a516b5f393173.d63b547ce1da3ec2.162a0515e833e36e
     c5124626e214799c.11c986f60c24134d.d6dec3eadede091e.0306dc7d70594976
     ec5dd1ddc70c8237.1aa814b718e2bbab.ae5e9b43a4229963.a05c0ee5088c572d
     cbf71639cfd7c7be
-VDPPD_128_1of4(mem)
+VANDNPD_256(mem)
   before
     5ea47165df465556.35b77fe11e556cfd.ddf37599a07de2ba.ba07d8f3ce312b3e
     3630995654e6bf20.fb6b4c9e837b719b.3876278abf0447a6.56257666f998fb5a
@@ -22026,11 +22026,11 @@
   after
     5ea47165df465556.35b77fe11e556cfd.ddf37599a07de2ba.ba07d8f3ce312b3e
     3630995654e6bf20.fb6b4c9e837b719b.3876278abf0447a6.56257666f998fb5a
-    30650cf64bc2bf49.9cc73581930bcebc.05fca5759180a49a.de037108c0e14564
+    488460218b004056.049433611c040c64.c58150110079a018.a802889106210024
     260f4533dfe712fd.721534f4e991be0d.22536c4633ffb6c3.aeefc646bf9a4408
     2233708a934f35f1
 
-VDPPD_128_2of4(reg)
+VANDNPS_256(reg)
   before
     961c6b42d88b53cc.f6fcc0f72d607367.dba2476522977f39.6945f6e9c18c394d
     66f6b3d828dadc44.7af7f9305039a0b4.31ba6a3ed9ab4bee.b79fc14a5633e863
@@ -22038,12 +22038,12 @@
     8aac1b5360e21abe.114597ae873c49a6.18baccdd322bf69c.d9bb07f70601bee5
     64147b1b59405ba8
   after
-    0000000000000000.0000000000000000.60dd0ef3aabed5d4.0000000000000000
+    8808442202000202.850804c924465300.c00195c122501411.4820081408000110
     66f6b3d828dadc44.7af7f9305039a0b4.31ba6a3ed9ab4bee.b79fc14a5633e863
     ee0c45ba22c80a06.8fcb6dc9647e5310.d1a997edaa585ed5.e92d48560e018131
     8aac1b5360e21abe.114597ae873c49a6.18baccdd322bf69c.d9bb07f70601bee5
     64147b1b59405ba8
-VDPPD_128_2of4(mem)
+VANDNPS_256(mem)
   before
     66061eac24c915a9.9620330f7eb34717.dd31f3cbd27e3da2.603b047a0daf4def
     bc5b6e9882a8a912.6eb6895a19c8cebe.cd5bfd0c6351ec31.07763b30d670a07a
@@ -22053,11 +22053,11 @@
   after
     66061eac24c915a9.9620330f7eb34717.dd31f3cbd27e3da2.603b047a0daf4def
     bc5b6e9882a8a912.6eb6895a19c8cebe.cd5bfd0c6351ec31.07763b30d670a07a
-    40e0e6ca90ead00f.6db817a0ccaceb5e.be8f315d56c0127f.67b86d6b2afb2ae8
+    42041024244114a9.9000320566330101.102002c3902e1182.6009044a098f4d85
     cf61032e699a49ce.f173db4d34ebdaa4.8c990cabc6d76bb8.dd4d9697a4db29e5
     c581b320e09cd71f
 
-VDPPD_128_2of4(reg)
+VANDNPS_256(reg)
   before
     7ca0bf737bcb713f.45aa3fb02ac4ce78.5533cfceec11d63b.134409e0cfa3b207
     5cf6b6fa10f332f4.7e87183cee741c3c.f543f18d91ab1dd1.2f5da4ea8e2ea498
@@ -22065,12 +22065,12 @@
     0a7556589b5f1cc8.a92c8e22f19902bc.5887ad790f6976a4.960aa5299cb77833
     9934033724ccd395
   after
-    0000000000000000.0000000000000000.ac2013a25e014c84.0000000000000000
+    820801012c004508.004001821083e340.08b00c702e44e00e.90a05a1110815900
     5cf6b6fa10f332f4.7e87183cee741c3c.f543f18d91ab1dd1.2f5da4ea8e2ea498
     c2ce95233ca157e8.56c409bed2b7ef44.2cf13df8be44e80f.bcb15ab31e87fd98
     0a7556589b5f1cc8.a92c8e22f19902bc.5887ad790f6976a4.960aa5299cb77833
     9934033724ccd395
-VDPPD_128_2of4(mem)
+VANDNPS_256(mem)
   before
     a1fdefc9d0d2c8e9.9037f707c7bbbd3f.538c2354672412d2.d3523f7e21a50139
     8a30e5cbbfd3135b.b060739b5f4175fa.30b045415166dbaf.fb9eee729084c67d
@@ -22080,11 +22080,11 @@
   after
     a1fdefc9d0d2c8e9.9037f707c7bbbd3f.538c2354672412d2.d3523f7e21a50139
     8a30e5cbbfd3135b.b060739b5f4175fa.30b045415166dbaf.fb9eee729084c67d
-    309861290add7218.c63cc680fc7b81a4.1c646fd3cb6a1882.2bb7b6c1f793011a
+    21cd0a004000c8a0.0017840480ba8805.430c221426000050.0040110c21210100
     6f02e0cfcffb9f4c.2e17ed223cf81dea.f3741df8f03d8775.bee993d7f25dedbd
     127f82201e6ec811
 
-VDPPD_128_2of4(reg)
+VANDNPS_256(reg)
   before
     81c77e081753cbc3.233adda92a3a5622.443ce2edbb418477.90accb9bdceae1b4
     680b83fb7896357e.270cd4a436a555c7.64f8a34d14e4f4f9.d1d7f6a8ac7de56c
@@ -22092,12 +22092,12 @@
     0fba98b3e36c29c2.94ada1a9d330162d.3265777dc665d986.ac3aafaf6687d7f6
     fd09368389153c20
   after
-    0000000000000000.0000000000000000.23ac98e9fdbe388f.0000000000000000
+    04900c0485404081.5840010a00480220.8a0708a2e0080300.0000080250020a81
     680b83fb7896357e.270cd4a436a555c7.64f8a34d14e4f4f9.d1d7f6a8ac7de56c
     24988d65ddc640ef.594441aa10495667.ea972bafe46ca719.91c3180a7c034ec9
     0fba98b3e36c29c2.94ada1a9d330162d.3265777dc665d986.ac3aafaf6687d7f6
     fd09368389153c20
-VDPPD_128_2of4(mem)
+VANDNPS_256(mem)
   before
     62fc2a70ffba3b73.86bda14f25162ca2.b4156f8b9b685146.97ae8124575cc8ea
     b6de0563e4818e1a.e6eca3a74050843c.9446273e85fdc2dd.77be471132dcaef1
@@ -22107,11 +22107,11 @@
   after
     62fc2a70ffba3b73.86bda14f25162ca2.b4156f8b9b685146.97ae8124575cc8ea
     b6de0563e4818e1a.e6eca3a74050843c.9446273e85fdc2dd.77be471132dcaef1
-    d47d45485477f242.89959a26cfa46f3c.120d45adadf9261f.2de1c4aff372c848
+    40202a101b3a3161.0011004825062882.201148811a001102.800080244500400a
     9aa3650c6da62316.cc0282386fa1274d.093645c42e6a3938.1562f46a37a9519b
     8a8ed4ad990d8695
 
-VDPPD_128_3of4(reg)
+VORPD_256(reg)
   before
     eab15ee6b62ba3e3.e21de199481cdcc3.0b805848bbd0e81b.548da46f245cb753
     901790802a8de431.8ab736dd03e5db74.a25b17c44fbff053.d1dedd9aacda5b9c
@@ -22119,12 +22119,12 @@
     1ddbda888453c17b.667b5737889d9595.495740aec20abfb1.cd9ccd20e0aa086c
     04a37d54c5158849
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    d71ff5e8afcfe43b.eebffedfbbeddb76.eedfbfdccffff9f3.dbfefdbbeefafbdd
     901790802a8de431.8ab736dd03e5db74.a25b17c44fbff053.d1dedd9aacda5b9c
     d70c65e88fc2842a.6c3ddec3ba0cd956.eedfbb18c8f979a1.5af46c31e2f0e241
     1ddbda888453c17b.667b5737889d9595.495740aec20abfb1.cd9ccd20e0aa086c
     04a37d54c5158849
-VDPPD_128_3of4(mem)
+VORPD_256(mem)
   before
     dcd3f6b7aa3c1f05.bcd2e9cda3ced4cf.523d1c258aa4c95c.1011a2f3d87f002e
     32f9b637ae2b89cc.123b902488befcd3.0e4eaa79db2e32d8.9f57de53a7e376c4
@@ -22134,11 +22134,11 @@
   after
     dcd3f6b7aa3c1f05.bcd2e9cda3ced4cf.523d1c258aa4c95c.1011a2f3d87f002e
     32f9b637ae2b89cc.123b902488befcd3.0e4eaa79db2e32d8.9f57de53a7e376c4
-    e0e038beeaef82c9.7963caf7cfb07332.747b7b1f97468c35.5277ef3bcac25e20
+    fefbf6b7ae3f9fcd.befbf9edabfefcdf.5e7fbe7ddbaefbdc.9f57fef3ffff76ee
     c356f93a7c93c529.4f9693b4162f7699.61910d03dbf9929e.85bbd116dda9f4ee
     946f804f7d2373da
 
-VDPPD_128_3of4(reg)
+VORPD_256(reg)
   before
     dbe1f95445bd188f.b825739680240f17.ee20e8c5f6c741b4.b259db11c251023f
     b55c3790d2021fb9.991a24be11ad1cc0.b44dc3980d05102e.41a26136695d9646
@@ -22146,12 +22146,12 @@
     979bf25da9bd421f.92a618224cd86ef2.20be00314fa0a8f2.8ce3867165ba1b30
     01741d60f324866c
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    b57f37ffff7edfbd.db1ba7be5dbfbfd0.ff6de398ff751ebe.ebb77d7eed7f9edf
     b55c3790d2021fb9.991a24be11ad1cc0.b44dc3980d05102e.41a26136695d9646
     802b366fbf7ec305.4301879e4c3aa750.fb682298f7741eb4.eb371c5cec260add
     979bf25da9bd421f.92a618224cd86ef2.20be00314fa0a8f2.8ce3867165ba1b30
     01741d60f324866c
-VDPPD_128_3of4(mem)
+VORPD_256(mem)
   before
     24b45c14af7104bd.56f967c62b4cd6b2.63d554362d912bd3.809c59cfb216e993
     d270bf7bb8ac544e.198e9216e2b6bb6b.905ab6c70c749a1e.754c2adeba611e43
@@ -22161,11 +22161,11 @@
   after
     24b45c14af7104bd.56f967c62b4cd6b2.63d554362d912bd3.809c59cfb216e993
     d270bf7bb8ac544e.198e9216e2b6bb6b.905ab6c70c749a1e.754c2adeba611e43
-    e774c38027e1304c.3ba96eb969882ff6.f600b9bf058a7900.5c1b6ecb060d84b0
+    f6f4ff7fbffd54ff.5ffff7d6ebfefffb.f3dff6f72df5bbdf.f5dc7bdfba77ffd3
     3f8ce30f1a1c55e2.1a95f71c5d4d6cfe.7195dc0c33e182a5.9154210030a75483
     71453febd4bacd6b
 
-VDPPD_128_3of4(reg)
+VORPD_256(reg)
   before
     5638c4f68fd22912.b6839b14ad6a7f3d.119d29a95991af30.dde39898b2847138
     9d7aad8ffc7ca524.2827677cfbd76989.7b0f00cefae03337.16b76a519f8004e6
@@ -22173,12 +22173,12 @@
     c11b98175eb4ec3c.6da12c203a3a70a2.1c5c8f8c98d2f176.5f2042f731b00141
     274e3fbc0efde447
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    bf7afdaffc7ffd6f.7967e77dfbfff9f9.ff3f79fefbe737f7.feffef739fe0f5fe
     9d7aad8ffc7ca524.2827677cfbd76989.7b0f00cefae03337.16b76a519f8004e6
     a258f520b8437d4f.7142c331216dd0f1.b63579f6dbc735c0.f8dccf2215e0f5da
     c11b98175eb4ec3c.6da12c203a3a70a2.1c5c8f8c98d2f176.5f2042f731b00141
     274e3fbc0efde447
-VDPPD_128_3of4(mem)
+VORPD_256(mem)
   before
     2c31435dc9d25917.561292df8b592f9a.f8101d36624a04c7.0bd03efece8ba306
     4996c9c67d3b1dde.bd88dfe4dac08213.ee5b125eb6a74a8d.dddc82b71980871c
@@ -22188,11 +22188,11 @@
   after
     2c31435dc9d25917.561292df8b592f9a.f8101d36624a04c7.0bd03efece8ba306
     4996c9c67d3b1dde.bd88dfe4dac08213.ee5b125eb6a74a8d.dddc82b71980871c
-    5c494ce34745ecc7.52c87c92e8752053.2a4d8783525ffb1f.f0ce5823143cd863
+    6db7cbdffdfb5ddf.ff9adfffdbd9af9b.fe5b1f7ef6ef4ecf.dfdcbeffdf8ba71e
     40164aa142fb81ff.7120645650034608.8ab4f893507ed6ab.9ef0bbaf5b4cd388
     4590a7c58b3bb337
 
-VDPPD_128_4of4(reg)
+VPERMILPS_256_0x0F(reg)
   before
     3ff818d23f95b61b.d1c93fea8b699ab2.76da939aaff630db.e95ae279cf0e965a
     e9750b4314e716e1.ea2da5ac3d9cf10b.bc4305cba0da1a7b.230cc021e91df65b
@@ -22200,12 +22200,12 @@
     bedd63fd8fa0dfc1.293cb9474d7e4b61.8051a4a5a9a7ddcc.97c449675fe688fd
     8a62ebdef3b832f7
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
-    e9750b4314e716e1.ea2da5ac3d9cf10b.bc4305cba0da1a7b.230cc021e91df65b
+    3ff818d23f95b61b.d1c93fea8b699ab2.76da939aaff630db.e95ae279cf0e965a
+    749f4237749f4237.a0527a82a0527a82.bab7b2d8bab7b2d8.a1a7b756a1a7b756
     a0527a82a5bc0f34.6910fad1749f4237.a1a7b756bf3c3f92.13960e77bab7b2d8
     bedd63fd8fa0dfc1.293cb9474d7e4b61.8051a4a5a9a7ddcc.97c449675fe688fd
     8a62ebdef3b832f7
-VDPPD_128_4of4(mem)
+VPERMILPS_256_0x0F(mem)
   before
     c73b72c693396df2.a060c11f6d20c033.057e5ef9e446c6b6.b58fc826faa82dd6
     2c1d590c5a73f519.a2299153dcc7ef37.dba266d354027061.9cab1f444dca6e5c
@@ -22214,12 +22214,12 @@
     143130846d6f268b
   after
     c73b72c693396df2.a060c11f6d20c033.057e5ef9e446c6b6.b58fc826faa82dd6
-    2c1d590c5a73f519.a2299153dcc7ef37.dba266d354027061.9cab1f444dca6e5c
+    6d20c033a060c11f.c73b72c693396df2.faa82dd6b58fc826.057e5ef9e446c6b6
     94d21c9d64758599.2182cd077721a779.86744bc1b9be048f.90f2a56b3e99da09
     da273864cf48db9e.77b873a6dbbb26a4.e1c08baf3087406c.efb057076aa1ae8a
     143130846d6f268b
 
-VDPPD_128_4of4(reg)
+VPERMILPS_256_0x0F(reg)
   before
     5ac12c4ee18f7db7.dce8274cb4fab053.01177e9ca320a665.ca51a189d468de23
     1fac47d1658bf0bb.74e167433196c3e4.1beaea566bdc6467.1bf4093bc26e9ae1
@@ -22227,12 +22227,12 @@
     92c1ccb3074c1af9.daaac80b62bd8e4e.6f20d6c16e8b88e1.69a1c1d8ea166021
     1d42089b5cd0e1fa
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
-    1fac47d1658bf0bb.74e167433196c3e4.1beaea566bdc6467.1bf4093bc26e9ae1
+    5ac12c4ee18f7db7.dce8274cb4fab053.01177e9ca320a665.ca51a189d468de23
+    6228ce7f6228ce7f.bd3d7e79bd3d7e79.15a432d215a432d2.217fb43e217fb43e
     bd3d7e7992f1bb42.7fdd73346228ce7f.217fb43ed17c9b57.b27640b215a432d2
     92c1ccb3074c1af9.daaac80b62bd8e4e.6f20d6c16e8b88e1.69a1c1d8ea166021
     1d42089b5cd0e1fa
-VDPPD_128_4of4(mem)
+VPERMILPS_256_0x0F(mem)
   before
     ab2491e688df708b.f8842de95d29488b.5f12e0b44d60bf7d.611a4e4ce09667b0
     ed15d8a4894ecbfe.4dd29d89331382a5.ebe2391c401e1c39.53b91749c2287471
@@ -22241,12 +22241,12 @@
     c16c322d25810415
   after
     ab2491e688df708b.f8842de95d29488b.5f12e0b44d60bf7d.611a4e4ce09667b0
-    ed15d8a4894ecbfe.4dd29d89331382a5.ebe2391c401e1c39.53b91749c2287471
+    5d29488bf8842de9.ab2491e688df708b.e09667b0611a4e4c.5f12e0b44d60bf7d
     c0df5ac37c2aac7f.ebf718fe229604f3.5be64e2d570263ae.a1492d26b1cdeacf
     014f912e7c7dcf3b.2f3f9bb4c83f0920.89ea9bd4ac184e07.a7168d4e49110677
     c16c322d25810415
 
-VDPPD_128_4of4(reg)
+VPERMILPS_256_0x0F(reg)
   before
     4b96182fe1a82054.8a31fbd1a556f25e.76f52116c199ced9.52b99cfe5e6c9971
     a0e13bc01a1395e0.3851149814becf13.1a67a692a8308fca.9221ce95870b0117
@@ -22254,12 +22254,12 @@
     200a293f71e27d93.737b3f433370aae5.edaa9e86b147f401.e8e8b2bfaf5818ca
     b5df5c29e61e3f2e
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
-    a0e13bc01a1395e0.3851149814becf13.1a67a692a8308fca.9221ce95870b0117
+    4b96182fe1a82054.8a31fbd1a556f25e.76f52116c199ced9.52b99cfe5e6c9971
+    e5c32387e5c32387.1e99974c1e99974c.4300432643004326.78df269478df2694
     1e99974c6b4ca067.e77b5670e5c32387.78df26941991889e.26ecac8743004326
     200a293f71e27d93.737b3f433370aae5.edaa9e86b147f401.e8e8b2bfaf5818ca
     b5df5c29e61e3f2e
-VDPPD_128_4of4(mem)
+VPERMILPS_256_0x0F(mem)
   before
     699d27b1045e727f.0280ec05c75e6710.b81c4afe1ad21f5a.d31408d50cde10a1
     e0f08e4327256ee8.1f47dc0b094e9b8b.922cf38eb7f43f12.876962edc5e31827
@@ -22268,12 +22268,12 @@
     10e0e3253ef90ee1
   after
     699d27b1045e727f.0280ec05c75e6710.b81c4afe1ad21f5a.d31408d50cde10a1
-    e0f08e4327256ee8.1f47dc0b094e9b8b.922cf38eb7f43f12.876962edc5e31827
+    c75e67100280ec05.699d27b1045e727f.0cde10a1d31408d5.b81c4afe1ad21f5a
     f6a30ccb687eef96.d5aaf5bbd53d55b0.dd75b6dd26e2c638.65f4a73b78e14842
     87812035e575b0b5.7ff63383c4b8d02a.75c410d982a96ff9.c902d429c264db9c
     10e0e3253ef90ee1
 
-VPINSRW_128_1of4(reg)
+VPERMILPS_256_0xFA(reg)
   before
     94d8d29a892b1cbf.6f57436eba166e70.787893ce744a4aa6.36e47c6de754f880
     b2379cf43e8743df.8af1f360026ee5f4.1e7a1007817ffdd0.fca3768572ef1bfa
@@ -22281,12 +22281,12 @@
     2c59b20758e9c69c.c9a1e7235c71ed05.dd3052f81f0300dc.072a04f168262176
     048a911d0bdb7cd0
   after
-    0000000000000000.0000000000000000.1e7a1007817ffdd0.fca3768572ef7cd0
-    b2379cf43e8743df.8af1f360026ee5f4.1e7a1007817ffdd0.fca3768572ef1bfa
+    94d8d29a892b1cbf.6f57436eba166e70.787893ce744a4aa6.36e47c6de754f880
+    c6483e9fc6483e9f.fa97bdf0fa97bdf0.cb49a69ccb49a69c.86e3255386e32553
     c6483e9ffa97bdf0.b41baaf9d989d06c.cb49a69c86e32553.a3cc7a0d3e869493
     2c59b20758e9c69c.c9a1e7235c71ed05.dd3052f81f0300dc.072a04f168262176
     048a911d0bdb7cd0
-VPINSRW_128_1of4(mem)
+VPERMILPS_256_0xFA(mem)
   before
     76b89c7d43af61cc.40b5f698f5099c8f.a54f23cca734f5eb.ae7d0e87e96bc816
     3980a1fe2eb08e97.5ea705be6c827977.23f0dbdfd5dea749.9c7ad8b580a5baae
@@ -22295,12 +22295,12 @@
     a48f5d3226c1e25f
   after
     76b89c7d43af61cc.40b5f698f5099c8f.a54f23cca734f5eb.ae7d0e87e96bc816
-    3980a1fe2eb08e97.5ea705be6c827977.23f0dbdfd5dea749.9c7ad8b580a5baae
-    0000000000000000.0000000000000000.23f0dbdfd5dea749.c816d8b580a5baae
+    76b89c7d43af61cc.40b5f69840b5f698.a54f23cca734f5eb.ae7d0e87ae7d0e87
+    28ae1c8ae5eabd5c.e17cdbe55ae09afd.21528c480279be4c.0174abef7e3f114f
     210d8a0f8667ab49.2780747a5aaf3bd0.7a3fb1f34b13f51f.3ab7839f82c50ba6
     a48f5d3226c1e25f
 
-VPINSRW_128_1of4(reg)
+VPERMILPS_256_0xFA(reg)
   before
     9948331506c1d325.ff6b65772d361487.8bffcde7087c979a.0a84c6cccbb808ef
     762e03b3bf5119a5.9d922bb0f560b345.6945e09a01d2eb07.aced47bf9f72b5e7
@@ -22308,12 +22308,12 @@
     59af7fcf294d9782.8e6e664259fa86eb.02542a7e434b6b7d.9a5a7fa4b15bc802
     9ef62d6d27a1a77c
   after
-    0000000000000000.0000000000000000.6945e09a01d2eb07.aced47bf9f72a77c
-    762e03b3bf5119a5.9d922bb0f560b345.6945e09a01d2eb07.aced47bf9f72b5e7
+    9948331506c1d325.ff6b65772d361487.8bffcde7087c979a.0a84c6cccbb808ef
+    978cc877978cc877.ecfbf18becfbf18b.1d9dabfd1d9dabfd.e13e73c4e13e73c4
     978cc877ecfbf18b.d94f58a5faf345ac.1d9dabfde13e73c4.3e45b1b8e24fb634
     59af7fcf294d9782.8e6e664259fa86eb.02542a7e434b6b7d.9a5a7fa4b15bc802
     9ef62d6d27a1a77c
-VPINSRW_128_1of4(mem)
+VPERMILPS_256_0xFA(mem)
   before
     25e63701612d0ecf.16e4222614d34736.97bbd3732e81322c.76b75788c3850edd
     0af6194a7a0bbb27.2b75afe846173c54.d20219249495049c.d4103087fe789991
@@ -22322,12 +22322,12 @@
     01dc957a2623005b
   after
     25e63701612d0ecf.16e4222614d34736.97bbd3732e81322c.76b75788c3850edd
-    0af6194a7a0bbb27.2b75afe846173c54.d20219249495049c.d4103087fe789991
-    0000000000000000.0000000000000000.d20219249495049c.0edd3087fe789991
+    25e63701612d0ecf.16e4222616e42226.97bbd3732e81322c.76b7578876b75788
+    2bf250368e4867af.f4ae21815da7b388.190eb641a741b966.77acb0e78fb14845
     62a657b0baefd194.cddd745df50fe87e.4aad26b684910db7.bdd6d31413bb56a4
     01dc957a2623005b
 
-VPINSRW_128_1of4(reg)
+VPERMILPS_256_0xFA(reg)
   before
     9e08f38662748215.8cdeaaa41a0cb301.124da5e9a9da16e1.3fa9e3704692bbba
     f2a8e7a2663a187f.8665c5fec9acca23.1f49ae8f15947b5d.d6cf6b590a4f809c
@@ -22335,12 +22335,12 @@
     2a6f86be2f576e11.5694459485a38634.01183ddd8806d453.55c8c96d062f3fac
     f734976e7669b032
   after
-    0000000000000000.0000000000000000.1f49ae8f15947b5d.d6cf6b590a4fb032
-    f2a8e7a2663a187f.8665c5fec9acca23.1f49ae8f15947b5d.d6cf6b590a4f809c
+    9e08f38662748215.8cdeaaa41a0cb301.124da5e9a9da16e1.3fa9e3704692bbba
+    57066f3c57066f3c.cb02fd44cb02fd44.501e8dbd501e8dbd.d6c9509fd6c9509f
     57066f3ccb02fd44.2a0825aae3dad225.501e8dbdd6c9509f.e9eb395febd51889
     2a6f86be2f576e11.5694459485a38634.01183ddd8806d453.55c8c96d062f3fac
     f734976e7669b032
-VPINSRW_128_1of4(mem)
+VPERMILPS_256_0xFA(mem)
   before
     a9f92050578f2847.c82f29962ec5a792.e4d3a1a9cb12a47c.8e83bb5dc6d64125
     48e4dffec7ae6316.8b91532f63d9e372.b191b5d3d033e628.53ab01a82cc5d5bf
@@ -22349,12 +22349,12 @@
     8a8764826ac8c802
   after
     a9f92050578f2847.c82f29962ec5a792.e4d3a1a9cb12a47c.8e83bb5dc6d64125
-    48e4dffec7ae6316.8b91532f63d9e372.b191b5d3d033e628.53ab01a82cc5d5bf
-    0000000000000000.0000000000000000.b191b5d3d033e628.412501a82cc5d5bf
+    a9f92050578f2847.c82f2996c82f2996.e4d3a1a9cb12a47c.8e83bb5d8e83bb5d
+    b0c25064dfd11ccb.d1e3fff56b1e5f5e.999cfdffb0120865.acdb0d295760c9d0
     be5cef6ebd051194.f46f2b54e1205702.79bef61a88bcc75e.f561da4ee2325c02
     8a8764826ac8c802
 
-VPINSRW_128_2of4(reg)
+VPERMILPS_256_0xA3(reg)
   before
     c69aa7328aad4a7b.4c8139097d55fc9a.5182d3b8616c0709.2bc51b0f733ddf40
     07e6a0c8df6d1e1a.37fca81f3acd990c.4568f18d888daa1f.8c7be8ca8e9f0c37
@@ -22362,12 +22362,12 @@
     0558a15a96afaa79.9423ea701c66ddde.5ddd843b3a7fbc2b.cb276b41c23b9412
     61b518d6138d674e
   after
-    0000000000000000.0000000000000000.4568f18d888daa1f.8c7b674e8e9f0c37
-    07e6a0c8df6d1e1a.37fca81f3acd990c.4568f18d888daa1f.8c7be8ca8e9f0c37
+    c69aa7328aad4a7b.4c8139097d55fc9a.5182d3b8616c0709.2bc51b0f733ddf40
+    04957f8b04957f8b.107aa614a8b74ab1.f20f7df2f20f7df2.f4f00a6e2a6d833f
     a8b74ab104957f8b.5b98ba9d107aa614.2a6d833ff20f7df2.78add936f4f00a6e
     0558a15a96afaa79.9423ea701c66ddde.5ddd843b3a7fbc2b.cb276b41c23b9412
     61b518d6138d674e
-VPINSRW_128_2of4(mem)
+VPERMILPS_256_0xA3(mem)
   before
     16225ee203f13f4f.7917a12d304adb91.be67b58279a0fa98.3a03f0ebfc68a279
     c63cb94faf73d741.623e47986fef4e7e.b53195c14431bb6b.1d2dc3bdd5566c86
@@ -22376,12 +22376,12 @@
     82b28130feb979e2
   after
     16225ee203f13f4f.7917a12d304adb91.be67b58279a0fa98.3a03f0ebfc68a279
-    c63cb94faf73d741.623e47986fef4e7e.b53195c14431bb6b.1d2dc3bdd5566c86
-    0000000000000000.0000000000000000.b53195c14431bb6b.a279c3bdd5566c86
+    03f13f4f16225ee2.7917a12d304adb91.79a0fa98be67b582.3a03f0ebfc68a279
+    4dcda30a3320ec4f.1a1a8d05ee2c3eed.554d08189927da86.62a5fa1b60d656fe
     87a29a00aa033aa6.fff771e2498ce889.7a868973928e1413.65b890733a739c8f
     82b28130feb979e2
 
-VPINSRW_128_2of4(reg)
+VPERMILPS_256_0xA3(reg)
   before
     15dfc9be49352aa6.5087181b31287c71.6b21ee9a1d9c88ff.00aa94be4e70253e
     7a8a6589b672eb85.84489b49e29b6fdd.bce4019906e759fb.c383a6e5e6dbc834
@@ -22389,12 +22389,12 @@
     2a8e858668618c46.9c8d9e8a399e5847.7964d51c845f8133.6f87cb77207ab731
     114ad7bbf9c67a8f
   after
-    0000000000000000.0000000000000000.bce4019906e759fb.c3837a8fe6dbc834
-    7a8a6589b672eb85.84489b49e29b6fdd.bce4019906e759fb.c383a6e5e6dbc834
+    15dfc9be49352aa6.5087181b31287c71.6b21ee9a1d9c88ff.00aa94be4e70253e
+    e2fdf82be2fdf82b.dc69cf160d014ffd.9ff998289ff99828.78daba214c8ca44b
     0d014ffde2fdf82b.ffb09f75dc69cf16.4c8ca44b9ff99828.9fde39d478daba21
     2a8e858668618c46.9c8d9e8a399e5847.7964d51c845f8133.6f87cb77207ab731
     114ad7bbf9c67a8f
-VPINSRW_128_2of4(mem)
+VPERMILPS_256_0xA3(mem)
   before
     60f3da8a20cac167.2d7e0291e52ae47f.39a916761544c69d.9db98f7952a450c8
     384e4ed2b09346e6.721dc388f4e43c85.b1d182248d6ad443.16d7cecca4544092
@@ -22403,12 +22403,12 @@
     0fde83c9ce6133ea
   after
     60f3da8a20cac167.2d7e0291e52ae47f.39a916761544c69d.9db98f7952a450c8
-    384e4ed2b09346e6.721dc388f4e43c85.b1d182248d6ad443.16d7cecca4544092
-    0000000000000000.0000000000000000.b1d182248d6ad443.50c8cecca4544092
+    20cac16760f3da8a.2d7e0291e52ae47f.1544c69d39a91676.9db98f7952a450c8
+    7426b17dc52cc538.55b7c2d8311ccf02.e0d15e80bc193e66.3e0a8f8217fc8e3d
     f2487e797da2fc88.3298fdee395ddaa2.a1752677bf5fc232.729ecc0846277677
     0fde83c9ce6133ea
 
-VPINSRW_128_2of4(reg)
+VPERMILPS_256_0xA3(reg)
   before
     6f18af304a370242.8d8031b1f1ffa503.640b6f35a8349912.d28957f3b1471ad2
     ef964dab57341f2c.209a46113f517dd5.495e1419192c47fe.4ed86ce1afdd0372
@@ -22416,12 +22416,12 @@
     bf91cb8a92d43265.a2a488f9d703a92b.99cfe86772af64f8.965b32c43d457766
     1a26db91052e7b10
   after
-    0000000000000000.0000000000000000.495e1419192c47fe.4ed87b10afdd0372
-    ef964dab57341f2c.209a46113f517dd5.495e1419192c47fe.4ed86ce1afdd0372
+    6f18af304a370242.8d8031b1f1ffa503.640b6f35a8349912.d28957f3b1471ad2
+    90e4c65490e4c654.82a43f29eba557a5.28d1221128d12211.d42e39403cdbe905
     eba557a590e4c654.89623a8582a43f29.3cdbe90528d12211.f030e12ed42e3940
     bf91cb8a92d43265.a2a488f9d703a92b.99cfe86772af64f8.965b32c43d457766
     1a26db91052e7b10
-VPINSRW_128_2of4(mem)
+VPERMILPS_256_0xA3(mem)
   before
     5a5d598049f6fe6b.c7a6a4c6f88fa00c.492bac595a7a7509.bb860faa9253495f
     30cc277c24a8bfa3.6030dec55ea14cf4.58c5229225155fed.004c593b25480ff1
@@ -22430,12 +22430,12 @@
     31eee3f2a588f565
   after
     5a5d598049f6fe6b.c7a6a4c6f88fa00c.492bac595a7a7509.bb860faa9253495f
-    30cc277c24a8bfa3.6030dec55ea14cf4.58c5229225155fed.004c593b25480ff1
-    0000000000000000.0000000000000000.58c5229225155fed.495f593b25480ff1
+    49f6fe6b5a5d5980.c7a6a4c6f88fa00c.5a7a7509492bac59.bb860faa9253495f
+    7a3ec173b25178e3.e47a76f4619772ca.ad3c678e57e12503.c26cc384c71bf05b
     1281a35010fbe658.b0d266bd9dfc4d3a.225df53a09e98178.5f3447f212572948
     31eee3f2a588f565
 
-VPINSRW_128_3of4(reg)
+VPERMILPS_256_0x5A(reg)
   before
     96e792ee193b925d.d55f4a005ab5c52d.2082ac8dad5d1aef.94f44a835a393078
     e86b50540cfb3add.a0a5316daa88d08f.90d743d12d441496.e0cce15463deed2e
@@ -22443,12 +22443,12 @@
     c743ea0aded39d24.b999af32d3ae5ea9.dfa05561f0da8368.7173c63d1355856e
     70d90c2ef13fd650
   after
-    0000000000000000.0000000000000000.90d743d12d44d650.e0cce15463deed2e
-    e86b50540cfb3add.a0a5316daa88d08f.90d743d12d441496.e0cce15463deed2e
+    96e792ee193b925d.d55f4a005ab5c52d.2082ac8dad5d1aef.94f44a835a393078
+    4d1fd4844d1fd484.1a5429911a542991.e0b33798e0b33798.ba3f79daba3f79da
     85c61a8e1a542991.4d1fd4841f82c5aa.5c1d28f4ba3f79da.e0b3379843e376c7
     c743ea0aded39d24.b999af32d3ae5ea9.dfa05561f0da8368.7173c63d1355856e
     70d90c2ef13fd650
-VPINSRW_128_3of4(mem)
+VPERMILPS_256_0x5A(mem)
   before
     b7b28457f9ad2799.0b30be33f503d043.c0df3e61e21957b9.77abc88669a06fec
     23c7aaa446ac3274.aed79175fa70ff9a.3fbcfeff69cd6d06.7f8b7ccec41d7811
@@ -22457,12 +22457,12 @@
     ce22f7b12d589f02
   after
     b7b28457f9ad2799.0b30be33f503d043.c0df3e61e21957b9.77abc88669a06fec
-    23c7aaa446ac3274.aed79175fa70ff9a.3fbcfeff69cd6d06.7f8b7ccec41d7811
-    0000000000000000.0000000000000000.3fbcfeff6fec6d06.7f8b7ccec41d7811
+    0b30be33f503d043.0b30be330b30be33.77abc88669a06fec.77abc88677abc886
+    90e7fb02f446b40e.0a855f3c89a765d4.10fd6af683d95cbb.538d6da59adddb83
     daddf25b208a6993.7c8625f43f33409d.106ffe344d46e004.4ffb97778a6dd4f0
     ce22f7b12d589f02
 
-VPINSRW_128_3of4(reg)
+VPERMILPS_256_0x5A(reg)
   before
     2e4e88bd222b7765.dd740b9ce6810c2e.6126de0ab8a0caa3.1bdc36a4e222b50e
     caca460802719ac6.767ac2b261395a0b.13b185e88f7b408f.0d108f325f789605
@@ -22470,12 +22470,12 @@
     25e63a0df987ab31.d5fefb09e71ae63e.51b793b0c8a8ded0.160290587fc46f69
     e55631c85ad1de2d
   after
-    0000000000000000.0000000000000000.13b185e88f7bde2d.0d108f325f789605
-    caca460802719ac6.767ac2b261395a0b.13b185e88f7b408f.0d108f325f789605
+    2e4e88bd222b7765.dd740b9ce6810c2e.6126de0ab8a0caa3.1bdc36a4e222b50e
+    7fb993887fb99388.6bb641d16bb641d1.c2d983cac2d983ca.604fdd10604fdd10
     fde42dff6bb641d1.7fb99388adbd0f57.ef7319fc604fdd10.c2d983cadf554015
     25e63a0df987ab31.d5fefb09e71ae63e.51b793b0c8a8ded0.160290587fc46f69
     e55631c85ad1de2d
-VPINSRW_128_3of4(mem)
+VPERMILPS_256_0x5A(mem)
   before
     0ba2e3078c894a8e.9d1d679d476e1293.541574232a5b9deb.95caf17262137f7b
     64b220ff32f76fb8.c0d5b21df2fab3a3.d7c97cc1938ced8b.17f82daccb1bfcbf
@@ -22484,12 +22484,12 @@
     a91cf76bf45bf0ce
   after
     0ba2e3078c894a8e.9d1d679d476e1293.541574232a5b9deb.95caf17262137f7b
-    64b220ff32f76fb8.c0d5b21df2fab3a3.d7c97cc1938ced8b.17f82daccb1bfcbf
-    0000000000000000.0000000000000000.d7c97cc17f7bed8b.17f82daccb1bfcbf
+    9d1d679d476e1293.9d1d679d9d1d679d.95caf17262137f7b.95caf17295caf172
+    cc52669e682708d7.ec5a16f895b4ca0c.3ce88fcf3dba954a.338d45cc9e4c9045
     1f4e30ce4926d216.7bf8909acc2a927b.5e3c273945f05053.45d5353d783378bc
     a91cf76bf45bf0ce
 
-VPINSRW_128_3of4(reg)
+VPERMILPS_256_0x5A(reg)
   before
     bbad89c2af513327.3972fb7df1ff89a1.cbfa1a6f34e7489b.1992c2ebc63ad9d3
     d7d5e6af449f7f74.f58941967dbee9a5.36aeb2e368782819.49b6dad1dda5ecf5
@@ -22497,12 +22497,12 @@
     9d1bf1f66e791c9a.c8c433b6af2093c7.d157f959a74355dd.779877ea3b0ba4d2
     2eeef2f5ba1fc0e4
   after
-    0000000000000000.0000000000000000.36aeb2e36878c0e4.49b6dad1dda5ecf5
-    d7d5e6af449f7f74.f58941967dbee9a5.36aeb2e368782819.49b6dad1dda5ecf5
+    bbad89c2af513327.3972fb7df1ff89a1.cbfa1a6f34e7489b.1992c2ebc63ad9d3
+    3161800531618005.50d40e6150d40e61.ca74eed8ca74eed8.05686ea005686ea0
     59e10a9c50d40e61.316180050870ae4e.1a5e536205686ea0.ca74eed8a53c47e6
     9d1bf1f66e791c9a.c8c433b6af2093c7.d157f959a74355dd.779877ea3b0ba4d2
     2eeef2f5ba1fc0e4
-VPINSRW_128_3of4(mem)
+VPERMILPS_256_0x5A(mem)
   before
     ca41dce43e835749.ffcf982a3a1ce7ca.967fd6958dda543d.b8e5a132e8961a7c
     275eb0a2e443242c.da4bfaa25148a99d.765ee58ebfabafdc.2c54465b67ecf928
@@ -22511,12 +22511,12 @@
     65ddfbe7647a8836
   after
     ca41dce43e835749.ffcf982a3a1ce7ca.967fd6958dda543d.b8e5a132e8961a7c
-    275eb0a2e443242c.da4bfaa25148a99d.765ee58ebfabafdc.2c54465b67ecf928
-    0000000000000000.0000000000000000.765ee58e1a7cafdc.2c54465b67ecf928
+    ffcf982a3a1ce7ca.ffcf982affcf982a.b8e5a132e8961a7c.b8e5a132b8e5a132
+    2011ea1dc86ce4ba.8cda13cc4f8a9fc0.462cdd8d609e5ecf.87efe33ebdd12d8e
     932607400509531e.70c7df13cf6c04df.e1b7387f8dbf1e43.2604774989d2f459
     65ddfbe7647a8836
 
-VPINSRW_128_4of4(reg)
+VPMULHW_128(reg)
   before
     a0c76c84ec5525d1.5a6981f7b7262d85.e25f5ae36d7d15a5.22c9744e611bab63
     340ec78cbdf008d5.53a6d62efbd02d1b.3dee81a8c6460ebf.e72f0de8f9bdc05c
@@ -22524,12 +22524,12 @@
     d2e3288da89490cb.473dfecda7f99282.2321c0c11735a79e.69274229e3047587
     de51d7a96dc18d12
   after
-    0000000000000000.0000000000000000.3dee8d12c6460ebf.e72f0de8f9bdc05c
+    0000000000000000.0000000000000000.087f1f36fac4fae8.f5ce039800b5e2c8
     340ec78cbdf008d5.53a6d62efbd02d1b.3dee81a8c6460ebf.e72f0de8f9bdc05c
     7bfe076b72d66eef.58a881d1ec12100b.dfc04fce75552bd9.0ab67d3770b11a59
     d2e3288da89490cb.473dfecda7f99282.2321c0c11735a79e.69274229e3047587
     de51d7a96dc18d12
-VPINSRW_128_4of4(mem)
+VPMULHW_128(mem)
   before
     47ffb8a32af51d25.9508275efab4ad14.fa2fca0c478f6eac.645cd0ed4773c0bb
     7efc610337abe2ed.20baff4b04c4ff76.4f4b607ce9e361b4.00bf7cbea29aafdb
@@ -22539,11 +22539,11 @@
   after
     47ffb8a32af51d25.9508275efab4ad14.fa2fca0c478f6eac.645cd0ed4773c0bb
     7efc610337abe2ed.20baff4b04c4ff76.4f4b607ce9e361b4.00bf7cbea29aafdb
-    0000000000000000.0000000000000000.c0bb607ce9e361b4.00bf7cbea29aafdb
+    0000000000000000.0000000000000000.fe32ebaaf9d12a3c.004ae90fe5ee13ce
     ca17fca5b0cdfa4b.fef62925b3e33538.4a30da9ba1ee7c10.b528950047d406d6
     86c7fa49c9ffe509
 
-VPINSRW_128_4of4(reg)
+VPMULHW_128(reg)
   before
     22bdeae7e6438cf0.96cce6c05352c638.091775eb8f0990ef.aa92b623efbe1bbc
     e3566246392d3636.a10089f0b689b58b.4cf4897b934e1170.1a4d4d8aaf7bc1f6
@@ -22551,12 +22551,12 @@
     48a0d7f6f3208792.e51ae6432a3ff30d.e916feae8567747f.9d0299aaf2e911c7
     6992463bafb234b5
   after
-    0000000000000000.0000000000000000.4cf434b5934e1170.1a4d4d8aaf7bc1f6
+    0000000000000000.0000000000000000.f91c009c340d07ef.f5d4e100041dfbb1
     e3566246392d3636.a10089f0b689b58b.4cf4897b934e1170.1a4d4d8aaf7bc1f6
     26dd5dd15f482188.c7815f23f47f866d.23db63435c3ff467.772e1abefc2f2aeb
     48a0d7f6f3208792.e51ae6432a3ff30d.e916feae8567747f.9d0299aaf2e911c7
     6992463bafb234b5
-VPINSRW_128_4of4(mem)
+VPMULHW_128(mem)
   before
     b5ad9d5b4c984de2.a3e9cc219141a4ff.d596993e73d5b995.fcf35628ab53cf65
     5e1e1bf7e7a61879.940538bcd639b57b.74c2f4ffec4d9431.b7bc681d698e3fc4
@@ -22566,11 +22566,11 @@
   after
     b5ad9d5b4c984de2.a3e9cc219141a4ff.d596993e73d5b995.fcf35628ab53cf65
     5e1e1bf7e7a61879.940538bcd639b57b.74c2f4ffec4d9431.b7bc681d698e3fc4
-    0000000000000000.0000000000000000.cf65f4ffec4d9431.b7bc681d698e3fc4
+    0000000000000000.0000000000000000.eca7046af7161da7.00dc230add16f3e4
     37317954856cb898.a9e567f5c4d7a353.2f5a9283dc157858.9444a6291f2150a0
     6f9ccb174f926974
 
-VPINSRW_128_4of4(reg)
+VPMULHW_128(reg)
   before
     6210993187828872.1f6b51edc13b0377.8442216ca496f807.035ece1e8b7df93b
     c8ee0de1637ee845.d42b40b16a63f271.65a143039b5a307a.f641a22fdaf77ee2
@@ -22578,12 +22578,12 @@
     6213d3b87ac75e1c.156c506f74eba764.a999ab463c233b4f.a9d80363c552882e
     2123875f9a4b842a
   after
-    0000000000000000.0000000000000000.65a1842a9b5a307a.f641a22fdaf77ee2
+    0000000000000000.0000000000000000.ddb3e9d2e85b0b3b.0347fec2087dc49c
     c8ee0de1637ee845.d42b40b16a63f271.65a143039b5a307a.f641a22fdaf77ee2
     ff8022958011c69a.323dc18e9cef3fb1.a850c72844b08858.e4d18aa2e48fc579
     6213d3b87ac75e1c.156c506f74eba764.a999ab463c233b4f.a9d80363c552882e
     2123875f9a4b842a
-VPINSRW_128_4of4(mem)
+VPMULHW_128(mem)
   before
     287e94807f86749c.4cf31fb6ec2dec78.598669400d63e6b6.c4c9eac91e3f8708
     9ab5a5b48f1015ae.1b6cfffb72ceac5a.da5588ed8464b7d2.552b801d8791a632
@@ -22593,11 +22593,11 @@
   after
     287e94807f86749c.4cf31fb6ec2dec78.598669400d63e6b6.c4c9eac91e3f8708
     9ab5a5b48f1015ae.1b6cfffb72ceac5a.da5588ed8464b7d2.552b801d8791a632
-    0000000000000000.0000000000000000.870888ed8464b7d2.552b801d8791a632
+    0000000000000000.0000000000000000.f2d3cf0bf9890721.ec4c0a99f1c52a6f
     2ee6c402a13e5a63.d3576f0a2df2b05e.0245ca8c7a2f021a.49b9a3e85c054f83
     647d2637003e5103
 
-VBROADCASTSS_256(reg)
+VPUNPCKHQDQ_128(reg)
   before
     65a3f2079bdd17a3.0978caf3dcfb755f.7663f7ac998c6cd9.62fee4553111f39e
     a87800c5c86edd0f.bf16c3a7b13632ab.6c37054689934a89.6f9df4aa35ac689d
@@ -22605,12 +22605,12 @@
     635ed6b7499358f8.2ba684069f577ce6.c5699f0e67115c3a.ffbce8aa9739c8b9
     3bd4c22b2c452d30
   after
-    65a3f2079bdd17a3.0978caf3dcfb755f.7663f7ac998c6cd9.62fee4553111f39e
+    0000000000000000.0000000000000000.132093429a90861a.6c37054689934a89
     a87800c5c86edd0f.bf16c3a7b13632ab.6c37054689934a89.6f9df4aa35ac689d
     88484ddb237cdef2.2c8c2e0a3ffb4a74.132093429a90861a.05ee7778a30a1b42
     635ed6b7499358f8.2ba684069f577ce6.c5699f0e67115c3a.ffbce8aa9739c8b9
     3bd4c22b2c452d30
-VBROADCASTSS_256(mem)
+VPUNPCKHQDQ_128(mem)
   before
     940284e97e3904d1.940896c3d63f84ce.9a304388f055822c.df6024148da20892
     e512a7cfaa210ac8.7790896d650da120.54f5e57c4b011973.bd4f1ec2a7cdc5d1
@@ -22619,12 +22619,12 @@
     88eba3eec96dbfa6
   after
     940284e97e3904d1.940896c3d63f84ce.9a304388f055822c.df6024148da20892
-    8da208928da20892.8da208928da20892.8da208928da20892.8da208928da20892
-    0cd0a9c9cc09fa42.6743ac209289e999.34c3e8cfcf68fde6.bc8489835220d0a1
+    e512a7cfaa210ac8.7790896d650da120.54f5e57c4b011973.bd4f1ec2a7cdc5d1
+    0000000000000000.0000000000000000.9a304388f055822c.54f5e57c4b011973
     e30805c3fffe926b.c26efa48fa3d99e6.1864c86b9595e9b2.364962c3292764af
     88eba3eec96dbfa6
 
-VBROADCASTSS_256(reg)
+VPUNPCKHQDQ_128(reg)
   before
     0eb64a70cd7e1b33.488537a95f0b8c6e.e35a6e5138b7edb3.daa5ff3ebb959a02
     24f553b5d1e6b501.1515bb68093ca478.255607a7e98220ab.58520b335d72cc04
@@ -22632,12 +22632,12 @@
     700377394ced9113.5b99aa1da93c2250.80aa90eb123d16ce.f41f8f3382f9a2c7
     cad8ff163ebabee2
   after
-    0eb64a70cd7e1b33.488537a95f0b8c6e.e35a6e5138b7edb3.daa5ff3ebb959a02
+    0000000000000000.0000000000000000.e6adbeb6a82b6f7b.255607a7e98220ab
     24f553b5d1e6b501.1515bb68093ca478.255607a7e98220ab.58520b335d72cc04
     26f6b8297232c8bd.28820dea189e98b5.e6adbeb6a82b6f7b.6c376736963a3be1
     700377394ced9113.5b99aa1da93c2250.80aa90eb123d16ce.f41f8f3382f9a2c7
     cad8ff163ebabee2
-VBROADCASTSS_256(mem)
+VPUNPCKHQDQ_128(mem)
   before
     cb2c34cbe6894b5e.5e698a4ffaa34cae.8c260debd723ff75.519a7ab0c2445151
     d4e8a83e95720466.4c74f0d918e1353b.95f4b242bf5eea52.b3ca777355cd5baf
@@ -22646,12 +22646,12 @@
     dfc8b9e174e6b0a8
   after
     cb2c34cbe6894b5e.5e698a4ffaa34cae.8c260debd723ff75.519a7ab0c2445151
-    c2445151c2445151.c2445151c2445151.c2445151c2445151.c2445151c2445151
-    bfd8d95b6782a727.9670a24143328765.53d1160d7cf9a110.0484839e66627195
+    d4e8a83e95720466.4c74f0d918e1353b.95f4b242bf5eea52.b3ca777355cd5baf
+    0000000000000000.0000000000000000.8c260debd723ff75.95f4b242bf5eea52
     69c8420f79c4edcc.98a99df516237fd9.a387b3372a00dede.9e149b9f9292cfaf
     dfc8b9e174e6b0a8
 
-VBROADCASTSS_256(reg)
+VPUNPCKHQDQ_128(reg)
   before
     21eadbd0a9ec512d.af846044e6459582.ae6bde602e3e5942.5fe407aee7805de6
     c1c8fcd8cc30eeea.6bd7aee8cb105974.340160ee2712514e.64b28d5dcc84dc54
@@ -22659,12 +22659,12 @@
     8ce32ce34d9e0bb9.b876c9296bb428bf.ffdc1823290e89f9.b9d32014844ac516
     c1bf24f38e23a8c0
   after
-    21eadbd0a9ec512d.af846044e6459582.ae6bde602e3e5942.5fe407aee7805de6
+    0000000000000000.0000000000000000.86b81f0b9b28a2a6.340160ee2712514e
     c1c8fcd8cc30eeea.6bd7aee8cb105974.340160ee2712514e.64b28d5dcc84dc54
     1cac1965793cc38a.7a8ea7e54431f6cf.86b81f0b9b28a2a6.8ebec131f7191556
     8ce32ce34d9e0bb9.b876c9296bb428bf.ffdc1823290e89f9.b9d32014844ac516
     c1bf24f38e23a8c0
-VBROADCASTSS_256(mem)
+VPUNPCKHQDQ_128(mem)
   before
     834c4bbb31b07981.6eb933bee4e20324.0159909f5ea6ab6f.fdb945a26a4f42f1
     d94810568afef585.1e7a2963d992e777.3104763339133a0c.db9ba4f5fc78083a
@@ -22673,12 +22673,12 @@
     4c56c016aed505b8
   after
     834c4bbb31b07981.6eb933bee4e20324.0159909f5ea6ab6f.fdb945a26a4f42f1
-    6a4f42f16a4f42f1.6a4f42f16a4f42f1.6a4f42f16a4f42f1.6a4f42f16a4f42f1
-    a07df0b2b419d8f7.f9710a3cc83df25e.2442f9d1170592c1.f4ce30867b141881
+    d94810568afef585.1e7a2963d992e777.3104763339133a0c.db9ba4f5fc78083a
+    0000000000000000.0000000000000000.0159909f5ea6ab6f.3104763339133a0c
     b4b865b9cc0bdd04.59ecd2b74e6c6284.b6e19465158a6ebb.a69de5c382afae72
     4c56c016aed505b8
 
-VPALIGNR_128_1of3(reg)
+VPSRAW_0x05_128(reg)
   before
     4143bced9a135b00.f1c5ed59eee2c2d7.9b357e3e06ad7195.c3abc3dc4ead8c26
     e3b1d5b3e2f4eaf6.336f037d34a9409d.1b99093f8d8b5b3f.276d0320df7ba62d
@@ -22686,12 +22686,12 @@
     9a3f4ebcf9d1a599.35ceca01a239ffb1.45e2ac5c764fb408.6409a2c37645c0c1
     f57bfafab55a38a6
   after
-    0000000000000000.0000000000000000.35646f257e925e2b.bef4ce1ee3ff79fd
+    0000000000000000.0000000000000000.022ffd6203b2fda0.0320fd1603b2fe06
     e3b1d5b3e2f4eaf6.336f037d34a9409d.1b99093f8d8b5b3f.276d0320df7ba62d
     8cec07d42305ee45.55842311bd6d1681.35646f257e925e2b.bef4ce1ee3ff79fd
     9a3f4ebcf9d1a599.35ceca01a239ffb1.45e2ac5c764fb408.6409a2c37645c0c1
     f57bfafab55a38a6
-VPALIGNR_128_1of3(mem)
+VPSRAW_0x05_128(mem)
   before
     4d1552aebb499dd7.67f8a7d7ffe449a0.ae1a72390219b656.a75ebc50104d9980
     48a227cda51eab82.51610c91d1cb1704.9c3499a6f61af79f.b7269c6de9184b3f
@@ -22701,11 +22701,11 @@
   after
     4d1552aebb499dd7.67f8a7d7ffe449a0.ae1a72390219b656.a75ebc50104d9980
     48a227cda51eab82.51610c91d1cb1704.9c3499a6f61af79f.b7269c6de9184b3f
-    0000000000000000.0000000000000000.184b3fae1a723902.19b656a75ebc5010
+    c1f0f3428fe61dd0.b2c77b560c114a71.dbe8ba329c4780b6.d184471f9c3d04f2
     96c934f994acb1f0.e877f0924b422094.470252ca10ac0bc7.51c5b9d3c5470145
     9235eff302c37ee4
 
-VPALIGNR_128_1of3(reg)
+VPSRAW_0x05_128(reg)
   before
     f220e3ecec3cb679.a2fa65ded07c200c.4dba65b22bebd319.bb4edb5b6d5655ff
     ccd2932b213ee6b3.c04f03dd60632950.3edfd82048979fab.1597d3d0d0501a8a
@@ -22713,12 +22713,12 @@
     5eba1428db0e1ec1.a79472daeaa3f403.35fba59ba62976a8.e753fd1515650347
     185e27be3098a0d2
   after
-    0000000000000000.0000000000000000.1731444a3cd2c2f7.30aab51454a71593
+    0000000000000000.0000000000000000.01affd2cfd3103b5.ff3affe800ab001a
     ccd2932b213ee6b3.c04f03dd60632950.3edfd82048979fab.1597d3d0d0501a8a
     7c96fa1b3d554a3c.ce9388e35f6c86e9.1731444a3cd2c2f7.30aab51454a71593
     5eba1428db0e1ec1.a79472daeaa3f403.35fba59ba62976a8.e753fd1515650347
     185e27be3098a0d2
-VPALIGNR_128_1of3(mem)
+VPSRAW_0x05_128(mem)
   before
     9d97b0fbc04ca85f.cd88debd97f49ded.261c3caf1c152fc9.f28bf77f1f27f86b
     54ca13b8e28bd61b.274d52480e94046d.29f8624f11cdf268.ab2b3761455884ec
@@ -22728,11 +22728,11 @@
   after
     9d97b0fbc04ca85f.cd88debd97f49ded.261c3caf1c152fc9.f28bf77f1f27f86b
     54ca13b8e28bd61b.274d52480e94046d.29f8624f11cdf268.ab2b3761455884ec
-    0000000000000000.0000000000000000.5884ec261c3caf1c.152fc9f28bf77f1f
+    17c2cce2b264e731.c7556e34db798fed.8af561a5e6d8fa0c.bc285fafb44955d6
     c44d57634ae097ce.08eb2dee9b2f7918.27dcb49cb74003e0.81cd6dd50785a8d6
     56685d3ddb98b997
 
-VPALIGNR_128_1of3(reg)
+VPSRAW_0x05_128(reg)
   before
     98442954cb0fc3c6.35353128c90da11d.485d8be0e943ff9a.da7cd6229f14c910
     a1accf867375040f.4847d41e48f6c24b.e1f5857762405d21.81a04622bb5d07ca
@@ -22740,12 +22740,12 @@
     7a5396ed5e3f159d.bf186b49bc2d39f3.92cb3a45432590e8.16a3f840fc83de86
     be1a34375a77eee1
   after
-    0000000000000000.0000000000000000.31011620a1b2cf57.f6137d8826297a38
+    0000000000000000.0000000000000000.fc9601d20219fc87.00b5ffc2ffe4fef4
     a1accf867375040f.4847d41e48f6c24b.e1f5857762405d21.81a04622bb5d07ca
     ceed4a407057b51d.d74fbe2fe6a7b684.31011620a1b2cf57.f6137d8826297a38
     7a5396ed5e3f159d.bf186b49bc2d39f3.92cb3a45432590e8.16a3f840fc83de86
     be1a34375a77eee1
-VPALIGNR_128_1of3(mem)
+VPSRAW_0x05_128(mem)
   before
     c845ac575b126875.032aaff8d7bc5e3a.dd705557e99306c5.62a0ed54e326dd81
     11efdc8d1c60056d.c4be92cf7a57cea1.0b21f94586e6da26.fbcc2bb71e41f2ce
@@ -22755,11 +22755,11 @@
   after
     c845ac575b126875.032aaff8d7bc5e3a.dd705557e99306c5.62a0ed54e326dd81
     11efdc8d1c60056d.c4be92cf7a57cea1.0b21f94586e6da26.fbcc2bb71e41f2ce
-    0000000000000000.0000000000000000.41f2cedd705557e9.9306c562a0ed54e3
+    76e641c6b96b84f6.195a39dde19e9e7e.26f9d4ffb1317141.bb9af1dc8f000a7a
     d1f555ec4c419f3b.5e4ca28ea81c0d7c.0bc2617186808642.fc583a2ed3f16232
     1b50021985a036a1
 
-VPALIGNR_128_2of3(reg)
+VPCMPGTD_128(reg)
   before
     74cf45094197c275.ffe796edf4ed1369.efdec84e6c5e5548.94491d8720dfd756
     6421006aa4644157.dc897fb4ca7c9cac.285da889c8eeb38d.9e59822d9b5b1ea9
@@ -22767,12 +22767,12 @@
     746eca30cdae0bfb.130d3a447670dc1f.01528220ba2ea035.a5483cdaa7d87fbb
     5abf88b86ff113d1
   after
-    0000000000000000.0000000000000000.822d9b5b1ea96415.3cab595b63f805c0
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     6421006aa4644157.dc897fb4ca7c9cac.285da889c8eeb38d.9e59822d9b5b1ea9
     45922da94a93f0f5.44a78d2dedf9f62f.64153cab595b63f8.05c00e4f14001767
     746eca30cdae0bfb.130d3a447670dc1f.01528220ba2ea035.a5483cdaa7d87fbb
     5abf88b86ff113d1
-VPALIGNR_128_2of3(mem)
+VPCMPGTD_128(mem)
   before
     00ef6ed788568cd6.4d00d36dcc43cd15.258704e583ed0ba7.5a60755588f5a7ef
     73a56b220f14a9f6.2c9642cae1de73ee.56e066fc307d3ef4.ca8a12b45e3bb4d2
@@ -22782,11 +22782,11 @@
   after
     00ef6ed788568cd6.4d00d36dcc43cd15.258704e583ed0ba7.5a60755588f5a7ef
     73a56b220f14a9f6.2c9642cae1de73ee.56e066fc307d3ef4.ca8a12b45e3bb4d2
-    0000000000000000.0000000000000000.f4ca8a12b45e3bb4.d2258704e583ed0b
+    0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff
     30d296ebd5c8ba36.6df94698be535b8e.8563e23dd804a48c.646636a59376cfc7
     44afb60e2b82552f
 
-VPALIGNR_128_2of3(reg)
+VPCMPGTD_128(reg)
   before
     ad44cf513b3dd171.32e2be424cd727ad.865fd3e1be4514ae.3b24f53e0b134e2f
     f9737ddc5f347e39.71a7eb75a16e26ef.15f8b8fb456da13e.80f590664d64ec46
@@ -22794,12 +22794,12 @@
     aecb8a7856045e09.168349205365cd83.05f27652568c275b.27f64ed771fef783
     41bf6af98a5edc00
   after
-    0000000000000000.0000000000000000.90664d64ec46760f.ef52ee563ee930a2
+    0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff
     f9737ddc5f347e39.71a7eb75a16e26ef.15f8b8fb456da13e.80f590664d64ec46
     8687bd1a34f39932.c9ee9b70ef997428.760fef52ee563ee9.30a22f9fbb043bfe
     aecb8a7856045e09.168349205365cd83.05f27652568c275b.27f64ed771fef783
     41bf6af98a5edc00
-VPALIGNR_128_2of3(mem)
+VPCMPGTD_128(mem)
   before
     59c7fdf12231a5a2.ce8ce06060f5096a.3332716fe8ddec2d.1eeb4868189c9741
     4ddb85ab56821094.4316bb3fee52d500.fec78f4bcb0d8f52.1c4761fed011cb47
@@ -22809,11 +22809,11 @@
   after
     59c7fdf12231a5a2.ce8ce06060f5096a.3332716fe8ddec2d.1eeb4868189c9741
     4ddb85ab56821094.4316bb3fee52d500.fec78f4bcb0d8f52.1c4761fed011cb47
-    0000000000000000.0000000000000000.521c4761fed011cb.473332716fe8ddec
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     3557621500cfb61a.97b5f193087cc37d.0bd29e56e8c74bbb.3c58595e955c6e61
     15a52fffd94955ce
 
-VPALIGNR_128_2of3(reg)
+VPCMPGTD_128(reg)
   before
     44843dd284cbf00a.e257ae9daee36a06.306244e0cc635cbb.04e0875e5b68de57
     24437f42306f7ac2.da92df9868a6aff3.8c070cd484e407e0.1b0456a18cf2e31e
@@ -22821,12 +22821,12 @@
     6c8c8ba9024b4f54.1aeddd936e65db7e.006cec6042ea8389.0fbe978d95ee35dc
     a4ec010da679fb2a
   after
-    0000000000000000.0000000000000000.56a18cf2e31e08f1.45dacd8d00962a0a
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     24437f42306f7ac2.da92df9868a6aff3.8c070cd484e407e0.1b0456a18cf2e31e
     132cefbb7cc031a1.f8d670f04922410c.08f145dacd8d0096.2a0a880d9670173c
     6c8c8ba9024b4f54.1aeddd936e65db7e.006cec6042ea8389.0fbe978d95ee35dc
     a4ec010da679fb2a
-VPALIGNR_128_2of3(mem)
+VPCMPGTD_128(mem)
   before
     c75f417ae41c2354.8aaf4e785e9b1087.1aa4a36bf27b3a75.d1c4fcd17f85cb67
     52e5d4be6ce46983.cbe134942d3cb2e5.d6c73c66f16f1a1c.d545719922ec15d9
@@ -22836,11 +22836,11 @@
   after
     c75f417ae41c2354.8aaf4e785e9b1087.1aa4a36bf27b3a75.d1c4fcd17f85cb67
     52e5d4be6ce46983.cbe134942d3cb2e5.d6c73c66f16f1a1c.d545719922ec15d9
-    0000000000000000.0000000000000000.1cd545719922ec15.d91aa4a36bf27b3a
+    0000000000000000.0000000000000000.0000000000000000.ffffffff00000000
     1455df7fc81043a7.22a15a6392a284d4.ee80dc72d3214c2c.e9f17adf034d9f30
     b1b507347b5e566b
 
-VPALIGNR_128_3of3(reg)
+VPMOVZXBD_128(reg)
   before
     1dd1e991c76affed.03d850d3d48c4ef3.f1c791ef60802cbd.02afdb5bedf816ed
     89921c6083fed55f.ca9c03b09a5d67f5.512cdc7711dea581.41799d16f2dd510e
@@ -22848,12 +22848,12 @@
     d1336609bdebfcca.541b20b2c22cb7cd.38e39c308a50f44d.b1115fb230020923
     9977566c9f5bfd6e
   after
-    0000000000000000.0000000000000000.11dea58141799d16.f2dd510ea01c3769
-    89921c6083fed55f.ca9c03b09a5d67f5.512cdc7711dea581.41799d16f2dd510e
+    1dd1e991c76affed.03d850d3d48c4ef3.f1c791ef60802cbd.02afdb5bedf816ed
+    0000000000000000.0000000000000000.000000ff000000dd.000000b8000000bc
     51449c0f4ca51670.466f7401358e4cda.a01c3769404a29cd.88aba08fffddb8bc
     d1336609bdebfcca.541b20b2c22cb7cd.38e39c308a50f44d.b1115fb230020923
     9977566c9f5bfd6e
-VPALIGNR_128_3of3(mem)
+VPMOVZXBD_128(mem)
   before
     1da902a76bf153ca.65aa74ba735dc419.ce6e82af5c4164fb.76cd09388a7a44ac
     1772dd51aed2c562.68f7c48e0986a90b.913216e420dc1190.b72578ecdc565397
@@ -22862,12 +22862,12 @@
     1cc0b352db8a5755
   after
     1da902a76bf153ca.65aa74ba735dc419.ce6e82af5c4164fb.76cd09388a7a44ac
-    1772dd51aed2c562.68f7c48e0986a90b.913216e420dc1190.b72578ecdc565397
-    0000000000000000.0000000000000000.3216e420dc1190b7.2578ecdc565397ce
+    0000000000000000.0000000000000000.0000008a0000007a.00000044000000ac
+    649f655584091063.386452f11cf3e849.7934583d290678b7.5538e8ba1e705eb9
     e0fd159e0aa3f0f9.303e184f472fbd82.623fc4a693cd569d.ad53520ee952a0bf
     1cc0b352db8a5755
 
-VPALIGNR_128_3of3(reg)
+VPMOVZXBD_128(reg)
   before
     fccb08f38fa4bd26.67566a1a5bab214f.acd1141427c66460.2921d70b7b3c676d
     aac24c5da22a0edf.d577deb4932d5e92.076940ac5744188f.a8a40c59fc606654
@@ -22875,12 +22875,12 @@
     e0a0923d54b065b8.d64018f32bd0ee8d.cfd71e0619289a93.41c1cc5c3cf42116
     13f250ea327d5449
   after
-    0000000000000000.0000000000000000.5744188fa8a40c59.fc6066549f519a84
-    aac24c5da22a0edf.d577deb4932d5e92.076940ac5744188f.a8a40c59fc606654
+    fccb08f38fa4bd26.67566a1a5bab214f.acd1141427c66460.2921d70b7b3c676d
+    0000000000000000.0000000000000000.0000003300000044.000000100000007e
     82f07bfdb0aa882c.062bef58d03664ee.9f519a84743617bc.bc96df7a3344107e
     e0a0923d54b065b8.d64018f32bd0ee8d.cfd71e0619289a93.41c1cc5c3cf42116
     13f250ea327d5449
-VPALIGNR_128_3of3(mem)
+VPMOVZXBD_128(mem)
   before
     0ef5e60f31e96742.201f8b8b2ac6e22f.2180d56fc20aba9e.f245c6a0e3a4e0bf
     0e950ab95647132e.9eb96452cf7a3b3e.c3b8a2b9b1ed824b.66e890bd6d3823ed
@@ -22889,12 +22889,12 @@
     38078c5da6f83738
   after
     0ef5e60f31e96742.201f8b8b2ac6e22f.2180d56fc20aba9e.f245c6a0e3a4e0bf
-    0e950ab95647132e.9eb96452cf7a3b3e.c3b8a2b9b1ed824b.66e890bd6d3823ed
-    0000000000000000.0000000000000000.b8a2b9b1ed824b66.e890bd6d3823ed21
+    0000000000000000.0000000000000000.000000e3000000a4.000000e0000000bf
+    efa038d3bca01739.b6ba18fede58ab91.98b5fcbe138703c1.850c77c8536fa0c9
     8ce0ec4980022d8e.c46ea3fbf4eb6fd4.7c415e6804e4f82b.adfd772f32d693fe
     38078c5da6f83738
 
-VPALIGNR_128_3of3(reg)
+VPMOVZXBD_128(reg)
   before
     8475b3be4a61c925.c322a308bd79135a.242102b5acbfc3b2.4b2844a5a10e1eb6
     eb95e7beba9e856f.6f32d8fa900f82c8.321e2f98a360e2d7.e1382a5f0613318e
@@ -22902,12 +22902,12 @@
     7e16664c70c16acb.96ecac2b65cef23d.c82ae889bb3b75a9.d1ffe7ff95dc0dd3
     e44eb6bcf8b84f98
   after
-    0000000000000000.0000000000000000.a360e2d7e1382a5f.0613318e4ab32810
-    eb95e7beba9e856f.6f32d8fa900f82c8.321e2f98a360e2d7.e1382a5f0613318e
+    8475b3be4a61c925.c322a308bd79135a.242102b5acbfc3b2.4b2844a5a10e1eb6
+    0000000000000000.0000000000000000.0000004e000000ff.000000ed000000de
     cbb124ca933aa7c2.6cdc070c14d23905.4ab32810745b0af0.1a3b8c844effedde
     7e16664c70c16acb.96ecac2b65cef23d.c82ae889bb3b75a9.d1ffe7ff95dc0dd3
     e44eb6bcf8b84f98
-VPALIGNR_128_3of3(mem)
+VPMOVZXBD_128(mem)
   before
     2ef575a7929f6c5a.6110a9b2eec00b36.c82e4441a00d6a9b.08d06c70158d5fad
     8bc0a1ac809b2345.d1ebea66a8c2c6ae.e06d4a3ce19d5d4b.66f1ae2f1edb06a9
@@ -22916,12 +22916,12 @@
     cb2cc9bc6630b723
   after
     2ef575a7929f6c5a.6110a9b2eec00b36.c82e4441a00d6a9b.08d06c70158d5fad
-    8bc0a1ac809b2345.d1ebea66a8c2c6ae.e06d4a3ce19d5d4b.66f1ae2f1edb06a9
-    0000000000000000.0000000000000000.6d4a3ce19d5d4b66.f1ae2f1edb06a9c8
+    0000000000000000.0000000000000000.000000150000008d.0000005f000000ad
+    d67ab4b8ddba2e84.28f224d63b53d6e0.b9763a07438a867b.3ed8ac3471b4a449
     edf12cb5c6084a43.c373536c42007977.2e15908de2dfa255.ebd361e9aaa17638
     cb2cc9bc6630b723
 
-VMOVSD_REG_XMM(reg)
+VPMOVSXBD_128(reg)
   before
     3930e11841eca4b5.aaef8491569033b0.ffb873965a54e920.1d16c8bcdba86d05
     912ba369d662799b.eb423836aa5ea4f5.360e81bf1edb6287.61455f7f4af1a3b8
@@ -22930,11 +22930,11 @@
     c1dd30796e471c99
   after
     3930e11841eca4b5.aaef8491569033b0.ffb873965a54e920.1d16c8bcdba86d05
-    0000000000000000.0000000000000000.ffb873965a54e920.575c9772f7353ed6
+    0000000000000000.0000000000000000.0000004affffffc7.ffffffffffffff9a
     2e690d1bc11d7281.8ab4c592dd7e5a3e.c5c178532b222157.d56ed0c24ac7ff9a
     6e361a9a9fa9ca12.6512a5900bfd11b8.081d54be1cb4633d.575c9772f7353ed6
     c1dd30796e471c99
-VMOVSD_REG_XMM(mem)
+VPMOVSXBD_128(mem)
   before
     f0bb17c4ca0a540f.abdec7520b92bffa.5627561b51e6858f.5b6e116c8d1d61e4
     c1c3c9402889a363.43ac0eb0a2658ae7.3bc15321cb4571ee.1affabca1cea5af9
@@ -22943,12 +22943,12 @@
     77318234881c7682
   after
     f0bb17c4ca0a540f.abdec7520b92bffa.5627561b51e6858f.5b6e116c8d1d61e4
-    c1c3c9402889a363.43ac0eb0a2658ae7.3bc15321cb4571ee.1affabca1cea5af9
+    0000000000000000.0000000000000000.ffffff8d0000001d.00000061ffffffe4
     0ec1c1d7a3d1c5c1.90eded1effae6a83.eeaa198d94279202.a11e1f4262a68828
     b5807b7758ed7657.f0ed5f0abff7997a.4db0224cc897a4f6.4c156842fdde281c
     77318234881c7682
 
-VMOVSD_REG_XMM(reg)
+VPMOVSXBD_128(reg)
   before
     7ebe6986a0eead05.90ce740b62e9714f.bdf860de7dce5479.329dec4884a262f8
     bd071aa3e1e00a52.7c75267fded173d5.555aed08d6bed72c.7a3ef26ee4538a31
@@ -22957,11 +22957,11 @@
     3d504516efc3cbea
   after
     7ebe6986a0eead05.90ce740b62e9714f.bdf860de7dce5479.329dec4884a262f8
-    0000000000000000.0000000000000000.bdf860de7dce5479.a4cba3e9fdd702fe
+    0000000000000000.0000000000000000.00000003ffffffb6.ffffffd5ffffffcf
     905a8ff6e67dc915.55430fbfe7b23816.125f00f365545d3e.015eb0aa03b6d5cf
     5301c6ed4b5125f9.f802aab799977b3e.5152970bc61b245c.a4cba3e9fdd702fe
     3d504516efc3cbea
-VMOVSD_REG_XMM(mem)
+VPMOVSXBD_128(mem)
   before
     a9b8141cf485edbe.614abbf3ade85cab.3f7f7353118dfa78.6f81adbc969f6631
     c4d08be9292a24a6.187f6875a7cfa8d6.0785e77f6b9f6ef1.c6363e72716d5f6a
@@ -22970,12 +22970,12 @@
     c076aeeb5706f223
   after
     a9b8141cf485edbe.614abbf3ade85cab.3f7f7353118dfa78.6f81adbc969f6631
-    c4d08be9292a24a6.187f6875a7cfa8d6.0785e77f6b9f6ef1.c6363e72716d5f6a
+    0000000000000000.0000000000000000.ffffff96ffffff9f.0000006600000031
     6a642668a9bd2cd0.d3edcbddd6914527.2ce28027c2d996d4.b3be4799f2104cb3
     77406285914ac065.eedfde98d5bb714a.8a60bc3832472c4e.9365c39db51469b7
     c076aeeb5706f223
 
-VMOVSD_REG_XMM(reg)
+VPMOVSXBD_128(reg)
   before
     973f04ed747123a3.c730ba2cfcde9d94.c4a3a01340d866ea.fdcd169cd8f6ee8b
     740ac111a7e237e2.36ffaa4906847e87.b3840ab8b57461b3.61f30b41cff295b6
@@ -22984,11 +22984,11 @@
     cbb85de7b6254d87
   after
     973f04ed747123a3.c730ba2cfcde9d94.c4a3a01340d866ea.fdcd169cd8f6ee8b
-    0000000000000000.0000000000000000.c4a3a01340d866ea.6c9db2fb23fd8988
+    0000000000000000.0000000000000000.0000003400000045.ffffffe0fffffffc
     b325e2c18ce36b8c.a07baec8cd48216a.16cd19f5cd1c9d53.929f15123445e0fc
     b0da626bc002fa4e.e16e42966a36406a.48cbca34265a5774.6c9db2fb23fd8988
     cbb85de7b6254d87
-VMOVSD_REG_XMM(mem)
+VPMOVSXBD_128(mem)
   before
     8bbe92c40ccae825.c7763d7adecb22d4.d5a5e39dfb5b98b3.a7ca18e35cbdcbc2
     8879ce7d3ef7158d.54446f5a83c91dca.58ec0ccb9cc3e471.8d16ff6d0ace35ea
@@ -22997,12 +22997,12 @@
     09bf2465ff978d34
   after
     8bbe92c40ccae825.c7763d7adecb22d4.d5a5e39dfb5b98b3.a7ca18e35cbdcbc2
-    8879ce7d3ef7158d.54446f5a83c91dca.58ec0ccb9cc3e471.8d16ff6d0ace35ea
+    0000000000000000.0000000000000000.0000005cffffffbd.ffffffcbffffffc2
     9eb68bff6bb891ec.b392f4774a8828db.460f390a6878e1cf.58fb7b3ecc1bd198
     a9414734ac1a186d.40aac93dd0947eb3.7bd9e6487b884bf9.62c489c23f2fda77
     09bf2465ff978d34
 
-VMOVSS_REG_XMM(reg)
+VPINSRB_128_1of3(reg)
   before
     a7364894a6de257a.84e67d091f28653d.57dae918b07a5cff.d3188f70f2ffde1c
     9976f1b9d390dff7.0d71aa6be0ee3687.546c507586c5fe6b.2996b16ee8e75564
@@ -23010,12 +23010,12 @@
     ea81c3992967a93f.9668d582bad44e3c.70e9e46087bb7d51.44824d9cc340e211
     c088bfa4e0c770cf
   after
-    a7364894a6de257a.84e67d091f28653d.57dae918b07a5cff.d3188f70f2ffde1c
-    0000000000000000.0000000000000000.57dae918b07a5cff.d3188f70c340e211
+    0000000000000000.0000000000000000.546c507586c5fe6b.2996b16ee8e755cf
+    9976f1b9d390dff7.0d71aa6be0ee3687.546c507586c5fe6b.2996b16ee8e75564
     3ccb1c41203af754.1fae48440a794578.93adfabeef02a0a2.5b20c72e7a4e6efc
     ea81c3992967a93f.9668d582bad44e3c.70e9e46087bb7d51.44824d9cc340e211
     c088bfa4e0c770cf
-VMOVSS_REG_XMM(mem)
+VPINSRB_128_1of3(mem)
   before
     aafe9a32ecf2d261.00e3e42c8ba33164.4d6ccc100b0b0fff.466b09c8e97fd224
     e0af593304cac5f4.db3f7a65e17bca6f.2286a9da192b42eb.73816561b1d7dbc6
@@ -23025,11 +23025,11 @@
   after
     aafe9a32ecf2d261.00e3e42c8ba33164.4d6ccc100b0b0fff.466b09c8e97fd224
     e0af593304cac5f4.db3f7a65e17bca6f.2286a9da192b42eb.73816561b1d7dbc6
-    3c697891435d05b3.d5df82b2c77ab10b.f082e9cb013fa42f.5275f4977c51d4e4
+    0000000000000000.0000000000000000.2286a9da192b42eb.7381656124d7dbc6
     9cf6733ac6b64dcb.4b10f67edb2c21e4.922c06d1de54f0f5.3f95b2d5e678f829
     952b9c898ad98442
 
-VMOVSS_REG_XMM(reg)
+VPINSRB_128_1of3(reg)
   before
     b284ad1e04ffb4db.da23c718a8e15a67.991ed435b61e58a8.e6507ed8cd74e46a
     f1ebe101f176c39f.d4bcee1906ebe8b4.1b551743f6db9000.c6b9cccaeaae3ab9
@@ -23037,12 +23037,12 @@
     4417a35c9288715a.6861aa31a3ca7610.2b6dbc1514e7f523.9e8edb221b99fe97
     4d9194616763e47e
   after
-    b284ad1e04ffb4db.da23c718a8e15a67.991ed435b61e58a8.e6507ed8cd74e46a
-    0000000000000000.0000000000000000.991ed435b61e58a8.e6507ed81b99fe97
+    0000000000000000.0000000000000000.1b551743f6db9000.c6b9cccaeaae3a7e
+    f1ebe101f176c39f.d4bcee1906ebe8b4.1b551743f6db9000.c6b9cccaeaae3ab9
     adae349ceccaee3a.648d6628fbdfb3de.2d00bb1437f0069b.10356c944f0bae0f
     4417a35c9288715a.6861aa31a3ca7610.2b6dbc1514e7f523.9e8edb221b99fe97
     4d9194616763e47e
-VMOVSS_REG_XMM(mem)
+VPINSRB_128_1of3(mem)
   before
     fa0a123c52751df0.107429ae7e3c88a9.ba0636201bb6ee77.71e617b0294e9a44
     7fc4d49ef5dc6418.6f0fc2fc4d706ed3.384687e17fb1d73f.5bb9c75213b131ac
@@ -23052,11 +23052,11 @@
   after
     fa0a123c52751df0.107429ae7e3c88a9.ba0636201bb6ee77.71e617b0294e9a44
     7fc4d49ef5dc6418.6f0fc2fc4d706ed3.384687e17fb1d73f.5bb9c75213b131ac
-    b98d53756fa37723.bb356ab49ab26085.bcee1860eac7ec93.4530c8686e9bf604
+    0000000000000000.0000000000000000.384687e17fb1d73f.5bb9c75244b131ac
     852f0dacd9d7103d.52311d40028d9a6b.23ca658a7803eb9f.8b97165dd59824fb
     893cae9ce434f83b
 
-VMOVSS_REG_XMM(reg)
+VPINSRB_128_1of3(reg)
   before
     9b6a8b9338fcae70.bd787c2f5183eb91.8e51d80e208e5730.49a6ea4946718d91
     1d6ca9ad6c7b8247.3e321eeaf3b3c64b.cce096899040d481.0b4e238b6f1d9192
@@ -23064,12 +23064,12 @@
     e11f98fae6d0728b.8c2be9b822d067a4.bf790b36d9e8fe75.ce31a3444462aa78
     8804e194281138b4
   after
-    9b6a8b9338fcae70.bd787c2f5183eb91.8e51d80e208e5730.49a6ea4946718d91
-    0000000000000000.0000000000000000.8e51d80e208e5730.49a6ea494462aa78
+    0000000000000000.0000000000000000.cce096899040d481.0b4e238b6f1d91b4
+    1d6ca9ad6c7b8247.3e321eeaf3b3c64b.cce096899040d481.0b4e238b6f1d9192
     6b8f04561d3eaf6c.e42a6fc9da735b99.6929531def2f4d09.438d8d3a1014b1d1
     e11f98fae6d0728b.8c2be9b822d067a4.bf790b36d9e8fe75.ce31a3444462aa78
     8804e194281138b4
-VMOVSS_REG_XMM(mem)
+VPINSRB_128_1of3(mem)
   before
     4dd3c315d72f17b0.da68620664bd064e.10030aa4e8d5a69b.2b1cbb40e9f62271
     f96ac6b56ec70299.b4b65de43291a964.4d7c4d77488fd3a8.095e5da8bbe5f6a8
@@ -23079,11 +23079,11 @@
   after
     4dd3c315d72f17b0.da68620664bd064e.10030aa4e8d5a69b.2b1cbb40e9f62271
     f96ac6b56ec70299.b4b65de43291a964.4d7c4d77488fd3a8.095e5da8bbe5f6a8
-    6894646008e6b69a.ca558501edd99577.1f642e1e5d09abf7.b68befd8ec42b6c7
+    0000000000000000.0000000000000000.4d7c4d77488fd3a8.095e5da871e5f6a8
     771f1b00c297eee0.7790d6ca30200734.62852986434feab6.8cee6c3e18989d7a
     e8d5d144d973e96c
 
-VMOVLPD_128_M64_XMM_XMM(reg)
+VPINSRB_128_2of3(reg)
   before
     268a1858ce60d449.ffd56782b7e66896.19b54caa98f33a46.f2acbb9a176e4b0e
     a25a3fe491ea9abe.df84c2d203e0deea.0b0ee40cc0dd6c5a.aba55f46f4718c2e
@@ -23091,12 +23091,12 @@
     c47b1a19f206ab20.14f8998d1302b016.4e8f670bc127b737.083ccd153b549870
     64728f12dd4cdceb
   after
-    268a1858ce60d449.ffd56782b7e66896.19b54caa98f33a46.f2acbb9a176e4b0e
+    0000000000000000.0000000000000000.0b0ee40cc0dd6c5a.abeb5f46f4718c2e
     a25a3fe491ea9abe.df84c2d203e0deea.0b0ee40cc0dd6c5a.aba55f46f4718c2e
     b8914156be9e7977.f2f6aaddc3900d05.a8e8995e446ad71c.693b9176f7646640
     c47b1a19f206ab20.14f8998d1302b016.4e8f670bc127b737.083ccd153b549870
     64728f12dd4cdceb
-VMOVLPD_128_M64_XMM_XMM(mem)
+VPINSRB_128_2of3(mem)
   before
     58aa5456f858f0dd.2263c799c8b16c64.21550dd00e438447.574e4b7fd39f4a57
     c2b097cea9858d72.2e974342dc28faef.f5db8291d05e45c4.21733f26155eca2a
@@ -23106,11 +23106,11 @@
   after
     58aa5456f858f0dd.2263c799c8b16c64.21550dd00e438447.574e4b7fd39f4a57
     c2b097cea9858d72.2e974342dc28faef.f5db8291d05e45c4.21733f26155eca2a
-    0000000000000000.0000000000000000.f5db8291d05e45c4.574e4b7fd39f4a57
+    0000000000000000.0000000000000000.f5db8291d05e57c4.21733f26155eca2a
     6556870b3b6f5932.c00e98c031af688d.628e5b3c1b537d55.631b4cbd9ae28393
     95365c8615c03582
 
-VMOVLPD_128_M64_XMM_XMM(reg)
+VPINSRB_128_2of3(reg)
   before
     f6e66e313114c4d3.558e2da75445ffb6.feea696ca9d6c1f7.b253b8ffdc456dc1
     e3767c2c896c6c31.2bc34028726b208d.5a41faf2d0fbd559.3a7005f0d5413828
@@ -23118,12 +23118,12 @@
     d26a81be5f56fbc6.f557a38630d8c1e2.db8f4838986d21b4.5ee1600ddc89569e
     b3ce661022ec2004
   after
-    f6e66e313114c4d3.558e2da75445ffb6.feea696ca9d6c1f7.b253b8ffdc456dc1
+    0000000000000000.0000000000000000.5a41faf2d0fbd559.3a0405f0d5413828
     e3767c2c896c6c31.2bc34028726b208d.5a41faf2d0fbd559.3a7005f0d5413828
     b93484e1ba546b49.c2c23e79b2ed77e2.2f5f45bc41a9e15f.d5b1befc20549db9
     d26a81be5f56fbc6.f557a38630d8c1e2.db8f4838986d21b4.5ee1600ddc89569e
     b3ce661022ec2004
-VMOVLPD_128_M64_XMM_XMM(mem)
+VPINSRB_128_2of3(mem)
   before
     ae424cf2108ab716.8b66702e15005955.a24ee93b0737bab9.b91fffd172d2d105
     2d0b8e9dc26ed601.40724b9d77dec1a2.a4738e8453161e92.245964f36b642cfd
@@ -23133,11 +23133,11 @@
   after
     ae424cf2108ab716.8b66702e15005955.a24ee93b0737bab9.b91fffd172d2d105
     2d0b8e9dc26ed601.40724b9d77dec1a2.a4738e8453161e92.245964f36b642cfd
-    0000000000000000.0000000000000000.a4738e8453161e92.b91fffd172d2d105
+    0000000000000000.0000000000000000.a4738e8453160592.245964f36b642cfd
     23c71703e0399f11.0fedba28b1639d24.1676e182bc8615fc.16fe2d822740d695
     530188c723a39c8c
 
-VMOVLPD_128_M64_XMM_XMM(reg)
+VPINSRB_128_2of3(reg)
   before
     8fde8245ad62feda.525256958438c18d.e0f3451cc0228ab1.3eed890f112f21e5
     25e31768620b382d.7562e1a15bae5b93.1d3baebfec4570ac.2cc17ee14b878780
@@ -23145,12 +23145,12 @@
     cd90044ebb49238c.033dccd7152ceae7.4bbc06c30ae41a9b.c5b34400e07a547f
     2a680c25732c333a
   after
-    8fde8245ad62feda.525256958438c18d.e0f3451cc0228ab1.3eed890f112f21e5
+    0000000000000000.0000000000000000.1d3baebfec4570ac.2c3a7ee14b878780
     25e31768620b382d.7562e1a15bae5b93.1d3baebfec4570ac.2cc17ee14b878780
     705a449ddd29852f.66c1341382a52a4c.220fef7ed1578cc1.babf3ee2879d04fa
     cd90044ebb49238c.033dccd7152ceae7.4bbc06c30ae41a9b.c5b34400e07a547f
     2a680c25732c333a
-VMOVLPD_128_M64_XMM_XMM(mem)
+VPINSRB_128_2of3(mem)
   before
     c3ac123f5bbe5c58.99d153e997f64cf1.26a024d92f4c568e.f48eeefc337956e7
     6d49d339b53c8c04.2e692ed90ebc3c0a.acb7b805ec132c6e.79d1a394e9a17b50
@@ -23160,11 +23160,11 @@
   after
     c3ac123f5bbe5c58.99d153e997f64cf1.26a024d92f4c568e.f48eeefc337956e7
     6d49d339b53c8c04.2e692ed90ebc3c0a.acb7b805ec132c6e.79d1a394e9a17b50
-    0000000000000000.0000000000000000.acb7b805ec132c6e.f48eeefc337956e7
+    0000000000000000.0000000000000000.acb7b805ec13e76e.79d1a394e9a17b50
     65c2737d2d2ff0b9.27cd74673ac56506.5230848cc1c40087.86d966906adb732c
     c7376bcd6e06bef6
 
-VMOVLPD_128_XMM_M64(reg)
+VPINSRB_128_3of3(reg)
   before
     54352d196df3e28e.6a354a9f83ba9d19.4231d8de281f1541.292bb5bf11c57718
     8920a8e006301c9f.f031cc51ba623fb8.981cb85b21c37de0.d30912cb749e4792
@@ -23172,12 +23172,12 @@
     5aedbb9070c8c1de.eff8bd163e375962.60b7d812a11663f9.10a14023e501e2f0
     5bf30a462ba4242c
   after
-    54352d196df3e28e.6a354a9f83ba9d19.4231d8de281f1541.292bb5bf11c57718
+    0000000000000000.0000000000000000.981cb82c21c37de0.d30912cb749e4792
     8920a8e006301c9f.f031cc51ba623fb8.981cb85b21c37de0.d30912cb749e4792
     c244d98fd248a8d6.d3847380ef3295c2.83da0e48c03cd88f.2c97179e07582c21
     5aedbb9070c8c1de.eff8bd163e375962.60b7d812a11663f9.10a14023e501e2f0
     5bf30a462ba4242c
-VMOVLPD_128_XMM_M64(mem)
+VPINSRB_128_3of3(mem)
   before
     ea59eff3f44eaf00.af674a50793ba465.205b2501c17c49c4.8bff112561de5acb
     979e6d165d0a3e99.1cfd823c8b2d8d14.4277282b970d1e15.61feb5ee9c1ff8b0
@@ -23185,13 +23185,13 @@
     bef9226f7ce95cc9.adb1de4439bf60a1.c90debf1a6446e33.794f2f4ef03d1c66
     743afdbe42321a8e
   after
-    ea59eff3f44eaf00.af674a50793ba465.205b2501c17c49c4.3cffc0d7ec657a55
+    ea59eff3f44eaf00.af674a50793ba465.205b2501c17c49c4.8bff112561de5acb
     979e6d165d0a3e99.1cfd823c8b2d8d14.4277282b970d1e15.61feb5ee9c1ff8b0
-    3f90ff9c81e48f23.fcfc5fbe422ab89a.31194082daf69781.3cffc0d7ec657a55
+    0000000000000000.0000000000000000.cb77282b970d1e15.61feb5ee9c1ff8b0
     bef9226f7ce95cc9.adb1de4439bf60a1.c90debf1a6446e33.794f2f4ef03d1c66
     743afdbe42321a8e
 
-VMOVLPD_128_XMM_M64(reg)
+VPINSRB_128_3of3(reg)
   before
     890c26937ed1af7a.efa6507c6b2462b8.8966fa390d77c2d5.e61ea46418036058
     1411a63941a418d5.b06307b06aa15c1b.ee67af0959df1ae3.641ae7c74b3d291c
@@ -23199,12 +23199,12 @@
     fce39ca8c91c568b.4f3dfe3905931ff0.bf82d5eacaec9a3c.f3fefc0d66582e2f
     bc80c6c8864fe3d6
   after
-    890c26937ed1af7a.efa6507c6b2462b8.8966fa390d77c2d5.e61ea46418036058
+    0000000000000000.0000000000000000.ee67afd659df1ae3.641ae7c74b3d291c
     1411a63941a418d5.b06307b06aa15c1b.ee67af0959df1ae3.641ae7c74b3d291c
     71957a1c2639914c.dcfcc2f5946d071f.3602fa20b982a377.1fcb31065c0084aa
     fce39ca8c91c568b.4f3dfe3905931ff0.bf82d5eacaec9a3c.f3fefc0d66582e2f
     bc80c6c8864fe3d6
-VMOVLPD_128_XMM_M64(mem)
+VPINSRB_128_3of3(mem)
   before
     561a0a23d7f35ecc.11480a49c8d8a23d.e5f13567da1f60b9.e3323ed327aa3bdf
     9c9b440b75505d3d.0c10bf6bbcf9b20f.7ae5e56b2f1e85a6.005f30476d47c20b
@@ -23212,13 +23212,13 @@
     a17e8c2e0b61d13e.23f9efe3f99b0dc1.10bd9da5c6a26ea0.9060a081224f70b1
     bdcc151fcad21082
   after
-    561a0a23d7f35ecc.11480a49c8d8a23d.e5f13567da1f60b9.7055a7b3384f6a6d
+    561a0a23d7f35ecc.11480a49c8d8a23d.e5f13567da1f60b9.e3323ed327aa3bdf
     9c9b440b75505d3d.0c10bf6bbcf9b20f.7ae5e56b2f1e85a6.005f30476d47c20b
-    6ccef16a7d709a54.4887b87b430bc1ac.e9e589311e9b4ce5.7055a7b3384f6a6d
+    0000000000000000.0000000000000000.dfe5e56b2f1e85a6.005f30476d47c20b
     a17e8c2e0b61d13e.23f9efe3f99b0dc1.10bd9da5c6a26ea0.9060a081224f70b1
     bdcc151fcad21082
 
-VMOVLPD_128_XMM_M64(reg)
+VPINSRB_128_3of3(reg)
   before
     51e504f7c964858d.167891423a2fc026.f8b262117934d0fa.ca399db34140aa03
     a9f66877be920c7e.a9897c9226e42139.23fe0c6f5f634702.f2250647ab80ba3b
@@ -23226,12 +23226,12 @@
     1634801cf4ef40bf.951af596a8392b8e.ea7df670d0b04031.017c00b2be1749d9
     9e7f89619e863f97
   after
-    51e504f7c964858d.167891423a2fc026.f8b262117934d0fa.ca399db34140aa03
+    0000000000000000.0000000000000000.23fe0c975f634702.f2250647ab80ba3b
     a9f66877be920c7e.a9897c9226e42139.23fe0c6f5f634702.f2250647ab80ba3b
     214c3e0a42e7e100.357ac90aec8fb1a2.0028e96b48b3ad86.664d534e206e5b74
     1634801cf4ef40bf.951af596a8392b8e.ea7df670d0b04031.017c00b2be1749d9
     9e7f89619e863f97
-VMOVLPD_128_XMM_M64(mem)
+VPINSRB_128_3of3(mem)
   before
     1b226a46dec7fada.e2f82c196d376469.a7347b2275f04d29.3f492dea92e63ab0
     5231204c9ae736cd.e2e43d6d4b4a8aa7.4593d79a6fbfd19e.5ad88c452ae2d7ae
@@ -23239,13 +23239,13 @@
     62c2f870f4f22075.ee697fcaa502cc96.995402ff5cd6f1c9.516eb04e4e5aeeda
     e50e6cd512eedf60
   after
-    1b226a46dec7fada.e2f82c196d376469.a7347b2275f04d29.96760eed353055d9
+    1b226a46dec7fada.e2f82c196d376469.a7347b2275f04d29.3f492dea92e63ab0
     5231204c9ae736cd.e2e43d6d4b4a8aa7.4593d79a6fbfd19e.5ad88c452ae2d7ae
-    21782661edf1af9c.7246af842ab4ee28.4d0585eab3b2731a.96760eed353055d9
+    0000000000000000.0000000000000000.b093d79a6fbfd19e.5ad88c452ae2d7ae
     62c2f870f4f22075.ee697fcaa502cc96.995402ff5cd6f1c9.516eb04e4e5aeeda
     e50e6cd512eedf60
 
-VSHUFPD_128_1of2(reg)
+VCOMISD_128(reg)
   before
     b0a040ec1c776314.f2dd1265caf54682.b298a7ac58bf5f9d.074dc8c3873605d6
     0c7127010982b8a5.ae93f12c8b06ddef.1a202594e078e4eb.71bc55244fdf6c6e
@@ -23253,12 +23253,12 @@
     eb001ed1f94bbf09.1503ebe140834d9c.466b112ade0bb306.ad2bb269283922ed
     36c379267102e92c
   after
-    0000000000000000.0000000000000000.ad2bb269283922ed.71bc55244fdf6c6e
+    b0a040ec1c776314.f2dd1265caf54682.b298a7ac58bf5f9d.074dc8c3873605d6
     0c7127010982b8a5.ae93f12c8b06ddef.1a202594e078e4eb.71bc55244fdf6c6e
     57cd1d7e749a18bd.70b110b15431a0e9.824df4f0d9b79629.b46c240cd1dbe1bc
     eb001ed1f94bbf09.1503ebe140834d9c.466b112ade0bb306.ad2bb269283922ed
-    36c379267102e92c
-VSHUFPD_128_1of2(mem)
+    0000000000000000
+VCOMISD_128(mem)
   before
     2c02f72fc744f2a6.265627653622eb34.7a55fea66c079d33.c2c676b08bfd752c
     6bb2a770460afb87.621a33a6c4aad6eb.7973c5eef4ca4fdb.52a921ed7d1b1947
@@ -23268,11 +23268,11 @@
   after
     2c02f72fc744f2a6.265627653622eb34.7a55fea66c079d33.c2c676b08bfd752c
     6bb2a770460afb87.621a33a6c4aad6eb.7973c5eef4ca4fdb.52a921ed7d1b1947
-    0000000000000000.0000000000000000.c2c676b08bfd752c.7973c5eef4ca4fdb
+    d0a005d50b61befa.fc993e00416fbdd9.ef28bda3f2d71dbf.52620d4d4ff0da04
     35978e4a3254f82c.512044df49fedbab.b84261b3853ac40c.1d3b363c9e09f50f
-    1181982605f0a613
+    0000000000000000
 
-VSHUFPD_128_1of2(reg)
+VCOMISD_128(reg)
   before
     89803077213429bd.7765bdbcd6ef6548.bbf942af77e26e0d.b08b2d09c6ff00ee
     e184f99c8d5eb9b9.72d40d15133ec07b.977132dc67a7b0aa.b3d09d91d4338d90
@@ -23280,12 +23280,12 @@
     a0ca0e0ec799f355.03c90630ca2b33d5.156ddefeff063347.4b7d5ae7c01688c6
     977e9f8dd8dd6eb2
   after
-    0000000000000000.0000000000000000.4b7d5ae7c01688c6.b3d09d91d4338d90
+    89803077213429bd.7765bdbcd6ef6548.bbf942af77e26e0d.b08b2d09c6ff00ee
     e184f99c8d5eb9b9.72d40d15133ec07b.977132dc67a7b0aa.b3d09d91d4338d90
     74d8efffe6fc93b2.02b2fd43064ec6f1.41d312d3b6dadd2f.9edd2d37c8e2261f
     a0ca0e0ec799f355.03c90630ca2b33d5.156ddefeff063347.4b7d5ae7c01688c6
-    977e9f8dd8dd6eb2
-VSHUFPD_128_1of2(mem)
+    0000000000000001
+VCOMISD_128(mem)
   before
     5eaa78152b42960f.c0a45333ccc2154d.51e6a5ca7cdfc254.6f8990cbdfb7ec9f
     7ccf626bd652ba08.2fb3b8dc92023447.c8d557fc38783099.ac7426a4f27a45e3
@@ -23295,11 +23295,11 @@
   after
     5eaa78152b42960f.c0a45333ccc2154d.51e6a5ca7cdfc254.6f8990cbdfb7ec9f
     7ccf626bd652ba08.2fb3b8dc92023447.c8d557fc38783099.ac7426a4f27a45e3
-    0000000000000000.0000000000000000.6f8990cbdfb7ec9f.c8d557fc38783099
+    ccb7d77cf41897ca.4b433b74b5e58dee.446197b2180139d1.267b9af7d2da7abe
     2c2f5532a1a0e880.6ea0d767d0f75cf0.a158e1d83b879928.3ae7ea2f1e64c6dd
-    440712b86fa266eb
+    0000000000000001
 
-VSHUFPD_128_1of2(reg)
+VCOMISD_128(reg)
   before
     a0260cfe64229695.7702577bfaf76a57.f61689217fc5dcf6.bb84b25aba150bc9
     aa8fd66d96709187.89fe59421b28d97b.3df04b0e5fdb4aaf.6eb28524b4b74de1
@@ -23307,12 +23307,12 @@
     3773c77727a3dcf1.729d4ffa22496d58.7c04f431210be0e4.0e44214182692b24
     b440e26b909040a7
   after
-    0000000000000000.0000000000000000.0e44214182692b24.6eb28524b4b74de1
+    a0260cfe64229695.7702577bfaf76a57.f61689217fc5dcf6.bb84b25aba150bc9
     aa8fd66d96709187.89fe59421b28d97b.3df04b0e5fdb4aaf.6eb28524b4b74de1
     be906b71a317956c.3eedd8731e3ff117.a17c1b9a0cc3e2c4.95afd522427a189b
     3773c77727a3dcf1.729d4ffa22496d58.7c04f431210be0e4.0e44214182692b24
-    b440e26b909040a7
-VSHUFPD_128_1of2(mem)
+    0000000000000000
+VCOMISD_128(mem)
   before
     636e958e87fc1452.7385e6e9bda0a2c1.00d83ac341510b69.2bd5d23f3a3f7fb9
     f699b79484b8634e.cd12c534029b2589.c66b15ba97638477.0b3bb231f4e9fcf0
@@ -23322,11 +23322,11 @@
   after
     636e958e87fc1452.7385e6e9bda0a2c1.00d83ac341510b69.2bd5d23f3a3f7fb9
     f699b79484b8634e.cd12c534029b2589.c66b15ba97638477.0b3bb231f4e9fcf0
-    0000000000000000.0000000000000000.2bd5d23f3a3f7fb9.c66b15ba97638477
+    4b8ec36ba2d0e8ca.a1655fc5911f9ff5.9f225ccb418c97ad.76828f71ea979334
     3d1a35fefd5160f0.4bccb00706b94db0.66c88ce25ad7fe39.c9f5646db9d57f32
-    61e23090fc2dfe95
+    0000000000000001
 
-VSHUFPD_128_2of2(reg)
+VCOMISS_128(reg)
   before
     9893ec46502d490a.a7068a39b24687ec.2691b466fef46a67.f92b1febff507644
     cb5595fb50619f3d.67213c08dcbc19eb.9001674d155c33c5.331593d34b04bbfd
@@ -23334,12 +23334,12 @@
     953ca012c691578b.5510ac1202576ca1.7d12cc680de4b928.0bb20cec4a4b9a23
     61fc09f634f5ade9
   after
-    0000000000000000.0000000000000000.7d12cc680de4b928.331593d34b04bbfd
+    9893ec46502d490a.a7068a39b24687ec.2691b466fef46a67.f92b1febff507644
     cb5595fb50619f3d.67213c08dcbc19eb.9001674d155c33c5.331593d34b04bbfd
     5674281b99533ad9.5736c95798bdd119.e468c62ae57de477.ef5464845afe888d
     953ca012c691578b.5510ac1202576ca1.7d12cc680de4b928.0bb20cec4a4b9a23
-    61fc09f634f5ade9
-VSHUFPD_128_2of2(mem)
+    0000000000000001
+VCOMISS_128(mem)
   before
     cffdd68e360a7d0c.e4f9f94c73a732fe.3b7d61253496a6b0.b94b7574271ced86
     2f83efa06c96c5b7.9ff630353d2007df.e747657d4d853a72.f35fbdb8cfb2be3a
@@ -23349,11 +23349,11 @@
   after
     cffdd68e360a7d0c.e4f9f94c73a732fe.3b7d61253496a6b0.b94b7574271ced86
     2f83efa06c96c5b7.9ff630353d2007df.e747657d4d853a72.f35fbdb8cfb2be3a
-    0000000000000000.0000000000000000.3b7d61253496a6b0.e747657d4d853a72
+    5e58d018f1a44217.22813f39c08811da.333b33046730e512.8699a1a1a23165f3
     394af6e2e140b057.c9e424c5976b8d9a.fc2547a89ea363bc.d0461b9c3b25215a
-    2bb22913371b2c1e
+    0000000000000001
 
-VSHUFPD_128_2of2(reg)
+VCOMISS_128(reg)
   before
     f529c774319ec3e9.9a23dbea5976caa4.f06cda445e56b7cc.1fd01d530eeb709e
     88f7ef29c53a2268.5eb0fd1c74534e2a.f3655e21b2d4ca1b.760a31f3d513c7e1
@@ -23361,12 +23361,12 @@
     7dc7d2442eef2730.8015e6af06307e8f.fdd9bcaa6fba9ec3.345705bfd1354641
     5202bcc34046e5b4
   after
-    0000000000000000.0000000000000000.fdd9bcaa6fba9ec3.760a31f3d513c7e1
+    f529c774319ec3e9.9a23dbea5976caa4.f06cda445e56b7cc.1fd01d530eeb709e
     88f7ef29c53a2268.5eb0fd1c74534e2a.f3655e21b2d4ca1b.760a31f3d513c7e1
     41689fa0917c8446.62bdd8654fe2f514.2e1aaaca2e710334.de9d00730c2825b4
     7dc7d2442eef2730.8015e6af06307e8f.fdd9bcaa6fba9ec3.345705bfd1354641
-    5202bcc34046e5b4
-VSHUFPD_128_2of2(mem)
+    0000000000000001
+VCOMISS_128(mem)
   before
     156ba16b7467c03b.966284813a1f44d1.9586a5e8b448a3c7.bcec8f2d113ad673
     595d30a389a59000.e983b1c351991ad6.7dda8ffb753621e7.c7a11fbfae7ee9f1
@@ -23376,11 +23376,11 @@
   after
     156ba16b7467c03b.966284813a1f44d1.9586a5e8b448a3c7.bcec8f2d113ad673
     595d30a389a59000.e983b1c351991ad6.7dda8ffb753621e7.c7a11fbfae7ee9f1
-    0000000000000000.0000000000000000.9586a5e8b448a3c7.7dda8ffb753621e7
+    faa6e6589c0b142f.d37755760ee8e3eb.14de23d36607b41b.794268cce51111e8
     d4103e74c9a606f5.ae8a6d070d98dcbb.375eda5ea2c51890.301c67c04f7f8a05
-    477b17088a5492f3
+    0000000000000001
 
-VSHUFPD_128_2of2(reg)
+VCOMISS_128(reg)
   before
     1aaa740e321d635f.c469b4e52b81237e.d708f4e0eb3641f3.c0263187457f0872
     04f77a3fe2663af5.a47bc495dea827f5.aa3ce66f434d4e3e.8c02a53a6d3e41ed
@@ -23388,12 +23388,12 @@
     911672d4cca4e84d.a7fda467a90cd35f.befafc5bd4174ec0.5d25d1efb5007d5b
     1a0482c80f1bf8a7
   after
-    0000000000000000.0000000000000000.befafc5bd4174ec0.8c02a53a6d3e41ed
+    1aaa740e321d635f.c469b4e52b81237e.d708f4e0eb3641f3.c0263187457f0872
     04f77a3fe2663af5.a47bc495dea827f5.aa3ce66f434d4e3e.8c02a53a6d3e41ed
     63ac260837b95261.5113eb72ff28ce87.8373401eb2693e49.77bdb16333107e2c
     911672d4cca4e84d.a7fda467a90cd35f.befafc5bd4174ec0.5d25d1efb5007d5b
-    1a0482c80f1bf8a7
-VSHUFPD_128_2of2(mem)
+    0000000000000000
+VCOMISS_128(mem)
   before
     8a273edb5c6cac3c.ec815c0f3db23868.81046b60f960f3aa.b71b189043e2b94e
     885a8315b8ff5445.cf39e02427707e5c.bdf6bc490a31ea93.cb238f2b9e56bda0
@@ -23403,11 +23403,11 @@
   after
     8a273edb5c6cac3c.ec815c0f3db23868.81046b60f960f3aa.b71b189043e2b94e
     885a8315b8ff5445.cf39e02427707e5c.bdf6bc490a31ea93.cb238f2b9e56bda0
-    0000000000000000.0000000000000000.81046b60f960f3aa.bdf6bc490a31ea93
+    f269cc6140e1adef.958af8812669f6d6.369d130ef98a7348.545e5d977e009461
     a32095aa101d7366.9bbfa191d529db81.c8c7ed9be1774bf2.af177f40826b7b3e
-    379cef924324ade3
+    0000000000000001
 
-VSHUFPD_256_1of2(reg)
+VMOVUPS_YMM_to_YMMorMEM(reg)
   before
     4a37abfa5fb667fb.774a5bde43bf62d5.3e26d8c1d03d6a0a.4f3ec5dcdf052ec0
     4335aee272ade533.4ab499e8f5d43569.d809987bb430de1c.a7ce17be0e3fd7dc
@@ -23415,12 +23415,12 @@
     578a7ae6ebfb1cb1.5c786d2e48847aae.6576a441a5e4688e.396e1a1171e86faf
     2c14c25adc6fd4bf
   after
-    5c786d2e48847aae.4ab499e8f5d43569.396e1a1171e86faf.a7ce17be0e3fd7dc
+    4335aee272ade533.4ab499e8f5d43569.d809987bb430de1c.a7ce17be0e3fd7dc
     4335aee272ade533.4ab499e8f5d43569.d809987bb430de1c.a7ce17be0e3fd7dc
     7ee2f5b717956336.f72acab44367aa4d.c7b5de2c1c8e7464.ab455f2b8b310472
     578a7ae6ebfb1cb1.5c786d2e48847aae.6576a441a5e4688e.396e1a1171e86faf
     2c14c25adc6fd4bf
-VSHUFPD_256_1of2(mem)
+VMOVUPS_YMM_to_YMMorMEM(mem)
   before
     5f04d5f4e9d2f1cd.2a793bd9896a4d50.546afb42213864b8.0f98e824ebbdf645
     b00bcfcab41e8006.52fa33fe8d6f32be.baccf1dde98e2296.2266a54388a55a36
@@ -23428,13 +23428,13 @@
     188864daf19ee6a8.16e6b98b396807b9.450f0754b8510d80.ee3a7ae13dd49275
     60d78b398c32de1a
   after
-    5f04d5f4e9d2f1cd.2a793bd9896a4d50.546afb42213864b8.0f98e824ebbdf645
+    188864daf19ee6a8.16e6b98b396807b9.450f0754b8510d80.ee3a7ae13dd49275
     b00bcfcab41e8006.52fa33fe8d6f32be.baccf1dde98e2296.2266a54388a55a36
-    5f04d5f4e9d2f1cd.b00bcfcab41e8006.546afb42213864b8.baccf1dde98e2296
+    faf32ac8585e3e96.2d5a5ec0949507a8.6c6acce9bd937174.f82ed7091b29cf0d
     188864daf19ee6a8.16e6b98b396807b9.450f0754b8510d80.ee3a7ae13dd49275
     60d78b398c32de1a
 
-VSHUFPD_256_1of2(reg)
+VMOVUPS_YMM_to_YMMorMEM(reg)
   before
     aa51047ca4d0f1a9.e898f7ec9ceb3669.69e83fcb19746f9e.20881f08f7d6b1e4
     29f4e316203905ce.44ed62ea7450e804.81adebecd0467b02.dba18ef3952e1acc
@@ -23442,12 +23442,12 @@
     31e4c100b69d2289.149aa85b1d93647a.74afab81306a6dfa.5de3661a5f842bdb
     dca3c62fc49a4a59
   after
-    149aa85b1d93647a.44ed62ea7450e804.5de3661a5f842bdb.dba18ef3952e1acc
+    29f4e316203905ce.44ed62ea7450e804.81adebecd0467b02.dba18ef3952e1acc
     29f4e316203905ce.44ed62ea7450e804.81adebecd0467b02.dba18ef3952e1acc
     370c23749df95635.0a551ec096dab8a6.bc80bb5af9696693.5026d2ffae640465
     31e4c100b69d2289.149aa85b1d93647a.74afab81306a6dfa.5de3661a5f842bdb
     dca3c62fc49a4a59
-VSHUFPD_256_1of2(mem)
+VMOVUPS_YMM_to_YMMorMEM(mem)
   before
     aa346e2af8b31e0c.73c9b82707b0a376.40897da52689a6ad.0784b5ce12d4cce6
     a460daf717da6320.590803562dbf16a9.68ee188cccc83b6b.cf4dd7ab3a33bf00
@@ -23455,13 +23455,13 @@
     87bcf0b889832f18.81bf8b7866fdc191.204990dd614e4d36.72e650c9ce024f75
     054fa0e271896527
   after
-    aa346e2af8b31e0c.73c9b82707b0a376.40897da52689a6ad.0784b5ce12d4cce6
+    87bcf0b889832f18.81bf8b7866fdc191.204990dd614e4d36.72e650c9ce024f75
     a460daf717da6320.590803562dbf16a9.68ee188cccc83b6b.cf4dd7ab3a33bf00
-    aa346e2af8b31e0c.a460daf717da6320.40897da52689a6ad.68ee188cccc83b6b
+    a4f487833e1cd4c0.3feba1f7c454b7ce.6995f5fb2c5bdedf.2a540c85451481f7
     87bcf0b889832f18.81bf8b7866fdc191.204990dd614e4d36.72e650c9ce024f75
     054fa0e271896527
 
-VSHUFPD_256_1of2(reg)
+VMOVUPS_YMM_to_YMMorMEM(reg)
   before
     3ddaf63ccb36feb8.2a849183131e2d55.7acfbe44b246719d.67d7662088ad429c
     78d55043789457d5.6718e7d1f8f68da3.886937c742ba039e.1b0cf2afbc85793c
@@ -23469,12 +23469,12 @@
     6246fd0839943961.22d39ea245925e21.5066e8a29f53bc32.3b961c61bdcea1db
     5e83b35dc1570933
   after
-    22d39ea245925e21.6718e7d1f8f68da3.3b961c61bdcea1db.1b0cf2afbc85793c
+    78d55043789457d5.6718e7d1f8f68da3.886937c742ba039e.1b0cf2afbc85793c
     78d55043789457d5.6718e7d1f8f68da3.886937c742ba039e.1b0cf2afbc85793c
     108aa962132fac29.1b436c8c5519092e.06d7f16db2e5b341.18b2b0761ae1b042
     6246fd0839943961.22d39ea245925e21.5066e8a29f53bc32.3b961c61bdcea1db
     5e83b35dc1570933
-VSHUFPD_256_1of2(mem)
+VMOVUPS_YMM_to_YMMorMEM(mem)
   before
     5e47ef544388a476.ca55499e854e3929.5892f8fee56e48a8.c26319d2a4915b1c
     17ad4e335f6e2dcf.a503889193e9e92c.9a4df78c50b883f1.b7187e695e2acbac
@@ -23482,13 +23482,13 @@
     248d635ad286fc74.1f6bcf3f67f44895.ade6d0eef9c6da73.9fdcd97d5f9f126d
     4983c6d1de9260f6
   after
-    5e47ef544388a476.ca55499e854e3929.5892f8fee56e48a8.c26319d2a4915b1c
+    248d635ad286fc74.1f6bcf3f67f44895.ade6d0eef9c6da73.9fdcd97d5f9f126d
     17ad4e335f6e2dcf.a503889193e9e92c.9a4df78c50b883f1.b7187e695e2acbac
-    5e47ef544388a476.17ad4e335f6e2dcf.5892f8fee56e48a8.9a4df78c50b883f1
+    65804be72f14616a.4d9cb64d00f28517.c2d01538a37cca25.8dd115d368ab4a8e
     248d635ad286fc74.1f6bcf3f67f44895.ade6d0eef9c6da73.9fdcd97d5f9f126d
     4983c6d1de9260f6
 
-VSHUFPD_256_2of2(reg)
+VDPPD_128_1of4(reg)
   before
     e614d93d81116fd4.30a0107a62d0b919.77becfd1657b7053.375da39a6ea36e05
     d4d90d2ce5a67db4.6585d032fbff5585.b1dfb371961437fd.3cff0a281f1f4407
@@ -23496,12 +23496,12 @@
     0f32c8425f488028.baf4761aba3a1a5f.3bbe1488fea994c3.27f8859ba420a10e
     c4e69158afbea06b
   after
-    0f32c8425f488028.6585d032fbff5585.3bbe1488fea994c3.3cff0a281f1f4407
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     d4d90d2ce5a67db4.6585d032fbff5585.b1dfb371961437fd.3cff0a281f1f4407
     6d1f5d09a6e0c441.9f071e6eba1f8ce3.291b768a944ad93e.989a8185284416a7
     0f32c8425f488028.baf4761aba3a1a5f.3bbe1488fea994c3.27f8859ba420a10e
     c4e69158afbea06b
-VSHUFPD_256_2of2(mem)
+VDPPD_128_1of4(mem)
   before
     4d2f21a6662bd0e8.145d4742ac6cef15.92165522185eba26.431489d76dbea237
     9da1b173e572edb1.daeed8752ad74bb3.033b3572ef972a64.9d68d1e380143f47
@@ -23511,11 +23511,11 @@
   after
     4d2f21a6662bd0e8.145d4742ac6cef15.92165522185eba26.431489d76dbea237
     9da1b173e572edb1.daeed8752ad74bb3.033b3572ef972a64.9d68d1e380143f47
-    145d4742ac6cef15.9da1b173e572edb1.431489d76dbea237.033b3572ef972a64
+    9007beaa479fb3f3.bb2f75477516d1af.e82d94f65cef2344.a508e918d038a99f
     022cc237a8bfddda.156e1c2528b4bcb5.1fb8ed9b7a7464f3.b73ecce2fbb41aea
     2f5776ad9d17cfd5
 
-VSHUFPD_256_2of2(reg)
+VDPPD_128_1of4(reg)
   before
     699fe3e651ea040b.cedd3b0625dd2991.42f5c979df3d4a70.83aabd4b6532a79d
     c16210f7b4bbf439.d2e6a403d9065045.9f1176b1373eb58d.f0ce7ef43a33a96d
@@ -23523,12 +23523,12 @@
     3a889755f485f82c.ee30373758a52653.5a37c57938d5149b.54dac8dd1134d931
     045c48f64a4a7f7d
   after
-    3a889755f485f82c.d2e6a403d9065045.5a37c57938d5149b.f0ce7ef43a33a96d
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     c16210f7b4bbf439.d2e6a403d9065045.9f1176b1373eb58d.f0ce7ef43a33a96d
     93ecf84e6115dc0b.e9137a1ae1441122.890d2137cb4239b7.41efae8015852690
     3a889755f485f82c.ee30373758a52653.5a37c57938d5149b.54dac8dd1134d931
     045c48f64a4a7f7d
-VSHUFPD_256_2of2(mem)
+VDPPD_128_1of4(mem)
   before
     2c3faab7ddd5d49f.1484e97a0a958449.bf0859475b354c05.6fd95ee1198480e4
     aa4f6b0ce6e194c5.7c2aea283ed4bb0d.37685b3405fe3f63.2441e8dd0bdaba3f
@@ -23538,11 +23538,11 @@
   after
     2c3faab7ddd5d49f.1484e97a0a958449.bf0859475b354c05.6fd95ee1198480e4
     aa4f6b0ce6e194c5.7c2aea283ed4bb0d.37685b3405fe3f63.2441e8dd0bdaba3f
-    1484e97a0a958449.aa4f6b0ce6e194c5.6fd95ee1198480e4.37685b3405fe3f63
+    585a06e180797a18.cdc797cb2dcbda25.311db9ec730eba9a.d6b960d8a963fe58
     142af722c7a943c7.65a7ebcf73081c3c.8bf1f059c0717ad5.df8ec03e8fac87da
     9c0c067b5b409272
 
-VSHUFPD_256_2of2(reg)
+VDPPD_128_1of4(reg)
   before
     697e2efba6ac5bcb.b88dbabbd87dabfb.9f16e2a0aa16bfff.1fb17b6909323b41
     a232322b0e7a1d92.224dcc99ce026de3.d65f78aa7182fd1a.cb28d507695db90a
@@ -23550,12 +23550,12 @@
     c88bc347a4727f19.b417c9d0db4df27a.afb3731a19a13c06.d76fec9ddf22da61
     efd79f6d2ed4f648
   after
-    c88bc347a4727f19.224dcc99ce026de3.afb3731a19a13c06.cb28d507695db90a
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     a232322b0e7a1d92.224dcc99ce026de3.d65f78aa7182fd1a.cb28d507695db90a
     a37210752f381573.2c37a7a6c64346a9.68d0aa5a62d71338.69247c1ffcfeaf5b
     c88bc347a4727f19.b417c9d0db4df27a.afb3731a19a13c06.d76fec9ddf22da61
     efd79f6d2ed4f648
-VSHUFPD_256_2of2(mem)
+VDPPD_128_1of4(mem)
   before
     8e26137b0321be3b.6dc9470b09b39731.94b9ad022a2a2d81.0955cf58326db630
     9129c3b47d14f066.ee78982ffb879866.a9e8d027cee9b2eb.d002ba7e4bc6bb61
@@ -23565,11 +23565,11 @@
   after
     8e26137b0321be3b.6dc9470b09b39731.94b9ad022a2a2d81.0955cf58326db630
     9129c3b47d14f066.ee78982ffb879866.a9e8d027cee9b2eb.d002ba7e4bc6bb61
-    6dc9470b09b39731.9129c3b47d14f066.0955cf58326db630.a9e8d027cee9b2eb
+    d2ac2b02b6b945f7.a7e4b21e157abf65.d071ac2de4933ee3.620630fafd388746
     2e7ac852ca1c7c18.f4599244f41948da.e321bfff87368d96.19ac2e37e650588a
     5242afa1a29868da
 
-VPERMILPS_128_0x00(reg)
+VDPPD_128_2of4(reg)
   before
     6a12afa4cc9ff4e1.81611491d64a4ff5.3022330c33ef6f70.bfc28489d3dd5a30
     bb692aac01ee384c.a72b8daaf54e7bbb.b98c91e46f896fd3.402178b7e59563dc
@@ -23577,12 +23577,12 @@
     7bdc827bf99ad6fd.dd9bf419de0aceb1.1f7375724c36edb4.a148d9b0ca65131c
     3aa93f52d4953308
   after
-    6a12afa4cc9ff4e1.81611491d64a4ff5.3022330c33ef6f70.bfc28489d3dd5a30
-    0000000000000000.0000000000000000.d96961c7d96961c7.d96961c7d96961c7
+    0000000000000000.0000000000000000.423b640f8fcb4e5e.0000000000000000
+    bb692aac01ee384c.a72b8daaf54e7bbb.b98c91e46f896fd3.402178b7e59563dc
     a2931d25dc136fc7.7da5ae894435bc96.eae3a938437285b1.42091576d96961c7
     7bdc827bf99ad6fd.dd9bf419de0aceb1.1f7375724c36edb4.a148d9b0ca65131c
     3aa93f52d4953308
-VPERMILPS_128_0x00(mem)
+VDPPD_128_2of4(mem)
   before
     e7f7c34914067eb7.a390571bf50ea99b.a4d9d948e0d96c39.b488f3ff2561e288
     85ffe180a6c3b054.74fb976f6bfb234c.ae2bdb0165af5359.046e1e4c6b80a1da
@@ -23591,12 +23591,12 @@
     f6fc87e3df09f17a
   after
     e7f7c34914067eb7.a390571bf50ea99b.a4d9d948e0d96c39.b488f3ff2561e288
-    0000000000000000.0000000000000000.2561e2882561e288.2561e288b488f3ff
+    85ffe180a6c3b054.74fb976f6bfb234c.ae2bdb0165af5359.046e1e4c6b80a1da
     f08d16e2a4d9850c.4b683fe5f8ed81bd.d75c75318a963e3e.6d70f2c3b91e6656
     046ddc5d2d53b80a.842449e73771ff9a.fb3a23c26a9deb14.49dc6cd2acc86da7
     f6fc87e3df09f17a
 
-VPERMILPS_128_0x00(reg)
+VDPPD_128_2of4(reg)
   before
     cf1d3f64ee6d2f7b.9d6ab1dc5a3d067b.7b7bb3e3c512d98e.f68f61a121cd1406
     2f8b90c076816355.9652114b4aa42b8b.8cb978443e5c4a46.a428acbbcc347641
@@ -23604,12 +23604,12 @@
     f87deeb960e69b46.1d0f5ea9dd16e836.6c1a04e55d1de4b0.8856564c6dd5d340
     7783ad9c9a27475c
   after
-    cf1d3f64ee6d2f7b.9d6ab1dc5a3d067b.7b7bb3e3c512d98e.f68f61a121cd1406
-    0000000000000000.0000000000000000.87deccf087deccf0.87deccf087deccf0
+    0000000000000000.0000000000000000.460afce4f81bfe09.0000000000000000
+    2f8b90c076816355.9652114b4aa42b8b.8cb978443e5c4a46.a428acbbcc347641
     7491766313d0c8b5.cdef76961693e265.132a95763cdc8f6d.e1d17ffa87deccf0
     f87deeb960e69b46.1d0f5ea9dd16e836.6c1a04e55d1de4b0.8856564c6dd5d340
     7783ad9c9a27475c
-VPERMILPS_128_0x00(mem)
+VDPPD_128_2of4(mem)
   before
     892301d52be0e472.1999f22ef95018b5.627c4470b83af929.f3d4c3fd3dac85bb
     9a03cce53b0a65ab.3132812f7b987bad.7802a4d8c50ad06b.04a5cd2a7713ad39
@@ -23618,12 +23618,12 @@
     0b9a86695cdbac21
   after
     892301d52be0e472.1999f22ef95018b5.627c4470b83af929.f3d4c3fd3dac85bb
-    0000000000000000.0000000000000000.3dac85bb3dac85bb.3dac85bbf3d4c3fd
+    9a03cce53b0a65ab.3132812f7b987bad.7802a4d8c50ad06b.04a5cd2a7713ad39
     86f08cb7e7b38836.9d949426814dffdb.3b6ffacb20922b28.fbda1ed9a8e099d7
     28b4bc374ae7063d.ba0b2880a8f8e1eb.868ec237e4dfc48b.34bdb2746b9f8440
     0b9a86695cdbac21
 
-VPERMILPS_128_0x00(reg)
+VDPPD_128_2of4(reg)
   before
     dbbf942218204b26.5e1bd95281b09eec.e2e33aaa8b275d88.372a79062efc57c0
     0277da0d3bfa9efa.03f35df2a71c0a70.7268c50fc766ae5f.29109a2619f5a2f5
@@ -23631,12 +23631,12 @@
     c2cefc25239f4fc1.09228f75320c51a6.3ba73639b840c26a.3feb0b0643ad4b09
     1b76529eba842141
   after
-    dbbf942218204b26.5e1bd95281b09eec.e2e33aaa8b275d88.372a79062efc57c0
-    0000000000000000.0000000000000000.c1d75f54c1d75f54.c1d75f54c1d75f54
+    0000000000000000.0000000000000000.202ebefbdc0ae7e3.0000000000000000
+    0277da0d3bfa9efa.03f35df2a71c0a70.7268c50fc766ae5f.29109a2619f5a2f5
     db0d549560f6e04a.f207c604d93707f5.c6e5c51af73f111b.370da182c1d75f54
     c2cefc25239f4fc1.09228f75320c51a6.3ba73639b840c26a.3feb0b0643ad4b09
     1b76529eba842141
-VPERMILPS_128_0x00(mem)
+VDPPD_128_2of4(mem)
   before
     a97cf43643669f28.1206d02b2182250c.2211342fcfa7a3b0.2bfb15d7a5f5fdf5
     c3c76cbafa617fe9.2901cb12f62a9ed6.1ba03220cb14ba3f.f32b5d605be9fd6a
@@ -23645,12 +23645,12 @@
     f3e083b647b8f8fc
   after
     a97cf43643669f28.1206d02b2182250c.2211342fcfa7a3b0.2bfb15d7a5f5fdf5
-    0000000000000000.0000000000000000.a5f5fdf5a5f5fdf5.a5f5fdf52bfb15d7
+    c3c76cbafa617fe9.2901cb12f62a9ed6.1ba03220cb14ba3f.f32b5d605be9fd6a
     47253717fa817db1.610be9473c23f8cc.ce9b03334360527e.ef830a4075a8ff75
     0f60cf375fd157ac.186f263492fa6d9a.19ce255452962799.7b5118e390be3fc2
     f3e083b647b8f8fc
 
-VPERMILPS_128_0xFE(reg)
+VDPPD_128_3of4(reg)
   before
     b37b4823362168cf.f945b207465dc705.a97b7f46913a3aeb.d605136e14c2f4be
     176f6297fa85c9e8.dfa05b74ca318ae8.6f79eeead86f9a6c.e30b4a6fa6f17616
@@ -23658,12 +23658,12 @@
     3b9285466f70509c.13e7efd11be3f8ff.0e7e0394a8e906ad.58b77fd4a9868816
     7af5760f51049115
   after
-    b37b4823362168cf.f945b207465dc705.a97b7f46913a3aeb.d605136e14c2f4be
-    0000000000000000.0000000000000000.c8b6718ac8b6718a.c8b6718a0026cac9
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    176f6297fa85c9e8.dfa05b74ca318ae8.6f79eeead86f9a6c.e30b4a6fa6f17616
     7b08cd7f2e7157f3.9e3d4669075a5b83.c8b6718a0026cac9.1aad4443242e69d0
     3b9285466f70509c.13e7efd11be3f8ff.0e7e0394a8e906ad.58b77fd4a9868816
     7af5760f51049115
-VPERMILPS_128_0xFE(mem)
+VDPPD_128_3of4(mem)
   before
     5a33a5e139b43df8.b3598757590fee8d.186cd39a1fd91b8b.9e1da17269478ac5
     d53d89347ca24bec.3fa8cd2087d86e75.8a966daf31478051.d5df4692e1c992bc
@@ -23672,12 +23672,12 @@
     f4ed37b0a8a91697
   after
     5a33a5e139b43df8.b3598757590fee8d.186cd39a1fd91b8b.9e1da17269478ac5
-    0000000000000000.0000000000000000.186cd39a186cd39a.186cd39a186cd39a
+    d53d89347ca24bec.3fa8cd2087d86e75.8a966daf31478051.d5df4692e1c992bc
     c7de9cf637db751c.3bcd550c955a0bfe.463239fc6d39e57e.0d0fed5facfd593f
     0ce45c11856a78b5.03121a87201e02d5.260cb36deebb043d.a3fb9445656f1cf9
     f4ed37b0a8a91697
 
-VPERMILPS_128_0xFE(reg)
+VDPPD_128_3of4(reg)
   before
     5a32d00c123985c5.81194473835c10e3.f2c419fdc3b28fa5.07f057efd0da9abb
     32165dc63faba32e.004ad0074cbcf9d1.662f4cdb1ba1ee1b.c5a9a26c30a16323
@@ -23685,12 +23685,12 @@
     a9ea40004f61de63.8fcfc675b1f7ac9f.4960437a57c210a8.48ce1a0bd9597c64
     c5d13f0559614594
   after
-    5a32d00c123985c5.81194473835c10e3.f2c419fdc3b28fa5.07f057efd0da9abb
-    0000000000000000.0000000000000000.ba9fb18bba9fb18b.ba9fb18bc3785ae3
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    32165dc63faba32e.004ad0074cbcf9d1.662f4cdb1ba1ee1b.c5a9a26c30a16323
     d8e4d948ca89ac7f.66437db9fd96eeac.ba9fb18bc3785ae3.3c050fd12a1d1aa2
     a9ea40004f61de63.8fcfc675b1f7ac9f.4960437a57c210a8.48ce1a0bd9597c64
     c5d13f0559614594
-VPERMILPS_128_0xFE(mem)
+VDPPD_128_3of4(mem)
   before
     8fdafbaac742305f.ff728e586bbf7387.57bc272785eaeed7.71bdff15750b4c17
     82b5c9e83e07faf0.37cac0beb92ea897.9ad41cbb947b7280.8d03dfc7b6df4adb
@@ -23699,12 +23699,12 @@
     2f43389e6e1925e1
   after
     8fdafbaac742305f.ff728e586bbf7387.57bc272785eaeed7.71bdff15750b4c17
-    0000000000000000.0000000000000000.57bc272757bc2727.57bc272757bc2727
+    82b5c9e83e07faf0.37cac0beb92ea897.9ad41cbb947b7280.8d03dfc7b6df4adb
     7a2d25aadbbc5f74.ad3cd19dd63ab93e.34e5211efab7f2c5.f87ee1fbb8cb45a1
     53108bdcb96e1b17.bd15bd605d6fe129.01b9b33ad4a82bd3.107a001f175a7a14
     2f43389e6e1925e1
 
-VPERMILPS_128_0xFE(reg)
+VDPPD_128_3of4(reg)
   before
     b32585e4599381b4.e928776af528e904.c3a08075eb5a5d03.dd1d4dfd3e5dd8d5
     f66ce45d7554cb38.18436640aaf68767.1b2b17471b866979.a3dc6b5153dfb6f8
@@ -23712,12 +23712,12 @@
     2d57c598aedd1906.b0ad3a75f1001d43.316dadd3d3d220e8.62a02361ef80f550
     123bb6f4aeb5cddc
   after
-    b32585e4599381b4.e928776af528e904.c3a08075eb5a5d03.dd1d4dfd3e5dd8d5
-    0000000000000000.0000000000000000.21007c4221007c42.21007c428a7f4037
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    f66ce45d7554cb38.18436640aaf68767.1b2b17471b866979.a3dc6b5153dfb6f8
     566350755ee93f1a.bc2bd34bf5e5ae6e.21007c428a7f4037.31c489242f3c8168
     2d57c598aedd1906.b0ad3a75f1001d43.316dadd3d3d220e8.62a02361ef80f550
     123bb6f4aeb5cddc
-VPERMILPS_128_0xFE(mem)
+VDPPD_128_3of4(mem)
   before
     1d62bdc989e9c73a.d9943f3304bc94a7.d29417abbb538e12.a7bca564930a4339
     5ee1b4cc9c289c94.b466bab0fa13eda9.fdaee7da6eebbe08.df3a616265b4e5d5
@@ -23726,12 +23726,12 @@
     aac5fe2462d02328
   after
     1d62bdc989e9c73a.d9943f3304bc94a7.d29417abbb538e12.a7bca564930a4339
-    0000000000000000.0000000000000000.d29417abd29417ab.d29417abd29417ab
+    5ee1b4cc9c289c94.b466bab0fa13eda9.fdaee7da6eebbe08.df3a616265b4e5d5
     b38418e9017d0b16.1b19337d2c6d60ba.0dc525ed26d36951.3433db3ae55b4469
     f717630cd7f4ceed.6bf9a50437562884.dda74dcf00174a19.04f21156b08b9aa1
     aac5fe2462d02328
 
-VPERMILPS_128_0x30(reg)
+VDPPD_128_4of4(reg)
   before
     82f69e0f96b71dab.056513223799a245.fe510cb3b65b83b3.4b1edb6e18c41e8a
     e7d2ee83e8cbc2d5.bb3ba31540794349.316e64f54607aaf4.31f74bb589e5a1d3
@@ -23739,12 +23739,12 @@
     cdbb8ab659ac00d0.8bb05447b617da08.e727d9e20685535b.d9fec3ebe7b4a398
     53c5c2b20c7a9a6c
   after
-    82f69e0f96b71dab.056513223799a245.fe510cb3b65b83b3.4b1edb6e18c41e8a
-    0000000000000000.0000000000000000.6f868f1e609caa36.6f868f1e6f868f1e
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    e7d2ee83e8cbc2d5.bb3ba31540794349.316e64f54607aaf4.31f74bb589e5a1d3
     37a6e8ecf5994f53.f3668fd30b9f6c26.609caa3682e6dcf3.6dfd1a906f868f1e
     cdbb8ab659ac00d0.8bb05447b617da08.e727d9e20685535b.d9fec3ebe7b4a398
     53c5c2b20c7a9a6c
-VPERMILPS_128_0x30(mem)
+VDPPD_128_4of4(mem)
   before
     b51d93d2fbe430c7.0460cf4dae9010f9.5de66c5c5dee491a.225bed656f6f4cd9
     ddd3b235d0ff20d4.3ae0b41d93d2bd7a.47d355001b2f7589.6e84e22b59300318
@@ -23753,12 +23753,12 @@
     47b3e14830f9f218
   after
     b51d93d2fbe430c7.0460cf4dae9010f9.5de66c5c5dee491a.225bed656f6f4cd9
-    0000000000000000.0000000000000000.6f6f4cd96f6f4cd9.6f6f4cd95de66c5c
+    ddd3b235d0ff20d4.3ae0b41d93d2bd7a.47d355001b2f7589.6e84e22b59300318
     a5b39cc9a5d627c0.c9863393a1fd40fe.23458a1e0ce71980.25edb4a05f55b4c5
     eb89cc78987601b7.0f9f4a19779dd832.cf0688a24d20f22c.a4e460311d699a8c
     47b3e14830f9f218
 
-VPERMILPS_128_0x30(reg)
+VDPPD_128_4of4(reg)
   before
     6aa73353348ff816.8921be30c5ea6ae4.6678f41cae3ebfc2.25e4c978fae8bcb8
     680c52bdc4bae731.5c46efdc473e1d74.2c5b2d09e56d3259.02a9cb8c2e4b3251
@@ -23766,12 +23766,12 @@
     6a58e85df9f87371.126bfabfbcb7546c.71713d4ebca3ab4e.c21bff1f9c0f1559
     5c5f29760e89fa20
   after
-    6aa73353348ff816.8921be30c5ea6ae4.6678f41cae3ebfc2.25e4c978fae8bcb8
-    0000000000000000.0000000000000000.05541223bb94f24b.0554122305541223
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    680c52bdc4bae731.5c46efdc473e1d74.2c5b2d09e56d3259.02a9cb8c2e4b3251
     9f2e3bf17c03fc16.41c6d9673b7ed793.bb94f24bb5b66da4.432209cb05541223
     6a58e85df9f87371.126bfabfbcb7546c.71713d4ebca3ab4e.c21bff1f9c0f1559
     5c5f29760e89fa20
-VPERMILPS_128_0x30(mem)
+VDPPD_128_4of4(mem)
   before
     edbc04ba78cc7ba3.25d8576cd62487ed.ac02cdcfe7f44f2b.a83c0c7e96c22a04
     51fc0bd9f5e7550f.2cf8848ab0147636.eb57ce84d74286fe.bd435a47de9f2371
@@ -23780,12 +23780,12 @@
     c9af1870651c4fbf
   after
     edbc04ba78cc7ba3.25d8576cd62487ed.ac02cdcfe7f44f2b.a83c0c7e96c22a04
-    0000000000000000.0000000000000000.96c22a0496c22a04.96c22a04ac02cdcf
+    51fc0bd9f5e7550f.2cf8848ab0147636.eb57ce84d74286fe.bd435a47de9f2371
     65ecbabea2e34490.db056923225279fa.ab367ac8a8acb20e.0dd0231530c4d542
     03588d559ace0451.8d4b04a4c96dcfe3.c96a4b88773e928a.f230645429bf7a23
     c9af1870651c4fbf
 
-VPERMILPS_128_0x30(reg)
+VDPPD_128_4of4(reg)
   before
     ee993bd57f6590c3.080c018afab3507f.a0164f7740eeb39d.1fc1bfb16005e09c
     bd39c9f0132879da.50d49149dd9fe545.6fb14809246360d5.8a05512d7e0c5970
@@ -23793,12 +23793,12 @@
     cacf17f41b4b31f4.19cff5159eb9d94c.b08b321ba157076e.0f87c0d2ca0abc11
     e15d95d3301a1d36
   after
-    ee993bd57f6590c3.080c018afab3507f.a0164f7740eeb39d.1fc1bfb16005e09c
-    0000000000000000.0000000000000000.ed5fb934556aebc7.ed5fb934ed5fb934
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    bd39c9f0132879da.50d49149dd9fe545.6fb14809246360d5.8a05512d7e0c5970
     93ddbe2bbef145b1.b77cb97e609d7ed0.556aebc710571337.e6037eeaed5fb934
     cacf17f41b4b31f4.19cff5159eb9d94c.b08b321ba157076e.0f87c0d2ca0abc11
     e15d95d3301a1d36
-VPERMILPS_128_0x30(mem)
+VDPPD_128_4of4(mem)
   before
     385178d83c9b99cd.bf5cceb6c7c2784e.529ac1fab400b0e4.db611b7372ee7927
     f02ee5cd0997ec02.ced0e2dd5de2586c.3ea99a1abd7dc0c5.3138a13a1fa8a50e
@@ -23807,12 +23807,12 @@
     d5baba616b23dc8b
   after
     385178d83c9b99cd.bf5cceb6c7c2784e.529ac1fab400b0e4.db611b7372ee7927
-    0000000000000000.0000000000000000.72ee792772ee7927.72ee7927529ac1fa
+    f02ee5cd0997ec02.ced0e2dd5de2586c.3ea99a1abd7dc0c5.3138a13a1fa8a50e
     e4c1599eb41cd102.53774cd57a380bf9.b9c8fa5fd53cc41a.105cc0dc4511c7ce
     f2d74e37583605f9.aa9c090ab94fcea2.9fc360b7194a7910.d21974c580b61a14
     d5baba616b23dc8b
 
-VPERMILPS_128_0x21(reg)
+VPINSRW_128_1of4(reg)
   before
     738d8d1ca2e246e0.f53a428512ef4413.2f8d16e8b7b3dc13.cb66450da4b29bd3
     0adce962c28197be.c9b7b072fd55497a.3e946edb0ff172f7.1b7c264d9380e68e
@@ -23820,12 +23820,12 @@
     8e212c402b8dd9c8.532eebddd75699e6.6917efb13f2926ca.9435ce3a0c80e69e
     746f8cc1cdc9124b
   after
-    738d8d1ca2e246e0.f53a428512ef4413.2f8d16e8b7b3dc13.cb66450da4b29bd3
-    0000000000000000.0000000000000000.02c1156e5e94ccfb.02c1156e6ad28062
+    0000000000000000.0000000000000000.3e946edb0ff172f7.1b7c264d9380124b
+    0adce962c28197be.c9b7b072fd55497a.3e946edb0ff172f7.1b7c264d9380e68e
     f4f4caa0668c09d2.4a1915eb3574d25d.32fe0d4f5e94ccfb.6ad2806202c1156e
     8e212c402b8dd9c8.532eebddd75699e6.6917efb13f2926ca.9435ce3a0c80e69e
     746f8cc1cdc9124b
-VPERMILPS_128_0x21(mem)
+VPINSRW_128_1of4(mem)
   before
     e84c36e162a958a0.35af0cb0ac12434b.c2c0b033ff095a42.3e2b116b4e3bbb11
     cb9a4987e62b72cb.43e9655a86a78308.729ddfd8c899d39c.0d866eeb2856c87c
@@ -23834,12 +23834,12 @@
     ed37bf408d571649
   after
     e84c36e162a958a0.35af0cb0ac12434b.c2c0b033ff095a42.3e2b116b4e3bbb11
-    0000000000000000.0000000000000000.4e3bbb113e2b116b.4e3bbb11ff095a42
-    f824409f765b1df5.151d33ac54d6d4aa.3e8ff4ba4e10be21.3273029b690689b6
+    cb9a4987e62b72cb.43e9655a86a78308.729ddfd8c899d39c.0d866eeb2856c87c
+    0000000000000000.0000000000000000.729ddfd8c899d39c.bb116eeb2856c87c
     4db597162d46154d.07957211b32d73de.04636bc4ae7cd8fd.0840c9e9acd83a6b
     ed37bf408d571649
 
-VPERMILPS_128_0x21(reg)
+VPINSRW_128_1of4(reg)
   before
     3ca5e10ca9105afa.a41acad627f715fd.759e1ff53e389b50.9fe4c1e204e9dc5b
     50d62ab99b8e422a.db1f55cd817ada31.bc8435c492818aab.eae071006b628767
@@ -23847,12 +23847,12 @@
     3cb02167740aecba.5539650dc428a3d8.40178cd30203a7cf.0475cfeddda8c23d
     8aa67693208eca5d
   after
-    3ca5e10ca9105afa.a41acad627f715fd.759e1ff53e389b50.9fe4c1e204e9dc5b
-    0000000000000000.0000000000000000.fff3954f4a967a9c.fff3954fc322f70a
+    0000000000000000.0000000000000000.bc8435c492818aab.eae071006b62ca5d
+    50d62ab99b8e422a.db1f55cd817ada31.bc8435c492818aab.eae071006b628767
     871596b3005d0986.cc90b5e657dc2016.3693b0ea4a967a9c.c322f70afff3954f
     3cb02167740aecba.5539650dc428a3d8.40178cd30203a7cf.0475cfeddda8c23d
     8aa67693208eca5d
-VPERMILPS_128_0x21(mem)
+VPINSRW_128_1of4(mem)
   before
     328166eae5b068dc.caf1c83f911f2771.50e6e12ee56b1ea2.365bc5eb57534fef
     d6d21ddc471b59e6.8f2686a8f62bf658.9b62a535d5af4ea1.74ac589fe512aca8
@@ -23861,12 +23861,12 @@
     76e6ff93f8635e26
   after
     328166eae5b068dc.caf1c83f911f2771.50e6e12ee56b1ea2.365bc5eb57534fef
-    0000000000000000.0000000000000000.57534fef365bc5eb.57534fefe56b1ea2
-    5465175763d958a6.e599570f3cb7941b.107a2e0eb003ef00.5657405947ccfba7
+    d6d21ddc471b59e6.8f2686a8f62bf658.9b62a535d5af4ea1.74ac589fe512aca8
+    0000000000000000.0000000000000000.9b62a535d5af4ea1.4fef589fe512aca8
     8605ce4654f82349.2a9737de01513e65.8cfaf7a59370bcec.38a67987190e7898
     76e6ff93f8635e26
 
-VPERMILPS_128_0x21(reg)
+VPINSRW_128_1of4(reg)
   before
     6c62cfeb8057eafe.4980c095378474fa.b86c2283e18530e2.ecae7ce699047391
     7668e4fa4b7758cc.79a0672f278807e6.ec63156977dda540.0a6239bedfcacd1a
@@ -23874,12 +23874,12 @@
     353ecded2069c9f8.9102cafa9f29e71e.b7eb00a8372f0b49.f3f94cdf991e618b
     77759a0146c312ca
   after
-    6c62cfeb8057eafe.4980c095378474fa.b86c2283e18530e2.ecae7ce699047391
-    0000000000000000.0000000000000000.81cf89b460e7da29.81cf89b4c3e2aa17
+    0000000000000000.0000000000000000.ec63156977dda540.0a6239bedfca12ca
+    7668e4fa4b7758cc.79a0672f278807e6.ec63156977dda540.0a6239bedfcacd1a
     ef42392cf84ee43b.f332410340109a39.23ca0bfc60e7da29.c3e2aa1781cf89b4
     353ecded2069c9f8.9102cafa9f29e71e.b7eb00a8372f0b49.f3f94cdf991e618b
     77759a0146c312ca
-VPERMILPS_128_0x21(mem)
+VPINSRW_128_1of4(mem)
   before
     29201068a1ca589d.a3a699a9625344ae.30dc7c0160ddabc2.0513f0d9983f744d
     e6c72a02c940ef31.95c79bcc5798900a.ac8bd5049e3ba250.6a8ed7fb20a550e1
@@ -23888,12 +23888,12 @@
     b2e83140b74ff3b1
   after
     29201068a1ca589d.a3a699a9625344ae.30dc7c0160ddabc2.0513f0d9983f744d
-    0000000000000000.0000000000000000.983f744d0513f0d9.983f744d60ddabc2
-    8a3665bad73092b2.66eccec39ec4ebb8.e1dd50f0754c87f5.40a8b27a6beddcb0
+    e6c72a02c940ef31.95c79bcc5798900a.ac8bd5049e3ba250.6a8ed7fb20a550e1
+    0000000000000000.0000000000000000.ac8bd5049e3ba250.744dd7fb20a550e1
     f1393b7ce9a7fe4c.74632ef8d0648f63.ab9c69af021e17dd.e4ad7cc314a15467
     b2e83140b74ff3b1
 
-VPERMILPS_128_0xD7(reg)
+VPINSRW_128_2of4(reg)
   before
     06a7ce5ff183f73b.f79b2a341bb0ee2a.1a77b7d98b04b9b8.e6959c2f61bc0e33
     3c344d8a5dc799b1.7829aecf88572078.b37365d06b2ea462.6e94665aac332724
@@ -23901,12 +23901,12 @@
     bfebe6b93db5ae0f.5bfa615985b13517.335622b50855b167.d5d4ab667dd9b285
     6cac201e39219c4e
   after
-    06a7ce5ff183f73b.f79b2a341bb0ee2a.1a77b7d98b04b9b8.e6959c2f61bc0e33
-    0000000000000000.0000000000000000.9da4354b1f65411e.1f65411e9da4354b
+    0000000000000000.0000000000000000.b37365d06b2ea462.6e949c4eac332724
+    3c344d8a5dc799b1.7829aecf88572078.b37365d06b2ea462.6e94665aac332724
     b0dcac2f98a918be.50b041374da94e63.9da4354b0b708e0e.1f65411e028e1fdb
     bfebe6b93db5ae0f.5bfa615985b13517.335622b50855b167.d5d4ab667dd9b285
     6cac201e39219c4e
-VPERMILPS_128_0xD7(mem)
+VPINSRW_128_2of4(mem)
   before
     c0ba1a3253719861.c3adf794e976994f.75d488224c7b90c0.d0d5287afd6a491a
     adcb178ee6d564eb.196ddc2c3778122b.7a0a347dbf141c88.d26d4306863a94d3
@@ -23915,12 +23915,12 @@
     c6c1ed8cb586f5d7
   after
     c0ba1a3253719861.c3adf794e976994f.75d488224c7b90c0.d0d5287afd6a491a
-    0000000000000000.0000000000000000.d0d5287a4c7b90c0.75d48822fd6a491a
-    0fa9921f0e5ab917.1c7990edc447584f.4567e155fa87959e.936970c54051cc3d
+    adcb178ee6d564eb.196ddc2c3778122b.7a0a347dbf141c88.d26d4306863a94d3
+    0000000000000000.0000000000000000.7a0a347dbf141c88.491a4306863a94d3
     c12107cfe80b5612.2a1b0e432b70a566.b4b9099817e0b72c.7017aa23c63c2e05
     c6c1ed8cb586f5d7
 
-VPERMILPS_128_0xD7(reg)
+VPINSRW_128_2of4(reg)
   before
     efb4356ca9bb5f5e.a1fef28c90f4f508.9ea0559b097e361d.a2ca2a31352c3d5f
     493c7f303c68a646.8a0ed04021225324.d4545e5ff9fe471f.eb67bf0c6e76e562
@@ -23928,12 +23928,12 @@
     fb3a0510b557bdec.e6f35141707a3b80.f679aadf8081d7b7.fd753538a235858b
     7f7e0f62d5c2f608
   after
-    efb4356ca9bb5f5e.a1fef28c90f4f508.9ea0559b097e361d.a2ca2a31352c3d5f
-    0000000000000000.0000000000000000.288326fd6a5c4415.6a5c4415288326fd
+    0000000000000000.0000000000000000.d4545e5ff9fe471f.eb67f6086e76e562
+    493c7f303c68a646.8a0ed04021225324.d4545e5ff9fe471f.eb67bf0c6e76e562
     2ea4c5420d18063d.581b1bd9b8a02c93.288326fd977a1319.6a5c4415deca6862
     fb3a0510b557bdec.e6f35141707a3b80.f679aadf8081d7b7.fd753538a235858b
     7f7e0f62d5c2f608
-VPERMILPS_128_0xD7(mem)
+VPINSRW_128_2of4(mem)
   before
     cb424d7d947d7806.0c493a05d3b20502.1260ed6665bd3d18.9981e573509ccfa4
     bf8f6b76fa73c7b0.be1c618d00b41b29.b62f6c33b474ee86.6fe9d424a259378c
@@ -23942,12 +23942,12 @@
     b450a91cbed063e4
   after
     cb424d7d947d7806.0c493a05d3b20502.1260ed6665bd3d18.9981e573509ccfa4
-    0000000000000000.0000000000000000.9981e57365bd3d18.1260ed66509ccfa4
-    352fe53a24af9e33.6b007414dbe93b0e.b02b489479ab0af7.d3fb715d12434a1d
+    bf8f6b76fa73c7b0.be1c618d00b41b29.b62f6c33b474ee86.6fe9d424a259378c
+    0000000000000000.0000000000000000.b62f6c33b474ee86.cfa4d424a259378c
     0bef37b42d3dbaba.70417106fddea05c.db22ff75ce6f4c97.2104ba8c3de74501
     b450a91cbed063e4
 
-VPERMILPS_128_0xD7(reg)
+VPINSRW_128_2of4(reg)
   before
     ea2b3d7a328ae273.1b9bdecf312ad772.292b53cf041e87c0.12df0cc3d2cb7191
     1de06f1034a1fc5a.43fe55794d81b187.f20916db8c352ce5.332dec689fcc3512
@@ -23955,12 +23955,12 @@
     ee0ca1985419f3de.471ea3273c9f8a76.24d5306d8c1a9e25.9eaf116b05ea8858
     a27b4fa0d61f9075
   after
-    ea2b3d7a328ae273.1b9bdecf312ad772.292b53cf041e87c0.12df0cc3d2cb7191
-    0000000000000000.0000000000000000.2729b79618d91951.18d919512729b796
+    0000000000000000.0000000000000000.f20916db8c352ce5.332d90759fcc3512
+    1de06f1034a1fc5a.43fe55794d81b187.f20916db8c352ce5.332dec689fcc3512
     abbd3c4b61a2ee44.5de6189d9d4f0324.2729b79630b0ca78.18d91951517d5346
     ee0ca1985419f3de.471ea3273c9f8a76.24d5306d8c1a9e25.9eaf116b05ea8858
     a27b4fa0d61f9075
-VPERMILPS_128_0xD7(mem)
+VPINSRW_128_2of4(mem)
   before
     fe094fdee12927c8.441a9961aa9049d4.db717303467d02a9.455a7fca3dffe497
     8f248d104113087e.07332014fe952ad1.f6ac031ed8f526e8.e6059f1bdfecd87b
@@ -23969,12 +23969,12 @@
     61d8bff77e571d87
   after
     fe094fdee12927c8.441a9961aa9049d4.db717303467d02a9.455a7fca3dffe497
-    0000000000000000.0000000000000000.455a7fca467d02a9.db7173033dffe497
-    329a862212eaf0c2.95a3331bedb3d281.759bcf620e14b35f.631f8cca0d6cb57c
+    8f248d104113087e.07332014fe952ad1.f6ac031ed8f526e8.e6059f1bdfecd87b
+    0000000000000000.0000000000000000.f6ac031ed8f526e8.e4979f1bdfecd87b
     c135b50071b99bc1.48b6cce412777f92.320a53bc02e5653c.18f74345630cb847
     61d8bff77e571d87
 
-VPERMILPS_128_0xB5(reg)
+VPINSRW_128_3of4(reg)
   before
     9a0dfc4cf9d920ea.19c296967a8cc4a7.7eb7e9da0a6c6bae.0ac40b19d375f8a8
     1ee3f6b0711efc19.160da5d0486f299f.91f38569701ed381.d99774639bcf27d2
@@ -23982,12 +23982,12 @@
     7ca21255c6233292.700c3ee0a5979177.c14d2b02f7eb06ff.cdb3467381114c0a
     a995a710d712ba72
   after
-    9a0dfc4cf9d920ea.19c296967a8cc4a7.7eb7e9da0a6c6bae.0ac40b19d375f8a8
-    0000000000000000.0000000000000000.e01af3b8deb79dfd.7c4d09887c4d0988
+    0000000000000000.0000000000000000.91f38569701eba72.d99774639bcf27d2
+    1ee3f6b0711efc19.160da5d0486f299f.91f38569701ed381.d99774639bcf27d2
     4ba6a98f81b3eec3.95e25e9af86f83d6.deb79dfde01af3b8.7c4d098876ffafe4
     7ca21255c6233292.700c3ee0a5979177.c14d2b02f7eb06ff.cdb3467381114c0a
     a995a710d712ba72
-VPERMILPS_128_0xB5(mem)
+VPINSRW_128_3of4(mem)
   before
     ecbfa94b940eb445.0d232c6fdbfb0332.8459c08f6bf40daf.97012de5511d4901
     72fdc610d60ff7b2.5975f3475dc69e50.ad9360916791b4aa.ba219e10893df86b
@@ -23996,12 +23996,12 @@
     8ff964817fa4e2ce
   after
     ecbfa94b940eb445.0d232c6fdbfb0332.8459c08f6bf40daf.97012de5511d4901
-    0000000000000000.0000000000000000.97012de5511d4901.6bf40daf6bf40daf
-    171b7c4bb6233ee3.bee3634ae7103f98.c7879ad4b47a4293.87f87af13bd64ee8
+    72fdc610d60ff7b2.5975f3475dc69e50.ad9360916791b4aa.ba219e10893df86b
+    0000000000000000.0000000000000000.ad9360914901b4aa.ba219e10893df86b
     b7e446e852554704.97bb78e5156622b5.ae01eb436fbc7397.5ad1bdf204758825
     8ff964817fa4e2ce
 
-VPERMILPS_128_0xB5(reg)
+VPINSRW_128_3of4(reg)
   before
     82bc6a0949f1988e.2e25a1d4c6b2cc43.3f472f8385528254.3ecdcec9b36202e1
     8f66cbf5fde8e512.58aa07f92d458ac9.14d48390d0639c21.53b7bf549d78ac9e
@@ -24009,12 +24009,12 @@
     679f8eae95013714.35b0e9a2453e9f61.b120f3a66c1dedf2.7c13bb26d1254020
     471fbf4653d5a23d
   after
-    82bc6a0949f1988e.2e25a1d4c6b2cc43.3f472f8385528254.3ecdcec9b36202e1
-    0000000000000000.0000000000000000.9422acc770ae7077.c98a3acfc98a3acf
+    0000000000000000.0000000000000000.14d48390d063a23d.53b7bf549d78ac9e
+    8f66cbf5fde8e512.58aa07f92d458ac9.14d48390d0639c21.53b7bf549d78ac9e
     124383b338140605.113ff645a31a3cc5.70ae70779422acc7.c98a3acf480b2dfa
     679f8eae95013714.35b0e9a2453e9f61.b120f3a66c1dedf2.7c13bb26d1254020
     471fbf4653d5a23d
-VPERMILPS_128_0xB5(mem)
+VPINSRW_128_3of4(mem)
   before
     0878c119eb240f7c.eac5e952b13bb4eb.9fc95dfe2fbc6fc9.31780688f5df9c50
     9aeb3d8cb420420a.f7038f0c274fb835.2d55cc447ca0682a.4e00a78acbf5f58b
@@ -24023,12 +24023,12 @@
     e3b6b1802ea25225
   after
     0878c119eb240f7c.eac5e952b13bb4eb.9fc95dfe2fbc6fc9.31780688f5df9c50
-    0000000000000000.0000000000000000.31780688f5df9c50.2fbc6fc92fbc6fc9
-    d943af8ccbd5f912.eaa37c4694c8809f.ba21b46048f745b0.6206d11689ea344f
+    9aeb3d8cb420420a.f7038f0c274fb835.2d55cc447ca0682a.4e00a78acbf5f58b
+    0000000000000000.0000000000000000.2d55cc449c50682a.4e00a78acbf5f58b
     a04e94034b4eeec2.1ff2ad6d933347d4.22fa903eb0ccc386.cbd48099cb4a9449
     e3b6b1802ea25225
 
-VPERMILPS_128_0xB5(reg)
+VPINSRW_128_3of4(reg)
   before
     07fa5e354d7daa8e.cdd667df5097dd43.f23c1ceec01a4b81.40aadccacf2b9ed9
     93eb8526c567d731.3ba9a40bf7bc84c4.bfccc733b80cc652.f2fd14f0c22192d5
@@ -24036,12 +24036,12 @@
     54032f682e9aa3d3.495b4c029acce570.b6f2bebe783a130d.7ec139bb92ffb376
     11c81e37a7005973
   after
-    07fa5e354d7daa8e.cdd667df5097dd43.f23c1ceec01a4b81.40aadccacf2b9ed9
-    0000000000000000.0000000000000000.1792f5f2e1f0a9aa.13c1b59c13c1b59c
+    0000000000000000.0000000000000000.bfccc733b80c5973.f2fd14f0c22192d5
+    93eb8526c567d731.3ba9a40bf7bc84c4.bfccc733b80cc652.f2fd14f0c22192d5
     e4d421be31ed16b9.c591c7725cca9d6f.e1f0a9aa1792f5f2.13c1b59ca4b95aa5
     54032f682e9aa3d3.495b4c029acce570.b6f2bebe783a130d.7ec139bb92ffb376
     11c81e37a7005973
-VPERMILPS_128_0xB5(mem)
+VPINSRW_128_3of4(mem)
   before
     a7a3e0fe00c707c9.40c2a99257faba2b.a2d2b0a6cdce17f4.991f03db778f5e51
     1b1ef9fab8617aa3.045e8da7499a966c.abc46e4a12ddf027.e5c3726db11e0f68
@@ -24050,12 +24050,12 @@
     df719d19d599ec5a
   after
     a7a3e0fe00c707c9.40c2a99257faba2b.a2d2b0a6cdce17f4.991f03db778f5e51
-    0000000000000000.0000000000000000.991f03db778f5e51.cdce17f4cdce17f4
-    4b05e719ebd86e2f.fc23d6139f057443.42fc02db84042c34.f82a09e0c17265fe
+    1b1ef9fab8617aa3.045e8da7499a966c.abc46e4a12ddf027.e5c3726db11e0f68
+    0000000000000000.0000000000000000.abc46e4a5e51f027.e5c3726db11e0f68
     11242546b63b9f96.845c8043f5c8905b.4145e843404f8748.2da0c3a044179bc0
     df719d19d599ec5a
 
-VPERMILPS_128_0x85(reg)
+VPINSRW_128_4of4(reg)
   before
     6ce891b811859577.4a472f6d3593c806.f85788a1e86d2561.866c9d6f62cbbd8e
     2e529de79367d1c4.d339817a83eea6ab.b55ee89a14827101.eb3d9b4c04838934
@@ -24063,12 +24063,12 @@
     c52feaa9db39f59d.40bdeef6fdda7043.74c3a50e842b18bd.890d67c53ed9d549
     79a32d3a0d8ece12
   after
-    6ce891b811859577.4a472f6d3593c806.f85788a1e86d2561.866c9d6f62cbbd8e
-    0000000000000000.0000000000000000.1493aee64584a863.4d8460c44d8460c4
+    0000000000000000.0000000000000000.b55ece1214827101.eb3d9b4c04838934
+    2e529de79367d1c4.d339817a83eea6ab.b55ee89a14827101.eb3d9b4c04838934
     83fbbc13f8c9dded.86c79859bc57f5b1.14be9e9b1493aee6.4d8460c44584a863
     c52feaa9db39f59d.40bdeef6fdda7043.74c3a50e842b18bd.890d67c53ed9d549
     79a32d3a0d8ece12
-VPERMILPS_128_0x85(mem)
+VPINSRW_128_4of4(mem)
   before
     fa142c0fceaf4dea.523a2314d9425580.dee7013d6284d48d.30b9fa6101d6ed31
     e92ae2309c490efc.846864c08d713944.3a114d1b0660ddbd.a4ec97ff262067ef
@@ -24077,12 +24077,12 @@
     e8e9ffd3a1340f9b
   after
     fa142c0fceaf4dea.523a2314d9425580.dee7013d6284d48d.30b9fa6101d6ed31
-    0000000000000000.0000000000000000.dee7013d30b9fa61.dee7013d01d6ed31
-    20b2ca899467cf74.b804a8199451dc93.31074c7a057b47fd.2ca77a549096c2a3
+    e92ae2309c490efc.846864c08d713944.3a114d1b0660ddbd.a4ec97ff262067ef
+    0000000000000000.0000000000000000.ed314d1b0660ddbd.a4ec97ff262067ef
     7c786006d1164a80.4b5ceb8b896e7b19.9f947c487ce0cd79.24389eccdbc33cf8
     e8e9ffd3a1340f9b
 
-VPERMILPS_128_0x85(reg)
+VPINSRW_128_4of4(reg)
   before
     d40799d581747837.d94821936f613c49.97ba298208555183.61865870869b2c5e
     43de693e140fb379.13ed871c8b5461fe.f96b5f6aae919c7d.51a75cdd40b920d8
@@ -24090,12 +24090,12 @@
     1fe798f6c9878d9e.8eea38d3ac6332d7.70f59fbdde397bcf.2ea9cc3b324bb639
     d3223103a2d7d078
   after
-    d40799d581747837.d94821936f613c49.97ba298208555183.61865870869b2c5e
-    0000000000000000.0000000000000000.17ae96b2c5446512.4cc4047d4cc4047d
+    0000000000000000.0000000000000000.f96bd078ae919c7d.51a75cdd40b920d8
+    43de693e140fb379.13ed871c8b5461fe.f96b5f6aae919c7d.51a75cdd40b920d8
     93ba6a7af991fb0d.0635108e41fc74c9.cdbb87af17ae96b2.4cc4047dc5446512
     1fe798f6c9878d9e.8eea38d3ac6332d7.70f59fbdde397bcf.2ea9cc3b324bb639
     d3223103a2d7d078
-VPERMILPS_128_0x85(mem)
+VPINSRW_128_4of4(mem)
   before
     17faaec231f66efc.42b0ef1c227ca5d8.87d979d9e8985753.3c67a3019fbd897f
     d6ffbf62fdb34ef1.5a626c5aa0fd7f69.cdce508b12a49e69.8e5b8de5f7c6fa6f
@@ -24104,12 +24104,12 @@
     40428f929d7bfc75
   after
     17faaec231f66efc.42b0ef1c227ca5d8.87d979d9e8985753.3c67a3019fbd897f
-    0000000000000000.0000000000000000.87d979d93c67a301.87d979d99fbd897f
-    ecfbe1d01f1b2a82.c24a091bde9556fb.3c953ad44595c447.c21f5bd781e10b4b
+    d6ffbf62fdb34ef1.5a626c5aa0fd7f69.cdce508b12a49e69.8e5b8de5f7c6fa6f
+    0000000000000000.0000000000000000.897f508b12a49e69.8e5b8de5f7c6fa6f
     35bb8ef9b539bfdc.d5b2c4ca78d0673a.b0fab2a29e778517.34fd0742da99f8be
     40428f929d7bfc75
 
-VPERMILPS_128_0x85(reg)
+VPINSRW_128_4of4(reg)
   before
     4239ef336711541b.8d0b44c7db19c82a.f1e698d50b3beed3.05c834e038549d05
     96302191d3ea3c5d.d0b77e28acc80299.703482a733612672.17cc3d7a303ac73f
@@ -24117,12 +24117,12 @@
     a44af034038eab64.86526f4fc0c0f989.0b4a8450af0e9c70.e2a7d073a84f4441
     531553a960960f62
   after
-    4239ef336711541b.8d0b44c7db19c82a.f1e698d50b3beed3.05c834e038549d05
-    0000000000000000.0000000000000000.8bce4cc2a134c0ee.c2d3475dc2d3475d
+    0000000000000000.0000000000000000.70340f6233612672.17cc3d7a303ac73f
+    96302191d3ea3c5d.d0b77e28acc80299.703482a733612672.17cc3d7a303ac73f
     987123187e8fefe7.da8ab80644512954.b0e77cac8bce4cc2.c2d3475da134c0ee
     a44af034038eab64.86526f4fc0c0f989.0b4a8450af0e9c70.e2a7d073a84f4441
     531553a960960f62
-VPERMILPS_128_0x85(mem)
+VPINSRW_128_4of4(mem)
   before
     f0e84dece515dc7d.16058451ff72a981.b2d91eee3b222d61.deaa95003cae5228
     97ee382655d968bf.4aefdbdc0dc728e9.39ec40cfd282820b.8653ab26cd3aa995
@@ -24131,12 +24131,12 @@
     0cfce59cb4d8d1d5
   after
     f0e84dece515dc7d.16058451ff72a981.b2d91eee3b222d61.deaa95003cae5228
-    0000000000000000.0000000000000000.b2d91eeedeaa9500.b2d91eee3cae5228
-    23f19245c9ed6f54.9c54f23fc91a6349.f75754dea0ecb4b1.5d91c330ff3cde63
+    97ee382655d968bf.4aefdbdc0dc728e9.39ec40cfd282820b.8653ab26cd3aa995
+    0000000000000000.0000000000000000.522840cfd282820b.8653ab26cd3aa995
     6fbfd6345f5eac67.677fc4e8d0f6954c.c7e6d307c26d7f7f.c0b0d7886e422d40
     0cfce59cb4d8d1d5
 
-VPERMILPS_128_0x29(reg)
+VBROADCASTSS_256(reg)
   before
     9bc0e8d6708808d1.592280de3336dc25.09be4d41bee8faa0.87653b3753109ea2
     ca49dda43be00bde.bce70d315f83bbba.dd5b89b82e7bd0ee.119f065870e2ce46
@@ -24145,11 +24145,11 @@
     0bae9ba123e41aed
   after
     9bc0e8d6708808d1.592280de3336dc25.09be4d41bee8faa0.87653b3753109ea2
-    0000000000000000.0000000000000000.34edcb96bc3b51e5.bc3b51e54362b258
+    ca49dda43be00bde.bce70d315f83bbba.dd5b89b82e7bd0ee.119f065870e2ce46
     f5e3be71b36c19a8.73d9f71802510551.3fa474b8bc3b51e5.4362b25834edcb96
     79da89a974b76cdd.5cc6bc8036ab7517.8ae30bad05b5ba2f.f878bb21bc3f50bf
     0bae9ba123e41aed
-VPERMILPS_128_0x29(mem)
+VBROADCASTSS_256(mem)
   before
     5ad0d0c386e7e54b.b07a39b8194d4126.5179d753179dc837.1c654903a4734778
     bfaad57200546d05.f70fca0b3fbad432.30bdc47ec233bade.4f752a263604336d
@@ -24158,12 +24158,12 @@
     4ef97896b2148f0a
   after
     5ad0d0c386e7e54b.b07a39b8194d4126.5179d753179dc837.1c654903a4734778
-    0000000000000000.0000000000000000.179dc8371c654903.a4734778179dc837
+    a4734778a4734778.a4734778a4734778.a4734778a4734778.a4734778a4734778
     1707269cad376d49.aae4390c818b61ab.d35f00ed527a0637.8161aa8356f1bbba
     3fb53f2caa9da241.254780287b4b233d.182b068de47d696f.0d73c684a1c81b0a
     4ef97896b2148f0a
 
-VPERMILPS_128_0x29(reg)
+VBROADCASTSS_256(reg)
   before
     a23dbe2626625266.117e9d0f1391c819.c4829dccca865796.d9ed524893489fb2
     638c949e983da1c9.6b2fba2f03209afe.e3e28b620ac9385f.f371600c7ce8642b
@@ -24172,11 +24172,11 @@
     f07fefc0a73a6297
   after
     a23dbe2626625266.117e9d0f1391c819.c4829dccca865796.d9ed524893489fb2
-    0000000000000000.0000000000000000.ba687307d59f0447.d59f04474382acc4
+    638c949e983da1c9.6b2fba2f03209afe.e3e28b620ac9385f.f371600c7ce8642b
     ee31f46ca531b8df.279414799654d51c.deb34758d59f0447.4382acc4ba687307
     a07adcfbe8cbd256.227927d9e93c359e.1141cb19ca95f5f8.a3eeb35c6ad58971
     f07fefc0a73a6297
-VPERMILPS_128_0x29(mem)
+VBROADCASTSS_256(mem)
   before
     0602dedc8da3b9a2.d3b246b7fe962dd7.38a96d3c17e176b1.d7d715118335481e
     c243fc9c391d4bc0.e424310c821e0211.46f2648d3d515380.8ec320ab9c0e3867
@@ -24185,12 +24185,12 @@
     eb7aa087435a14c1
   after
     0602dedc8da3b9a2.d3b246b7fe962dd7.38a96d3c17e176b1.d7d715118335481e
-    0000000000000000.0000000000000000.17e176b1d7d71511.8335481e17e176b1
+    8335481e8335481e.8335481e8335481e.8335481e8335481e.8335481e8335481e
     fe0ec3ecc7b2d41d.301d966610f090ae.261e86b776978938.914fe856b2a9027c
     972eb1b8527110e5.11e972314597115b.b5fa51a8dfc0d405.3cc8697b6094e20c
     eb7aa087435a14c1
 
-VPERMILPS_128_0x29(reg)
+VBROADCASTSS_256(reg)
   before
     f9b188e6f688d447.697141edf663ba43.e4d4c2d9bd9fc2c3.cf52414b93d7f012
     c4b81d0516a95d4b.50a1ef75d0968f63.052a81cb1295df93.50f2d08cafe8988c
@@ -24199,11 +24199,11 @@
     d579183b8772353d
   after
     f9b188e6f688d447.697141edf663ba43.e4d4c2d9bd9fc2c3.cf52414b93d7f012
-    0000000000000000.0000000000000000.4eff899ee304a476.e304a47614a67c57
+    c4b81d0516a95d4b.50a1ef75d0968f63.052a81cb1295df93.50f2d08cafe8988c
     a7dd5b4e3e49eb79.288b373efc154b72.d136ab71e304a476.14a67c574eff899e
     fd6a3f2f0af4bc7c.cdfb963394edaa9c.a2463d39ca784c19.f73ac0988d297e75
     d579183b8772353d
-VPERMILPS_128_0x29(mem)
+VBROADCASTSS_256(mem)
   before
     8a30012d58e46821.24acc31217370a01.1bbd8740b729670d.d5a4318d637e1428
     f22bf5581d8dd44e.76efe565019d12b4.ee9d86507fd53ff0.c69d85db4ba1374e
@@ -24212,12 +24212,12 @@
     a52194d3f1322106
   after
     8a30012d58e46821.24acc31217370a01.1bbd8740b729670d.d5a4318d637e1428
-    0000000000000000.0000000000000000.b729670dd5a4318d.637e1428b729670d
+    637e1428637e1428.637e1428637e1428.637e1428637e1428.637e1428637e1428
     e93672aaf27934ef.517fa09363b31040.22660f5108feee71.d17d348e1d6ef338
     4b1df30df2b24531.0fa8f108d9043f51.93e59e2f6faf2fbd.52903a12766f8291
     a52194d3f1322106
 
-VBLENDPS_128_1of3(reg)
+VPALIGNR_128_1of3(reg)
   before
     267e3c3d2b430b43.f4acf46f3946c340.0eb5d230001cdd95.1de7b0d4cff4bf00
     31f130bcbf2d7df3.bfaef2bbe4406a47.a8f44177748823b6.9b36c02d44da5a65
@@ -24225,12 +24225,12 @@
     554ceaaa67bce95e.303fd1c1d49821ef.2133b613b0899e40.e8edcaace0b6a048
     6eeebda93ec5c31d
   after
-    0000000000000000.0000000000000000.a8f44177748823b6.9b36c02d44da5a65
+    0000000000000000.0000000000000000.3baf394ad0d35060.eb9f4a26ec6cbb19
     31f130bcbf2d7df3.bfaef2bbe4406a47.a8f44177748823b6.9b36c02d44da5a65
     22c76bbd497cb3c3.8af167dd0eadf573.3baf394ad0d35060.eb9f4a26ec6cbb19
     554ceaaa67bce95e.303fd1c1d49821ef.2133b613b0899e40.e8edcaace0b6a048
     6eeebda93ec5c31d
-VBLENDPS_128_1of3(mem)
+VPALIGNR_128_1of3(mem)
   before
     586c9d0b22a4e0c5.25cca7f1b27a5a71.8d65ab53520eaae8.b7ccb53fb1374a02
     8435e8bda75fb56b.f093a0fcc84143a7.7c2f727fa2194c89.5ac6313b6e689051
@@ -24240,11 +24240,11 @@
   after
     586c9d0b22a4e0c5.25cca7f1b27a5a71.8d65ab53520eaae8.b7ccb53fb1374a02
     8435e8bda75fb56b.f093a0fcc84143a7.7c2f727fa2194c89.5ac6313b6e689051
-    0000000000000000.0000000000000000.7c2f727fa2194c89.b7ccb53fb1374a02
+    0000000000000000.0000000000000000.6890518d65ab5352.0eaae8b7ccb53fb1
     0ed3adc0059b7263.e4253313c31c6d2f.84deb3562e24c976.320c904f8e84d948
     20f06b4029875448
 
-VBLENDPS_128_1of3(reg)
+VPALIGNR_128_1of3(reg)
   before
     8b65b3b0f03d5886.25401fea1733d20e.c488c6f5e14725d9.555b26d8a13a1d19
     cdb7650b7f3323ad.ec28ea1539d8d966.0f62834d39ab4556.29ac75a558187915
@@ -24252,12 +24252,12 @@
     4922f432680cf868.fe9581192477ccd3.52ab700d0851ac7a.49fa99cc00553cc7
     4d8f64ff29cd1bd5
   after
-    0000000000000000.0000000000000000.0f62834d39ab4556.29ac75a558187915
+    0000000000000000.0000000000000000.20ff688667d50952.db9d1da76ec79a96
     cdb7650b7f3323ad.ec28ea1539d8d966.0f62834d39ab4556.29ac75a558187915
     43327cbd74f4ef6a.41568c2b8a95439a.20ff688667d50952.db9d1da76ec79a96
     4922f432680cf868.fe9581192477ccd3.52ab700d0851ac7a.49fa99cc00553cc7
     4d8f64ff29cd1bd5
-VBLENDPS_128_1of3(mem)
+VPALIGNR_128_1of3(mem)
   before
     c528fd2c053bf2eb.3bd2cad7f9087c54.01b243cb23893040.03b1984cb7a96b7a
     8b90dd3fb1ac7e36.7590f916c373b5da.2479502ea4d72a0b.8d5fdab0116b82fd
@@ -24267,11 +24267,11 @@
   after
     c528fd2c053bf2eb.3bd2cad7f9087c54.01b243cb23893040.03b1984cb7a96b7a
     8b90dd3fb1ac7e36.7590f916c373b5da.2479502ea4d72a0b.8d5fdab0116b82fd
-    0000000000000000.0000000000000000.2479502ea4d72a0b.03b1984cb7a96b7a
+    0000000000000000.0000000000000000.6b82fd01b243cb23.89304003b1984cb7
     750066c7e8c5a419.316151166fc73962.3e3538b39a58d26d.a0dea198345ba73f
     e1481df435a12d55
 
-VBLENDPS_128_1of3(reg)
+VPALIGNR_128_1of3(reg)
   before
     6b89a5245180fb9e.50a00715aa85b60a.6b0d74af8ac9fbbc.ecc10bae47a3f95c
     9cec339623854cc8.ea40e0f8ac776ddf.5df5df924d696360.2b281909e55ba659
@@ -24279,12 +24279,12 @@
     5e4c56ed5b2e6a69.ccaf2b31de22b9e7.d9ad82eb3db81435.cdb2d38f673f8430
     e76e779282832d61
   after
-    0000000000000000.0000000000000000.5df5df924d696360.2b281909e55ba659
+    0000000000000000.0000000000000000.6367902d5535adfa.d834ddb0918a9591
     9cec339623854cc8.ea40e0f8ac776ddf.5df5df924d696360.2b281909e55ba659
     cebfc5b5473b5d7c.1fac6e5e09a785c5.6367902d5535adfa.d834ddb0918a9591
     5e4c56ed5b2e6a69.ccaf2b31de22b9e7.d9ad82eb3db81435.cdb2d38f673f8430
     e76e779282832d61
-VBLENDPS_128_1of3(mem)
+VPALIGNR_128_1of3(mem)
   before
     023446a5ff644d51.a9e0e2aaf8ebaf39.cb17955f46f3c672.1a15b138a27fd6be
     facfbab5f9eda02b.09c76658bcfd6799.f9ae27d35e276892.84e91a801f142d40
@@ -24294,11 +24294,11 @@
   after
     023446a5ff644d51.a9e0e2aaf8ebaf39.cb17955f46f3c672.1a15b138a27fd6be
     facfbab5f9eda02b.09c76658bcfd6799.f9ae27d35e276892.84e91a801f142d40
-    0000000000000000.0000000000000000.f9ae27d35e276892.1a15b138a27fd6be
+    0000000000000000.0000000000000000.142d40cb17955f46.f3c6721a15b138a2
     f2b88678d529cd50.7bbe4338275123b7.529cb43c0ce55a3f.400886b2d3de8ce2
     49ea8273422a0c59
 
-VBLENDPS_128_2of3(reg)
+VPALIGNR_128_2of3(reg)
   before
     eb6aa7e039751279.a99dd603eff320f2.4566944207ab9ecd.358ba70bda882224
     81d2f264554cd9f0.ad88bb3bf796952f.9690ccec7d8a7e23.b7d9b2cfc8bd6e4e
@@ -24306,12 +24306,12 @@
     f88de66069cb9e8d.0ba0395f3f94d828.389de3d59c09573e.08c600e9710d8620
     8ffc3c186541c920
   after
-    0000000000000000.0000000000000000.9690ccec257bfc65.b4545175c8bd6e4e
+    0000000000000000.0000000000000000.b2cfc8bd6e4ec889.e8a4257bfc65b454
     81d2f264554cd9f0.ad88bb3bf796952f.9690ccec7d8a7e23.b7d9b2cfc8bd6e4e
     666f5d6a313a9f68.da45b30b081de932.c889e8a4257bfc65.b4545175f190fce9
     f88de66069cb9e8d.0ba0395f3f94d828.389de3d59c09573e.08c600e9710d8620
     8ffc3c186541c920
-VBLENDPS_128_2of3(mem)
+VPALIGNR_128_2of3(mem)
   before
     25c280ece9388014.917889b19a8b120c.1e64c923b7071e3d.4218b9ea7dc0c95b
     a6e4485318fc6829.8f7c40c960073991.ee5fe0438d83769c.42466651652d9067
@@ -24321,11 +24321,11 @@
   after
     25c280ece9388014.917889b19a8b120c.1e64c923b7071e3d.4218b9ea7dc0c95b
     a6e4485318fc6829.8f7c40c960073991.ee5fe0438d83769c.42466651652d9067
-    0000000000000000.0000000000000000.1e64c9238d83769c.424666517dc0c95b
+    0000000000000000.0000000000000000.9c42466651652d90.671e64c923b7071e
     d86b5586e821bb65.26fedefe18618b5b.35258f47c1c44fea.94ea36c2b85707ff
     9ef851a55b2c30e2
 
-VBLENDPS_128_2of3(reg)
+VPALIGNR_128_2of3(reg)
   before
     0dea338874e69d65.4268912bc2989de4.7714bdf343572ef8.6489200357a14831
     3f09d8d8a0118a33.07f14212b60ea033.9c73a2607239744c.bf5227ccbbb74373
@@ -24333,12 +24333,12 @@
     59065d70a0ecd262.11d7f1576225f9f4.d33c6a4e4eedd3c2.6e4789315aba3295
     780bdba6cec19dcf
   after
-    0000000000000000.0000000000000000.9c73a26042919700.244e218cbbb74373
+    0000000000000000.0000000000000000.27ccbbb74373f267.87af42919700244e
     3f09d8d8a0118a33.07f14212b60ea033.9c73a2607239744c.bf5227ccbbb74373
     8fa43d027b3a32f9.03d2e327e38f807f.f26787af42919700.244e218c0810fddb
     59065d70a0ecd262.11d7f1576225f9f4.d33c6a4e4eedd3c2.6e4789315aba3295
     780bdba6cec19dcf
-VBLENDPS_128_2of3(mem)
+VPALIGNR_128_2of3(mem)
   before
     206493d78030fbb3.f97b3490abb4a61c.0fcce68c52dec6bd.9c3d46a733d9663e
     411f2db08b13086d.ca4ebecd391de9d0.d87c40b3ccc6a406.aab817288cdf8a20
@@ -24348,11 +24348,11 @@
   after
     206493d78030fbb3.f97b3490abb4a61c.0fcce68c52dec6bd.9c3d46a733d9663e
     411f2db08b13086d.ca4ebecd391de9d0.d87c40b3ccc6a406.aab817288cdf8a20
-    0000000000000000.0000000000000000.0fcce68cccc6a406.aab8172833d9663e
+    0000000000000000.0000000000000000.06aab817288cdf8a.200fcce68c52dec6
     5deaf90a1d661e16.7441dc4e4d02b0dd.3a411088d45082cc.0047894f0c6f78c3
     01f421cd6b0fb9de
 
-VBLENDPS_128_2of3(reg)
+VPALIGNR_128_2of3(reg)
   before
     b64a9f22aefb7c0d.10932263dcee9f5c.03f9686a0a97aa8c.8bed7f0e990afa9f
     7b95ffba72bffdff.adcd1d14651abf29.35409753bafd05e7.188541365a2373a3
@@ -24360,12 +24360,12 @@
     a5385164eafc27d6.11277a2f4390ca07.eeaacf3d616ec950.52a8b31c3e9f57ed
     b7cc5bb2991b3a8b
   after
-    0000000000000000.0000000000000000.35409753f8c1fb9a.bbd5d4ec5a2373a3
+    0000000000000000.0000000000000000.41365a2373a36561.6575f8c1fb9abbd5
     7b95ffba72bffdff.adcd1d14651abf29.35409753bafd05e7.188541365a2373a3
     ac203b0152e6775e.0e65670ad4f739a9.65616575f8c1fb9a.bbd5d4ec32a6a904
     a5385164eafc27d6.11277a2f4390ca07.eeaacf3d616ec950.52a8b31c3e9f57ed
     b7cc5bb2991b3a8b
-VBLENDPS_128_2of3(mem)
+VPALIGNR_128_2of3(mem)
   before
     c70b469a5f250e09.c22a3b4dd78d4915.90dfd471d1f22e6f.2e65d0159090aab6
     5f32f2c0adca8e94.5f40f82ab42619c4.6859f0ba9728210f.7fdf646a22b4dc78
@@ -24375,11 +24375,11 @@
   after
     c70b469a5f250e09.c22a3b4dd78d4915.90dfd471d1f22e6f.2e65d0159090aab6
     5f32f2c0adca8e94.5f40f82ab42619c4.6859f0ba9728210f.7fdf646a22b4dc78
-    0000000000000000.0000000000000000.90dfd4719728210f.7fdf646a9090aab6
+    0000000000000000.0000000000000000.0f7fdf646a22b4dc.7890dfd471d1f22e
     92687a774f128580.890ad36cb19db129.94c25f164140a2a1.c840353ddd2f1dbd
     77bf6b923e9fa69a
 
-VBLENDPS_128_3of3(reg)
+VPALIGNR_128_3of3(reg)
   before
     a92c241471406e81.e60e4fdfdbcd7439.ce57ebaa0894f235.9f49aa005c3ba9ec
     b8d45c2f139eb221.32cdd3365f53ffaf.03f8c48bbfc2d163.73c2a7a2213a2e1e
@@ -24387,12 +24387,12 @@
     e1063ae013c39d37.1dc1dd5dbdeedc7f.ac6aaae6bff557d5.e7baa8be1676a5e5
     3ed0a4117fca0fd2
   after
-    0000000000000000.0000000000000000.843a5a7b73b4895f.73c2a7a2213a2e1e
+    0000000000000000.0000000000000000.bfc2d16373c2a7a2.213a2e1e843a5a7b
     b8d45c2f139eb221.32cdd3365f53ffaf.03f8c48bbfc2d163.73c2a7a2213a2e1e
     01040f4fc046ad24.506f8466f7afe30d.843a5a7b73b4895f.edf9d2e8ab4aee62
     e1063ae013c39d37.1dc1dd5dbdeedc7f.ac6aaae6bff557d5.e7baa8be1676a5e5
     3ed0a4117fca0fd2
-VBLENDPS_128_3of3(mem)
+VPALIGNR_128_3of3(mem)
   before
     ce0941cb0252e756.b227d74ea8a1bc05.75905b06d01ba632.d9d2ae394011776f
     732ffedaba1bea9d.d1b2e4051c6d473b.34a5784d4942fc52.66be64de919424dc
@@ -24402,11 +24402,11 @@
   after
     ce0941cb0252e756.b227d74ea8a1bc05.75905b06d01ba632.d9d2ae394011776f
     732ffedaba1bea9d.d1b2e4051c6d473b.34a5784d4942fc52.66be64de919424dc
-    0000000000000000.0000000000000000.75905b06d01ba632.d9d2ae394011776f
+    0000000000000000.0000000000000000.a5784d4942fc5266.be64de919424dc75
     6c75c1a33a9e6122.693a3cff10fc8f8d.57d98465e3b03e88.0f56d3d2150218da
     e49a85f87f03d7c3
 
-VBLENDPS_128_3of3(reg)
+VPALIGNR_128_3of3(reg)
   before
     8892d8222a9c132e.782dbf363a704cb8.9ace7e1ac7d8c502.738e6a0f3b0ea3f5
     598bc8bbb25809c7.0903cccde0b252c1.8afe202ecdd1578e.66bbe0066b97847f
@@ -24414,12 +24414,12 @@
     eeaf6feac66b1230.2a3801b78cb89edb.125c71f1344b7d9d.41ad6e8fc057ac9a
     e10a7df91ea66b82
   after
-    0000000000000000.0000000000000000.93131da7bd7380de.66bbe0066b97847f
+    0000000000000000.0000000000000000.cdd1578e66bbe006.6b97847f93131da7
     598bc8bbb25809c7.0903cccde0b252c1.8afe202ecdd1578e.66bbe0066b97847f
     b2d1512fb2c4f539.fbc2645447712f69.93131da7bd7380de.0c2c63378e569e52
     eeaf6feac66b1230.2a3801b78cb89edb.125c71f1344b7d9d.41ad6e8fc057ac9a
     e10a7df91ea66b82
-VBLENDPS_128_3of3(mem)
+VPALIGNR_128_3of3(mem)
   before
     c80f0c60c3509736.6b731f588bd99d5a.722f21e2ca935c43.63241978cde48a78
     d18797b2cc61ece3.83675be59d9bd260.ae743ec11e0f25cf.e1b610a825cbe31b
@@ -24429,11 +24429,11 @@
   after
     c80f0c60c3509736.6b731f588bd99d5a.722f21e2ca935c43.63241978cde48a78
     d18797b2cc61ece3.83675be59d9bd260.ae743ec11e0f25cf.e1b610a825cbe31b
-    0000000000000000.0000000000000000.722f21e2ca935c43.63241978cde48a78
+    0000000000000000.0000000000000000.743ec11e0f25cfe1.b610a825cbe31b72
     be0493c479e4ffd7.f8136d0d154829b7.7717654c7517c7fd.d96cdbb37fb06767
     0a27a767bac60a68
 
-VBLENDPS_128_3of3(reg)
+VPALIGNR_128_3of3(reg)
   before
     d9ddb373245aeae1.59a0fb5c54703676.0c62397fb44cc35f.bb0e65cfb2bc18f8
     a2d9f94558f7417d.86e0508e039286be.2c1183c10fd3f794.638254b7733163c6
@@ -24441,12 +24441,12 @@
     91d729e78f7d46d1.0b7bad714bc85ff7.01c37e616b9b1b57.5415ec63f7bcdb89
     53cb8efff1ea7fd7
   after
-    0000000000000000.0000000000000000.b56e463dc3690003.638254b7733163c6
+    0000000000000000.0000000000000000.0fd3f794638254b7.733163c6b56e463d
     a2d9f94558f7417d.86e0508e039286be.2c1183c10fd3f794.638254b7733163c6
     c1697747f22a4cea.238f0c47a156aada.b56e463dc3690003.4d41adefd6836692
     91d729e78f7d46d1.0b7bad714bc85ff7.01c37e616b9b1b57.5415ec63f7bcdb89
     53cb8efff1ea7fd7
-VBLENDPS_128_3of3(mem)
+VPALIGNR_128_3of3(mem)
   before
     282f0dafe0190da7.70700990cb7f6ce1.196eaef91cf56140.6d5e2798a4f4843d
     ad0ce75fe1534226.b98015ae41b9fac3.2b358bcc30e86be2.55893e4e09007761
@@ -24456,11 +24456,11 @@
   after
     282f0dafe0190da7.70700990cb7f6ce1.196eaef91cf56140.6d5e2798a4f4843d
     ad0ce75fe1534226.b98015ae41b9fac3.2b358bcc30e86be2.55893e4e09007761
-    0000000000000000.0000000000000000.196eaef91cf56140.6d5e2798a4f4843d
+    0000000000000000.0000000000000000.358bcc30e86be255.893e4e0900776119
     3b65996f871e91df.f8359ef94c0a3eb4.c76fcaff94518adf.0ac2a2e7c863e911
     8e67e9a25bd1e1f5
 
-VBLENDPD_128_1of2(reg)
+VMOVSD_REG_XMM(reg)
   before
     fece8c8c8a2352c7.fc786aa864c62371.a67213ff19396b1a.097a24381bdf1793
     b6418912f1e47a33.dd358590c3aa4b62.2f55a42991d1f003.bf894a6b56649c4f
@@ -24468,12 +24468,12 @@
     6e7e7e9edae4d987.73dd892175574f10.3e40069df06df010.f2e1eb6f55808192
     29c45e19522f5870
   after
-    0000000000000000.0000000000000000.2f55a42991d1f003.bf894a6b56649c4f
-    b6418912f1e47a33.dd358590c3aa4b62.2f55a42991d1f003.bf894a6b56649c4f
+    fece8c8c8a2352c7.fc786aa864c62371.a67213ff19396b1a.097a24381bdf1793
+    0000000000000000.0000000000000000.a67213ff19396b1a.f2e1eb6f55808192
     120ddb9e2da093e4.bc686615bfd6c6de.ed2b4be44f5e081c.c367b98460ead640
     6e7e7e9edae4d987.73dd892175574f10.3e40069df06df010.f2e1eb6f55808192
     29c45e19522f5870
-VBLENDPD_128_1of2(mem)
+VMOVSD_REG_XMM(mem)
   before
     42da8d6c72051806.26e06e7c933b8ac7.df5f6aa20038a425.7ce0d0be0f89e48d
     1aeff455d20d7d82.967fa8a6f432e051.ddbc86837d867f49.0557a6b5493e203c
@@ -24483,11 +24483,11 @@
   after
     42da8d6c72051806.26e06e7c933b8ac7.df5f6aa20038a425.7ce0d0be0f89e48d
     1aeff455d20d7d82.967fa8a6f432e051.ddbc86837d867f49.0557a6b5493e203c
-    0000000000000000.0000000000000000.ddbc86837d867f49.7ce0d0be0f89e48d
+    8dd110c18e54430d.19a726879a5417d1.47be58b0074c9ca7.33f182ed3919e0cb
     784a5b9ac0e425d6.0da3e68b202d6df2.fa325c15ba96b96b.64f962d27ba55fe6
     f2bd41d0ac6eda39
 
-VBLENDPD_128_1of2(reg)
+VMOVSD_REG_XMM(reg)
   before
     3a871c5368018c6f.b52853ce87cce007.cdc0e31e23491c61.d2e40e9eb37090c3
     98a4edc74ae9b334.21357348fc1530cc.b54a1aac3e3561c9.aba0ea370ee7ded8
@@ -24495,12 +24495,12 @@
     07076633f1e94a1f.f60f1cbe66ff7ec5.6cd5226a2eab9c36.d165124a57dacef0
     d506559c7e6ee849
   after
-    0000000000000000.0000000000000000.b54a1aac3e3561c9.aba0ea370ee7ded8
-    98a4edc74ae9b334.21357348fc1530cc.b54a1aac3e3561c9.aba0ea370ee7ded8
+    3a871c5368018c6f.b52853ce87cce007.cdc0e31e23491c61.d2e40e9eb37090c3
+    0000000000000000.0000000000000000.cdc0e31e23491c61.d165124a57dacef0
     6960b298eeb28936.983e37f43ecdd153.218d85a10e7c78d7.61316dcde6075ed9
     07076633f1e94a1f.f60f1cbe66ff7ec5.6cd5226a2eab9c36.d165124a57dacef0
     d506559c7e6ee849
-VBLENDPD_128_1of2(mem)
+VMOVSD_REG_XMM(mem)
   before
     4ae1b2ad77ce6912.cfe40502ef19349b.17749d9293b8f451.f46eec713b4d0a94
     0cc2a66b5c070c74.1d448b7382ce8157.d738365cde03ee21.14a3e024d0eefe9a
@@ -24510,11 +24510,11 @@
   after
     4ae1b2ad77ce6912.cfe40502ef19349b.17749d9293b8f451.f46eec713b4d0a94
     0cc2a66b5c070c74.1d448b7382ce8157.d738365cde03ee21.14a3e024d0eefe9a
-    0000000000000000.0000000000000000.d738365cde03ee21.f46eec713b4d0a94
+    f775acc14c248e9e.4d74f5f049956eff.1229630865ec2a61.27c1f8ed8a1bb4f7
     e7c6409b6131abba.bbbe3ee7def9373e.a411a0824480623f.8b15323a045e6754
     9ae98976da465460
 
-VBLENDPD_128_1of2(reg)
+VMOVSD_REG_XMM(reg)
   before
     b28af90da95cb7c5.b780dee5b73b1ff4.c36f62c3dd8617c1.69bd6ab796ca53e4
     2d437e6b0d2ecb30.4571028b6b4da579.c1d35df0e3c94b33.3df93c9177d6b87f
@@ -24522,12 +24522,12 @@
     c031b92c0134f9c6.0823ce9b5abada14.0fe3c9ed719f9e97.8250e8e95966d141
     ab04ba3e9101fdc1
   after
-    0000000000000000.0000000000000000.c1d35df0e3c94b33.3df93c9177d6b87f
-    2d437e6b0d2ecb30.4571028b6b4da579.c1d35df0e3c94b33.3df93c9177d6b87f
+    b28af90da95cb7c5.b780dee5b73b1ff4.c36f62c3dd8617c1.69bd6ab796ca53e4
+    0000000000000000.0000000000000000.c36f62c3dd8617c1.8250e8e95966d141
     696215fca147cd4c.6c6329799873fa75.11352cda8b4d0f41.fc9192fe04b14e3a
     c031b92c0134f9c6.0823ce9b5abada14.0fe3c9ed719f9e97.8250e8e95966d141
     ab04ba3e9101fdc1
-VBLENDPD_128_1of2(mem)
+VMOVSD_REG_XMM(mem)
   before
     527785e9c88f8de6.90fd6667ca808b49.f57d6ddecf2d0180.17273295334936e0
     5576c4d61b1b3edc.3312181997b7be82.0f3c822c10d82ae8.854e623f6ada10c8
@@ -24537,11 +24537,11 @@
   after
     527785e9c88f8de6.90fd6667ca808b49.f57d6ddecf2d0180.17273295334936e0
     5576c4d61b1b3edc.3312181997b7be82.0f3c822c10d82ae8.854e623f6ada10c8
-    0000000000000000.0000000000000000.0f3c822c10d82ae8.17273295334936e0
+    8fcdf3f1a5b1cccd.06bccbaf0566cf1d.312e8a733bc81276.b5a45655b4db6bfd
     db488e26835ef3e8.66477c93af18fac5.391dff9d6c087557.03750845adda8229
     cb0d7679f06290f8
 
-VBLENDPD_128_2of2(reg)
+VMOVSS_REG_XMM(reg)
   before
     68b79b5f1900d117.17b31261d02d6e57.adff263332597a27.02d75f98bea40eb6
     38c07362c53e8332.1ed9fa8ea92afa47.382fc5fa29b68cef.6726264f4da99ac0
@@ -24549,12 +24549,12 @@
     dd202d6e15d0250a.fc8ae6706de03458.8b2bd3ade5f1565e.79b6d5a1951b7b84
     de8eb61484a14795
   after
-    0000000000000000.0000000000000000.6324555431ba6cc8.6726264f4da99ac0
-    38c07362c53e8332.1ed9fa8ea92afa47.382fc5fa29b68cef.6726264f4da99ac0
+    68b79b5f1900d117.17b31261d02d6e57.adff263332597a27.02d75f98bea40eb6
+    0000000000000000.0000000000000000.adff263332597a27.02d75f98951b7b84
     9675fbed90abe0f5.cb88c29a296253e3.6324555431ba6cc8.46d7ceae3622d5a1
     dd202d6e15d0250a.fc8ae6706de03458.8b2bd3ade5f1565e.79b6d5a1951b7b84
     de8eb61484a14795
-VBLENDPD_128_2of2(mem)
+VMOVSS_REG_XMM(mem)
   before
     4f2dedf322bff602.6b0e0750f03b8e20.8bace3fb90b05ad1.0a8e3a71e2e8855f
     aa5df62a898244f5.9b8a8400be7756e1.56ba3329aedf817c.3d99860cc32a3674
@@ -24564,11 +24564,11 @@
   after
     4f2dedf322bff602.6b0e0750f03b8e20.8bace3fb90b05ad1.0a8e3a71e2e8855f
     aa5df62a898244f5.9b8a8400be7756e1.56ba3329aedf817c.3d99860cc32a3674
-    0000000000000000.0000000000000000.8bace3fb90b05ad1.0a8e3a71e2e8855f
+    c9eb4da6d5f4ec9a.c8e2a1e81a11bafa.378054e5e4786582.809ab3ea2444a54c
     8aa36f512324ab1e.50605875a194f616.0cc9c11b4e88c112.2fdcbd77a2c00e91
     a6aaa120d92cacef
 
-VBLENDPD_128_2of2(reg)
+VMOVSS_REG_XMM(reg)
   before
     41515a4f6414bc14.c751d7198e1b3dad.8d52a714ee8c46e2.af63f6b7071a5255
     5c1de472df0379a9.5dc101e833e75e72.dd02892f9e86e509.fd1870a52b3ad47a
@@ -24576,12 +24576,12 @@
     82545c401826eeda.05168c50982c3b50.22cff68d95ad031b.0b06202727559915
     82d74e94366855e3
   after
-    0000000000000000.0000000000000000.9abdfa344c0d1039.fd1870a52b3ad47a
-    5c1de472df0379a9.5dc101e833e75e72.dd02892f9e86e509.fd1870a52b3ad47a
+    41515a4f6414bc14.c751d7198e1b3dad.8d52a714ee8c46e2.af63f6b7071a5255
+    0000000000000000.0000000000000000.8d52a714ee8c46e2.af63f6b727559915
     535a3bf3e785215d.29be6aac2d93c99a.9abdfa344c0d1039.d3b5aad1d7f402ab
     82545c401826eeda.05168c50982c3b50.22cff68d95ad031b.0b06202727559915
     82d74e94366855e3
-VBLENDPD_128_2of2(mem)
+VMOVSS_REG_XMM(mem)
   before
     15f4b002203af242.455641c40c731dcc.ce93e5c092bc70c1.cf837aa814f2f95d
     9e28c35f02d62b5d.f8aee8eb62f7e9e0.6102f0e834522319.fe2781f065692fab
@@ -24591,11 +24591,11 @@
   after
     15f4b002203af242.455641c40c731dcc.ce93e5c092bc70c1.cf837aa814f2f95d
     9e28c35f02d62b5d.f8aee8eb62f7e9e0.6102f0e834522319.fe2781f065692fab
-    0000000000000000.0000000000000000.ce93e5c092bc70c1.cf837aa814f2f95d
+    fa400296f748bd61.f6a64c21b43f8fc2.982f29b49cf71183.0c0507d1259ee1b1
     0509e9921c9c647a.9d8b6ad29ed64b1d.50e60d11e6b9f62c.536a08b7f01b4b1a
     30a2810e616ea892
 
-VBLENDPD_128_2of2(reg)
+VMOVSS_REG_XMM(reg)
   before
     fff96d43142335c7.9b4df4418cdfdcd3.48a93d6abc48599e.65f216e92da38e3f
     1dbbc7c0a6c52e63.98d8a08e641ce099.534cc056ac21f5f1.b321c2298dc294e9
@@ -24603,12 +24603,12 @@
     b1afbb46d5005381.37f8c7b2b9b67e1a.f850ccd56b3ac4bb.6a13f1920accddb1
     8b6f6b935fd09827
   after
-    0000000000000000.0000000000000000.19bff10007ee5ac1.b321c2298dc294e9
-    1dbbc7c0a6c52e63.98d8a08e641ce099.534cc056ac21f5f1.b321c2298dc294e9
+    fff96d43142335c7.9b4df4418cdfdcd3.48a93d6abc48599e.65f216e92da38e3f
+    0000000000000000.0000000000000000.48a93d6abc48599e.65f216e90accddb1
     e4338ef3b3e0cf12.d8786765bf602df7.19bff10007ee5ac1.163d8cbe2321c556
     b1afbb46d5005381.37f8c7b2b9b67e1a.f850ccd56b3ac4bb.6a13f1920accddb1
     8b6f6b935fd09827
-VBLENDPD_128_2of2(mem)
+VMOVSS_REG_XMM(mem)
   before
     551d78ac3d37b1e3.e0794c27abb2f75c.91233c626f2a912e.4b494b427492718a
     a4e993c9c110e512.cdde3b01cf81f64e.c2c6405ffdc9205e.6df76cb2bd819bdb
@@ -24618,11 +24618,11 @@
   after
     551d78ac3d37b1e3.e0794c27abb2f75c.91233c626f2a912e.4b494b427492718a
     a4e993c9c110e512.cdde3b01cf81f64e.c2c6405ffdc9205e.6df76cb2bd819bdb
-    0000000000000000.0000000000000000.91233c626f2a912e.4b494b427492718a
+    549e38d60764efe0.d42a863fddf98e04.a6ad51977e9ee8d7.bca62a91e3937f59
     410ae4bf29418d78.51a9294f72a7f929.19a4e9f40eb5a4c4.92a2814a815559b2
     4d376d4b3352648f
 
-VBLENDPD_256_1of3(reg)
+VMOVLPD_128_M64_XMM_XMM(reg)
   before
     47b1ebff9616de9f.47f7117045b37907.a0a61e9c2916746a.f7778664ca1b1152
     de5bf6d3452d008b.42323dd577c470b8.1d6f63929ed33a73.1cf2a4d1cedbebac
@@ -24630,12 +24630,12 @@
     4e72a386fa8733ae.86c1806c8bf96e33.1190ca2a35639a8a.aa0f4f571b9ad577
     cc49d5479db15d40
   after
-    de5bf6d3452d008b.42323dd577c470b8.1d6f63929ed33a73.1cf2a4d1cedbebac
+    47b1ebff9616de9f.47f7117045b37907.a0a61e9c2916746a.f7778664ca1b1152
     de5bf6d3452d008b.42323dd577c470b8.1d6f63929ed33a73.1cf2a4d1cedbebac
     6c828a31dd240902.0d87e3dbda822db8.244ef39e6f6888ef.64e0bd293501ee00
     4e72a386fa8733ae.86c1806c8bf96e33.1190ca2a35639a8a.aa0f4f571b9ad577
     cc49d5479db15d40
-VBLENDPD_256_1of3(mem)
+VMOVLPD_128_M64_XMM_XMM(mem)
   before
     a55bcbe5d6524285.e1773d3f36e0bb3c.88ae8e76a533ed54.4081e4a38e50acf2
     1011ad1de38a4072.7fdd55c630bddd57.ee188be3443e6648.0d6d3e7616baf9d1
@@ -24645,11 +24645,11 @@
   after
     a55bcbe5d6524285.e1773d3f36e0bb3c.88ae8e76a533ed54.4081e4a38e50acf2
     1011ad1de38a4072.7fdd55c630bddd57.ee188be3443e6648.0d6d3e7616baf9d1
-    1011ad1de38a4072.7fdd55c630bddd57.88ae8e76a533ed54.4081e4a38e50acf2
+    0000000000000000.0000000000000000.ee188be3443e6648.4081e4a38e50acf2
     1198270ce7ec75f7.4ffbecf3c831dee6.5b973f9b84f63a57.f0659fd6203537a5
     bf0a9e3cdb5fa0f3
 
-VBLENDPD_256_1of3(reg)
+VMOVLPD_128_M64_XMM_XMM(reg)
   before
     9cd9ccab35363468.5d01b69b162f25e6.3a4b636f9ee035b2.1843eebd5cba0cca
     e21f268fc94730b1.ad3e21738938dd2e.a02c486ba24315bc.ab9d7cf3297ec8c0
@@ -24657,12 +24657,12 @@
     1d404b6610444f6e.c5647cb3a8cd5878.50d149909d526438.bf8a224b1538f1e4
     f8b532456a45d66a
   after
-    e21f268fc94730b1.ad3e21738938dd2e.a02c486ba24315bc.ab9d7cf3297ec8c0
+    9cd9ccab35363468.5d01b69b162f25e6.3a4b636f9ee035b2.1843eebd5cba0cca
     e21f268fc94730b1.ad3e21738938dd2e.a02c486ba24315bc.ab9d7cf3297ec8c0
     ef28a754331dd07a.db1be4825b145afb.deea96526de5bcaf.ee706429084f2b65
     1d404b6610444f6e.c5647cb3a8cd5878.50d149909d526438.bf8a224b1538f1e4
     f8b532456a45d66a
-VBLENDPD_256_1of3(mem)
+VMOVLPD_128_M64_XMM_XMM(mem)
   before
     77be110426839623.cab20e31fb49ea3a.45e564f18e7193d1.522d5d92ce164902
     1671397262fdec3a.51cced2291b7dd89.396a182a260cc634.4049cec29bbea9ba
@@ -24672,11 +24672,11 @@
   after
     77be110426839623.cab20e31fb49ea3a.45e564f18e7193d1.522d5d92ce164902
     1671397262fdec3a.51cced2291b7dd89.396a182a260cc634.4049cec29bbea9ba
-    1671397262fdec3a.51cced2291b7dd89.45e564f18e7193d1.522d5d92ce164902
+    0000000000000000.0000000000000000.396a182a260cc634.522d5d92ce164902
     28055a10d0d74c34.5c23eb212cffba62.e8aed53ae25407c2.50f5b9607ae7c5a3
     2a1c2aa5c581fa2c
 
-VBLENDPD_256_1of3(reg)
+VMOVLPD_128_M64_XMM_XMM(reg)
   before
     6034e8ca1c2e9852.527d4916394ecf6f.98f9040969f01c44.5d07d6ea3c198c46
     4e89f03a1b7bdcc2.0ed0727d9431d8b8.1ea627c6c17cc65a.b4939343bb05fa83
@@ -24684,12 +24684,12 @@
     c219caab8322452f.a732641b8e6d6e27.79b4806f2f8ee0d0.7c7631a4928081d6
     a4660b8423271144
   after
-    4e89f03a1b7bdcc2.0ed0727d9431d8b8.1ea627c6c17cc65a.b4939343bb05fa83
+    6034e8ca1c2e9852.527d4916394ecf6f.98f9040969f01c44.5d07d6ea3c198c46
     4e89f03a1b7bdcc2.0ed0727d9431d8b8.1ea627c6c17cc65a.b4939343bb05fa83
     50663c615ff20228.36c85230fc8d233c.4b7552c4cf2cf34f.ca1e883279230da4
     c219caab8322452f.a732641b8e6d6e27.79b4806f2f8ee0d0.7c7631a4928081d6
     a4660b8423271144
-VBLENDPD_256_1of3(mem)
+VMOVLPD_128_M64_XMM_XMM(mem)
   before
     1fb991bd47247a1b.00ec96842494e384.3dda252a65de73a4.05adad337e2ec989
     c93c3f3d1b837887.652c9a58ddd616d2.d48c0f4a9debefe0.4cadd57c5896ea25
@@ -24699,11 +24699,11 @@
   after
     1fb991bd47247a1b.00ec96842494e384.3dda252a65de73a4.05adad337e2ec989
     c93c3f3d1b837887.652c9a58ddd616d2.d48c0f4a9debefe0.4cadd57c5896ea25
-    c93c3f3d1b837887.652c9a58ddd616d2.3dda252a65de73a4.05adad337e2ec989
+    0000000000000000.0000000000000000.d48c0f4a9debefe0.05adad337e2ec989
     1a0204bf419a22cc.19233ea109f82d0b.763d5368a3093b43.76f2074d1af4c2b8
     12cf09ad3b00f206
 
-VBLENDPD_256_2of3(reg)
+VMOVLPD_128_XMM_M64(reg)
   before
     d9e3f643560649e9.79dd1299cb6846fd.1f71d7efb4f0894e.38d4a440a83383c3
     2579cb790892050b.7717396974c9ee73.bc5d98e7e7e76b3b.6ba50fd77e2a32b1
@@ -24711,12 +24711,12 @@
     bf5e197a9f6996be.c0dcc09c9672bedd.2f3a868a5703b0c1.942524f70fabb389
     426cc657024efecb
   after
-    2579cb790892050b.f07ef41b5ac8d85a.4e317ef73e690e7e.6ba50fd77e2a32b1
+    d9e3f643560649e9.79dd1299cb6846fd.1f71d7efb4f0894e.38d4a440a83383c3
     2579cb790892050b.7717396974c9ee73.bc5d98e7e7e76b3b.6ba50fd77e2a32b1
     53de82bded2f5f19.f07ef41b5ac8d85a.4e317ef73e690e7e.eb7c111b42f8033a
     bf5e197a9f6996be.c0dcc09c9672bedd.2f3a868a5703b0c1.942524f70fabb389
     426cc657024efecb
-VBLENDPD_256_2of3(mem)
+VMOVLPD_128_XMM_M64(mem)
   before
     d11c732736eea02c.c5458b1cbdcce4a7.c3fe17d646d25d29.bdc4ab0bcb408bb3
     1c03a553c89654d7.c1dfd40fe0e5867f.d5b077b786f47069.521be9e838addbfe
@@ -24724,13 +24724,13 @@
     5ba18d6f742fe5bd.0b5bdc98ab66b6ae.96f3401a23b0e578.055fa1636b44ce51
     dbe513d96a87e8b1
   after
-    d11c732736eea02c.c5458b1cbdcce4a7.c3fe17d646d25d29.bdc4ab0bcb408bb3
+    d11c732736eea02c.c5458b1cbdcce4a7.c3fe17d646d25d29.4c8b3c8c3ad5de4f
     1c03a553c89654d7.c1dfd40fe0e5867f.d5b077b786f47069.521be9e838addbfe
-    d11c732736eea02c.c1dfd40fe0e5867f.d5b077b786f47069.bdc4ab0bcb408bb3
+    01ebdac7d352d7f9.0f78f1bfa73fb8f3.d2be5b2971e5b4ca.4c8b3c8c3ad5de4f
     5ba18d6f742fe5bd.0b5bdc98ab66b6ae.96f3401a23b0e578.055fa1636b44ce51
     dbe513d96a87e8b1
 
-VBLENDPD_256_2of3(reg)
+VMOVLPD_128_XMM_M64(reg)
   before
     28678e5bd129671a.06f13a38c6383a50.11d593068ae7bb5e.fd1da075b961bf9e
     4a320e533cb68939.dea65d0ce67991dd.7d331275e04d04ac.e206f9264e05fd69
@@ -24738,12 +24738,12 @@
     78d30e5990c3a048.8473f689fdd53898.f6c553075ffa51d9.9b48833ae753989c
     2639ac7523166d5c
   after
-    4a320e533cb68939.be8e72d9efffa792.abbf53524825cd47.e206f9264e05fd69
+    28678e5bd129671a.06f13a38c6383a50.11d593068ae7bb5e.fd1da075b961bf9e
     4a320e533cb68939.dea65d0ce67991dd.7d331275e04d04ac.e206f9264e05fd69
     9b928f2f48bb88ba.be8e72d9efffa792.abbf53524825cd47.237bc619ffa75c04
     78d30e5990c3a048.8473f689fdd53898.f6c553075ffa51d9.9b48833ae753989c
     2639ac7523166d5c
-VBLENDPD_256_2of3(mem)
+VMOVLPD_128_XMM_M64(mem)
   before
     9f1abeb6cefb9671.3e40863fb15a0f90.0b23640a2d07ff1e.bc930f02c058cd0e
     e4b634ea050ed007.4727f34b460d0f3e.2e6838479ba2b94e.587482ad07cb7d93
@@ -24751,13 +24751,13 @@
     3e533cd785f06664.958e9d8a3ef4b479.bce403a59e41f65d.819d7ec8ba22683c
     c77eff0f5c1e1bb8
   after
-    9f1abeb6cefb9671.3e40863fb15a0f90.0b23640a2d07ff1e.bc930f02c058cd0e
+    9f1abeb6cefb9671.3e40863fb15a0f90.0b23640a2d07ff1e.26b3a876d1e09c14
     e4b634ea050ed007.4727f34b460d0f3e.2e6838479ba2b94e.587482ad07cb7d93
-    9f1abeb6cefb9671.4727f34b460d0f3e.2e6838479ba2b94e.bc930f02c058cd0e
+    cfdb8afbe35cd74a.f0d252ebec67ddfd.cb0fef2c62b12254.26b3a876d1e09c14
     3e533cd785f06664.958e9d8a3ef4b479.bce403a59e41f65d.819d7ec8ba22683c
     c77eff0f5c1e1bb8
 
-VBLENDPD_256_2of3(reg)
+VMOVLPD_128_XMM_M64(reg)
   before
     53a226b7565ff134.0bebc66806d73a84.92a7d294d941d25f.dfb2f29e6c5cf095
     8055f22c4271285b.146fa59c831b0fd4.4369ec7558d9715b.0f473703e711cd27
@@ -24765,12 +24765,12 @@
     3197612e613aa45c.466a4f9adef0abb6.3217bf6d731b2444.04f1b4c256721f0b
     839fe4f382370cb6
   after
-    8055f22c4271285b.33ab545e17cba181.0520e79a5748ce19.0f473703e711cd27
+    53a226b7565ff134.0bebc66806d73a84.92a7d294d941d25f.dfb2f29e6c5cf095
     8055f22c4271285b.146fa59c831b0fd4.4369ec7558d9715b.0f473703e711cd27
     ace25cdbbce1fada.33ab545e17cba181.0520e79a5748ce19.276d4fc12c694940
     3197612e613aa45c.466a4f9adef0abb6.3217bf6d731b2444.04f1b4c256721f0b
     839fe4f382370cb6
-VBLENDPD_256_2of3(mem)
+VMOVLPD_128_XMM_M64(mem)
   before
     7e435a41cbc4cc6a.6dbefe92cc08618e.277a123cf598eaa0.279b715b48ddb088
     d3a992974e261b55.baa42e749ad76f1b.b4a51a3078ce1a6a.40f9f8d1711bae92
@@ -24778,13 +24778,13 @@
     f6ea390a70975480.fbdd385eccab68f9.3d7fe6bf2f153b51.4e6e75013038efa8
     fa1d6494fe2faa0b
   after
-    7e435a41cbc4cc6a.6dbefe92cc08618e.277a123cf598eaa0.279b715b48ddb088
+    7e435a41cbc4cc6a.6dbefe92cc08618e.277a123cf598eaa0.d97b50398a5f5a0e
     d3a992974e261b55.baa42e749ad76f1b.b4a51a3078ce1a6a.40f9f8d1711bae92
-    7e435a41cbc4cc6a.baa42e749ad76f1b.b4a51a3078ce1a6a.279b715b48ddb088
+    5c9c08e02668b4a3.7695ed3e663408b0.c7b8e262829ef641.d97b50398a5f5a0e
     f6ea390a70975480.fbdd385eccab68f9.3d7fe6bf2f153b51.4e6e75013038efa8
     fa1d6494fe2faa0b
 
-VBLENDPD_256_3of3(reg)
+VSHUFPD_128_1of2(reg)
   before
     3bd6185e91d2c7e3.7d5da00047beb717.a7c8093f6ac6cda1.f2c6a2319c3ea5c5
     6ce38dca85ac82dd.cec2b9aec7e99894.d4a15e4dd9137155.c35992a6e426f0ca
@@ -24792,12 +24792,12 @@
     0e2daa3efd36c0e6.3992f1e3357cc7f3.255182a0a0716890.2491004577601735
     6dd07548facb6cf4
   after
-    e992bf47744a16a5.c3e500000d24b425.d4a15e4dd9137155.c35992a6e426f0ca
+    0000000000000000.0000000000000000.2491004577601735.c35992a6e426f0ca
     6ce38dca85ac82dd.cec2b9aec7e99894.d4a15e4dd9137155.c35992a6e426f0ca
     e992bf47744a16a5.c3e500000d24b425.dfb632f4b71e91c1.8a03330824d8d78b
     0e2daa3efd36c0e6.3992f1e3357cc7f3.255182a0a0716890.2491004577601735
     6dd07548facb6cf4
-VBLENDPD_256_3of3(mem)
+VSHUFPD_128_1of2(mem)
   before
     418a0efcc82492f3.36014b1cb9ffbc4d.0c9409415afd8d2d.00bf48bd2f9a346e
     7c8b474ffe77445f.bf599d4d472e4586.18b9c30798b1c1fd.cd4c82b700252f09
@@ -24807,11 +24807,11 @@
   after
     418a0efcc82492f3.36014b1cb9ffbc4d.0c9409415afd8d2d.00bf48bd2f9a346e
     7c8b474ffe77445f.bf599d4d472e4586.18b9c30798b1c1fd.cd4c82b700252f09
-    418a0efcc82492f3.36014b1cb9ffbc4d.0c9409415afd8d2d.00bf48bd2f9a346e
+    0000000000000000.0000000000000000.00bf48bd2f9a346e.18b9c30798b1c1fd
     97978b80103c3e2c.60c9445942f3f11c.4b970d7dd2e76611.adf23ff3da8da420
     79a3ba0d1b8496f5
 
-VBLENDPD_256_3of3(reg)
+VSHUFPD_128_1of2(reg)
   before
     a6a499b30f0ba835.2f388d3524c7ffe6.3179910ce9a18bd1.2ae9960305814fac
     913fd75350b1168e.9e5120380f7b3cbc.d2dd80c1d0e6a408.b28db1a2c17f968f
@@ -24819,12 +24819,12 @@
     1175602e2f83f435.711be5d9dd931c6e.f3f431e6cf653daa.2dfa8dd846d830d7
     d85c4647474bfc96
   after
-    96c170587dff1ba9.c0afbe76ee66b2db.d2dd80c1d0e6a408.b28db1a2c17f968f
+    0000000000000000.0000000000000000.2dfa8dd846d830d7.b28db1a2c17f968f
     913fd75350b1168e.9e5120380f7b3cbc.d2dd80c1d0e6a408.b28db1a2c17f968f
     96c170587dff1ba9.c0afbe76ee66b2db.9e420ce6934e766c.bf4fda4523edf8e4
     1175602e2f83f435.711be5d9dd931c6e.f3f431e6cf653daa.2dfa8dd846d830d7
     d85c4647474bfc96
-VBLENDPD_256_3of3(mem)
+VSHUFPD_128_1of2(mem)
   before
     9c3f827e4152164a.5ea9a34105c8dddc.8d64104ff70f37a2.2b3fec2d20b8376e
     5570bc6950fa3b22.d9a736fd985a124a.f055bbc358e5bfa3.a46e372721d39e63
@@ -24834,11 +24834,11 @@
   after
     9c3f827e4152164a.5ea9a34105c8dddc.8d64104ff70f37a2.2b3fec2d20b8376e
     5570bc6950fa3b22.d9a736fd985a124a.f055bbc358e5bfa3.a46e372721d39e63
-    9c3f827e4152164a.5ea9a34105c8dddc.8d64104ff70f37a2.2b3fec2d20b8376e
+    0000000000000000.0000000000000000.2b3fec2d20b8376e.f055bbc358e5bfa3
     15ec1a0c205a95e8.c93539216b974e2e.fa5e835461d005ba.c5ac72e5a48da593
     255259805e46be25
 
-VBLENDPD_256_3of3(reg)
+VSHUFPD_128_1of2(reg)
   before
     350dc27e39f53498.d5ce379c182b422f.f55ca160e25acdfc.5a0e974a41fd3b28
     5228a74cd128449a.fa2f428f96cce949.c07e49f9889a8941.71961beed9b4ce13
@@ -24846,12 +24846,12 @@
     1eb2da04a54820f5.e299125391af19a4.a0e246e5cec1a3e1.335d64f19ef2fa0f
     9735202703910b77
   after
-    d6f10655c06b29d5.5fd9b7d3b5494861.c07e49f9889a8941.71961beed9b4ce13
+    0000000000000000.0000000000000000.335d64f19ef2fa0f.71961beed9b4ce13
     5228a74cd128449a.fa2f428f96cce949.c07e49f9889a8941.71961beed9b4ce13
     d6f10655c06b29d5.5fd9b7d3b5494861.85e62c56f8e3bca9.1bc28b2d43027aa7
     1eb2da04a54820f5.e299125391af19a4.a0e246e5cec1a3e1.335d64f19ef2fa0f
     9735202703910b77
-VBLENDPD_256_3of3(mem)
+VSHUFPD_128_1of2(mem)
   before
     21143dbc91e9690d.86b920c7194d65a7.5d3bcffb4709193e.6cbc9311a7c17995
     afc7379a6108cffb.6b50d209ba063497.ae8b6bb7f363035a.47c10f451e6e7b70
@@ -24861,11 +24861,11 @@
   after
     21143dbc91e9690d.86b920c7194d65a7.5d3bcffb4709193e.6cbc9311a7c17995
     afc7379a6108cffb.6b50d209ba063497.ae8b6bb7f363035a.47c10f451e6e7b70
-    21143dbc91e9690d.86b920c7194d65a7.5d3bcffb4709193e.6cbc9311a7c17995
+    0000000000000000.0000000000000000.6cbc9311a7c17995.ae8b6bb7f363035a
     43d9aee63dcaa690.17616fbaf2c05edf.3e642d1b9a4988ca.967c867a5901f34e
     c3ca785354fee1a8
 
-VPBLENDW_128_0x00(reg)
+VSHUFPD_128_2of2(reg)
   before
     6e7389e45dd9eada.01d0242b80848f90.97725101c1db328f.36854b9cceed9b76
     f2c2b69a111c4b8f.33cb666976347098.034591782cd97f2d.728437e067c08954
@@ -24873,12 +24873,12 @@
     f9865126e8100334.5ffc3f86eea80d72.0f5c17a247ae78e2.2a4c6b653a29e459
     5dadaa7eacd6c9d7
   after
-    0000000000000000.0000000000000000.034591782cd97f2d.728437e067c08954
+    0000000000000000.0000000000000000.0f5c17a247ae78e2.728437e067c08954
     f2c2b69a111c4b8f.33cb666976347098.034591782cd97f2d.728437e067c08954
     ad04fae20b563f74.b395f08f3ce706d5.b7242989cf468365.cf2d6ed482d10d91
     f9865126e8100334.5ffc3f86eea80d72.0f5c17a247ae78e2.2a4c6b653a29e459
     5dadaa7eacd6c9d7
-VPBLENDW_128_0x00(mem)
+VSHUFPD_128_2of2(mem)
   before
     451ba80bf3e37a38.3492b7d443d8d37c.11cacd3ba784409d.6739562d309e9a51
     bf64dff72b5cb1a7.b8742856b83aebf8.a6cc189a83855c7f.1b07e29824a1275d
@@ -24888,11 +24888,11 @@
   after
     451ba80bf3e37a38.3492b7d443d8d37c.11cacd3ba784409d.6739562d309e9a51
     bf64dff72b5cb1a7.b8742856b83aebf8.a6cc189a83855c7f.1b07e29824a1275d
-    0000000000000000.0000000000000000.a6cc189a83855c7f.1b07e29824a19a51
+    0000000000000000.0000000000000000.11cacd3ba784409d.a6cc189a83855c7f
     d4b2eda1e1c5a362.0fee1d8b63f8e23a.ea9bd307162c3f1e.07a6d3baa4116cff
     f60e2f4a66969eec
 
-VPBLENDW_128_0x00(reg)
+VSHUFPD_128_2of2(reg)
   before
     b297c869a55f2926.2850bb3796cbd605.991e9815d06d3959.50013bed05e97d33
     968d9a83fcf74a5b.7ef8b4dcad6e8067.dd540e24c8acc75b.09ca4e2c87fc94b0
@@ -24900,12 +24900,12 @@
     45f0db5964c43d60.9b9513076eb92817.0405dc82c6b67cba.e4b86b6ab6563d94
     be756b409bb44652
   after
-    0000000000000000.0000000000000000.dd540e24c8acc75b.09ca4e2c87fc94b0
+    0000000000000000.0000000000000000.0405dc82c6b67cba.09ca4e2c87fc94b0
     968d9a83fcf74a5b.7ef8b4dcad6e8067.dd540e24c8acc75b.09ca4e2c87fc94b0
     fe3ca20508ea3d35.b075527d41b95cb4.38dd7c24e640caec.f1c38bb2b97240c1
     45f0db5964c43d60.9b9513076eb92817.0405dc82c6b67cba.e4b86b6ab6563d94
     be756b409bb44652
-VPBLENDW_128_0x00(mem)
+VSHUFPD_128_2of2(mem)
   before
     5bc608208398182a.c9f541ecad128789.1b22726451799ebc.9e182ca80598196e
     9776bdf68b0f6e46.e596d02b7e60575c.0ce9ec8205057bd0.626167043e74dfb7
@@ -24915,11 +24915,11 @@
   after
     5bc608208398182a.c9f541ecad128789.1b22726451799ebc.9e182ca80598196e
     9776bdf68b0f6e46.e596d02b7e60575c.0ce9ec8205057bd0.626167043e74dfb7
-    0000000000000000.0000000000000000.0ce9ec8205057bd0.626167043e74196e
+    0000000000000000.0000000000000000.1b22726451799ebc.0ce9ec8205057bd0
     5c27603568e49afb.54e05a59292878ae.b1551dad53b258f5.d8c98f0a1148d1b2
     437f748de15876be
 
-VPBLENDW_128_0x00(reg)
+VSHUFPD_128_2of2(reg)
   before
     479c34f41d92320c.9dbf4575775ae7ed.60204d213cbb4186.1d92cd9323ecd15d
     416cccad5e81424b.ede7335c1493a8d4.732d5944477e80b7.6a3887e93621a1e3
@@ -24927,12 +24927,12 @@
     875470c265ae4d46.2a1617cb6d7a792e.22ddad4bb6c14ed6.16f30a958eb234fc
     2e9fcbc40d2470e6
   after
-    0000000000000000.0000000000000000.732d5944477e80b7.6a3887e93621a1e3
+    0000000000000000.0000000000000000.22ddad4bb6c14ed6.6a3887e93621a1e3
     416cccad5e81424b.ede7335c1493a8d4.732d5944477e80b7.6a3887e93621a1e3
     8d3a362343b1e225.286ba5d45d999adb.eb527b2ee6fc70ee.7415c89ba55f83b4
     875470c265ae4d46.2a1617cb6d7a792e.22ddad4bb6c14ed6.16f30a958eb234fc
     2e9fcbc40d2470e6
-VPBLENDW_128_0x00(mem)
+VSHUFPD_128_2of2(mem)
   before
     97e586123dc3f39f.8a0475f76205c05c.cfb6062c614201fa.7518ed07535a561c
     2d91b86c3b9b7853.f497412cd6417710.f315ede355fbed6b.415036ce5852c46b
@@ -24942,11 +24942,11 @@
   after
     97e586123dc3f39f.8a0475f76205c05c.cfb6062c614201fa.7518ed07535a561c
     2d91b86c3b9b7853.f497412cd6417710.f315ede355fbed6b.415036ce5852c46b
-    0000000000000000.0000000000000000.f315ede355fbed6b.415036ce5852561c
+    0000000000000000.0000000000000000.cfb6062c614201fa.f315ede355fbed6b
     4f4a6df60e227b5a.6a961f4a9199a009.27439303aa76e4ea.b0e7d42e0b90c0d7
     0bde209ff1eec74b
 
-VPBLENDW_128_0xFE(reg)
+VSHUFPD_256_1of2(reg)
   before
     4e0266cab0db2379.94efe9fc1ceb7005.2e9a280a10ce8ba4.f0aa4a44444e6751
     d59ea11de3e4110c.752acbbf681b585b.c8b0e97c7517a88f.a701e98b4d493e0c
@@ -24954,12 +24954,12 @@
     2072e7e817779314.8092b22927e6f1b7.ed468123631a6f04.53aed1dc1ed6db30
     009c12be1d8118f1
   after
-    0000000000000000.0000000000000000.93265e0b5d023676.2a13edc5e2733e0c
+    8092b22927e6f1b7.752acbbf681b585b.53aed1dc1ed6db30.a701e98b4d493e0c
     d59ea11de3e4110c.752acbbf681b585b.c8b0e97c7517a88f.a701e98b4d493e0c
     fd00ce032794cdb2.d0c7902a0dc1ef87.93265e0b5d023676.2a13edc5e2732648
     2072e7e817779314.8092b22927e6f1b7.ed468123631a6f04.53aed1dc1ed6db30
     009c12be1d8118f1
-VPBLENDW_128_0xFE(mem)
+VSHUFPD_256_1of2(mem)
   before
     0caa2a56fc7d9ab6.9b41ea384f1a9ee0.6056afa8d3981914.315d503024ec90e6
     52a4978fd7d81dac.cab8d25f6d082bc2.4ee102932de224cd.bab7c69e3c03d5c8
@@ -24969,11 +24969,11 @@
   after
     0caa2a56fc7d9ab6.9b41ea384f1a9ee0.6056afa8d3981914.315d503024ec90e6
     52a4978fd7d81dac.cab8d25f6d082bc2.4ee102932de224cd.bab7c69e3c03d5c8
-    0000000000000000.0000000000000000.6056afa8d3981914.315d503024ec90e6
+    0caa2a56fc7d9ab6.52a4978fd7d81dac.6056afa8d3981914.4ee102932de224cd
     008b5d99efd815da.b4d342e2c4f6bb77.c0779b5e586fd2fd.0f63974dde30b93a
     934deb67a15fd122
 
-VPBLENDW_128_0xFE(reg)
+VSHUFPD_256_1of2(reg)
   before
     ccabd5912a04fdba.1f11ae416496026a.270dc117370e35a1.fc1bd91661caedcd
     18c7533815a978ad.eab2443b44e2e0db.be2016d2fea12191.b5b55ce989eedba8
@@ -24981,12 +24981,12 @@
     556cf9af84284e57.ef782bd6b7565d0d.c801308ff96a3e73.0ffa27959fbe1f2d
     673e6644c782ed2f
   after
-    0000000000000000.0000000000000000.d5583c81b53cbaf3.c811a3c5e9e5dba8
+    ef782bd6b7565d0d.eab2443b44e2e0db.0ffa27959fbe1f2d.b5b55ce989eedba8
     18c7533815a978ad.eab2443b44e2e0db.be2016d2fea12191.b5b55ce989eedba8
     d1ee61c900dc7fa8.3b3b9973acc96a58.d5583c81b53cbaf3.c811a3c5e9e558b9
     556cf9af84284e57.ef782bd6b7565d0d.c801308ff96a3e73.0ffa27959fbe1f2d
     673e6644c782ed2f
-VPBLENDW_128_0xFE(mem)
+VSHUFPD_256_1of2(mem)
   before
     ada7dac07c3f7eec.fe8c19563f1a2065.e335754e82957528.f367ec6765b8e7bb
     bb0201f4db008d90.2a9cbb2acd3d327f.f13ef4c929926ed2.b2d56e7796b1f27a
@@ -24996,11 +24996,11 @@
   after
     ada7dac07c3f7eec.fe8c19563f1a2065.e335754e82957528.f367ec6765b8e7bb
     bb0201f4db008d90.2a9cbb2acd3d327f.f13ef4c929926ed2.b2d56e7796b1f27a
-    0000000000000000.0000000000000000.e335754e82957528.f367ec6765b8e7bb
+    ada7dac07c3f7eec.bb0201f4db008d90.e335754e82957528.f13ef4c929926ed2
     a2be563504c0183b.76b77b09d0470686.ce627d7478f8f18a.5cfdb1ecb5d41c08
     fe4e6a29db17b42f
 
-VPBLENDW_128_0xFE(reg)
+VSHUFPD_256_1of2(reg)
   before
     a5d8d94e36359e7c.33b67c1907d60c9a.4f5b8fec7d463fca.5517807d5879f4ef
     ace7f9c561bb159b.fdd1446624206e90.1b1e17ac6ca6a8cb.6747a83885e8c894
@@ -25008,12 +25008,12 @@
     49c33c5d992c9dfd.ac9baae719836ff0.f730707482bbfaae.9d4a53742fc1d150
     78b6cfcde6437ebf
   after
-    0000000000000000.0000000000000000.344c0eb53af47d32.e0bf6f911851c894
+    ac9baae719836ff0.fdd1446624206e90.9d4a53742fc1d150.6747a83885e8c894
     ace7f9c561bb159b.fdd1446624206e90.1b1e17ac6ca6a8cb.6747a83885e8c894
     6ec7c6fbf9345737.dcd92a0676abfb49.344c0eb53af47d32.e0bf6f91185128a6
     49c33c5d992c9dfd.ac9baae719836ff0.f730707482bbfaae.9d4a53742fc1d150
     78b6cfcde6437ebf
-VPBLENDW_128_0xFE(mem)
+VSHUFPD_256_1of2(mem)
   before
     4ecd5f8858e3ed1f.98285855de302698.49e341f32ab286b2.c0183953e1885ae9
     fa5c7f91a2add89b.b643145163ca2cb5.8f7d6918c446fbba.eb4e66c0f2e5da8f
@@ -25023,11 +25023,11 @@
   after
     4ecd5f8858e3ed1f.98285855de302698.49e341f32ab286b2.c0183953e1885ae9
     fa5c7f91a2add89b.b643145163ca2cb5.8f7d6918c446fbba.eb4e66c0f2e5da8f
-    0000000000000000.0000000000000000.49e341f32ab286b2.c0183953e1885ae9
+    4ecd5f8858e3ed1f.fa5c7f91a2add89b.49e341f32ab286b2.8f7d6918c446fbba
     4913613e2bf21499.d3c561029ef6a223.86d6625a05cbf14f.d7d7d9f19d8529cf
     50c2178d6ddf70c1
 
-VPBLENDW_128_0x30(reg)
+VSHUFPD_256_2of2(reg)
   before
     9b2ba96660fac6ce.a3d11abaa383dd73.8ac6ea8f8d9f89cd.ef2e294fe4d4eb33
     146089e8126269a2.44385334636f1319.80ac03cf2c0fdfa8.7107730cbc71330e
@@ -25035,12 +25035,12 @@
     00592897214b8152.cb2d36d12886b57c.9d55da18eb76c2a4.306f7d8fc9999f57
     2496352c363b3c1e
   after
-    0000000000000000.0000000000000000.80ac03cf17d3dd61.7107730cbc71330e
+    00592897214b8152.44385334636f1319.9d55da18eb76c2a4.7107730cbc71330e
     146089e8126269a2.44385334636f1319.80ac03cf2c0fdfa8.7107730cbc71330e
     17abb57f1ea493eb.0812899885c272b8.13c2aa2e17d3dd61.e82ebb7eaaaf860b
     00592897214b8152.cb2d36d12886b57c.9d55da18eb76c2a4.306f7d8fc9999f57
     2496352c363b3c1e
-VPBLENDW_128_0x30(mem)
+VSHUFPD_256_2of2(mem)
   before
     a26e60420ca2168b.2bb6df9db6e46f86.6853d8cd66c99991.7cb18ffa4384c81c
     85c578bc67d9ecca.f40ed4fb79f99831.bd51ea785b97da21.0a22c63ebc8a2c75
@@ -25050,11 +25050,11 @@
   after
     a26e60420ca2168b.2bb6df9db6e46f86.6853d8cd66c99991.7cb18ffa4384c81c
     85c578bc67d9ecca.f40ed4fb79f99831.bd51ea785b97da21.0a22c63ebc8a2c75
-    0000000000000000.0000000000000000.bd51ea785b97da21.0a22c63e4384c81c
+    2bb6df9db6e46f86.85c578bc67d9ecca.7cb18ffa4384c81c.bd51ea785b97da21
     e91b648b1fe87872.cfde6d73fccd8e9d.fb044f86dc006269.a673a6a07fabfe7e
     6dea499601dfe384
 
-VPBLENDW_128_0x30(reg)
+VSHUFPD_256_2of2(reg)
   before
     53a65c9f143a161c.23b330b9b3d8a631.9aef0865f3a3d3b7.9d529ac2a0b52178
     b5f3dc275348d2f2.31f9dafb3cc9be73.732ad360882643f8.66a7455d8b242db3
@@ -25062,12 +25062,12 @@
     5d701564c7afd906.3dbeb76b9fda9f2f.be51e521ff6597a2.dc9aac5c48601a60
     41ce609951467429
   after
-    0000000000000000.0000000000000000.732ad36058e31b0d.66a7455d8b242db3
+    5d701564c7afd906.31f9dafb3cc9be73.be51e521ff6597a2.66a7455d8b242db3
     b5f3dc275348d2f2.31f9dafb3cc9be73.732ad360882643f8.66a7455d8b242db3
     ef1dc69a5b9655b1.f1b8dd3dd7c57d64.b5dcc8d058e31b0d.31d1cc41ba594147
     5d701564c7afd906.3dbeb76b9fda9f2f.be51e521ff6597a2.dc9aac5c48601a60
     41ce609951467429
-VPBLENDW_128_0x30(mem)
+VSHUFPD_256_2of2(mem)
   before
     3e3b63e4f2160bce.5b38c5f134209a9c.f3d5e472b114e001.e9d525bf1738f262
     adac342947dc9a7d.46c0d3ad3d73d620.edcade3c287efc06.91b385173fe869fa
@@ -25077,11 +25077,11 @@
   after
     3e3b63e4f2160bce.5b38c5f134209a9c.f3d5e472b114e001.e9d525bf1738f262
     adac342947dc9a7d.46c0d3ad3d73d620.edcade3c287efc06.91b385173fe869fa
-    0000000000000000.0000000000000000.edcade3c287efc06.91b385171738f262
+    5b38c5f134209a9c.adac342947dc9a7d.e9d525bf1738f262.edcade3c287efc06
     55c928517a7c93a3.4e44f56394f5aaa1.217e2ecdb712b356.ccb191a029119b60
     176836ab23a2cd86
 
-VPBLENDW_128_0x30(reg)
+VSHUFPD_256_2of2(reg)
   before
     4faaea1e9d400b34.450d450c916e7473.24d702351a3bbbf6.12d57b6c0755c6fb
     d2c3aa6730779116.18851e71cc863efc.555b5de5ad9435e8.b939867f2cf8a481
@@ -25089,12 +25089,12 @@
     24a93a2817e26324.d840f5ea1b587de7.3d65e99469b05755.945cc8b16790b1e7
     81b2f6a8b49c581e
   after
-    0000000000000000.0000000000000000.555b5de5e98c5524.b939867f2cf8a481
+    24a93a2817e26324.18851e71cc863efc.3d65e99469b05755.b939867f2cf8a481
     d2c3aa6730779116.18851e71cc863efc.555b5de5ad9435e8.b939867f2cf8a481
     faff70f17ad49ad7.abfc2f6d45d0ad69.3f1c00e1e98c5524.f078ccf243080a17
     24a93a2817e26324.d840f5ea1b587de7.3d65e99469b05755.945cc8b16790b1e7
     81b2f6a8b49c581e
-VPBLENDW_128_0x30(mem)
+VSHUFPD_256_2of2(mem)
   before
     9346d2c34838b9e7.ad0e0378a22d28a9.7c1cead6682b69a1.ab84136ac98b7629
     a7e4d8ee3c71916f.ef7bc74db7422511.735b8c1c48552ec4.e5c37acfa6aaf049
@@ -25104,11 +25104,11 @@
   after
     9346d2c34838b9e7.ad0e0378a22d28a9.7c1cead6682b69a1.ab84136ac98b7629
     a7e4d8ee3c71916f.ef7bc74db7422511.735b8c1c48552ec4.e5c37acfa6aaf049
-    0000000000000000.0000000000000000.735b8c1c48552ec4.e5c37acfc98b7629
+    ad0e0378a22d28a9.a7e4d8ee3c71916f.ab84136ac98b7629.735b8c1c48552ec4
     406d5425b9e8956a.11973236f2f7b53b.ca35c56533da33f4.2cd4f0f645e1df24
     f23ef7913f11ce35
 
-VPBLENDW_128_0x21(reg)
+VPERMILPS_128_0x00(reg)
   before
     f4f82b6a25b50644.7ef0c1087a3e3936.aae0d0234fb0c156.e3685341754eea59
     8d5088ef9558c4fd.2dad49ac0d604470.6c605944a662f405.be2f7e27bc496ad6
@@ -25116,12 +25116,12 @@
     f905aea97ccdc01b.4e0596e3163a7de0.de331dd6b4e2c2cc.2da898c2c201b4cb
     79f27f4ebbd7f69a
   after
-    0000000000000000.0000000000000000.6c6059449499f405.be2f7e27bc496e98
-    8d5088ef9558c4fd.2dad49ac0d604470.6c605944a662f405.be2f7e27bc496ad6
+    f4f82b6a25b50644.7ef0c1087a3e3936.aae0d0234fb0c156.e3685341754eea59
+    0000000000000000.0000000000000000.21d66e9821d66e98.21d66e9821d66e98
     1b900b8a2887430b.297066fc8d5b7145.b462c90794998bf3.3855c10321d66e98
     f905aea97ccdc01b.4e0596e3163a7de0.de331dd6b4e2c2cc.2da898c2c201b4cb
     79f27f4ebbd7f69a
-VPBLENDW_128_0x21(mem)
+VPERMILPS_128_0x00(mem)
   before
     f700f3942763f132.82fb6fb72db677d9.7838544fc509246e.461f4f1fa3c8d53e
     859e6f8122b160be.14be4a20d6cfa4f0.83d41c2bb5d5221b.48725e4dfcd8fff2
@@ -25130,12 +25130,12 @@
     82cc836d9f76655e
   after
     f700f3942763f132.82fb6fb72db677d9.7838544fc509246e.461f4f1fa3c8d53e
-    859e6f8122b160be.14be4a20d6cfa4f0.83d41c2bb5d5221b.48725e4dfcd8fff2
-    0000000000000000.0000000000000000.83d41c2bb5d5246e.48725e4da3c8fff2
+    0000000000000000.0000000000000000.a3c8d53ea3c8d53e.a3c8d53e461f4f1f
+    fe986f00c9cd006b.099a395013a3830d.4ba76b6303a93212.407843cc5c9c7d97
     3eb96ffc38c48d65.bfda39b381be4fdb.ac7bbbe3ca91117f.8a7dfb085ea38bd7
     82cc836d9f76655e
 
-VPBLENDW_128_0x21(reg)
+VPERMILPS_128_0x00(reg)
   before
     84b3d667baa346d9.21cfec638aa2c3d7.90cc47b5bcac4507.811d8a98279a7b90
     ec7cf0634cb56bf4.83a46020db715ded.d9ba5ec25efaa03c.a859536c35cf2c6f
@@ -25143,12 +25143,12 @@
     5ee76a0d42b970b9.33be224cec18b0b9.44bd98ae4ee47974.59cec425d5ee5148
     9aa064e2a0f03e9b
   after
-    0000000000000000.0000000000000000.d9ba5ec20634a03c.a859536c35cfdf48
-    ec7cf0634cb56bf4.83a46020db715ded.d9ba5ec25efaa03c.a859536c35cf2c6f
+    84b3d667baa346d9.21cfec638aa2c3d7.90cc47b5bcac4507.811d8a98279a7b90
+    0000000000000000.0000000000000000.103cdf48103cdf48.103cdf48103cdf48
     1674cdcbf038105b.3f05491f484018d5.f7f17b4606349e27.fcfb924d103cdf48
     5ee76a0d42b970b9.33be224cec18b0b9.44bd98ae4ee47974.59cec425d5ee5148
     9aa064e2a0f03e9b
-VPBLENDW_128_0x21(mem)
+VPERMILPS_128_0x00(mem)
   before
     9d3bee6e8c4e616c.1f20c293dfc3c8ba.3a9b6893e407e1c5.1e6ab364d2986dce
     3d6cdeb7b51577e8.b76dd1cb63e3540b.2f6895e14b186626.df43c7d62fdcb8e2
@@ -25157,12 +25157,12 @@
     2ad5b2c6707af12f
   after
     9d3bee6e8c4e616c.1f20c293dfc3c8ba.3a9b6893e407e1c5.1e6ab364d2986dce
-    3d6cdeb7b51577e8.b76dd1cb63e3540b.2f6895e14b186626.df43c7d62fdcb8e2
-    0000000000000000.0000000000000000.2f6895e14b18e1c5.df43c7d6d298b8e2
+    0000000000000000.0000000000000000.d2986dced2986dce.d2986dce1e6ab364
+    55ffb0a838503c3b.8118932069a44f58.f0f027203e57fc08.e496d06f003a945b
     c3c0e12d310b6c90.d96e04fd8d92f74c.5801993dd8d15f96.89adca9be2403ee6
     2ad5b2c6707af12f
 
-VPBLENDW_128_0x21(reg)
+VPERMILPS_128_0x00(reg)
   before
     245a825c4673ebe1.617aec32bb53c214.1abb21d06c3a8694.4265672536914afd
     d18838c901b766a9.0dfb4da4f233fbf2.a24be504a22638dc.8ce90ec373a37a69
@@ -25170,12 +25170,12 @@
     b70e44d89551d129.fb7d027ad9ec056e.f36452408000f91a.ac81d3d0fbef99fe
     3a2cea187f41ff7f
   after
-    0000000000000000.0000000000000000.a24be504c9e538dc.8ce90ec373a3ab05
-    d18838c901b766a9.0dfb4da4f233fbf2.a24be504a22638dc.8ce90ec373a37a69
+    245a825c4673ebe1.617aec32bb53c214.1abb21d06c3a8694.4265672536914afd
+    0000000000000000.0000000000000000.ab14ab05ab14ab05.ab14ab05ab14ab05
     8eabcf793dd29f32.a10d806df3b8d357.cb6a4c06c9e54bcf.10590802ab14ab05
     b70e44d89551d129.fb7d027ad9ec056e.f36452408000f91a.ac81d3d0fbef99fe
     3a2cea187f41ff7f
-VPBLENDW_128_0x21(mem)
+VPERMILPS_128_0x00(mem)
   before
     9728cac652149ab5.a8ff9253a5bf393a.f5174db8c1dd4e64.7584f41f60057f68
     a03fedc6907726cb.bdc8b4540aa81310.6ca7df11c6976a65.ac172d10087f1866
@@ -25184,12 +25184,12 @@
     2e7a3a80bc26b335
   after
     9728cac652149ab5.a8ff9253a5bf393a.f5174db8c1dd4e64.7584f41f60057f68
-    a03fedc6907726cb.bdc8b4540aa81310.6ca7df11c6976a65.ac172d10087f1866
-    0000000000000000.0000000000000000.6ca7df11c6974e64.ac172d1060051866
+    0000000000000000.0000000000000000.60057f6860057f68.60057f687584f41f
+    2f3ed10556735eee.52b6a94960999b58.3df933730525159c.f669f97d11fb02bf
     21f1f16dc016ff4a.c3156a9c421d0cbd.42d8c6c999930a36.adc654d41a047720
     2e7a3a80bc26b335
 
-VPBLENDW_128_0xD7(reg)
+VPERMILPS_128_0xFE(reg)
   before
     d6d1a8ec95eef4a9.5324c9ebe96bc50a.6c30f4bb4cc1a3ec.581212ff9eed065f
     ff16998641e77429.9fa3d66ced7f6c5b.a95544111b0f9c91.5c7195013240c542
@@ -25197,12 +25197,12 @@
     489ef4f17f9d23fc.f8b37b23f8114b5e.4ee9231276dfa3eb.99d12d1970ff7ae7
     8b6a3b075483e902
   after
-    0000000000000000.0000000000000000.d5ce550a1b0f3357.5c71cabb6e97020b
-    ff16998641e77429.9fa3d66ced7f6c5b.a95544111b0f9c91.5c7195013240c542
+    d6d1a8ec95eef4a9.5324c9ebe96bc50a.6c30f4bb4cc1a3ec.581212ff9eed065f
+    0000000000000000.0000000000000000.d5ce550ad5ce550a.d5ce550a4a963357
     079709b95b9d7061.e23992dae95caf68.d5ce550a4a963357.28c2cabb6e97020b
     489ef4f17f9d23fc.f8b37b23f8114b5e.4ee9231276dfa3eb.99d12d1970ff7ae7
     8b6a3b075483e902
-VPBLENDW_128_0xD7(mem)
+VPERMILPS_128_0xFE(mem)
   before
     da586f71352f0b88.1f78569a4a72cba6.bdde0c3237a7fc69.6ff0ab953a7829f8
     626944442f109ba4.e8712c2158a8a20c.0e84c1f3c12c7eb4.9430e7ff33ec012b
@@ -25211,12 +25211,12 @@
     b23db4e070e5ca5e
   after
     da586f71352f0b88.1f78569a4a72cba6.bdde0c3237a7fc69.6ff0ab953a7829f8
-    626944442f109ba4.e8712c2158a8a20c.0e84c1f3c12c7eb4.9430e7ff33ec012b
-    0000000000000000.0000000000000000.0e840c3237a77eb4.6ff0ab9533ec012b
+    0000000000000000.0000000000000000.bdde0c32bdde0c32.bdde0c32bdde0c32
+    ff67396a5f315682.ffd471f044cce5da.c5721752b3ab8c6c.18f4d5bdfcc86630
     8e1fc7d1e09ef850.c1ef2175aa69cfbc.bf73893b2831e3bc.598a7039329795b2
     b23db4e070e5ca5e
 
-VPBLENDW_128_0xD7(reg)
+VPERMILPS_128_0xFE(reg)
   before
     7e589e1f533e40df.e95d6b64cf633d37.880c391a270b9d5d.d855939a3cc93ed1
     1b282961762f35e2.eceda20e488de066.b179b34d563f8b69.ece2b15b0c7f5bd7
@@ -25224,12 +25224,12 @@
     3417129ded07861c.5f32b65c453e3246.996ec2093c8bb675.75311ab44f77c664
     a18a5d24fad08c43
   after
-    0000000000000000.0000000000000000.98808d79563fd58e.ece25f6bb460f4f9
-    1b282961762f35e2.eceda20e488de066.b179b34d563f8b69.ece2b15b0c7f5bd7
+    7e589e1f533e40df.e95d6b64cf633d37.880c391a270b9d5d.d855939a3cc93ed1
+    0000000000000000.0000000000000000.98808d7998808d79.98808d79d490d58e
     e3f950127543e312.759be7bd65289e07.98808d79d490d58e.d7e85f6bb460f4f9
     3417129ded07861c.5f32b65c453e3246.996ec2093c8bb675.75311ab44f77c664
     a18a5d24fad08c43
-VPBLENDW_128_0xD7(mem)
+VPERMILPS_128_0xFE(mem)
   before
     39bea4a5d07803c3.68ce68707a065cac.86808cd701dd5a50.108e4e6b2bba6bcd
     189b6b25ed7ae710.dd6950f7b7cc9f6d.c64fe41bb811d051.592e2e0a3cab3040
@@ -25238,12 +25238,12 @@
     b8fe988e577f35f6
   after
     39bea4a5d07803c3.68ce68707a065cac.86808cd701dd5a50.108e4e6b2bba6bcd
-    189b6b25ed7ae710.dd6950f7b7cc9f6d.c64fe41bb811d051.592e2e0a3cab3040
-    0000000000000000.0000000000000000.c64f8cd701ddd051.108e4e6b3cab3040
+    0000000000000000.0000000000000000.86808cd786808cd7.86808cd786808cd7
+    1aeb2e8f6ee2f455.ed36c49c40e68c0c.fb6c391283e45175.d0995d520cea407a
     1b7c6acf6ebde5bf.f67fc2ccb2df5e35.01a309a9806498e6.d11ad6b03602d928
     b8fe988e577f35f6
 
-VPBLENDW_128_0xD7(reg)
+VPERMILPS_128_0xFE(reg)
   before
     e1919c590aed9090.f6189ad10a167779.529146f3a8435393.b3c0d0cdcb9d63d3
     a71fe07eebd928a1.898c3a815df966b0.5eb84a7ebf9fa5d2.ef8e08687f996b66
@@ -25251,12 +25251,12 @@
     7f5b1482aa59fad9.432bbb9b9a8f4a44.f774c76cbe6c52a6.7171c0b894102a30
     701d37432ca157bf
   after
-    0000000000000000.0000000000000000.7740ccd7bf9f91a0.ef8e2f68b9666fcc
-    a71fe07eebd928a1.898c3a815df966b0.5eb84a7ebf9fa5d2.ef8e08687f996b66
+    e1919c590aed9090.f6189ad10a167779.529146f3a8435393.b3c0d0cdcb9d63d3
+    0000000000000000.0000000000000000.7740ccd77740ccd7.7740ccd7927e91a0
     68f35e6797ce37d5.afa4c7cb84736e8f.7740ccd7927e91a0.90db2f68b9666fcc
     7f5b1482aa59fad9.432bbb9b9a8f4a44.f774c76cbe6c52a6.7171c0b894102a30
     701d37432ca157bf
-VPBLENDW_128_0xD7(mem)
+VPERMILPS_128_0xFE(mem)
   before
     68ab11f79e28b3a5.48a1fe3abf05ac59.23ef94debc59b7f8.3ba237a8def62593
     34e7c8bf05aef90d.1e1316fb725e8a00.2abacd7e05de71da.a01418f68fa74611
@@ -25265,12 +25265,12 @@
     24003b8e1c1ed3ad
   after
     68ab11f79e28b3a5.48a1fe3abf05ac59.23ef94debc59b7f8.3ba237a8def62593
-    34e7c8bf05aef90d.1e1316fb725e8a00.2abacd7e05de71da.a01418f68fa74611
-    0000000000000000.0000000000000000.2aba94debc5971da.3ba237a88fa74611
+    0000000000000000.0000000000000000.23ef94de23ef94de.23ef94de23ef94de
+    b29cda877e41e623.5ffb5a3160f0d07b.335ae26992293313.801767c46c0bf1cd
     bc98c23c25ec3615.66a6c5482448ba76.1c9950897e46bad2.38f71e7d12af6172
     24003b8e1c1ed3ad
 
-VPBLENDW_128_0xB5(reg)
+VPERMILPS_128_0x30(reg)
   before
     a07dba6126e48329.30a5fcc814bba50d.8e5f53ac5bf2849c.bf4491cce642c241
     08bc9563cd8eac93.e89005186abbef37.357400c9a178699a.fa26231de528078d
@@ -25278,12 +25278,12 @@
     0cac54a561bc5ce0.983071b5b57c02d4.6cdea8dfc74d76cc.a3c3289919e4366a
     cb16929c87d19953
   after
-    0000000000000000.0000000000000000.b52f00c99068a51b.fa268168e52844e1
-    08bc9563cd8eac93.e89005186abbef37.357400c9a178699a.fa26231de528078d
+    a07dba6126e48329.30a5fcc814bba50d.8e5f53ac5bf2849c.bf4491cce642c241
+    0000000000000000.0000000000000000.970544e1b52fc80c.970544e1970544e1
     b807ca00ada78c97.c225581940f7cfc0.b52fc80c9068a51b.a70d8168970544e1
     0cac54a561bc5ce0.983071b5b57c02d4.6cdea8dfc74d76cc.a3c3289919e4366a
     cb16929c87d19953
-VPBLENDW_128_0xB5(mem)
+VPERMILPS_128_0x30(mem)
   before
     f9d03d5dfcd828c9.60f52fbc85575b1b.477dccdae254439e.b4cb9bb0dfb41658
     0abea4c99406a0f8.102e57b3b607c4f3.acd7e573e68e4f4b.eb439de97628c26c
@@ -25292,12 +25292,12 @@
     bae4d7454b4c658e
   after
     f9d03d5dfcd828c9.60f52fbc85575b1b.477dccdae254439e.b4cb9bb0dfb41658
-    0abea4c99406a0f8.102e57b3b607c4f3.acd7e573e68e4f4b.eb439de97628c26c
-    0000000000000000.0000000000000000.acd7ccdae68e4f4b.b4cb9de9dfb4c26c
+    0000000000000000.0000000000000000.dfb41658dfb41658.dfb41658477dccda
+    dbac43ca6c66bd0b.78a5c8f59055d215.a10c396cda33e306.6b91abf82835b6b4
     4665964d9f053b2f.f4a57feeadcfc12c.03e642b1dc51b8fc.9203bf4890682edb
     bae4d7454b4c658e
 
-VPBLENDW_128_0xB5(reg)
+VPERMILPS_128_0x30(reg)
   before
     407fee5bf46d9878.28b71a3f4aeed590.e079770aac00cfe6.ae327f2e08f38d59
     812101f627580247.5d6c4a8b882d4859.976eacb5277536ec.7fbc69cf79261c48
@@ -25305,12 +25305,12 @@
     9faa076b9eb96f3d.31329ee02fdea9d4.dbebbe6801580293.feb9382d9b6c5a8e
     65c515c38597823d
   after
-    0000000000000000.0000000000000000.77d1acb5bab833ed.7fbc7d80792622f6
-    812101f627580247.5d6c4a8b882d4859.976eacb5277536ec.7fbc69cf79261c48
+    407fee5bf46d9878.28b71a3f4aeed590.e079770aac00cfe6.ae327f2e08f38d59
+    0000000000000000.0000000000000000.4bf522f677d11b5b.4bf522f64bf522f6
     d7160a828198e0a4.c151a21d76ce50b6.77d11b5bbab833ed.50507d804bf522f6
     9faa076b9eb96f3d.31329ee02fdea9d4.dbebbe6801580293.feb9382d9b6c5a8e
     65c515c38597823d
-VPBLENDW_128_0xB5(mem)
+VPERMILPS_128_0x30(mem)
   before
     613e902c2483542f.3529f31d1948e8be.87dbbbc2d0680edf.1f0b93489adede8a
     cef12556943b8d8f.f5deca058ed08ad3.a01874ae74793c03.9e7c95681ed8047f
@@ -25319,12 +25319,12 @@
     1dab83794ff28908
   after
     613e902c2483542f.3529f31d1948e8be.87dbbbc2d0680edf.1f0b93489adede8a
-    cef12556943b8d8f.f5deca058ed08ad3.a01874ae74793c03.9e7c95681ed8047f
-    0000000000000000.0000000000000000.a018bbc274793c03.1f0b95689ade047f
+    0000000000000000.0000000000000000.9adede8a9adede8a.9adede8a87dbbbc2
+    88aa512cf2cce88a.3c17888d9add8f27.58b44591381cee6b.b689c0322bd1b01e
     6b358f995941224b.641e2a23d8fc3466.8b7daa55375de243.c28011145d561e12
     1dab83794ff28908
 
-VPBLENDW_128_0xB5(reg)
+VPERMILPS_128_0x30(reg)
   before
     255712cc9e312eac.535e5b8be6a6f7ff.ca40ab32e5b8b53d.153d1fe78d49d2b8
     34d0ba7be59f49a9.1cf031edb40823d2.cac907265c9d4d58.d2c1213457eb7bf6
@@ -25332,12 +25332,12 @@
     db58469acc3bcf60.c183ecb285f06e83.083f406dfa14b509.5445b9abb682e67b
     d2dc47ae828f211b
   after
-    0000000000000000.0000000000000000.c0050726da383963.d2c12a2657eb9828
-    34d0ba7be59f49a9.1cf031edb40823d2.cac907265c9d4d58.d2c1213457eb7bf6
+    255712cc9e312eac.535e5b8be6a6f7ff.ca40ab32e5b8b53d.153d1fe78d49d2b8
+    0000000000000000.0000000000000000.b14f9828c0053a6b.b14f9828b14f9828
     a86177f1c0c915ab.a2b98dabe07261ef.c0053a6bda383963.9dd52a26b14f9828
     db58469acc3bcf60.c183ecb285f06e83.083f406dfa14b509.5445b9abb682e67b
     d2dc47ae828f211b
-VPBLENDW_128_0xB5(mem)
+VPERMILPS_128_0x30(mem)
   before
     f368511a32820533.2bff21e3a47fb372.541bc9ecc08f06b9.fec5169859befcf6
     93b354dde1684df0.f2a40736e523fd8d.394da046ac5ae5be.fee1b75892c14bd7
@@ -25346,12 +25346,12 @@
     d1b7354f7459bfe8
   after
     f368511a32820533.2bff21e3a47fb372.541bc9ecc08f06b9.fec5169859befcf6
-    93b354dde1684df0.f2a40736e523fd8d.394da046ac5ae5be.fee1b75892c14bd7
-    0000000000000000.0000000000000000.394dc9ecac5ae5be.fec5b75859be4bd7
+    0000000000000000.0000000000000000.59befcf659befcf6.59befcf6541bc9ec
+    8d8acbe2ac4cb67d.8d91f1002bb3e85e.4be5edad665dc6be.64e01f1942a9de58
     bfb93215af3afc07.5913dcae10b9b191.66ae2d0b09a566e4.8b0e4b480402f125
     d1b7354f7459bfe8
 
-VPBLENDW_128_0x85(reg)
+VPERMILPS_128_0x21(reg)
   before
     9127db9c2f398650.040c0563043fdbba.b075c5aa33c394d1.6576da4eb13d815d
     27a93899d12f7f07.374fc1b6ca660ec1.ef05a7622d5dcccb.260772617b31d254
@@ -25359,12 +25359,12 @@
     44170858378afe14.dcd4e11f124b637d.96db46b21c6d2e9b.5ab751a6e45f096e
     866e90b1bab167e9
   after
-    0000000000000000.0000000000000000.730da7622d5dcccb.2607712f7b3116f6
-    27a93899d12f7f07.374fc1b6ca660ec1.ef05a7622d5dcccb.260772617b31d254
+    9127db9c2f398650.040c0563043fdbba.b075c5aa33c394d1.6576da4eb13d815d
+    0000000000000000.0000000000000000.838e16f69d11962a.838e16f6842e712f
     ee8b48b4f5c6e9ba.364de1fb1abb5248.730d7e409d11962a.842e712f838e16f6
     44170858378afe14.dcd4e11f124b637d.96db46b21c6d2e9b.5ab751a6e45f096e
     866e90b1bab167e9
-VPBLENDW_128_0x85(mem)
+VPERMILPS_128_0x21(mem)
   before
     e21ea83d228eeb93.849a72f13407fbc2.04ae3d0cce21fc8a.b5b9fc2349fdd0ca
     4c95183437045297.096084eb87ca1c70.8ca871b0694ada9b.2cf49bffbd4bb762
@@ -25373,12 +25373,12 @@
     39cac64ee62c685c
   after
     e21ea83d228eeb93.849a72f13407fbc2.04ae3d0cce21fc8a.b5b9fc2349fdd0ca
-    4c95183437045297.096084eb87ca1c70.8ca871b0694ada9b.2cf49bffbd4bb762
-    0000000000000000.0000000000000000.04ae3d0c694afc8a.b5b9fc23bd4bb762
+    0000000000000000.0000000000000000.49fdd0cab5b9fc23.49fdd0cace21fc8a
+    9e9d5983161f5822.31b539b2cd5e9cc9.4e8efaf600d0b9dd.57d81fb216e52010
     b603e816daeab860.57e48eb3a250b879.282c53c9aec1557c.92b084a9f057477f
     39cac64ee62c685c
 
-VPBLENDW_128_0x85(reg)
+VPERMILPS_128_0x21(reg)
   before
     a870e20e94f0be53.6e9342daa0712f7c.d63b7d58a02bac2e.f44df8178f2969a3
     3befd356972f860f.a419e2ba83c079a2.0c04040e667bb492.8fbf65cbc013b27f
@@ -25386,12 +25386,12 @@
     3da8242a0b505b88.f537e47d12e875c0.091fc75eb3acee18.a3c18916819dd205
     d3ea378448562106
   after
-    0000000000000000.0000000000000000.538c040e667bb492.8fbf17d2c013ec3c
-    3befd356972f860f.a419e2ba83c079a2.0c04040e667bb492.8fbf65cbc013b27f
+    a870e20e94f0be53.6e9342daa0712f7c.d63b7d58a02bac2e.f44df8178f2969a3
+    0000000000000000.0000000000000000.5d8bec3c8dcd0b51.5d8bec3cd64c17d2
     4e9395908b76fb3d.326144a1a0e45200.538c1e428dcd0b51.d64c17d25d8bec3c
     3da8242a0b505b88.f537e47d12e875c0.091fc75eb3acee18.a3c18916819dd205
     d3ea378448562106
-VPBLENDW_128_0x85(mem)
+VPERMILPS_128_0x21(mem)
   before
     43939d09cfc1956c.647a7d8fb349e09d.c9663f39f6d99f0e.8809fbd074a49993
     cd88378f31ebea63.1f559a2b20eec728.8bbbd0c167c28c17.2d95b7036b42476d
@@ -25400,12 +25400,12 @@
     9904ed5aaf73c1f2
   after
     43939d09cfc1956c.647a7d8fb349e09d.c9663f39f6d99f0e.8809fbd074a49993
-    cd88378f31ebea63.1f559a2b20eec728.8bbbd0c167c28c17.2d95b7036b42476d
-    0000000000000000.0000000000000000.c9663f3967c29f0e.8809fbd06b42476d
+    0000000000000000.0000000000000000.74a499938809fbd0.74a49993f6d99f0e
+    4e9482048bdfdb17.ca847969edca4bd4.1502130182aff707.5511f66335113553
     a285f952f8a925b3.c15415b8b76aa94e.440784e562ac9d09.5ac7b45c6d9d9ff0
     9904ed5aaf73c1f2
 
-VPBLENDW_128_0x85(reg)
+VPERMILPS_128_0x21(reg)
   before
     6f149ec9981ed602.a625186795568463.60116b8119591d41.f496a05923c63a4a
     3643c115c42a1bce.34415b2e7df0b455.02077531b023e35a.017be14ae2088af5
@@ -25413,12 +25413,12 @@
     0a2e53f55297254a.611c3e82a02175a9.c4ce9af7eb7954ad.a375c74ec836313c
     ef23643b2839012f
   after
-    0000000000000000.0000000000000000.05827531b023e35a.017bc5a2e2084837
-    3643c115c42a1bce.34415b2e7df0b455.02077531b023e35a.017be14ae2088af5
+    6f149ec9981ed602.a625186795568463.60116b8119591d41.f496a05923c63a4a
+    0000000000000000.0000000000000000.ba7f483717543645.ba7f48374881c5a2
     4bdd54abce24cc02.29a53f93cd8670b2.0582313417543645.4881c5a2ba7f4837
     0a2e53f55297254a.611c3e82a02175a9.c4ce9af7eb7954ad.a375c74ec836313c
     ef23643b2839012f
-VPBLENDW_128_0x85(mem)
+VPERMILPS_128_0x21(mem)
   before
     08571654f595743d.cf81b861ed0f6151.b874d6e713cf7e64.9a36ade4c71e763e
     cadd5b854b554591.f62381593a19bdc3.0a7783ae419b490f.e507646947cddba6
@@ -25427,12 +25427,12 @@
     15e842b9bc98eb95
   after
     08571654f595743d.cf81b861ed0f6151.b874d6e713cf7e64.9a36ade4c71e763e
-    cadd5b854b554591.f62381593a19bdc3.0a7783ae419b490f.e507646947cddba6
-    0000000000000000.0000000000000000.b874d6e7419b7e64.9a36ade447cddba6
+    0000000000000000.0000000000000000.c71e763e9a36ade4.c71e763e13cf7e64
+    1181aeb947853158.dc60a84bd640744d.33f3bfc4469290d8.008ebdf00914bd8f
     b80e8bde0432f3be.db842ba25c10c49b.0fb208133fbf10e8.4615b3e7a67e59a5
     15e842b9bc98eb95
 
-VPBLENDW_128_0x29(reg)
+VPERMILPS_128_0xD7(reg)
   before
     c75566d2e7edae0b.9d526fe09f6749ee.50db06ca6916e759.7a81d889482e846e
     baa71c9ec109e0b2.9b17d4a93330ed15.97b1332f98dd1932.4f2bad107ceca994
@@ -25440,12 +25440,12 @@
     ce282b00f9c87b46.52571643b8b011f6.0a087860cedf9ee6.ac445406d682f671
     eb4b1e4c35739581
   after
-    0000000000000000.0000000000000000.97b1332f86f21932.6c7ead107cec3b86
-    baa71c9ec109e0b2.9b17d4a93330ed15.97b1332f98dd1932.4f2bad107ceca994
+    c75566d2e7edae0b.9d526fe09f6749ee.50db06ca6916e759.7a81d889482e846e
+    0000000000000000.0000000000000000.0c51b03d6c7e0396.6c7e03960c51b03d
     48295f89e979ba37.8e2a3826dd9a9c5e.0c51b03d86f298d2.6c7e0396f7043b86
     ce282b00f9c87b46.52571643b8b011f6.0a087860cedf9ee6.ac445406d682f671
     eb4b1e4c35739581
-VPBLENDW_128_0x29(mem)
+VPERMILPS_128_0xD7(mem)
   before
     055ddc542ee2d5e1.a9f07c6d8d825d8a.c36aebede07e0908.ef2387050d33681a
     d5470a0ae0db72be.33cd4e3d42349daf.bc2e310e721140c2.16ecd996de773219
@@ -25454,12 +25454,12 @@
     af583c11d865e595
   after
     055ddc542ee2d5e1.a9f07c6d8d825d8a.c36aebede07e0908.ef2387050d33681a
-    d5470a0ae0db72be.33cd4e3d42349daf.bc2e310e721140c2.16ecd996de773219
-    0000000000000000.0000000000000000.c36a310e72110908.16ecd9960d333219
+    0000000000000000.0000000000000000.ef238705e07e0908.c36aebed0d33681a
+    39d5245a646b2844.c90b9eddb3697763.1b7166948a74724d.dbaf6b81dd393790
     0cd2a730d99db29e.c8f667b87dad264f.bbfd056a43b35bd8.9aba3830a704b42b
     af583c11d865e595
 
-VPBLENDW_128_0x29(reg)
+VPERMILPS_128_0xD7(reg)
   before
     75d4738f0be6067b.290c0e79587dcdf9.8ad9a5393b8de822.779f8a7cb9dbb68c
     4a7bd915dc165288.6e4dd51f00183580.6c0154ce8a94f786.2d2371b509f74098
@@ -25467,12 +25467,12 @@
     8d7a24eecaac5eca.dc18733634addac4.0051f7e14948eeb3.f3005752a63ccf63
     bbf24d8c2a7d4d7a
   after
-    0000000000000000.0000000000000000.6c0154ce054ef786.b75571b509f7b426
-    4a7bd915dc165288.6e4dd51f00183580.6c0154ce8a94f786.2d2371b509f74098
+    75d4738f0be6067b.290c0e79587dcdf9.8ad9a5393b8de822.779f8a7cb9dbb68c
+    0000000000000000.0000000000000000.cabb71e2b7553704.b7553704cabb71e2
     89996b11e87e0669.b5637810ea79a560.cabb71e2054e8f27.b75537044f13b426
     8d7a24eecaac5eca.dc18733634addac4.0051f7e14948eeb3.f3005752a63ccf63
     bbf24d8c2a7d4d7a
-VPBLENDW_128_0x29(mem)
+VPERMILPS_128_0xD7(mem)
   before
     edf5959ef8e3ea98.b46a00191f2b9556.bd39437ffabe90d9.6b0fe237f10d4ed3
     63d6ac752b7862e8.58b4fbfc8288e8b9.369163d657bb83cb.65432e509929eb36
@@ -25481,12 +25481,12 @@
     4b933267ae028f9f
   after
     edf5959ef8e3ea98.b46a00191f2b9556.bd39437ffabe90d9.6b0fe237f10d4ed3
-    63d6ac752b7862e8.58b4fbfc8288e8b9.369163d657bb83cb.65432e509929eb36
-    0000000000000000.0000000000000000.bd3963d657bb90d9.65432e50f10deb36
+    0000000000000000.0000000000000000.6b0fe237fabe90d9.bd39437ff10d4ed3
+    fb610cfbe04a7098.d7a61204904e93a1.21ee4f2768ad6ec5.4b38d799de290386
     8f62331e3265d1d1.8c8a3f9ee409d2b8.5c1a835e47a20ef4.7939da7c5c98d06f
     4b933267ae028f9f
 
-VPBLENDW_128_0x29(reg)
+VPERMILPS_128_0xD7(reg)
   before
     1d92dbc470f47cbf.fca59cc83ed440c1.d2ad80341b46e0aa.c1e37c6713a51f84
     4b82d1013ff9d27e.1ff6c4e71fa37a94.065bd134d090fa24.2d13b52ee6c35ca0
@@ -25494,12 +25494,12 @@
     2a6495c7726eac83.f2f03d31d2923f92.a9888f1e267c415f.8bdbd7a7127d4d2e
     340ab831a33179f8
   after
-    0000000000000000.0000000000000000.065bd134a073fa24.7d77b52ee6c38274
-    4b82d1013ff9d27e.1ff6c4e71fa37a94.065bd134d090fa24.2d13b52ee6c35ca0
+    1d92dbc470f47cbf.fca59cc83ed440c1.d2ad80341b46e0aa.c1e37c6713a51f84
+    0000000000000000.0000000000000000.85e02c097d77aaa0.7d77aaa085e02c09
     31af1189b69ece86.d2202566f2de3b76.85e02c09a0735cd2.7d77aaa0dc068274
     2a6495c7726eac83.f2f03d31d2923f92.a9888f1e267c415f.8bdbd7a7127d4d2e
     340ab831a33179f8
-VPBLENDW_128_0x29(mem)
+VPERMILPS_128_0xD7(mem)
   before
     54d2ca28ac30c1fe.94ef5b290ff5a722.5c328734dbca4214.d09ef4e1ff36e678
     c7fd887a4985e26d.ca9a5f1a27bffd0f.eab27f5b2a93ff2a.546f5abdc62d87c8
@@ -25508,12 +25508,12 @@
     ad3d5c20cafba8bf
   after
     54d2ca28ac30c1fe.94ef5b290ff5a722.5c328734dbca4214.d09ef4e1ff36e678
-    c7fd887a4985e26d.ca9a5f1a27bffd0f.eab27f5b2a93ff2a.546f5abdc62d87c8
-    0000000000000000.0000000000000000.5c327f5b2a934214.546f5abdff3687c8
+    0000000000000000.0000000000000000.d09ef4e1dbca4214.5c328734ff36e678
+    6a586e12943d9871.28b29b075959e8f6.793ca292dbf833fd.9248ba1e17ee60fc
     17aff8dcab639f35.0a830d5a3e4ea482.e59c6bc6090599bc.e67311708f04acc0
     ad3d5c20cafba8bf
 
-VMOVUPS_EtoG_256(reg)
+VPERMILPS_128_0xB5(reg)
   before
     41f19698636090a6.abcea3c4aa03b2e6.cb59af80752b6f5f.0a9d56e1d0c7ef91
     ffddbb46f6be9f21.0281e9b6ac298eaf.c97f7fe5977b833a.c40cdfd14d49efa8
@@ -25522,11 +25522,11 @@
     08e507d01dc84737
   after
     41f19698636090a6.abcea3c4aa03b2e6.cb59af80752b6f5f.0a9d56e1d0c7ef91
-    ffddbb46f6be9f21.0281e9b6ac298eaf.c97f7fe5977b833a.c40cdfd14d49efa8
+    0000000000000000.0000000000000000.42ca1dbf5f4379f6.efb58280efb58280
     434bc89420a112db.f893489ecee2eebd.5f4379f642ca1dbf.efb582809b97562f
-    434bc89420a112db.f893489ecee2eebd.5f4379f642ca1dbf.efb582809b97562f
+    6988b7f07c962580.69d23b682b3a903c.e8ef971e12a47899.6764bcdcd7bddf4f
     08e507d01dc84737
-VMOVUPS_EtoG_256(mem)
+VPERMILPS_128_0xB5(mem)
   before
     ae04e14887c44a11.cde186c5a72814bd.31083f00e03b2e57.c2d0d7c8a296d175
     358cc63034bba409.cb9f307e3ce31a3e.2c02ce5308f3853b.473234628e2c64ff
@@ -25535,12 +25535,12 @@
     7855d2029737d065
   after
     ae04e14887c44a11.cde186c5a72814bd.31083f00e03b2e57.c2d0d7c8a296d175
-    358cc63034bba409.cb9f307e3ce31a3e.2c02ce5308f3853b.473234628e2c64ff
-    ae04e14887c44a11.cde186c5a72814bd.31083f00e03b2e57.c2d0d7c8a296d175
+    0000000000000000.0000000000000000.c2d0d7c8a296d175.e03b2e57e03b2e57
+    794b30743dbb104d.bf11b189d85474af.368c664bbf6d5013.d561aa5773f06de2
     560b9d00c1d04b06.0582065116065ebb.2a7282d622b64c0c.c6a93513ed7028ca
     7855d2029737d065
 
-VMOVUPS_EtoG_256(reg)
+VPERMILPS_128_0xB5(reg)
   before
     45b37c900dd2a25d.a89987c0d9041163.f93d29429386140e.e6809fdf4cd93551
     8b0d2f29ecccd95e.4ac16da0a3651e8e.f79018c9ea5ed155.458137515ae2c710
@@ -25549,11 +25549,11 @@
     cb34c25ff1dcc8d6
   after
     45b37c900dd2a25d.a89987c0d9041163.f93d29429386140e.e6809fdf4cd93551
-    8b0d2f29ecccd95e.4ac16da0a3651e8e.f79018c9ea5ed155.458137515ae2c710
+    0000000000000000.0000000000000000.b81dd23c5bc5ce50.2342c81a2342c81a
     a4b0e73acfb1b215.1a4fc88d3bff2db3.5bc5ce50b81dd23c.2342c81a68debd72
-    a4b0e73acfb1b215.1a4fc88d3bff2db3.5bc5ce50b81dd23c.2342c81a68debd72
+    ede8a02d530e6a2e.f30e1571bcdcfbff.81294844984c536e.5c8fcd2591d8d4a6
     cb34c25ff1dcc8d6
-VMOVUPS_EtoG_256(mem)
+VPERMILPS_128_0xB5(mem)
   before
     4efd23b2a5f7552e.c3015770146e3a54.b0ccd13a430a449e.c508801226798f98
     c0b66d0bc83436db.8046076dac5d6134.2f5377d3eb95c3bb.83ad7424ff2fc366
@@ -25562,12 +25562,12 @@
     303f8b336102865c
   after
     4efd23b2a5f7552e.c3015770146e3a54.b0ccd13a430a449e.c508801226798f98
-    c0b66d0bc83436db.8046076dac5d6134.2f5377d3eb95c3bb.83ad7424ff2fc366
-    4efd23b2a5f7552e.c3015770146e3a54.b0ccd13a430a449e.c508801226798f98
+    0000000000000000.0000000000000000.c508801226798f98.430a449e430a449e
+    fc2b1a5677a02809.8105ac92ba681979.4b708328d0873583.16661fe8bffb2b83
     e027a980cd45e7e3.2288424ad71a9fd0.dfef72250fee5622.dc7d7dc90167029c
     303f8b336102865c
 
-VMOVUPS_EtoG_256(reg)
+VPERMILPS_128_0xB5(reg)
   before
     6df843927c55f170.46779373e6312e96.c01cc601a1ff2ee5.c99cbeb6c3d6e2c3
     f1f4a352edee7f84.0ce7551de070ba4e.b50d3323b4a40463.e342e5c7094a9493
@@ -25576,11 +25576,11 @@
     f1094f335c67ebd1
   after
     6df843927c55f170.46779373e6312e96.c01cc601a1ff2ee5.c99cbeb6c3d6e2c3
-    f1f4a352edee7f84.0ce7551de070ba4e.b50d3323b4a40463.e342e5c7094a9493
+    0000000000000000.0000000000000000.ab945bf75ea7851c.0baf62440baf6244
     177fa6df51586e43.0c436c69d40d4736.5ea7851cab945bf7.0baf6244fd5629bd
-    177fa6df51586e43.0c436c69d40d4736.5ea7851cab945bf7.0baf6244fd5629bd
+    3ae549a54320f859.24575343e014917a.1736b858235c704c.1badb219b9065d6e
     f1094f335c67ebd1
-VMOVUPS_EtoG_256(mem)
+VPERMILPS_128_0xB5(mem)
   before
     678fb77cff849013.b871861160d15a74.2eee869720915348.3c05c843b7867e0f
     5b0b65e2c16a0860.eb705b8d43f7cf3e.08d68151af914ac9.2962b24a03a0c2ec
@@ -25589,12 +25589,12 @@
     38bc5e38530329d3
   after
     678fb77cff849013.b871861160d15a74.2eee869720915348.3c05c843b7867e0f
-    5b0b65e2c16a0860.eb705b8d43f7cf3e.08d68151af914ac9.2962b24a03a0c2ec
-    678fb77cff849013.b871861160d15a74.2eee869720915348.3c05c843b7867e0f
+    0000000000000000.0000000000000000.3c05c843b7867e0f.2091534820915348
+    a749d54fbb230fe3.312fc387891f9563.8cd9c15da91f322c.3a9771d7a436788e
     281583b10cbe60c9.e4f7ba69cdd4e690.97c4c0a72b48c69b.cbf1015836d3dca2
     38bc5e38530329d3
 
-VSQRTSS_128(reg)
+VPERMILPS_128_0x85(reg)
   before
     dd4385e29a529cce.bb3aecf3cd44b83d.62173da1aca2fe71.0663fc1b5016c343
     16d471c4a54d713f.3a858b011cc3d36c.05da469ac1151bb1.b382f1a63598e54f
@@ -25602,12 +25602,12 @@
     b34088dd78753031.6fbd5b31d3da40aa.2e78df7fff1d4f00.3a6ff2adade18745
     ccd6f70179c17f87
   after
-    0000000000000000.0000000000000000.05da469ac1151bb1.b382f1a6ffc00000
-    16d471c4a54d713f.3a858b011cc3d36c.05da469ac1151bb1.b382f1a63598e54f
+    dd4385e29a529cce.bb3aecf3cd44b83d.62173da1aca2fe71.0663fc1b5016c343
+    0000000000000000.0000000000000000.a9ba77fdf6d7e8ec.7bed19327bed1932
     3fb91d49107fe4d1.82c2dcc715466c82.2a8bd3c0a9ba77fd.7bed1932f6d7e8ec
     b34088dd78753031.6fbd5b31d3da40aa.2e78df7fff1d4f00.3a6ff2adade18745
     ccd6f70179c17f87
-VSQRTSS_128(mem)
+VPERMILPS_128_0x85(mem)
   before
     0eeca41c73848cde.d0b3abec78ba920a.dd42842b72890b11.6beb66435fc8de67
     da7e75e9ba356975.f15f84e3adda4609.a91dd4a20f6289e3.3e316578664962de
@@ -25616,12 +25616,12 @@
     d4ec04f67a45fa58
   after
     0eeca41c73848cde.d0b3abec78ba920a.dd42842b72890b11.6beb66435fc8de67
-    da7e75e9ba356975.f15f84e3adda4609.a91dd4a20f6289e3.3e316578664962de
-    0000000000000000.0000000000000000.a91dd4a20f6289e3.3e3165784fa058dd
+    0000000000000000.0000000000000000.dd42842b6beb6643.dd42842b5fc8de67
+    0d58e65467e0d479.72900e2cb26187da.ad19c680c66e754b.0496d78ab02c1510
     8345744998928715.ae91453424dc9228.c603d6b3b2bb8c75.1766b8e5d7fc34aa
     d4ec04f67a45fa58
 
-VSQRTSS_128(reg)
+VPERMILPS_128_0x85(reg)
   before
     9775b7273393a4c5.18139ab469553e76.03b025689ed6a39f.d0a78025ef548a8e
     bc4ecee69e736e9d.a88cd482f538b7c8.cc37aa32bcdcf5ed.a7d141c49a462bc2
@@ -25629,12 +25629,12 @@
     9c1b15bbfc165141.29b375f2b087d9ed.29b0953d573950b8.2ce7f536a862442a
     926ae0e143a534b5
   after
-    0000000000000000.0000000000000000.cc37aa32bcdcf5ed.a7d141c4ffc00000
-    bc4ecee69e736e9d.a88cd482f538b7c8.cc37aa32bcdcf5ed.a7d141c49a462bc2
+    9775b7273393a4c5.18139ab469553e76.03b025689ed6a39f.d0a78025ef548a8e
+    0000000000000000.0000000000000000.1b79c6bcce9c2a3d.274d947b274d947b
     9fc1449e5870948d.0f7e9f9d5944ac36.6473d1001b79c6bc.274d947bce9c2a3d
     9c1b15bbfc165141.29b375f2b087d9ed.29b0953d573950b8.2ce7f536a862442a
     926ae0e143a534b5
-VSQRTSS_128(mem)
+VPERMILPS_128_0x85(mem)
   before
     34a4d168bc70b80b.0fa83da927f2e265.d2f8d46e160dfc18.753af2550ba9cf8e
     f05f45b72ecf8a58.54b3b8d4748f83a4.e51837fca8e0cfe4.a65de4b4d35481ea
@@ -25643,12 +25643,12 @@
     275213b3c03017d6
   after
     34a4d168bc70b80b.0fa83da927f2e265.d2f8d46e160dfc18.753af2550ba9cf8e
-    f05f45b72ecf8a58.54b3b8d4748f83a4.e51837fca8e0cfe4.a65de4b4d35481ea
-    0000000000000000.0000000000000000.e51837fca8e0cfe4.a65de4b425936e3b
+    0000000000000000.0000000000000000.d2f8d46e753af255.d2f8d46e0ba9cf8e
+    a168b7bab6cf67c7.c78a83a880796faa.40e11a87820e0f7d.166468c64cc6a077
     238ba35e6f7b0a85.c4779991e63de424.be1efafdbfa3780e.239d79f7128b69e2
     275213b3c03017d6
 
-VSQRTSS_128(reg)
+VPERMILPS_128_0x85(reg)
   before
     7fd03267f241e801.5294858d76df30be.a7c7f6fb42661cbe.3b9a52497ba9c5c3
     8863d37d4548160c.094eda35e608959d.ccc6965332815323.93229d57d32eb3ca
@@ -25656,12 +25656,12 @@
     18f78783bc6e7b78.8409c99c72d60cff.4b01917937bab201.43860269c5e36278
     54fa1346972b9a78
   after
-    0000000000000000.0000000000000000.ccc6965332815323.93229d57ffc00000
-    8863d37d4548160c.094eda35e608959d.ccc6965332815323.93229d57d32eb3ca
+    7fd03267f241e801.5294858d76df30be.a7c7f6fb42661cbe.3b9a52497ba9c5c3
+    0000000000000000.0000000000000000.4f19c700e23efe4d.a1825a13a1825a13
     9c57f06354d3dea5.26871d40db01f54f.8fc076034f19c700.a1825a13e23efe4d
     18f78783bc6e7b78.8409c99c72d60cff.4b01917937bab201.43860269c5e36278
     54fa1346972b9a78
-VSQRTSS_128(mem)
+VPERMILPS_128_0x85(mem)
   before
     afa9079475226379.5991934b18a32a31.fea15d34c79495da.5ed4e31f86f051d1
     32605c407ad379a6.b96f11260500277b.721b52f4f5464d0b.23866863d748df1d
@@ -25670,12 +25670,12 @@
     35cf0315f090819e
   after
     afa9079475226379.5991934b18a32a31.fea15d34c79495da.5ed4e31f86f051d1
-    32605c407ad379a6.b96f11260500277b.721b52f4f5464d0b.23866863d748df1d
-    0000000000000000.0000000000000000.721b52f4f5464d0b.23866863ffc00000
+    0000000000000000.0000000000000000.fea15d345ed4e31f.fea15d3486f051d1
+    b7ec8e37c34a972c.95defb801e11ae02.ba4326c818f9efc0.f6641cb0c64d9990
     1c1717646b937a37.492a4fc5ff61fa74.b4e4549c4db73822.32b8fc72f08cbbd7
     35cf0315f090819e
 
-VSQRTPS_128(reg)
+VPERMILPS_128_0x29(reg)
   before
     5af42d0563e52690.3bae75b28ebbdef2.319f0861467c487a.3bcc585caf8ee460
     fc7576afe418e859.f27c230f49cd7f8a.a98922c08ceed4c3.2ac5aef45b8aafa3
@@ -25684,11 +25684,11 @@
     061476062fce204f
   after
     5af42d0563e52690.3bae75b28ebbdef2.319f0861467c487a.3bcc585caf8ee460
-    0000000000000000.0000000000000000.26566cef57607c6c.4f0dae065618c505
+    0000000000000000.0000000000000000.6cb6551a6f44d9f9.6f44d9f95e9cd251
     799cdb7d10b400a7.1b4f9d66b8d5182a.0d339a4e6f44d9f9.5e9cd2516cb6551a
     2bb757dc8245ad24.94f15fa3f6e066ff.b9ea6a788b0995c8.b41d415dff1e91ef
     061476062fce204f
-VSQRTPS_128(mem)
+VPERMILPS_128_0x29(mem)
   before
     324ded3619d3bd65.7010e639d757297c.3730e6b21ff92534.09fb90a87bc941de
     129423dbd838255e.a2f484feaa77b15c.e1d6ac80502d10f6.59b0074cdb111ce4
@@ -25697,12 +25697,12 @@
     e1a42c21b78c165a
   after
     324ded3619d3bd65.7010e639d757297c.3730e6b21ff92534.09fb90a87bc941de
-    0000000000000000.0000000000000000.3b54ce842fb29453.24b371cb5da0808c
+    0000000000000000.0000000000000000.1ff9253409fb90a8.7bc941de1ff92534
     83b492e0890a1465.1eaf2d9998318170.6fb02ff7a587e471.0556cbce486c6089
     617ab831475446a7.418cde753c0fd463.bb8aeb0438135dd0.6938d99c5d674b77
     e1a42c21b78c165a
 
-VSQRTPS_128(reg)
+VPERMILPS_128_0x29(reg)
   before
     c9e4c0c9f16a00df.89b210ba2f227750.65d992fe329fe8e2.a22f5a9428dd3740
     7d469100a88a43b2.d52816675c80628b.e8e045a0186df798.006dfa918ff22dec
@@ -25711,11 +25711,11 @@
     7dacd257a8671415
   after
     c9e4c0c9f16a00df.89b210ba2f227750.65d992fe329fe8e2.a22f5a9428dd3740
-    0000000000000000.0000000000000000.322ee362ffc00000.ffc00000ffc00000
+    0000000000000000.0000000000000000.895dfc0187033d32.87033d32b20e45e9
     58149b32777a1c7f.22a84724ea7bc485.24eef3c787033d32.b20e45e9895dfc01
     b89bdbcbfbc5c7f0.4cfe1ddef61e5869.764f99df1deff75c.92dfb987332b60ab
     7dacd257a8671415
-VSQRTPS_128(mem)
+VPERMILPS_128_0x29(mem)
   before
     4f410a45051dd66c.f8264c38cff87fb4.2ff5167f9c76dc64.3a4f315475bd62c1
     e46adf3d655a60db.7403eae3909e8175.a75aadf5f68e0aa2.cd3ab9932cf7b70e
@@ -25724,12 +25724,12 @@
     ef73c43ca0b0971a
   after
     4f410a45051dd66c.f8264c38cff87fb4.2ff5167f9c76dc64.3a4f315475bd62c1
-    0000000000000000.0000000000000000.37b11e8bffc00000.3ce64e9a5a9bb249
+    0000000000000000.0000000000000000.9c76dc643a4f3154.75bd62c19c76dc64
     18f2cc2be4296e8f.877cb13ad94309e0.90f95f2a23729f4e.895b2c06de2b35ef
     c7a74dfb9f96beb4.8fdf9da7477353a0.c69ea60c3d2f5695.cb00871b26e5160f
     ef73c43ca0b0971a
 
-VSQRTPS_128(reg)
+VPERMILPS_128_0x29(reg)
   before
     5101e1d7e918f3bd.cd53df9ab2ad0a75.e676ab9875bb9a62.2515008660d0eca2
     4df6d9579ca968a4.06c3fcf2387b0eff.ea8ed678ffa61bd2.892ae884a9611da2
@@ -25738,11 +25738,11 @@
     6b13cdce7c2fa80a
   after
     5101e1d7e918f3bd.cd53df9ab2ad0a75.e676ab9875bb9a62.2515008660d0eca2
-    0000000000000000.0000000000000000.ffc00000ffc00000.ffc0000039af2477
+    0000000000000000.0000000000000000.33efa5c182c1129b.82c1129bcea8daf2
     3f9ea82856f0307b.4ec322f14d0c887d.f6731ab382c1129b.cea8daf233efa5c1
     83444bb6b27888ec.811fcc810e6a321c.657074b59a97ba69.d05d53bc1b853f2a
     6b13cdce7c2fa80a
-VSQRTPS_128(mem)
+VPERMILPS_128_0x29(mem)
   before
     7b97c61473f99c8c.7536bd6d4dcdaba6.7aa3769097a3c908.94d3deeae2b450ea
     dbb5b97b1bf1d7dd.71befab9c27cd653.171a9d0903c3096c.e0e656bef6a510c7
@@ -25751,12 +25751,12 @@
     023ee52d16e3a24b
   after
     7b97c61473f99c8c.7536bd6d4dcdaba6.7aa3769097a3c908.94d3deeae2b450ea
-    0000000000000000.0000000000000000.5d10a619ffc00000.ffc00000ffc00000
+    0000000000000000.0000000000000000.97a3c90894d3deea.e2b450ea97a3c908
     693923ed90201429.d329fe07ad1045a0.3351bbd86ed4ad75.a3f7d79d73f536af
     00ee7e58ef94109b.f7c3c5c1ab163438.aa154ee9f5e4724e.3b505df3f430fd4c
     023ee52d16e3a24b
 
-VSQRTPS_256(reg)
+VBLENDPS_128_1of3(reg)
   before
     550c69b574996157.7ca248a65458875f.38d84c555819dec8.5730d228b3ff1424
     9108e7f9abde751d.b81ffcc5da7834a3.f4b48d2d4fa581fc.186ec181c52f4f22
@@ -25764,12 +25764,12 @@
     2fb6bf6212478f85.e4a71223bafe2355.4af0335e8c899cfe.4288d43253047e49
     64faf06107c0ebca
   after
-    550c69b574996157.7ca248a65458875f.38d84c555819dec8.5730d228b3ff1424
-    27fe2b854add2fa3.ffc00000ffc00000.ffc0000035e154fc.ffc000004301eb8b
+    0000000000000000.0000000000000000.f4b48d2d4fa581fc.186ec181c52f4f22
+    9108e7f9abde751d.b81ffcc5da7834a3.f4b48d2d4fa581fc.186ec181c52f4f22
     107c5a64563f1b48.923216a09d01d491.86a286b72c46567f.c89d98e04683de76
     2fb6bf6212478f85.e4a71223bafe2355.4af0335e8c899cfe.4288d43253047e49
     64faf06107c0ebca
-VSQRTPS_256(mem)
+VBLENDPS_128_1of3(mem)
   before
     08c0685b7fc2e023.4a00105f7a820d80.8c4a6d3a4d7bdd1c.9be88e8d0bf98d24
     0ca6b90ad6161a80.bda74bc72b7dd0e4.65e6a2d17185bd12.d7d795b24423669e
@@ -25778,12 +25778,12 @@
     9e6584186570b7b9
   after
     08c0685b7fc2e023.4a00105f7a820d80.8c4a6d3a4d7bdd1c.9be88e8d0bf98d24
-    241cef057fc2e023.44b510865d0105b4.ffc00000467dec66.ffc0000025b2b98f
-    4a785e5c28c9550e.e5f76b06c0c3155e.4a492dd442278062.59094338d3926318
+    0ca6b90ad6161a80.bda74bc72b7dd0e4.65e6a2d17185bd12.d7d795b24423669e
+    0000000000000000.0000000000000000.65e6a2d17185bd12.9be88e8d0bf98d24
     a002d23c93e64df9.1c3b6c88d6e01899.193d8a2fdd6de239.7cca948c55d2bf3d
     9e6584186570b7b9
 
-VSQRTPS_256(reg)
+VBLENDPS_128_1of3(reg)
   before
     19281049a0f7873a.e8109496307abd6c.bfc14bb908611542.ac8f36cf5d649ec3
     4b5d328ca1f36b69.006d1d561d8f6294.2ad30206f2d14705.e00bab9edf17712b
@@ -25791,12 +25791,12 @@
     40502df4677b5d88.0b4778b855723ab1.c8ceeda060af3c87.9cb1e67e57e34c47
     db73a2658513cb52
   after
-    19281049a0f7873a.e8109496307abd6c.bfc14bb908611542.ac8f36cf5d649ec3
-    ffc0000022af7f70.ffc000005a56a533.ffc00000389bea7a.ffc000005f0936e7
+    0000000000000000.0000000000000000.2ad30206f2d14705.e00bab9edf17712b
+    4b5d328ca1f36b69.006d1d561d8f6294.2ad30206f2d14705.e00bab9edf17712b
     8e51e84b05f09ef5.c2e6ea687533f89c.b9be8fd931bdeb8d.927d678a7e93179d
     40502df4677b5d88.0b4778b855723ab1.c8ceeda060af3c87.9cb1e67e57e34c47
     db73a2658513cb52
-VSQRTPS_256(mem)
+VBLENDPS_128_1of3(mem)
   before
     2c8e192d252f51ed.bba6fef26420e4cf.b85c4232d957e5ff.b34f19c51c36789e
     69cfc5c152449a42.5d9e55b097696e75.a3f1c4c31ceeb5b1.d58d0db601dbd97f
@@ -25805,12 +25805,12 @@
     26ab7a83b9ff3694
   after
     2c8e192d252f51ed.bba6fef26420e4cf.b85c4232d957e5ff.b34f19c51c36789e
-    3606dd753253da82.ffc0000051caf344.ffc00000ffc00000.ffc000002dd8218a
-    6f02240d285d617e.8086309c9ce43827.a9d27b553a4366f4.8cd4c7deaa2c9cd6
+    69cfc5c152449a42.5d9e55b097696e75.a3f1c4c31ceeb5b1.d58d0db601dbd97f
+    0000000000000000.0000000000000000.a3f1c4c31ceeb5b1.b34f19c51c36789e
     1af3b2fdc48763cc.81a88a21101d7e90.a6cae1d65063b3f4.336f42a9b3b4fc4e
     26ab7a83b9ff3694
 
-VSQRTPS_256(reg)
+VBLENDPS_128_1of3(reg)
   before
     c1d46bd8579a8653.476ee97e42cd5c59.bd5160ab8f9e7c5d.77a77431795a59dc
     603612142a112838.d03f477abd3b0850.8eceaca6b4f56d3a.f633af51d23214d8
@@ -25818,12 +25818,12 @@
     19d56ff2dcbf5123.691165971bc0672f.626e9ba061531bd2.718b0e9582bab8bf
     25ee2a9011821902
   after
-    c1d46bd8579a8653.476ee97e42cd5c59.bd5160ab8f9e7c5d.77a77431795a59dc
-    4ec8bec6ffc00000.ffc0000048a89f46.4873ed5f2d957a25.1fade43f5b32bffc
+    0000000000000000.0000000000000000.8eceaca6b4f56d3a.f633af51d23214d8
+    603612142a112838.d03f477abd3b0850.8eceaca6b4f56d3a.f633af51d23214d8
     5e1d6aa4cdee57ee.923147de51de22de.51686c7f1bae8ed2.003b0f2476f99f15
     19d56ff2dcbf5123.691165971bc0672f.626e9ba061531bd2.718b0e9582bab8bf
     25ee2a9011821902
-VSQRTPS_256(mem)
+VBLENDPS_128_1of3(mem)
   before
     f832de023f5c7e09.eca91d6bf50f4f80.31ab1d8f36f0936e.1d2b357722724fe5
     c621a6d52a54a500.32e7717cb16b90b4.c6cbecb4bf7762c8.dfea366ef99768b8
@@ -25832,12 +25832,12 @@
     de317e531c9c5f67
   after
     f832de023f5c7e09.eca91d6bf50f4f80.31ab1d8f36f0936e.1d2b357722724fe5
-    ffc000003f6d9570.ffc00000ffc00000.3893fef23b2f7b3c.2e515ad930f90fe1
-    6b89fef6eb774814.49d96590ae5e4e68.043d4cf1d2638f68.02f89bf3824ca0f7
+    c621a6d52a54a500.32e7717cb16b90b4.c6cbecb4bf7762c8.dfea366ef99768b8
+    0000000000000000.0000000000000000.c6cbecb4bf7762c8.1d2b357722724fe5
     c3346352a0d02371.8bccf7138874c64b.c7cdbb3289c0d77b.e3a15f715a20334d
     de317e531c9c5f67
 
-VSQRTPD_128(reg)
+VBLENDPS_128_2of3(reg)
   before
     4ff4f407654e5ef0.aaef50d3656bf443.560c2270da393407.eb47b5630398f52d
     9236bef8d0c16c95.fc854167555575b4.04e4e315403ad349.4c76b47059f9a7a9
@@ -25845,12 +25845,12 @@
     fe653a427e1ba9e2.5077207427437a2a.7d9013e5bb1e970d.3426b6ce0f84b2b1
     743fb0f8a6c68395
   after
-    4ff4f407654e5ef0.aaef50d3656bf443.560c2270da393407.eb47b5630398f52d
-    0000000000000000.0000000000000000.fff8000000000000.fff8000000000000
+    0000000000000000.0000000000000000.04e4e3155703e0bc.c527364559f9a7a9
+    9236bef8d0c16c95.fc854167555575b4.04e4e315403ad349.4c76b47059f9a7a9
     0342d692fa81c702.94c4b2f88c9963f3.f3a2346e5703e0bc.c5273645aaeea71b
     fe653a427e1ba9e2.5077207427437a2a.7d9013e5bb1e970d.3426b6ce0f84b2b1
     743fb0f8a6c68395
-VSQRTPD_128(mem)
+VBLENDPS_128_2of3(mem)
   before
     613ea0ad8bc0d7f3.dfece572f81a4fe2.0b6905c641607586.00fb7be7061934e7
     d6ee03dbd97f6af8.0121d48f050bf5ad.a167dfdaf7fb1132.d62f68e0d780f2f7
@@ -25859,12 +25859,12 @@
     e97927cf7baf4f21
   after
     613ea0ad8bc0d7f3.dfece572f81a4fe2.0b6905c641607586.00fb7be7061934e7
-    0000000000000000.0000000000000000.25ac4c0a0a19e6f3.2074f8569c866ebf
-    b11d536cad0ef8d0.c25001064179d6f0.ed3d299c64200a5b.5c78d73dc8dd0ee9
+    d6ee03dbd97f6af8.0121d48f050bf5ad.a167dfdaf7fb1132.d62f68e0d780f2f7
+    0000000000000000.0000000000000000.0b6905c6f7fb1132.d62f68e0061934e7
     cd950e4e227a3da6.7dc76a4147f02f57.cdb760f8a5dc1c2d.ef22c26875bec468
     e97927cf7baf4f21
 
-VSQRTPD_128(reg)
+VBLENDPS_128_2of3(reg)
   before
     a7c801dd753aedc0.0523af6c54cdf4a7.8ed10aaeb3fc3c8d.1ca1fedbd53a02d3
     855d4dfd00edd8f0.3793b3b26015d9ff.51b9ddb8222a393f.b5c6812f1146797a
@@ -25872,12 +25872,12 @@
     1284272836f986b5.f549d06674b32162.5c560d53781af1c5.39f523de1b9a0979
     dc963b1121f99a29
   after
-    a7c801dd753aedc0.0523af6c54cdf4a7.8ed10aaeb3fc3c8d.1ca1fedbd53a02d3
-    0000000000000000.0000000000000000.30de6624e068ae3c.5b719d9060ba6b09
+    0000000000000000.0000000000000000.51b9ddb830056118.76f364e21146797a
+    855d4dfd00edd8f0.3793b3b26015d9ff.51b9ddb8222a393f.b5c6812f1146797a
     e082059db7544c5d.3eb1940c615eaad9.21cce0cb30056118.76f364e2740d3d4d
     1284272836f986b5.f549d06674b32162.5c560d53781af1c5.39f523de1b9a0979
     dc963b1121f99a29
-VSQRTPD_128(mem)
+VBLENDPS_128_2of3(mem)
   before
     39a32666a337ac8a.78aeae0b1a6ac3a1.3a26e2acb520fbc5.5da362bc96f425f1
     2ee762c8bc5ffbc8.6e4e96b0ff333cd0.e71547ca3eb1f42f.7fffda72271f384a
@@ -25886,12 +25886,12 @@
     4b63ee9ba001090f
   after
     39a32666a337ac8a.78aeae0b1a6ac3a1.3a26e2acb520fbc5.5da362bc96f425f1
-    0000000000000000.0000000000000000.3d0b0fca065e8fd2.4ec8e81b5c18e5a8
-    95306a25887e420e.50afdc8480df30ec.dae279ad2e73c7cb.20b672e1c6286779
+    2ee762c8bc5ffbc8.6e4e96b0ff333cd0.e71547ca3eb1f42f.7fffda72271f384a
+    0000000000000000.0000000000000000.3a26e2ac3eb1f42f.7fffda7296f425f1
     4c48bb68249e3e89.7a1c7af339fad9a1.ed5af63f9f7132c6.9a1324761099ee2d
     4b63ee9ba001090f
 
-VSQRTPD_128(reg)
+VBLENDPS_128_2of3(reg)
   before
     8df2cbbe13e9f3ce.2dfdcf7eacceab65.48e26e6ac710749c.fd46396eadb7ef4c
     be0cb74904dfe914.151924513b1744cd.164db353c6ae3d89.e775be257452ba88
@@ -25899,12 +25899,12 @@
     5811ad4cd223e8e7.6bb97ee1df29edf3.2242213084af47e8.b4c87fdaa0b56dd5
     5184b3b13c95cd3d
   after
-    8df2cbbe13e9f3ce.2dfdcf7eacceab65.48e26e6ac710749c.fd46396eadb7ef4c
-    0000000000000000.0000000000000000.404c7053ba861bb4.fff8000000000000
+    0000000000000000.0000000000000000.164db353d15f6f14.85b2014f7452ba88
+    be0cb74904dfe914.151924513b1744cd.164db353c6ae3d89.e775be257452ba88
     38fdaeaa106f278e.e16935ceed87c6ed.40a9461cd15f6f14.85b2014f124d50a7
     5811ad4cd223e8e7.6bb97ee1df29edf3.2242213084af47e8.b4c87fdaa0b56dd5
     5184b3b13c95cd3d
-VSQRTPD_128(mem)
+VBLENDPS_128_2of3(mem)
   before
     36b219c002f92c0b.7b93af9be68969cc.90d47c772c0a7508.186342fb7c2b01b1
     401e2df30dee456c.fbd1b003e92ce6e8.2c88a97bf134195b.7d5aa4e9545ed81c
@@ -25913,12 +25913,12 @@
     e73229bd38bc69df
   after
     36b219c002f92c0b.7b93af9be68969cc.90d47c772c0a7508.186342fb7c2b01b1
-    0000000000000000.0000000000000000.fff8000000000000.2c28d3acdb50b3f1
-    4b946b37797ed58c.3515acf077999be8.1c9f83d849b69616.af714366a9d50ad5
+    401e2df30dee456c.fbd1b003e92ce6e8.2c88a97bf134195b.7d5aa4e9545ed81c
+    0000000000000000.0000000000000000.90d47c77f134195b.7d5aa4e97c2b01b1
     33e0507663b89797.86aca0ce2b5bc378.3ae6857c5199a865.09f51bde161bd187
     e73229bd38bc69df
 
-VSQRTPD_256(reg)
+VBLENDPS_128_3of3(reg)
   before
     a574686faa441089.d4cd579de7a549b8.48e28709a1ff9b43.63292c5224eb0a76
     9e07d46109400030.0a28fc992053a51b.d8025c0d760f5ff6.7334f246dfb77a72
@@ -25926,12 +25926,12 @@
     b54e24b1fcc2ad27.a55911bc22204d5a.d234c621aca999c2.b8d2d0387bef6ee2
     a5fcdf0e94726cac
   after
-    a574686faa441089.d4cd579de7a549b8.48e28709a1ff9b43.63292c5224eb0a76
-    3812eff85eb88877.fff8000000000000.fff8000000000000.4361967758653696
+    0000000000000000.0000000000000000.925a1e4746194a3c.7334f246dfb77a72
+    9e07d46109400030.0a28fc992053a51b.d8025c0d760f5ff6.7334f246dfb77a72
     303669fdf03c7681.b1bebb552acd68ee.925a1e4746194a3c.46d355449d0ab288
     b54e24b1fcc2ad27.a55911bc22204d5a.d234c621aca999c2.b8d2d0387bef6ee2
     a5fcdf0e94726cac
-VSQRTPD_256(mem)
+VBLENDPS_128_3of3(mem)
   before
     e91efeb304a06614.8b9bffe8c860e2cf.c2c579bc2357118e.f5de520944498834
     6004aa11e8841843.0d69f80df0a15124.e4d06f404a7e70b4.55a2bc6aab87533d
@@ -25940,12 +25940,12 @@
     8187109bce6a319e
   after
     e91efeb304a06614.8b9bffe8c860e2cf.c2c579bc2357118e.f5de520944498834
-    fff8000000000000.fff8000000000000.fff8000000000000.fff8000000000000
-    e67a5e165c2a4068.96040a8e111236d4.e7456f34b2a226f8.4fcd02b07cef358a
+    6004aa11e8841843.0d69f80df0a15124.e4d06f404a7e70b4.55a2bc6aab87533d
+    0000000000000000.0000000000000000.c2c579bc2357118e.f5de520944498834
     574c96ac7b9f98ad.84b832d6c73ecd88.a7eff58478ceee87.3faa2047540c6bc6
     8187109bce6a319e
 
-VSQRTPD_256(reg)
+VBLENDPS_128_3of3(reg)
   before
     71aed0188695c3be.8e46cec161eedd3e.31d16a51adb151ef.009b7e1cb70e858d
     6a6d5b2a1a1a5cd1.693382402b23cb48.fb9ab06c5ff8ffb2.ce1585e88c6fa735
@@ -25953,12 +25953,12 @@
     ecdec2be3f609682.781a502cd9719076.516f532d992fc703.38a3fdcd66c17b1e
     8d4e67bea3cba5b6
   after
-    71aed0188695c3be.8e46cec161eedd3e.31d16a51adb151ef.009b7e1cb70e858d
-    fff8000000000000.fff8000000000000.3e2752993c1ebb96.fff8000000000000
+    0000000000000000.0000000000000000.3c60ff917a9e1280.ce1585e88c6fa735
+    6a6d5b2a1a1a5cd1.693382402b23cb48.fb9ab06c5ff8ffb2.ce1585e88c6fa735
     ca0ead3d23843984.c3e02f15f44b1df7.3c60ff917a9e1280.ed2986d512fc10ac
     ecdec2be3f609682.781a502cd9719076.516f532d992fc703.38a3fdcd66c17b1e
     8d4e67bea3cba5b6
-VSQRTPD_256(mem)
+VBLENDPS_128_3of3(mem)
   before
     c7f83f92e5254aa1.2c2997170a38ae78.63ab6171f6a1e0f2.9713a9ad59385ae8
     c16b013749db250a.e63a27b61f9bbe12.625fdfd065e8c997.6898fc7b554407da
@@ -25967,12 +25967,12 @@
     bc63bbf9cdf400ba
   after
     c7f83f92e5254aa1.2c2997170a38ae78.63ab6171f6a1e0f2.9713a9ad59385ae8
-    fff8000000000000.360c9dbe893b333a.51cd99b074acc674.fff8000000000000
-    59742998ebfaf31e.765f6e051a1202fb.5004443545510690.214a47052adf0a86
+    c16b013749db250a.e63a27b61f9bbe12.625fdfd065e8c997.6898fc7b554407da
+    0000000000000000.0000000000000000.63ab6171f6a1e0f2.9713a9ad59385ae8
     6adf33a1e68d7009.37e26872982bb5e0.08650e8dafe8540a.1e7489b573969e97
     bc63bbf9cdf400ba
 
-VSQRTPD_256(reg)
+VBLENDPS_128_3of3(reg)
   before
     5563da3cd3856b9b.cf789c3e56a058f6.871011683571156c.684db8c2c1ba6f30
     46c0e3ea22d61de5.660bdf5b58406611.c13666538c715c4c.4b89bec297d2122f
@@ -25980,12 +25980,12 @@
     a0c1a03808e54166.964de3c68055e785.629401b8d9cc91b7.092dcfcffd05e367
     9c2dd2b5c53889f7
   after
-    5563da3cd3856b9b.cf789c3e56a058f6.871011683571156c.684db8c2c1ba6f30
-    fff8000000000000.24a8f652a02d8284.4045aeea4ad6ef94.fff8000000000000
+    0000000000000000.0000000000000000.409d629f39b6c62b.4b89bec297d2122f
+    46c0e3ea22d61de5.660bdf5b58406611.c13666538c715c4c.4b89bec297d2122f
     ebc6d16f55725045.096378e407785788.409d629f39b6c62b.8ce59d774c3cfa32
     a0c1a03808e54166.964de3c68055e785.629401b8d9cc91b7.092dcfcffd05e367
     9c2dd2b5c53889f7
-VSQRTPD_256(mem)
+VBLENDPS_128_3of3(mem)
   before
     22b12115c0e2a710.c1fc4dafd8bc2bf5.e7969cebdee2d134.81663f0b073ff799
     788439db0b0efade.aac5d24161824b9e.da0820403e2bd2c2.fb5e1902609c3580
@@ -25994,12 +25994,12 @@
     1b2921fe81a35500
   after
     22b12115c0e2a710.c1fc4dafd8bc2bf5.e7969cebdee2d134.81663f0b073ff799
-    31508e140e65011a.fff8000000000000.fff8000000000000.fff8000000000000
-    787394f3c2c83e8d.b7662d5b3ec3dd0c.496feab2bb3ca65b.2bc98a0a7f6f8615
+    788439db0b0efade.aac5d24161824b9e.da0820403e2bd2c2.fb5e1902609c3580
+    0000000000000000.0000000000000000.e7969cebdee2d134.81663f0b073ff799
     004ab049001c2e48.442c59670b0c1dec.1199762c7222092a.6cf48e9001422807
     1b2921fe81a35500
 
-VRSQRTSS_128(reg)
+VBLENDPD_128_1of2(reg)
   before
     95b43fc29c1d49ad.ead508cae117873b.ad6353d365e846e9.0f5141997ee8b65c
     34e3e547ed3d42b9.13e0186082c40594.4e57150ae8e495b0.1d62c5e7fc9b6a1c
@@ -26007,12 +26007,12 @@
     5559b644a29c2ea0.93a5517f72665f22.a8a5e689d669954b.dcc2edd3bcf5d6f9
     45a9884936b4066d
   after
-    0000000000000000.0000000000000000.4e57150ae8e495b0.1d62c5e75b919000
+    0000000000000000.0000000000000000.4e57150ae8e495b0.1d62c5e7fc9b6a1c
     34e3e547ed3d42b9.13e0186082c40594.4e57150ae8e495b0.1d62c5e7fc9b6a1c
     56010ef9108e7ad1.57375df9fe30647d.83539d782e8b46ed.189980010745e197
     5559b644a29c2ea0.93a5517f72665f22.a8a5e689d669954b.dcc2edd3bcf5d6f9
     45a9884936b4066d
-VRSQRTSS_128(mem)
+VBLENDPD_128_1of2(mem)
   before
     301ace5091902d20.8e38d9943ff499d3.a1f872e0f972b3b0.1997eca97a0abd77
     77e139d2ea94073d.5dea73558221f916.5efa3b07b0601c53.3176ac44b6fbfb1c
@@ -26022,11 +26022,11 @@
   after
     301ace5091902d20.8e38d9943ff499d3.a1f872e0f972b3b0.1997eca97a0abd77
     77e139d2ea94073d.5dea73558221f916.5efa3b07b0601c53.3176ac44b6fbfb1c
-    0000000000000000.0000000000000000.5efa3b07b0601c53.3176ac44222de800
+    0000000000000000.0000000000000000.5efa3b07b0601c53.1997eca97a0abd77
     8c9f73fb0446c268.2ef7fedb6b2b827a.553eb6561c151c86.cb2b469b68fba883
     0498193015228f9d
 
-VRSQRTSS_128(reg)
+VBLENDPD_128_1of2(reg)
   before
     542395efcbc87ce1.12303a7afe0b1ccd.e7e9e6774a2025f3.4717605809f22b6e
     1916b7462679aafb.654616246529194d.a6df36353e1bab2c.58d1a2cf96e23e1b
@@ -26034,12 +26034,12 @@
     6e67d968392fbd5e.e23302aeeb9dea4c.a602fac3dc4f538d.4714decffd296473
     dd35d1311098ed76
   after
-    0000000000000000.0000000000000000.a6df36353e1bab2c.58d1a2cfffc00000
+    0000000000000000.0000000000000000.a6df36353e1bab2c.58d1a2cf96e23e1b
     1916b7462679aafb.654616246529194d.a6df36353e1bab2c.58d1a2cf96e23e1b
     adbe799fc1c25795.61ad85e755ab7413.c723e87fe6a651d1.6436f8a8def013b9
     6e67d968392fbd5e.e23302aeeb9dea4c.a602fac3dc4f538d.4714decffd296473
     dd35d1311098ed76
-VRSQRTSS_128(mem)
+VBLENDPD_128_1of2(mem)
   before
     02664cb833496ced.b65dd30c294a1800.c4a30965420b3624.9fc8676cbca2ec0d
     9273cb5281499b05.e3ec61f72da1a628.e3c817f8770216c6.0ec12be6232a59fc
@@ -26049,11 +26049,11 @@
   after
     02664cb833496ced.b65dd30c294a1800.c4a30965420b3624.9fc8676cbca2ec0d
     9273cb5281499b05.e3ec61f72da1a628.e3c817f8770216c6.0ec12be6232a59fc
-    0000000000000000.0000000000000000.e3c817f8770216c6.0ec12be6ffc00000
+    0000000000000000.0000000000000000.e3c817f8770216c6.9fc8676cbca2ec0d
     6250c56b0f63fcc7.58042d52e33146b8.47643463e9b97d1a.be7baafdf3099eda
     b7d45b729679ef20
 
-VRSQRTSS_128(reg)
+VBLENDPD_128_1of2(reg)
   before
     969055692e4e0386.5bb839c38896a5c8.5825639bcd82d078.45733c125e917c24
     b7fb914c591416b7.2f2ca1dd9b47ef1b.ad0f1fda3c3e7d6e.f0683b4d2022fea9
@@ -26061,12 +26061,12 @@
     2f0ec38ad7a52d2d.d7683d0806545661.c16e15ee16292aab.bc330a19fe9c7bd2
     96a1d380519deece
   after
-    0000000000000000.0000000000000000.ad0f1fda3c3e7d6e.f0683b4d39026800
+    0000000000000000.0000000000000000.ad0f1fda3c3e7d6e.f0683b4d2022fea9
     b7fb914c591416b7.2f2ca1dd9b47ef1b.ad0f1fda3c3e7d6e.f0683b4d2022fea9
     76610c89b3586660.ba7879a5678296ea.b10e5b7ccaf28746.240eab014c76bfd4
     2f0ec38ad7a52d2d.d7683d0806545661.c16e15ee16292aab.bc330a19fe9c7bd2
     96a1d380519deece
-VRSQRTSS_128(mem)
+VBLENDPD_128_1of2(mem)
   before
     8d2582246187d3f5.3d4db1bd6188a8c9.64c86af094c8eaad.3a7a489bb96fa44a
     7c8b94f04b65e672.fe6cd28dee8c12e1.3b637b4a2dea0ffa.7680f0ee52512fcf
@@ -26076,11 +26076,11 @@
   after
     8d2582246187d3f5.3d4db1bd6188a8c9.64c86af094c8eaad.3a7a489bb96fa44a
     7c8b94f04b65e672.fe6cd28dee8c12e1.3b637b4a2dea0ffa.7680f0ee52512fcf
-    0000000000000000.0000000000000000.3b637b4a2dea0ffa.7680f0eeffc00000
+    0000000000000000.0000000000000000.3b637b4a2dea0ffa.3a7a489bb96fa44a
     b62dcdb01c2e8a21.05759fb38028a633.3c7e3905f36afb45.aaa5903bd0166b38
     5a5d7f0ced129375
 
-VRSQRTPS_128(reg)
+VBLENDPD_128_2of2(reg)
   before
     3e3ed4346fd9bd48.b900ed7c3a3192aa.04f841e3bcd748c5.1c95df3e57e03a9c
     b3948b1ff2f8255d.24e55f21a258b93a.2589085f6bd9c983.b81858993733faa3
@@ -26088,12 +26088,12 @@
     bbce0bef686a9dfa.a6162ba2be44531e.3c09edee90ff5b32.8f91b865d9a6ec73
     842096aed3dd9694
   after
-    3e3ed4346fd9bd48.b900ed7c3a3192aa.04f841e3bcd748c5.1c95df3e57e03a9c
-    0000000000000000.0000000000000000.ffc000004ad5d800.ffc00000ffc00000
+    0000000000000000.0000000000000000.c376ed9428b76719.b81858993733faa3
+    b3948b1ff2f8255d.24e55f21a258b93a.2589085f6bd9c983.b81858993733faa3
     13aa9e3a11f9065f.d5a9a0896fb0bafd.c376ed9428b76719.ead22202ae71f786
     bbce0bef686a9dfa.a6162ba2be44531e.3c09edee90ff5b32.8f91b865d9a6ec73
     842096aed3dd9694
-VRSQRTPS_128(mem)
+VBLENDPD_128_2of2(mem)
   before
     a34a39c9b822b115.074accac94d726db.74f87b56aa213ec9.ea9005da3e3ce47b
     cadc1ca2a581f823.536be0db31cbddae.1c1d0f935052372c.2b5530c2cffb3ca0
@@ -26102,12 +26102,12 @@
     f015fca2e8b77beb
   after
     a34a39c9b822b115.074accac94d726db.74f87b56aa213ec9.ea9005da3e3ce47b
-    0000000000000000.0000000000000000.24b7c000ffc00000.ffc0000040150000
-    d3a2bb25b50728ea.fa7d40eadad2fd1f.78506044cbe3fb71.59a56a14dec7a04c
+    cadc1ca2a581f823.536be0db31cbddae.1c1d0f935052372c.2b5530c2cffb3ca0
+    0000000000000000.0000000000000000.74f87b56aa213ec9.ea9005da3e3ce47b
     9b68923f05bffd95.5acbe9442b78c4d9.655cec5438e046c4.d2ccb03b082c4c2c
     f015fca2e8b77beb
 
-VRSQRTPS_128(reg)
+VBLENDPD_128_2of2(reg)
   before
     10ce4cb71af36b36.fef91ddab1b63351.cea3d854c14a6b88.c00e2db1b256d452
     8f419be53b6c56b8.d923d9e4d3f78549.b24f088837d331d9.6332a14655506147
@@ -26115,12 +26115,12 @@
     1588273db9470e14.626dd1f1ef8870a0.3a571c0a353c0510.f40010c989026614
     9a42038e51d15644
   after
-    10ce4cb71af36b36.fef91ddab1b63351.cea3d854c14a6b88.c00e2db1b256d452
-    0000000000000000.0000000000000000.2e23380049e4c000.496d70003fc36800
+    0000000000000000.0000000000000000.621d754b2aa05078.6332a14655506147
+    8f419be53b6c56b8.d923d9e4d3f78549.b24f088837d331d9.6332a14655506147
     c7bbe698e7af781e.06b041478a8eb0aa.621d754b2aa05078.2b94c4003edba8ce
     1588273db9470e14.626dd1f1ef8870a0.3a571c0a353c0510.f40010c989026614
     9a42038e51d15644
-VRSQRTPS_128(mem)
+VBLENDPD_128_2of2(mem)
   before
     f925183cb255368b.d6f45c3e4dc05445.c92605cd21ef8056.954af72ff5338c4e
     ed76cbbdc998c015.644b800840a7865e.17a75ac739d29ef9.d1410427051120de
@@ -26129,12 +26129,12 @@
     5c3e2a3b3091882e
   after
     f925183cb255368b.d6f45c3e4dc05445.c92605cd21ef8056.954af72ff5338c4e
-    0000000000000000.0000000000000000.ffc000004e3b2000.ffc00000ffc00000
-    530298ffb2a9b10d.1cd88f082e87e00a.28bc4bcb553a84b4.498a3e5e0263fe6b
+    ed76cbbdc998c015.644b800840a7865e.17a75ac739d29ef9.d1410427051120de
+    0000000000000000.0000000000000000.c92605cd21ef8056.954af72ff5338c4e
     0593fcec8791c4a0.5ae985a8b1ec9df6.d83153c59135eeb4.5870a14187b462a2
     5c3e2a3b3091882e
 
-VRSQRTPS_128(reg)
+VBLENDPD_128_2of2(reg)
   before
     b041d4b79b85abbc.dff57272675eb6f9.7ac85f566863face.03d1f1a208ce9a25
     afc59b23611c08f7.bff6767c6b1c4345.d8c2187dec77323d.85699e4cd7124232
@@ -26142,12 +26142,12 @@
     2280707874655f27.fe0118cc55971d65.be3717e5d1a72792.feb119bbeac878d2
     adf9df5767537ebd
   after
-    b041d4b79b85abbc.dff57272675eb6f9.7ac85f566863face.03d1f1a208ce9a25
-    0000000000000000.0000000000000000.ffc00000ffc00000.41cdf00052aca800
+    0000000000000000.0000000000000000.d023ac88dcb583f0.85699e4cd7124232
+    afc59b23611c08f7.bff6767c6b1c4345.d8c2187dec77323d.85699e4cd7124232
     b7167bea20e3db8c.806184f6b2d527b0.d023ac88dcb583f0.3ac5d8b0190ca208
     2280707874655f27.fe0118cc55971d65.be3717e5d1a72792.feb119bbeac878d2
     adf9df5767537ebd
-VRSQRTPS_128(mem)
+VBLENDPD_128_2of2(mem)
   before
     2369a672acb871f5.4e4e7739f72ed173.15a3afea736de291.fe4a55ff6adc5bd0
     3bcce8f7d3030da5.95ce8a9948ca6d1d.a113c43d2564325f.eca7634240dd5a56
@@ -26156,12 +26156,12 @@
     6278403a5329774c
   after
     2369a672acb871f5.4e4e7739f72ed173.15a3afea736de291.fe4a55ff6adc5bd0
-    0000000000000000.0000000000000000.546260002584c800.ffc0000029c32000
-    d3ef23d2fb410dfa.554aa70401c66fd1.7e1dd3af8987c9fc.e49b3c1bf13861cf
+    3bcce8f7d3030da5.95ce8a9948ca6d1d.a113c43d2564325f.eca7634240dd5a56
+    0000000000000000.0000000000000000.15a3afea736de291.fe4a55ff6adc5bd0
     c69fd2ef3e7d2e1f.e80fcae7beae123a.878d582dbbe26293.4272dcf41978ace8
     6278403a5329774c
 
-VRSQRTPS_256(reg)
+VBLENDPD_256_1of3(reg)
   before
     a0f9625a3cd8fda8.f0a6713ab8c32c41.ab69edac1c0c9304.9a2ed0a4d682ba52
     574140be6f107ba8.2cd07c9f8620c38b.fba30ec1b66e2edd.92ceb5fff7728d62
@@ -26169,12 +26169,12 @@
     a5551d07244d4f42.4fc2c8688c4daa4a.adec3787106ca066.a036bc10b873922b
     6f97d49f919c3d3c
   after
-    a0f9625a3cd8fda8.f0a6713ab8c32c41.ab69edac1c0c9304.9a2ed0a4d682ba52
-    ffc00000ffc00000.32bcc000ffc00000.462d98004a88d000.3a17280042514000
+    574140be6f107ba8.2cd07c9f8620c38b.fba30ec1b66e2edd.92ceb5fff7728d62
+    574140be6f107ba8.2cd07c9f8620c38b.fba30ec1b66e2edd.92ceb5fff7728d62
     e59bd5d4885e2df7.58eb700ac39fae2a.320b289029601e6f.4a37852939bf96f2
     a5551d07244d4f42.4fc2c8688c4daa4a.adec3787106ca066.a036bc10b873922b
     6f97d49f919c3d3c
-VRSQRTPS_256(mem)
+VBLENDPD_256_1of3(mem)
   before
     92264bc2df46534f.f3b915c3df691c34.ec2000a3fc347316.c89137110820f06f
     e7af9b65bf7c8f91.2a14b774533fd17a.0dd294a92f62c4bb.df47259aac084a36
@@ -26183,12 +26183,12 @@
     a5c65567bb6ae9b3
   after
     92264bc2df46534f.f3b915c3df691c34.ec2000a3fc347316.c89137110820f06f
-    ffc00000ffc00000.ffc00000ffc00000.ffc00000ffc00000.ffc000005b217000
-    48fd42744d4aae2d.a8b201861f59aabf.8ca4006543e35a65.4f5afb8e99afe966
+    e7af9b65bf7c8f91.2a14b774533fd17a.0dd294a92f62c4bb.df47259aac084a36
+    e7af9b65bf7c8f91.2a14b774533fd17a.ec2000a3fc347316.c89137110820f06f
     93ddbcdca4bc6c50.c8dfee65dd46e2b0.4762c1c251c2f13f.7216b7596aa10aac
     a5c65567bb6ae9b3
 
-VRSQRTPS_256(reg)
+VBLENDPD_256_1of3(reg)
   before
     44b8cf252997c228.a21c8387e0df8425.e5e67a7d298fb6f9.18d852ae770b4576
     ab3623fd50b3d0b7.538415631ebeb3d9.5d15a23ba0c26245.ddd22f14d1ca1135
@@ -26196,12 +26196,12 @@
     410a46af36e97dd1.0601875a0de1468d.ca16b3557d143199.ae80befe8edc04fd
     74cd685a2a47a25e
   after
-    44b8cf252997c228.a21c8387e0df8425.e5e67a7d298fb6f9.18d852ae770b4576
-    43f3a800ffc00000.ffc0000022872000.ffc00000ffc00000.27241000222d1000
+    ab3623fd50b3d0b7.538415631ebeb3d9.5d15a23ba0c26245.ddd22f14d1ca1135
+    ab3623fd50b3d0b7.538415631ebeb3d9.5d15a23ba0c26245.ddd22f14d1ca1135
     368d4c5ccb4a500b.80e1ed5a7965b598.8ab66109dd6a2241.701bd4e07a0c12a9
     410a46af36e97dd1.0601875a0de1468d.ca16b3557d143199.ae80befe8edc04fd
     74cd685a2a47a25e
-VRSQRTPS_256(mem)
+VBLENDPD_256_1of3(mem)
   before
     9cce4ee16a57a9f8.28f60d612e1b95b4.c2af5f4ef83d21e5.778194891b4bccf8
     034fec7d681bd5f6.47a09ddd4e6dd261.8eb6f221538603cc.ee430013539b2f0b
@@ -26210,12 +26210,12 @@
     a98961e7b49c5d30
   after
     9cce4ee16a57a9f8.28f60d612e1b95b4.c2af5f4ef83d21e5.778194891b4bccf8
-    ffc000002a0b7000.4ab8a00048243000.ffc00000ffc00000.237e7000518f7800
-    851cbe1c439ce285.fa53f39133697184.47e3bbc13cc7a86d.8ca8f45ec391957d
+    034fec7d681bd5f6.47a09ddd4e6dd261.8eb6f221538603cc.ee430013539b2f0b
+    034fec7d681bd5f6.47a09ddd4e6dd261.c2af5f4ef83d21e5.778194891b4bccf8
     ff0041a815e88bd0.9c5a0ae8799eadc8.c9023619cf0ccbf4.abfb6bd604b83bfb
     a98961e7b49c5d30
 
-VRSQRTPS_256(reg)
+VBLENDPD_256_1of3(reg)
   before
     e09fd2fd6fca37c9.4bc9f00ffa0a8d04.8b02de4eba95c3d9.f1dfdf162761298f
     ad87bb84d0cd0472.4641473c0f0fa44d.22976c2f95dcef65.994633a260d37e67
@@ -26223,12 +26223,12 @@
     7affe195f5836aa2.b971de9836ef00cc.b7b8a21383887898.dce1c81be83cfc85
     2fad02df6e4b9d21
   after
-    e09fd2fd6fca37c9.4bc9f00ffa0a8d04.8b02de4eba95c3d9.f1dfdf162761298f
-    28f3d8002599e800.ffc0000027b33800.ffc00000ffc00000.ffc00000ffc00000
+    ad87bb84d0cd0472.4641473c0f0fa44d.22976c2f95dcef65.994633a260d37e67
+    ad87bb84d0cd0472.4641473c0f0fa44d.22976c2f95dcef65.994633a260d37e67
     6c8d16e8733101d6.cc35c21b6f028bd6.bd65aef8a3fe6d16.9e03acaa976e86ab
     7affe195f5836aa2.b971de9836ef00cc.b7b8a21383887898.dce1c81be83cfc85
     2fad02df6e4b9d21
-VRSQRTPS_256(mem)
+VBLENDPD_256_1of3(mem)
   before
     7334d7e445a625ad.312817f8f14e7a81.e9c1159f82e2bd5a.6edc43edce054d98
     8440c1148a5a5052.ee53b57c041e6f20.38f0e51c6ce87ead.3d1c8ef3220128c2
@@ -26237,12 +26237,12 @@
     d1833c3e696933f1
   after
     7334d7e445a625ad.312817f8f14e7a81.e9c1159f82e2bd5a.6edc43edce054d98
-    259850003c60a800.469df800ffc00000.ffc00000ffc00000.27c32000ffc00000
-    3e9d3e5d5872d93f.0dcdb58cca80832b.82ccc9fb120d01f1.7fc67d8f1b0845c1
+    8440c1148a5a5052.ee53b57c041e6f20.38f0e51c6ce87ead.3d1c8ef3220128c2
+    8440c1148a5a5052.ee53b57c041e6f20.e9c1159f82e2bd5a.6edc43edce054d98
     7d19c9aaccfa7d9e.eae21596ddfff24d.a31f3e28905b0051.92240e2f54a7df42
     d1833c3e696933f1
 
-VMOVDQU_GtoE_256(reg)
+VBLENDPD_256_2of3(reg)
   before
     972f0328f7db7d79.1d7fdee701fff79b.e1ded005dc28fa33.77b6be9001e037fa
     42735f599a88f887.fa9afa00148c0564.4e0de3456085d588.da5dc71d81a76417
@@ -26250,12 +26250,12 @@
     b2f7c8408cc474e3.da223377426fc804.fa33fde86d11f632.bd0a625b212d8b60
     f4a9ebe37803fee3
   after
-    972f0328f7db7d79.1d7fdee701fff79b.e1ded005dc28fa33.77b6be9001e037fa
+    42735f599a88f887.f03797e120ad6122.8dbb48c208a4bff9.da5dc71d81a76417
     42735f599a88f887.fa9afa00148c0564.4e0de3456085d588.da5dc71d81a76417
-    b2f7c8408cc474e3.da223377426fc804.fa33fde86d11f632.bd0a625b212d8b60
+    2c9d4d3dedfce1c6.f03797e120ad6122.8dbb48c208a4bff9.a8e0d4bd2dbd41d5
     b2f7c8408cc474e3.da223377426fc804.fa33fde86d11f632.bd0a625b212d8b60
     f4a9ebe37803fee3
-VMOVDQU_GtoE_256(mem)
+VBLENDPD_256_2of3(mem)
   before
     2b87ed414e4c558b.31cfccce146bed89.962749ac95ddf534.f1c3fd232d57b4de
     3d71e361c0134d83.036f5554217d8765.ff12556d3603a5de.ceb544dfe40236aa
@@ -26263,13 +26263,13 @@
     61999b97e64c1016.1439e7f43714116e.47c94145cfa97e53.a9f2988ba5b87550
     60d49c53e7dbaa83
   after
-    0633492fe965a2f8.86245f3c4d877f23.f1aed4a740ee942f.ed56ce892d9eb841
+    2b87ed414e4c558b.31cfccce146bed89.962749ac95ddf534.f1c3fd232d57b4de
     3d71e361c0134d83.036f5554217d8765.ff12556d3603a5de.ceb544dfe40236aa
-    0633492fe965a2f8.86245f3c4d877f23.f1aed4a740ee942f.ed56ce892d9eb841
+    2b87ed414e4c558b.036f5554217d8765.ff12556d3603a5de.f1c3fd232d57b4de
     61999b97e64c1016.1439e7f43714116e.47c94145cfa97e53.a9f2988ba5b87550
     60d49c53e7dbaa83
 
-VMOVDQU_GtoE_256(reg)
+VBLENDPD_256_2of3(reg)
   before
     6d4ad84c8f949385.2c6f5685d2d65208.0afce8e678b078f3.df2d183200401e75
     2c9e48e13a6e6c03.4280f5e5ca0f25fa.c4b75e80afe8f25d.94a7d55cefc032c2
@@ -26277,12 +26277,12 @@
     2f13b09407b5dc21.be87cfac4cba6d92.f5499a5968590993.c40df21474a8a08c
     f7914a7a43297360
   after
-    6d4ad84c8f949385.2c6f5685d2d65208.0afce8e678b078f3.df2d183200401e75
+    2c9e48e13a6e6c03.7e9af4a4e901451a.9fb8452d7547b85a.94a7d55cefc032c2
     2c9e48e13a6e6c03.4280f5e5ca0f25fa.c4b75e80afe8f25d.94a7d55cefc032c2
-    2f13b09407b5dc21.be87cfac4cba6d92.f5499a5968590993.c40df21474a8a08c
+    f81de68084f570a8.7e9af4a4e901451a.9fb8452d7547b85a.4103f4aeb7347366
     2f13b09407b5dc21.be87cfac4cba6d92.f5499a5968590993.c40df21474a8a08c
     f7914a7a43297360
-VMOVDQU_GtoE_256(mem)
+VBLENDPD_256_2of3(mem)
   before
     b85a78cd3fc2a910.2ccca189623bec19.dc1402eb0e465a8e.23b7587024ab1fb6
     e135f8f78580fec6.4a94b5cb2f13db3d.b60d0a4c4bb0c83b.854e7bde44c8386f
@@ -26290,13 +26290,13 @@
     df52df845d98f4f5.5d8037e790e549b8.0a728624a94e1657.5526e06f22945d52
     7bff1b6b175be2d3
   after
-    50ef47e5306d2dae.e7b7e8c70ac7e639.263e62bb200473c5.7759ff0f653c8d6a
+    b85a78cd3fc2a910.2ccca189623bec19.dc1402eb0e465a8e.23b7587024ab1fb6
     e135f8f78580fec6.4a94b5cb2f13db3d.b60d0a4c4bb0c83b.854e7bde44c8386f
-    50ef47e5306d2dae.e7b7e8c70ac7e639.263e62bb200473c5.7759ff0f653c8d6a
+    b85a78cd3fc2a910.4a94b5cb2f13db3d.b60d0a4c4bb0c83b.23b7587024ab1fb6
     df52df845d98f4f5.5d8037e790e549b8.0a728624a94e1657.5526e06f22945d52
     7bff1b6b175be2d3
 
-VMOVDQU_GtoE_256(reg)
+VBLENDPD_256_2of3(reg)
   before
     4531ab6de11e599a.6c2a3ebe270a0cc7.0a3c9c985cf83f67.3c77f273019b6e1e
     0f088ce31c67fe53.d145df81abd1344f.483715470b8d06f2.9917239444f63745
@@ -26304,12 +26304,12 @@
     13d532d752c1c049.9670d84f4f8c9f33.eb1a314b7f6af24a.455bc1fcfe080a66
     4b97261cacd68db7
   after
-    4531ab6de11e599a.6c2a3ebe270a0cc7.0a3c9c985cf83f67.3c77f273019b6e1e
+    0f088ce31c67fe53.eb6e3fb804f826ba.75bd9e5e382fd804.9917239444f63745
     0f088ce31c67fe53.d145df81abd1344f.483715470b8d06f2.9917239444f63745
-    13d532d752c1c049.9670d84f4f8c9f33.eb1a314b7f6af24a.455bc1fcfe080a66
+    35d0ba3763c50ca9.eb6e3fb804f826ba.75bd9e5e382fd804.fe1f94738f6c2cf9
     13d532d752c1c049.9670d84f4f8c9f33.eb1a314b7f6af24a.455bc1fcfe080a66
     4b97261cacd68db7
-VMOVDQU_GtoE_256(mem)
+VBLENDPD_256_2of3(mem)
   before
     ec9e3fbdb5e27119.0562ee2e86e956df.af182832a7975be7.089acc797dcb8f6f
     053e89cd363971b8.67c5eca89ac80916.1032aa4d29281602.26886954ceddec20
@@ -26317,13 +26317,13 @@
     0a749de60ef6b85a.ea389cb5d4dcba19.1dec35db1805771b.d9e29fc1d745d6d4
     25e52e2bc7b3da30
   after
-    70417f374ae64abf.954827b12bea179b.968ada8cf0488baf.a23206480d2c4508
+    ec9e3fbdb5e27119.0562ee2e86e956df.af182832a7975be7.089acc797dcb8f6f
     053e89cd363971b8.67c5eca89ac80916.1032aa4d29281602.26886954ceddec20
-    70417f374ae64abf.954827b12bea179b.968ada8cf0488baf.a23206480d2c4508
+    ec9e3fbdb5e27119.67c5eca89ac80916.1032aa4d29281602.089acc797dcb8f6f
     0a749de60ef6b85a.ea389cb5d4dcba19.1dec35db1805771b.d9e29fc1d745d6d4
     25e52e2bc7b3da30
 
-VCVTPS2PD_256(reg)
+VBLENDPD_256_3of3(reg)
   before
     e387b1f279028ec7.afa35fc89d7476b6.c4e14520322a2e3d.81243626be6a9572
     6f1323838abf2e46.3b9a42c8146c42ff.7e8f205fe05eb1b3.9ffd585afe84a3df
@@ -26331,12 +26331,12 @@
     621dc4af37b020aa.781057d227fbee07.01295a059eadcf43.74c6f529b9047aac
     e44d669d6d83bb65
   after
-    e387b1f279028ec7.afa35fc89d7476b6.c4e14520322a2e3d.81243626be6a9572
+    25d780489575f558.8a25c0d28eebd661.7e8f205fe05eb1b3.9ffd585afe84a3df
     6f1323838abf2e46.3b9a42c8146c42ff.7e8f205fe05eb1b3.9ffd585afe84a3df
-    38252b40a0000000.bbd5b9e860000000.4698dea520000000.bf208f5580000000
+    25d780489575f558.8a25c0d28eebd661.738e28dc7b067d26.51441a61f25e5b8e
     621dc4af37b020aa.781057d227fbee07.01295a059eadcf43.74c6f529b9047aac
     e44d669d6d83bb65
-VCVTPS2PD_256(mem)
+VBLENDPD_256_3of3(mem)
   before
     7da5eaa82ae6dbe5.8033ec220cfdebe8.e12682b5fcab481d.83adb044e5e0e2b5
     1b9cfc380d399656.dc63f30faee792bd.a134be6529049ed0.54672807ed2af329
@@ -26346,11 +26346,11 @@
   after
     7da5eaa82ae6dbe5.8033ec220cfdebe8.e12682b5fcab481d.83adb044e5e0e2b5
     1b9cfc380d399656.dc63f30faee792bd.a134be6529049ed0.54672807ed2af329
-    c424d056a0000000.c7956903a0000000.b875b60880000000.c4bc1c56a0000000
+    7da5eaa82ae6dbe5.8033ec220cfdebe8.e12682b5fcab481d.83adb044e5e0e2b5
     d593bb94b3e0ccc2.be438e04cfc362de.966855e0f9e730bd.57a76bc6af33ffc5
     41c72e9aa00b7246
 
-VCVTPS2PD_256(reg)
+VBLENDPD_256_3of3(reg)
   before
     ea4c03a1c22bd278.aa2b6038ae4dbf14.fc8c1be486cd0482.8326a983d387e44e
     b081e547b11d5c08.f49182113fd93d08.e82076ed7aa5726e.370cfda37602852b
@@ -26358,12 +26358,12 @@
     ff2ec02063addcf1.57f7330e9084c989.3a578b2b8feca0cc.637f970f81b77d7c
     94a4d43222094c47
   after
-    ea4c03a1c22bd278.aa2b6038ae4dbf14.fc8c1be486cd0482.8326a983d387e44e
+    edb3d0f8086f4ba2.8f91a009819202cb.e82076ed7aa5726e.370cfda37602852b
     b081e547b11d5c08.f49182113fd93d08.e82076ed7aa5726e.370cfda37602852b
-    3f4af16560000000.b9fd941980000000.446ff2e1e0000000.b836efaf80000000
+    edb3d0f8086f4ba2.8f91a009819202cb.de4a9d8b49d6e74d.8ee5ce2efc64cf81
     ff2ec02063addcf1.57f7330e9084c989.3a578b2b8feca0cc.637f970f81b77d7c
     94a4d43222094c47
-VCVTPS2PD_256(mem)
+VBLENDPD_256_3of3(mem)
   before
     fc210183fa66f80f.403eb12c5f614ba1.278eb80a89b94f6d.57933d37e773d896
     76c29aee26d83d00.0d2fa0869719d460.dd24aceb883f50a4.934aad1deef8cd58
@@ -26373,11 +26373,11 @@
   after
     fc210183fa66f80f.403eb12c5f614ba1.278eb80a89b94f6d.57933d37e773d896
     76c29aee26d83d00.0d2fa0869719d460.dd24aceb883f50a4.934aad1deef8cd58
-    3cf1d70140000000.b93729eda0000000.42f267a6e0000000.c4ee7b12c0000000
+    fc210183fa66f80f.403eb12c5f614ba1.278eb80a89b94f6d.57933d37e773d896
     159f01c3e831800b.bce365d92dc323b5.6778ce08056db1b9.d558bc23762ad973
     9347521c30ef6824
 
-VCVTPS2PD_256(reg)
+VBLENDPD_256_3of3(reg)
   before
     dee2989d08e1a47c.f073c705b62ff77d.553e33a9c3cd61a4.f4cff51dbc2c8aef
     147388149b8cc728.4f9bea104873f6c8.eaabef78050ba851.d55479c6e96bce29
@@ -26385,12 +26385,12 @@
     ada95b92613fb42a.0517333526fe7f97.78e51ec3ff4f4593.07178d85129b8552
     10ed147247a3719b
   after
-    dee2989d08e1a47c.f073c705b62ff77d.553e33a9c3cd61a4.f4cff51dbc2c8aef
+    904720ed857d0dd3.0ce3e4d2b9093a17.eaabef78050ba851.d55479c6e96bce29
     147388149b8cc728.4f9bea104873f6c8.eaabef78050ba851.d55479c6e96bce29
-    471ca3d860000000.c7e9e8b260000000.38e2f1b0a0000000.3a5370aa40000000
+    904720ed857d0dd3.0ce3e4d2b9093a17.d77394b28f073667.e8d3d8efa7373890
     ada95b92613fb42a.0517333526fe7f97.78e51ec3ff4f4593.07178d85129b8552
     10ed147247a3719b
-VCVTPS2PD_256(mem)
+VBLENDPD_256_3of3(mem)
   before
     dd22eaa3615cb797.c9e73670cb5ff6d9.14035227aa5d8174.294c8917ee6f1280
     4c808a057dd11471.3e4babf36068108b.1773bd936132fbd9.46f3d11afaf2d8db
@@ -26400,11 +26400,11 @@
   after
     dd22eaa3615cb797.c9e73670cb5ff6d9.14035227aa5d8174.294c8917ee6f1280
     4c808a057dd11471.3e4babf36068108b.1773bd936132fbd9.46f3d11afaf2d8db
-    3a806a44e0000000.bd4bb02e80000000.3d299122e0000000.c5cde25000000000
+    dd22eaa3615cb797.c9e73670cb5ff6d9.14035227aa5d8174.294c8917ee6f1280
     7be9180829210371.a7b958997966bbab.640d6889db704aee.3535eaded851428a
     bd67b277e1465e36
 
-VCVTTPS2DQ_128(reg)
+VPBLENDW_128_0x00(reg)
   before
     220a476e77ce63ff.f58dfe82f1130cef.535a87943573c470.68d09fecd4f196f5
     bf6aa63135758e92.7f8a9fdc2bf11cfb.c85142e48b9994e8.ce47137872184b34
@@ -26412,12 +26412,12 @@
     1190aec89b5246c5.37c2ffe062a34070.8176483278627da5.3481a0bf0788e00d
     ebdbb15137ea37ff
   after
-    220a476e77ce63ff.f58dfe82f1130cef.535a87943573c470.68d09fecd4f196f5
+    0000000000000000.0000000000000000.c85142e48b9994e8.ce47137872184b34
     bf6aa63135758e92.7f8a9fdc2bf11cfb.c85142e48b9994e8.ce47137872184b34
-    0000000000000000.0000000000000000.0000000080000000.0000000000000000
+    f0d2c92bb8c81b9a.f6ad7602f2c8efc2.63ec83f4186569c1.733e401acff125d9
     1190aec89b5246c5.37c2ffe062a34070.8176483278627da5.3481a0bf0788e00d
     ebdbb15137ea37ff
-VCVTTPS2DQ_128(mem)
+VPBLENDW_128_0x00(mem)
   before
     751aedbe7a22e7d9.7eee51747ba04abc.1c95b662988fcc30.7c3a8c09461c0d40
     ae08d3f1ed3dacc7.9339ac9bf33d642e.82f21774b0974f2f.b1854be51f20543f
@@ -26427,11 +26427,11 @@
   after
     751aedbe7a22e7d9.7eee51747ba04abc.1c95b662988fcc30.7c3a8c09461c0d40
     ae08d3f1ed3dacc7.9339ac9bf33d642e.82f21774b0974f2f.b1854be51f20543f
-    0000000000000000.0000000000000000.0000000000000000.8000000000002703
+    0000000000000000.0000000000000000.82f21774b0974f2f.b1854be51f200d40
     9d248559d1496492.24c67e0b1d94c92d.4179c9f9f32b2998.3ae02c5d5f33fb18
     458845d0ff5bd14a
 
-VCVTTPS2DQ_128(reg)
+VPBLENDW_128_0x00(reg)
   before
     fae6c9f919fc508f.0bea4b667a53cfc7.599fed2b07678c13.523b114357d0f85b
     b548b4424aa2b294.988fa9e9c36f3ec0.a5960677f9ba5523.54b8f3ce0dc2ae0c
@@ -26439,12 +26439,12 @@
     ae43b1e95f2f128d.7faa1e02a20e1cb0.f709223f670ce86f.9b0d7753dcb9beea
     987f10262ed7906f
   after
-    fae6c9f919fc508f.0bea4b667a53cfc7.599fed2b07678c13.523b114357d0f85b
+    0000000000000000.0000000000000000.a5960677f9ba5523.54b8f3ce0dc2ae0c
     b548b4424aa2b294.988fa9e9c36f3ec0.a5960677f9ba5523.54b8f3ce0dc2ae0c
-    0000000000000000.0000000000000000.8000000080000000.0000000080000000
+    d3f803192dda3405.20e11bcec7a96fa9.66f5c35990175f08.23baec852f0b07d8
     ae43b1e95f2f128d.7faa1e02a20e1cb0.f709223f670ce86f.9b0d7753dcb9beea
     987f10262ed7906f
-VCVTTPS2DQ_128(mem)
+VPBLENDW_128_0x00(mem)
   before
     f6db33e941723893.a375ba1d7c2d87d9.91b72c6f71a801fe.b31e1e941a242a04
     91ec5c8831957481.0eda1a231e61d094.32d4c3035086dcc2.f880b3c346ec6172
@@ -26454,11 +26454,11 @@
   after
     f6db33e941723893.a375ba1d7c2d87d9.91b72c6f71a801fe.b31e1e941a242a04
     91ec5c8831957481.0eda1a231e61d094.32d4c3035086dcc2.f880b3c346ec6172
-    0000000000000000.0000000000000000.0000000080000000.0000000000000000
+    0000000000000000.0000000000000000.32d4c3035086dcc2.f880b3c346ec2a04
     ee60b20b1ba4936d.b66cd0526799cd0a.916d794cab375f56.895a996578b9a28b
     8d6be2aeb5d7238e
 
-VCVTTPS2DQ_128(reg)
+VPBLENDW_128_0x00(reg)
   before
     89f8b482dbd4891a.675bd6c64ca8eec3.ab311e5445b4fa1c.078291da6024807f
     da4e0b4d853c12dc.8e3cf00ecb64cc94.8559b3d61a36ea4e.7bd6213e948285cd
@@ -26466,12 +26466,12 @@
     e6853979d77f77b1.52dff7f121360154.5d02a30e179805c0.d26e9938ebc72e86
     6b4a79a646c54a4a
   after
-    89f8b482dbd4891a.675bd6c64ca8eec3.ab311e5445b4fa1c.078291da6024807f
+    0000000000000000.0000000000000000.8559b3d61a36ea4e.7bd6213e948285cd
     da4e0b4d853c12dc.8e3cf00ecb64cc94.8559b3d61a36ea4e.7bd6213e948285cd
-    0000000000000000.0000000000000000.8000000000000000.8000000080000000
+    dab9e37c509cf880.3ece7dcdb3e5e90b.a2308b4581a8d94b.cb36a464645f2b6c
     e6853979d77f77b1.52dff7f121360154.5d02a30e179805c0.d26e9938ebc72e86
     6b4a79a646c54a4a
-VCVTTPS2DQ_128(mem)
+VPBLENDW_128_0x00(mem)
   before
     7496c29a90653ae2.5bfd08b2b771cd1c.a839dc653063cf9d.121bf69b7791a859
     c81dee01e6b3bb7b.936f4c928bff346c.1ba9a814fc791110.1dc6805a3d20ffc1
@@ -26481,11 +26481,11 @@
   after
     7496c29a90653ae2.5bfd08b2b771cd1c.a839dc653063cf9d.121bf69b7791a859
     c81dee01e6b3bb7b.936f4c928bff346c.1ba9a814fc791110.1dc6805a3d20ffc1
-    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    0000000000000000.0000000000000000.1ba9a814fc791110.1dc6805a3d20a859
     c010e5d4248b5f5e.bf6c24f6811c286e.c7fbe1d83e8edb25.a406291b6d2db7b0
     d93241f50fc3918f
 
-VCVTTPS2DQ_256(reg)
+VPBLENDW_128_0xFE(reg)
   before
     d32180b0881f0fed.1c13a618442cfa00.6c90b053dbc42c77.b87546c4eaa4dc20
     f01fe2b872cc6c77.34823c7fe0ac1654.4cdda10899373216.3734839dc5d440f5
@@ -26493,12 +26493,12 @@
     ff770060104bb6be.04d3d463f977c0bc.1821a225b3af33c4.4bb56dc172ab20e0
     980e14e67d6b154d
   after
-    d32180b0881f0fed.1c13a618442cfa00.6c90b053dbc42c77.b87546c4eaa4dc20
+    0000000000000000.0000000000000000.bc9ff37f580176f6.1e05114de92740f5
     f01fe2b872cc6c77.34823c7fe0ac1654.4cdda10899373216.3734839dc5d440f5
-    8000000000000000.0000000080000000.0000000000000000.016adb8280000000
+    8b7763796c57e6d9.e22922f413166f83.bc9ff37f580176f6.1e05114de927c3d1
     ff770060104bb6be.04d3d463f977c0bc.1821a225b3af33c4.4bb56dc172ab20e0
     980e14e67d6b154d
-VCVTTPS2DQ_256(mem)
+VPBLENDW_128_0xFE(mem)
   before
     e3dd81a625735b44.aa69b4d7fa341bd3.744eceb8afd9c628.bcb1ab6646cca62c
     06ed30ef87d0b1f3.e69a7b4cc69f4fc4.0f648ddf514a3df6.049909afaee40bd9
@@ -26508,11 +26508,11 @@
   after
     e3dd81a625735b44.aa69b4d7fa341bd3.744eceb8afd9c628.bcb1ab6646cca62c
     06ed30ef87d0b1f3.e69a7b4cc69f4fc4.0f648ddf514a3df6.049909afaee40bd9
-    8000000000000000.0000000080000000.8000000000000000.0000000000006653
+    0000000000000000.0000000000000000.744eceb8afd9c628.bcb1ab6646cca62c
     480445c9e6b77823.85e932dc772817e7.37944654c6886c63.f0a4b4056b379ab4
     4c5efaebf98a3c3a
 
-VCVTTPS2DQ_256(reg)
+VPBLENDW_128_0xFE(reg)
   before
     bba28588cb08c0b6.1ea2a3321c5962fd.9f9e1bd0935f2273.7b463979d26c9d5a
     9bba51487d3d62d3.3db233d37c7f4b3e.bcc307710247ee8a.5bc3e120398f2f62
@@ -26520,12 +26520,12 @@
     1b9a9ce1f3fdeea2.c658da6d288808a3.6a88d86a465bb30a.5a523ca68abf6453
     32fbe85cace48095
   after
-    bba28588cb08c0b6.1ea2a3321c5962fd.9f9e1bd0935f2273.7b463979d26c9d5a
+    0000000000000000.0000000000000000.36a2f22b5f6cb4d8.b1d9b93618fb2f62
     9bba51487d3d62d3.3db233d37c7f4b3e.bcc307710247ee8a.5bc3e120398f2f62
-    0000000080000000.ffffc9ca00000000.80000000000036ec.8000000000000000
+    47f45a97acb55d3e.810071982135ee11.36a2f22b5f6cb4d8.b1d9b93618fbdda6
     1b9a9ce1f3fdeea2.c658da6d288808a3.6a88d86a465bb30a.5a523ca68abf6453
     32fbe85cace48095
-VCVTTPS2DQ_256(mem)
+VPBLENDW_128_0xFE(mem)
   before
     15a139439978ec97.73f91492efa051ac.e986e83eac84541f.b5c1b69a549f25cc
     df0da9496e866686.aa5dbd163b2bc108.c45519f8c93390b2.7199862725c447c9
@@ -26535,11 +26535,11 @@
   after
     15a139439978ec97.73f91492efa051ac.e986e83eac84541f.b5c1b69a549f25cc
     df0da9496e866686.aa5dbd163b2bc108.c45519f8c93390b2.7199862725c447c9
-    0000000000000000.8000000080000000.8000000000000000.0000000080000000
+    0000000000000000.0000000000000000.e986e83eac84541f.b5c1b69a549f25cc
     986fdb603e426ed9.2a6392483526bb64.150ad2d340dfc3cc.af56f1097de38b26
     e9d284363df424de
 
-VCVTTPS2DQ_256(reg)
+VPBLENDW_128_0xFE(reg)
   before
     051df96f2f175d82.3ffb944871077696.299db6ce1aaebdbc.438751cdd2f432ab
     5f834e22f0d771bd.3d7f5dfefb777aef.790cfcd7c04ebc16.9ad5e35f6ded8050
@@ -26547,12 +26547,12 @@
     3dd085a34d5f1eaa.ae9f118587856827.78b9db21be04a47e.33192dfa30bca99e
     2ca5dedc90aafba0
   after
-    051df96f2f175d82.3ffb944871077696.299db6ce1aaebdbc.438751cdd2f432ab
+    0000000000000000.0000000000000000.74fc5fcec392f51d.f6c203742ed68050
     5f834e22f0d771bd.3d7f5dfefb777aef.790cfcd7c04ebc16.9ad5e35f6ded8050
-    000000000df1eaa0.0000000000000000.8000000000000000.0000000000000000
+    53507eba1bc09e3c.6ec7b36ff99d3611.74fc5fcec392f51d.f6c203742ed669e8
     3dd085a34d5f1eaa.ae9f118587856827.78b9db21be04a47e.33192dfa30bca99e
     2ca5dedc90aafba0
-VCVTTPS2DQ_256(mem)
+VPBLENDW_128_0xFE(mem)
   before
     bf33900769ac1c17.794f6049213f2eb4.d9d3f32ec03cca5e.df8f6d3b4d3204e5
     c78fc165d8cfc832.63180a1834ed0906.cb2fd555c0cd19e2.07c90f880da752fd
@@ -26562,11 +26562,11 @@
   after
     bf33900769ac1c17.794f6049213f2eb4.d9d3f32ec03cca5e.df8f6d3b4d3204e5
     c78fc165d8cfc832.63180a1834ed0906.cb2fd555c0cd19e2.07c90f880da752fd
-    0000000080000000.8000000000000000.80000000fffffffe.800000000b204e50
+    0000000000000000.0000000000000000.d9d3f32ec03cca5e.df8f6d3b4d3204e5
     a6e18e6ee6a5b0fe.b1bcbbe185e01330.738e8acc88ae6d7e.069d786c8e98a8f3
     95ce36da882b2728
 
-VCVTDQ2PS_128(reg)
+VPBLENDW_128_0x30(reg)
   before
     5494f62c223684be.346e21f0bd716408.cd2ebab4fb3dba60.e22955f58616eaf0
     a03bb2ccf844fb63.a8fa2357998d9365.071a795f1f981c88.881c104cbd88445e
@@ -26574,12 +26574,12 @@
     4a5b13abca9a2584.ae3a6181d3e650c6.449523f2e475046f.e839473540bc7edf
     5bfcbb9ec495d64b
   after
-    5494f62c223684be.346e21f0bd716408.cd2ebab4fb3dba60.e22955f58616eaf0
+    0000000000000000.0000000000000000.071a795f8e7c7654.881c104cbd88445e
     a03bb2ccf844fb63.a8fa2357998d9365.071a795f1f981c88.881c104cbd88445e
-    0000000000000000.0000000000000000.4e892a48cddc57dd.cdbe35c64e8178fe
+    d30e6828a7e1c7c0.dd4f0f8e9705f840.bbcef2508e7c7654.403338be461137f4
     4a5b13abca9a2584.ae3a6181d3e650c6.449523f2e475046f.e839473540bc7edf
     5bfcbb9ec495d64b
-VCVTDQ2PS_128(mem)
+VPBLENDW_128_0x30(mem)
   before
     74460fe6f1a9fb63.616cb0c0fefa5159.f987951b683b5723.00ba08b0bc100285
     11e4bff7e003a854.758e39d5de8d87ec.9802284a7210c882.4a8a9bf8b2d9ab44
@@ -26589,11 +26589,11 @@
   after
     74460fe6f1a9fb63.616cb0c0fefa5159.f987951b683b5723.00ba08b0bc100285
     11e4bff7e003a854.758e39d5de8d87ec.9802284a7210c882.4a8a9bf8b2d9ab44
-    0000000000000000.0000000000000000.cccf0d5d4ed076ae.4b3a08b0ce87dffb
+    0000000000000000.0000000000000000.9802284a7210c882.4a8a9bf8bc100285
     434c25297aba8d70.ff3504ac137efffa.47b15815576cdcf8.f75bc0d36b21f167
     13f4493e64b90524
 
-VCVTDQ2PS_128(reg)
+VPBLENDW_128_0x30(reg)
   before
     2c6771e3edafb539.90aed1215c2f3df2.2e523d47a1f4bacd.0d7ded886a0bf567
     a002342c9f8e3d51.d194cb92711b65fe.c9af54904bcc6e0e.98a8d13f63596a88
@@ -26601,12 +26601,12 @@
     05db7d5ef438c43d.9b1a9195a785105e.b35d08e064d8b589.6e46722b74385393
     71512836c4e040d4
   after
-    2c6771e3edafb539.90aed1215c2f3df2.2e523d47a1f4bacd.0d7ded886a0bf567
+    0000000000000000.0000000000000000.c9af5490ad945969.98a8d13f63596a88
     a002342c9f8e3d51.d194cb92711b65fe.c9af54904bcc6e0e.98a8d13f63596a88
-    0000000000000000.0000000000000000.ce9945ee4ec9b16b.4edc8ce44ee870a7
+    c90f8f8619e2d919.e0c98c6ad688c2be.2c9943f4ad945969.c5fc7e275c65f588
     05db7d5ef438c43d.9b1a9195a785105e.b35d08e064d8b589.6e46722b74385393
     71512836c4e040d4
-VCVTDQ2PS_128(mem)
+VPBLENDW_128_0x30(mem)
   before
     a8eb1d366a687778.aeb2fa1ecf1b3b68.dc5457fdff1b0a0b.ba459ebe0c23be1b
     f0decb1682ddb5ab.22e0033443177a46.8041598ffa586df1.9d9d01fc4001b2ca
@@ -26616,11 +26616,11 @@
   after
     a8eb1d366a687778.aeb2fa1ecf1b3b68.dc5457fdff1b0a0b.ba459ebe0c23be1b
     f0decb1682ddb5ab.22e0033443177a46.8041598ffa586df1.9d9d01fc4001b2ca
-    0000000000000000.0000000000000000.ce0eaea0cb64f5f5.ce8b74c34d423be2
+    0000000000000000.0000000000000000.8041598ffa586df1.9d9d01fc0c23be1b
     2402472676bb356b.d670a50f6c8b3ecf.626602e24bf55e16.67d22045bda74631
     0645d3283e875e42
 
-VCVTDQ2PS_128(reg)
+VPBLENDW_128_0x30(reg)
   before
     f059431abc2b501f.c7cb0d2e8a3cef51.d06a37ac581c3cd0.5736a07bd96d63ad
     835b6c87d21e5877.eb1e7cc67fdaa076.03ec454e4ef5f235.1feb6bed7bbbc12d
@@ -26628,12 +26628,12 @@
     1153db8238219942.26914a577f9bd62c.88b3c151cbb574da.982f7611670a7797
     0157ad9aeb2348d9
   after
-    f059431abc2b501f.c7cb0d2e8a3cef51.d06a37ac581c3cd0.5736a07bd96d63ad
+    0000000000000000.0000000000000000.03ec454eeba49baa.1feb6bed7bbbc12d
     835b6c87d21e5877.eb1e7cc67fdaa076.03ec454e4ef5f235.1feb6bed7bbbc12d
-    0000000000000000.0000000000000000.ceee987dce512a2d.cecfa1144ece14ef
+    1a954bdb1decb2f4.6cc712db72a00406.cc40c961eba49baa.964fde264beb34c2
     1153db8238219942.26914a577f9bd62c.88b3c151cbb574da.982f7611670a7797
     0157ad9aeb2348d9
-VCVTDQ2PS_128(mem)
+VPBLENDW_128_0x30(mem)
   before
     ad9301adf24361b3.c3e318e9c04a4a0e.f54aa027c1d6d314.9190288b89b3b972
     78aeed3699757e52.8e8ffe7a50f20104.b5bc9038545db7eb.4425fa79c12aa51d
@@ -26643,11 +26643,11 @@
   after
     ad9301adf24361b3.c3e318e9c04a4a0e.f54aa027c1d6d314.9190288b89b3b972
     78aeed3699757e52.8e8ffe7a50f20104.b5bc9038545db7eb.4425fa79c12aa51d
-    0000000000000000.0000000000000000.cd2b55fece78a4b4.cedcdfafceec988d
+    0000000000000000.0000000000000000.b5bc9038545db7eb.4425fa7989b3b972
     dbb57d5b3540b88e.db6fb6cefaf1701c.78fe2fcadf802316.18a2d02511b4665f
     f124ccbb61dfb14d
 
-VCVTDQ2PS_256(reg)
+VPBLENDW_128_0x21(reg)
   before
     e48b23b69bb395ff.2b381ace62f14b83.163a80694b5fa097.3365d6230f3523c1
     4d26d1825cbd4c20.0acb3f689ee4d4ec.d852e3df157dc6eb.4fb7086b0065f90a
@@ -26655,12 +26655,12 @@
     f124233de1a02562.e55011bdb5c2b3cd.6598650c83f6e2d0.1a47f97e976c1b29
     811eb11f7559de56
   after
-    e48b23b69bb395ff.2b381ace62f14b83.163a80694b5fa097.3365d6230f3523c1
+    0000000000000000.0000000000000000.d852e3dff4d6c6eb.4fb7086b0065631e
     4d26d1825cbd4c20.0acb3f689ee4d4ec.d852e3df157dc6eb.4fb7086b0065f90a
-    cd6dbdcccdf2fed5.cdd57f72ce947a98.4ecb30cacef8123a.4dd23fccced127ca
+    8840d38b3f88125d.543a681306260df6.7f02dc9cf4d61dc4.a8be3f91cf1e631e
     f124233de1a02562.e55011bdb5c2b3cd.6598650c83f6e2d0.1a47f97e976c1b29
     811eb11f7559de56
-VCVTDQ2PS_256(mem)
+VPBLENDW_128_0x21(mem)
   before
     b80fe36084f367d2.e420bf04dd92bfda.99dbb751c8c4829c.e85e7c9b5e6951b9
     9de60b2ee04673c9.bd7ea24dd0e91d72.4ba5d4bb5b393590.62a21cb622bca62b
@@ -26670,11 +26670,11 @@
   after
     b80fe36084f367d2.e420bf04dd92bfda.99dbb751c8c4829c.e85e7c9b5e6951b9
     9de60b2ee04673c9.bd7ea24dd0e91d72.4ba5d4bb5b393590.62a21cb622bca62b
-    ce8fe039cef61930.cddefa08ce09b501.cecc4891ce5cedf6.cdbd0c1b4ebcd2a3
+    0000000000000000.0000000000000000.4ba5d4bb5b39829c.62a21cb65e69a62b
     de752e1df24304d6.91932e1108f814b0.1e2968c16ea93a95.afcfe83bd330f05d
     39500b7ff8695e74
 
-VCVTDQ2PS_256(reg)
+VPBLENDW_128_0x21(reg)
   before
     2b7fa8fe76b2a1c5.f1c52117df070044.43e1cf6486c725af.f67bd73527bd04fe
     e2a6ba23e895f7fb.222bfa4d8ab370dd.4cc3a7e96b2bea7d.3c3dad2fcf73a23d
@@ -26682,12 +26682,12 @@
     0a102e141a5fc6c9.4a694f1d87f3963f.d06eed35d7e47f38.864083665ef64de7
     42197a7b7cdbd1aa
   after
-    2b7fa8fe76b2a1c5.f1c52117df070044.43e1cf6486c725af.f67bd73527bd04fe
+    0000000000000000.0000000000000000.4cc3a7e952b1ea7d.3c3dad2fcf73d17b
     e2a6ba23e895f7fb.222bfa4d8ab370dd.4cc3a7e96b2bea7d.3c3dad2fcf73a23d
-    4d2102e14dd2fe36.4e94d29ecef018d4.ce3e444bce206e03.cef37ef94ebdec9c
+    b8133e5ceba099c3.4b7336ab0d530dcd.0783b20b52b19fc6.ce3a689c83d7d17b
     0a102e141a5fc6c9.4a694f1d87f3963f.d06eed35d7e47f38.864083665ef64de7
     42197a7b7cdbd1aa
-VCVTDQ2PS_256(mem)
+VPBLENDW_128_0x21(mem)
   before
     dc92cac5fa931af3.34ea88b7125db8b8.fad9c38f12a0c55f.02d052d59751c77d
     3277ed32f428e4ec.92ed47b16e26ac3d.368e0dedca65575b.fbf5df572d83b241
@@ -26697,11 +26697,11 @@
   after
     dc92cac5fa931af3.34ea88b7125db8b8.fad9c38f12a0c55f.02d052d59751c77d
     3277ed32f428e4ec.92ed47b16e26ac3d.368e0dedca65575b.fbf5df572d83b241
-    ce0db4d5ccad9ca2.4e53aa234d92edc6.cca4c78e4d95062b.4c3414b5ced15c71
+    0000000000000000.0000000000000000.368e0dedca65c55f.fbf5df579751b241
     7eb4a122ca1feaa0.5a9de55bc34a8ab7.c6fb141e33689391.aeb85fac4e6765f9
     21ed49580f31a444
 
-VCVTDQ2PS_256(reg)
+VPBLENDW_128_0x21(reg)
   before
     c9154b9618f076bf.2ca52a7dde989eb3.7ce2bbe2f5bdeb05.d14ac9c81cbeb624
     047d60d002301916.063176aadd1fc326.4280e771fb2b3e98.da0f440fa25d2a42
@@ -26709,12 +26709,12 @@
     9f37b3edef66bc05.a94d4c2b0e884edf.2af72f53f42aa93f.512a7c20f7a3fccd
     791832c3fe62d192
   after
-    c9154b9618f076bf.2ca52a7dde989eb3.7ce2bbe2f5bdeb05.d14ac9c81cbeb624
+    0000000000000000.0000000000000000.4280e77171213e98.da0f440fa25dae16
     047d60d002301916.063176aadd1fc326.4280e771fb2b3e98.da0f440fa25d2a42
-    cec19098cd84ca20.cead65684d6884ee.4e2bdcbdcd3d556c.4ea254f8cd05c033
+    2c6e84746b7ec7f4.e6250395e4c01426.08c364727121bf1d.bb1501dde24fae16
     9f37b3edef66bc05.a94d4c2b0e884edf.2af72f53f42aa93f.512a7c20f7a3fccd
     791832c3fe62d192
-VCVTDQ2PS_256(mem)
+VPBLENDW_128_0x21(mem)
   before
     0dac9eb2129ae992.b723eaa6297236f7.2b75cd5678822d7c.0468427f20d339ab
     eab33cd94f5600f9.d17d240db6306f73.496803043ebb6d2a.f2629b618fa6ab0d
@@ -26724,11 +26724,11 @@
   after
     0dac9eb2129ae992.b723eaa6297236f7.2b75cd5678822d7c.0468427f20d339ab
     eab33cd94f5600f9.d17d240db6306f73.496803043ebb6d2a.f2629b618fa6ab0d
-    4d5ac9eb4d94d74d.ce91b82b4e25c8dc.4e2dd7354ef1045b.4c8d08504e034ce7
+    0000000000000000.0000000000000000.496803043ebb2d7c.f2629b6120d3ab0d
     f044fe7fb78c19aa.7caf919236f011c0.c4e37a954b17fe67.7a1f0cfcad002461
     cb7b1c8d929ea3ab
 
-VCVTTPD2DQ_128(reg)
+VPBLENDW_128_0xD7(reg)
   before
     a19062842b97f39b.d0681bd7191d934c.c41ebd89620af1e8.da03b451ca52c84f
     57aad94e167852dd.692d5a161462fd05.7e2cdbdc5106814b.fb1e923f16fce2f7
@@ -26736,12 +26736,12 @@
     d21c4a0c4b1f2804.36ce2efd483b8c6b.b954e34ae5d0a074.ce772c617ecbfa3a
     384edf6dd4086e2c
   after
-    a19062842b97f39b.d0681bd7191d934c.c41ebd89620af1e8.da03b451ca52c84f
+    0000000000000000.0000000000000000.0725e9f85106fd96.fb1e914b48210a8c
     57aad94e167852dd.692d5a161462fd05.7e2cdbdc5106814b.fb1e923f16fce2f7
-    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    49157d58ecccfa1c.9761372ac5681101.0725e9f89e6efd96.0300914b48210a8c
     d21c4a0c4b1f2804.36ce2efd483b8c6b.b954e34ae5d0a074.ce772c617ecbfa3a
     384edf6dd4086e2c
-VCVTTPD2DQ_128(mem)
+VPBLENDW_128_0xD7(mem)
   before
     1d50265b65e3248e.500d3dd8cffd1743.2241bc7db7e52970.f106c33cc3b8a792
     594a7d174e69d68d.1d32502613f30483.37865c953174a53b.0b88873cd3b14e9c
@@ -26751,11 +26751,11 @@
   after
     1d50265b65e3248e.500d3dd8cffd1743.2241bc7db7e52970.f106c33cc3b8a792
     594a7d174e69d68d.1d32502613f30483.37865c953174a53b.0b88873cd3b14e9c
-    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    0000000000000000.0000000000000000.3786bc7db7e5a53b.f106c33cd3b14e9c
     46564daa95a32011.194bcbfd4d55c8b7.4cb5c23db06f2ad6.5527a712fb066b22
     3dddfdc14b7b59f6
 
-VCVTTPD2DQ_128(reg)
+VPBLENDW_128_0xD7(reg)
   before
     7791252d3d31d766.af00bd592c7030ee.fed62b5d7ad91704.043780a5eef3aafd
     5f911dc26eb4211e.dfd22d868b172d18.a4c79bf0d8a45302.54bb4155a58bf99b
@@ -26763,12 +26763,12 @@
     a9a06a18fb530714.031dfe090e24dd01.9e06a05f954184c4.31f9b93df029f4ea
     754b684ebb4617f4
   after
-    7791252d3d31d766.af00bd592c7030ee.fed62b5d7ad91704.043780a5eef3aafd
+    0000000000000000.0000000000000000.65681922d8a4b95e.54bb8039f144d3db
     5f911dc26eb4211e.dfd22d868b172d18.a4c79bf0d8a45302.54bb4155a58bf99b
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    5127e0ed799172c9.b297191dcda4d3ba.656819220243b95e.1a0d8039f144d3db
     a9a06a18fb530714.031dfe090e24dd01.9e06a05f954184c4.31f9b93df029f4ea
     754b684ebb4617f4
-VCVTTPD2DQ_128(mem)
+VPBLENDW_128_0xD7(mem)
   before
     c1cf0a5670a8f924.c348b7b08f871baa.b02e57386ba20818.aced2c142d2af1df
     f3501a432b5a56a7.fa6bc422d1b8ec38.9497a096ff2a102c.e969baab648b3c5b
@@ -26778,11 +26778,11 @@
   after
     c1cf0a5670a8f924.c348b7b08f871baa.b02e57386ba20818.aced2c142d2af1df
     f3501a432b5a56a7.fa6bc422d1b8ec38.9497a096ff2a102c.e969baab648b3c5b
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.949757386ba2102c.aced2c14648b3c5b
     757c747920df6f54.34510b40d241b0eb.70a0f38a3e8aa6fa.6450c83325e25c29
     595242fce7f1a8d3
 
-VCVTTPD2DQ_128(reg)
+VPBLENDW_128_0xD7(reg)
   before
     ee19ac58b8a7c28e.7ebfb69a93caa4d6.eeac3dc5c8b21b67.21d9f5f92179ac0b
     7ff203b33790e506.dc30574f7c36435b.35b31ed3dc50338c.7899d747aba37fca
@@ -26790,12 +26790,12 @@
     06046a16a82d3ae0.06cba3251dbdb31d.dff0df3ad045547b.8de12c2c26d67afc
     0101969c4ef61bc8
   after
-    ee19ac58b8a7c28e.7ebfb69a93caa4d6.eeac3dc5c8b21b67.21d9f5f92179ac0b
+    0000000000000000.0000000000000000.67b0abd6dc503204.7899155ef913da61
     7ff203b33790e506.dc30574f7c36435b.35b31ed3dc50338c.7899d747aba37fca
-    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    68274479fd394fe9.6a9bd284f52d0a0f.67b0abd6aba83204.53ad155ef913da61
     06046a16a82d3ae0.06cba3251dbdb31d.dff0df3ad045547b.8de12c2c26d67afc
     0101969c4ef61bc8
-VCVTTPD2DQ_128(mem)
+VPBLENDW_128_0xD7(mem)
   before
     8cd9d19a8e8279f1.b3d771f6d4f8e29a.8a8e461e0ef2fab2.f8beb66be8b3d79e
     0b35581202834fa2.cceb56861c2785c1.d4ae375ce4d79dfa.10682cd58f7ff519
@@ -26805,11 +26805,11 @@
   after
     8cd9d19a8e8279f1.b3d771f6d4f8e29a.8a8e461e0ef2fab2.f8beb66be8b3d79e
     0b35581202834fa2.cceb56861c2785c1.d4ae375ce4d79dfa.10682cd58f7ff519
-    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    0000000000000000.0000000000000000.d4ae461e0ef29dfa.f8beb66b8f7ff519
     51a73b20f319564e.b204a66171dfa708.2538f553b1e1e250.a97ce605f75ef4c5
     e27e22a3f0894d4f
 
-VCVTTPD2DQ_256(reg)
+VPBLENDW_128_0xB5(reg)
   before
     8a8bee29e84232e0.d0578f8ea9c5fea2.37a20a86b77f9f7f.e639b9e4e01ffdb8
     fbef44057b15df24.b2ba1f2603180f2d.98b13c0a89b48015.dbc9bc6a643d6282
@@ -26817,12 +26817,12 @@
     aceb836ce0358078.10cbe38510e15c9e.5d51f6de4206f048.d5c16b02dc4bfded
     91c310ec0952aae7
   after
-    8a8bee29e84232e0.d0578f8ea9c5fea2.37a20a86b77f9f7f.e639b9e4e01ffdb8
+    0000000000000000.0000000000000000.317d3c0a83078774.dbc978d0643dceda
     fbef44057b15df24.b2ba1f2603180f2d.98b13c0a89b48015.dbc9bc6a643d6282
-    0000000000000000.0000000000000000.0000000000000000.8000000080000000
+    93f522a2448c90c9.d49c67d51b1d451d.317d365883078774.e1b278d05948ceda
     aceb836ce0358078.10cbe38510e15c9e.5d51f6de4206f048.d5c16b02dc4bfded
     91c310ec0952aae7
-VCVTTPD2DQ_256(mem)
+VPBLENDW_128_0xB5(mem)
   before
     f281e37afb6992f3.a31b63cfea9cece0.43121024fc6f0fdc.7a7b7707613cf73e
     d4ca6198cf9d713e.d5d2be37fe4b0fab.493c699dfbd31b02.e345b53f7d35d702
@@ -26832,11 +26832,11 @@
   after
     f281e37afb6992f3.a31b63cfea9cece0.43121024fc6f0fdc.7a7b7707613cf73e
     d4ca6198cf9d713e.d5d2be37fe4b0fab.493c699dfbd31b02.e345b53f7d35d702
-    0000000000000000.0000000000000000.8000000000000000.8000000080000000
+    0000000000000000.0000000000000000.493c1024fbd31b02.7a7bb53f613cd702
     8b294a358a8a033f.5505d6c6b7b76e1c.3e6c8fcca44e2db8.09ec598d1aa314a3
     7d61b77ad32eead7
 
-VCVTTPD2DQ_256(reg)
+VPBLENDW_128_0xB5(reg)
   before
     aea6c226f9ad8989.18d8ae8caa5b2e4e.5c198bc5938a201a.e50a555b867eac9f
     f70976fe27ab2e65.9640ad221b78404b.0ee3ab7ae9d77b2b.d0bc3774ebb37320
@@ -26844,12 +26844,12 @@
     4054cade0d567949.d56e68c062c808c1.decd1db2750d1739.dd8b3ff5af61cb9a
     b7405d3447f2d4ec
   after
-    aea6c226f9ad8989.18d8ae8caa5b2e4e.5c198bc5938a201a.e50a555b867eac9f
+    0000000000000000.0000000000000000.c5b1ab7a562ab9fc.d0bcb103ebb33e65
     f70976fe27ab2e65.9640ad221b78404b.0ee3ab7ae9d77b2b.d0bc3774ebb37320
-    0000000000000000.0000000000000000.0000005380000000.8000000080000000
+    b3d4d06cf9b51416.e12ec1e5faeef563.c5b13350562ab9fc.d94db103effb3e65
     4054cade0d567949.d56e68c062c808c1.decd1db2750d1739.dd8b3ff5af61cb9a
     b7405d3447f2d4ec
-VCVTTPD2DQ_256(mem)
+VPBLENDW_128_0xB5(mem)
   before
     453988add2b91587.f8d562bffc1a97aa.4ecb1d9f70123692.b584670ee30fd18d
     62423b4d6cc24c97.39a3937b648daae4.28135c6e3fd93a02.a6220ccf3bb922a5
@@ -26859,11 +26859,11 @@
   after
     453988add2b91587.f8d562bffc1a97aa.4ecb1d9f70123692.b584670ee30fd18d
     62423b4d6cc24c97.39a3937b648daae4.28135c6e3fd93a02.a6220ccf3bb922a5
-    0000000000000000.0000000000000000.8000000080000000.8000000000000000
+    0000000000000000.0000000000000000.28131d9f3fd93a02.b5840ccfe30f22a5
     b9b329ae40cc87c3.c256b1340db3a395.6f8f698c920bb86d.464258301b3a7ccf
     ad5df6a8db28fc3a
 
-VCVTTPD2DQ_256(reg)
+VPBLENDW_128_0xB5(reg)
   before
     9e8ee035f5f00518.abb45c48b1e40438.c2d29609877c0064.945c2fb34e8fa9c0
     75221143061dd116.9cf408b8a16f65d2.bbcb0469e92542bc.8a436f7b3bbf6062
@@ -26871,12 +26871,12 @@
     44a339937ad8a420.ea64b8ca700bc623.03646c7bd64569ba.588f4e9a1a541341
     e98be5c943d187d7
   after
-    9e8ee035f5f00518.abb45c48b1e40438.c2d29609877c0064.945c2fb34e8fa9c0
+    0000000000000000.0000000000000000.078d0469cf3aa74a.8a43a6ce3bbf9a7e
     75221143061dd116.9cf408b8a16f65d2.bbcb0469e92542bc.8a436f7b3bbf6062
-    0000000000000000.0000000000000000.8000000080000000.0000000080000000
+    8d65863fa93c9cdf.6740a8ea2d7867bc.078df7c1cf3aa74a.2c10a6ce76a79a7e
     44a339937ad8a420.ea64b8ca700bc623.03646c7bd64569ba.588f4e9a1a541341
     e98be5c943d187d7
-VCVTTPD2DQ_256(mem)
+VPBLENDW_128_0xB5(mem)
   before
     bad1e6490e2ab16c.f52828ad167d2384.002cb44487353e33.0c9c5e0599d4c4b7
     a92dcd05976c4f2a.fc3f4ef819b755b9.846419458d018a17.7c81c9c9b573f6ee
@@ -26886,11 +26886,11 @@
   after
     bad1e6490e2ab16c.f52828ad167d2384.002cb44487353e33.0c9c5e0599d4c4b7
     a92dcd05976c4f2a.fc3f4ef819b755b9.846419458d018a17.7c81c9c9b573f6ee
-    0000000000000000.0000000000000000.0000000080000000.0000000000000000
+    0000000000000000.0000000000000000.8464b4448d018a17.0c9cc9c999d4f6ee
     4d573ee150d8d1d8.7b5730d0c11cc640.4a530b87d8b0910d.0480fab4660dcab8
     d533b9b23322e5a4
 
-VCVTPD2DQ_128(reg)
+VPBLENDW_128_0x85(reg)
   before
     7dc3e09bc975c579.bbbdc0d9b91b2e1f.acefe4369f5f7ceb.44a290a255abc377
     597c6ddbc394a7e4.b56818bd4f76ee40.a34abe7d5367d615.1d916df33179ba65
@@ -26898,12 +26898,12 @@
     1d98a7105465602a.c1c13bfa75a586c2.5278da5faff66599.da7f21e677bbe780
     7815ef611a479404
   after
-    7dc3e09bc975c579.bbbdc0d9b91b2e1f.acefe4369f5f7ceb.44a290a255abc377
+    0000000000000000.0000000000000000.bbb4be7d5367d615.1d911f6531793204
     597c6ddbc394a7e4.b56818bd4f76ee40.a34abe7d5367d615.1d916df33179ba65
-    0000000000000000.0000000000000000.0000000000000000.8000000080000000
+    c5aa5bdebd0bc790.1926c2792ff6cd68.bbb4bc117ac00f6b.b0ec1f6588253204
     1d98a7105465602a.c1c13bfa75a586c2.5278da5faff66599.da7f21e677bbe780
     7815ef611a479404
-VCVTPD2DQ_128(mem)
+VPBLENDW_128_0x85(mem)
   before
     647c05c28cd6f6bd.bd944cde242eaf5e.8a06fd2a3b92d77b.c2e412d18f96114a
     7c7ee0f5e973c9d7.01e845b2c8f2f0d7.51c186f7a0c679bf.694262d4b52c522b
@@ -26913,11 +26913,11 @@
   after
     647c05c28cd6f6bd.bd944cde242eaf5e.8a06fd2a3b92d77b.c2e412d18f96114a
     7c7ee0f5e973c9d7.01e845b2c8f2f0d7.51c186f7a0c679bf.694262d4b52c522b
-    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    0000000000000000.0000000000000000.8a06fd2aa0c6d77b.c2e412d1b52c522b
     9b86d282d708b0db.e5cb2920fd9d374a.45c8db14b038a796.c807373f45667e2c
     3806b57de724e2a3
 
-VCVTPD2DQ_128(reg)
+VPBLENDW_128_0x85(reg)
   before
     4f2739fd3f06c9fb.5c24e1b39f193d1f.3df20a92c69bb59c.2aac9f3d958daa82
     67b8c12aea9a71dd.b78ea467c2672b72.a9a131bbd4c515e4.7c3618b2875bf0a8
@@ -26925,12 +26925,12 @@
     0d55ca3ba606eef6.aef438048bef18fc.2ccb3ee22dcb6a04.d76c1f3004903454
     99b0a311c60faa31
   after
-    4f2739fd3f06c9fb.5c24e1b39f193d1f.3df20a92c69bb59c.2aac9f3d958daa82
+    0000000000000000.0000000000000000.852631bbd4c515e4.7c36c45f875b3534
     67b8c12aea9a71dd.b78ea467c2672b72.a9a131bbd4c515e4.7c3618b2875bf0a8
-    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    dd034870836b13f8.898f98885d003503.85269907c3a693cd.1733c45fa3ad3534
     0d55ca3ba606eef6.aef438048bef18fc.2ccb3ee22dcb6a04.d76c1f3004903454
     99b0a311c60faa31
-VCVTPD2DQ_128(mem)
+VPBLENDW_128_0x85(mem)
   before
     37caceef063652fa.54fb44f7f0f63c84.028a00c66941908a.fcdd1db8b1bfd734
     8e851bb4e012ead9.0c3eb110fdc73a4d.611b6cba120158d8.50a830f5e80e160a
@@ -26940,11 +26940,11 @@
   after
     37caceef063652fa.54fb44f7f0f63c84.028a00c66941908a.fcdd1db8b1bfd734
     8e851bb4e012ead9.0c3eb110fdc73a4d.611b6cba120158d8.50a830f5e80e160a
-    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    0000000000000000.0000000000000000.028a00c61201908a.fcdd1db8e80e160a
     d7120ba7cf16d48b.42d3540acd3e3642.b16021e837fbcc66.f398e755e5eef857
     fb568250e2981425
 
-VCVTPD2DQ_128(reg)
+VPBLENDW_128_0x85(reg)
   before
     f7fc436104ccf24a.817ba7ad1d56a0b5.78bb82c3c9fcabc6.59ad62faea4eeefe
     42d725f6e618cd70.54b6544b747b4aa7.91729489f7cac036.7c2538eeda405207
@@ -26952,12 +26952,12 @@
     395c3c595b266d70.e5d1d7ffafa22b8d.d77d51eb5bccb988.a2ca8f2dda2dca19
     5e8d08502442587c
   after
-    f7fc436104ccf24a.817ba7ad1d56a0b5.78bb82c3c9fcabc6.59ad62faea4eeefe
+    0000000000000000.0000000000000000.e7449489f7cac036.7c251db1da40b2ac
     42d725f6e618cd70.54b6544b747b4aa7.91729489f7cac036.7c2538eeda405207
-    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    3a33237a2407e243.2c8e906df1918f8b.e74485c7f436b03d.f6951db120dbb2ac
     395c3c595b266d70.e5d1d7ffafa22b8d.d77d51eb5bccb988.a2ca8f2dda2dca19
     5e8d08502442587c
-VCVTPD2DQ_128(mem)
+VPBLENDW_128_0x85(mem)
   before
     05ad0604192416ff.9d9e69ff2700a9a3.5b49a3edcbbcd9da.bd69f460c91715c2
     73f50537d5e1c1ce.c044a8d82321d387.69c3722360eb569e.f5546a92d9a30198
@@ -26967,11 +26967,11 @@
   after
     05ad0604192416ff.9d9e69ff2700a9a3.5b49a3edcbbcd9da.bd69f460c91715c2
     73f50537d5e1c1ce.c044a8d82321d387.69c3722360eb569e.f5546a92d9a30198
-    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    0000000000000000.0000000000000000.5b49a3ed60ebd9da.bd69f460d9a30198
     142cf2c7141acd03.b7f048d31c6ae114.c2ed061867b4ad3a.cb55c1dd51af77c7
     200599cff1477a78
 
-VCVTPD2DQ_256(reg)
+VPBLENDW_128_0x29(reg)
   before
     38e3342da351fd74.feb3d9fccfaea6c1.428da3ce52a93c16.c435c3ae1068fe69
     6e3b8f6503573b68.2092b05fc14d5c7a.febffeab27607578.cfaf733da45f0ebf
@@ -26979,12 +26979,12 @@
     a48e720f408ddbe7.78871f5fbcd84e94.7411a9bf24637012.6f6798f2f64c5a8f
     bd3e06f1ee580e61
   after
-    38e3342da351fd74.feb3d9fccfaea6c1.428da3ce52a93c16.c435c3ae1068fe69
+    0000000000000000.0000000000000000.febffeab3a1a7578.be26733da45f9968
     6e3b8f6503573b68.2092b05fc14d5c7a.febffeab27607578.cfaf733da45f0ebf
-    0000000000000000.0000000000000000.0000000080000000.8000000080000000
+    1e5ba5e1aee871ff.5595f3dc0701ab5d.45d257d73a1ac8e8.be2690af3ca79968
     a48e720f408ddbe7.78871f5fbcd84e94.7411a9bf24637012.6f6798f2f64c5a8f
     bd3e06f1ee580e61
-VCVTPD2DQ_256(mem)
+VPBLENDW_128_0x29(mem)
   before
     837757983fda710a.5b1ff25a54d4b5c9.6736afd5fdde024c.e8caf0ce84c8aaa2
     9fde05d305db3eb5.a15b212e86483a54.fd6c1f28e51d83b0.fb472870f3d4b243
@@ -26994,11 +26994,11 @@
   after
     837757983fda710a.5b1ff25a54d4b5c9.6736afd5fdde024c.e8caf0ce84c8aaa2
     9fde05d305db3eb5.a15b212e86483a54.fd6c1f28e51d83b0.fb472870f3d4b243
-    0000000000000000.0000000000000000.0000000080000000.8000000080000000
+    0000000000000000.0000000000000000.67361f28e51d024c.fb47287084c8b243
     45656db5628f0ac3.46047e21b6e9380f.8da18f191c7cda2f.71c05c1d74121b6a
     8c545000bd5cf447
 
-VCVTPD2DQ_256(reg)
+VPBLENDW_128_0x29(reg)
   before
     b7dd2626877d8be7.871e1f3431597f7e.5e09a318ec2d2898.3f36888fa3b329a1
     4ea6d8fb6d021bf4.8f341ef8e5d450eb.74e96748b0ceb479.098451934154356f
@@ -27006,12 +27006,12 @@
     302cc563fe651a07.5caaf8fb6e0bf18e.0968be04545a90f1.507743f5330572d2
     87b5652bc02d1cbf
   after
-    b7dd2626877d8be7.871e1f3431597f7e.5e09a318ec2d2898.3f36888fa3b329a1
+    0000000000000000.0000000000000000.74e967489f59b479.c55651934154b9c7
     4ea6d8fb6d021bf4.8f341ef8e5d450eb.74e96748b0ceb479.098451934154356f
-    0000000000000000.0000000000000000.0000000080000000.0000000080000000
+    adfc64ec0b76e21a.3774e8eb9b0b3737.e3efc71d9f59185d.c5566611126bb9c7
     302cc563fe651a07.5caaf8fb6e0bf18e.0968be04545a90f1.507743f5330572d2
     87b5652bc02d1cbf
-VCVTPD2DQ_256(mem)
+VPBLENDW_128_0x29(mem)
   before
     44da479fd4f072b8.3380f7cee25cff64.dba1ca137bde3a1b.40a048676c5b57e1
     64b3653d8b5931ea.1245f69752e6cfe0.8e27da1edd93cd0b.e6e361b482eaaad8
@@ -27021,11 +27021,11 @@
   after
     44da479fd4f072b8.3380f7cee25cff64.dba1ca137bde3a1b.40a048676c5b57e1
     64b3653d8b5931ea.1245f69752e6cfe0.8e27da1edd93cd0b.e6e361b482eaaad8
-    0000000000000000.0000000000000000.8000000000000000.8000000000000824
+    0000000000000000.0000000000000000.dba1da1edd933a1b.e6e361b46c5baad8
     3eb045a8544ddaa7.d4514cf847e51bdf.040ca6c212ccc4c2.eaba31b81ae0e38d
     02e5e048d45f41a2
 
-VCVTPD2DQ_256(reg)
+VPBLENDW_128_0x29(reg)
   before
     f74c0e71fc9b1b70.af6d004d9ef13b8a.6f309b6704710fbb.7e0359321c699fe2
     2639b79f2e21ada1.f30de7ccfb6bf556.56b1a7e5bec0dd65.9db83a46ec17b514
@@ -27033,12 +27033,12 @@
     a3d86bbb2338e7de.6429290760136358.77c4e7be97d9f7d1.3a8b770b4dd38261
     7041cb9315f9b0d3
   after
-    f74c0e71fc9b1b70.af6d004d9ef13b8a.6f309b6704710fbb.7e0359321c699fe2
+    0000000000000000.0000000000000000.56b1a7e5105fdd65.3df63a46ec17c285
     2639b79f2e21ada1.f30de7ccfb6bf556.56b1a7e5bec0dd65.9db83a46ec17b514
-    0000000000000000.0000000000000000.0000000080000000.8000000000000000
+    ecf9d83f077c32e2.e65d761088c8c437.e41e6dde105fc188.3df6c5eb9ee1c285
     a3d86bbb2338e7de.6429290760136358.77c4e7be97d9f7d1.3a8b770b4dd38261
     7041cb9315f9b0d3
-VCVTPD2DQ_256(mem)
+VPBLENDW_128_0x29(mem)
   before
     bbe63d7013600907.a8216e801ce20842.4a3d7d9ca05890e6.6aee13f2eebbbaec
     f8444a8c6314492a.5722dcfb9105d0b9.7265ecbb63a4050c.19eaece4b2904784
@@ -27048,11 +27048,11 @@
   after
     bbe63d7013600907.a8216e801ce20842.4a3d7d9ca05890e6.6aee13f2eebbbaec
     f8444a8c6314492a.5722dcfb9105d0b9.7265ecbb63a4050c.19eaece4b2904784
-    0000000000000000.0000000000000000.0000000000000000.8000000080000000
+    0000000000000000.0000000000000000.4a3decbb63a490e6.19eaece4eebb4784
     b25e2136668f6dec.2378eabf59e74893.fb201048e47eb9d3.1a8496b6ee43afdd
     24ba5f6e9f3a01f6
 
-VMOVSLDUP_128(reg)
+VMOVUPS_EtoG_256(reg)
   before
     5bf1c5952d550d3d.e9b1e49b526fc9e3.f86582e1e5be704d.144bbd8dd92470cb
     1975c497331e0f5d.81ef31f0ffccfb79.e73975675b3f2fcb.e0ba750dc2015f0c
@@ -27062,10 +27062,10 @@
   after
     5bf1c5952d550d3d.e9b1e49b526fc9e3.f86582e1e5be704d.144bbd8dd92470cb
     1975c497331e0f5d.81ef31f0ffccfb79.e73975675b3f2fcb.e0ba750dc2015f0c
-    0000000000000000.0000000000000000.776c65c1776c65c1.df8ed917df8ed917
-    9e937edc18efe3da.44575a1a0e2ad530.83c55d54776c65c1.0094fb6adf8ed917
+    bc9258df4d234202.56e284218ab1c1d9.4c3fc0bf58f5c3b8.3a39b6b2bb2144c1
+    bc9258df4d234202.56e284218ab1c1d9.4c3fc0bf58f5c3b8.3a39b6b2bb2144c1
     0d96c11f4a56db3a
-VMOVSLDUP_128(mem)
+VMOVUPS_EtoG_256(mem)
   before
     3d0d82bf19850655.1dc530f7300f2e8e.271a2ec7a744f4a9.e8154a9355305492
     6cc3bc3567251594.93756c9d300e5fcd.dbf77c15730ad971.d77d82e68dcecad6
@@ -27075,11 +27075,11 @@
   after
     3d0d82bf19850655.1dc530f7300f2e8e.271a2ec7a744f4a9.e8154a9355305492
     6cc3bc3567251594.93756c9d300e5fcd.dbf77c15730ad971.d77d82e68dcecad6
-    0000000000000000.0000000000000000.a744f4a9a744f4a9.5530549255305492
+    3d0d82bf19850655.1dc530f7300f2e8e.271a2ec7a744f4a9.e8154a9355305492
     361f8853f3eed232.d87a703b59da6197.252f77400dcbe89d.c3c0c37b7dc53e69
     7834c5966c37b310
 
-VMOVSLDUP_128(reg)
+VMOVUPS_EtoG_256(reg)
   before
     27ee017626b2a0da.8a5d12d3672df8e7.5e67300ababfab7a.74211cf515de8a59
     2b3c758647c34174.4c0b05dacc0ff271.4d02691574b3ca97.035d2bfbbecde213
@@ -27089,10 +27089,10 @@
   after
     27ee017626b2a0da.8a5d12d3672df8e7.5e67300ababfab7a.74211cf515de8a59
     2b3c758647c34174.4c0b05dacc0ff271.4d02691574b3ca97.035d2bfbbecde213
-    0000000000000000.0000000000000000.61fa7a2d61fa7a2d.6471a7336471a733
-    a7bff3eb2bd48ec8.8fe61329d2eb55b3.d16e368c61fa7a2d.56e377a76471a733
+    e2681d346af5d28a.5af4db523ba07dfc.ff9517c72243fc99.b0af203d24a5aef8
+    e2681d346af5d28a.5af4db523ba07dfc.ff9517c72243fc99.b0af203d24a5aef8
     d0c5ad259a3e8cf1
-VMOVSLDUP_128(mem)
+VMOVUPS_EtoG_256(mem)
   before
     fc213da3e016175e.d68ef51727edb2d8.c6ab2649adfc35c3.1fd7c3cfcc6483ff
     b4c2a30d550705a5.ca1e1e24f9ca7969.dd1091a0e7dfda58.451db9feff0e51ba
@@ -27102,11 +27102,11 @@
   after
     fc213da3e016175e.d68ef51727edb2d8.c6ab2649adfc35c3.1fd7c3cfcc6483ff
     b4c2a30d550705a5.ca1e1e24f9ca7969.dd1091a0e7dfda58.451db9feff0e51ba
-    0000000000000000.0000000000000000.adfc35c3adfc35c3.cc6483ffcc6483ff
+    fc213da3e016175e.d68ef51727edb2d8.c6ab2649adfc35c3.1fd7c3cfcc6483ff
     3c07e2563663f974.75b9d5919106e4b9.17ea619fea4d63bf.8a6fd0ce30502f9d
     6014e94665ffb71d
 
-VMOVSLDUP_128(reg)
+VMOVUPS_EtoG_256(reg)
   before
     7ec55c59d31ef437.c442b20cdbe57853.e45a5cca8f7cffd0.f2f6bd20eaefbee9
     40cf247415392396.48f3495f1daf48bd.88eef993d3e7ad17.1cd36187ba94ce48
@@ -27116,10 +27116,10 @@
   after
     7ec55c59d31ef437.c442b20cdbe57853.e45a5cca8f7cffd0.f2f6bd20eaefbee9
     40cf247415392396.48f3495f1daf48bd.88eef993d3e7ad17.1cd36187ba94ce48
-    0000000000000000.0000000000000000.9fceb6e49fceb6e4.3915fc533915fc53
-    201ea36e869046d5.b8e6ba88ea4dd2e0.e3206a899fceb6e4.ce2b72b83915fc53
+    027e3d01c7db7fe7.a5e5223a19ce28dd.bfc2aa5afad42c39.724bcac176474f07
+    027e3d01c7db7fe7.a5e5223a19ce28dd.bfc2aa5afad42c39.724bcac176474f07
     0d3fd7591f099258
-VMOVSLDUP_128(mem)
+VMOVUPS_EtoG_256(mem)
   before
     0c537590452fcd41.f5fb5326ede4b20d.5bc08b37ac3903f1.5254368e5f6187c1
     a533c64ac693693b.df6147959964003b.6b4113327c9d773d.66ac09d4d51add7e
@@ -27129,11 +27129,11 @@
   after
     0c537590452fcd41.f5fb5326ede4b20d.5bc08b37ac3903f1.5254368e5f6187c1
     a533c64ac693693b.df6147959964003b.6b4113327c9d773d.66ac09d4d51add7e
-    0000000000000000.0000000000000000.ac3903f1ac3903f1.5f6187c15f6187c1
+    0c537590452fcd41.f5fb5326ede4b20d.5bc08b37ac3903f1.5254368e5f6187c1
     188576f34b47b210.5ff6f0482e163127.436335bcb5fd1735.f1f4b3d3552b0348
     1f7c8464969c4cac
 
-VMOVSLDUP_256(reg)
+VSQRTSS_128(reg)
   before
     63574be6fe62089f.aa91ccbb87afd844.adbe9d644f608b3d.c29cc8245612bb39
     1ad106c5280974cf.4898c6b58e854e38.7e3f7ee72505b8f9.1eac018774cf9127
@@ -27141,12 +27141,12 @@
     4cd1454b352c4b90.13c997ef6fac1e12.1e9cd1d35e917712.dd7d55f29873c774
     f8d668d2d6719d2a
   after
-    63574be6fe62089f.aa91ccbb87afd844.adbe9d644f608b3d.c29cc8245612bb39
+    0000000000000000.0000000000000000.7e3f7ee72505b8f9.1eac0187355e79a0
     1ad106c5280974cf.4898c6b58e854e38.7e3f7ee72505b8f9.1eac018774cf9127
-    352c4b90352c4b90.6fac1e126fac1e12.5e9177125e917712.9873c7749873c774
+    9e36b06eb11ecce6.cc67e0cd7dd5d219.30c5913d4b91f306.335d5bd22b41572c
     4cd1454b352c4b90.13c997ef6fac1e12.1e9cd1d35e917712.dd7d55f29873c774
     f8d668d2d6719d2a
-VMOVSLDUP_256(mem)
+VSQRTSS_128(mem)
   before
     6035115d0248977b.80f0c1ca4fbf2e7a.f98c66078115ee50.a40f3b13f99081c6
     f166cd8137036f92.96dd21559b64b150.5a7ac901ce1c00ff.1d6cc96bb91b4cd1
@@ -27156,11 +27156,11 @@
   after
     6035115d0248977b.80f0c1ca4fbf2e7a.f98c66078115ee50.a40f3b13f99081c6
     f166cd8137036f92.96dd21559b64b150.5a7ac901ce1c00ff.1d6cc96bb91b4cd1
-    0248977b0248977b.4fbf2e7a4fbf2e7a.8115ee508115ee50.f99081c6f99081c6
+    0000000000000000.0000000000000000.5a7ac901ce1c00ff.1d6cc96bffc00000
     fe6d6b412f56acc5.d8547a443b12866e.fd0b3c4c8a36d45e.5c0f460f15021896
     daee2c34ea7791a9
 
-VMOVSLDUP_256(reg)
+VSQRTSS_128(reg)
   before
     bbe5272054a7bbc2.32db46b528068838.bc766b7fc732500e.f645447532601066
     5d42343fee1ed48c.ff4b23719bca3322.f2963077f595aa4a.dbdad02f85587c8f
@@ -27168,12 +27168,12 @@
     505971c72312bde5.d361d2725ec0e609.c404224ea94dfd45.d649650b9de5d7f3
     a4bb66049b903d86
   after
-    bbe5272054a7bbc2.32db46b528068838.bc766b7fc732500e.f645447532601066
+    0000000000000000.0000000000000000.f2963077f595aa4a.dbdad02fffc00000
     5d42343fee1ed48c.ff4b23719bca3322.f2963077f595aa4a.dbdad02f85587c8f
-    2312bde52312bde5.5ec0e6095ec0e609.a94dfd45a94dfd45.9de5d7f39de5d7f3
+    1a4f4efe546815b4.40897d61a4af69ae.d602c39862c4d0ce.87985c689f2bd505
     505971c72312bde5.d361d2725ec0e609.c404224ea94dfd45.d649650b9de5d7f3
     a4bb66049b903d86
-VMOVSLDUP_256(mem)
+VSQRTSS_128(mem)
   before
     ccb8db3fb33ac4e9.59ad9907f6a806cc.939f9e8ee609655e.18e9480566bb6e5b
     2c0d40a804ef2849.9294c22b6ab42d15.5c0f5ba35797a3db.2efd322a369a5ebe
@@ -27183,11 +27183,11 @@
   after
     ccb8db3fb33ac4e9.59ad9907f6a806cc.939f9e8ee609655e.18e9480566bb6e5b
     2c0d40a804ef2849.9294c22b6ab42d15.5c0f5ba35797a3db.2efd322a369a5ebe
-    b33ac4e9b33ac4e9.f6a806ccf6a806cc.e609655ee609655e.66bb6e5b66bb6e5b
+    0000000000000000.0000000000000000.5c0f5ba35797a3db.2efd322a531ae40f
     00eecbb4bba776af.055309cba364057b.78b39d6465af4bf7.0fe23e6a7eddaf15
     934a595e2e598762
 
-VMOVSLDUP_256(reg)
+VSQRTSS_128(reg)
   before
     4912276e5f76ceab.2d13e83059c2d80c.f6c11e20a01e2df1.848019e93b522def
     8d84a508b0c0c29c.01bfe689a0180717.87f52407ae802378.08af78166a69bebd
@@ -27195,12 +27195,12 @@
     2e999d871c0c9b23.0de0738692a2bae1.fadaf5406b6b686a.ec63cb184424dc8e
     047fb8c528e0e1e8
   after
-    4912276e5f76ceab.2d13e83059c2d80c.f6c11e20a01e2df1.848019e93b522def
+    0000000000000000.0000000000000000.87f52407ae802378.08af781626b587f9
     8d84a508b0c0c29c.01bfe689a0180717.87f52407ae802378.08af78166a69bebd
-    1c0c9b231c0c9b23.92a2bae192a2bae1.6b6b686a6b6b686a.4424dc8e4424dc8e
+    baedcd97bbc39cdf.57c041ada9b4bef9.153918ee681622bc.e20c34d70e00b98e
     2e999d871c0c9b23.0de0738692a2bae1.fadaf5406b6b686a.ec63cb184424dc8e
     047fb8c528e0e1e8
-VMOVSLDUP_256(mem)
+VSQRTSS_128(mem)
   before
     042e77cbd44184c9.44d310447027fa12.fdebfa0277efb7f9.9323b769520b2f2e
     ca3a85146751835d.57e9233b529ef459.05af510c73a6716e.3c625ad6ba82b3b4
@@ -27210,11 +27210,11 @@
   after
     042e77cbd44184c9.44d310447027fa12.fdebfa0277efb7f9.9323b769520b2f2e
     ca3a85146751835d.57e9233b529ef459.05af510c73a6716e.3c625ad6ba82b3b4
-    d44184c9d44184c9.7027fa127027fa12.77efb7f977efb7f9.520b2f2e520b2f2e
+    0000000000000000.0000000000000000.05af510c73a6716e.3c625ad648bcc322
     149c7b23acb4804b.e8d5158232d5ab9d.c88e5f7a22830a1d.2eee34277a27e6b3
     2fd363e50b6c0c85
 
-VMOVSHDUP_128(reg)
+VSQRTPS_128(reg)
   before
     b0dd63958cb9e0c9.50895bc1961ef7ff.1e43edac68ade0f2.3d420fb60cc262af
     0d5830a59a999d2b.c1057952d668b814.c1bc54bf9c12a150.38dd7e307e9a664e
@@ -27223,11 +27223,11 @@
     ec15274c193ad82f
   after
     b0dd63958cb9e0c9.50895bc1961ef7ff.1e43edac68ade0f2.3d420fb60cc262af
-    0d5830a59a999d2b.c1057952d668b814.c1bc54bf9c12a150.38dd7e307e9a664e
-    0000000000000000.0000000000000000.c2fec04fc2fec04f.34fa8f8f34fa8f8f
+    0000000000000000.0000000000000000.3785ff985587d7af.ffc00000ffc00000
+    a290c780d1998056.43da52c4889e80b9.2f8c47266b902a60.962c2ad59319d326
     cbd02292cc43c5f6.b3d66002c7cd0b18.c2fec04f70b4b7d0.34fa8f8f684a6562
     ec15274c193ad82f
-VMOVSHDUP_128(mem)
+VSQRTPS_128(mem)
   before
     9b4870f6c0f3e7b9.e3663f472726a8b8.ebc321f8b000145d.d760bda54709834c
     1d5ee47b7c844f2b.489c1a0b7fcb6448.c86e11935e4458b6.cbfc39948d1bcb80
@@ -27236,12 +27236,12 @@
     702a812f0e3ae120
   after
     9b4870f6c0f3e7b9.e3663f472726a8b8.ebc321f8b000145d.d760bda54709834c
-    1d5ee47b7c844f2b.489c1a0b7fcb6448.c86e11935e4458b6.cbfc39948d1bcb80
-    0000000000000000.0000000000000000.ebc321f8ebc321f8.d760bda5d760bda5
+    0000000000000000.0000000000000000.ffc00000ffc00000.ffc00000433ba01b
+    4e2402c666f6ccb1.55bfad4a6fc03651.26a2aabdeda4934d.f81f3088de77ca17
     0b6643c39d571978.661bf67094905980.e12d6a637a2c814e.bb159fedd5a8bebd
     702a812f0e3ae120
 
-VMOVSHDUP_128(reg)
+VSQRTPS_128(reg)
   before
     74aad2bb26ba6fe9.2ef0245d3ab2f4ac.d6fcefe989c80b81.d6d9cc7121e9dde6
     21e08efbb9b3a6c7.948e22835b141679.03ae9622eaf286ff.df744cd4fde66441
@@ -27250,11 +27250,11 @@
     10ce5a2ce9d65298
   after
     74aad2bb26ba6fe9.2ef0245d3ab2f4ac.d6fcefe989c80b81.d6d9cc7121e9dde6
-    21e08efbb9b3a6c7.948e22835b141679.03ae9622eaf286ff.df744cd4fde66441
-    0000000000000000.0000000000000000.00b3dc8000b3dc80.a0a29745a0a29745
+    0000000000000000.0000000000000000.43fe728e4a8dc61b.ffc0000034d42829
+    d41ab15d62b1c064.190bb81e1c883e0a.487ce785559d07a7.d9c866772a2fd28a
     e9a2384cbd41fa6d.9935621b981a268b.00b3dc806352c924.a0a29745c5d0e2ee
     10ce5a2ce9d65298
-VMOVSHDUP_128(mem)
+VSQRTPS_128(mem)
   before
     05172b17b34ddcb5.bcc51d3367ee908d.f0d69d66ecd78c29.89a0737eb29f0a23
     5a4b86f23e3f3c70.a9cf5e80fb45bd71.fabbe3ec33ca2910.3e8da7eade0f044f
@@ -27263,12 +27263,12 @@
     fb51ca03a3aca49f
   after
     05172b17b34ddcb5.bcc51d3367ee908d.f0d69d66ecd78c29.89a0737eb29f0a23
-    5a4b86f23e3f3c70.a9cf5e80fb45bd71.fabbe3ec33ca2910.3e8da7eade0f044f
-    0000000000000000.0000000000000000.f0d69d66f0d69d66.89a0737e89a0737e
+    0000000000000000.0000000000000000.ffc00000ffc00000.ffc00000ffc00000
+    ed34e7a9a7ba30f7.0c0cf79e16d0bec4.93b0b29789ffbc6b.7ac67432822ff356
     999fcb2809ca7273.41c8e2f9531dcf33.968185550b83ff67.9b99d6c13a8a15e1
     fb51ca03a3aca49f
 
-VMOVSHDUP_128(reg)
+VSQRTPS_128(reg)
   before
     f7394b645922dd39.3a58ad5c8179bf13.a44e1dfd4fb82b69.e1f9d811d561af30
     ec9e5551f677fb5e.ac2b092f2ad5d201.91eba316a52c1014.4fe628b601a588f1
@@ -27277,11 +27277,11 @@
     025ad85cf5505ec0
   after
     f7394b645922dd39.3a58ad5c8179bf13.a44e1dfd4fb82b69.e1f9d811d561af30
-    ec9e5551f677fb5e.ac2b092f2ad5d201.91eba316a52c1014.4fe628b601a588f1
-    0000000000000000.0000000000000000.799a8038799a8038.034aab70034aab70
+    0000000000000000.0000000000000000.522d9926ffc00000.ffc00000ffc00000
+    34cce43419373cb8.cbe45b8e21ea6869.64eb70b1f105b7dd.bc12ef32ae5c45d7
     2d0ff47a5cefdaf4.724f206681c23d78.799a8038d0cf5f73.034aab70f691a30d
     025ad85cf5505ec0
-VMOVSHDUP_128(mem)
+VSQRTPS_128(mem)
   before
     940ef0e3c8a6321c.31b382905b2a11bd.7f37d2a2666b0d5a.2c44d019de174380
     953270ef8a9eda4c.9d0489e1b3741fc0.cd69ef2dedf1933a.d8355bbeb6689eb0
@@ -27290,12 +27290,12 @@
     52a83686150cd5cf
   after
     940ef0e3c8a6321c.31b382905b2a11bd.7f37d2a2666b0d5a.2c44d019de174380
-    953270ef8a9eda4c.9d0489e1b3741fc0.cd69ef2dedf1933a.d8355bbeb6689eb0
-    0000000000000000.0000000000000000.7f37d2a27f37d2a2.2c44d0192c44d019
+    0000000000000000.0000000000000000.5f58ee1652f54d75.35e076caffc00000
+    e091d56d5844137c.cd4d05d8ff5a3ea8.37b1f3f5325e8d45.dbb81d95f44facb0
     53f99a4a4da599da.1edbf2e3dc67ab22.9bdb58e550c0b4a7.901b12093557ab2c
     52a83686150cd5cf
 
-VMOVSHDUP_256(reg)
+VSQRTPS_256(reg)
   before
     7fac86772ffa6746.c8343b7085cc2790.eafa4d6de527a2da.d3b39ce96323c78b
     7273fd4b1fae9d3d.1d0f35cd1ec57aca.8ef611e2b6275e7b.bd0539ed8892801e
@@ -27304,11 +27304,11 @@
     37cd083277a0eca5
   after
     7fac86772ffa6746.c8343b7085cc2790.eafa4d6de527a2da.d3b39ce96323c78b
-    7273fd4b1fae9d3d.1d0f35cd1ec57aca.8ef611e2b6275e7b.bd0539ed8892801e
-    1979504419795044.d3d520d9d3d520d9.ceb5c43dceb5c43d.134674a6134674a6
+    ffc00000ffc00000.35ea111e388de62b.52c7587bffc00000.398d9d8dffc00000
+    8649976b82b4b25f.2c56034c319d4eb5.661b3aaeecf21cb2.339cadddda199c8b
     19795044f396e359.d3d520d9dc5f5f7d.ceb5c43d2314182a.134674a676c4d7ff
     37cd083277a0eca5
-VMOVSHDUP_256(mem)
+VSQRTPS_256(mem)
   before
     7dfee76ffab899aa.855125420fe26cd6.ec570b603b18684d.220fabfcf61a8d90
     bfa58c471a19973a.281b11d271238983.55aa3dcd69d32652.be77ec55018fb890
@@ -27317,12 +27317,12 @@
     daf29d3c8f03d4e0
   after
     7dfee76ffab899aa.855125420fe26cd6.ec570b603b18684d.220fabfcf61a8d90
-    bfa58c471a19973a.281b11d271238983.55aa3dcd69d32652.be77ec55018fb890
-    7dfee76f7dfee76f.8551254285512542.ec570b60ec570b60.220fabfc220fabfc
+    5eb4a1a6ffc00000.ffc0000027aa3e03.ffc000003d458683.30bfc7f5ffc00000
+    da8d73a8f4cda580.5c24105eb6e6750b.e898330c829c55b8.fe3782b6e100d5d5
     ab84187da3e37da9.7fb81e5479b66d1b.82ee6a09a37fb0aa.3e9c698932f7200c
     daf29d3c8f03d4e0
 
-VMOVSHDUP_256(reg)
+VSQRTPS_256(reg)
   before
     2e851b3a94ad2efe.0c54f8b14464dce1.eb23371f571fad5f.00785db0e889f454
     96a0deeede836a12.dacb8e32f25e7e53.feb1582aebae7082.3c0288ee6bc5dde3
@@ -27331,11 +27331,11 @@
     029633628c20cca5
   after
     2e851b3a94ad2efe.0c54f8b14464dce1.eb23371f571fad5f.00785db0e889f454
-    96a0deeede836a12.dacb8e32f25e7e53.feb1582aebae7082.3c0288ee6bc5dde3
-    12a2232d12a2232d.2ed9ccc92ed9ccc9.84649fb584649fb5.614577db614577db
+    5708a61623c08303.ffc00000ffc00000.291504adffc00000.296b5f9c455dcaa6
+    6e91e1c60810c4c7.f2b356ebc9dc1f2b.12ad7ce3d1eef431.135868ad4b402783
     12a2232dafe077ca.2ed9ccc9e6eb7a96.84649fb5a66b7218.614577dba2058d60
     029633628c20cca5
-VMOVSHDUP_256(mem)
+VSQRTPS_256(mem)
   before
     d3181730269da07e.dd209d906e80c0c6.6b086db665964cc0.b123bd0c06b229e2
     ae95a0308b89c419.2d574d59e27bdb68.850eb39f61e950d5.f334d2558c4e533b
@@ -27344,12 +27344,12 @@
     d650b60c1d9ae15e
   after
     d3181730269da07e.dd209d906e80c0c6.6b086db665964cc0.b123bd0c06b229e2
-    ae95a0308b89c419.2d574d59e27bdb68.850eb39f61e950d5.f334d2558c4e533b
-    d3181730d3181730.dd209d90dd209d90.6b086db66b086db6.b123bd0cb123bd0c
+    ffc00000330e0b09.ffc000005700603f.553ae25c528ab3d5.ffc0000023170357
+    70da484ed7eff69f.5d932df5a65e035b.58b51c71f6f04400.a7e3dbfad4cb2dd1
     f5b28d7628dcef3f.c81f3cd157b4754c.c0cb231641b8e26d.297ed3687bb6f34d
     d650b60c1d9ae15e
 
-VMOVSHDUP_256(reg)
+VSQRTPS_256(reg)
   before
     08a48150550332ae.19ebea94975b6e23.cc49735790096de7.991a457c5e4ce649
     1cc72ea2bf7e23ea.b84fdb9542782d77.c45bcff5eeea27d7.bf6ffc8d68b90ec0
@@ -27358,11 +27358,11 @@
     978980032e89ad7c
   after
     08a48150550332ae.19ebea94975b6e23.cc49735790096de7.991a457c5e4ce649
-    1cc72ea2bf7e23ea.b84fdb9542782d77.c45bcff5eeea27d7.bf6ffc8d68b90ec0
-    5aaa231c5aaa231c.d7cc6aebd7cc6aeb.ff6ae825ff6ae825.625a1e65625a1e65
+    56b90737ffc00000.ffc00000425e3b04.2590223e262a68d4.270aebd65d3c0366
+    6e05bb6df896efbd.aeacdc634540ea69.0ba24d150ce2dec9.0e96c6377b0a14fe
     5aaa231c9bd7d4d4.d7cc6aebbbbe5e22.ff6ae825867dcf69.625a1e65b44bb52e
     978980032e89ad7c
-VMOVSHDUP_256(mem)
+VSQRTPS_256(mem)
   before
     89ed69fd06cfb715.3c02621d45ce0cda.0f7c001ac0fe48d1.faff9c90f9473662
     1453533f57299025.705975db9106d47c.31871adb710d62a0.5aad65c201cd4e61
@@ -27371,12 +27371,12 @@
     6843193aaa3b1a36
   after
     89ed69fd06cfb715.3c02621d45ce0cda.0f7c001ac0fe48d1.faff9c90f9473662
-    1453533f57299025.705975db9106d47c.31871adb710d62a0.5aad65c201cd4e61
-    89ed69fd89ed69fd.3c02621d3c02621d.0f7c001a0f7c001a.faff9c90faff9c90
+    ffc0000023230e8f.3db6b26042a266ed.277dfe09ffc00000.ffc00000ffc00000
+    1487bcb63da4f4d7.52fa57c31c0c6765.1bbb3419eaf669bb.79bf4027399b5411
     64551f4cd64b9f58.3e33033f816b0243.a8e2cbc246c5194f.b583282b3d3b841f
     6843193aaa3b1a36
 
-VPERMILPS_VAR_128(reg)
+VSQRTPD_128(reg)
   before
     f04c0fc11b275103.e289f9ee3b2a4cd4.904e78bc5cafe1bf.b4ca59c1a1872d88
     a7ea072a2d896632.69efc4898a4eb876.a398afa64a644088.1b3d5c0218476291
@@ -27384,12 +27384,12 @@
     1514e956a2e51964.017f22565592bcde.81e85773ce536cab.69f7affac8f21fc6
     09d5f68a39f51e49
   after
-    0000000000000000.0000000000000000.4a64408818476291.1b3d5c02a398afa6
-    a7ea072a2d896632.69efc4898a4eb876.a398afa64a644088.1b3d5c0218476291
+    f04c0fc11b275103.e289f9ee3b2a4cd4.904e78bc5cafe1bf.b4ca59c1a1872d88
+    0000000000000000.0000000000000000.fff8000000000000.fff8000000000000
     ea69fbe37bef956e.d452fe08dfc29e6b.d55da56ae7175a48.b8084f71c6117497
     1514e956a2e51964.017f22565592bcde.81e85773ce536cab.69f7affac8f21fc6
     09d5f68a39f51e49
-VPERMILPS_VAR_128(mem)
+VSQRTPD_128(mem)
   before
     7370a20b36262e4d.8539ccf13df52fc0.cb42ac6108cbccfc.0387c02c9ba5b25e
     85922e6ada920bfd.9422a11fe9ad132d.0d67181415788bf1.b784dc03eb98680d
@@ -27398,12 +27398,12 @@
     96ad3c6e02b07fb7
   after
     7370a20b36262e4d.8539ccf13df52fc0.cb42ac6108cbccfc.0387c02c9ba5b25e
-    85922e6ada920bfd.9422a11fe9ad132d.0d67181415788bf1.b784dc03eb98680d
-    0000000000000000.0000000000000000.b784dc03eb98680d.eb98680d15788bf1
+    0000000000000000.0000000000000000.fff8000000000000.21bb9188ba3c49ef
+    1909169442447086.9f1c624c41990157.a5bae35b98a6b4e8.f82ca8635ab8c963
     0d9fd77489491a13.02730de4e24334eb.6d078822ac5f050d.24cb1fb88391120d
     96ad3c6e02b07fb7
 
-VPERMILPS_VAR_128(reg)
+VSQRTPD_128(reg)
   before
     a91efef174a04b0c.3b21ebf5cbabc5d1.19739d536739e995.431983556db1388e
     bb6a5ead74eeb3b9.815ad00525782dec.40680e056c075c01.01be50e1f8a80994
@@ -27411,12 +27411,12 @@
     48c1ec8190d147c9.c125fb7f908222e7.2f6084e369586bcc.a9ec51b0dab279e6
     4b0e7dcb69dd8f89
   after
-    0000000000000000.0000000000000000.40680e056c075c01.f8a809946c075c01
-    bb6a5ead74eeb3b9.815ad00525782dec.40680e056c075c01.01be50e1f8a80994
+    a91efef174a04b0c.3b21ebf5cbabc5d1.19739d536739e995.431983556db1388e
+    0000000000000000.0000000000000000.fff8000000000000.fff8000000000000
     26dc590f9f25f369.b918018fb3bc0d8f.d49d5c678e38c8da.85c06cb0684f364e
     48c1ec8190d147c9.c125fb7f908222e7.2f6084e369586bcc.a9ec51b0dab279e6
     4b0e7dcb69dd8f89
-VPERMILPS_VAR_128(mem)
+VSQRTPD_128(mem)
   before
     45f16bef32dd3362.7b651271e47fea84.734f38c1d8d62820.aefb81e698f37f84
     7463980750bd239e.1d14c74936ba1947.ac603642a8c4da65.adbb4fddb79640ae
@@ -27425,12 +27425,12 @@
     41d079abd022ef8d
   after
     45f16bef32dd3362.7b651271e47fea84.734f38c1d8d62820.aefb81e698f37f84
-    7463980750bd239e.1d14c74936ba1947.ac603642a8c4da65.adbb4fddb79640ae
-    0000000000000000.0000000000000000.adbb4fddb79640ae.a8c4da65b79640ae
+    0000000000000000.0000000000000000.599f9bc3f0824e35.fff8000000000000
+    b52e7effdf8a1968.881a0877230e10be.492570ec1c59f5e2.87ecea3363ccecf6
     e2209bc2fd4fd2ed.1ac3cf6646080a94.246a62ac4fa035c5.9ad94f533821bd07
     41d079abd022ef8d
 
-VPERMILPS_VAR_128(reg)
+VSQRTPD_128(reg)
   before
     d81b64a6ca5ac035.d8036a3fc3180959.2d5a1a823b334476.1afa896f5da65638
     bb080cb0c0566aab.73a4675f4ff17bd7.1e2de4379f1bfa10.07a35f1f63761367
@@ -27438,12 +27438,12 @@
     d4f384a210c73caf.094fdd3b280500bb.0bb2e61c2354c919.376b0dfbc5a454ac
     3123ddfe591b4f19
   after
-    0000000000000000.0000000000000000.07a35f1f07a35f1f.9f1bfa101e2de437
-    bb080cb0c0566aab.73a4675f4ff17bd7.1e2de4379f1bfa10.07a35f1f63761367
+    d81b64a6ca5ac035.d8036a3fc3180959.2d5a1a823b334476.1afa896f5da65638
+    0000000000000000.0000000000000000.44baa24b0d5c5edc.fff8000000000000
     46e16d354ea12a9a.8fce0f0fbde7e494.49862af10e4d680d.c72f62aa7c1c297f
     d4f384a210c73caf.094fdd3b280500bb.0bb2e61c2354c919.376b0dfbc5a454ac
     3123ddfe591b4f19
-VPERMILPS_VAR_128(mem)
+VSQRTPD_128(mem)
   before
     92234c9f558dd8f3.c3894c61a454db96.bbf14dd0ac588a79.befd16247abc5ae2
     3637d8cad404a865.6ef1c1dfa3d544fa.8282dbb866eb3ffa.bfb2b576b0125711
@@ -27452,12 +27452,12 @@
     2f4d0558a11b2bc6
   after
     92234c9f558dd8f3.c3894c61a454db96.bbf14dd0ac588a79.befd16247abc5ae2
-    3637d8cad404a865.6ef1c1dfa3d544fa.8282dbb866eb3ffa.bfb2b576b0125711
-    0000000000000000.0000000000000000.b0125711bfb2b576.b012571166eb3ffa
+    0000000000000000.0000000000000000.fff8000000000000.fff8000000000000
+    f92afc6bf28e7e9c.3076df89abd6b388.3acc03e171cadb69.6a1fbf7c61e1fb55
     b7ca346ecc3614c4.6763a2c958e164eb.bf9c4236ea0219f3.1b8e30a427b58458
     2f4d0558a11b2bc6
 
-VPERMILPD_VAR_128(reg)
+VSQRTPD_256(reg)
   before
     00a63906699e2f4d.4ce1fcbf7e092808.6e05070d458492d0.edbe12a2ed9eb7c3
     ebe6c8191bcaca96.943cd14b23127395.a0a809c00f4a7ae2.a0fdf11394aa6f06
@@ -27465,12 +27465,12 @@
     7f4ae71eaf4fb825.acee8fc0b7f7a538.f921d523a7716740.0406cab144441f94
     6e67bcb684e98f37
   after
-    0000000000000000.0000000000000000.a0a809c00f4a7ae2.a0fdf11394aa6f06
-    ebe6c8191bcaca96.943cd14b23127395.a0a809c00f4a7ae2.a0fdf11394aa6f06
+    00a63906699e2f4d.4ce1fcbf7e092808.6e05070d458492d0.edbe12a2ed9eb7c3
+    4623df7e1d00bb55.55cb3cc33cc8a548.4dc3db30a747397d.fff8000000000000
     4c58aefd542c3a50.6ba72efcd75db496.5b98a44e51c058ce.b4275b74fe33fde8
     7f4ae71eaf4fb825.acee8fc0b7f7a538.f921d523a7716740.0406cab144441f94
     6e67bcb684e98f37
-VPERMILPD_VAR_128(mem)
+VSQRTPD_256(mem)
   before
     cd16ab70da2f0afc.e00770e8c8c083c1.35dc7082dfeb03a6.d88e96abaee9e4e3
     fddf16c961214b10.cbda44c73d09d5d2.e13f4d2e6a458a0e.522de55201b50b64
@@ -27479,12 +27479,12 @@
     0125f93ade84d2d0
   after
     cd16ab70da2f0afc.e00770e8c8c083c1.35dc7082dfeb03a6.d88e96abaee9e4e3
-    fddf16c961214b10.cbda44c73d09d5d2.e13f4d2e6a458a0e.522de55201b50b64
-    0000000000000000.0000000000000000.e13f4d2e6a458a0e.e13f4d2e6a458a0e
+    fff8000000000000.fff8000000000000.3ae554dbbd484581.fff8000000000000
+    da8e76af36cb0f9f.9b105f27a7b9eb01.8ce1a3b07412f599.c448bd843d60186f
     3fef480c743a12d4.aef5be75a45901fd.128fedf41a5d0176.8b2c1aaefe7646af
     0125f93ade84d2d0
 
-VPERMILPD_VAR_128(reg)
+VSQRTPD_256(reg)
   before
     847f54967c15f880.0acd09ce377910db.5fd55b1bd0775270.4e15a7e677326acf
     6e85292c71b5f369.16f534df9c94c4e2.0afb3487c69e1b06.1e3f4e72a89eecd0
@@ -27492,12 +27492,12 @@
     eac92fbbd6545b97.6053b9a3bb90419a.bd4d875d8138044e.e6ae4f08f468297d
     978ca2eb47df5d80
   after
-    0000000000000000.0000000000000000.1e3f4e72a89eecd0.0afb3487c69e1b06
-    6e85292c71b5f369.16f534df9c94c4e2.0afb3487c69e1b06.1e3f4e72a89eecd0
+    847f54967c15f880.0acd09ce377910db.5fd55b1bd0775270.4e15a7e677326acf
+    2e3a3322dc1bf534.3f118f244e439053.25d27233fe9159fd.4ee424dfeb844525
     1c85736a5cf10137.3e33452dbf98ec13.0bb54424225b986c.5dd95c84c8ac42a6
     eac92fbbd6545b97.6053b9a3bb90419a.bd4d875d8138044e.e6ae4f08f468297d
     978ca2eb47df5d80
-VPERMILPD_VAR_128(mem)
+VSQRTPD_256(mem)
   before
     4a3dd118de1c99dc.349e578b7e6a4035.56210a2dac8882a4.7e11faa07fc49d57
     dd8e597ad42c9abd.5750e946edc0eabc.fe69b6b7af8d695d.a94b9758b7889d34
@@ -27506,12 +27506,12 @@
     3dba4b77d5a66379
   after
     4a3dd118de1c99dc.349e578b7e6a4035.56210a2dac8882a4.7e11faa07fc49d57
-    dd8e597ad42c9abd.5750e946edc0eabc.fe69b6b7af8d695d.a94b9758b7889d34
-    0000000000000000.0000000000000000.a94b9758b7889d34.fe69b6b7af8d695d
+    4515d786b8c640f2.3a46088e27075e70.4b0759df7cb8fb73.5f00f5ee319d8faf
+    2a4bb4ff46191c4e.ad2be058c1e196d9.33f6382ee0aab3f0.99485cf1c5124091
     0f4060924ff2dbbb.937a382d96598037.d0960c7c59eb1c8a.ac5344d746edc419
     3dba4b77d5a66379
 
-VPERMILPD_VAR_128(reg)
+VSQRTPD_256(reg)
   before
     a7c76e3b0fc85a5c.6638d81f0bc09232.658bee3107b5e483.b213af8e395d5f57
     48c8a8908fdfe46f.0d0199929791fedc.7fa8fcd1b080fd69.b63a9c51990b3a82
@@ -27519,12 +27519,12 @@
     9bd1519fd31ea5d3.b631e2da8d69e480.fb3a15911d9440b1.90b544964f4da2a4
     1ea2f7f1dcf8a8f3
   after
-    0000000000000000.0000000000000000.b63a9c51990b3a82.7fa8fcd1b080fd69
-    48c8a8908fdfe46f.0d0199929791fedc.7fa8fcd1b080fd69.b63a9c51990b3a82
+    a7c76e3b0fc85a5c.6638d81f0bc09232.658bee3107b5e483.b213af8e395d5f57
+    5cfbb0a41454e8d6.fff8000000000000.3e8667efff5c7c00.fff8000000000000
     7a07f5e3f2783f5d.de651dd70f70dbe8.3d1f60772e460894.b6d74faf98026637
     9bd1519fd31ea5d3.b631e2da8d69e480.fb3a15911d9440b1.90b544964f4da2a4
     1ea2f7f1dcf8a8f3
-VPERMILPD_VAR_128(mem)
+VSQRTPD_256(mem)
   before
     3d68e5ac5b0f3550.0571b82fcf5d527d.723163873089d6d1.1545188918f5e36b
     c9d589b3e79f05e8.1535270181c28406.ec311ccb12db6d06.e78e63cdbbf62b6f
@@ -27533,12 +27533,12 @@
     44cdd593b02b3dec
   after
     3d68e5ac5b0f3550.0571b82fcf5d527d.723163873089d6d1.1545188918f5e36b
-    c9d589b3e79f05e8.1535270181c28406.ec311ccb12db6d06.e78e63cdbbf62b6f
-    0000000000000000.0000000000000000.e78e63cdbbf62b6f.ec311ccb12db6d06
+    3eac39dd8d97591f.22b0d67a6108ce6c.5910ae10c1fe7593.2a99fb67a768e45b
+    9fb35ff29db3d4e7.2868998085d8751b.01fd8a904f6c654c.cd60f4c8a3225569
     99cfe35598585d78.98550a18782b6268.8d6027c4044779ce.2206c6e66b059c04
     44cdd593b02b3dec
 
-VPERMILPS_VAR_256(reg)
+VRSQRTSS_128(reg)
   before
     8e021d3b0d2174cf.94f491c8f4995dc8.c2497635f6488798.6d2871524c7866b9
     5cee9b4a1f727d57.6cf0e637ce828f02.0390da439aba1f57.7b1fe325440ce839
@@ -27546,12 +27546,12 @@
     f323264ed057f407.239972ba6b7e7de7.354776e3c5ce9b35.94cd304fb28a9aa6
     571b037d608c41eb
   after
-    6cf0e637ce828f02.5cee9b4a5cee9b4a.9aba1f570390da43.0390da437b1fe325
+    0000000000000000.0000000000000000.0390da439aba1f57.7b1fe3255bab7000
     5cee9b4a1f727d57.6cf0e637ce828f02.0390da439aba1f57.7b1fe325440ce839
     09e04a2d81ab9430.fd8d5d8f4220b153.b57630ae000d6753.9412f92b070eba79
     f323264ed057f407.239972ba6b7e7de7.354776e3c5ce9b35.94cd304fb28a9aa6
     571b037d608c41eb
-VPERMILPS_VAR_256(mem)
+VRSQRTSS_128(mem)
   before
     b9caeea12e216e75.75022b1ba702d988.badea1a665a8afe9.df4ea84c8588f6ac
     96a46da83755db70.eacb56fea238815e.9e29673e4daa0586.0fd9c057dac7b562
@@ -27561,11 +27561,11 @@
   after
     b9caeea12e216e75.75022b1ba702d988.badea1a665a8afe9.df4ea84c8588f6ac
     96a46da83755db70.eacb56fea238815e.9e29673e4daa0586.0fd9c057dac7b562
-    eacb56feeacb56fe.96a46da8a238815e.4daa05860fd9c057.dac7b562dac7b562
+    0000000000000000.0000000000000000.9e29673e4daa0586.0fd9c057ffc00000
     310d180b6bc66867.21460abb777805bc.bd00a5215569083f.71a696ffb9064f3d
     5c814c757b1da1b9
 
-VPERMILPS_VAR_256(reg)
+VRSQRTSS_128(reg)
   before
     3c0fda3c42ea4726.a7333c3fcf1c00bb.9b918c6c88985a9b.b0251545ad3c2eb4
     6d9b3ac0adf87d2e.08b4e406de41c830.79f424e42e746080.607f0bc563186673
@@ -27573,12 +27573,12 @@
     37e165afd90888c1.fafbb0f96e25db2c.cf3682d9a68e720a.67067b8a5719ff81
     75c9eca6cd56d828
   after
-    08b4e40608b4e406.adf87d2eadf87d2e.79f424e42e746080.2e746080607f0bc5
+    0000000000000000.0000000000000000.79f424e42e746080.607f0bc5ffc00000
     6d9b3ac0adf87d2e.08b4e406de41c830.79f424e42e746080.607f0bc563186673
     4d736a6d55d47f7d.2f5e8c4ab4407df2.16bdcc8f03975516.a9db048e92096da9
     37e165afd90888c1.fafbb0f96e25db2c.cf3682d9a68e720a.67067b8a5719ff81
     75c9eca6cd56d828
-VPERMILPS_VAR_256(mem)
+VRSQRTSS_128(mem)
   before
     b1f3d3cf11ccb3c9.873227f3d222d5a3.4459cdfe27fd9d0a.01ad412eb1e4f607
     f64fadef3e854d91.99b2aca3deaea1d2.e9425e45fcd380ba.066c05fbc0251bba
@@ -27588,11 +27588,11 @@
   after
     b1f3d3cf11ccb3c9.873227f3d222d5a3.4459cdfe27fd9d0a.01ad412eb1e4f607
     f64fadef3e854d91.99b2aca3deaea1d2.e9425e45fcd380ba.066c05fbc0251bba
-    f64fadef99b2aca3.f64fadeff64fadef.fcd380bafcd380ba.fcd380bae9425e45
+    0000000000000000.0000000000000000.e9425e45fcd380ba.066c05fbffc00000
     0acb26c9c4f6ad46.736ff0fb9e49aac1.b3e8cc4968aa993a.fdf48da95c9a3bf1
     a656496221e5aecd
 
-VPERMILPS_VAR_256(reg)
+VRSQRTSS_128(reg)
   before
     9330fa435a4cb20e.9285bf5956c4eb89.f243a77b89705eda.913ca2df37c34663
     21d09db7a45a8461.929f39924107d8a4.a4771218f73981ef.394ddc66920b040d
@@ -27600,12 +27600,12 @@
     8b8da508d99c81ec.6f2bc5ac931bae0d.0e2af058cadf07bb.5bd26cfb5a54a292
     8ddebbe1ff6ffac6
   after
-    a45a8461a45a8461.21d09db7929f3992.f73981efa4771218.920b040da4771218
+    0000000000000000.0000000000000000.a4771218f73981ef.394ddc66ffc00000
     21d09db7a45a8461.929f39924107d8a4.a4771218f73981ef.394ddc66920b040d
     aa802c2a9a9b5f72.e8e8125fa1cb2fc1.e4552b3e843050ab.89e5f6cc948c8f63
     8b8da508d99c81ec.6f2bc5ac931bae0d.0e2af058cadf07bb.5bd26cfb5a54a292
     8ddebbe1ff6ffac6
-VPERMILPS_VAR_256(mem)
+VRSQRTSS_128(mem)
   before
     f9d65d69a0e8532a.204303bdfce8247c.0233ce6632030fb3.7d425cd568d4e2cb
     7d85d07e58cb69eb.c5ed42b59f0c84ce.7fcea9779b8f0ee0.8fe96b1ef89a1d86
@@ -27615,11 +27615,11 @@
   after
     f9d65d69a0e8532a.204303bdfce8247c.0233ce6632030fb3.7d425cd568d4e2cb
     7d85d07e58cb69eb.c5ed42b59f0c84ce.7fcea9779b8f0ee0.8fe96b1ef89a1d86
-    c5ed42b558cb69eb.c5ed42b59f0c84ce.9b8f0ee07fcea977.8fe96b1e7fcea977
+    0000000000000000.0000000000000000.7fcea9779b8f0ee0.8fe96b1e2ac67800
     393c17047e00ba32.af51541fd8086f65.a2e8c65239c5da7d.081363c75fcba1af
     272e43006e4d6275
 
-VPERMILPD_VAR_256(reg)
+VRSQRTPS_128(reg)
   before
     5908b7b5e0d17396.29dce24c256a6e10.aca21f68a5fa7103.020000f3a6871e46
     f8edbb5450e210bf.a0636ed3536fcefb.2918bba562f32113.bad9fc9d4d1cf045
@@ -27627,12 +27627,12 @@
     f1075ffc9cdbded8.9459b649b57785a7.13a357a71e2a7937.a6022bb9b7f53298
     91ea5603b2501943
   after
-    a0636ed3536fcefb.f8edbb5450e210bf.bad9fc9d4d1cf045.2918bba562f32113
-    f8edbb5450e210bf.a0636ed3536fcefb.2918bba562f32113.bad9fc9d4d1cf045
+    5908b7b5e0d17396.29dce24c256a6e10.aca21f68a5fa7103.020000f3a6871e46
+    0000000000000000.0000000000000000.ffc00000ffc00000.ffc000003a6fa800
     622949485a0c759c.7b9e36832419971f.82ff2540ac7fba40.a741373b49920ea7
     f1075ffc9cdbded8.9459b649b57785a7.13a357a71e2a7937.a6022bb9b7f53298
     91ea5603b2501943
-VPERMILPD_VAR_256(mem)
+VRSQRTPS_128(mem)
   before
     45c3330556af7ed4.02d5f7deafdc8620.c85f6a12219254c0.38504f4555819aa4
     9e5a3eabc01f1e79.f2dd1059319baa20.f37ecfc98578bf95.4d510886ed0f5832
@@ -27641,12 +27641,12 @@
     c34a92530d7e9e5e
   after
     45c3330556af7ed4.02d5f7deafdc8620.c85f6a12219254c0.38504f4555819aa4
-    9e5a3eabc01f1e79.f2dd1059319baa20.f37ecfc98578bf95.4d510886ed0f5832
-    f2dd1059319baa20.f2dd1059319baa20.4d510886ed0f5832.4d510886ed0f5832
+    0000000000000000.0000000000000000.ffc000004e6f7000.430de800347e7000
+    797af4e10caab55b.1b6ca3d9bea28583.f2806059fc348353.adf37ed68061f18e
     b0f1cf93555fffa9.daceadcbf17f55f5.9f3299b0a3d35c26.b682ada1ad029f63
     c34a92530d7e9e5e
 
-VPERMILPD_VAR_256(reg)
+VRSQRTPS_128(reg)
   before
     309728593f612c2b.20894daeb747b78d.8c4f2b9966be5424.d760f6b995600539
     58b56b1ddc388375.a510e91c4f709a33.8b3b18b0bae9beb9.76d6f460efe73cb9
@@ -27654,12 +27654,12 @@
     4e92e993cdf07e32.5e166ca690b3d078.e383306a6d39c7cc.59c9bf3849143eae
     55df864181d3827c
   after
-    a510e91c4f709a33.a510e91c4f709a33.8b3b18b0bae9beb9.76d6f460efe73cb9
-    58b56b1ddc388375.a510e91c4f709a33.8b3b18b0bae9beb9.76d6f460efe73cb9
+    309728593f612c2b.20894daeb747b78d.8c4f2b9966be5424.d760f6b995600539
+    0000000000000000.0000000000000000.44c23000ffc00000.3308d000ffc00000
     99ef570d828ee0e9.1b5020cb39e564c9.34de707d888fd163.58600e91cc74bad1
     4e92e993cdf07e32.5e166ca690b3d078.e383306a6d39c7cc.59c9bf3849143eae
     55df864181d3827c
-VPERMILPD_VAR_256(mem)
+VRSQRTPS_128(mem)
   before
     286cdc9990bb4466.d2eb1b1d58e99bfd.4a2e4b9870e59c6f.f47752e50575dda0
     ae3d3f2a93da3d99.8344eb16c00571f5.bb63388ff68782d8.c306d459eace4f8d
@@ -27668,12 +27668,12 @@
     3c4d6dc28b012297
   after
     286cdc9990bb4466.d2eb1b1d58e99bfd.4a2e4b9870e59c6f.f47752e50575dda0
-    ae3d3f2a93da3d99.8344eb16c00571f5.bb63388ff68782d8.c306d459eace4f8d
-    ae3d3f2a93da3d99.8344eb16c00571f5.bb63388ff68782d8.c306d459eace4f8d
+    0000000000000000.0000000000000000.3a1b200026bf2800.ffc000005c82a000
+    c31e29e2a63c2c40.bbe954ea9fd13cc7.8d83af763da63edf.ac7cb131bbd0583c
     43db18abe4ebcb88.d828530594d83a1f.9c582d39624d8eb1.0b25e5db1108355c
     3c4d6dc28b012297
 
-VPERMILPD_VAR_256(reg)
+VRSQRTPS_128(reg)
   before
     9b3f4353c2475a99.0940887369f5d79d.344ce2d339a6a5a8.c3af2cc580882c7a
     844865f854671b10.f318f32552660caa.2da0ffc02ac7ba0f.e0552a04b464d566
@@ -27681,12 +27681,12 @@
     64d07b31f8632207.a054aff7bea9df5e.610bd0a76335d126.69b8114fcb2c3654
     8c0ff132e73167af
   after
-    f318f32552660caa.f318f32552660caa.e0552a04b464d566.e0552a04b464d566
-    844865f854671b10.f318f32552660caa.2da0ffc02ac7ba0f.e0552a04b464d566
+    9b3f4353c2475a99.0940887369f5d79d.344ce2d339a6a5a8.c3af2cc580882c7a
+    0000000000000000.0000000000000000.5083c0005ccc7000.ffc00000523c6800
     53b5ce1eddec9ea5.dc30d7adbb4825dc.1d71a53804c8b400.ce13a2e319ec44a0
     64d07b31f8632207.a054aff7bea9df5e.610bd0a76335d126.69b8114fcb2c3654
     8c0ff132e73167af
-VPERMILPD_VAR_256(mem)
+VRSQRTPS_128(mem)
   before
     15e3c07a890693dd.13e5669e4257e2e0.1a50f7ef7a95f65d.56ba7d7ae1984b2d
     df01f912ccb77509.bc428dd0565419dc.28f02b8108162604.56caa71b1d7f5ec3
@@ -27695,12 +27695,12 @@
     3736eb1351c08c8c
   after
     15e3c07a890693dd.13e5669e4257e2e0.1a50f7ef7a95f65d.56ba7d7ae1984b2d
-    df01f912ccb77509.bc428dd0565419dc.28f02b8108162604.56caa71b1d7f5ec3
-    bc428dd0565419dc.bc428dd0565419dc.56caa71b1d7f5ec3.56caa71b1d7f5ec3
+    0000000000000000.0000000000000000.520db00021ec8800.33d42000ffc00000
+    c53618e5cc51cb60.ba32eb32d0e603a8.a500c899873a2a81.be8749f8b0764891
     a54b99e1a6df4e0e.6b007c324d9adef0.6c4c4924100dbffd.eb3c627c39074346
     3736eb1351c08c8c
 
-VPSLLW_128(reg)
+VRSQRTPS_256(reg)
   before
     ffc2e128962d5f10.5a0ff9f1766dbd3e.2af93d3b69fbe45f.5b9f2a0cc299a1a7
     9f2a4129a4d9f77d.bf4db3025708d21c.526928b9be9652a2.4cc6e73fb6ed8ba9
@@ -27709,11 +27709,11 @@
     cb2b20cb4104d77a
   after
     ffc2e128962d5f10.5a0ff9f1766dbd3e.2af93d3b69fbe45f.5b9f2a0cc299a1a7
-    9f2a4129a4d9f77d.bf4db3025708d21c.526928b9be9652a2.4cc6e73fb6ed8ba9
-    0000000000000000.0000000000000000.0000000000000000.000000000000000a
-    0000000000000000.0000000000000000.a400e40058008800.1800fc00b400a400
-    000000000000000a
-VPSLLW_128(mem)
+    25545800540dd000.ffc000002c53a000.3e67c000ffc00000.507318005a296000
+    73ba068216509180.b2d043fe65bb4ad6.419c3b18ebf66465.1d8dfca70a123a2f
+    d7c02c9d891e69c4.0d6625d2bd93e196.52de71c48aa75553.a8c0e632da166a66
+    cb2b20cb4104d77a
+VRSQRTPS_256(mem)
   before
     6099265e5be83c96.2787b0e798d0baf6.aed9d66a7a9b5288.e07ac72937366219
     45d874d745cf56e7.bf5a8cccdff1c1c2.6ff6d0b3b9df5bd9.49be37b48f2ec762
@@ -27722,12 +27722,12 @@
     36690469ad055c0b
   after
     6099265e5be83c96.2787b0e798d0baf6.aed9d66a7a9b5288.e07ac72937366219
-    45d874d745cf56e7.bf5a8cccdff1c1c2.6ff6d0b3b9df5bd9.49be37b48f2ec762
+    2eea0000313e1000.4b78a800ffc00000.ffc0000021e86800.ffc000004397a000
     54b287221bc4e198.fb86beb9fb0dbad3.2d899197956bb5b5.e7f4bfcf2d1bc0db
-    0000000000000000.0000000000000000.b0009800f800c800.f000a00070001000
+    6af4da2bf8d498d6.3757411888b1e1d6.c55e95042b4c1f47.18695ae8ae89882f
     36690469ad055c0b
 
-VPSLLW_128(reg)
+VRSQRTPS_256(reg)
   before
     9f40bac0c61b781b.646ae9dff80a38cd.cf19125721687176.114056e5968d53bc
     ad3a76589755170a.1ce0302838727da8.1f182be162bfa760.eefc5126f23b0e3f
@@ -27736,11 +27736,11 @@
     84457a61c945c0d9
   after
     9f40bac0c61b781b.646ae9dff80a38cd.cf19125721687176.114056e5968d53bc
-    ad3a76589755170a.1ce0302838727da8.1f182be162bfa760.eefc5126f23b0e3f
-    0000000000000000.0000000000000000.0000000000000000.0000000000000009
-    0000000000000000.0000000000000000.3000c2007e00c000.f8004c0076007e00
-    0000000000000009
-VPSLLW_128(mem)
+    ffc00000ffc00000.27a0d000ffc00000.ffc00000ffc00000.428920003088d000
+    bda2369db9417785.6f222bf4d3182394.839f8a22e840bf3f.395f03b35d600cfd
+    2cc5f5fbca6bd138.39fb572de609e5bd.57fc2a864e7af5c1.cc33e778f00b0922
+    84457a61c945c0d9
+VRSQRTPS_256(mem)
   before
     3d60365a041cee4f.54f0afde665d64ce.57392fc18c50804e.f779077931f6848f
     d352994fbc9b4eaf.926d61b228a56af3.a3a62f9be2fab073.bf631e672c42a958
@@ -27749,12 +27749,12 @@
     9ea6904cc979f242
   after
     3d60365a041cee4f.54f0afde665d64ce.57392fc18c50804e.f779077931f6848f
-    d352994fbc9b4eaf.926d61b228a56af3.a3a62f9be2fab073.bf631e672c42a958
+    4088c8005d237800.34bab0002c09a000.33968000ffc00000.ffc0000046387000
     22e61e2d0dcf9e27.428906e3accf2054.fa0fd3a603123059.0a0669bcdce9a0c6
-    0000000000000000.0000000000000000.8e98be6c8be8c1cc.fd8c799cb108a560
+    06e741de14c398e0.c18f9ade8f65c29d.384098d00ca4be2c.36aee6e4dc78a485
     9ea6904cc979f242
 
-VPSLLW_128(reg)
+VRSQRTPS_256(reg)
   before
     9d3c635e3e7bc6a9.5b227e50ec83f808.69cd190d6cf58c7a.3904f80418bd1318
     91ba5c88d7075c65.fd63526eb21c7ccb.978d7fdee00bb996.d929712f4468ee48
@@ -27763,11 +27763,11 @@
     0bce45aa9c4ef22b
   after
     9d3c635e3e7bc6a9.5b227e50ec83f808.69cd190d6cf58c7a.3904f80418bd1318
-    91ba5c88d7075c65.fd63526eb21c7ccb.978d7fdee00bb996.d929712f4468ee48
-    0000000000000000.0000000000000000.0000000000000000.000000000000000b
-    0000000000000000.0000000000000000.6800f0005800b000.4800780040004000
-    000000000000000b
-VPSLLW_128(mem)
+    ffc00000465ce000.ffc00000ffc00000.ffc00000ffc00000.ffc00000ffc00000
+    d56d753531abef23.c87637248299de54.a71cc9bb8732869d.f4797e3babb109e8
+    c4a1acd0e8f2bc8f.9826ab5d7606dbd0.f5c7f212fbf62e3d.66c29c156aa42225
+    0bce45aa9c4ef22b
+VRSQRTPS_256(mem)
   before
     bf6af7e45dbb3826.bca2fdc79769fe54.49412a07ad702f6b.ddd7f64edbe3ef1f
     5e612db1caf5ae40.17bc6285da9bf31f.b7912e0e40e19550.bb9bd1dbc08603f2
@@ -27776,12 +27776,12 @@
     b11046a0b0268dbe
   after
     bf6af7e45dbb3826.bca2fdc79769fe54.49412a07ad702f6b.ddd7f64edbe3ef1f
-    5e612db1caf5ae40.17bc6285da9bf31f.b7912e0e40e19550.bb9bd1dbc08603f2
+    ffc000003053b000.ffc00000ffc00000.3a935800ffc00000.ffc00000ffc00000
     c38164fcfe0a11a8.333bd8764e14d59b.bee4355c4e68caac.eb5e7f25496aa760
-    0000000000000000.0000000000000000.4000800040000000.c000c00080008000
+    cc9516b016061d88.6a6a5c078f61e175.3a04badef00e8aaa.c96bfd980f1b1615
     b11046a0b0268dbe
 
-VPSRLW_128(reg)
+VMOVDQU_GtoE_256(reg)
   before
     ff9756a9c8164807.5468c1bb2ef38d0d.1996e9a2380d5358.07bd398044e19177
     0f4d2920f278839c.37c7e00861df1e62.9d0b7cb4e5a466f1.00dd2e2f66ed9a3f
@@ -27791,10 +27791,10 @@
   after
     ff9756a9c8164807.5468c1bb2ef38d0d.1996e9a2380d5358.07bd398044e19177
     0f4d2920f278839c.37c7e00861df1e62.9d0b7cb4e5a466f1.00dd2e2f66ed9a3f
-    0000000000000000.0000000000000000.0000000000000000.000000000000000d
-    0000000000000000.0000000000000000.0004000300070003.0000000100030004
-    000000000000000d
-VPSRLW_128(mem)
+    e4750a04eebf6757.7d596a1989e2932f.8f00a0eebdc562f4.eb7e6b6082dda46e
+    e4750a04eebf6757.7d596a1989e2932f.8f00a0eebdc562f4.eb7e6b6082dda46e
+    9397abbbb4d91e2d
+VMOVDQU_GtoE_256(mem)
   before
     d94751d2233e8a97.62800f4af7bc89d6.9924ceb4b611eefe.b7172aee2066c2b6
     9858da90ec17a5d7.12e9c7ac835b1b51.7faa96416f6f5a4e.22a8a915f723b4dd
@@ -27802,13 +27802,13 @@
     f0cf81b7fa56d78c.7708417992ad7de9.1e1b42e2f2e5541f.34637787731e3e0d
     9326bdab4f754d6d
   after
-    d94751d2233e8a97.62800f4af7bc89d6.9924ceb4b611eefe.b7172aee2066c2b6
+    ab96c0e32a702a1a.4ffd2e982d275873.0db83eadcf07934a.2dfd19cedf877416
     9858da90ec17a5d7.12e9c7ac835b1b51.7faa96416f6f5a4e.22a8a915f723b4dd
     ab96c0e32a702a1a.4ffd2e982d275873.0db83eadcf07934a.2dfd19cedf877416
-    0000000000000000.0000000000000000.0003000400030002.0001000500070005
+    f0cf81b7fa56d78c.7708417992ad7de9.1e1b42e2f2e5541f.34637787731e3e0d
     9326bdab4f754d6d
 
-VPSRLW_128(reg)
+VMOVDQU_GtoE_256(reg)
   before
     a792e9a61117dee3.41cd98f678d46658.e556fbbb4e78c65f.8d9d1ecef5155af8
     caf3f7e552902d1a.7c5e828dbef693ab.f43358cafc146e80.380b4f5cf4a46102
@@ -27818,10 +27818,10 @@
   after
     a792e9a61117dee3.41cd98f678d46658.e556fbbb4e78c65f.8d9d1ecef5155af8
     caf3f7e552902d1a.7c5e828dbef693ab.f43358cafc146e80.380b4f5cf4a46102
-    0000000000000000.0000000000000000.0000000000000000.000000000000000c
-    0000000000000000.0000000000000000.000f0005000f0006.00030004000f0006
-    000000000000000c
-VPSRLW_128(mem)
+    b0c3a5dac739f47e.1b64bb741858bb95.6ac9ec009ff0ce75.adda9d0d540c6158
+    b0c3a5dac739f47e.1b64bb741858bb95.6ac9ec009ff0ce75.adda9d0d540c6158
+    31d3b20aedfed2fc
+VMOVDQU_GtoE_256(mem)
   before
     5fe90c58f17e3481.2bca3d6a3281e402.3972039c64b02d84.871a1bfecc49fea1
     14e626e47d994212.26f6a8ec8dcf81f8.af420dcbe8dc2da9.b72bdd7a5ca27d28
@@ -27829,13 +27829,13 @@
     84c88a679bcd550a.0ceddf7b85b3b6e8.175658f30ee0cb47.bbb70a98128a5bfa
     49cc6e13712f319c
   after
-    5fe90c58f17e3481.2bca3d6a3281e402.3972039c64b02d84.871a1bfecc49fea1
+    2d977c9aac5ab9db.fd93dfce75b2090b.5b9f55efc3e87931.54452edfea8988b7
     14e626e47d994212.26f6a8ec8dcf81f8.af420dcbe8dc2da9.b72bdd7a5ca27d28
     2d977c9aac5ab9db.fd93dfce75b2090b.5b9f55efc3e87931.54452edfea8988b7
-    0000000000000000.0000000000000000.000a0000000e0002.000b000d00050007
+    84c88a679bcd550a.0ceddf7b85b3b6e8.175658f30ee0cb47.bbb70a98128a5bfa
     49cc6e13712f319c
 
-VPSRLW_128(reg)
+VMOVDQU_GtoE_256(reg)
   before
     58cf55bba306474a.f644cc3566fed2c8.ae4fa55f5a60c43b.c03491c3e7d1e018
     450ebbfc439bd9b0.60d9bff227faeb44.41062ce68f4471af.32037c4b6ac673d0
@@ -27845,10 +27845,10 @@
   after
     58cf55bba306474a.f644cc3566fed2c8.ae4fa55f5a60c43b.c03491c3e7d1e018
     450ebbfc439bd9b0.60d9bff227faeb44.41062ce68f4471af.32037c4b6ac673d0
-    0000000000000000.0000000000000000.0000000000000000.0000000000000006
-    0000000000000000.0000000000000000.010400b3023d01c6.00c801f101ab01cf
-    0000000000000006
-VPSRLW_128(mem)
+    2a6bf5f93f2b6051.8779a5e50181e420.a7a46e8d8ce293ac.e2a65833dbee06a3
+    2a6bf5f93f2b6051.8779a5e50181e420.a7a46e8d8ce293ac.e2a65833dbee06a3
+    d713426c02387e16
+VMOVDQU_GtoE_256(mem)
   before
     05a2ce0c43b76420.d922c08dd240cde5.fd1d90f452243bda.322220858ab4818d
     481e7801b97575ed.d644fb6b4441a6e1.da091ca109c120ff.1c2584d059eefc40
@@ -27856,13 +27856,13 @@
     7d101796b5e4077e.2bf8afb1333d8bc0.39e803851f1b7e41.82e94f10d9c78cc9
     b442afddc27f19f9
   after
-    05a2ce0c43b76420.d922c08dd240cde5.fd1d90f452243bda.322220858ab4818d
+    7c54bc3580816da8.7e1ca1fd30bc26f1.fa09c3d844654cbe.c3f895db951b4170
     481e7801b97575ed.d644fb6b4441a6e1.da091ca109c120ff.1c2584d059eefc40
     7c54bc3580816da8.7e1ca1fd30bc26f1.fa09c3d844654cbe.c3f895db951b4170
-    0000000000000000.0000000000000000.006d000e00040010.000e0042002c007e
+    7d101796b5e4077e.2bf8afb1333d8bc0.39e803851f1b7e41.82e94f10d9c78cc9
     b442afddc27f19f9
 
-VPSRAW_128(reg)
+VCVTPS2PD_256(reg)
   before
     b750b0adebce23aa.271e040f73ac019a.3a221ff2e84e0efa.73745794b5ef70b4
     e55f4eebf040e788.5649ff8cd7e51529.07e7ef2bec7eee4d.84773cf223eee045
@@ -27872,10 +27872,10 @@
   after
     b750b0adebce23aa.271e040f73ac019a.3a221ff2e84e0efa.73745794b5ef70b4
     e55f4eebf040e788.5649ff8cd7e51529.07e7ef2bec7eee4d.84773cf223eee045
-    0000000000000000.0000000000000000.0000000000000000.0000000000000019
-    0000000000000000.0000000000000000.0000ffffffffffff.ffff00000000ffff
-    0000000000000019
-VPSRAW_128(mem)
+    416e538740000000.41ec961d00000000.bb62b4a8e0000000.c693448d60000000
+    36b0516601be8c7e.b32a0f42ffd67d4f.4b729c3a4f64b0e8.9b15a547f49a246b
+    5948221690607159
+VCVTPS2PD_256(mem)
   before
     5e231fe4747f2b13.1189af7a44e3e5ed.98781d53fba7493e.7acf72e7e6330b89
     8571199cba060ec6.879499add35ae83a.731329180d19204f.d7f8973d3c4fb2f1
@@ -27885,11 +27885,11 @@
   after
     5e231fe4747f2b13.1189af7a44e3e5ed.98781d53fba7493e.7acf72e7e6330b89
     8571199cba060ec6.879499add35ae83a.731329180d19204f.d7f8973d3c4fb2f1
-    acff8b2a81fed59e.f61b0d6c4bb1d111.1fc7af7d5037bdaf.be3707a8ec45e0cd
-    0000000000000000.0000000000000000.3989148c068c1027.ebfccb9e1e27d978
+    bb0f03aa60000000.c774e927c0000000.4759ee5ce0000000.c4c6617120000000
+    ae9af17ae3763dc6.b86b07214774db1d.78622b6fe10ddd89.8bd9be9593a0d2c9
     9a2ab86eccedc491
 
-VPSRAW_128(reg)
+VCVTPS2PD_256(reg)
   before
     4676f2a134b6f1cf.670cc778fc77026b.2ad08139642d430a.5aaf1ad8dba83c0b
     ed096698668a9632.b2218910e90fe0b9.a99679213d6a4586.a079f7a65a13965e
@@ -27899,10 +27899,10 @@
   after
     4676f2a134b6f1cf.670cc778fc77026b.2ad08139642d430a.5aaf1ad8dba83c0b
     ed096698668a9632.b2218910e90fe0b9.a99679213d6a4586.a079f7a65a13965e
-    0000000000000000.0000000000000000.0000000000000000.0000000000000001
-    0000000000000000.0000000000000000.d4cb3c901eb522c3.d03cfbd32d09cb2f
-    0000000000000001
-VPSRAW_128(mem)
+    3f2e9a01a0000000.bab3c0baa0000000.c1b70d63c0000000.43514525c0000000
+    9932f287997c3712.7269c2bfad31d5fe.3974d00d959e05d5.cdb86b1e5a8a292e
+    6ac4faa012aedb01
+VCVTPS2PD_256(mem)
   before
     dd7d6836bfd37857.55620056d2b3ace7.9f3231adbcd4654d.032427ea4cad3c01
     00b130cc7e04bb5c.7c083a9946248890.cfcf7de60f3dfdf5.4a65ec462f70fd6b
@@ -27912,11 +27912,11 @@
   after
     dd7d6836bfd37857.55620056d2b3ace7.9f3231adbcd4654d.032427ea4cad3c01
     00b130cc7e04bb5c.7c083a9946248890.cfcf7de60f3dfdf5.4a65ec462f70fd6b
-    b12ace4e6a4d613b.69719bbf915a07b9.dd0c2055c1785a21.6883198ddb7183be
-    0000000000000000.0000000000000000.e7e73ef3079efefa.2532f62317b8feb5
+    bbe64635a0000000.bf9a8ca9a0000000.386484fd40000000.4195a78020000000
+    cab6bea8a0ba2621.77e81f314de1670d.a7b598e5ee9238ff.bacaac2beb3e0ba7
     9c86a18cfc63d1d1
 
-VPSRAW_128(reg)
+VCVTPS2PD_256(reg)
   before
     6a02f21da96b11e9.291f7cc73b58c53a.04bbc25c1945e238.07966084b39653b8
     808b9d488ee2069b.a83285955832fbb1.6a3481ac8f13b5e8.da7af41d2c91667a
@@ -27926,10 +27926,10 @@
   after
     6a02f21da96b11e9.291f7cc73b58c53a.04bbc25c1945e238.07966084b39653b8
     808b9d488ee2069b.a83285955832fbb1.6a3481ac8f13b5e8.da7af41d2c91667a
-    0000000000000000.0000000000000000.0000000000000000.000000000000000d
-    0000000000000000.0000000000000000.0003fffcfffcfffd.fffeffff00010003
-    000000000000000d
-VPSRAW_128(mem)
+    3ea987ed80000000.c5236a5020000000.414fee3da0000000.bcf32cf920000000
+    f4f5ee20724e017a.7a8665f286cb1c6a.354c3f6ce91b5281.4a7f71eda79967c9
+    9f3751fce2beccad
+VCVTPS2PD_256(mem)
   before
     d623eeb6410a1a49.0a6d8ca5a95b8001.845e3559cfa27e05.528237b4076d94c3
     cc0fc405de880dcb.d82173758907a4d1.1f103e200ae667af.b88f3bd13e591d39
@@ -27939,11 +27939,11 @@
   after
     d623eeb6410a1a49.0a6d8ca5a95b8001.845e3559cfa27e05.528237b4076d94c3
     cc0fc405de880dcb.d82173758907a4d1.1f103e200ae667af.b88f3bd13e591d39
-    5dc74dd7d845615d.ba5fa0fbaddfaa96.2869fe3352a29393.c5be452e2c692b8e
-    0000000000000000.0000000000000000.003e007c001500cf.ff710077007c003a
+    b88bc6ab20000000.c1f44fc0a0000000.425046f680000000.38edb29860000000
+    66160716494bd12b.0c710ea5b16ecdfe.7933f07ec4e2bedd.d35d53396d2bf86f
     3fb6605d9c2ac187
 
-VPSLLD_128(reg)
+VCVTTPS2DQ_128(reg)
   before
     6616690655f3c184.c1ca6db04da91a62.29a5b9de32414ab2.ef3b90ed7bb3a3bb
     a2c968a13511360f.4badfb900168f82e.6f459e13cbe35d61.664c5b6c931fff57
@@ -27953,10 +27953,10 @@
   after
     6616690655f3c184.c1ca6db04da91a62.29a5b9de32414ab2.ef3b90ed7bb3a3bb
     a2c968a13511360f.4badfb900168f82e.6f459e13cbe35d61.664c5b6c931fff57
-    0000000000000000.0000000000000000.0000000000000000.000000000000001a
-    0000000000000000.0000000000000000.4c00000084000000.b00000005c000000
-    000000000000001a
-VPSLLD_128(mem)
+    0000000000000000.0000000000000000.8000000000000000.fffe834480000000
+    cc583d58d97d6a85.5c337fd2e63e6233.e3fb021cb7c4345a.c7be5e4b58fe0b7a
+    69b58f833d88335a
+VCVTTPS2DQ_128(mem)
   before
     7de6db7af4dec1a8.72cb0a4ed4e3a1c8.9b6d6e0c516d65c4.c8aa7aca411c71fd
     dd1dbc1e980d7391.9fc2bee466cf3c4a.7908753cda2eee9a.46f51c225574324a
@@ -27966,11 +27966,11 @@
   after
     7de6db7af4dec1a8.72cb0a4ed4e3a1c8.9b6d6e0c516d65c4.c8aa7aca411c71fd
     dd1dbc1e980d7391.9fc2bee466cf3c4a.7908753cda2eee9a.46f51c225574324a
-    6526b05a45200340.ad8756882acb77b7.d2ce104e9f8db7e1.b82ae2928c56b6ec
-    0000000000000000.0000000000000000.e421d4f068bbba68.1bd4708855d0c928
+    0000000000000000.0000000000000000.0000000080000000.fffaac2a00000009
+    f3cc321a18232ee2.f967cda5bd658ebc.828dbc2ebc977ec4.7993ca8484503790
     e77dcf66d9edf2e2
 
-VPSLLD_128(reg)
+VCVTTPS2DQ_128(reg)
   before
     5c34eda326ba238d.62ddbe4a2c23b0a2.dfae1fa6ba29bc05.650ff3c94c57fc70
     360420a70742053d.8e23d1d69e2b44ae.bba848f9bea23e3e.572133096bd9f010
@@ -27980,10 +27980,10 @@
   after
     5c34eda326ba238d.62ddbe4a2c23b0a2.dfae1fa6ba29bc05.650ff3c94c57fc70
     360420a70742053d.8e23d1d69e2b44ae.bba848f9bea23e3e.572133096bd9f010
-    0000000000000000.0000000000000000.0000000000000000.0000000000000005
-    0000000000000000.0000000000000000.75091f20d447c7c0.e42661207b3e0200
-    0000000000000005
-VPSLLD_128(mem)
+    0000000000000000.0000000000000000.ffffe37e001c65c5.80000000fff2ada3
+    851db7b4f8b4cf60.8d8278b20a849554.c5e4104349e32e2d.d824bb2dc95525de
+    1eaefce83f66df65
+VCVTTPS2DQ_128(mem)
   before
     e4f735f8b46afd8f.b20012963eb62f29.183105da3cedca47.abbea71108c4133c
     05cce14b456c3c8b.b32b72ee8aa330a8.cf47090f3b8e0134.f67b05e03e8a3ceb
@@ -27993,11 +27993,11 @@
   after
     e4f735f8b46afd8f.b20012963eb62f29.183105da3cedca47.abbea71108c4133c
     05cce14b456c3c8b.b32b72ee8aa330a8.cf47090f3b8e0134.f67b05e03e8a3ceb
-    5df97fcd0d785883.e5ebd32976080f89.908ffe3c2474f748.0467271c86c2e4e6
-    0000000000000000.0000000000000000.e121e000c0268000.60bc0000479d6000
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    c74a8868299b0da3.a28b32b49e700877.36d4624c13aa67af.30ce07327cf649d7
     d6fca38dbdb5a56d
 
-VPSLLD_128(reg)
+VCVTTPS2DQ_128(reg)
   before
     523cf698e5883552.218b7a09b4e01618.47598af99f67571f.9ce4b02d233c0f94
     ffdcfcc18ffd3433.4687cf9ccb53300e.319fd766147a372c.a08964ca7037a924
@@ -28007,10 +28007,10 @@
   after
     523cf698e5883552.218b7a09b4e01618.47598af99f67571f.9ce4b02d233c0f94
     ffdcfcc18ffd3433.4687cf9ccb53300e.319fd766147a372c.a08964ca7037a924
-    0000000000000000.0000000000000000.0000000000000000.000000000000000c
-    0000000000000000.0000000000000000.fd766000a372c000.964ca0007a924000
-    000000000000000c
-VPSLLD_128(mem)
+    0000000000000000.0000000000000000.00000001fd798f60.8000000000000000
+    6167121adafb7297.60e498490bf5862b.3fc74165cc219c28.eec4efe83495a5f4
+    f1f3be41e211808c
+VCVTTPS2DQ_128(mem)
   before
     00e7e3063d253d7e.cceb1a22b49c2973.0ddc023b6c3b3aab.1c4056cf46ce9a6e
     f96eda2362de98f7.dafec5f77f0e40fa.f6c0c1cfc8e0ef5b.ad625010a5c619ca
@@ -28020,11 +28020,11 @@
   after
     00e7e3063d253d7e.cceb1a22b49c2973.0ddc023b6c3b3aab.1c4056cf46ce9a6e
     f96eda2362de98f7.dafec5f77f0e40fa.f6c0c1cfc8e0ef5b.ad625010a5c619ca
-    b65220856c474f22.e6eb1005daddf2d8.f55b50f13cef6167.4e782b94859555e7
-    0000000000000000.0000000000000000.e7800000ad800000.08000000e5000000
+    0000000000000000.0000000000000000.0000000080000000.000000000000674d
+    15603016786c1c2c.4b00f5b95e967cbb.e87b2b8de4754bfd.5bd0e3c881c88c72
     30b4751636eaf817
 
-VPSRLD_128(reg)
+VCVTTPS2DQ_256(reg)
   before
     2971dceb3e87d681.f06485c4a159bc41.6787727daac5194d.a9eace8fdb7d6a47
     a25314b4382c625d.242a9e79041bea8c.94cd82bf57f4063a.1576b6e33d137a71
@@ -28034,10 +28034,10 @@
   after
     2971dceb3e87d681.f06485c4a159bc41.6787727daac5194d.a9eace8fdb7d6a47
     a25314b4382c625d.242a9e79041bea8c.94cd82bf57f4063a.1576b6e33d137a71
-    0000000000000000.0000000000000000.0000000000000000.000000000000000c
-    0000000000000000.0000000000000000.00094cd800057f40.0001576b0003d137
-    000000000000000c
-VPSRLD_128(mem)
+    0000000080000000.0000000080000000.000000000043e06c.8000000000000000
+    84b6e8ce6cbc7219.082b05ade64ce477.95c64b694a87c0d8.5f104131b51a5b18
+    f4b7dd0402a3a5ec
+VCVTTPS2DQ_256(mem)
   before
     a4a9aed82aebd051.a5cf7bf8dfbf6f52.6ffe4b039dd2276e.2010fdaac70305e0
     4cb42f9b4afd9772.b63cd0c5b2f909ac.9fc34411fd5ee84b.2e4a321817b089f4
@@ -28047,11 +28047,11 @@
   after
     a4a9aed82aebd051.a5cf7bf8dfbf6f52.6ffe4b039dd2276e.2010fdaac70305e0
     4cb42f9b4afd9772.b63cd0c5b2f909ac.9fc34411fd5ee84b.2e4a321817b089f4
-    c6a2db387de5b77c.134ae2a182f67ed4.75466cc323f9e43b.19bee61fd51a89bf
-    0000000000000000.0000000000000000.0004fe1a0007eaf7.000172510000bd84
+    0000000000000000.0000000080000000.8000000000000000.00000000ffff7cfb
+    ef40309ae0afec9b.1745aef8ea430875.cb533d052bb1d76a.3eb9152b9dce40ee
     fa88bca80c57ec2d
 
-VPSRLD_128(reg)
+VCVTTPS2DQ_256(reg)
   before
     a774d502be41c727.a35aaaaf8e68f1fa.20792e37876be33c.7eb535c430917d04
     a2cc5ea64e190d89.bebcc362a41b84c6.893260c8f4fb4dd5.6a3acfea4ea69134
@@ -28061,10 +28061,10 @@
   after
     a774d502be41c727.a35aaaaf8e68f1fa.20792e37876be33c.7eb535c430917d04
     a2cc5ea64e190d89.bebcc362a41b84c6.893260c8f4fb4dd5.6a3acfea4ea69134
-    0000000000000000.0000000000000000.0000000000000000.0000000000000003
-    0000000000000000.0000000000000000.11264c191e9f69ba.0d4759fd09d4d226
-    0000000000000003
-VPSRLD_128(mem)
+    8000000080000000.0000000080000000.8000000000000000.80000000000139ec
+    f2ecae7879c1ce34.9988c75275a13e53.ea62c894b080b92a.5dd8d91f479cf607
+    1c8a42065a96be03
+VCVTTPS2DQ_256(mem)
   before
     848e3d05f7f4e646.ff4c6d7e4ca8c0d4.1189a9686a8bde6d.9b72f5a6378d3340
     71b0460838c228fb.ca478a7e6ead0e8c.60021bcb35a0fca3.1b36c4bcfe322cd7
@@ -28074,11 +28074,11 @@
   after
     848e3d05f7f4e646.ff4c6d7e4ca8c0d4.1189a9686a8bde6d.9b72f5a6378d3340
     71b0460838c228fb.ca478a7e6ead0e8c.60021bcb35a0fca3.1b36c4bcfe322cd7
-    bfbbd9fb3c0c404e.b02903e37a5cf308.62bf9a68f4eb5122.c8fb3041a1fbde9b
-    0000000000000000.0000000000000000.0000000300000001.0000000000000007
+    0000000080000000.80000000054606a0.0000000080000000.0000000000000000
+    4a7c72ca1cdfec6c.0b3ed4190d3facf4.f38ca12cc3789c15.fd0d35a1bd728539
     15b7cf48ee255f5d
 
-VPSRLD_128(reg)
+VCVTTPS2DQ_256(reg)
   before
     6d47fba2cf9fa6b2.eec08e61f747e681.38d2f78cc2e575fb.ef35ac02bd5497a9
     6207b41bfc6d97e5.8651a8ace64eebb8.92306aa836d789c9.328637d5fe8aff0a
@@ -28088,10 +28088,10 @@
   after
     6d47fba2cf9fa6b2.eec08e61f747e681.38d2f78cc2e575fb.ef35ac02bd5497a9
     6207b41bfc6d97e5.8651a8ace64eebb8.92306aa836d789c9.328637d5fe8aff0a
-    0000000000000000.0000000000000000.0000000000000000.000000000000000f
-    0000000000000000.0000000000000000.0001246000006daf.0000650c0001fd15
-    000000000000000f
-VPSRLD_128(mem)
+    0000000000000000.0000000080000000.0000003fffe56f53.80000000ffff4afb
+    8f4bbd1bac326694.078cc60f766f043f.427e2d8bc9d4856d.fc4ebe27c73505e1
+    3c5fb27d87c21baf
+VCVTTPS2DQ_256(mem)
   before
     33471681fed98efa.7f6505796742bc67.a7cfc3ff4e9f91e6.4f05752b20f6e59a
     bcd2671f49871aed.7be1cba7ded5abc8.ab8fad52aca01960.fa86fd23a596803f
@@ -28101,11 +28101,11 @@
   after
     33471681fed98efa.7f6505796742bc67.a7cfc3ff4e9f91e6.4f05752b20f6e59a
     bcd2671f49871aed.7be1cba7ded5abc8.ab8fad52aca01960.fa86fd23a596803f
-    b5ce1f4483d77ab5.e00a0a0fae777163.f19a02f6ab7e57d8.9f4fc0e1f53f9408
-    0000000000000000.0000000000000000.00000ab800000aca.00000fa800000a59
+    0000000080000000.8000000080000000.000000004fc8f300.8000000000000000
+    f906bcdac9d56b7e.082bbe1f72b548e4.54ba3dd66744087b.99abbad0ac7e5aa0
     46e5e75b65de11b4
 
-VPSRAD_128(reg)
+VCVTDQ2PS_128(reg)
   before
     014a43f0bcebf3ef.6345b9ce368ea973.5092e342c71a6df6.afbcdbdefdfee874
     2626cbfa4e323dfe.d158920de70defc1.148976e448321b45.e06b57fa88b8b3f1
@@ -28115,10 +28115,10 @@
   after
     014a43f0bcebf3ef.6345b9ce368ea973.5092e342c71a6df6.afbcdbdefdfee874
     2626cbfa4e323dfe.d158920de70defc1.148976e448321b45.e06b57fa88b8b3f1
-    0000000000000000.0000000000000000.0000000000000000.000000000000000c
-    0000000000000000.0000000000000000.0001489700048321.fffe06b5fff88b8b
-    000000000000000c
-VPSRAD_128(mem)
+    0000000000000000.0000000000000000.cefd4c594e815a0d.4e401760cd7a107e
+    1d734c1d919bf847.252aca18838e8617.8159d35540ad064d.3005d81ef05ef821
+    0786d7fe0361eb2c
+VCVTDQ2PS_128(mem)
   before
     24e5a3a37d95b86b.a77c3d0f7bd5e1d8.c3811fbda6a84f77.e1cb95fcee28ba5e
     61eebaf777051c08.0c2b4a250e7922ee.d5dc425c7cb910df.2dfeb4d23985e75c
@@ -28128,11 +28128,11 @@
   after
     24e5a3a37d95b86b.a77c3d0f7bd5e1d8.c3811fbda6a84f77.e1cb95fcee28ba5e
     61eebaf777051c08.0c2b4a250e7922ee.d5dc425c7cb910df.2dfeb4d23985e75c
-    9c6d97e810bed330.a6cd6dcce912f733.3506ace122cc867c.c13d2d44bd52caf3
-    0000000000000000.0000000000000000.ffffffff00000000.0000000000000000
+    0000000000000000.0000000000000000.ce71fb81ceb2af61.cdf1a350cd8eba2d
+    af2eb66061cb990e.d3aea471a52d9b53.c0ccda38b4ed6d79.f9d5fbbc151b9fd1
     31121aa8dd6ba29f
 
-VPSRAD_128(reg)
+VCVTDQ2PS_128(reg)
   before
     c5408673b2ce0e0c.77fc934d893829cf.ed1aeb7fe0554bfb.53fa494e4d288003
     10ab3c8830d020c2.d0a5ab9aa111409e.525d3c61361643d7.c85c740d098a7c46
@@ -28142,10 +28142,10 @@
   after
     c5408673b2ce0e0c.77fc934d893829cf.ed1aeb7fe0554bfb.53fa494e4d288003
     10ab3c8830d020c2.d0a5ab9aa111409e.525d3c61361643d7.c85c740d098a7c46
-    0000000000000000.0000000000000000.0000000000000000.0000000000000019
-    0000000000000000.0000000000000000.000000290000001b.ffffffe400000004
-    0000000000000019
-VPSRAD_128(mem)
+    0000000000000000.0000000000000000.4ed32fe3cebcd40c.ce504c434eb9e23f
+    4067724594e326ba.a6b379041739f319.6997f156a195f9d9.cbecef3a5cf11fa5
+    12b1367f2b0e3d19
+VCVTDQ2PS_128(mem)
   before
     abdb2a1f8d8134f6.dc50ecc4b30c9155.dab127f9aca0061c.d3274c40ee6a3057
     733446059f57c068.a0a69e3eea0392ea.0fb9ffffa2a390de.f7bda2afc5099fb9
@@ -28155,11 +28155,11 @@
   after
     abdb2a1f8d8134f6.dc50ecc4b30c9155.dab127f9aca0061c.d3274c40ee6a3057
     733446059f57c068.a0a69e3eea0392ea.0fb9ffffa2a390de.f7bda2afc5099fb9
-    4689071d7c9a9c9a.e8b5861fd6576524.21967e00164e4c8a.31a6ef0fc3fd81ab
-    0000000000000000.0000000000000000.00007dcffffd151c.ffffbdedfffe284c
+    0000000000000000.0000000000000000.ce153b60cea6bff4.ce3362cfcd8cae7d
+    00a6e753415986b9.0fc99ed4129145af.ed161fe924adf84d.de2e30cc84d213d8
     58a06053a31591ed
 
-VPSRAD_128(reg)
+VCVTDQ2PS_128(reg)
   before
     fc4a7b0ebc513796.7d566493099d37f0.732ee4c73a3f6f38.4d035ea7e7cd4e53
     26767e6b6c12407e.9967f9c9f1746e6c.6f2f5466ebec1f6b.1e2ab8247bba0ac7
@@ -28169,10 +28169,10 @@
   after
     fc4a7b0ebc513796.7d566493099d37f0.732ee4c73a3f6f38.4d035ea7e7cd4e53
     26767e6b6c12407e.9967f9c9f1746e6c.6f2f5466ebec1f6b.1e2ab8247bba0ac7
-    0000000000000000.0000000000000000.0000000000000000.0000000000000013
-    0000000000000000.0000000000000000.00000de5fffffd7d.000003c500000f77
-    0000000000000013
-VPSRAD_128(mem)
+    0000000000000000.0000000000000000.cec38cc34eaeea01.cef952aeceefb0af
+    7c8828b7ff556dbc.1ed85bc88e095ae2.9e399e545775007d.8356a9108827a8ab
+    cff3395639c00173
+VCVTDQ2PS_128(mem)
   before
     fbf9d30c2b56b15a.6005c87f1aef0a6b.3fd021687cdf8634.89d9717c4a68a9b5
     e535f41e7bf4738b.3a343f983c3dfa0a.6f58efaffa77287a.7d455dff358bc746
@@ -28182,11 +28182,11 @@
   after
     fbf9d30c2b56b15a.6005c87f1aef0a6b.3fd021687cdf8634.89d9717c4a68a9b5
     e535f41e7bf4738b.3a343f983c3dfa0a.6f58efaffa77287a.7d455dff358bc746
-    6874167844a60433.66638a6e00ce7a44.8a3c418723defae1.d4cb5e49b46998dc
-    0000000000000000.0000000000000000.000deb1dffff4ee5.000fa8ab0006b178
+    0000000000000000.0000000000000000.4e7f40864ef9bf0c.ceec4d1d4e94d153
+    6080b706a379207d.40dca36d032bc5c5.6c4793de131fb995.ecb671c6648e5625
     1f5191e2e0863ecb
 
-VPSLLQ_128(reg)
+VCVTDQ2PS_256(reg)
   before
     cbe9ba09c5de8b7a.a92652b5b3788396.24ed8801e0e2183a.f047629fe74621c1
     4acae8a8af227bdf.1f31636f91afe8aa.6ee03597347eaf4f.f40628b6ba60ed92
@@ -28196,10 +28196,10 @@
   after
     cbe9ba09c5de8b7a.a92652b5b3788396.24ed8801e0e2183a.f047629fe74621c1
     4acae8a8af227bdf.1f31636f91afe8aa.6ee03597347eaf4f.f40628b6ba60ed92
-    0000000000000000.0000000000000000.0000000000000000.0000000000000018
-    0000000000000000.0000000000000000.97347eaf4f000000.b6ba60ed92000000
-    0000000000000018
-VPSLLQ_128(mem)
+    4e565d14cacba10c.4bd56cdc4e13deaa.ceb6c05bcea2d2d0.cdb05b8bce3d956d
+    359744faff9a2f7a.01aad9b824f7aa70.a49fd275ae969807.e9f48e96d09aa4d1
+    91bb263749d30798
+VCVTDQ2PS_256(mem)
   before
     2972a5de332ebeb3.581b6a859ee86b08.26b0351f1220807c.4802bc950d2a6203
     8ce48978a7b7864e.bf178538b15039fb.e74bf7423eb04832.c1795d6753d4604e
@@ -28209,11 +28209,11 @@
   after
     2972a5de332ebeb3.581b6a859ee86b08.26b0351f1220807c.4802bc950d2a6203
     8ce48978a7b7864e.bf178538b15039fb.e74bf7423eb04832.c1795d6753d4604e
-    95df4defc37b1a97.c6d8917ed460d500.22489b0dc3b5bfbe.6d4eb1561b1fce95
-    0000000000000000.0000000000000000.e97ee847d6090640.2f2bacea7a8c09c0
+    4e25ca974e4cbafb.4eb036d5cec22f2a.4e1ac0d44d910404.4e9005794d52a620
+    222d6d31a38538b8.caaa8bc3a5a47bc3.b1729e6cbd3ba04d.a7cfb5ce0197e783
     ca46643aa2c8e8c5
 
-VPSLLQ_128(reg)
+VCVTDQ2PS_256(reg)
   before
     34ffb909993f0d07.0d9b662862e29add.25d96e73bda666ef.72977b4b494ca90b
     4048b3a4838891f4.34f5b2c21d9dfd33.34b136fabaf5d331.3f82ae9682f79423
@@ -28223,10 +28223,10 @@
   after
     34ffb909993f0d07.0d9b662862e29add.25d96e73bda666ef.72977b4b494ca90b
     4048b3a4838891f4.34f5b2c21d9dfd33.34b136fabaf5d331.3f82ae9682f79423
-    0000000000000000.0000000000000000.0000000000000000.0000000000000004
-    0000000000000000.0000000000000000.4b136fabaf5d3310.f82ae9682f794230
-    0000000000000004
-VPSLLQ_128(mem)
+    cea49302cec286ad.cebac78fcd3a24ae.ce05d26bce357375.4ee3b00e4eda8804
+    adb67ef19ebca981.a29c388cf45db521.de8b653dd2a322a5.71d807216d440214
+    8edc243857fffd44
+VCVTDQ2PS_256(mem)
   before
     27d6886c5e82cb7e.c673497c08c0b579.a1826a94497b8211.3126c5d2241b7d30
     1992aea89fda27f0.f2f0a783d3c610cc.4b83dfee0a2740e1.a899faedcb0e4980
@@ -28236,11 +28236,11 @@
   after
     27d6886c5e82cb7e.c673497c08c0b579.a1826a94497b8211.3126c5d2241b7d30
     1992aea89fda27f0.f2f0a783d3c610cc.4b83dfee0a2740e1.a899faedcb0e4980
-    41db13d73512cfc3.8b7794749d59f727.7d6c1586526eaabe.9f3100fc6309c242
-    0000000000000000.0000000000000000.0f7fb8289d038400.67ebb72c39260000
+    4e1f5a224ebd0597.ce6632da4d0c0b58.cebcfb2b4e92f704.4e449b174e106df5
+    797f31e73d377d26.ef540dba0205a636.110987493d5a7dd4.723ad36987972621
     7d0070a2d345afca
 
-VPSLLQ_128(reg)
+VCVTDQ2PS_256(reg)
   before
     1cced212e49d99e9.9e4886c3d254ee43.78d50cc09d5758a4.e426b121e8fa754e
     aaf2f525552e2229.8d038d571175dd47.83458ff40bda4a1e.d38e10fb6e574e59
@@ -28250,10 +28250,10 @@
   after
     1cced212e49d99e9.9e4886c3d254ee43.78d50cc09d5758a4.e426b121e8fa754e
     aaf2f525552e2229.8d038d571175dd47.83458ff40bda4a1e.d38e10fb6e574e59
-    0000000000000000.0000000000000000.0000000000000000.0000000000000015
-    0000000000000000.0000000000000000.fe817b4943c00000.1f6dcae9cb200000
-    0000000000000015
-VPSLLQ_128(mem)
+    4d0676eece5b6c0d.4e51fe89cca17aea.cedfbfe1ce496c84.4ee0e6b34efafb24
+    08676ee4c924fcbe.347fa258faf428b2.90200f93cda4dee4.707359677d7d91d1
+    d7873cd03e5e7495
+VCVTDQ2PS_256(mem)
   before
     c91743ea4a2d279a.8f51bd6804a2c66b.a5d7a89cdd6bfc71.492403d75a03f789
     22efeba3bef6670c.76c0bd400f881de9.4f524f48da153ec7.f4476bf72ac340e9
@@ -28263,11 +28263,11 @@
   after
     c91743ea4a2d279a.8f51bd6804a2c66b.a5d7a89cdd6bfc71.492403d75a03f789
     22efeba3bef6670c.76c0bd400f881de9.4f524f48da153ec7.f4476bf72ac340e9
-    bedbafe6b5c5f017.18ff6ad687603ee6.0eba16490b00abe0.eed54260d871f5b1
-    0000000000000000.0000000000000000.153ec70000000000.c340e90000000000
+    ce5ba2f04e945a4f.cee15c854c9458cd.ceb450afce0a500e.4e9248084eb407ef
+    79a70ba04ca77ee6.d35cc09807b9650b.bedc76898f37ffe7.9119847f0098518d
     3a612dbe3fc49128
 
-VPSRLQ_128(reg)
+VCVTTPD2DQ_128(reg)
   before
     45f73a8b3082f12e.2f1e7bbb9ea8cca5.0121bbf02b1cce07.3b84ecf680c7f509
     0e28a651705dad4c.bc0d7b24c7d29781.009b584c9117b484.617ef57bfabb4b71
@@ -28277,10 +28277,10 @@
   after
     45f73a8b3082f12e.2f1e7bbb9ea8cca5.0121bbf02b1cce07.3b84ecf680c7f509
     0e28a651705dad4c.bc0d7b24c7d29781.009b584c9117b484.617ef57bfabb4b71
-    0000000000000000.0000000000000000.0000000000000000.000000000000000a
-    0000000000000000.0000000000000000.000026d6132445ed.00185fbd5efeaed2
-    000000000000000a
-VPSRLQ_128(mem)
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    4a8b8b774b9b2780.cb831d9111d69440.ddde65bd8c03eab2.1897ad7dfb0001c6
+    614e55d2ba69db0a
+VCVTTPD2DQ_128(mem)
   before
     c3887fef72660344.7554fcb01e165eed.05a2b66d69c83d7a.743fcdaa5b0cb1bc
     1a0fa6c0400435a2.cee9bd93b0dfe121.8669cf4608145380.4a84c74ad9dce6f7
@@ -28290,11 +28290,11 @@
   after
     c3887fef72660344.7554fcb01e165eed.05a2b66d69c83d7a.743fcdaa5b0cb1bc
     1a0fa6c0400435a2.cee9bd93b0dfe121.8669cf4608145380.4a84c74ad9dce6f7
-    41b049323f4e2f4e.b194c98a9c81ebc9.2aa3e40a0bc6927f.bdfb4e09a500c510
-    0000000000000000.0000000000000000.0010cd39e8c1028a.00095098e95b3b9c
+    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    1636e12f8b50ab74.7aa21c027f88b991.cc1d72a48eebb5a3.27ee5e5359038ab2
     e5aaf3949171708b
 
-VPSRLQ_128(reg)
+VCVTTPD2DQ_128(reg)
   before
     547b0a39ead7b444.746feba541176641.855fb267f4808724.4aa4f400ab8e7917
     cead9dacffc0928b.3625e47e7dae1ce1.2e17882697f6902f.7f02e60a81bb9a08
@@ -28304,10 +28304,10 @@
   after
     547b0a39ead7b444.746feba541176641.855fb267f4808724.4aa4f400ab8e7917
     cead9dacffc0928b.3625e47e7dae1ce1.2e17882697f6902f.7f02e60a81bb9a08
-    0000000000000000.0000000000000000.0000000000000000.000000000000003f
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
-    000000000000003f
-VPSRLQ_128(mem)
+    0000000000000000.0000000000000000.0000000000000000.8000000080000000
+    56632cb1cf4c0a73.5b3c900ef47d6748.c9a7e15eda8a465c.7d750bd9c2e5e210
+    ff23367565fa817f
+VCVTTPD2DQ_128(mem)
   before
     a7d8c17031c86c1a.1d7f201ac2071d6b.74343c9c68cd7568.74185cb0b1c06ad6
     536128b43f5d610e.5f2c8001e175baa0.63d9c53ed21d6e0a.2db3060b26a3bb77
@@ -28317,11 +28317,11 @@
   after
     a7d8c17031c86c1a.1d7f201ac2071d6b.74343c9c68cd7568.74185cb0b1c06ad6
     536128b43f5d610e.5f2c8001e175baa0.63d9c53ed21d6e0a.2db3060b26a3bb77
-    dd8ae82fadc51a86.79b64ad4c9231cc0.02f9a9e04d7a0d5b.4fc5dcdbd6bf73ec
-    0000000000000000.0000000000000000.31ece29f690eb705.16d983059351ddbb
+    0000000000000000.0000000000000000.0000000000000000.8000000080000000
+    231f7bcc970b54af.c76979ff159c8074.2f5f636ef5ef0f86.389ad98c5ca1cee1
     427df98a55d40a01
 
-VPSRLQ_128(reg)
+VCVTTPD2DQ_128(reg)
   before
     cbbc38415ce561f8.ffec5f76183bcab5.a59109ec616c226b.c4d66fd5e78930b8
     2ea1931e0e5f1074.4fbd0f1b4d613ac3.6f79f7084a203e4f.9f2b4aff3e522b1c
@@ -28331,10 +28331,10 @@
   after
     cbbc38415ce561f8.ffec5f76183bcab5.a59109ec616c226b.c4d66fd5e78930b8
     2ea1931e0e5f1074.4fbd0f1b4d613ac3.6f79f7084a203e4f.9f2b4aff3e522b1c
-    0000000000000000.0000000000000000.0000000000000000.0000000000000031
-    0000000000000000.0000000000000000.00000000000037bc.0000000000004f95
-    0000000000000031
-VPSRLQ_128(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    f1918af6e1bf65a5.b699c40440c1f3aa.37bdd97e6262d290.939f5a508da7a22d
+    6456874fbd4a9631
+VCVTTPD2DQ_128(mem)
   before
     ea1a72c1c24d5418.09331ec93abd83b3.873dc11f3713b4da.edb0c6b0c807c244
     02b99894b9bd990e.6bacbd72ae54e8f5.3a157ae4518a5ec2.ff9400c03bc11d97
@@ -28344,11 +28344,11 @@
   after
     ea1a72c1c24d5418.09331ec93abd83b3.873dc11f3713b4da.edb0c6b0c807c244
     02b99894b9bd990e.6bacbd72ae54e8f5.3a157ae4518a5ec2.ff9400c03bc11d97
-    86fd73b3bda4213e.7447645cd811d216.aced6b40ab35ad90.c9b4841c56191d33
-    0000000000000000.0000000000000000.0000000000000074.00000000000001ff
+    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    53b3820aea11a7d4.7e520ef3557f7bc3.ba91101d611d5d6d.a75e4d2fb69dffc4
     f5dc5765f7d8fef7
 
-VROUNDPS_128_0x0(reg)
+VCVTTPD2DQ_256(reg)
   before
     0f7c9e2ab3565778.45a73e855d0de9fe.e617b7a3c02a20a7.3ecce6698d502988
     50881eea89a446f2.38a5241132a6a1e5.09e35bd8b59ffc6f.156c680e4ed9ce0b
@@ -28358,10 +28358,10 @@
   after
     0f7c9e2ab3565778.45a73e855d0de9fe.e617b7a3c02a20a7.3ecce6698d502988
     50881eea89a446f2.38a5241132a6a1e5.09e35bd8b59ffc6f.156c680e4ed9ce0b
-    164dd411124d0712.0978b19884e78bb8.4102f7fed1694dc7.1b3b12fabdc50822
-    0000000000000000.0000000000000000.0000000080000000.000000004ed9ce0b
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    bc16bb0bedded584.92ee60076fdd65a1.ebc08581b0144d5a.2c066018f91f92fb
     2499cf541bf329bf
-VROUNDPS_128_0x0(mem)
+VCVTTPD2DQ_256(mem)
   before
     dfc0da9a414e899d.9e31cf45b3e2eef3.b0d1ad4b1093e9cc.636903ceed2d39d5
     3946fdd6873a6ebf.17e90c2902e58b0c.3fee144f8215d367.06486c4f243f4ce3
@@ -28371,11 +28371,11 @@
   after
     dfc0da9a414e899d.9e31cf45b3e2eef3.b0d1ad4b1093e9cc.636903ceed2d39d5
     3946fdd6873a6ebf.17e90c2902e58b0c.3fee144f8215d367.06486c4f243f4ce3
-    0ef9b4f408c69351.85896e257674eb7a.1b1112fee270e19b.2eabbd72f2d6c332
-    0000000000000000.0000000000000000.8000000000000000.636903ceed2d39d5
+    0000000000000000.0000000000000000.8000000000000000.0000000080000000
+    3aa37be1e1fbb581.425ef2a4aa1a48ea.200622464caecd97.38dcf0a1f27fda6b
     8028034ac1c5cd3c
 
-VROUNDPS_128_0x0(reg)
+VCVTTPD2DQ_256(reg)
   before
     62dbf1d8fa34d751.9911cf872de79078.acb493113b63df08.2a99c012dade5485
     3a41b7b73a593555.070f2bd40896e065.1dd74ddac4dbec7f.1595684eab093291
@@ -28385,10 +28385,10 @@
   after
     62dbf1d8fa34d751.9911cf872de79078.acb493113b63df08.2a99c012dade5485
     3a41b7b73a593555.070f2bd40896e065.1dd74ddac4dbec7f.1595684eab093291
-    64a64f531cbf23f5.60690bb28f126072.f3131d6ae10faafb.bcc796e6d83d22e8
-    0000000000000000.0000000000000000.00000000c4dbe000.0000000080000000
+    0000000000000000.0000000000000000.0000000000000000.0000000080000000
+    3c55b7183df3dcdd.80eaeb0fdd69cdcb.88b3fd2d2f8b572a.fdfcc7c68086e1b6
     b3fe76dabcee2b27
-VROUNDPS_128_0x0(mem)
+VCVTTPD2DQ_256(mem)
   before
     ba9a1f0faa83bc65.1e9bea7238809eb8.436047d60fa7e39d.3a05eb9049d92cb5
     ee9b3e4f66514f9f.66c4e4cdaaf2a333.84959cf341d65d14.6353e2fdcc87684b
@@ -28398,11 +28398,11 @@
   after
     ba9a1f0faa83bc65.1e9bea7238809eb8.436047d60fa7e39d.3a05eb9049d92cb5
     ee9b3e4f66514f9f.66c4e4cdaaf2a333.84959cf341d65d14.6353e2fdcc87684b
-    2acf50880b62a1ff.701ca1962ed527f9.215665528e04f85c.61eadee154214596
-    0000000000000000.0000000000000000.4360000000000000.0000000049d92cb8
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    4c00cfa4b6c46db2.97ef1e3760b668b7.f56f1edf123d709f.8e16dca97b310043
     4723d6bfe045d5fd
 
-VROUNDPS_128_0x0(reg)
+VCVTTPD2DQ_256(reg)
   before
     e95cca911ce80071.2ffc3991828371e3.3989551edd20a019.dbac4386ea8b810c
     ce0fb38acea7bc4a.ae8d0a3a8baa67bf.b13544b641a00cca.b1d9513331fce6cd
@@ -28412,10 +28412,10 @@
   after
     e95cca911ce80071.2ffc3991828371e3.3989551edd20a019.dbac4386ea8b810c
     ce0fb38acea7bc4a.ae8d0a3a8baa67bf.b13544b641a00cca.b1d9513331fce6cd
-    53868e158f0d4635.a780bc8bee450c72.5b41e76a27c1e777.52c1c3d3049c5c0f
-    0000000000000000.0000000000000000.8000000041a00000.8000000000000000
+    0000000000000000.0000000000000000.8000000080000000.0000000000000000
+    d40e55a0fda7d9de.f4a0cd70c6601b27.92f738a82b0f6ecb.993215507e769efd
     64f6c398bb966ac4
-VROUNDPS_128_0x0(mem)
+VCVTTPD2DQ_256(mem)
   before
     8dda4995d9087a8f.adf30696b4ffb3f0.73bbb7d53008520a.b4a435dbea16dd73
     f2aa2435f1d98b8c.3a819c634fa30e18.ff9cf9a648486b49.1c94d96fff63701a
@@ -28425,11 +28425,11 @@
   after
     8dda4995d9087a8f.adf30696b4ffb3f0.73bbb7d53008520a.b4a435dbea16dd73
     f2aa2435f1d98b8c.3a819c634fa30e18.ff9cf9a648486b49.1c94d96fff63701a
-    6d32cf63211458e4.d80313746b1f2601.730e0cd0282c220e.251320d00781636e
-    0000000000000000.0000000000000000.73bbb7d500000000.80000000ea16dd73
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    dc3dc60b85c59fc6.e1c76833a3fe3958.acde6d3defc13585.2d6c066b9dfdf118
     8eed88aa5e6256c7
 
-VROUNDPS_128_0x1(reg)
+VCVTPD2DQ_128(reg)
   before
     a6e0a0fae53cd024.1999851938f91a5b.b217950d93cc81c9.87d899dab7125edb
     cf924cc8cf1899de.0110897956bb86d2.a740986fd8153bff.dec80b949c2c5a3c
@@ -28439,10 +28439,10 @@
   after
     a6e0a0fae53cd024.1999851938f91a5b.b217950d93cc81c9.87d899dab7125edb
     cf924cc8cf1899de.0110897956bb86d2.a740986fd8153bff.dec80b949c2c5a3c
-    674f887fb781ee9f.716f4d17fc189e55.1c8f6cc30e66a3a7.8f7a3f56ba1ae4d3
-    0000000000000000.0000000000000000.bf800000d8153bff.dec80b94bf800000
+    0000000000000000.0000000000000000.0000000000000000.8000000080000000
+    c8634e8a3a030b14.43824de0451b1f11.6c4d0e77d04af46c.74b9b10c2fe8bacd
     6a53dea114a29655
-VROUNDPS_128_0x1(mem)
+VCVTPD2DQ_128(mem)
   before
     4d12410387553598.501a9c57f32b2ce8.541505be4ed0c531.f5c978f6ba4d6bfb
     fac3561da40c52c2.59bf6c517f848cc8.81f3f19f33434ce2.124ea8ac69fc4400
@@ -28452,11 +28452,11 @@
   after
     4d12410387553598.501a9c57f32b2ce8.541505be4ed0c531.f5c978f6ba4d6bfb
     fac3561da40c52c2.59bf6c517f848cc8.81f3f19f33434ce2.124ea8ac69fc4400
-    4b3299dc86d4aafe.409fbce4799a685f.a4ea8e6d0e816f4f.1f27990578e2ba26
-    0000000000000000.0000000000000000.541505be4ed0c531.f5c978f6bf800000
+    0000000000000000.0000000000000000.0000000000000000.8000000080000000
+    1d2b872a49b8f979.6207887c7dfafb5a.9ac45716fe95eba5.78a1476d848c0b1a
     7908ae5028857187
 
-VROUNDPS_128_0x1(reg)
+VCVTPD2DQ_128(reg)
   before
     7da8cb1a0159281a.4c799af40ac4fb5e.1941ca85282f8365.3f4ec8851c8c7c10
     e2cd9937aa946e7e.b4ea5027e5046bda.c299806c16c53a2b.6f545da68771ddbb
@@ -28466,10 +28466,10 @@
   after
     7da8cb1a0159281a.4c799af40ac4fb5e.1941ca85282f8365.3f4ec8851c8c7c10
     e2cd9937aa946e7e.b4ea5027e5046bda.c299806c16c53a2b.6f545da68771ddbb
-    03c31414c0c37d61.314824adf5850619.b95da59be2495c59.06a293655850cbd3
-    0000000000000000.0000000000000000.c29a000000000000.6f545da6bf800000
+    0000000000000000.0000000000000000.0000000000000000.8000000080000000
+    3bd5381bde71926c.9f60937456538846.5ad8357f2846279a.e004e4aeae360283
     d946ce6da22e3ef8
-VROUNDPS_128_0x1(mem)
+VCVTPD2DQ_128(mem)
   before
     cd33cd8e52443a5e.e85102baa02be84e.dafe17662578ac8e.02552c858548d59b
     98985bfdda84b3e0.65816c5ca37cbcb0.beee2e717d02301c.0b21871894dca308
@@ -28479,11 +28479,11 @@
   after
     cd33cd8e52443a5e.e85102baa02be84e.dafe17662578ac8e.02552c858548d59b
     98985bfdda84b3e0.65816c5ca37cbcb0.beee2e717d02301c.0b21871894dca308
-    1641f6a755fb65ab.0db2746c83f04a41.27fc53807bfcce1d.d28841a3f28dcd8c
-    0000000000000000.0000000000000000.dafe176600000000.00000000bf800000
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    23fa1876dfb50cea.3e301558db14ceab.f1f3027f3a7342bd.b3d656943ae78ed4
     0a57c2560977238b
 
-VROUNDPS_128_0x1(reg)
+VCVTPD2DQ_128(reg)
   before
     33578255fac8c85e.9b8f3f5895bc63ca.52464c8b4773849b.f8a0b85ad7724a27
     8a2190fdaa67b8f9.5acce738931e2777.a74213716499a7bc.18d0effd6d05a088
@@ -28493,10 +28493,10 @@
   after
     33578255fac8c85e.9b8f3f5895bc63ca.52464c8b4773849b.f8a0b85ad7724a27
     8a2190fdaa67b8f9.5acce738931e2777.a74213716499a7bc.18d0effd6d05a088
-    6b03eabab4de3007.3c7c8a01f4e7141c.976e6876ce1374bb.2d4d25551939000b
-    0000000000000000.0000000000000000.bf8000006499a7bc.000000006d05a088
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    31478bf9b4bc6c35.1c6da6a1d421e5e5.80184607206c2643.12e4d54cf61928dd
     a5607ccf21b1d22a
-VROUNDPS_128_0x1(mem)
+VCVTPD2DQ_128(mem)
   before
     c18f94cbb50ebb1d.3a3a7024488aa82e.d869b60350da5700.bc8aa98ef630fb01
     423b9b2bce3b9fe3.e12893a909d61f9f.4b3d3613831e2697.a8118e78edec2da1
@@ -28506,11 +28506,11 @@
   after
     c18f94cbb50ebb1d.3a3a7024488aa82e.d869b60350da5700.bc8aa98ef630fb01
     423b9b2bce3b9fe3.e12893a909d61f9f.4b3d3613831e2697.a8118e78edec2da1
-    03320cda894439a7.825cf2f2952b0f34.51b5a2be8af70ed6.a1f8f032a02bf8ce
-    0000000000000000.0000000000000000.d869b60350da5700.bf800000f630fb01
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    e23e63c602364696.7924886d8816b198.c59c77ee8074caea.018dca27ac799a35
     251a1bc2ac634d82
 
-VROUNDPS_128_0x2(reg)
+VCVTPD2DQ_256(reg)
   before
     69eddc713d744e60.b92c1cda541c82db.21ca51857d214478.85c03090829e17ff
     29500a9ffa38d87b.66c7b4029b03a9a3.d89b4aa610db027f.6beb4991ab83b040
@@ -28520,10 +28520,10 @@
   after
     69eddc713d744e60.b92c1cda541c82db.21ca51857d214478.85c03090829e17ff
     29500a9ffa38d87b.66c7b4029b03a9a3.d89b4aa610db027f.6beb4991ab83b040
-    c290a2b87f3c2980.c4dda62af4f5761a.f9e36d3cdecd285a.55ea3edb182e53da
-    0000000000000000.0000000000000000.d89b4aa63f800000.6beb499180000000
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    8ef99f286a0b7b1b.ae396e3e7a01a66b.dfeeb8b38285f2b4.1d898b5ce4abbaf9
     a194adff2b07a2c8
-VROUNDPS_128_0x2(mem)
+VCVTPD2DQ_256(mem)
   before
     bbd71fb00a4dc673.ead6fd5b54310bf8.02a6882b4a30f5c3.e8082677998e9b3b
     491e5d5b9d8ae428.3275b9bedb3b14c2.9af171db7f901e4e.6f7db4f4be756098
@@ -28533,11 +28533,11 @@
   after
     bbd71fb00a4dc673.ead6fd5b54310bf8.02a6882b4a30f5c3.e8082677998e9b3b
     491e5d5b9d8ae428.3275b9bedb3b14c2.9af171db7f901e4e.6f7db4f4be756098
-    2534e3ecffc8b611.c220cdbb9bb4d325.53e6a33c362cde37.cf985c968ec57d7a
-    0000000000000000.0000000000000000.3f8000004a30f5c4.e808267780000000
+    0000000000000000.0000000000000000.0000000080000000.0000000080000000
+    2de62e4f4c15f95a.f62437c02f2884ce.0a519c388a10f1ab.66a61ccaa40a2e8a
     8ef3effa9dd1ae77
 
-VROUNDPS_128_0x2(reg)
+VCVTPD2DQ_256(reg)
   before
     a5cbd19414a53aeb.3b00b970a17d6830.2acdf23733246369.99fed7bd984913d5
     057abf03a6120e93.2c4e003b1a0bc0bf.ba67fb8e4433aba2.ddb8d1b67be2ffe2
@@ -28547,10 +28547,10 @@
   after
     a5cbd19414a53aeb.3b00b970a17d6830.2acdf23733246369.99fed7bd984913d5
     057abf03a6120e93.2c4e003b1a0bc0bf.ba67fb8e4433aba2.ddb8d1b67be2ffe2
-    0b4cb3b2eea5651a.dc9c7f9dd2cbbd32.023e4c30fde29924.b34d040e50e872fd
-    0000000000000000.0000000000000000.800000004433c000.ddb8d1b67be2ffe2
+    0000000000000000.0000000000000000.0000000000000000.8000000080000000
+    148cab0f89e97c2d.28b6b280e5c91bb6.5e9de388fbbc699b.f587eeb332662853
     80330a903e68dc10
-VROUNDPS_128_0x2(mem)
+VCVTPD2DQ_256(mem)
   before
     301dd4928ffa4c5f.7a88a285126a8f77.ea6716d270129576.29d2bb04d94d57b4
     e211c9a34129326d.9a8a948025b5daa5.ff7d267d8eb2e89f.c127d00f34219e1b
@@ -28560,11 +28560,11 @@
   after
     301dd4928ffa4c5f.7a88a285126a8f77.ea6716d270129576.29d2bb04d94d57b4
     e211c9a34129326d.9a8a948025b5daa5.ff7d267d8eb2e89f.c127d00f34219e1b
-    70da64b071014a65.d1df7e6d5f559863.43c25e6f5cb3d05d.81e91e16a8c57b7b
-    0000000000000000.0000000000000000.ea6716d270129576.3f800000d94d57b4
+    0000000000000000.0000000000000000.0000000080000000.8000000000000000
+    b74621a63b8c5274.79d35bb65cd6065c.92033a93f52308db.c564a283cfc42a81
     e8e457c347abe6d9
 
-VROUNDPS_128_0x2(reg)
+VCVTPD2DQ_256(reg)
   before
     48b53943ac05ec2e.931f7c6fb9d804c6.efb127c8b6c5603d.c80c37d5760d4d46
     4022446d995e782d.e032f1f90af01c86.8fc7de100cade2b1.c1a9cf21fa7e5bc9
@@ -28574,10 +28574,10 @@
   after
     48b53943ac05ec2e.931f7c6fb9d804c6.efb127c8b6c5603d.c80c37d5760d4d46
     4022446d995e782d.e032f1f90af01c86.8fc7de100cade2b1.c1a9cf21fa7e5bc9
-    2b7875afab42c581.7a4bfd2e48e158e1.b55f7cf8f81ac765.59a580639d81ee91
-    0000000000000000.0000000000000000.800000003f800000.c1a80000fa7e5bc9
+    0000000000000000.0000000000000000.8000000000000000.0000000080000000
+    6704c6737d3e11d7.3d361afc8fb67202.bdc7feee16994c05.6ccec5887c22c1ca
     d6ee1b7ab36e919f
-VROUNDPS_128_0x2(mem)
+VCVTPD2DQ_256(mem)
   before
     73d2fc265d701a3d.4f103527abde96da.05bfc64efc7b2716.04495e5d03b5ac3c
     1f46e679963418cf.3ee8bd36d2ac9038.aeb17d10aa3d3349.e4329bb05afa25b7
@@ -28587,11 +28587,11 @@
   after
     73d2fc265d701a3d.4f103527abde96da.05bfc64efc7b2716.04495e5d03b5ac3c
     1f46e679963418cf.3ee8bd36d2ac9038.aeb17d10aa3d3349.e4329bb05afa25b7
-    b616545e7bc74682.92da5b0c8e363d9a.14d9b92eb60751c6.bacdae55b8f5f121
-    0000000000000000.0000000000000000.3f800000fc7b2716.3f8000003f800000
+    0000000000000000.0000000000000000.8000000080000000.0000000000000000
+    140dc3c028346182.a53109157a07d7ae.1204f8943be53eba.e26894b7b8314c27
     b74e4a43f73b7475
 
-VROUNDPS_128_0x3(reg)
+VMOVSLDUP_128(reg)
   before
     97cacb63109da3b6.15f9ad8db88725fa.d438c5bd32ac9b20.86fcb52f56e4b650
     dd2913849fe51697.94a490b047cd4d17.7c3c8a7153b0c49c.4b8e6ce9220f74b5
@@ -28601,10 +28601,10 @@
   after
     97cacb63109da3b6.15f9ad8db88725fa.d438c5bd32ac9b20.86fcb52f56e4b650
     dd2913849fe51697.94a490b047cd4d17.7c3c8a7153b0c49c.4b8e6ce9220f74b5
-    e5b71e12419f09c3.6fdbe715f2119604.f789549b789f90cd.3d8599afbb723614
-    0000000000000000.0000000000000000.7c3c8a7153b0c49c.4b8e6ce900000000
+    0000000000000000.0000000000000000.3e0639603e063960.3e1ab69b3e1ab69b
+    0bc0e97a9256b7e7.816a2ea8d45fbcee.a36b20a83e063960.37afb86e3e1ab69b
     17d64611c712b073
-VROUNDPS_128_0x3(mem)
+VMOVSLDUP_128(mem)
   before
     b8c8be837166e2cb.ab8f6f272d965daf.a61de1550ac47b00.da2ee9054070fc00
     f54f9cb2582306cd.2172ac84afeb37c6.b9c07d09af4b8e68.f91eab1d1b69145a
@@ -28614,11 +28614,11 @@
   after
     b8c8be837166e2cb.ab8f6f272d965daf.a61de1550ac47b00.da2ee9054070fc00
     f54f9cb2582306cd.2172ac84afeb37c6.b9c07d09af4b8e68.f91eab1d1b69145a
-    ac385d899954d9a5.c8b39cffb2e281d9.981e7daee000b24f.5c86625b6a7ebe19
-    0000000000000000.0000000000000000.8000000000000000.da2ee90540400000
+    0000000000000000.0000000000000000.0ac47b000ac47b00.4070fc004070fc00
+    b84f7bf450051680.fea03b03d5077693.1d055d31b8f0a2e4.60b30a2dca3a36ea
     5ff2a0fed629b879
 
-VROUNDPS_128_0x3(reg)
+VMOVSLDUP_128(reg)
   before
     b68c1e3a2bd87f71.f45f74df98437b8a.1e8386fcb2e453a1.263f997f54261c50
     c1d0824d64d2c87f.3e36c3368d19c2ee.83a97856e50754ae.8d99ad83cfaedac2
@@ -28628,10 +28628,10 @@
   after
     b68c1e3a2bd87f71.f45f74df98437b8a.1e8386fcb2e453a1.263f997f54261c50
     c1d0824d64d2c87f.3e36c3368d19c2ee.83a97856e50754ae.8d99ad83cfaedac2
-    dc09c7a31ea4cf4e.709ee5e64c94a7d9.8b5d0d7d0bfbb468.30df162845959964
-    0000000000000000.0000000000000000.80000000e50754ae.80000000cfaedac2
+    0000000000000000.0000000000000000.bf4db078bf4db078.d4e61463d4e61463
+    6382eaa9f4d8cf8b.686454d9f0bee876.90ed41ddbf4db078.e9dd4f5cd4e61463
     965ed40a95ae09ea
-VROUNDPS_128_0x3(mem)
+VMOVSLDUP_128(mem)
   before
     1130211ea6f73226.b289e6c982fc06e2.00548efd96a63ff3.f0a311e39e88848d
     381db38423d04c42.2568b670659cadfe.153a0e3c59556979.05cd78f943386c50
@@ -28641,11 +28641,11 @@
   after
     1130211ea6f73226.b289e6c982fc06e2.00548efd96a63ff3.f0a311e39e88848d
     381db38423d04c42.2568b670659cadfe.153a0e3c59556979.05cd78f943386c50
-    e5f204292642126b.186c580b3843038c.84e2508456d92136.2db5728d4beaa370
-    0000000000000000.0000000000000000.0000000080000000.f0a311e380000000
+    0000000000000000.0000000000000000.96a63ff396a63ff3.9e88848d9e88848d
+    f57b92f7ce5b41cd.e7e1c805987d4237.2717d0c0a83d2556.c2a8fb0951286697
     22f10fdbf281f172
 
-VROUNDPS_128_0x3(reg)
+VMOVSLDUP_128(reg)
   before
     a7deab6ec97e7fac.4584d9db35269593.ee1300c921d6a8ac.dba70bdc6c8d2f05
     afbaca2e72ad4df2.afd853c277b0caea.894dfec56edb6e97.7c5c7cc4bdd6fb6e
@@ -28655,10 +28655,10 @@
   after
     a7deab6ec97e7fac.4584d9db35269593.ee1300c921d6a8ac.dba70bdc6c8d2f05
     afbaca2e72ad4df2.afd853c277b0caea.894dfec56edb6e97.7c5c7cc4bdd6fb6e
-    94d068878a9a97ef.10457e96b1039bfd.14ddbd641b17d3a3.e7039f64b72447bd
-    0000000000000000.0000000000000000.800000006edb6e97.7c5c7cc480000000
+    0000000000000000.0000000000000000.c517117dc517117d.7781cd207781cd20
+    b36d81e5adcf9950.4495d545fe2ec5f9.eb0d3912c517117d.f668f0a87781cd20
     8657eb7c19fb4ac0
-VROUNDPS_128_0x3(mem)
+VMOVSLDUP_128(mem)
   before
     739b0dccb89d7acc.68dd11b476da8ec1.2795d4ba7b3a040a.692a6f3b076565d0
     9902d1857074186e.106c15608147b3ed.9512f7e14335135b.ec80594c7e900b49
@@ -28668,11 +28668,11 @@
   after
     739b0dccb89d7acc.68dd11b476da8ec1.2795d4ba7b3a040a.692a6f3b076565d0
     9902d1857074186e.106c15608147b3ed.9512f7e14335135b.ec80594c7e900b49
-    d456b3915e8be1d3.056688566ba04481.6ad5baa6732aaf19.cf5bf5afc5213e93
-    0000000000000000.0000000000000000.000000007b3a040a.692a6f3b00000000
+    0000000000000000.0000000000000000.7b3a040a7b3a040a.076565d0076565d0
+    00642fde9eee9126.a4166600d0747c28.82ad9af526269470.6d063ed178a63b5b
     24cf301f35aa3e4d
 
-VROUNDPS_128_0x4(reg)
+VMOVSLDUP_256(reg)
   before
     4f00c80495ba8314.f9f8c2574aa9e393.49caaccc4b4c988f.ba6512ba79347e8b
     49e601eb3661455d.9bdee7e781c99548.50cc542478b6d462.ecc89ee187602896
@@ -28682,10 +28682,10 @@
   after
     4f00c80495ba8314.f9f8c2574aa9e393.49caaccc4b4c988f.ba6512ba79347e8b
     49e601eb3661455d.9bdee7e781c99548.50cc542478b6d462.ecc89ee187602896
-    70cdd642b42bc1d4.c2e21a7c5c5a616f.15695c76f43d6c4c.f4a3bb576cb74fbe
-    0000000000000000.0000000000000000.50cc542478b6d462.ecc89ee180000000
+    aaa53324aaa53324.fa660334fa660334.5a6d9bfa5a6d9bfa.4544af2f4544af2f
+    1e014674aaa53324.4acfd701fa660334.f4edbf2d5a6d9bfa.b0c2e3064544af2f
     fbf194db2e130414
-VROUNDPS_128_0x4(mem)
+VMOVSLDUP_256(mem)
   before
     b1fc49c34231099a.b1ce4aedb45ad6fa.0f739a6274fb39c5.49a479b547d39e17
     aeaf7ea99da97bed.837fe0196fd6e701.ed98e08be925bd4b.70d9877a56fab150
@@ -28695,11 +28695,11 @@
   after
     b1fc49c34231099a.b1ce4aedb45ad6fa.0f739a6274fb39c5.49a479b547d39e17
     aeaf7ea99da97bed.837fe0196fd6e701.ed98e08be925bd4b.70d9877a56fab150
-    ced5b0795c871638.f262026477a5a2e6.c00b246972ee4bf5.c5dae4e8246e1051
-    0000000000000000.0000000000000000.0000000074fb39c5.49a479b847d39e00
+    4231099a4231099a.b45ad6fab45ad6fa.74fb39c574fb39c5.47d39e1747d39e17
+    ed3c5a1f9ad895a8.58c1ae3a66544354.6498e2e62d64a1ed.a4f18b6b4cbcf6c5
     696b7b6f6a6fa059
 
-VROUNDPS_128_0x4(reg)
+VMOVSLDUP_256(reg)
   before
     7094ad611b144ab8.e6aef88774a7b568.13e9e008db6f05f8.b40a96f03693795f
     15b81eabfb362f8f.97f8069d050032a5.7d2692387080257e.8e2fbd71a8859078
@@ -28709,10 +28709,10 @@
   after
     7094ad611b144ab8.e6aef88774a7b568.13e9e008db6f05f8.b40a96f03693795f
     15b81eabfb362f8f.97f8069d050032a5.7d2692387080257e.8e2fbd71a8859078
-    b423cbbba5618c8a.dbe6004d6af0c88b.f3c4c238c115df91.cdd1d257a048a264
-    0000000000000000.0000000000000000.7d2692387080257e.8000000080000000
+    b5219d54b5219d54.be823245be823245.6bba6ede6bba6ede.39e86a4e39e86a4e
+    a820affcb5219d54.8d436383be823245.d10e6b726bba6ede.4cbe518c39e86a4e
     e9c0b6fe8f6fa563
-VROUNDPS_128_0x4(mem)
+VMOVSLDUP_256(mem)
   before
     7fa47d98bfec0fcf.4ffdc7d9c8039d9a.8bdda92c1ec22dff.7452895409f90f11
     e9362346e46864bd.04040dc07a92ca07.af7e5032a5bd74e7.36da18493860fed5
@@ -28722,11 +28722,11 @@
   after
     7fa47d98bfec0fcf.4ffdc7d9c8039d9a.8bdda92c1ec22dff.7452895409f90f11
     e9362346e46864bd.04040dc07a92ca07.af7e5032a5bd74e7.36da18493860fed5
-    054123f41bf15f5a.22827f1c665b5e48.d7f3d483707ec527.74f315bd937b77d6
-    0000000000000000.0000000000000000.8000000000000000.7452895400000000
+    bfec0fcfbfec0fcf.c8039d9ac8039d9a.1ec22dff1ec22dff.09f90f1109f90f11
+    ad93f98f8092bdd1.07c3175928e99508.de08af099a11daeb.8ae97a1cb6d4b5c1
     d40845d23efaf542
 
-VROUNDPS_128_0x4(reg)
+VMOVSLDUP_256(reg)
   before
     ae9c724bc7767305.bff621012e573a4f.0e13d4e35dc8adf4.9f895fb240837060
     74f0fbf3ecd66bb5.15371737414d91ff.92bdaf27a085e0b8.f7425f697ddf42b2
@@ -28736,10 +28736,10 @@
   after
     ae9c724bc7767305.bff621012e573a4f.0e13d4e35dc8adf4.9f895fb240837060
     74f0fbf3ecd66bb5.15371737414d91ff.92bdaf27a085e0b8.f7425f697ddf42b2
-    8352de374aa518fe.8c22581ed67f7f0e.f10fa58f8eab6bff.c3ff2b1a6d320e0c
-    0000000000000000.0000000000000000.8000000080000000.f7425f697ddf42b2
+    7b6fb78d7b6fb78d.08fac0a808fac0a8.c2c68976c2c68976.2d878e9b2d878e9b
+    350c16817b6fb78d.01835fa008fac0a8.8553b388c2c68976.dd8b3fb12d878e9b
     23b3181ad9ea7f8a
-VROUNDPS_128_0x4(mem)
+VMOVSLDUP_256(mem)
   before
     6f4430418c679c07.e66b9f3f1ec1830e.4e26a8abf3c810f8.acd6d47fd96278c9
     9e070512620ba23b.f4bb75dccd26ba2d.51d6b02ab5f82a2b.c0e404df6e0c72a3
@@ -28749,11 +28749,11 @@
   after
     6f4430418c679c07.e66b9f3f1ec1830e.4e26a8abf3c810f8.acd6d47fd96278c9
     9e070512620ba23b.f4bb75dccd26ba2d.51d6b02ab5f82a2b.c0e404df6e0c72a3
-    8dcb137a78e14d54.ba4794c3242b9695.e461f1096793cb6c.1fc940131e50b3b1
-    0000000000000000.0000000000000000.4e26a8abf3c810f8.80000000d96278c9
+    8c679c078c679c07.1ec1830e1ec1830e.f3c810f8f3c810f8.d96278c9d96278c9
+    165bd463e9f6597e.945df962c05a54f2.e491e93427a7afe9.23d0828984b8799e
     2947c8ac3cd2fe17
 
-VROUNDPS_256_0x0(reg)
+VMOVSHDUP_128(reg)
   before
     8e780de8e32a7fc7.1682c6bbd25581e5.de479f243c422ff1.2d331397113f91cb
     acb04ea9154a375b.690e636d4e0a82b4.f4538275356c643e.9b13eb1e40682f40
@@ -28763,10 +28763,10 @@
   after
     8e780de8e32a7fc7.1682c6bbd25581e5.de479f243c422ff1.2d331397113f91cb
     acb04ea9154a375b.690e636d4e0a82b4.f4538275356c643e.9b13eb1e40682f40
-    e03b855b6dc0647f.ebc92a647a211817.32cb9fc146662f84.0bfdeeb5d02d4374
-    8000000000000000.690e636d4e0a82b4.f453827500000000.8000000040800000
+    0000000000000000.0000000000000000.f3fcf074f3fcf074.57bc964857bc9648
+    8665b06b871840de.7880948e71a7fe3c.f3fcf0740cbbcc70.57bc9648de9a8993
     5c1e61c486bbbfc8
-VROUNDPS_256_0x0(mem)
+VMOVSHDUP_128(mem)
   before
     f6edca13e39d9f3f.fb7aca4300dc0825.edff1ed650a8f14c.953273fb22f876ae
     01f64e23114ce525.99c6cf50749af7ff.24124528322ead76.73b823c025a76be9
@@ -28776,11 +28776,11 @@
   after
     f6edca13e39d9f3f.fb7aca4300dc0825.edff1ed650a8f14c.953273fb22f876ae
     01f64e23114ce525.99c6cf50749af7ff.24124528322ead76.73b823c025a76be9
-    590567df2dd24fa6.bd94bbff7ede4a19.fa8484713447eee4.e8dcfc31b057e4ce
-    f6edca13e39d9f3f.fb7aca4300000000.edff1ed650a8f14c.8000000000000000
+    0000000000000000.0000000000000000.edff1ed6edff1ed6.953273fb953273fb
+    dae69332523d97ee.c3318bbbba333d1f.4b23579b71fe6fc2.52e8fbb860912008
     0c291bc3d0e35944
 
-VROUNDPS_256_0x0(reg)
+VMOVSHDUP_128(reg)
   before
     71eb58bd9cd8cc2d.60654d0a9d987a28.07e93aefc5250cbc.f3b93b930560ed3d
     df7aae1261fdb570.c74d115229f0b480.e508c4093a40f29d.cd13aa460d782481
@@ -28790,10 +28790,10 @@
   after
     71eb58bd9cd8cc2d.60654d0a9d987a28.07e93aefc5250cbc.f3b93b930560ed3d
     df7aae1261fdb570.c74d115229f0b480.e508c4093a40f29d.cd13aa460d782481
-    b022192ebbdd4fb9.eb6c5cf613500023.b9da2574b6112c6d.b7fd229ea552d0ba
-    df7aae1261fdb570.c74d110000000000.e508c40900000000.cd13aa4600000000
+    0000000000000000.0000000000000000.dfab599cdfab599c.8c431e898c431e89
+    422e967d4504d7b3.a78ca8e376c41b3d.dfab599cd423f6d9.8c431e89e8fbac13
     28b01af1f27e75b8
-VROUNDPS_256_0x0(mem)
+VMOVSHDUP_128(mem)
   before
     671293c4e0e7e7d6.efec1f6b9bff890b.d97a73036f59c1f9.b3c65ded31028b8d
     253303edcd43bd99.14a6b2645a59a16d.5c023843191aad84.91782cd3683b2934
@@ -28803,11 +28803,11 @@
   after
     671293c4e0e7e7d6.efec1f6b9bff890b.d97a73036f59c1f9.b3c65ded31028b8d
     253303edcd43bd99.14a6b2645a59a16d.5c023843191aad84.91782cd3683b2934
-    3de0e858d69db42c.0ea94bd51d9e5a84.0cef749091139d0a.d50ec2bb15590a7b
-    671293c4e0e7e7d6.efec1f6b80000000.d97a73036f59c1f9.8000000000000000
+    0000000000000000.0000000000000000.d97a7303d97a7303.b3c65dedb3c65ded
+    8de5bef1170188bc.3741e428815bf1fc.c50fa1d4f2514bb6.dbd21c0fd5e96a0d
     ff10343d44768797
 
-VROUNDPS_256_0x0(reg)
+VMOVSHDUP_128(reg)
   before
     9c1608affd8c9bc5.f00effa4aa7cf475.ecba7bcb211ba283.622c3dfd58df73b5
     102f93d39cb7e342.4127285eae19b682.8a5f0b289a6aa8c3.c114c3f6e0c9d332
@@ -28817,10 +28817,10 @@
   after
     9c1608affd8c9bc5.f00effa4aa7cf475.ecba7bcb211ba283.622c3dfd58df73b5
     102f93d39cb7e342.4127285eae19b682.8a5f0b289a6aa8c3.c114c3f6e0c9d332
-    b6a6d114be849abb.5efbb6093ce48810.6b7e90ad87d54168.bd91afaaa61c255a
-    0000000080000000.4120000080000000.8000000080000000.c1100000e0c9d332
+    0000000000000000.0000000000000000.ec6106c5ec6106c5.31707d0731707d07
+    eac8bfdeff7efddb.2258249373ea264a.ec6106c585e7a71f.31707d07c5e32658
     fb7daaf8592b915a
-VROUNDPS_256_0x0(mem)
+VMOVSHDUP_128(mem)
   before
     f583b1697ffe2489.07e1579dfa32484f.6808eee66c364e5d.69556adc2f2c1694
     fd500e47526a9914.6b3d97bd4b2bb7c2.0ed891f045d5ba74.3fa6b75e2231cc72
@@ -28830,11 +28830,11 @@
   after
     f583b1697ffe2489.07e1579dfa32484f.6808eee66c364e5d.69556adc2f2c1694
     fd500e47526a9914.6b3d97bd4b2bb7c2.0ed891f045d5ba74.3fa6b75e2231cc72
-    edae3d7cef7bac24.70287aaa8ff585e1.ee94889c1ad127bc.c8a0e9b7f9810366
-    f583b1697ffe2489.00000000fa32484f.6808eee66c364e5d.69556adc00000000
+    0000000000000000.0000000000000000.6808eee66808eee6.69556adc69556adc
+    a36abbf5713c1be8.74edfdd0611df058.e6084ed506395061.618ffc5350a8f71b
     66beec9ec433e63e
 
-VROUNDPS_256_0x1(reg)
+VMOVSHDUP_256(reg)
   before
     337ab605f1ad0a7b.f950029ff5b9a08a.d2da1a9b5e2d31d2.d0ff62892516f38e
     241055f272a3a07d.cc2c906496fef837.e539cf7821b487fc.89473da39476ca70
@@ -28844,10 +28844,10 @@
   after
     337ab605f1ad0a7b.f950029ff5b9a08a.d2da1a9b5e2d31d2.d0ff62892516f38e
     241055f272a3a07d.cc2c906496fef837.e539cf7821b487fc.89473da39476ca70
-    95cac5d3e39fe4f1.f9cae1327118de1a.0b5717d1473b2c82.eeaa5c0f6f649133
-    0000000072a3a07d.cc2c9064bf800000.e539cf7800000000.bf800000bf800000
+    e2f50212e2f50212.5af56ff45af56ff4.9e80ee149e80ee14.d9f53cbad9f53cba
+    e2f50212e1301182.5af56ff4a1121060.9e80ee146b505d0f.d9f53cbad1ec0602
     27f4588ed61be309
-VROUNDPS_256_0x1(mem)
+VMOVSHDUP_256(mem)
   before
     b5732c789bfce576.67dc091d08df64dd.cc7bb89643f94834.fb0050ac2a7f5650
     5d3d35653b9cc872.7fcdd45ff23a19ae.2c26360472d842c3.7f233a041f5253f0
@@ -28857,11 +28857,11 @@
   after
     b5732c789bfce576.67dc091d08df64dd.cc7bb89643f94834.fb0050ac2a7f5650
     5d3d35653b9cc872.7fcdd45ff23a19ae.2c26360472d842c3.7f233a041f5253f0
-    fc20ed40d306472c.881261443ecc6ba0.54c3672a4bbbbc39.8434a78ae6578f9c
-    bf800000bf800000.67dc091d00000000.cc7bb89643f90000.fb0050ac00000000
+    b5732c78b5732c78.67dc091d67dc091d.cc7bb896cc7bb896.fb0050acfb0050ac
+    6ee6d2f47e461fce.ddf8ab388621985f.211ec7f4e9ae70c1.678093a91c1a47ff
     8554facd5d25b6c6
 
-VROUNDPS_256_0x1(reg)
+VMOVSHDUP_256(reg)
   before
     38fad9634406199d.8f5d5f6f59690c85.daccafa766c6da99.6f03d04e68be1b88
     ddbf2ad56d49ad2f.3b4f119c7f79c97c.dbd867fd7b466df8.1a3d0024e5f679b9
@@ -28871,10 +28871,10 @@
   after
     38fad9634406199d.8f5d5f6f59690c85.daccafa766c6da99.6f03d04e68be1b88
     ddbf2ad56d49ad2f.3b4f119c7f79c97c.dbd867fd7b466df8.1a3d0024e5f679b9
-    d0eeeb907578ab29.4f8862670d8513e0.3b68d1a7602e8f28.fe9ad2637c634581
-    ddbf2ad56d49ad2f.000000007f79c97c.dbd867fd7b466df8.00000000e5f679b9
+    6ed518016ed51801.a5d6d0bca5d6d0bc.58cae80f58cae80f.f7e4c2f5f7e4c2f5
+    6ed51801f8215236.a5d6d0bc1e96a6dc.58cae80fb1097ad6.f7e4c2f547103c0c
     e1e84cc865091a85
-VROUNDPS_256_0x1(mem)
+VMOVSHDUP_256(mem)
   before
     9872edc7f05b9a19.11beab9290d0dc03.1a04d687cfba3e9d.8d48a9a30b636bae
     f84e1fde04117af3.16f6a2b1dc0f863c.8addf0b43bfc964f.35300ecd0ac99d5b
@@ -28884,11 +28884,11 @@
   after
     9872edc7f05b9a19.11beab9290d0dc03.1a04d687cfba3e9d.8d48a9a30b636bae
     f84e1fde04117af3.16f6a2b1dc0f863c.8addf0b43bfc964f.35300ecd0ac99d5b
-    dd4860f8be377440.d9caf7c9766d8b8c.d12e9a307e696b1d.aecc15fb49c64d8a
-    bf800000f05b9a19.00000000bf800000.00000000cfba3e9d.bf80000000000000
+    9872edc79872edc7.11beab9211beab92.1a04d6871a04d687.8d48a9a38d48a9a3
+    232b2c0339da442c.b683a845fa7329a0.cac351e5b60c7933.5269b99865e6b7e7
     7f53f610f9b5171d
 
-VROUNDPS_256_0x1(reg)
+VMOVSHDUP_256(reg)
   before
     8fd5c8cfa1c0a9d9.a6c5fdea9205a8e2.0970b19305af9a23.536890c1fcf17cbf
     e03d2c41fa93a8c6.42e0519ae4c45a8f.2edc0c1e32ac1bc2.47e9d3ae6e252feb
@@ -28898,10 +28898,10 @@
   after
     8fd5c8cfa1c0a9d9.a6c5fdea9205a8e2.0970b19305af9a23.536890c1fcf17cbf
     e03d2c41fa93a8c6.42e0519ae4c45a8f.2edc0c1e32ac1bc2.47e9d3ae6e252feb
-    ccd51dd29fb85191.d349a3fd4c24165e.8112b7531df6e729.8212969a27b34fe3
-    e03d2c41fa93a8c6.42e00000e4c45a8f.0000000000000000.47e9d3806e252feb
+    b1eb97eeb1eb97ee.35cc6f0035cc6f00.5e60ad9c5e60ad9c.e0ae5670e0ae5670
+    b1eb97ee2dbddfe5.35cc6f00e5309a7c.5e60ad9c641a3b03.e0ae567044a798d4
     3d8b8d1ce10ec5ea
-VROUNDPS_256_0x1(mem)
+VMOVSHDUP_256(mem)
   before
     7473b98a18f39351.e9c99601402d8f6f.43343190cbf4a015.2110ea66a0a353fd
     633355a60862be34.d1bc167872959edb.db4f66971b7de554.266f6a1d6f1e6bc2
@@ -28911,11 +28911,11 @@
   after
     7473b98a18f39351.e9c99601402d8f6f.43343190cbf4a015.2110ea66a0a353fd
     633355a60862be34.d1bc167872959edb.db4f66971b7de554.266f6a1d6f1e6bc2
-    e597de5ccb6801bf.c60f14bd628045d4.d8e78803f1d62565.c8c92a2e6d15beff
-    7473b98a00000000.e9c9960140000000.43340000cbf4a015.00000000bf800000
+    7473b98a7473b98a.e9c99601e9c99601.4334319043343190.2110ea662110ea66
+    d56ace987d101a1f.22108b3eaa7ac307.15ca15bf680b1b76.6569250435178a60
     589d570a63ad0890
 
-VROUNDPS_256_0x2(reg)
+VPERMILPS_VAR_128(reg)
   before
     fdafbcae9465773c.117aa3473b67c380.42097766e610521f.70c288b69c2984b1
     afec505b64ca110f.7491d8532077b80d.8348d4a1b2cd2fc9.c49c5ed6aa3b1c42
@@ -28923,12 +28923,12 @@
     af17f7804ecdb9dc.1e075336d0f87a5e.d3c3d3ff6dedc282.c6251f3fc36cc819
     2c6d035f05a354b6
   after
-    fdafbcae9465773c.117aa3473b67c380.42097766e610521f.70c288b69c2984b1
+    0000000000000000.0000000000000000.b2cd2fc9c49c5ed6.b2cd2fc9b2cd2fc9
     afec505b64ca110f.7491d8532077b80d.8348d4a1b2cd2fc9.c49c5ed6aa3b1c42
     cca0107d6e6913b6.d97ce9aa484eb7f3.3f179f5aac3e95b1.ec24110aae4d9f56
-    8000000064ca110f.7491d8533f800000.8000000080000000.c49c400080000000
+    af17f7804ecdb9dc.1e075336d0f87a5e.d3c3d3ff6dedc282.c6251f3fc36cc819
     2c6d035f05a354b6
-VROUNDPS_256_0x2(mem)
+VPERMILPS_VAR_128(mem)
   before
     fcc63a5791ffff5a.b39d01d0a1823e2e.1dfe90e5d480be79.9b986cfc9368f0e9
     10fd3e13828a8431.367e2ad90214df58.b42d1ea26ff23e70.f3e166bbba3b5c92
@@ -28938,11 +28938,11 @@
   after
     fcc63a5791ffff5a.b39d01d0a1823e2e.1dfe90e5d480be79.9b986cfc9368f0e9
     10fd3e13828a8431.367e2ad90214df58.b42d1ea26ff23e70.f3e166bbba3b5c92
-    46de8d80f552a066.92056f080e10d805.bd607859be5ab871.37ecbda97df04128
-    fcc63a5780000000.8000000080000000.3f800000d480be79.8000000080000000
+    0000000000000000.0000000000000000.f3e166bbf3e166bb.ba3b5c92f3e166bb
+    7835a28905630f25.257fcac7600265e2.15621bf6dcc5e6a5.c3036e327816dc57
     f37374c3483669cc
 
-VROUNDPS_256_0x2(reg)
+VPERMILPS_VAR_128(reg)
   before
     2388cbc789de2433.83cef919cfc88d9c.493939849574c19b.99008165e53e843b
     af8e6fa9d6994837.44740e1e6e8dd5f4.5c7cb8a948f429db.23072892f6d2505d
@@ -28950,12 +28950,12 @@
     4b9d8fbc0579bec9.531b64349d68b6fe.bbd5d2e09a4c0ca2.bd7a26d79e785df7
     848076c76ea217c7
   after
-    2388cbc789de2433.83cef919cfc88d9c.493939849574c19b.99008165e53e843b
+    0000000000000000.0000000000000000.f6d2505d5c7cb8a9.48f429dbf6d2505d
     af8e6fa9d6994837.44740e1e6e8dd5f4.5c7cb8a948f429db.23072892f6d2505d
     f3d15dd7cbf31285.95f55e83ffbea45c.b89741a4160dd94f.90418b6a2a8b0438
-    80000000d6994837.447440006e8dd5f4.5c7cb8a948f429e0.3f800000f6d2505d
+    4b9d8fbc0579bec9.531b64349d68b6fe.bbd5d2e09a4c0ca2.bd7a26d79e785df7
     848076c76ea217c7
-VROUNDPS_256_0x2(mem)
+VPERMILPS_VAR_128(mem)
   before
     c21ef524b417edd3.133d03c41fb688ae.5ab39c1d6496c607.bf8165c9703cff81
     531f21dc8fe29c48.a6feb55bb637abe1.8789822a715592a2.21e9f9cb3569ee97
@@ -28965,11 +28965,11 @@
   after
     c21ef524b417edd3.133d03c41fb688ae.5ab39c1d6496c607.bf8165c9703cff81
     531f21dc8fe29c48.a6feb55bb637abe1.8789822a715592a2.21e9f9cb3569ee97
-    135075da1810e052.622c9fed6587640d.b4699247e0b0d4fc.3e57875285601591
-    c21c000080000000.3f8000003f800000.5ab39c1d6496c607.bf800000703cff81
+    0000000000000000.0000000000000000.21e9f9cb8789822a.21e9f9cb21e9f9cb
+    df7d6e096eac741c.a213bfe6c932efdf.be1e4961ccb34840.70180ccafbacaf1b
     1478859f33d9f9e0
 
-VROUNDPS_256_0x2(reg)
+VPERMILPS_VAR_128(reg)
   before
     86c3ed3eca742f8d.91728657aac215d3.c2ff0fb27dc48703.81762262516bab9b
     224440115c088ccd.06fb3bb0ea5e7fa2.1d3c8dbe1eca6924.d93b99378ce3ba39
@@ -28977,12 +28977,12 @@
     491c9807de4cafb9.a9f8692ee55b9d3b.f9d801429460fa0f.b83f520f9243c6ec
     f7168ce996443c59
   after
-    86c3ed3eca742f8d.91728657aac215d3.c2ff0fb27dc48703.81762262516bab9b
+    0000000000000000.0000000000000000.8ce3ba391d3c8dbe.d93b9937d93b9937
     224440115c088ccd.06fb3bb0ea5e7fa2.1d3c8dbe1eca6924.d93b99378ce3ba39
     45497b8683224e4d.1ae308fe4a8d6eb6.1115357447cfd1ef.a23a2acd99272e45
-    3f8000005c088ccd.3f800000ea5e7fa2.3f8000003f800000.d93b993780000000
+    491c9807de4cafb9.a9f8692ee55b9d3b.f9d801429460fa0f.b83f520f9243c6ec
     f7168ce996443c59
-VROUNDPS_256_0x2(mem)
+VPERMILPS_VAR_128(mem)
   before
     3b8b5446bf364db9.8b0a95020714ebbc.8f04da2cd8d2c95c.30cfef93a3082231
     606926142923b538.675f6de29a064003.a8d4d8e53e00ae46.1447fad30d538300
@@ -28992,11 +28992,11 @@
   after
     3b8b5446bf364db9.8b0a95020714ebbc.8f04da2cd8d2c95c.30cfef93a3082231
     606926142923b538.675f6de29a064003.a8d4d8e53e00ae46.1447fad30d538300
-    427e7e3ff0192f01.39671c1334ade839.cf34de4333f00824.ff8c1e6d70ce5929
-    3f80000080000000.800000003f800000.80000000d8d2c95c.3f80000080000000
+    0000000000000000.0000000000000000.0d5383000d538300.a8d4d8e51447fad3
+    bd94d9b132247840.5d6d9f0170951f0b.e2f06834d4af9223.4fe957cf6804e258
     5eaca2648f815838
 
-VROUNDPS_256_0x3(reg)
+VPERMILPD_VAR_128(reg)
   before
     8a1ffa9984d2f876.ac78b257084e4c23.2fbff018ea4a2325.bcd3f2a33d48096f
     2d8f5bd8e182fdbe.edf6851d90a566d4.0ba70dc440592e32.39abf87b88c72933
@@ -29004,12 +29004,12 @@
     4c96282844302a19.d2ef0aba25086051.506c998ce9b34cd7.8b656a1b3ba952d5
     19e0cdbad924d40b
   after
-    8a1ffa9984d2f876.ac78b257084e4c23.2fbff018ea4a2325.bcd3f2a33d48096f
+    0000000000000000.0000000000000000.0ba70dc440592e32.0ba70dc440592e32
     2d8f5bd8e182fdbe.edf6851d90a566d4.0ba70dc440592e32.39abf87b88c72933
     a448c18e421da5bb.5bd9cef0e635847f.4d72f1710b4d7ddf.3542f7aad439ad9b
-    00000000e182fdbe.edf6851d80000000.0000000040400000.0000000080000000
+    4c96282844302a19.d2ef0aba25086051.506c998ce9b34cd7.8b656a1b3ba952d5
     19e0cdbad924d40b
-VROUNDPS_256_0x3(mem)
+VPERMILPD_VAR_128(mem)
   before
     ba7f9d74cbb4ee69.7fc58d108246c886.2d02b4696a2cb676.72e1ff7f7615d6c7
     490e54332c675e1c.9a21ebb499ebbdab.4ae048e8d0ad4419.0e1d21b84d02585b
@@ -29019,11 +29019,11 @@
   after
     ba7f9d74cbb4ee69.7fc58d108246c886.2d02b4696a2cb676.72e1ff7f7615d6c7
     490e54332c675e1c.9a21ebb499ebbdab.4ae048e8d0ad4419.0e1d21b84d02585b
-    a45870e41949de50.faf53e7f24ac4337.045342237395c467.806bfaa20a030e3e
-    80000000cbb4ee69.7fc58d1080000000.000000006a2cb676.72e1ff7f7615d6c7
+    0000000000000000.0000000000000000.4ae048e8d0ad4419.4ae048e8d0ad4419
+    a62b6c74ad642a30.f98e82dcc01497d4.36281e0570f2f38c.231886a84aa6341c
     5571c238a97605a3
 
-VROUNDPS_256_0x3(reg)
+VPERMILPD_VAR_128(reg)
   before
     71c0a8bdc200be7d.2a51c4cd05c600e9.f439b43908aff52f.be2b597de3d08cb3
     d25236a331cf9b56.0e97f5dd3c7b1aa7.4740cf01990a98f3.76276e74e63a4d09
@@ -29031,12 +29031,12 @@
     d86e3843836cafb8.62b3cecfb80b0ce0.6594b083032da068.ea3e169213e231f0
     5ef0a1927339ced9
   after
-    71c0a8bdc200be7d.2a51c4cd05c600e9.f439b43908aff52f.be2b597de3d08cb3
+    0000000000000000.0000000000000000.76276e74e63a4d09.76276e74e63a4d09
     d25236a331cf9b56.0e97f5dd3c7b1aa7.4740cf01990a98f3.76276e74e63a4d09
     d6726756936fd7db.2cc9798f6e8e3595.4eefcfa00eb0bdcd.3cead9d7983cf0b9
-    d25236a300000000.0000000000000000.4740cf0080000000.76276e74e63a4d09
+    d86e3843836cafb8.62b3cecfb80b0ce0.6594b083032da068.ea3e169213e231f0
     5ef0a1927339ced9
-VROUNDPS_256_0x3(mem)
+VPERMILPD_VAR_128(mem)
   before
     72ccf7c1d54c81a1.3390a3d49e535f98.8a206f8936fe5db3.e87a6e14150e7c71
     049e930d54280774.4526a6767fb02328.81ded9a90374e23b.33ec06c0e0de8f94
@@ -29046,11 +29046,11 @@
   after
     72ccf7c1d54c81a1.3390a3d49e535f98.8a206f8936fe5db3.e87a6e14150e7c71
     049e930d54280774.4526a6767fb02328.81ded9a90374e23b.33ec06c0e0de8f94
-    ee32f1600dd71b7d.687a3c96c30d3614.24b7861b3b7857a3.a23773f4ff29127c
-    72ccf7c1d54c81a1.0000000080000000.8000000000000000.e87a6e1400000000
+    0000000000000000.0000000000000000.81ded9a90374e23b.33ec06c0e0de8f94
+    0d538ea81b687be9.fad9619f05f8d507.4d78f4cbfb177a18.91a7b11a0e7c44d6
     5c88bca0aa625f4d
 
-VROUNDPS_256_0x3(reg)
+VPERMILPD_VAR_128(reg)
   before
     5f2691f16e68a18e.3dcfe4d09ae4e1e4.558f12fce1fc3cad.d9ed9ea55f5c05c6
     f6cc2b79f7194344.5b7071c4a7590999.d6e7491bf5a6a6b4.a5e200968153b5d8
@@ -29058,12 +29058,12 @@
     50649edec6ac9ec2.cc541dc0da5c93e3.bbb13e4c2e19768f.687bdd69768873da
     18b750237fdef922
   after
-    5f2691f16e68a18e.3dcfe4d09ae4e1e4.558f12fce1fc3cad.d9ed9ea55f5c05c6
+    0000000000000000.0000000000000000.d6e7491bf5a6a6b4.d6e7491bf5a6a6b4
     f6cc2b79f7194344.5b7071c4a7590999.d6e7491bf5a6a6b4.a5e200968153b5d8
     7dc885a4e101841d.4103b0705ed2b134.da2f0467da8150c6.8b2397888008467b
-    f6cc2b79f7194344.5b7071c480000000.d6e7491bf5a6a6b4.8000000080000000
+    50649edec6ac9ec2.cc541dc0da5c93e3.bbb13e4c2e19768f.687bdd69768873da
     18b750237fdef922
-VROUNDPS_256_0x3(mem)
+VPERMILPD_VAR_128(mem)
   before
     77a46ba4b817947f.cbed6f9345a7cee2.d82f35a038026ccf.d6baf3368dfb54bc
     620caad73c3eff1c.49aff62ff77d5027.415f72fd92d0f827.8896209192b225f9
@@ -29073,11 +29073,11 @@
   after
     77a46ba4b817947f.cbed6f9345a7cee2.d82f35a038026ccf.d6baf3368dfb54bc
     620caad73c3eff1c.49aff62ff77d5027.415f72fd92d0f827.8896209192b225f9
-    b3bb8aa8275ff726.28f62d1e7bbb5f3d.e4b252c107d2f215.2b91c0cad9ca26f1
-    77a46ba480000000.cbed6f9345a7c800.d82f35a000000000.d6baf33680000000
+    0000000000000000.0000000000000000.415f72fd92d0f827.8896209192b225f9
+    477f8603978738c8.c30e13cd6aec38d1.9bf251dab11517c5.1cf7cf4bffd09351
     b71349819f4fa7c4
 
-VROUNDPS_256_0x4(reg)
+VPERMILPS_VAR_256(reg)
   before
     58332ad956d39ff7.fa231ad4a5c07e2f.7542a1a6629c178f.43ece932aca42365
     5ba16fbec0e9b796.a872c2086f198487.9cdfd417ff573822.b86c97b7158cd11e
@@ -29085,12 +29085,12 @@
     f89a12de1af936c6.65453f44a654c3b8.b5841b6d96212e7a.792e27f59f940692
     7c070086f8cd05a3
   after
-    58332ad956d39ff7.fa231ad4a5c07e2f.7542a1a6629c178f.43ece932aca42365
+    5ba16fbe6f198487.a872c2085ba16fbe.9cdfd4179cdfd417.158cd11e9cdfd417
     5ba16fbec0e9b796.a872c2086f198487.9cdfd417ff573822.b86c97b7158cd11e
     1daa139b771c2b4c.2d39fa89119b07fb.9331a98bdcaad637.d63ed85407d8df1f
-    5ba16fbec0e00000.800000006f198487.80000000ff573822.8000000000000000
+    f89a12de1af936c6.65453f44a654c3b8.b5841b6d96212e7a.792e27f59f940692
     7c070086f8cd05a3
-VROUNDPS_256_0x4(mem)
+VPERMILPS_VAR_256(mem)
   before
     bd97e0f32f8e977f.49bd68f2420a15af.2b5f0c264a5074e9.6024262bc8467c96
     17a841285fe37752.6c5e11438ede04b4.5d56dd191a99d5bb.ee5dc6300ea7fb38
@@ -29100,11 +29100,11 @@
   after
     bd97e0f32f8e977f.49bd68f2420a15af.2b5f0c264a5074e9.6024262bc8467c96
     17a841285fe37752.6c5e11438ede04b4.5d56dd191a99d5bb.ee5dc6300ea7fb38
-    6607a111a5d96148.bdcb0a3d97fe3f81.d6f52e0b323da35a.bd7bf8e805cfe80b
-    8000000000000000.49bd68f0420c0000.000000004a5074e8.6024262bc8467c80
+    17a8412817a84128.5fe3775217a84128.1a99d5bbee5dc630.5d56dd191a99d5bb
+    86807b9a1c7b138b.974e4e4cfbf801c1.72077be7ad489af1.27c9b7bf484b7fbc
     8994ff2274a6fcf6
 
-VROUNDPS_256_0x4(reg)
+VPERMILPS_VAR_256(reg)
   before
     4028cc7b256c9a66.52de4cb0e1d5474a.5834d9dd56578721.0d5a4199a7c475ad
     a6d11b38f52a96b8.a8ef8e3d0ff4baaf.5bc9a75a43a70d4c.82b8fb0d3dbff1b9
@@ -29112,12 +29112,12 @@
     f3922b8a68bb97b0.5f565a7117ae4c1d.9730fecc454c07b6.6fc83bebab60bb73
     9e11ba2dbb1e827a
   after
-    4028cc7b256c9a66.52de4cb0e1d5474a.5834d9dd56578721.0d5a4199a7c475ad
+    a6d11b38a6d11b38.a6d11b38a6d11b38.82b8fb0d5bc9a75a.5bc9a75a43a70d4c
     a6d11b38f52a96b8.a8ef8e3d0ff4baaf.5bc9a75a43a70d4c.82b8fb0d3dbff1b9
     18dbe6c3836b2c97.637dbf2fc2e328e7.fc59b5315f75ceef.afee252f8a45ca42
-    80000000f52a96b8.8000000000000000.5bc9a75a43a70000.8000000000000000
+    f3922b8a68bb97b0.5f565a7117ae4c1d.9730fecc454c07b6.6fc83bebab60bb73
     9e11ba2dbb1e827a
-VROUNDPS_256_0x4(mem)
+VPERMILPS_VAR_256(mem)
   before
     17971de2d78bd980.9141e5f743a714ae.7744dbef2a62e37e.88997e9991b9f44c
     b824e0f41ab27cb4.4f351178adbadf3e.8914bf95160aa936.2ae23103e047d05d
@@ -29127,11 +29127,11 @@
   after
     17971de2d78bd980.9141e5f743a714ae.7744dbef2a62e37e.88997e9991b9f44c
     b824e0f41ab27cb4.4f351178adbadf3e.8914bf95160aa936.2ae23103e047d05d
-    5b857f51a19f293f.89baa9784480340c.6f92804ff7b35a70.db551376ce82d997
-    00000000d78bd980.8000000043a70000.7744dbef00000000.8000000080000000
+    1ab27cb4adbadf3e.b824e0f41ab27cb4.8914bf95160aa936.2ae23103e047d05d
+    de8777e4875e9a50.9b1cab63a4864ec3.07899c09ea67b158.f63f215ef5f749a4
     d6ec5627f4305c30
 
-VROUNDPS_256_0x4(reg)
+VPERMILPS_VAR_256(reg)
   before
     d9a8ae3d65bc50e8.1bf34298e8fc8c11.e2a712a568576a10.2bc78eaf0a346b1c
     59be250ce4245f78.f0985e5be184baaf.b8a7daaa2d80c49e.b916d22d742644e6
@@ -29139,12 +29139,12 @@
     442c62867ebdc0ce.ceb977bb0a83be30.84357eae27062130.7f1a426294a6413d
     6f6765f1834cde23
   after
-    d9a8ae3d65bc50e8.1bf34298e8fc8c11.e2a712a568576a10.2bc78eaf0a346b1c
+    e184baaf59be250c.e184baaff0985e5b.b8a7daaa2d80c49e.742644e62d80c49e
     59be250ce4245f78.f0985e5be184baaf.b8a7daaa2d80c49e.b916d22d742644e6
     b47cb8000ef6c68b.374146188e02e255.7a67ffdf8e8b981a.8b43e5704448f7e2
-    59be250ce4245f78.f0985e5be184baaf.8000000000000000.80000000742644e6
+    442c62867ebdc0ce.ceb977bb0a83be30.84357eae27062130.7f1a426294a6413d
     6f6765f1834cde23
-VROUNDPS_256_0x4(mem)
+VPERMILPS_VAR_256(mem)
   before
     38f6ca072a478abf.671b1f08d1068bed.8fcd6b3071120a6b.325b5285957d9c8b
     b792ed92a7a2003e.7795ebf4a25c6193.574aa063e0bc8433.e02677ce747b44d8
@@ -29154,11 +29154,11 @@
   after
     38f6ca072a478abf.671b1f08d1068bed.8fcd6b3071120a6b.325b5285957d9c8b
     b792ed92a7a2003e.7795ebf4a25c6193.574aa063e0bc8433.e02677ce747b44d8
-    c6094b7d166afdcb.d2e6c2b58d4b7e6c.03fa9141738ce6b4.eae2e9f75f8c57c2
-    0000000000000000.671b1f08d1068bed.8000000071120a6b.0000000080000000
+    b792ed92b792ed92.a25c61937795ebf4.747b44d8574aa063.e02677ce574aa063
+    42255eb492aa3d93.d259a1b630602026.6da9bab4458eed19.acdba56bf23c0ff6
     815ca695ca18a920
 
-VROUNDPD_128_0x0(reg)
+VPERMILPD_VAR_256(reg)
   before
     c7b3e8e382ab60eb.07b3a423386e7bc2.d53c83652426816b.722597aa72ce558f
     d92a67c0b7827104.f27f99b623c27583.35d9642d0729dee7.ee39a50d1759d942
@@ -29166,12 +29166,12 @@
     d1ab0dd8062991ce.a5007cf9394c876d.7f7514b909187b37.bc5741cf377e280c
     c5fac705ea306a7c
   after
-    c7b3e8e382ab60eb.07b3a423386e7bc2.d53c83652426816b.722597aa72ce558f
+    d92a67c0b7827104.d92a67c0b7827104.35d9642d0729dee7.ee39a50d1759d942
     d92a67c0b7827104.f27f99b623c27583.35d9642d0729dee7.ee39a50d1759d942
     130e1f9904271816.dd55b7596fb3e503.4f7d407a75f67247.bdb05fcb4f3a365d
-    0000000000000000.0000000000000000.0000000000000000.ee39a50d1759d942
+    d1ab0dd8062991ce.a5007cf9394c876d.7f7514b909187b37.bc5741cf377e280c
     c5fac705ea306a7c
-VROUNDPD_128_0x0(mem)
+VPERMILPD_VAR_256(mem)
   before
     b5656e59855cb9d9.6e4d2cea581117d8.264e63809d9a18ee.220ada545f1b3362
     6864b1b7230fd14f.483f783c976de8df.3c09e8dcb6a855b2.928b90b8148cd675
@@ -29181,11 +29181,11 @@
   after
     b5656e59855cb9d9.6e4d2cea581117d8.264e63809d9a18ee.220ada545f1b3362
     6864b1b7230fd14f.483f783c976de8df.3c09e8dcb6a855b2.928b90b8148cd675
-    bac20b0be0546e09.bacfed385ec83d8f.c3fe87f7a082f7e4.2c433152c3f6a21b
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    483f783c976de8df.483f783c976de8df.3c09e8dcb6a855b2.3c09e8dcb6a855b2
+    874dfb41d9374b33.1f47874c49af5596.97f9bdbf7835bdb1.4c7dba8c09e5d101
     4e8625d482e6a0d3
 
-VROUNDPD_128_0x0(reg)
+VPERMILPD_VAR_256(reg)
   before
     8eaa7095c8844b3c.abcffa452ac525fa.d5f443e2f5ad6a9e.94c6051f59cc6144
     6835963a7a4c0de9.02158604ee08b88a.36221c68fe4eb953.9631db036053a0ca
@@ -29193,12 +29193,12 @@
     5ab064e58c86c9bd.b81d315f41e3f8b3.6d3116f194abf477.191021074e63de5e
     521c8aff6d0355c4
   after
-    8eaa7095c8844b3c.abcffa452ac525fa.d5f443e2f5ad6a9e.94c6051f59cc6144
+    02158604ee08b88a.6835963a7a4c0de9.36221c68fe4eb953.36221c68fe4eb953
     6835963a7a4c0de9.02158604ee08b88a.36221c68fe4eb953.9631db036053a0ca
     3873933131c82385.68eb1968420fc00e.a01d0e49ff1f7e62.7905bb57a8d7366f
-    0000000000000000.0000000000000000.0000000000000000.8000000000000000
+    5ab064e58c86c9bd.b81d315f41e3f8b3.6d3116f194abf477.191021074e63de5e
     521c8aff6d0355c4
-VROUNDPD_128_0x0(mem)
+VPERMILPD_VAR_256(mem)
   before
     00f6712b22c457cc.2a3704c324123a3d.d0764ad407921da5.fba92ecc5a7e583d
     fe6a527888b19fa3.04556f3597f7b4b0.8bc4deb3b128eb0f.a4d35446ed24e661
@@ -29208,11 +29208,11 @@
   after
     00f6712b22c457cc.2a3704c324123a3d.d0764ad407921da5.fba92ecc5a7e583d
     fe6a527888b19fa3.04556f3597f7b4b0.8bc4deb3b128eb0f.a4d35446ed24e661
-    2a44a9d0bbd6eb75.4457a1a881c171c3.c5d16be75aaf1d1e.c6f983cce82ada8f
-    0000000000000000.0000000000000000.d0764ad407921da5.fba92ecc5a7e583d
+    04556f3597f7b4b0.04556f3597f7b4b0.a4d35446ed24e661.a4d35446ed24e661
+    5f4ff321d840f56d.468796887dfcad21.5a6a6c5e1f3570fd.bb68b7c8e71c6f72
     e06ceda78784e2b6
 
-VROUNDPD_128_0x0(reg)
+VPERMILPD_VAR_256(reg)
   before
     92511fd663f06f09.7859aa55fbfa79b8.66314b422835a677.255b5d041bc6a0d9
     2b624bc018ec5114.532c4c5a3f103581.00a3ba411df79671.0470bac36b6d68de
@@ -29220,12 +29220,12 @@
     853c7f747bc00809.bb603f849b82403f.110bbcbd56484dfe.6a35aa3f752db410
     aa7e34d5675fae97
   after
-    92511fd663f06f09.7859aa55fbfa79b8.66314b422835a677.255b5d041bc6a0d9
+    2b624bc018ec5114.532c4c5a3f103581.00a3ba411df79671.00a3ba411df79671
     2b624bc018ec5114.532c4c5a3f103581.00a3ba411df79671.0470bac36b6d68de
     08ed6cd04102c686.cb95551bc18fe3f5.6f28e1f0f8cfbaba.d27500882a368637
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    853c7f747bc00809.bb603f849b82403f.110bbcbd56484dfe.6a35aa3f752db410
     aa7e34d5675fae97
-VROUNDPD_128_0x0(mem)
+VPERMILPD_VAR_256(mem)
   before
     6c1a1a341dd732f6.ff9c7e1761b25349.01598881ecf5078c.41994513d2ee8ceb
     8ed6d84ab2a1fa59.d05967258f62e4f4.774baafecef5f608.5a1e7a5e094db32b
@@ -29235,11 +29235,11 @@
   after
     6c1a1a341dd732f6.ff9c7e1761b25349.01598881ecf5078c.41994513d2ee8ceb
     8ed6d84ab2a1fa59.d05967258f62e4f4.774baafecef5f608.5a1e7a5e094db32b
-    ea7eeb0243cac3ed.55bf350aa35ff8b4.fb0423e75d8dc7de.bae6560a97f2fe6a
-    0000000000000000.0000000000000000.0000000000000000.41994513d4000000
+    8ed6d84ab2a1fa59.d05967258f62e4f4.5a1e7a5e094db32b.774baafecef5f608
+    5edece48eb5d48de.ea1ae4323632c835.674e6f28b6c9363b.bc3dd5831769a855
     bb6ff335253cef98
 
-VROUNDPD_128_0x1(reg)
+VPSLLW_128(reg)
   before
     15c7ad8d5ef90cde.c4c1fd08c6674757.ebb5710ae6699324.99f608aef4b6014b
     2492fdf55d2b3ed4.faf5f42ef1f27a85.b4ddd6fc4f8f932d.6bc86c63345fe239
@@ -29249,10 +29249,10 @@
   after
     15c7ad8d5ef90cde.c4c1fd08c6674757.ebb5710ae6699324.99f608aef4b6014b
     2492fdf55d2b3ed4.faf5f42ef1f27a85.b4ddd6fc4f8f932d.6bc86c63345fe239
-    461ce1dbbf5fbf26.da4430a6880d9d94.a1df11750c3005fb.bb90163591d19631
-    0000000000000000.0000000000000000.bff0000000000000.6bc86c63345fe239
-    40312cdc143d66f3
-VROUNDPD_128_0x1(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000003
+    0000000000000000.0000000000000000.a6e8b7e07c789968.5e406318a2f811c8
+    0000000000000003
+VPSLLW_128(mem)
   before
     2fa3918a724ffa13.2f9d53cd19faa18b.0c66643c671ca702.579cf6aef3152e98
     0a3a2c045d5a50ee.ae2cd8b24a7a79f8.15d15433e82905ba.d8ef994455715dbf
@@ -29263,10 +29263,10 @@
     2fa3918a724ffa13.2f9d53cd19faa18b.0c66643c671ca702.579cf6aef3152e98
     0a3a2c045d5a50ee.ae2cd8b24a7a79f8.15d15433e82905ba.d8ef994455715dbf
     aec37936f16926b0.afa9e1c44e2b9270.3988782b44f54403.ed4c01127c77ee5b
-    0000000000000000.0000000000000000.0000000000000000.579cf6aef3152e98
+    0000000000000000.0000000000000000.ba2086600520b740.1de02880ae20b7e0
     4250100387b725a5
 
-VROUNDPD_128_0x1(reg)
+VPSLLW_128(reg)
   before
     3b8faffea40843ab.c1db1a7287c53d97.a8a16d1f3d517132.42084ed3fff753f7
     380704e1f434b2d6.e9016555c029f714.57b3e74060deb0d5.e06bf75996459cf9
@@ -29276,10 +29276,10 @@
   after
     3b8faffea40843ab.c1db1a7287c53d97.a8a16d1f3d517132.42084ed3fff753f7
     380704e1f434b2d6.e9016555c029f714.57b3e74060deb0d5.e06bf75996459cf9
-    95030a1615c8b0d2.494a539f12c21f28.f8e4d53ec5cc1f33.0849c4927882b53d
-    0000000000000000.0000000000000000.57b3e74060deb0d5.e06bf75996459cf9
-    69a8bbca8ff74a35
-VROUNDPD_128_0x1(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000005
+    0000000000000000.0000000000000000.f660e8001bc01aa0.0d60eb20c8a09f20
+    0000000000000005
+VPSLLW_128(mem)
   before
     5ac2dda1fc473e42.debc192a395544f0.2470061c74c0acc4.81d2fa82c7fd7dd2
     468713db24b5f23f.830f1be174665269.57e6c227ba3d88a4.202729a09c57e36b
@@ -29290,10 +29290,10 @@
     5ac2dda1fc473e42.debc192a395544f0.2470061c74c0acc4.81d2fa82c7fd7dd2
     468713db24b5f23f.830f1be174665269.57e6c227ba3d88a4.202729a09c57e36b
     09c4da62234e235a.f717bd9aef0fde64.33ae114a8b1fc4ca.21ccbc4a24436970
-    0000000000000000.0000000000000000.0000000000000000.bff0000000000000
+    0000000000000000.0000000000000000.60007000d0004000.700000007000b000
     b931fbf7baffc46c
 
-VROUNDPD_128_0x1(reg)
+VPSLLW_128(reg)
   before
     08899fd100e611bb.84d6070b192eec94.c076d6c71657608f.566355883840469b
     296197e86a8f6e26.f3436605478efb0c.cd654512fb0ece16.54e9437b4d97069d
@@ -29303,10 +29303,10 @@
   after
     08899fd100e611bb.84d6070b192eec94.c076d6c71657608f.566355883840469b
     296197e86a8f6e26.f3436605478efb0c.cd654512fb0ece16.54e9437b4d97069d
-    7803dda891861659.aa5846fcbc487750.19384410908ca9d0.6cf0b2365b831496
-    0000000000000000.0000000000000000.cd654512fb0ece16.54e9437b4d97069d
-    57b408b5d4460c1b
-VROUNDPD_128_0x1(mem)
+    0000000000000000.0000000000000000.0000000000000000.000000000000000b
+    0000000000000000.0000000000000000.280090007000b000.4800d800b800e800
+    000000000000000b
+VPSLLW_128(mem)
   before
     e209e65076376eff.10d948d38c8b3ac5.5da97596edfba5ef.e2bee7d53b0f9887
     f50f376482eb0f8b.11a4651797b12e56.117dbd10e10ccfa1.16088275892b24dd
@@ -29317,10 +29317,10 @@
     e209e65076376eff.10d948d38c8b3ac5.5da97596edfba5ef.e2bee7d53b0f9887
     f50f376482eb0f8b.11a4651797b12e56.117dbd10e10ccfa1.16088275892b24dd
     6e9476db1470abe8.b06ac0b3d1555d5f.7b2975388da756d0.fb679f77f83f0e15
-    0000000000000000.0000000000000000.5da97596edfba5ef.e2bee7d53b0f9887
+    0000000000000000.0000000000000000.fa00200018004200.1000ea005600ba00
     43934b55a77cecd9
 
-VROUNDPD_128_0x2(reg)
+VPSRLW_128(reg)
   before
     60f9d3091fbe57bd.fe46aea7371bc2cc.371625a83f455f88.e63826437aad6a54
     9ca3cdd028271033.ce0c9fd30159b6a9.d89426d7aca9aaff.9d3417fdf32f6f01
@@ -29330,10 +29330,10 @@
   after
     60f9d3091fbe57bd.fe46aea7371bc2cc.371625a83f455f88.e63826437aad6a54
     9ca3cdd028271033.ce0c9fd30159b6a9.d89426d7aca9aaff.9d3417fdf32f6f01
-    54de33165d4352e7.72806f13c1989509.873e5710b7ba209f.7c376816946cc0da
-    0000000000000000.0000000000000000.d89426d7aca9aaff.8000000000000000
-    1e861a11bd443ac2
-VROUNDPD_128_0x2(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000002
+    0000000000000000.0000000000000000.362509b52b2a2abf.274d05ff3ccb1bc0
+    0000000000000002
+VPSRLW_128(mem)
   before
     996874cb7df8da29.a83738cfbdc665b7.aaa1997f90460201.7e40354d1a148004
     ac831e94d496b66d.fcecce1a2044ad2b.f6e6eb83d8cd09f1.7e32db29a875e122
@@ -29344,10 +29344,10 @@
     996874cb7df8da29.a83738cfbdc665b7.aaa1997f90460201.7e40354d1a148004
     ac831e94d496b66d.fcecce1a2044ad2b.f6e6eb83d8cd09f1.7e32db29a875e122
     31a29457de2b8cb9.3c63c2941fa66e8d.86090c4c8585ea13.fd7fa1bf46b45e18
-    0000000000000000.0000000000000000.8000000000000000.7e40354d1a148004
+    0000000000000000.0000000000000000.003d003a00360002.001f0036002a0038
     e45979c41cf99c3a
 
-VROUNDPD_128_0x2(reg)
+VPSRLW_128(reg)
   before
     057e840d8c18d4bf.051bd57b7e67101c.f0c2b0c662444eca.e619a7d980b62da0
     132e9ebf7c4418cb.0b0d98b54b26388a.1c43a356de97e5fd.6e9e1a7606460762
@@ -29357,10 +29357,10 @@
   after
     057e840d8c18d4bf.051bd57b7e67101c.f0c2b0c662444eca.e619a7d980b62da0
     132e9ebf7c4418cb.0b0d98b54b26388a.1c43a356de97e5fd.6e9e1a7606460762
-    6bb4c3458509a40a.f53317983b0c48b0.a4b5e4c567ffe5cd.aa304c866138ab07
-    0000000000000000.0000000000000000.3ff0000000000000.6e9e1a7606460762
-    b1afd9b4076b44a9
-VROUNDPD_128_0x2(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000009
+    0000000000000000.0000000000000000.000e0051006f0072.0037000d00030003
+    0000000000000009
+VPSRLW_128(mem)
   before
     35332da98bc5b0fd.6a772082589082d4.e04a390df67b13d8.389c3cef0f3713f7
     ddf52fc254b0d8e5.c84a4f1059694db7.9ad4d576f91c4530.fca84c836520b9a8
@@ -29371,10 +29371,10 @@
     35332da98bc5b0fd.6a772082589082d4.e04a390df67b13d8.389c3cef0f3713f7
     ddf52fc254b0d8e5.c84a4f1059694db7.9ad4d576f91c4530.fca84c836520b9a8
     86c15cec7f36758a.e1247923e50c507d.a7c11d3a8f1350f1.8cd599a6384cb8a7
-    0000000000000000.0000000000000000.e04a390df67b13d8.3ff0000000000000
+    0000000000000000.0000000000000000.0004000600070002.0007000200030005
     7fc2db4ac39fb33d
 
-VROUNDPD_128_0x2(reg)
+VPSRLW_128(reg)
   before
     9b1ac8a2b3de282d.4ba6231e684905c2.af1db0890bddec64.2bf7a180e634e05d
     f3c3e2399090e61a.1f57b7005fed70ab.1dd4b3b3de24fedd.59d8d6dadf76dd60
@@ -29384,10 +29384,10 @@
   after
     9b1ac8a2b3de282d.4ba6231e684905c2.af1db0890bddec64.2bf7a180e634e05d
     f3c3e2399090e61a.1f57b7005fed70ab.1dd4b3b3de24fedd.59d8d6dadf76dd60
-    e208257cf5412ab0.644264a1275d4004.b6c1a312ab6437e9.4a4da63edb3fa37b
-    0000000000000000.0000000000000000.3ff0000000000000.59d8d6dadf76dd60
-    e5220cd44e9379ac
-VROUNDPD_128_0x2(mem)
+    0000000000000000.0000000000000000.0000000000000000.000000000000000c
+    0000000000000000.0000000000000000.0001000b000d000f.0005000d000d000d
+    000000000000000c
+VPSRLW_128(mem)
   before
     471a9adffc370119.f99a17b2c8d2338b.b1f6fdd59cd306b0.d4713321a500126d
     dcd6b3a31e91424f.d97ebe7e6fc97026.7157e13f81f0735c.12cbcba70a742a3c
@@ -29398,10 +29398,10 @@
     471a9adffc370119.f99a17b2c8d2338b.b1f6fdd59cd306b0.d4713321a500126d
     dcd6b3a31e91424f.d97ebe7e6fc97026.7157e13f81f0735c.12cbcba70a742a3c
     8022d50ed0adf879.c02f7ea50eef221b.1221cf19a70a3726.ea8c3f13d9115b4f
-    0000000000000000.0000000000000000.8000000000000000.d4713321a500126d
+    0000000000000000.0000000000000000.0000000100010000.0000000100000000
     d872a94a27f8f2ef
 
-VROUNDPD_128_0x3(reg)
+VPSRAW_128(reg)
   before
     a63097edde5ad2d5.64992185515db15b.17273ab4a5fbd9c2.6724bbcd2862b2c7
     7e8450256f15b9ae.5d5d446a59082d6c.3f062e74d6f755cc.d3f4af7fbbb9e2f6
@@ -29411,10 +29411,10 @@
   after
     a63097edde5ad2d5.64992185515db15b.17273ab4a5fbd9c2.6724bbcd2862b2c7
     7e8450256f15b9ae.5d5d446a59082d6c.3f062e74d6f755cc.d3f4af7fbbb9e2f6
-    bcbbd05f77b5e427.d5e05fa561a60d20.dee22b3f6e5336e0.8f5e9f52ff3c58f3
-    0000000000000000.0000000000000000.0000000000000000.d3f4af7fbbb9e2f6
-    6c2f5b070cf70a08
-VROUNDPD_128_0x3(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000008
+    0000000000000000.0000000000000000.003f002effd60055.ffd3ffafffbbffe2
+    0000000000000008
+VPSRAW_128(mem)
   before
     442f21c10c47bc79.d902168559d5f5a7.b1566dcddee8ec28.f5c131a74a591bd3
     dcf8d14c2ef3a668.71aad4496c6d5306.cee158928ba562d2.245c321cc41b950b
@@ -29425,10 +29425,10 @@
     442f21c10c47bc79.d902168559d5f5a7.b1566dcddee8ec28.f5c131a74a591bd3
     dcf8d14c2ef3a668.71aad4496c6d5306.cee158928ba562d2.245c321cc41b950b
     1257e7938e088202.df6449bf661be5b6.da5c2c5da9842ed1.3c242b4b176c66fd
-    0000000000000000.0000000000000000.8000000000000000.f5c131a74a591bd3
+    0000000000000000.0000000000000000.ffff0001fffe0001.00000000fffffffe
     926afb8cb6edf8be
 
-VROUNDPD_128_0x3(reg)
+VPSRAW_128(reg)
   before
     8980c8753a3532e4.c4073605759b02e6.ac42486e7ce694b3.2e517bb6a2d9b27d
     d8f37fc9063bb175.f9ef670835301f88.c4fdcb7fd11b2959.2e63f01cb567e482
@@ -29438,10 +29438,10 @@
   after
     8980c8753a3532e4.c4073605759b02e6.ac42486e7ce694b3.2e517bb6a2d9b27d
     d8f37fc9063bb175.f9ef670835301f88.c4fdcb7fd11b2959.2e63f01cb567e482
-    db0f1bf4b78db21a.3a9eee77a25e1e84.22fbf5f17d96e2fe.8e953c37a8485a8c
-    0000000000000000.0000000000000000.c4fdcb7fd11b2959.0000000000000000
-    da894e419d2f045c
-VROUNDPD_128_0x3(mem)
+    0000000000000000.0000000000000000.0000000000000000.000000000000001c
+    0000000000000000.0000000000000000.ffffffffffff0000.0000ffffffffffff
+    000000000000001c
+VPSRAW_128(mem)
   before
     7ee20b07d74fb17c.6e71f37f37432957.547cef4af6b4b43c.1fef2ea8478caef8
     f28c90335ff1924f.b54f26b83ec01745.e444618513f3c350.767e36c59d1f3aa4
@@ -29452,10 +29452,10 @@
     7ee20b07d74fb17c.6e71f37f37432957.547cef4af6b4b43c.1fef2ea8478caef8
     f28c90335ff1924f.b54f26b83ec01745.e444618513f3c350.767e36c59d1f3aa4
     10515ab154216304.20062f7798b777fa.f20219dd4ffaa56f.847fd5f4bb27d900
-    0000000000000000.0000000000000000.547cef4af6b4b43c.0000000000000000
+    0000000000000000.0000000000000000.ffc800c30027ff86.00ec006dff3a0075
     310ac834b9c84477
 
-VROUNDPD_128_0x3(reg)
+VPSRAW_128(reg)
   before
     882c141ed17887e9.be5fa954ef5cc9bf.d22fb13bbc487c63.f38f4b908d92d17c
     06f0e8c820cecdbc.05402850ce7fd51d.d0392118bcf99a70.a0f7bec4c93b93c2
@@ -29465,10 +29465,10 @@
   after
     882c141ed17887e9.be5fa954ef5cc9bf.d22fb13bbc487c63.f38f4b908d92d17c
     06f0e8c820cecdbc.05402850ce7fd51d.d0392118bcf99a70.a0f7bec4c93b93c2
-    05a43fa042555399.676dda4e8861c20c.634b572c815618f2.398467c492dc17c3
-    0000000000000000.0000000000000000.d0392118bcf99a70.8000000000000000
-    a2404bd83d3659a5
-VROUNDPD_128_0x3(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000005
+    0000000000000000.0000000000000000.fe810108fde7fcd3.fd07fdf6fe49fc9e
+    0000000000000005
+VPSRAW_128(mem)
   before
     2b077ec556088ede.fa0766876c270f28.edd9cc02008f2d4b.b5bb02a9c8422b08
     1023d82d6d027682.a74f2e6fad8abc31.c8b2038ff4f324f4.2cb070ea82e937f4
@@ -29479,10 +29479,10 @@
     2b077ec556088ede.fa0766876c270f28.edd9cc02008f2d4b.b5bb02a9c8422b08
     1023d82d6d027682.a74f2e6fad8abc31.c8b2038ff4f324f4.2cb070ea82e937f4
     2e62d4fd9e31ccbc.46b66a33314e99f5.2e065ecd3546ebdd.a6de9212716b9504
-    0000000000000000.0000000000000000.edd9cc02008f2d4b.8000000000000000
+    0000000000000000.0000000000000000.ff910007ffe90049.005900e1ff05006f
     1815e7c85c313547
 
-VROUNDPD_128_0x4(reg)
+VPSLLD_128(reg)
   before
     c7b5112e908df0d1.8574a287bb5bb5a3.ca102b036f2bd260.0b51711107e7dc21
     e9bee12a69f5ed30.76e06d17e06fbfa9.689ca9e6625ba65f.3ae121efd24d7ed4
@@ -29492,10 +29492,10 @@
   after
     c7b5112e908df0d1.8574a287bb5bb5a3.ca102b036f2bd260.0b51711107e7dc21
     e9bee12a69f5ed30.76e06d17e06fbfa9.689ca9e6625ba65f.3ae121efd24d7ed4
-    dc7d512a82f46711.109ecac08ee729f6.67768957071d9aca.641ce52e58d1e078
-    0000000000000000.0000000000000000.689ca9e6625ba65f.0000000000000000
-    19c79a830765d741
-VROUNDPD_128_0x4(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000001
+    0000000000000000.0000000000000000.d13953ccc4b74cbe.75c243dea49afda8
+    0000000000000001
+VPSLLD_128(mem)
   before
     5cce8370678ce4be.a14707e3e5e8c508.af3f2a0af7340712.fb47648fd984d192
     0ab07070f302a1dc.2bec437468f52075.6cbb2583ea21f43a.48d6562f3e428c47
@@ -29506,10 +29506,10 @@
     5cce8370678ce4be.a14707e3e5e8c508.af3f2a0af7340712.fb47648fd984d192
     0ab07070f302a1dc.2bec437468f52075.6cbb2583ea21f43a.48d6562f3e428c47
     fe3bdd6ec6d2cbc7.f67610b89bc9e915.41b8a3c4d6a23159.67e49c0cc5c15718
-    0000000000000000.0000000000000000.8000000000000000.fb47648fd984d192
+    0000000000000000.0000000000000000.6000000040000000.e0000000e0000000
     8bab102eab330cbd
 
-VROUNDPD_128_0x4(reg)
+VPSLLD_128(reg)
   before
     48fd384a423f6ee9.2d782913b4b155b2.bb674f0982f8b598.a868154f0b91852a
     46fea2536b3bcfe0.1fc2fe9306d82d0a.6d67b9ee6e6a2fd4.f1b301708b181535
@@ -29519,10 +29519,10 @@
   after
     48fd384a423f6ee9.2d782913b4b155b2.bb674f0982f8b598.a868154f0b91852a
     46fea2536b3bcfe0.1fc2fe9306d82d0a.6d67b9ee6e6a2fd4.f1b301708b181535
-    e3fa4bb6c2b56d4f.c7e445c10f8962df.cf7ca3377bd407f2.c2af600a7663e4e6
-    0000000000000000.0000000000000000.6d67b9ee6e6a2fd4.f1b301708b181535
-    71ee6355f6752eec
-VROUNDPD_128_0x4(mem)
+    0000000000000000.0000000000000000.0000000000000000.000000000000000c
+    0000000000000000.0000000000000000.7b9ee000a2fd4000.3017000081535000
+    000000000000000c
+VPSLLD_128(mem)
   before
     05c801dfc5552199.67124c366d514b44.aedf12d8b8bbd2ae.1415eca166bdc082
     938400916c29439c.05c79b2cf88a0321.a351909890538501.ae30429b7c55194c
@@ -29533,10 +29533,10 @@
     05c801dfc5552199.67124c366d514b44.aedf12d8b8bbd2ae.1415eca166bdc082
     938400916c29439c.05c79b2cf88a0321.a351909890538501.ae30429b7c55194c
     f6eede570afd5023.b2a61a2b2172e827.c0ca6fb78fa68480.689009a82314c0a8
-    0000000000000000.0000000000000000.8000000000000000.0000000000000000
+    0000000000000000.0000000000000000.6a3213000a70a020.c60853608aa32980
     ad4fdbab9238e7c5
 
-VROUNDPD_128_0x4(reg)
+VPSLLD_128(reg)
   before
     ef46de7992b5dfde.aafb24cf95d71967.a51594f4c0782358.de053ebe74ab5ab5
     c1b2430a92891538.b336845abbf44e7c.a43d89966caff3dc.975e267f9174a8c2
@@ -29546,10 +29546,10 @@
   after
     ef46de7992b5dfde.aafb24cf95d71967.a51594f4c0782358.de053ebe74ab5ab5
     c1b2430a92891538.b336845abbf44e7c.a43d89966caff3dc.975e267f9174a8c2
-    7fde04ca2f41c580.024fb2a846425dc5.21bf9cf128c4de38.e8ee5e4d462932ac
-    0000000000000000.0000000000000000.8000000000000000.8000000000000000
-    bee7aec5e780eec5
-VROUNDPD_128_0x4(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000005
+    0000000000000000.0000000000000000.87b132c095fe7b80.ebc4cfe02e951840
+    0000000000000005
+VPSLLD_128(mem)
   before
     fbe8bf470a3b964c.2faa8e88af8a8189.dd4b6a41fd9ffc9e.040510833ab5f726
     3f500f8635106c60.d9e1505ec93405a2.23c6eb6461c60486.22606992c8aa9e11
@@ -29560,10 +29560,10 @@
     fbe8bf470a3b964c.2faa8e88af8a8189.dd4b6a41fd9ffc9e.040510833ab5f726
     3f500f8635106c60.d9e1505ec93405a2.23c6eb6461c60486.22606992c8aa9e11
     67ec1c6f830c2a2d.df095e12f0f1f458.1d4e2bfa9a4dd651.2f46d109d5ac5083
-    0000000000000000.0000000000000000.dd4b6a41fd9ffc9e.0000000000000000
+    0000000000000000.0000000000000000.bad9000081218000.1a648000a7844000
     81e3bfe4db08c7ae
 
-VROUNDPD_256_0x0(reg)
+VPSRLD_128(reg)
   before
     80313d1f0c7904be.ceef5bf0fba751a0.6f5b52c9d3d6fe4e.a0b9d434fdaccb3e
     dc3aba732b293d07.c6ef85605b5e319e.b01e30a3c81591e5.e23336af5e9c65b9
@@ -29573,10 +29573,10 @@
   after
     80313d1f0c7904be.ceef5bf0fba751a0.6f5b52c9d3d6fe4e.a0b9d434fdaccb3e
     dc3aba732b293d07.c6ef85605b5e319e.b01e30a3c81591e5.e23336af5e9c65b9
-    f24b334cd4a1ad33.12525a29506bea05.be014b0c39977eca.48eb464e051dbbc6
-    dc3aba732b293d07.c6ef85605b5e319e.8000000000000000.e23336af5e9c65b9
-    f34461a994ff8548
-VROUNDPD_256_0x0(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000008
+    0000000000000000.0000000000000000.00b01e3000c81591.00e23336005e9c65
+    0000000000000008
+VPSRLD_128(mem)
   before
     f07e643cb3797215.bdaf053d371f26e6.1174fb7b63b8d6bd.ae5a293b0096562c
     822505a488b20b25.299c572e283ca5c5.7dcbbddbb9118166.4768e4d98e2bb801
@@ -29587,10 +29587,10 @@
     f07e643cb3797215.bdaf053d371f26e6.1174fb7b63b8d6bd.ae5a293b0096562c
     822505a488b20b25.299c572e283ca5c5.7dcbbddbb9118166.4768e4d98e2bb801
     8506c1cc2fb909a3.bfc0945313524d37.acb61c4514eff527.1dc6ccb7083364d5
-    f07e643cb3797215.8000000000000000.0000000000000000.8000000000000000
+    0000000000000000.0000000000000000.07dcbbdd0b911816.04768e4d08e2bb80
     eca614df33cc8a24
 
-VROUNDPD_256_0x0(reg)
+VPSRLD_128(reg)
   before
     9ebf6c021b767bf8.4ea6760b605a2b9b.d9dbc0ed499a0387.c3779ee7427027a4
     fc59e11460c4a679.ccfd68fb230ec66d.166ba73acce48abc.63e5b9f84f295db7
@@ -29600,10 +29600,10 @@
   after
     9ebf6c021b767bf8.4ea6760b605a2b9b.d9dbc0ed499a0387.c3779ee7427027a4
     fc59e11460c4a679.ccfd68fb230ec66d.166ba73acce48abc.63e5b9f84f295db7
-    61c06f809d404754.2bbd645b27bdb85e.ec62696cb9572835.361761c2cf994c93
-    fc59e11460c4a679.ccfd68fb230ec66d.0000000000000000.63e5b9f84f295db7
-    e5f7453599cc4454
-VROUNDPD_256_0x0(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000014
+    0000000000000000.0000000000000000.0000016600000cce.0000063e000004f2
+    0000000000000014
+VPSRLD_128(mem)
   before
     783c79b61ca7c592.b424c71b70f7d9c7.fcac6b1b64418f4b.d6b56e2f43ea9ca1
     af762aa18268ef48.59ba88223e4a43b7.26726e54d42eed9f.a2a8aa981822e9ed
@@ -29614,10 +29614,10 @@
     783c79b61ca7c592.b424c71b70f7d9c7.fcac6b1b64418f4b.d6b56e2f43ea9ca1
     af762aa18268ef48.59ba88223e4a43b7.26726e54d42eed9f.a2a8aa981822e9ed
     656fd2e2e71c7da3.774c533375fc13b0.a1d26bacf74791c2.7733b196c7b23f2c
-    783c79b61ca7c592.8000000000000000.fcac6b1b64418f4b.d6b56e2f43ea9ca1
+    0000000000000000.0000000000000000.00000133000006a1.00000515000000c1
     b13c10022510f035
 
-VROUNDPD_256_0x0(reg)
+VPSRLD_128(reg)
   before
     cd5361470bf5c557.bdd1fc16208ab8f6.8a97f5278caed370.f98f446dbf2e9f24
     63306dd23c63911c.18d276e12c5ddc47.37e8c4e1a5c63c8e.8f8518ae9e147fba
@@ -29627,10 +29627,10 @@
   after
     cd5361470bf5c557.bdd1fc16208ab8f6.8a97f5278caed370.f98f446dbf2e9f24
     63306dd23c63911c.18d276e12c5ddc47.37e8c4e1a5c63c8e.8f8518ae9e147fba
-    cf21300e54e69132.62c3d7b2a75256ec.cc658c57966dfa66.e544d6be9e5797d0
-    63306dd23c63911c.0000000000000000.0000000000000000.8000000000000000
-    4650000072205a26
-VROUNDPD_256_0x0(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000006
+    0000000000000000.0000000000000000.00dfa313029718f2.023e1462027851fe
+    0000000000000006
+VPSRLD_128(mem)
   before
     073565097fc07dbf.986acc48a65e1bfb.32a443175cd336e4.1f17f723709a68f3
     fa13a4921cecc887.ae5b9c1f19691e07.712c4583ce77168f.94e39352933790ff
@@ -29641,10 +29641,10 @@
     073565097fc07dbf.986acc48a65e1bfb.32a443175cd336e4.1f17f723709a68f3
     fa13a4921cecc887.ae5b9c1f19691e07.712c4583ce77168f.94e39352933790ff
     f9b8398768b0f5a9.098f1457e2ba4512.0ed420a41f6e3a3e.610c17ecfd94fd76
-    0000000000000000.8000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.0000e25800019cee.000129c70001266f
     73a5cd121cbc994f
 
-VROUNDPD_256_0x1(reg)
+VPSRAD_128(reg)
   before
     70acf575089e400a.8f8256667731e7ae.02f0e99be95ceed8.d6b44dbacf82405b
     3541f7f3ac701cde.dd40d528730624e8.58b43f7e5dc5e7ea.b883998667b79b20
@@ -29654,10 +29654,10 @@
   after
     70acf575089e400a.8f8256667731e7ae.02f0e99be95ceed8.d6b44dbacf82405b
     3541f7f3ac701cde.dd40d528730624e8.58b43f7e5dc5e7ea.b883998667b79b20
-    1eaecef9a5be6a79.a9f49b058ca3342c.64eb2c7299a3f5ac.6aa3acb84e6f2a9a
-    0000000000000000.dd40d528730624e8.58b43f7e5dc5e7ea.bff0000000000000
-    a9011bfe7a96d65b
-VROUNDPD_256_0x1(mem)
+    0000000000000000.0000000000000000.0000000000000000.000000000000001b
+    0000000000000000.0000000000000000.0000000b0000000b.fffffff70000000c
+    000000000000001b
+VPSRAD_128(mem)
   before
     f0d86febf81c6bfb.cc43eb4905fb4bae.276deac58767bc85.0ce2bb3fd2ef3bef
     752f7bed355625ff.4902296ca30256a1.91cb6a7ea0a6acf2.623a55ee0976ecc7
@@ -29668,10 +29668,10 @@
     f0d86febf81c6bfb.cc43eb4905fb4bae.276deac58767bc85.0ce2bb3fd2ef3bef
     752f7bed355625ff.4902296ca30256a1.91cb6a7ea0a6acf2.623a55ee0976ecc7
     15d2bcf24d4dc094.5acb2dc606b5c309.e84e210447dd5e19.dd35775f76a1a000
-    f0d86febf81c6bfb.cc43eb4905fb4bae.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000
     b64340346419043f
 
-VROUNDPD_256_0x1(reg)
+VPSRAD_128(reg)
   before
     cbeedf701c7c2c9e.172bc9b180a78720.a8a774cf894db2eb.cdf62225ae64fc47
     766cf61d7bb5470d.30798e44d3222c6e.9c52b056e149acbc.14b36397a6cb5fa6
@@ -29681,10 +29681,10 @@
   after
     cbeedf701c7c2c9e.172bc9b180a78720.a8a774cf894db2eb.cdf62225ae64fc47
     766cf61d7bb5470d.30798e44d3222c6e.9c52b056e149acbc.14b36397a6cb5fa6
-    14097fa81d509237.d4437889718ba1fd.9536a0c46e22f7b3.b7c5cb859b5c756f
-    766cf61d7bb5470d.0000000000000000.bff0000000000000.0000000000000000
-    841cfd86ed25a8f2
-VROUNDPD_256_0x1(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000012
+    0000000000000000.0000000000000000.ffffe714fffff852.0000052cffffe9b2
+    0000000000000012
+VPSRAD_128(mem)
   before
     66f8bf7182763e03.94cfdc0397d9a86e.2d7aa7d90057ee8e.02d89106959474c2
     155a98878520762f.2f90a8ada8dfead3.9a80e5bc28d33ee7.2f2f8ab167461d32
@@ -29695,10 +29695,10 @@
     66f8bf7182763e03.94cfdc0397d9a86e.2d7aa7d90057ee8e.02d89106959474c2
     155a98878520762f.2f90a8ada8dfead3.9a80e5bc28d33ee7.2f2f8ab167461d32
     6d0e02b6112e0ea1.2ca1d6e46b774ca4.023137010c6e4e30.d0ee27f4de040777
-    66f8bf7182763e03.bff0000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.fffff3500000051a.000005e500000ce8
     ddd742ee28d19133
 
-VROUNDPD_256_0x1(reg)
+VPSRAD_128(reg)
   before
     0199b77e34f9a901.889b7f0c37a7480a.bcde4da8798a5f38.33c80862772da145
     0af4c155555cf354.030d880b072a6358.07a28e0efc1e8853.b4457f55356b5c69
@@ -29708,10 +29708,10 @@
   after
     0199b77e34f9a901.889b7f0c37a7480a.bcde4da8798a5f38.33c80862772da145
     0af4c155555cf354.030d880b072a6358.07a28e0efc1e8853.b4457f55356b5c69
-    52335ddf2586aada.960014d2d141ce9c.24e621b1a173c18a.a09dfa5b1ff6c72c
-    0000000000000000.0000000000000000.0000000000000000.bff0000000000000
-    2812ed4de628a046
-VROUNDPD_256_0x1(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000006
+    0000000000000000.0000000000000000.001e8a38fff07a21.fed115fd00d5ad71
+    0000000000000006
+VPSRAD_128(mem)
   before
     7dc75c10fae785f4.139138bd49605129.799ca269c25d7eba.441a325ec39151fb
     ad87c096aa240bf2.44476fe8d329b94b.80dd9c1021793cea.ffa2a7417872218c
@@ -29722,10 +29722,10 @@
     7dc75c10fae785f4.139138bd49605129.799ca269c25d7eba.441a325ec39151fb
     ad87c096aa240bf2.44476fe8d329b94b.80dd9c1021793cea.ffa2a7417872218c
     941f94cb11ecee6d.241227777ee87f4f.10cf0830e95a39c1.fcd95f10bf45f1ea
-    7dc75c10fae785f4.0000000000000000.799ca269c25d7eba.441a325ec39151fb
+    0000000000000000.0000000000000000.ffffff0100000042.ffffffff000000f0
     2c84892674ee7fb7
 
-VROUNDPD_256_0x2(reg)
+VPSLLQ_128(reg)
   before
     168ff3451bdcb67f.f6067ded7649ba89.64160c6da57e15ab.3afa28872598df13
     b3799101c4ecddc3.29ee8ab3acf81b82.7de830ac596b5c5b.8dcad397d20e00e6
@@ -29735,10 +29735,10 @@
   after
     168ff3451bdcb67f.f6067ded7649ba89.64160c6da57e15ab.3afa28872598df13
     b3799101c4ecddc3.29ee8ab3acf81b82.7de830ac596b5c5b.8dcad397d20e00e6
-    5e8f5dc60ba92f2f.84ddf7d80960c8a7.b5fec5ff9e80f19d.d87ce1cf58785010
-    8000000000000000.3ff0000000000000.7de830ac596b5c5b.8000000000000000
-    cab5126760596c17
-VROUNDPD_256_0x2(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000017
+    0000000000000000.0000000000000000.562cb5ae2d800000.cbe9070073000000
+    0000000000000017
+VPSLLQ_128(mem)
   before
     29d52e9f1ae8b04c.4d6a741be55c472c.1e04e2ebaa91fa27.f529348e4950f486
     f0069db01e9c1388.4ac7b683b0698416.16d357b22571f6da.b5d605a2e724da85
@@ -29749,10 +29749,10 @@
     29d52e9f1ae8b04c.4d6a741be55c472c.1e04e2ebaa91fa27.f529348e4950f486
     f0069db01e9c1388.4ac7b683b0698416.16d357b22571f6da.b5d605a2e724da85
     fd15d984888050f6.c48017a48954ddd8.a4d91d87393b2e6a.05f73779854efec5
-    3ff0000000000000.4d6a741be55c472c.3ff0000000000000.f529348e4950f486
+    0000000000000000.0000000000000000.d000000000000000.2800000000000000
     c6c9af2134d9eebb
 
-VROUNDPD_256_0x2(reg)
+VPSLLQ_128(reg)
   before
     ee12edca7c5133c8.54fdad29fb084b1b.a33227c2d7f1d392.f6be8a0b95be46cf
     16ff7ce53451a6c7.586e3cd23cc58129.c0c3ce9684bbe7e2.71352892168f9cfd
@@ -29762,10 +29762,10 @@
   after
     ee12edca7c5133c8.54fdad29fb084b1b.a33227c2d7f1d392.f6be8a0b95be46cf
     16ff7ce53451a6c7.586e3cd23cc58129.c0c3ce9684bbe7e2.71352892168f9cfd
-    99dc58e0f9648263.10ed89ef53e2811a.cadf85d4af9307bb.f41307d79f7b20b7
-    3ff0000000000000.586e3cd23cc58129.c0c3ce8000000000.71352892168f9cfd
-    7d37754c38d19d81
-VROUNDPD_256_0x2(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000001
+    0000000000000000.0000000000000000.81879d2d0977cfc4.e26a51242d1f39fa
+    0000000000000001
+VPSLLQ_128(mem)
   before
     3c14fd537f530fe8.259be82218f46825.10434f34726dd254.19e70f3af19b5ab1
     738ab4c93e209d8d.e5139442ab8aeaa2.0fb3bf36b2f49af4.156cda3b40e30528
@@ -29776,10 +29776,10 @@
     3c14fd537f530fe8.259be82218f46825.10434f34726dd254.19e70f3af19b5ab1
     738ab4c93e209d8d.e5139442ab8aeaa2.0fb3bf36b2f49af4.156cda3b40e30528
     fc6318999043049a.71ac7df1b962c56d.3361dd5b370a1e27.70aba5557d69acd7
-    3ff0000000000000.3ff0000000000000.3ff0000000000000.3ff0000000000000
+    0000000000000000.0000000000000000.cefcdacbd26bd000.b368ed038c14a000
     ae8a2985325bdd8a
 
-VROUNDPD_256_0x2(reg)
+VPSLLQ_128(reg)
   before
     4ac2da72e3e1dfe8.7771d4f65fbd4c9e.5c71f7adbc0d789b.5aa714c1811844f6
     b5e57a28f2d3cd2d.213e255c142ba5ec.74358091e9f8c956.15d625db7f285fe9
@@ -29789,10 +29789,10 @@
   after
     4ac2da72e3e1dfe8.7771d4f65fbd4c9e.5c71f7adbc0d789b.5aa714c1811844f6
     b5e57a28f2d3cd2d.213e255c142ba5ec.74358091e9f8c956.15d625db7f285fe9
-    493e0514fbbfe205.8e9f12cccc20c754.c84a36b501556310.6573d4c832f8251e
-    8000000000000000.3ff0000000000000.74358091e9f8c956.3ff0000000000000
-    3427fdcf2809a201
-VROUNDPD_256_0x2(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000001
+    0000000000000000.0000000000000000.e86b0123d3f192ac.2bac4bb6fe50bfd2
+    0000000000000001
+VPSLLQ_128(mem)
   before
     6bd66fc1a362d007.5fc6cd3a6db47521.214cb07bb7cc551c.93961a69689b642b
     a7236f3744ab99ff.998c024d0ed469bc.ff305991219b39d6.c36540d1ee9b44e4
@@ -29803,10 +29803,10 @@
     6bd66fc1a362d007.5fc6cd3a6db47521.214cb07bb7cc551c.93961a69689b642b
     a7236f3744ab99ff.998c024d0ed469bc.ff305991219b39d6.c36540d1ee9b44e4
     c4d9791d26f0b915.6db91244191d769b.10d88f61ff21d657.9eb58329d13e5d4c
-    6bd66fc1a362d007.5fc6cd3a6db47521.3ff0000000000000.8000000000000000
+    0000000000000000.0000000000000000.991219b39d600000.0d1ee9b44e400000
     c90750561b9f2cd4
 
-VROUNDPD_256_0x3(reg)
+VPSRLQ_128(reg)
   before
     d1a2d303bb745a4c.11b49ce91fa1ec4e.5377b493df5cc5d3.3ba48fe186802a65
     f4ed634f271db222.f970ada86e2378c8.1da13dc3d2698185.0d60516766715948
@@ -29816,10 +29816,10 @@
   after
     d1a2d303bb745a4c.11b49ce91fa1ec4e.5377b493df5cc5d3.3ba48fe186802a65
     f4ed634f271db222.f970ada86e2378c8.1da13dc3d2698185.0d60516766715948
-    9036fca7fc256f01.32c6b8866ed24a11.f16192879fd0442a.810f8f582a4931a4
-    f4ed634f271db222.f970ada86e2378c8.0000000000000000.0000000000000000
-    c4797128ccdaca76
-VROUNDPD_256_0x3(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000036
+    0000000000000000.0000000000000000.0000000000000076.0000000000000035
+    0000000000000036
+VPSRLQ_128(mem)
   before
     4acc0cdfe2ad0444.9eed39264f830c8d.066fad53f3e5b4bf.27d68e7e39dad2ff
     e24314b04c95d63b.caf3d62706f16291.5a5b8f1aaf62c27c.41232c8a3d951487
@@ -29830,10 +29830,10 @@
     4acc0cdfe2ad0444.9eed39264f830c8d.066fad53f3e5b4bf.27d68e7e39dad2ff
     e24314b04c95d63b.caf3d62706f16291.5a5b8f1aaf62c27c.41232c8a3d951487
     6aaa038825a0fe86.dd276ce394ee0f4f.6e105bb08d3a08b7.d43786db8cd94eb2
-    4acc0cdfe2ad0444.8000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.0000000005a5b8f1.00000000041232c8
     dae35bfb7a2d9aa4
 
-VROUNDPD_256_0x3(reg)
+VPSRLQ_128(reg)
   before
     0413cfa3505523c3.b6778bf8964e3aca.2b45733babc759a8.4b08a1fe1e30275a
     173aed40e1379434.33751b6a6608c81b.1ec7ddb06bba6f9a.cae3148d08657819
@@ -29843,10 +29843,10 @@
   after
     0413cfa3505523c3.b6778bf8964e3aca.2b45733babc759a8.4b08a1fe1e30275a
     173aed40e1379434.33751b6a6608c81b.1ec7ddb06bba6f9a.cae3148d08657819
-    71a4b33ec85e28a6.0e93849215149a70.6aa63090746dcaf6.7bb7619c8427f106
-    0000000000000000.0000000000000000.0000000000000000.cae3148d08657819
-    df7e79eba07f451e
-VROUNDPD_256_0x3(mem)
+    0000000000000000.0000000000000000.0000000000000000.000000000000001e
+    0000000000000000.0000000000000000.000000007b1f76c1.000000032b8c5234
+    000000000000001e
+VPSRLQ_128(mem)
   before
     4a083c02782e9a9f.6670250d0aacad38.525fcdb38254fcd9.78aa8141cf40429c
     57bcca4a529905ff.ba6bc8b79dea15b0.73a4a685779f0544.f36877eb5979d63d
@@ -29857,10 +29857,10 @@
     4a083c02782e9a9f.6670250d0aacad38.525fcdb38254fcd9.78aa8141cf40429c
     57bcca4a529905ff.ba6bc8b79dea15b0.73a4a685779f0544.f36877eb5979d63d
     e0669ead49cd436a.c3d80371f69f90d8.623a48bdbc6d4264.36b247af9ba1a0f7
-    4a083c02782e9a9f.6670250d0aacad38.525fcdb38254fcd9.78aa8141cf40429c
+    0000000000000000.0000000000000000.000000000039d253.000000000079b43b
     841d6239baefc669
 
-VROUNDPD_256_0x3(reg)
+VPSRLQ_128(reg)
   before
     47d6a5d7ce2e9979.dacc097900bd270f.683b2ec96c97b3e6.1e84d310a5c04a72
     424cb23f0a8b9252.021f97b9f89145a1.bbc9173fc1f4d125.a2d1b502805d8db8
@@ -29870,10 +29870,10 @@
   after
     47d6a5d7ce2e9979.dacc097900bd270f.683b2ec96c97b3e6.1e84d310a5c04a72
     424cb23f0a8b9252.021f97b9f89145a1.bbc9173fc1f4d125.a2d1b502805d8db8
-    d1cb83df0b94eda0.17985cc57d5e25ee.35f986764cf5f4c3.659e4f0a1bacf562
-    424cb23f0a8b8000.0000000000000000.8000000000000000.8000000000000000
-    19e79c0dff912394
-VROUNDPD_256_0x3(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000014
+    0000000000000000.0000000000000000.00000bbc9173fc1f.00000a2d1b502805
+    0000000000000014
+VPSRLQ_128(mem)
   before
     c1fc47e0803f6174.1a126774cad7b84e.792c78f19f111f68.0a73ebd7761934cf
     18c09a7931d0b469.8d737041c02aa005.7ddfc8e9750fb0ed.1d54d8d94c52ca94
@@ -29884,10 +29884,10 @@
     c1fc47e0803f6174.1a126774cad7b84e.792c78f19f111f68.0a73ebd7761934cf
     18c09a7931d0b469.8d737041c02aa005.7ddfc8e9750fb0ed.1d54d8d94c52ca94
     fa0011c42d4fd79e.040d2ff6eb58dae2.dee83d5d4835f4dc.c6083d4cc9615368
-    c1fc47e080300000.0000000000000000.792c78f19f111f68.0000000000000000
+    0000000000000000.0000000000000000.0000000000007ddf.0000000000001d54
     4a195c36272f31f0
 
-VROUNDPD_256_0x4(reg)
+VROUNDPS_128_0x0(reg)
   before
     de0e0e843f06fdfc.cf235d207848807a.6d1cbbc34e7732bd.272a8b6a562a83ab
     770527f46ee3adc7.7a9f2909ffda7e79.182882b5be7fc913.c7fc5cdbca1247e2
@@ -29898,9 +29898,9 @@
     de0e0e843f06fdfc.cf235d207848807a.6d1cbbc34e7732bd.272a8b6a562a83ab
     770527f46ee3adc7.7a9f2909ffda7e79.182882b5be7fc913.c7fc5cdbca1247e2
     724ba4f04f507dfe.20c60954418a3c69.369ded3ed293a23e.34544278ab51ad34
-    770527f46ee3adc7.7a9f2909ffda7e79.0000000000000000.c7fc5cdbca1247e2
+    0000000000000000.0000000000000000.0000000080000000.c7fc5d00ca1247e0
     e5c642e5250a52d7
-VROUNDPD_256_0x4(mem)
+VROUNDPS_128_0x0(mem)
   before
     e177538ef69a0981.fef4b74199106c5e.cd49f6c16776ebca.3ff3a4c4590c08c5
     1adf6b13a5b352f5.47ef456d3a7a03df.8c3cfbbb84c95493.e26be79a03890e7a
@@ -29911,10 +29911,10 @@
     e177538ef69a0981.fef4b74199106c5e.cd49f6c16776ebca.3ff3a4c4590c08c5
     1adf6b13a5b352f5.47ef456d3a7a03df.8c3cfbbb84c95493.e26be79a03890e7a
     6cc804614d60eb60.626926d6fda5aa7c.b60a04c6cc6a6dfd.697bbfb7c14245b3
-    e177538ef69a0981.fef4b74199106c5e.cd49f6c16776ebca.3ff0000000000000
+    0000000000000000.0000000000000000.cd49f6c16776ebca.40000000590c08c5
     91972076ec963967
 
-VROUNDPD_256_0x4(reg)
+VROUNDPS_128_0x0(reg)
   before
     ec3aa0f090496e3a.ca50ae03faa8f7c9.7e08d30f5b6f17b9.ba6c12c44ec9a263
     9aa6a562b867c442.8f87b731365ae320.37c796b72d2655b0.4d96108ec09d35b6
@@ -29925,9 +29925,9 @@
     ec3aa0f090496e3a.ca50ae03faa8f7c9.7e08d30f5b6f17b9.ba6c12c44ec9a263
     9aa6a562b867c442.8f87b731365ae320.37c796b72d2655b0.4d96108ec09d35b6
     f9272b36017d782c.dd6f31d6dcd10e1d.32349c4d93cf9274.bbcc021acef0695b
-    8000000000000000.8000000000000000.0000000000000000.4d96108ec09d35b6
+    0000000000000000.0000000000000000.0000000000000000.4d96108ec0a00000
     978cb2282c42a345
-VROUNDPD_256_0x4(mem)
+VROUNDPS_128_0x0(mem)
   before
     beae6982b55822e3.3598acb864bee954.83866d3ad53c10bb.5d4a63ef8424fd0d
     300b044f481c3182.cb1f9e3eb6021eea.944c26cf5f475fb4.468c1bd449e8a23b
@@ -29938,10 +29938,10 @@
     beae6982b55822e3.3598acb864bee954.83866d3ad53c10bb.5d4a63ef8424fd0d
     300b044f481c3182.cb1f9e3eb6021eea.944c26cf5f475fb4.468c1bd449e8a23b
     c870ff79039b8c4d.82eb01d7996da112.9df4428dc347dd03.e1ac065510ce36e5
-    8000000000000000.0000000000000000.8000000000000000.5d4a63ef8424fd0d
+    0000000000000000.0000000000000000.80000000d53c10bb.5d4a63ef80000000
     9cb966e0152e1f5b
 
-VROUNDPD_256_0x4(reg)
+VROUNDPS_128_0x0(reg)
   before
     753ed3c18bc0ea80.de83059860f71a1a.be830cf27fe980c7.0b198f3188545556
     6fd263ef74a396d0.14c809653aedc473.fce5ab4cbc1254ac.282fb9f0207ac7b1
@@ -29952,9 +29952,9 @@
     753ed3c18bc0ea80.de83059860f71a1a.be830cf27fe980c7.0b198f3188545556
     6fd263ef74a396d0.14c809653aedc473.fce5ab4cbc1254ac.282fb9f0207ac7b1
     e8c012d76b635df8.e0445d40abcdaaa8.cabdab69f89366d2.ad56358602c35813
-    6fd263ef74a396d0.0000000000000000.fce5ab4cbc1254ac.0000000000000000
+    0000000000000000.0000000000000000.fce5ab4c80000000.0000000000000000
     630a15eb12f3c59b
-VROUNDPD_256_0x4(mem)
+VROUNDPS_128_0x0(mem)
   before
     4c2f6f9178f11a18.c3debf80f5ad2e7e.ae15e5d0c37c1e5a.86fbbf9de3ca3394
     0d960dc098447e4d.dda5b41bc04db034.6702125da364222d.2cf9cb8bc9986687
@@ -29965,10 +29965,10 @@
     4c2f6f9178f11a18.c3debf80f5ad2e7e.ae15e5d0c37c1e5a.86fbbf9de3ca3394
     0d960dc098447e4d.dda5b41bc04db034.6702125da364222d.2cf9cb8bc9986687
     830b68638df7ac64.e6f7b81f09fb3e72.28567fa88a65548d.d29c28ed1feec66c
-    4c2f6f9178f11a18.c3debf80f5ad2e7e.8000000000000000.8000000000000000
+    0000000000000000.0000000000000000.80000000c37c0000.80000000e3ca3394
     8e01c6b98d5f01ba
 
-VROUNDSS_0x0(reg)
+VROUNDPS_128_0x1(reg)
   before
     5c5afffcdd93537c.ff4d49b568af59e9.316cde1187af6e35.2d660929dee72da3
     9a8979620d7ec2df.bcb3c73c85cb4fb0.2b26f8d8f4cd8712.2ab91e3683804db1
@@ -29979,9 +29979,9 @@
     5c5afffcdd93537c.ff4d49b568af59e9.316cde1187af6e35.2d660929dee72da3
     9a8979620d7ec2df.bcb3c73c85cb4fb0.2b26f8d8f4cd8712.2ab91e3683804db1
     a3d83057baad8b90.9e57f4e7e8770109.839c11b84f289c27.9fa564b2a06289fb
-    0000000000000000.0000000000000000.839c11b84f289c27.9fa564b280000000
+    0000000000000000.0000000000000000.00000000f4cd8712.00000000bf800000
     5c7370a3b03748f6
-VROUNDSS_0x0(mem)
+VROUNDPS_128_0x1(mem)
   before
     5dee2ef1db4142fe.8b09469ff9041b8a.41894759efb28323.bee7317340c7a9a6
     45310d5deec549f3.21839dc9c344592b.baae66f9ca57cc3c.58552f270f22196a
@@ -29992,10 +29992,10 @@
     5dee2ef1db4142fe.8b09469ff9041b8a.41894759efb28323.bee7317340c7a9a6
     45310d5deec549f3.21839dc9c344592b.baae66f9ca57cc3c.58552f270f22196a
     f00887d304d01900.f24d21327af8e1ca.c941236c5bbdc098.c0ad1da33beb7414
-    0000000000000000.0000000000000000.839c11b84f289c27.9fa564b240c00000
+    0000000000000000.0000000000000000.41880000efb28323.bf80000040c00000
     6b4fb7a721f5dfd1
 
-VROUNDSS_0x0(reg)
+VROUNDPS_128_0x1(reg)
   before
     65305a07114d663a.ffa1428eaba80315.ba05a0721deabfb1.14e168800dfa99c7
     9d2ddddfd043c93c.1bfb79aa738e9574.678a942141408c51.0986e7f767e9f5f2
@@ -30006,9 +30006,9 @@
     65305a07114d663a.ffa1428eaba80315.ba05a0721deabfb1.14e168800dfa99c7
     9d2ddddfd043c93c.1bfb79aa738e9574.678a942141408c51.0986e7f767e9f5f2
     6f903b9df9634380.6a193d81af2ae09c.c190a5bfc139939f.03c9f5f3e5c8ec10
-    0000000000000000.0000000000000000.c190a5bfc139939f.03c9f5f367e9f5f2
+    0000000000000000.0000000000000000.678a942141400000.0000000067e9f5f2
     7558ac27c3889ad4
-VROUNDSS_0x0(mem)
+VROUNDPS_128_0x1(mem)
   before
     a63c4d385a80c9d2.51ba7978fb4e6f85.11d1580cf2b590f5.e84f0e7848463ef3
     4cee6c7c87998372.1919516d0c31989c.2103a99830bc6d7f.6da05f6b86715a51
@@ -30019,10 +30019,10 @@
     a63c4d385a80c9d2.51ba7978fb4e6f85.11d1580cf2b590f5.e84f0e7848463ef3
     4cee6c7c87998372.1919516d0c31989c.2103a99830bc6d7f.6da05f6b86715a51
     433a85e065de83e1.eb10f3f7f76ecaa8.d328758f52a9f381.0fa1bdfd9070a00d
-    0000000000000000.0000000000000000.c190a5bfc139939f.03c9f5f348463f00
+    0000000000000000.0000000000000000.00000000f2b590f5.e84f0e7848463ec0
     15e690af7a17994d
 
-VROUNDSS_0x0(reg)
+VROUNDPS_128_0x1(reg)
   before
     33c2fea692d8c42a.93cf96b9a61d49db.1cf18b7bcc243349.927f736bb067e89f
     dc7f68ede69c0914.a5b18506402f85bd.3474784defb4e437.56489c28254fd013
@@ -30033,9 +30033,9 @@
     33c2fea692d8c42a.93cf96b9a61d49db.1cf18b7bcc243349.927f736bb067e89f
     dc7f68ede69c0914.a5b18506402f85bd.3474784defb4e437.56489c28254fd013
     6d68ccee13efa3b8.785c5f23fc9df91f.c6bd1f635ccf8cc8.2c3431ffed4e50af
-    0000000000000000.0000000000000000.c6bd1f635ccf8cc8.2c3431ff00000000
+    0000000000000000.0000000000000000.00000000efb4e437.56489c2800000000
     83aa91ace6be0c12
-VROUNDSS_0x0(mem)
+VROUNDPS_128_0x1(mem)
   before
     baca535a5148be30.b8f270d36674c9dd.d040c27c49bf740d.c8d5911085cfb386
     753e71d17e18fa27.292aa78ec4bdcdb5.0d114291118af3f2.ef3b527e7acdaa0a
@@ -30046,10 +30046,10 @@
     baca535a5148be30.b8f270d36674c9dd.d040c27c49bf740d.c8d5911085cfb386
     753e71d17e18fa27.292aa78ec4bdcdb5.0d114291118af3f2.ef3b527e7acdaa0a
     8ed267ff8b3a7a23.f2bfc8b46bc616f7.7cdb9d266be29a06.0198bfe1298589e2
-    0000000000000000.0000000000000000.c6bd1f635ccf8cc8.2c3431ff80000000
+    0000000000000000.0000000000000000.d040c27c49bf7408.c8d59120bf800000
     52678a362650ee3d
 
-VROUNDSS_0x1(reg)
+VROUNDPS_128_0x2(reg)
   before
     4a71e000ac7bed18.4e8acd2cb4a638d8.fc30b5f102456a69.5c8ed28143674a69
     9ba1d16f5d90c2f6.ad4534040808efe9.f5a37ae02ad4edf0.850ea31efaabcd10
@@ -30060,9 +30060,9 @@
     4a71e000ac7bed18.4e8acd2cb4a638d8.fc30b5f102456a69.5c8ed28143674a69
     9ba1d16f5d90c2f6.ad4534040808efe9.f5a37ae02ad4edf0.850ea31efaabcd10
     a3445af0d41bac84.da516342abecdaaf.b6a417eb0a52a590.50b83fecb1ad6697
-    0000000000000000.0000000000000000.b6a417eb0a52a590.50b83fecfaabcd10
+    0000000000000000.0000000000000000.f5a37ae03f800000.80000000faabcd10
     37bac5c79514ccee
-VROUNDSS_0x1(mem)
+VROUNDPS_128_0x2(mem)
   before
     0daaa7adf9921218.441321d486bfaa5e.12870ba14f6a3e08.007bce01644ca7ce
     f3f34473cffd5ed1.95d75810f9f13703.d44a7b99881d2ff4.41eadfe416e068c4
@@ -30073,10 +30073,10 @@
     0daaa7adf9921218.441321d486bfaa5e.12870ba14f6a3e08.007bce01644ca7ce
     f3f34473cffd5ed1.95d75810f9f13703.d44a7b99881d2ff4.41eadfe416e068c4
     c6621705325f6c44.0c3e150ca2c9c707.d58da3a781824544.ba16ba93f1944f83
-    0000000000000000.0000000000000000.b6a417eb0a52a590.50b83fec644ca7ce
+    0000000000000000.0000000000000000.3f8000004f6a3e08.3f800000644ca7ce
     c4d4bb028f897e0d
 
-VROUNDSS_0x1(reg)
+VROUNDPS_128_0x2(reg)
   before
     0dfed99a8be23f31.a4e24f3d113ec20a.dd2416f90898e3df.05c20cb72194cfc2
     fe15b0ad1f8b15ce.668bacbbc4d281b4.ee3b52c1fca8e70a.eb4d458f0158bb48
@@ -30087,9 +30087,9 @@
     0dfed99a8be23f31.a4e24f3d113ec20a.dd2416f90898e3df.05c20cb72194cfc2
     fe15b0ad1f8b15ce.668bacbbc4d281b4.ee3b52c1fca8e70a.eb4d458f0158bb48
     f2653da7e80f3c91.858a30b5758ef3ca.962504fb978dde44.8087262e0ffebce3
-    0000000000000000.0000000000000000.962504fb978dde44.8087262e00000000
+    0000000000000000.0000000000000000.ee3b52c1fca8e70a.eb4d458f3f800000
     273bd16e2b22eb06
-VROUNDSS_0x1(mem)
+VROUNDPS_128_0x2(mem)
   before
     f14c92e770b892e6.58df660187da7138.4ab89ace40b0dee4.16a2bf7030079898
     da3eecd655603e8b.80a2fa399538f674.a88079c5912dd042.a7ccbf8567b4d30a
@@ -30100,10 +30100,10 @@
     f14c92e770b892e6.58df660187da7138.4ab89ace40b0dee4.16a2bf7030079898
     da3eecd655603e8b.80a2fa399538f674.a88079c5912dd042.a7ccbf8567b4d30a
     bedb5a27f526aa21.1dcd330747a1bc85.d3ce6de8500364b9.3efa26bab466f13b
-    0000000000000000.0000000000000000.962504fb978dde44.8087262e00000000
+    0000000000000000.0000000000000000.4ab89ace40c00000.3f8000003f800000
     ef8d1b39010bc88c
 
-VROUNDSS_0x1(reg)
+VROUNDPS_128_0x2(reg)
   before
     c08ba05a3916fa03.e74a63a0d83eb5ce.228e861a0ac7fed8.002c896186e765a9
     07bc7c4bf855ffeb.e4b3f6a052a7cc3d.43bc9736529af272.bad3a890350d4a78
@@ -30114,9 +30114,9 @@
     c08ba05a3916fa03.e74a63a0d83eb5ce.228e861a0ac7fed8.002c896186e765a9
     07bc7c4bf855ffeb.e4b3f6a052a7cc3d.43bc9736529af272.bad3a890350d4a78
     206bab7ad95714ee.4cf78db1f85f934d.47833e99aea91792.b131cd9bc2bcc113
-    0000000000000000.0000000000000000.47833e99aea91792.b131cd9b00000000
+    0000000000000000.0000000000000000.43bd0000529af272.800000003f800000
     c63d1bf6e4e35857
-VROUNDSS_0x1(mem)
+VROUNDPS_128_0x2(mem)
   before
     9b843b1db173f059.3777f44073cd5cf7.cd45b8bb36e924ff.6c0b3ae415a9e812
     1eb151d1ccbc0ad5.ee6b05ae635a0854.9de5448b07d465f9.446488a456b20acb
@@ -30127,10 +30127,10 @@
     9b843b1db173f059.3777f44073cd5cf7.cd45b8bb36e924ff.6c0b3ae415a9e812
     1eb151d1ccbc0ad5.ee6b05ae635a0854.9de5448b07d465f9.446488a456b20acb
     2a8fdafc50c863f8.e70e5a0ae6d8b47e.4991c41d733d4743.71865b5b1d264eb9
-    0000000000000000.0000000000000000.47833e99aea91792.b131cd9b00000000
+    0000000000000000.0000000000000000.cd45b8bb3f800000.6c0b3ae43f800000
     3555815fa7812ce6
 
-VROUNDSS_0x2(reg)
+VROUNDPS_128_0x3(reg)
   before
     8699cc84a37f3e7d.4c92326c045fc1e2.0f91bc3814d9fae3.a13d90378dbadd7a
     9ad78c50931961f9.1b4ef9886d013e01.f608c2e2f6740d77.06d5d59773e60abe
@@ -30141,9 +30141,9 @@
     8699cc84a37f3e7d.4c92326c045fc1e2.0f91bc3814d9fae3.a13d90378dbadd7a
     9ad78c50931961f9.1b4ef9886d013e01.f608c2e2f6740d77.06d5d59773e60abe
     ce59be2f14dad207.e2ec22cbaf97ea77.8e5efb2adb301087.b6a8fe6a65c0c702
-    0000000000000000.0000000000000000.8e5efb2adb301087.b6a8fe6a73e60abe
+    0000000000000000.0000000000000000.f608c2e2f6740d77.0000000073e60abe
     6633ec15dab0e33e
-VROUNDSS_0x2(mem)
+VROUNDPS_128_0x3(mem)
   before
     1e82a9c597deba8c.065c64d636028d88.ccfd8c7c2fd0be16.46d8f7411d3cd4c9
     923d3b98cee9128b.c375d17610814f53.a709c4c0a58b5e97.1c93b2e8b1a30e54
@@ -30154,10 +30154,10 @@
     1e82a9c597deba8c.065c64d636028d88.ccfd8c7c2fd0be16.46d8f7411d3cd4c9
     923d3b98cee9128b.c375d17610814f53.a709c4c0a58b5e97.1c93b2e8b1a30e54
     9c2f1d799ddfa667.0f039fd9eb584e5f.ea264edc656a1d1f.155c90dcb85d270a
-    0000000000000000.0000000000000000.8e5efb2adb301087.b6a8fe6a3f800000
+    0000000000000000.0000000000000000.ccfd8c7c00000000.46d8f60000000000
     dc4ca65c8df3e9a9
 
-VROUNDSS_0x2(reg)
+VROUNDPS_128_0x3(reg)
   before
     630bd6bf93e80aea.e6ecc11572bb7664.c7ac4f99123af7ed.1cc6494d31c6e6f2
     7b0819207c5ffa06.dd4f7ca8afb828dd.eb6129cd955f18c6.c3e1b27a755b6996
@@ -30168,9 +30168,9 @@
     630bd6bf93e80aea.e6ecc11572bb7664.c7ac4f99123af7ed.1cc6494d31c6e6f2
     7b0819207c5ffa06.dd4f7ca8afb828dd.eb6129cd955f18c6.c3e1b27a755b6996
     81906be9e3e3f6aa.dc1976f9f4cf08e3.0fba54758a0b6791.423e5d2e7344fbf0
-    0000000000000000.0000000000000000.0fba54758a0b6791.423e5d2e755b6996
+    0000000000000000.0000000000000000.eb6129cd80000000.c3e18000755b6996
     3ced6ae00b423a78
-VROUNDSS_0x2(mem)
+VROUNDPS_128_0x3(mem)
   before
     6ed7c4b5dd7060fe.c8702d689d430139.5d151d86047d3d45.c78a8ecd34287dab
     e93350c2d82284eb.c16195f52737887c.99dec09a082c0bf9.129a955622b2bd53
@@ -30181,10 +30181,10 @@
     6ed7c4b5dd7060fe.c8702d689d430139.5d151d86047d3d45.c78a8ecd34287dab
     e93350c2d82284eb.c16195f52737887c.99dec09a082c0bf9.129a955622b2bd53
     89cd8af31965646a.170cfc9ba0680bf7.4b40941b8325f5ea.ce7edd02f0f31b9c
-    0000000000000000.0000000000000000.0fba54758a0b6791.423e5d2e3f800000
+    0000000000000000.0000000000000000.5d151d8600000000.c78a8e8000000000
     06f620739ecb1fc3
 
-VROUNDSS_0x2(reg)
+VROUNDPS_128_0x3(reg)
   before
     3a211410b67b3df9.a9ebfa72dccb42d1.4dc3b8e2ceb3f442.84fabc194f251030
     4d5039811e116a80.e00626979506b910.e667045bbae4d26c.c3eb086dd845b8de
@@ -30195,9 +30195,9 @@
     3a211410b67b3df9.a9ebfa72dccb42d1.4dc3b8e2ceb3f442.84fabc194f251030
     4d5039811e116a80.e00626979506b910.e667045bbae4d26c.c3eb086dd845b8de
     9dd18b30731be005.ac8ff2910402db91.4cf6409e05839c7c.e9a474de48e06d79
-    0000000000000000.0000000000000000.4cf6409e05839c7c.e9a474ded845b8de
+    0000000000000000.0000000000000000.e667045b80000000.c3eb0000d845b8de
     5a9e9ecd50b3ee25
-VROUNDSS_0x2(mem)
+VROUNDPS_128_0x3(mem)
   before
     5d7653211f04318d.60f5a7fc52b999b8.731b52b0736b100c.f204762e2738e305
     b746194346007192.8c3068f11465553e.26b6e0aeaaf09a5e.ea1b68533567d8d4
@@ -30208,10 +30208,10 @@
     5d7653211f04318d.60f5a7fc52b999b8.731b52b0736b100c.f204762e2738e305
     b746194346007192.8c3068f11465553e.26b6e0aeaaf09a5e.ea1b68533567d8d4
     44da6a20e0b26a60.63ec47d532b44a72.deeffc300765bfa2.204d38f21233a83c
-    0000000000000000.0000000000000000.4cf6409e05839c7c.e9a474de3f800000
+    0000000000000000.0000000000000000.731b52b0736b100c.f204762e00000000
     b632684ba7d3cd81
 
-VROUNDSS_0x3(reg)
+VROUNDPS_128_0x4(reg)
   before
     ce7cbedd97bf98b7.677ea2b7de697606.86174d19f56dd192.cc6acf70a151c9b1
     9412e498c6793034.b526804a7b860135.8a1d6b52d1eedbd6.bb447e0616df26d5
@@ -30222,9 +30222,9 @@
     ce7cbedd97bf98b7.677ea2b7de697606.86174d19f56dd192.cc6acf70a151c9b1
     9412e498c6793034.b526804a7b860135.8a1d6b52d1eedbd6.bb447e0616df26d5
     643ed5e8cf8ccfa6.a6c1db46fb8935dd.a9d4972b79420f78.1fecaad0208e0e9b
-    0000000000000000.0000000000000000.a9d4972b79420f78.1fecaad000000000
+    0000000000000000.0000000000000000.80000000d1eedbd6.8000000000000000
     b6d66fb1667c6ec0
-VROUNDSS_0x3(mem)
+VROUNDPS_128_0x4(mem)
   before
     a0affe9fd9d45e76.928b08f8e0ed1513.e004f52e15738647.ac8606689f96e484
     7087fc72527cc87f.a844438f21543367.e243acf1e7711c61.471842a655acfd47
@@ -30235,10 +30235,10 @@
     a0affe9fd9d45e76.928b08f8e0ed1513.e004f52e15738647.ac8606689f96e484
     7087fc72527cc87f.a844438f21543367.e243acf1e7711c61.471842a655acfd47
     0128e415ec806a06.38c4396cac44495e.f6a5cfcf0d864aa4.6f8a7a3247c62f17
-    0000000000000000.0000000000000000.a9d4972b79420f78.1fecaad080000000
+    0000000000000000.0000000000000000.e004f52e00000000.8000000080000000
     d142d4e95134d290
 
-VROUNDSS_0x3(reg)
+VROUNDPS_128_0x4(reg)
   before
     c420eceaa1a0ba91.d5f8637bf4ce4140.354846a411f14de8.c9074a87c3226253
     b40ef1eb9d40ac50.d0bff1169b30ee4c.5be455d824c5b2d2.3e9d9a3b8bc2c217
@@ -30249,9 +30249,9 @@
     c420eceaa1a0ba91.d5f8637bf4ce4140.354846a411f14de8.c9074a87c3226253
     b40ef1eb9d40ac50.d0bff1169b30ee4c.5be455d824c5b2d2.3e9d9a3b8bc2c217
     fb59e057e29ee378.fd805a31d31dc285.6a771001f152ff10.378747b817a8acb4
-    0000000000000000.0000000000000000.6a771001f152ff10.378747b880000000
+    0000000000000000.0000000000000000.5be455d800000000.0000000080000000
     2187a4c2e8770927
-VROUNDSS_0x3(mem)
+VROUNDPS_128_0x4(mem)
   before
     ca354d266679f456.01356921b4ca13b6.591eaa9767cecf34.b8b277e22aca4037
     6767420418f0590d.785ffc567aaf8323.40958abbfba98002.adf11b73cecbac78
@@ -30262,10 +30262,10 @@
     ca354d266679f456.01356921b4ca13b6.591eaa9767cecf34.b8b277e22aca4037
     6767420418f0590d.785ffc567aaf8323.40958abbfba98002.adf11b73cecbac78
     d2e8ff4819eaf279.b71567a6f98329a9.c935340e914047ae.fd585ba89db6f0bc
-    0000000000000000.0000000000000000.6a771001f152ff10.378747b800000000
+    0000000000000000.0000000000000000.591eaa9767cecf34.8000000000000000
     1ac99bb22a78efff
 
-VROUNDSS_0x3(reg)
+VROUNDPS_128_0x4(reg)
   before
     9f6c955f20672256.860ac2b27994b21f.fd58ba488f2907b3.2d22d6f531d30952
     ef661960b16f1c61.8643c0b0115d51b0.bc7d9a72df13b68e.c008c66173e77da2
@@ -30276,9 +30276,9 @@
     9f6c955f20672256.860ac2b27994b21f.fd58ba488f2907b3.2d22d6f531d30952
     ef661960b16f1c61.8643c0b0115d51b0.bc7d9a72df13b68e.c008c66173e77da2
     64022523781d1bcb.c5fc77c568d815a7.b35f4267581d8b33.644771ad26e8f780
-    0000000000000000.0000000000000000.b35f4267581d8b33.644771ad73e77da2
+    0000000000000000.0000000000000000.80000000df13b68e.c000000073e77da2
     5003e49552deef99
-VROUNDSS_0x3(mem)
+VROUNDPS_128_0x4(mem)
   before
     4f18a60902ebe52b.3154c29c1998136f.711dfce0c416fb71.b989df6232be978a
     cfb7110d9415d2fc.40a24b2a2c7e8500.951ec2be01f0959d.7f69cb40cc6d4594
@@ -30289,10 +30289,10 @@
     4f18a60902ebe52b.3154c29c1998136f.711dfce0c416fb71.b989df6232be978a
     cfb7110d9415d2fc.40a24b2a2c7e8500.951ec2be01f0959d.7f69cb40cc6d4594
     acaca38e23687237.e5c24b29e539eaa0.68ce32636ead44dd.ee367099fe6c0917
-    0000000000000000.0000000000000000.b35f4267581d8b33.644771ad00000000
+    0000000000000000.0000000000000000.711dfce0c4170000.8000000000000000
     34c7d76c9c88c23b
 
-VROUNDSS_0x4(reg)
+VROUNDPS_256_0x0(reg)
   before
     c22390bf3fbc2f33.edc629b3a9b5b99e.62aaa22bba5f80c0.8b6ef8af46fdcf4d
     699bf23ceb71a255.0985152fd8c8d921.f10bf0050fe22898.93f5482ee9a824d3
@@ -30303,9 +30303,9 @@
     c22390bf3fbc2f33.edc629b3a9b5b99e.62aaa22bba5f80c0.8b6ef8af46fdcf4d
     699bf23ceb71a255.0985152fd8c8d921.f10bf0050fe22898.93f5482ee9a824d3
     847dfa513c30574c.f2c918d875349bbf.866ea601796ab42f.ba5d30232b667e1e
-    0000000000000000.0000000000000000.866ea601796ab42f.ba5d3023e9a824d3
+    699bf23ceb71a255.00000000d8c8d921.f10bf00500000000.80000000e9a824d3
     d5fcb920ff492fb2
-VROUNDSS_0x4(mem)
+VROUNDPS_256_0x0(mem)
   before
     81cb51ffc886ff52.85aae8ef3b01756b.9b12505e6744f8fa.326d360b03bb684c
     bcaa7205a105c468.238ec751212b57eb.13b07d13f5010bf0.01a109f2599c0729
@@ -30316,10 +30316,10 @@
     81cb51ffc886ff52.85aae8ef3b01756b.9b12505e6744f8fa.326d360b03bb684c
     bcaa7205a105c468.238ec751212b57eb.13b07d13f5010bf0.01a109f2599c0729
     6265971ca4d3391e.a60a3cfa1b906af1.c803b0a45f46b0b0.460833aa36b17a77
-    0000000000000000.0000000000000000.866ea601796ab42f.ba5d302300000000
+    80000000c886ff60.8000000000000000.800000006744f8fa.0000000000000000
     a29e7d3df2adcc10
 
-VROUNDSS_0x4(reg)
+VROUNDPS_256_0x0(reg)
   before
     716595f00bab22b4.5f9ede329f89261b.c7fed4d1bd3c163d.59fb1a0a3d99a340
     2690f425190e3c78.6db4f708cd8a15bb.1d0df0d89d9b27dc.ec3848b7e8bf6968
@@ -30330,9 +30330,9 @@
     716595f00bab22b4.5f9ede329f89261b.c7fed4d1bd3c163d.59fb1a0a3d99a340
     2690f425190e3c78.6db4f708cd8a15bb.1d0df0d89d9b27dc.ec3848b7e8bf6968
     1d699746ba625508.57d605a09709a5ac.c7e691d5026559b0.2d5b6cf1e19db10b
-    0000000000000000.0000000000000000.c7e691d5026559b0.2d5b6cf1e8bf6968
+    0000000000000000.6db4f708cd8a15bb.0000000080000000.ec3848b7e8bf6968
     268287b82bb3ba6f
-VROUNDSS_0x4(mem)
+VROUNDPS_256_0x0(mem)
   before
     951e761eb402f28a.40579500240f7839.2c6eeec66db2972e.88205465c86c13a9
     22d04cc0fa3a9dcf.2505e9712480f933.ce7cc02db1f47218.561b6dd062c01225
@@ -30343,10 +30343,10 @@
     951e761eb402f28a.40579500240f7839.2c6eeec66db2972e.88205465c86c13a9
     22d04cc0fa3a9dcf.2505e9712480f933.ce7cc02db1f47218.561b6dd062c01225
     a764838a1a66776a.bc91707f271269a9.bcc5770501e5dd03.e90efbe1f0b02388
-    0000000000000000.0000000000000000.c7e691d5026559b0.2d5b6cf1c86c13c0
+    8000000080000000.4040000000000000.000000006db2972e.80000000c86c13c0
     c91067aa5a916bae
 
-VROUNDSS_0x4(reg)
+VROUNDPS_256_0x0(reg)
   before
     cfb63c396d9b19c9.0e62084656cba755.6f760822a5c90ab7.e83c81bc3300558a
     0984771fe570c97a.a6634e10ab1c75fc.4467118f5707b1a8.de01cd734d44da7e
@@ -30357,9 +30357,9 @@
     cfb63c396d9b19c9.0e62084656cba755.6f760822a5c90ab7.e83c81bc3300558a
     0984771fe570c97a.a6634e10ab1c75fc.4467118f5707b1a8.de01cd734d44da7e
     d3c813c85e9cb76c.a876e7b2489262aa.3b673d497c9639c4.9032ed4be366e024
-    0000000000000000.0000000000000000.3b673d497c9639c4.9032ed4b4d44da7e
+    00000000e570c97a.8000000080000000.446700005707b1a8.de01cd734d44da7e
     94079913f0745e30
-VROUNDSS_0x4(mem)
+VROUNDPS_256_0x0(mem)
   before
     9e431ddaa0794eee.87de6014c02b3cc6.5503fe2fd01a87ca.fec3ef548dd9d72f
     d41c65733c8cae0e.2948078fe2a64b85.ba1375e2f3443893.82b76d7eb1a465d6
@@ -30370,10 +30370,10 @@
     9e431ddaa0794eee.87de6014c02b3cc6.5503fe2fd01a87ca.fec3ef548dd9d72f
     d41c65733c8cae0e.2948078fe2a64b85.ba1375e2f3443893.82b76d7eb1a465d6
     105ceecbdfba3cba.cb57007c75a78736.f7662e1ccec3f814.99eafea4b8f1c358
-    0000000000000000.0000000000000000.3b673d497c9639c4.9032ed4b80000000
+    8000000080000000.80000000c0400000.5503fe2fd01a87ca.fec3ef5480000000
     eb3d4a99dd3edfa0
 
-VROUNDSS_0x5(reg)
+VROUNDPS_256_0x1(reg)
   before
     e0f5fc3e335715bd.0d44b063ab94cd68.7f94d6615b717a1c.6d0157da22ee93e8
     d61bb291db210a66.8783e27d0c5849c2.4959ab30e751a8a9.5de1bf35d2b1e794
@@ -30384,9 +30384,9 @@
     e0f5fc3e335715bd.0d44b063ab94cd68.7f94d6615b717a1c.6d0157da22ee93e8
     d61bb291db210a66.8783e27d0c5849c2.4959ab30e751a8a9.5de1bf35d2b1e794
     2bfd67fd7228fb47.775b4304e567e158.83f4c12153e8f3d9.963359c8acfa39a7
-    0000000000000000.0000000000000000.83f4c12153e8f3d9.963359c8d2b1e794
+    d61bb291db210a66.bf80000000000000.4959ab30e751a8a9.5de1bf35d2b1e794
     535d14464b47cab0
-VROUNDSS_0x5(mem)
+VROUNDPS_256_0x1(mem)
   before
     90cd2c0a496481fe.5d20bfd1dc1fc05e.2c01870e6d9458eb.b6d7a11f3d6cd3cc
     85de67b5e1362663.f3fa5a10e6260ced.a968626854caae3f.68b86202f371e0e8
@@ -30397,10 +30397,10 @@
     90cd2c0a496481fe.5d20bfd1dc1fc05e.2c01870e6d9458eb.b6d7a11f3d6cd3cc
     85de67b5e1362663.f3fa5a10e6260ced.a968626854caae3f.68b86202f371e0e8
     0f5d40352ec8760b.58bee4184f9b4364.0d975ce0237a1180.fa9e55b8f95efa55
-    0000000000000000.0000000000000000.83f4c12153e8f3d9.963359c800000000
+    bf800000496481f0.5d20bfd1dc1fc05e.000000006d9458eb.bf80000000000000
     2da8be4e671d48d5
 
-VROUNDSS_0x5(reg)
+VROUNDPS_256_0x1(reg)
   before
     87642d060708f43f.52d6bd60585d07d2.fa38b534acfc66b9.fa7da2dae779ee77
     3056bd40670a9dab.c36659e46d77bf49.f086f520d901c9ee.3bcbe53414e1df86
@@ -30411,9 +30411,9 @@
     87642d060708f43f.52d6bd60585d07d2.fa38b534acfc66b9.fa7da2dae779ee77
     3056bd40670a9dab.c36659e46d77bf49.f086f520d901c9ee.3bcbe53414e1df86
     86c8696a23af80c5.399583eca88312b3.24ee1485d4a308bc.d311385c98f2cd31
-    0000000000000000.0000000000000000.24ee1485d4a308bc.d311385c00000000
+    00000000670a9dab.c36700006d77bf49.f086f520d901c9ee.0000000000000000
     78b500c71845900d
-VROUNDSS_0x5(mem)
+VROUNDPS_256_0x1(mem)
   before
     3dab6ce24b9ddc96.a55e0b3b2213e3b1.a4fc7238fe9a780f.b63edf69a5ef08cd
     c9c9d87b45d0156c.271bf8ba9cebdbdb.50cc2e5451bf0358.ccbf83c1b3b14269
@@ -30424,10 +30424,10 @@
     3dab6ce24b9ddc96.a55e0b3b2213e3b1.a4fc7238fe9a780f.b63edf69a5ef08cd
     c9c9d87b45d0156c.271bf8ba9cebdbdb.50cc2e5451bf0358.ccbf83c1b3b14269
     f8dac17e23eaf7ba.c488f1d8e295fd63.726a69a43a031945.908af743ff41474c
-    0000000000000000.0000000000000000.24ee1485d4a308bc.d311385c80000000
+    000000004b9ddc96.bf80000000000000.bf800000fe9a780f.bf800000bf800000
     92323c70c4f8a69a
 
-VROUNDSS_0x5(reg)
+VROUNDPS_256_0x1(reg)
   before
     88a605f57437765d.ae09f672f9ffa470.c3a5fda24494ae3b.85404a913c1ed5b5
     9b958e52d3740317.eebe3b3b2914e830.dced06259801b5e4.2d0fe7068d0bf391
@@ -30438,9 +30438,9 @@
     88a605f57437765d.ae09f672f9ffa470.c3a5fda24494ae3b.85404a913c1ed5b5
     9b958e52d3740317.eebe3b3b2914e830.dced06259801b5e4.2d0fe7068d0bf391
     294ad2f57c3a8774.4196ed1ead3ec418.81160df82871d69a.bbddf35ee3498bc0
-    0000000000000000.0000000000000000.81160df82871d69a.bbddf35e80000000
+    bf800000d3740317.eebe3b3b00000000.dced0625bf800000.00000000bf800000
     f5a1456c11e71dc5
-VROUNDSS_0x5(mem)
+VROUNDPS_256_0x1(mem)
   before
     5a3083f9205e8ef4.233a7bb91d9266ca.8fe484e21f073813.e03a023a6e8b55df
     14ed201aa4556925.460dd8b34e3d391a.42f0629c45bc467d.51cde8825c4d2ac6
@@ -30451,10 +30451,10 @@
     5a3083f9205e8ef4.233a7bb91d9266ca.8fe484e21f073813.e03a023a6e8b55df
     14ed201aa4556925.460dd8b34e3d391a.42f0629c45bc467d.51cde8825c4d2ac6
     fea497bbbad96b85.54d6e1a239a0f4be.79509c202fb9dec0.be71bcc9f6430a6b
-    0000000000000000.0000000000000000.81160df82871d69a.bbddf35e6e8b55df
+    5a3083f900000000.0000000000000000.bf80000000000000.e03a023a6e8b55df
     fd1c1a04a0f7d69d
 
-VROUNDSD_0x0(reg)
+VROUNDPS_256_0x2(reg)
   before
     86bb9ed0e7cf3b82.d62e032d0ab5d480.9d7ce40faec311b1.df3c1535bdb49780
     7b9afe4c4b099ad5.7c9bf1d77c26b373.91f2d665709beb58.c6604c9f99cb3054
@@ -30465,9 +30465,9 @@
     86bb9ed0e7cf3b82.d62e032d0ab5d480.9d7ce40faec311b1.df3c1535bdb49780
     7b9afe4c4b099ad5.7c9bf1d77c26b373.91f2d665709beb58.c6604c9f99cb3054
     380738e268342e42.c231a8b0f053a845.de8e64615d5c9d02.a108cf83a85843b2
-    0000000000000000.0000000000000000.de8e64615d5c9d02.c6604c9f99cb3054
+    7b9afe4c4b099ad5.7c9bf1d77c26b373.80000000709beb58.c6604c0080000000
     9f12aa69d206c1b6
-VROUNDSD_0x0(mem)
+VROUNDPS_256_0x2(mem)
   before
     7a0dfa43243fa6b5.7ab627103a86e718.a20a66a34c12c635.f76c41f726ca7811
     b8bc8647191ef3ed.b791d48028c685d9.f3e665956cbd68ab.7b4588693a8f19ce
@@ -30478,10 +30478,10 @@
     7a0dfa43243fa6b5.7ab627103a86e718.a20a66a34c12c635.f76c41f726ca7811
     b8bc8647191ef3ed.b791d48028c685d9.f3e665956cbd68ab.7b4588693a8f19ce
     35ebca62ceaf6589.2b294aba3e254864.551b1d67fe5310b0.c8745a31e96d823f
-    0000000000000000.0000000000000000.de8e64615d5c9d02.f76c41f726ca7811
+    7a0dfa433f800000.7ab627103f800000.800000004c12c635.f76c41f73f800000
     3109917085a69beb
 
-VROUNDSD_0x0(reg)
+VROUNDPS_256_0x2(reg)
   before
     0405edbfab18c27f.5df86b89e618a79f.2dbf834155722f87.bdc3ad5be5756414
     1288c413dcd4a276.bf6fc06e8108ef71.72553d658c78cc77.7ace7c55741988cc
@@ -30492,9 +30492,9 @@
     0405edbfab18c27f.5df86b89e618a79f.2dbf834155722f87.bdc3ad5be5756414
     1288c413dcd4a276.bf6fc06e8108ef71.72553d658c78cc77.7ace7c55741988cc
     b5de13d8b365757c.d095bd184cdb4c58.5fd8b1045dcd7de0.b863f6dfe3d9a3c3
-    0000000000000000.0000000000000000.5fd8b1045dcd7de0.7ace7c55741988cc
+    3f800000dcd4a276.8000000080000000.72553d6580000000.7ace7c55741988cc
     275ad854d6ddad1d
-VROUNDSD_0x0(mem)
+VROUNDPS_256_0x2(mem)
   before
     10543817923a14d7.2d330566c437e768.6f21a070e0573313.a0d5b364379413d0
     ea093219a0e46280.bac9a1063690fea6.b51f7ef5e119363f.ade63afc781f6eae
@@ -30505,10 +30505,10 @@
     10543817923a14d7.2d330566c437e768.6f21a070e0573313.a0d5b364379413d0
     ea093219a0e46280.bac9a1063690fea6.b51f7ef5e119363f.ade63afc781f6eae
     914343481be55244.4e63a5c8bfeef8a3.1afcf4f082ed3e30.d2156ac0c229cfb5
-    0000000000000000.0000000000000000.5fd8b1045dcd7de0.8000000000000000
+    3f80000080000000.3f800000c437c000.6f21a070e0573313.800000003f800000
     d3f8b778e0ec91f2
 
-VROUNDSD_0x0(reg)
+VROUNDPS_256_0x2(reg)
   before
     6745cb45ecbc6b7e.b67896dac9210bcc.f6ced15e84eb878b.b18798f911fb4b10
     84df78ed703c3be4.ec0cd21534744ce7.c338f20bf9a195cf.9bccbfdf384ec957
@@ -30519,9 +30519,9 @@
     6745cb45ecbc6b7e.b67896dac9210bcc.f6ced15e84eb878b.b18798f911fb4b10
     84df78ed703c3be4.ec0cd21534744ce7.c338f20bf9a195cf.9bccbfdf384ec957
     8412badc08f73cd0.5f55132c7d4f1fcd.06d56a89f38d7683.14216eea6fe43c12
-    0000000000000000.0000000000000000.06d56a89f38d7683.8000000000000000
+    80000000703c3be4.ec0cd2153f800000.c3380000f9a195cf.800000003f800000
     232a54237a05ef97
-VROUNDSD_0x0(mem)
+VROUNDPS_256_0x2(mem)
   before
     7177842987aaa7b8.a172ee3fe64fc4e8.6c39989e17ce6ea9.5ed751a8ec35a3e8
     be032b0514c045fe.7637d88b6404c36d.be6cd5d2a08a62f7.2bd4b721220867f2
@@ -30532,10 +30532,10 @@
     7177842987aaa7b8.a172ee3fe64fc4e8.6c39989e17ce6ea9.5ed751a8ec35a3e8
     be032b0514c045fe.7637d88b6404c36d.be6cd5d2a08a62f7.2bd4b721220867f2
     e59bc7a33b558394.9ec548cf6724e327.bc85079176fed8c0.de34641b4f42ef1c
-    0000000000000000.0000000000000000.06d56a89f38d7683.5ed751a8ec35a3e8
+    7177842980000000.80000000e64fc4e8.6c39989e3f800000.5ed751a8ec35a3e8
     654d8443fc143a7e
 
-VROUNDSD_0x1(reg)
+VROUNDPS_256_0x3(reg)
   before
     f29eee49b4c5750f.361fccd5cd2ad162.5b6ca6eb69d779ec.31983e647c403d71
     d5819080d20c646f.16a32c4270835af3.a71c8d9ba081674e.5e2a3b50e325a3b1
@@ -30546,9 +30546,9 @@
     f29eee49b4c5750f.361fccd5cd2ad162.5b6ca6eb69d779ec.31983e647c403d71
     d5819080d20c646f.16a32c4270835af3.a71c8d9ba081674e.5e2a3b50e325a3b1
     6a446653f373434b.426271201d897383.b7c6e9f3cdc76697.a9d21e7807f37c1c
-    0000000000000000.0000000000000000.b7c6e9f3cdc76697.5e2a3b50e325a3b1
+    d5819080d20c646f.0000000070835af3.8000000080000000.5e2a3b50e325a3b1
     0594872cf9787722
-VROUNDSD_0x1(mem)
+VROUNDPS_256_0x3(mem)
   before
     cf460590fe461014.19959a82acd7bf25.eac597e30bd14756.9433f14872548988
     253d59e0302d0ce2.ecbcf1b57debd57c.1f0071a0832a7af1.188f951d24b4268a
@@ -30559,10 +30559,10 @@
     cf460590fe461014.19959a82acd7bf25.eac597e30bd14756.9433f14872548988
     253d59e0302d0ce2.ecbcf1b57debd57c.1f0071a0832a7af1.188f951d24b4268a
     e5460008ac3927b6.e0f16b35c050cafe.0ea71e7f77622e3c.d0149d493adfc421
-    0000000000000000.0000000000000000.b7c6e9f3cdc76697.bff0000000000000
+    cf460590fe461014.0000000080000000.eac597e300000000.8000000072548988
     4cc8cf5604c7f5bf
 
-VROUNDSD_0x1(reg)
+VROUNDPS_256_0x3(reg)
   before
     c890f010ef9c001f.0ebf3391f0eda821.9fbab9cd0d3f4435.8e68e652409c0894
     e8b066d0af6cfdc4.31c5b8caf0ad8711.22e484bc4fe04142.d61bf91f4eb7a6f9
@@ -30573,9 +30573,9 @@
     c890f010ef9c001f.0ebf3391f0eda821.9fbab9cd0d3f4435.8e68e652409c0894
     e8b066d0af6cfdc4.31c5b8caf0ad8711.22e484bc4fe04142.d61bf91f4eb7a6f9
     08752d04e0c4285a.2c0e7f8baac275b7.364d63a974030d2a.4a69cfbe48e0b4be
-    0000000000000000.0000000000000000.364d63a974030d2a.d61bf91f4eb7a6f9
+    e8b066d080000000.00000000f0ad8711.000000004fe04142.d61bf91f4eb7a6f9
     2109b9236d8e141b
-VROUNDSD_0x1(mem)
+VROUNDPS_256_0x3(mem)
   before
     3ef3c4c0d12add0a.b81d9f74023af60d.1e95c454ba196cd7.850c4b29d4fc053e
     f5a884e09004060a.009941892c701280.cc6b3a354873eea9.77f94c9549eaa8c1
@@ -30586,10 +30586,10 @@
     3ef3c4c0d12add0a.b81d9f74023af60d.1e95c454ba196cd7.850c4b29d4fc053e
     f5a884e09004060a.009941892c701280.cc6b3a354873eea9.77f94c9549eaa8c1
     23f6736ec7294d46.b7e925c1365d4c96.c3b3e24eff516ee2.6c564fae0f8a0bd0
-    0000000000000000.0000000000000000.364d63a974030d2a.bff0000000000000
+    00000000d12add0a.8000000000000000.0000000080000000.80000000d4fc053e
     ca8b5197040e0141
 
-VROUNDSD_0x1(reg)
+VROUNDPS_256_0x3(reg)
   before
     edfc463f6a0a0bfa.5488d3830b822025.e739a14a5c8d0855.fdc9b8d95bca5b37
     810c2f4592e8c5ef.0f653be350ce241f.17d03074b0e80257.f72fdf22377d40ab
@@ -30600,9 +30600,9 @@
     edfc463f6a0a0bfa.5488d3830b822025.e739a14a5c8d0855.fdc9b8d95bca5b37
     810c2f4592e8c5ef.0f653be350ce241f.17d03074b0e80257.f72fdf22377d40ab
     e307071319336bcc.b10ac4617d943506.276bf170542b0baa.aa362853ace51336
-    0000000000000000.0000000000000000.276bf170542b0baa.f72fdf22377d40ab
+    8000000080000000.0000000050ce241f.0000000080000000.f72fdf2200000000
     ab5b101ed3017640
-VROUNDSD_0x1(mem)
+VROUNDPS_256_0x3(mem)
   before
     b110a890bdce7e17.81ed74bbb2406aed.1bdc2667fdc06e4a.56e2f792fe9635f6
     e096529ab17f64b4.7670026dfd1b3a88.9aa0f7c7883d0dfe.2d54338f3bd6ce46
@@ -30613,10 +30613,10 @@
     b110a890bdce7e17.81ed74bbb2406aed.1bdc2667fdc06e4a.56e2f792fe9635f6
     e096529ab17f64b4.7670026dfd1b3a88.9aa0f7c7883d0dfe.2d54338f3bd6ce46
     14bb8a28c920e544.a80e6f971593e7bb.6f5cd8f66b65a94f.55fb9110392e6698
-    0000000000000000.0000000000000000.276bf170542b0baa.56e2f792fe9635f6
+    8000000080000000.8000000080000000.00000000fdc06e4a.56e2f792fe9635f6
     0418a04be7547df1
 
-VROUNDSD_0x2(reg)
+VROUNDPS_256_0x4(reg)
   before
     442649ddce3a764f.fb0e9480db64a7ec.36cbd608228bc499.90ecbc6da6e3c877
     439804a2e6675c60.65d45f220d1e605c.4a82c9264f236b9b.9358b68d3752c2a6
@@ -30627,9 +30627,9 @@
     442649ddce3a764f.fb0e9480db64a7ec.36cbd608228bc499.90ecbc6da6e3c877
     439804a2e6675c60.65d45f220d1e605c.4a82c9264f236b9b.9358b68d3752c2a6
     5fbccc06cb686cce.4568a8f8d3f9a46e.0c838a6db989dfe4.5decb02c8f9aa922
-    0000000000000000.0000000000000000.0c838a6db989dfe4.8000000000000000
+    43980000e6675c60.65d45f2200000000.4a82c9264f236b9b.8000000000000000
     b6ba959407ec2daf
-VROUNDSD_0x2(mem)
+VROUNDPS_256_0x4(mem)
   before
     fc8e78355e0c4218.5945735c6913f972.d42aa4f1913fbc2b.09966b27baeb19fe
     7ab94b04ec36347e.f1434a255bd6ee01.3bef50ecc0c3082d.fd40837188015826
@@ -30640,10 +30640,10 @@
     fc8e78355e0c4218.5945735c6913f972.d42aa4f1913fbc2b.09966b27baeb19fe
     7ab94b04ec36347e.f1434a255bd6ee01.3bef50ecc0c3082d.fd40837188015826
     0b078aedce77be0d.14221f3e899cfc9d.86b36acaf597ce82.0f65599505145246
-    0000000000000000.0000000000000000.0c838a6db989dfe4.3ff0000000000000
+    fc8e78355e0c4218.5945735c6913f972.d42aa4f180000000.0000000080000000
     fd4f341779616a1d
 
-VROUNDSD_0x2(reg)
+VROUNDPS_256_0x4(reg)
   before
     90ad304ea9b4ff2c.d5413ebefc6b8e53.6eb2b00c0b6257ae.3d63d8e4de60bcd3
     b2b5dc0ef73441e2.c7c3aa7d80374a64.5efb649a977a1b7b.5fe824f7cb6d5b27
@@ -30654,9 +30654,9 @@
     90ad304ea9b4ff2c.d5413ebefc6b8e53.6eb2b00c0b6257ae.3d63d8e4de60bcd3
     b2b5dc0ef73441e2.c7c3aa7d80374a64.5efb649a977a1b7b.5fe824f7cb6d5b27
     beb432c3006e6aec.3b997207c749904d.49550627cfc5e906.d79bcf9e2dfa647e
-    0000000000000000.0000000000000000.49550627cfc5e906.5fe824f7cb6d5b27
+    80000000f73441e2.c7c3aa8080000000.5efb649a80000000.5fe824f7cb6d5b27
     35ba2f58c3c6a7e4
-VROUNDSD_0x2(mem)
+VROUNDPS_256_0x4(mem)
   before
     d3bedc442d1d594b.03c7d1bcb23d63ab.1d7107281170a558.836c01eeb5269104
     3721d7737e236665.f57212d892ebabb7.430bcc984b9decd3.8ac052009a54e4cf
@@ -30667,10 +30667,10 @@
     d3bedc442d1d594b.03c7d1bcb23d63ab.1d7107281170a558.836c01eeb5269104
     3721d7737e236665.f57212d892ebabb7.430bcc984b9decd3.8ac052009a54e4cf
     3bad9dd2cfe6895d.4045ed999d82cbc8.5b29dd82b941add6.fd5680c19ce43008
-    0000000000000000.0000000000000000.49550627cfc5e906.8000000000000000
+    d3bedc4400000000.0000000080000000.0000000000000000.8000000080000000
     977465016660a673
 
-VROUNDSD_0x2(reg)
+VROUNDPS_256_0x4(reg)
   before
     76941358656348fd.977277d2e7d20399.558e66bba29c82a3.d51fd4749e1b8726
     31248e0df1f9d3a4.a6448449e612d335.d69dfbf4d43691c6.ee90b2544e691acc
@@ -30681,9 +30681,9 @@
     76941358656348fd.977277d2e7d20399.558e66bba29c82a3.d51fd4749e1b8726
     31248e0df1f9d3a4.a6448449e612d335.d69dfbf4d43691c6.ee90b2544e691acc
     2472d38ea5ae8415.c66f4aa1553ea95f.22031b82a0eb679d.6ab5cc5fa15e15a9
-    0000000000000000.0000000000000000.22031b82a0eb679d.ee90b2544e691acc
+    00000000f1f9d3a4.80000000e612d335.d69dfbf4d43691c6.ee90b2544e691acc
     fc4ba4a1a36b35be
-VROUNDSD_0x2(mem)
+VROUNDPS_256_0x4(mem)
   before
     c9535bb2889ad34e.2274a7a1f8a74804.aa03f6a1f98c5910.8703ee4c79cf5c15
     69403e9d82a1c9c6.e5c0300bcd03d2da.2504d32165c6abee.58359861bd18f20e
@@ -30694,10 +30694,10 @@
     c9535bb2889ad34e.2274a7a1f8a74804.aa03f6a1f98c5910.8703ee4c79cf5c15
     69403e9d82a1c9c6.e5c0300bcd03d2da.2504d32165c6abee.58359861bd18f20e
     b8dcc94eaa89d452.4ffa71f03cad7229.218f5b32b21cf40b.63efbd7b0ca9406b
-    0000000000000000.0000000000000000.22031b82a0eb679d.8000000000000000
+    c9535bb080000000.00000000f8a74804.80000000f98c5910.8000000079cf5c15
     98256a6f38d9f200
 
-VROUNDSD_0x3(reg)
+VROUNDPD_128_0x0(reg)
   before
     793be8204e8ecf90.d454c8b1fa311759.8d620fdc5121e3e5.0c7258b2624d5ab0
     0408d387debd5334.58c8343c5909c82c.182a64ba31022ca9.b362c6fbfc40ef91
@@ -30708,9 +30708,9 @@
     793be8204e8ecf90.d454c8b1fa311759.8d620fdc5121e3e5.0c7258b2624d5ab0
     0408d387debd5334.58c8343c5909c82c.182a64ba31022ca9.b362c6fbfc40ef91
     95d7240e85f2bb97.fb1b373e58f37ec3.ba0e63c419627b96.4b0dcf84e77f6b60
-    0000000000000000.0000000000000000.ba0e63c419627b96.8000000000000000
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
     bebe9e052212067a
-VROUNDSD_0x3(mem)
+VROUNDPD_128_0x0(mem)
   before
     515e5dd6aa7f9e1d.39aeec31869b274b.0e92f852a42ee7ee.b75e4b0873d11a9f
     45e8a697f3670d5f.044e5ba41927a2f5.354dad3e299713db.ca612d1b1cf7e211
@@ -30721,10 +30721,10 @@
     515e5dd6aa7f9e1d.39aeec31869b274b.0e92f852a42ee7ee.b75e4b0873d11a9f
     45e8a697f3670d5f.044e5ba41927a2f5.354dad3e299713db.ca612d1b1cf7e211
     7627f6341ad80e6b.452122e731e9f10f.ec18e94fbd42343d.64b1a8093ecda05d
-    0000000000000000.0000000000000000.ba0e63c419627b96.8000000000000000
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
     a1675a265cb6ec32
 
-VROUNDSD_0x3(reg)
+VROUNDPD_128_0x0(reg)
   before
     fc65892d8fe1f313.fff797b27083b993.998fa493663cfb40.770dec958590430d
     4ee141bfabece07e.0f20e16cd7d5db07.64c358d2bae62db0.03d0a9a0f04aa9d4
@@ -30735,9 +30735,9 @@
     fc65892d8fe1f313.fff797b27083b993.998fa493663cfb40.770dec958590430d
     4ee141bfabece07e.0f20e16cd7d5db07.64c358d2bae62db0.03d0a9a0f04aa9d4
     f5257e484b63ee1e.cb2f22b18ce07ff5.1559539205f52340.8ed2df82da77f5c0
-    0000000000000000.0000000000000000.1559539205f52340.0000000000000000
+    0000000000000000.0000000000000000.64c358d2bae62db0.0000000000000000
     10c6a3789d572ab5
-VROUNDSD_0x3(mem)
+VROUNDPD_128_0x0(mem)
   before
     c0502965ae238b17.ad3778f08ac160ae.bc2e75904d4d40f2.99de0f46ee744a6e
     de4a18d7ae91c24d.789e2de75fc23bf7.a7b6800292c9d459.2464c812c4fbf365
@@ -30748,10 +30748,10 @@
     c0502965ae238b17.ad3778f08ac160ae.bc2e75904d4d40f2.99de0f46ee744a6e
     de4a18d7ae91c24d.789e2de75fc23bf7.a7b6800292c9d459.2464c812c4fbf365
     487febbbbaad8984.06fd5785295d2826.b05471b0952cdbe9.047eb80e0017502b
-    0000000000000000.0000000000000000.1559539205f52340.8000000000000000
+    0000000000000000.0000000000000000.8000000000000000.8000000000000000
     38992d4b1c4014d6
 
-VROUNDSD_0x3(reg)
+VROUNDPD_128_0x0(reg)
   before
     4333ab633465f413.6cce2d8a6421b9a3.ded7fb660b9728e3.8802f67042dd323b
     1390505c234f78d0.df7f944d3a909ae3.e0e96d815b4cb2cb.10aa825a2542f954
@@ -30762,9 +30762,9 @@
     4333ab633465f413.6cce2d8a6421b9a3.ded7fb660b9728e3.8802f67042dd323b
     1390505c234f78d0.df7f944d3a909ae3.e0e96d815b4cb2cb.10aa825a2542f954
     06fc18a2838adcb8.0c9cd0328bdefcd4.162444f30fce3e47.2497e43035bf2347
-    0000000000000000.0000000000000000.162444f30fce3e47.0000000000000000
+    0000000000000000.0000000000000000.e0e96d815b4cb2cb.0000000000000000
     64741b514e328f6d
-VROUNDSD_0x3(mem)
+VROUNDPD_128_0x0(mem)
   before
     48fbe7738f4049f8.c13002c60d2532bb.0849b41111453278.8f44118c15624bb2
     28f77a326d97560e.41901c7b6d9c9c2e.8e7254e57d767e83.89c1008c9e8d45f7
@@ -30775,10 +30775,10 @@
     48fbe7738f4049f8.c13002c60d2532bb.0849b41111453278.8f44118c15624bb2
     28f77a326d97560e.41901c7b6d9c9c2e.8e7254e57d767e83.89c1008c9e8d45f7
     e1365079054172da.542f492eaf94d67c.4036b98ad4b53aef.27974492fcb33083
-    0000000000000000.0000000000000000.162444f30fce3e47.8000000000000000
+    0000000000000000.0000000000000000.0000000000000000.8000000000000000
     be7ebb64a522cb1a
 
-VROUNDSD_0x4(reg)
+VROUNDPD_128_0x1(reg)
   before
     7027e7082983f37e.4fa9b04ed1c4c547.9f5acc3a4c3aaa5c.93c2bffab68ef697
     36595863f10efcd7.bb7534b53db4753f.8f7e1b6cdefebc45.ee22589e77406d2d
@@ -30789,9 +30789,9 @@
     7027e7082983f37e.4fa9b04ed1c4c547.9f5acc3a4c3aaa5c.93c2bffab68ef697
     36595863f10efcd7.bb7534b53db4753f.8f7e1b6cdefebc45.ee22589e77406d2d
     6c5f09e1995224d2.70b3ea54d328239d.81106d4bc3748dba.e34da5c3953144d2
-    0000000000000000.0000000000000000.81106d4bc3748dba.ee22589e77406d2d
+    0000000000000000.0000000000000000.bff0000000000000.ee22589e77406d2d
     0e384d4452fd0600
-VROUNDSD_0x4(mem)
+VROUNDPD_128_0x1(mem)
   before
     fc8f9f782af068e0.981a21f6fb2ebc5e.26b5ddebeace6c3e.dcb20ac0f4a45ef6
     f6e395decd521a80.45677f65eddfa545.de1112baa4177fd9.fc594d2e7876d716
@@ -30802,10 +30802,10 @@
     fc8f9f782af068e0.981a21f6fb2ebc5e.26b5ddebeace6c3e.dcb20ac0f4a45ef6
     f6e395decd521a80.45677f65eddfa545.de1112baa4177fd9.fc594d2e7876d716
     d6fdac62582fd90d.d3b90da82f789b7f.4f0e6972f714808a.8f9f84f9be2aff71
-    0000000000000000.0000000000000000.81106d4bc3748dba.dcb20ac0f4a45ef6
+    0000000000000000.0000000000000000.0000000000000000.dcb20ac0f4a45ef6
     7937bb5702644e8b
 
-VROUNDSD_0x4(reg)
+VROUNDPD_128_0x1(reg)
   before
     8921b4c23804eda1.bbbb297493866e9c.fe9baf55158fa197.cc1f6d49db5d3fe0
     7bdb8f39a0b52ca2.78f589da7c19bbf7.54c3b999f02529cd.90ca1340a3bf75dc
@@ -30816,9 +30816,9 @@
     8921b4c23804eda1.bbbb297493866e9c.fe9baf55158fa197.cc1f6d49db5d3fe0
     7bdb8f39a0b52ca2.78f589da7c19bbf7.54c3b999f02529cd.90ca1340a3bf75dc
     abaf4a2ad703473b.8c27f80fbd5705ee.fa21e5608cd3ae05.7d46cad0740689a0
-    0000000000000000.0000000000000000.fa21e5608cd3ae05.8000000000000000
+    0000000000000000.0000000000000000.54c3b999f02529cd.bff0000000000000
     42e66168a3713e2a
-VROUNDSD_0x4(mem)
+VROUNDPD_128_0x1(mem)
   before
     d2a0374839ad564a.35d74d2720a7ffe5.28a3f792b4018062.a5a9902676a5a22a
     fb5c107048fd3ddf.47c48e0b6a15154d.69857fb8a3862837.626d07fefbe1886e
@@ -30829,10 +30829,10 @@
     d2a0374839ad564a.35d74d2720a7ffe5.28a3f792b4018062.a5a9902676a5a22a
     fb5c107048fd3ddf.47c48e0b6a15154d.69857fb8a3862837.626d07fefbe1886e
     98e667cded6eaf18.07fc9e18f350f6fc.718f085d5ae5bd58.e0969009b1645c65
-    0000000000000000.0000000000000000.fa21e5608cd3ae05.8000000000000000
+    0000000000000000.0000000000000000.0000000000000000.bff0000000000000
     8b45c5691e71be16
 
-VROUNDSD_0x4(reg)
+VROUNDPD_128_0x1(reg)
   before
     706469950e12c329.a3947fd166e02320.017b1b5d305f0ce2.464a09d18d629d31
     85180fa59e2ba69e.c84f395273fa9d48.f35b806e1c4bb970.ca937a7842986041
@@ -30843,9 +30843,9 @@
     706469950e12c329.a3947fd166e02320.017b1b5d305f0ce2.464a09d18d629d31
     85180fa59e2ba69e.c84f395273fa9d48.f35b806e1c4bb970.ca937a7842986041
     27adb1036a47a320.d10960b7866491c3.03b6a457b63422f6.8634db4d2ed8004d
-    0000000000000000.0000000000000000.03b6a457b63422f6.ca937a7842986041
+    0000000000000000.0000000000000000.f35b806e1c4bb970.ca937a7842986041
     12ad5e311da8c60a
-VROUNDSD_0x4(mem)
+VROUNDPD_128_0x1(mem)
   before
     9b1e7819584f6414.7da9de5e28b9d9fd.04a5eadc2b59db60.ec0c1b66672d1599
     cb1672de3a31ceca.eaa8613152278bb0.e4204575f6fca8db.7e9f6562b556190e
@@ -30856,10 +30856,10 @@
     9b1e7819584f6414.7da9de5e28b9d9fd.04a5eadc2b59db60.ec0c1b66672d1599
     cb1672de3a31ceca.eaa8613152278bb0.e4204575f6fca8db.7e9f6562b556190e
     7d62c86ee059c259.53b9d00428c84721.1ac9fda23720df58.9ede5fe821acc82a
-    0000000000000000.0000000000000000.03b6a457b63422f6.ec0c1b66672d1599
+    0000000000000000.0000000000000000.0000000000000000.ec0c1b66672d1599
     f78b4f3fc6111a0a
 
-VROUNDSD_0x5(reg)
+VROUNDPD_128_0x2(reg)
   before
     e9913fe835373425.db26799be5ac33b1.8a3b675749d5cbeb.f4d4796888177e0a
     d873cdcb34bbea97.3f36cc117eef28d1.0f4686b0cd580c9c.50ce35dad1045e97
@@ -30870,9 +30870,9 @@
     e9913fe835373425.db26799be5ac33b1.8a3b675749d5cbeb.f4d4796888177e0a
     d873cdcb34bbea97.3f36cc117eef28d1.0f4686b0cd580c9c.50ce35dad1045e97
     227bf6525c27780e.95ca6b0149a9977b.009282b76d3f47bb.72273e8fffa199d6
-    0000000000000000.0000000000000000.009282b76d3f47bb.50ce35dad1045e97
+    0000000000000000.0000000000000000.3ff0000000000000.50ce35dad1045e97
     74212c767c1b0e1d
-VROUNDSD_0x5(mem)
+VROUNDPD_128_0x2(mem)
   before
     0c5a08800311c07c.33310b009ded0bb5.8bac7effeaafcd17.961b0383736799f2
     d922227edfe7be3e.b276eeffee5e883e.e294eae5f8130e62.f3f17f1f10bf2862
@@ -30883,10 +30883,10 @@
     0c5a08800311c07c.33310b009ded0bb5.8bac7effeaafcd17.961b0383736799f2
     d922227edfe7be3e.b276eeffee5e883e.e294eae5f8130e62.f3f17f1f10bf2862
     b743f75b2daac28e.fc115d52d8e9cd7b.9c2e92f6aa1eb7e6.2c38c81b3aaba2ef
-    0000000000000000.0000000000000000.009282b76d3f47bb.8000000000000000
+    0000000000000000.0000000000000000.8000000000000000.8000000000000000
     a248b3e0a36e4213
 
-VROUNDSD_0x5(reg)
+VROUNDPD_128_0x2(reg)
   before
     96aa4c811a5ce001.17c3bf678c24ce8b.5c7ecba9ed799ebf.aab0864567573347
     d7aca2318e0d58bd.50baaa6ed6f34e8f.2ce6c3844f98a11e.b52ecb5bab9d7f7c
@@ -30897,9 +30897,9 @@
     96aa4c811a5ce001.17c3bf678c24ce8b.5c7ecba9ed799ebf.aab0864567573347
     d7aca2318e0d58bd.50baaa6ed6f34e8f.2ce6c3844f98a11e.b52ecb5bab9d7f7c
     c09bb15c9a0ee6f2.0a3b3f0402dfc5d2.35d53764bbff5de1.93913c4c02b9239a
-    0000000000000000.0000000000000000.35d53764bbff5de1.8000000000000000
+    0000000000000000.0000000000000000.3ff0000000000000.8000000000000000
     3931926c5ba46540
-VROUNDSD_0x5(mem)
+VROUNDPD_128_0x2(mem)
   before
     b8077073958c7b20.f970ecd3ec2e3479.710a59916d3c87c4.65787fe424dbeb42
     7af169045279da98.02ed0ff86a656b24.d7f1d55fe5c54aca.45c44c5b58663638
@@ -30910,10 +30910,10 @@
     b8077073958c7b20.f970ecd3ec2e3479.710a59916d3c87c4.65787fe424dbeb42
     7af169045279da98.02ed0ff86a656b24.d7f1d55fe5c54aca.45c44c5b58663638
     5bbafb0bae793ed5.2388db47f01ba7f7.2d91eb6eae9af4bf.cec68487066b2942
-    0000000000000000.0000000000000000.35d53764bbff5de1.65787fe424dbeb42
+    0000000000000000.0000000000000000.710a59916d3c87c4.65787fe424dbeb42
     4e2026b04211f53f
 
-VROUNDSD_0x5(reg)
+VROUNDPD_128_0x2(reg)
   before
     fd0f888308ca468b.ea1dd82bb6e0034d.1c435f18863622cc.1c2ed7fba65aeb26
     c6e545bcb82d309b.504e1a1d995fdde0.adfc0f70cdb2d824.6dc4a4520b5cb1ee
@@ -30924,9 +30924,9 @@
     fd0f888308ca468b.ea1dd82bb6e0034d.1c435f18863622cc.1c2ed7fba65aeb26
     c6e545bcb82d309b.504e1a1d995fdde0.adfc0f70cdb2d824.6dc4a4520b5cb1ee
     05ee59c6efc5ed1b.448fe5348c20ace7.c50258a48ddd8456.1e44fb9933db4e56
-    0000000000000000.0000000000000000.c50258a48ddd8456.6dc4a4520b5cb1ee
+    0000000000000000.0000000000000000.8000000000000000.6dc4a4520b5cb1ee
     153038a7367dfbb1
-VROUNDSD_0x5(mem)
+VROUNDPD_128_0x2(mem)
   before
     1235164749b984fc.55c877fd60c4d218.4b7003860f9a1704.fe24a64de773adf7
     e0546e868ea1d496.1e317902d24472ee.15a94f98d86a2b71.d6d9a39ab8f4a1be
@@ -30937,10 +30937,10 @@
     1235164749b984fc.55c877fd60c4d218.4b7003860f9a1704.fe24a64de773adf7
     e0546e868ea1d496.1e317902d24472ee.15a94f98d86a2b71.d6d9a39ab8f4a1be
     5a59bc512141a6ab.cdfdc2893b29d6e4.de21137f20ad2502.a70a297372557c0e
-    0000000000000000.0000000000000000.c50258a48ddd8456.fe24a64de773adf7
+    0000000000000000.0000000000000000.4b7003860f9a1704.fe24a64de773adf7
     a013c1750fe5d2fc
 
-VPTEST_128_1(reg)
+VROUNDPD_128_0x3(reg)
   before
     8083ca762a2cc6f1.c7442c3d9fdbc3f4.4cee1ac95f53d9de.dc01f3829fb9b644
     c89f4db39e829020.71c24534c2ec8580.d5ab215a53b1f03b.ca0107740e9bc54b
@@ -30951,9 +30951,9 @@
     8083ca762a2cc6f1.c7442c3d9fdbc3f4.4cee1ac95f53d9de.dc01f3829fb9b644
     c89f4db39e829020.71c24534c2ec8580.d5ab215a53b1f03b.ca0107740e9bc54b
     d4b5459606746b35.37564468a2e6ba37.b4fa5f1daea3bb67.267184ec6c1faa27
-    010faf8dff8d94db.f7cca5c45cd41e44.4529d07d0bb7760f.ce1ce4d6d6511f04
-    0000000000000000
-VPTEST_128_1(mem)
+    0000000000000000.0000000000000000.d5ab215a53b1f03b.ca0107740e9bc54b
+    9dd0a51f673ee00d
+VROUNDPD_128_0x3(mem)
   before
     6e5743b13cf1ab6f.a9fa8503245a46be.8bf0e5340bc26dd4.e38271e606785cde
     1f7e387a70773a56.29c2c5641265bf8c.d18e7fa4ccbd6213.ec523cc43c73aa81
@@ -30964,10 +30964,10 @@
     6e5743b13cf1ab6f.a9fa8503245a46be.8bf0e5340bc26dd4.e38271e606785cde
     1f7e387a70773a56.29c2c5641265bf8c.d18e7fa4ccbd6213.ec523cc43c73aa81
     8a11026520db4aed.ddb36a1c643c39ee.a371ef00bbd0ba2c.bbe52f8349339ca4
-    8ddc1c5e67299661.21197098b66bf093.df66b135f208314c.ab87458fc7446df2
-    0000000000000000
+    0000000000000000.0000000000000000.8000000000000000.e38271e606785cde
+    1a837a5455325a17
 
-VPTEST_128_1(reg)
+VROUNDPD_128_0x3(reg)
   before
     6227cb3e8c8a9fc1.02aa0251616ddcdd.513fd442a57c2225.5f3a412d906f829f
     e1bd33ba0bd8789a.c749302a2bb4d68e.c9739087cdfe0950.01b71cd6af136a50
@@ -30978,9 +30978,9 @@
     6227cb3e8c8a9fc1.02aa0251616ddcdd.513fd442a57c2225.5f3a412d906f829f
     e1bd33ba0bd8789a.c749302a2bb4d68e.c9739087cdfe0950.01b71cd6af136a50
     f192ae326ba6204e.b68323d5e109409f.e5ffa2d4c97ae2c2.9faabd1a6b00a58c
-    f0f238144b82d48a.ac25553e9e79d83d.01300593357ee924.16dea0e7e041ef7e
-    0000000000000000
-VPTEST_128_1(mem)
+    0000000000000000.0000000000000000.c9739087cdfe0950.0000000000000000
+    432142282ce20353
+VROUNDPD_128_0x3(mem)
   before
     003d1dc968ef9e36.3829cdcb44f7d0fa.85fb44517e0e5894.7952b532ae955925
     2affafb5b2757c54.27826ac2f4924f49.1ed16cfb9ed77dcf.a9b0af1cd04b6f6f
@@ -30991,10 +30991,10 @@
     003d1dc968ef9e36.3829cdcb44f7d0fa.85fb44517e0e5894.7952b532ae955925
     2affafb5b2757c54.27826ac2f4924f49.1ed16cfb9ed77dcf.a9b0af1cd04b6f6f
     9d3473db267f58d9.174b0a67f7de8e24.5172472619dd021b.ed98eebd352d67ae
-    36a5e524df1aeff0.65cea925e867c936.fbac53c00c2ea5a3.a1546e807cc67c8f
-    0000000000000000
+    0000000000000000.0000000000000000.8000000000000000.7952b532ae955925
+    21322bd43fa3ecbe
 
-VPTEST_128_1(reg)
+VROUNDPD_128_0x3(reg)
   before
     c87c21221a4ff1e6.cf21827df951fdc6.6e58436863ba3c2c.f8490bb492d52094
     f47f4dd7aa56c7b4.4573c4d291303e86.8c35d59d056222b2.2517ebedc8df301a
@@ -31005,9 +31005,9 @@
     c87c21221a4ff1e6.cf21827df951fdc6.6e58436863ba3c2c.f8490bb492d52094
     f47f4dd7aa56c7b4.4573c4d291303e86.8c35d59d056222b2.2517ebedc8df301a
     0087aa5f8a44acd4.74662910c3c46d5d.1cb1592e6aebb873.5ce06f59c9579060
-    47df342756a6daf1.38c82c21aa184777.7a18cd882de23a1c.7a7013e3b249fd93
-    0000000000000000
-VPTEST_128_1(mem)
+    0000000000000000.0000000000000000.8000000000000000.0000000000000000
+    5b9554779ec133de
+VROUNDPD_128_0x3(mem)
   before
     db1aad01aaccee6e.27d5e799ac078eb8.6d634af3623888ff.03b62c18ead2e358
     d6ca9a6ef176e96f.fbb3c02325f403d4.ef04fd710830ec22.11d673483e48f1d4
@@ -31018,10 +31018,10 @@
     db1aad01aaccee6e.27d5e799ac078eb8.6d634af3623888ff.03b62c18ead2e358
     d6ca9a6ef176e96f.fbb3c02325f403d4.ef04fd710830ec22.11d673483e48f1d4
     287298a88fc9e10c.1ec6b92f5ff877f2.9a77c386b70d2e0b.01c59c86c4ce9d3c
-    adde219ca1d39272.ee5ad02bf69f24bd.4a8717208cdb0be7.2fcfa53d19f2263b
-    0000000000000000
+    0000000000000000.0000000000000000.6d634af3623888ff.0000000000000000
+    f74089d9d840c67e
 
-VPTEST_128_2(reg)
+VROUNDPD_128_0x4(reg)
   before
     b56445c59e43bab0.41dab337439fb8cc.c5bb0082857646e3.db02752aa2a43ee2
     c587d36f06873e7e.bf32c964903a0e47.013546a0a8081b0d.29b25a9016768527
@@ -31030,11 +31030,11 @@
     18fe0423ba96206e
   after
     b56445c59e43bab0.41dab337439fb8cc.c5bb0082857646e3.db02752aa2a43ee2
-    0000000000000000.0000000000000000.fc139cf1fce1ddea.1064403e035d9ae3
+    c587d36f06873e7e.bf32c964903a0e47.013546a0a8081b0d.29b25a9016768527
     83f43143ad988e94.05b2df0ea4af510f.fc139cf1fce1ddea.1064403e035d9ae3
-    4bf85aab2e03e59d.ee2572239c0a3c4f.14a300e11c8ec923.6be4a52186633a41
-    0000000000000001
-VPTEST_128_2(mem)
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    18fe0423ba96206e
+VROUNDPD_128_0x4(mem)
   before
     f27eda32bc020a96.79e04a1426538046.5659fd8e93588d34.a32f6ddda59a1a67
     d530a138a7b1b2e4.68f6fdeb30159b3a.1918fb3ba6a4fee9.0704df4f33910e60
@@ -31043,12 +31043,12 @@
     c0302da90e730a45
   after
     f27eda32bc020a96.79e04a1426538046.5659fd8e93588d34.a32f6ddda59a1a67
-    0000000000000000.0000000000000000.a9a602716ca772cb.5cd092225a65e598
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
-    2558f7dda90e2ea4.fede9d8feb1c3fb6.1f6a460b8e673275.b9b9c349cb72c923
-    0000000000000040
+    d530a138a7b1b2e4.68f6fdeb30159b3a.1918fb3ba6a4fee9.0704df4f33910e60
+    9cdfd72397b1d484.7686709ae8d37126.122feb16f1fa4c9b.9a6e53a46100dfbb
+    0000000000000000.0000000000000000.5659fd8e93588d34.8000000000000000
+    c0302da90e730a45
 
-VPTEST_128_2(reg)
+VROUNDPD_128_0x4(reg)
   before
     0c218c2fc590dccc.4b677d54f9d27a6e.5c498234d5794195.1b948a079cf66ea5
     f7d6dd498c547c65.e9d8e673a20b750e.ec121bf74178b270.e17b31f434b4ba54
@@ -31057,11 +31057,11 @@
     8f8d5aa15b7a5a1f
   after
     0c218c2fc590dccc.4b677d54f9d27a6e.5c498234d5794195.1b948a079cf66ea5
-    0000000000000000.0000000000000000.09866243cba4d0f2.4fe9b9bf74abd2b1
+    f7d6dd498c547c65.e9d8e673a20b750e.ec121bf74178b270.e17b31f434b4ba54
     de9c1a62014b25bc.dd77ac26c0c5dab1.09866243cba4d0f2.4fe9b9bf74abd2b1
-    1dbf41e6bd02157c.01104d59700b6683.11f15584108ad5c8.3fab9e5578e974e5
-    0000000000000001
-VPTEST_128_2(mem)
+    0000000000000000.0000000000000000.ec121bf74178b270.e17b31f434b4ba54
+    8f8d5aa15b7a5a1f
+VROUNDPD_128_0x4(mem)
   before
     195b6b8e3a694189.108b4d415e048652.336e44f9cde9d5af.5f9fef26abb5fd9d
     bbe14c0a30c2e450.134c3adf80ddb5e9.4d5f0df0f46be362.4edc2c9539b1861f
@@ -31070,12 +31070,12 @@
     81e38ee9aa06b55f
   after
     195b6b8e3a694189.108b4d415e048652.336e44f9cde9d5af.5f9fef26abb5fd9d
-    0000000000000000.0000000000000000.cc91bb0632162a50.a06010d9544a0262
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
-    b3446e5cd2e352a3.badba895b4463b0d.ad2507970e8dcb0c.8332808b9c4da6d4
-    0000000000000040
+    bbe14c0a30c2e450.134c3adf80ddb5e9.4d5f0df0f46be362.4edc2c9539b1861f
+    4feb79005991019f.824d052dbe1addee.2dad252b009e4cc8.3cf3083d560aaaf7
+    0000000000000000.0000000000000000.0000000000000000.5f9fef26abb5fd9d
+    81e38ee9aa06b55f
 
-VPTEST_128_2(reg)
+VROUNDPD_128_0x4(reg)
   before
     905330c519bf1547.c1b9a80ab7c39387.15432185ffed0bf1.ab932e1e39451d5a
     0ece628987060036.5617a1f7233e8278.efcf6b673b9c8947.01c219ae9ed0fde0
@@ -31084,11 +31084,11 @@
     b2d43cc63de64f6f
   after
     905330c519bf1547.c1b9a80ab7c39387.15432185ffed0bf1.ab932e1e39451d5a
-    0000000000000000.0000000000000000.a6cc83a903def0ba.8c804132583d29c7
+    0ece628987060036.5617a1f7233e8278.efcf6b673b9c8947.01c219ae9ed0fde0
     55a01ea39066b2d9.4f28d70d325ed9a2.a6cc83a903def0ba.8c804132583d29c7
-    c315627ecf6c69db.86b8c53901325530.958563b6f3407df7.2997249684955b3e
-    0000000000000001
-VPTEST_128_2(mem)
+    0000000000000000.0000000000000000.efcf6b673b9c8947.0000000000000000
+    b2d43cc63de64f6f
+VROUNDPD_128_0x4(mem)
   before
     040407aea03bc386.b2782886e1a35fe9.d895e868abc3b14f.184809f9a84d6caa
     fbf0013ac8a171b1.7f176f276197d1ae.218abb844d1fab2b.8b5f70e0bd91f97e
@@ -31097,12 +31097,12 @@
     1b9b04a05821a97c
   after
     040407aea03bc386.b2782886e1a35fe9.d895e868abc3b14f.184809f9a84d6caa
-    0000000000000000.0000000000000000.276a1797543c4eb0.e7b7f60657b29355
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
-    49346eeed8cd6ded.243468e41ce81810.09ea6038e76664c7.b1bd714779efdb3b
-    0000000000000040
+    fbf0013ac8a171b1.7f176f276197d1ae.218abb844d1fab2b.8b5f70e0bd91f97e
+    7367a456d122161a.863c30cdebd5fad7.3d62b97b0251fdef.4a1794d6cf985f20
+    0000000000000000.0000000000000000.d895e868abc3b14f.0000000000000000
+    1b9b04a05821a97c
 
-VPTEST_256_1(reg)
+VROUNDPD_256_0x0(reg)
   before
     e6fd484b07bb048e.5722daeff9ab3457.b34b14d8905c6504.5fee2ca717699be0
     6d3139b52348291f.7aff64434eca2584.90cc2f16e2be1e60.1c3a97b4af665f66
@@ -31113,9 +31113,9 @@
     e6fd484b07bb048e.5722daeff9ab3457.b34b14d8905c6504.5fee2ca717699be0
     6d3139b52348291f.7aff64434eca2584.90cc2f16e2be1e60.1c3a97b4af665f66
     0b81d34b475454d8.8e9588d8f635fd9f.1705b508ae997ecf.1c9a1f4bca6a6c85
-    1e3b1378106bc168.6fb1c3990bf977d5.a440a21c9179c2fe.3bd93f58857f7e68
-    0000000000000000
-VPTEST_256_1(mem)
+    6d3139b52348291f.7aff64434eca2584.8000000000000000.0000000000000000
+    55c573c7fbb4503b
+VROUNDPD_256_0x0(mem)
   before
     4628378548129f2b.01a9f3a7191aab78.f91f9071a9215051.94caf3bc26eb2699
     eacf087c89a72764.0f187146feed4fb7.08aa6b4eedb94440.41f0a3560a7ae64b
@@ -31126,10 +31126,10 @@
     4628378548129f2b.01a9f3a7191aab78.f91f9071a9215051.94caf3bc26eb2699
     eacf087c89a72764.0f187146feed4fb7.08aa6b4eedb94440.41f0a3560a7ae64b
     1d86619ada7fa411.a6d488c05c6ee8cf.7820d01bf2ce0fcd.08fcae55d8b33dc1
-    ba19bec956a4d15f.20283581cf2bb46d.244b3bc4d56b6c26.453a10252d2068a6
-    0000000000000000
+    4628378548129f2b.0000000000000000.f91f9071a9215051.8000000000000000
+    54f8c632a450a3a7
 
-VPTEST_256_1(reg)
+VROUNDPD_256_0x0(reg)
   before
     9180cae8dacc2a70.9f539bf719246b7a.db6272f5f2afed3c.eaf82936b19c1874
     58201ab36a2238ac.a702750f400b2d8d.31cc3d886187d0e9.a5f3155ba36ecfe6
@@ -31140,9 +31140,9 @@
     9180cae8dacc2a70.9f539bf719246b7a.db6272f5f2afed3c.eaf82936b19c1874
     58201ab36a2238ac.a702750f400b2d8d.31cc3d886187d0e9.a5f3155ba36ecfe6
     0422b1fff1dd0a08.aef0c6fde763d5c5.7fb491a6b93e991f.31087b20c6ec4da6
-    f3d38c390a89db2f.90ea0cad283a1d4d.22646abc9560838b.6a03d77236224de0
-    0000000000000000
-VPTEST_256_1(mem)
+    58201ab36a2238ac.8000000000000000.0000000000000000.8000000000000000
+    2bb0a63b101d8cc1
+VROUNDPD_256_0x0(mem)
   before
     52da626970e8c675.807fa5cb51b3e9ce.28bcc20b229cc252.7429c534927acbd9
     ba4e89e7718fb627.0771fa2363e66e91.54326503ef937f00.d24e9d7c4b17adb4
@@ -31153,10 +31153,10 @@
     52da626970e8c675.807fa5cb51b3e9ce.28bcc20b229cc252.7429c534927acbd9
     ba4e89e7718fb627.0771fa2363e66e91.54326503ef937f00.d24e9d7c4b17adb4
     3ed897a02f1f1904.e4f786acdcafa723.ef186f81ab2d1282.9921edfe5dc364c9
-    bc440682c7a3ab38.725b45d15799cf31.d4395e7272763504.23ecb428630b2dc4
-    0000000000000000
+    52da626970e8c675.8000000000000000.0000000000000000.7429c534927acbd9
+    cdfdeb65fa7a4450
 
-VPTEST_256_1(reg)
+VROUNDPD_256_0x0(reg)
   before
     f39e8f21bd9ce519.0e5e5478552828ee.0fea340070302366.e163adc06279a4b4
     f21c9dc849fe4bcc.12f2fb6ef4b84b53.16f04da4c401df6f.f060d85994421dbc
@@ -31167,9 +31167,9 @@
     f39e8f21bd9ce519.0e5e5478552828ee.0fea340070302366.e163adc06279a4b4
     f21c9dc849fe4bcc.12f2fb6ef4b84b53.16f04da4c401df6f.f060d85994421dbc
     24c310c6392bb315.a2cb7951c061d192.e2b98e29ee963ff7.dffd5c2726dd5a48
-    e6dee48729b059a0.9cb74a0bd62f76d8.d191f2fb8b7e7fac.8806b41834571885
-    0000000000000000
-VPTEST_256_1(mem)
+    f21c9dc849fe4bcc.0000000000000000.0000000000000000.f060d85994421dbc
+    c9475b17d9bb129f
+VROUNDPD_256_0x0(mem)
   before
     7c8bd010321506c1.94bb1677b6177818.da80e889512df550.3ec476873742da37
     7fa08cef5a72ae18.8aa4a0037cee4e29.3af3d1b84e670b27.849d14378c708d47
@@ -31180,10 +31180,10 @@
     7c8bd010321506c1.94bb1677b6177818.da80e889512df550.3ec476873742da37
     7fa08cef5a72ae18.8aa4a0037cee4e29.3af3d1b84e670b27.849d14378c708d47
     ac500ca06dddc6d0.24e6809516c11580.96dc8082e8e97489.0169ca782893d385
-    e068cd0f88630c14.becdb19b201b09c9.cc0671d53cc0eca1.0f7593b7a738e9a0
-    0000000000000000
+    7c8bd010321506c1.8000000000000000.da80e889512df550.0000000000000000
+    0c0b6b5fa4ea0b42
 
-VPTEST_256_2(reg)
+VROUNDPD_256_0x1(reg)
   before
     52774fdbbc357518.f8b44a29c60f3a10.b4a53080378868b0.b63f209c65f72e9c
     3e0739998aa663cd.ce00ffd844ed0df1.62baf7aff7946ce0.31510ac3809bf7a6
@@ -31192,11 +31192,11 @@
     a19bfcb09087d2d1
   after
     52774fdbbc357518.f8b44a29c60f3a10.b4a53080378868b0.b63f209c65f72e9c
+    3e0739998aa663cd.ce00ffd844ed0df1.62baf7aff7946ce0.31510ac3809bf7a6
     2d052704abc8100e.3f1869091e0940e3.23580496facc5105.1909aa36a8b703ea
-    2d052704abc8100e.3f1869091e0940e3.23580496facc5105.1909aa36a8b703ea
-    79bf1488ba27b986.27c702a96e709112.55ca52a0dfbb55cc.4b347ce1f9570d94
-    0000000000000001
-VPTEST_256_2(mem)
+    0000000000000000.ce00ffd844ed0df1.62baf7aff7946ce0.0000000000000000
+    a19bfcb09087d2d1
+VROUNDPD_256_0x1(mem)
   before
     f80da78f89540ecd.7f7ffc91535099e2.62da48a3532dbaa9.535ddd393feeb2e1
     2c55f76affc97db4.9c92dc8b13ceeece.cd1eb6e2e64d78d4.795da2cdb9efa5ef
@@ -31205,12 +31205,12 @@
     72e31ea4cf4958ac
   after
     f80da78f89540ecd.7f7ffc91535099e2.62da48a3532dbaa9.535ddd393feeb2e1
-    07f2587076abf132.8080036eacaf661d.9d25b75cacd24556.aca222c6c0114d1e
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
-    9b967bc5d3dde2f0.86e1710377fae104.9e63fbe48ce3a199.acd4c69765913ca9
-    0000000000000040
+    2c55f76affc97db4.9c92dc8b13ceeece.cd1eb6e2e64d78d4.795da2cdb9efa5ef
+    193e6a2e0ef3dab1.2a44afe3962df2f5.425dc95446db86c1.23169bc9e64d6aa3
+    f80da78f89540ecd.7f7ffc91535099e2.62da48a3532dbaa9.535ddd393feeb2e1
+    72e31ea4cf4958ac
 
-VPTEST_256_2(reg)
+VROUNDPD_256_0x1(reg)
   before
     d08e9f5dc200fa59.8e27a71d6a93519e.0cb41e5852c0f9a6.bdfeca7ed672858b
     2123462cda435e5b.cebe6821ed22e3e7.180bb24fc40b7488.7bf9b10f4093eec1
@@ -31219,11 +31219,11 @@
     0720cfbc52db9cb6
   after
     d08e9f5dc200fa59.8e27a71d6a93519e.0cb41e5852c0f9a6.bdfeca7ed672858b
+    2123462cda435e5b.cebe6821ed22e3e7.180bb24fc40b7488.7bf9b10f4093eec1
     c3ec0d7fb29dbf5f.37273cbc7b9553f7.06302a5368688f56.b41f2c81e5529767
-    c3ec0d7fb29dbf5f.37273cbc7b9553f7.06302a5368688f56.b41f2c81e5529767
-    1036f2c1e79a5a10.a52d9edc2df85ef9.327081cfdb6286bb.443db7c1e2bb3dab
-    0000000000000001
-VPTEST_256_2(mem)
+    0000000000000000.cebe6821ed22e3e7.0000000000000000.7bf9b10f4093eec1
+    0720cfbc52db9cb6
+VROUNDPD_256_0x1(mem)
   before
     d991ef5c51be70b7.664df15e14c76b1c.f49e0a6c2258bf19.f817b331b8869464
     965f938ffc6e74d8.1f7c04c2d5ae2d2c.0044fd5873c03484.b471bce49c5ef6fc
@@ -31232,12 +31232,12 @@
     44a7bb1b86a16a1b
   after
     d991ef5c51be70b7.664df15e14c76b1c.f49e0a6c2258bf19.f817b331b8869464
-    266e10a3ae418f48.99b20ea1eb3894e3.0b61f593dda740e6.07e84cce47796b9b
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
-    403e585ac46bfe2b.2e565a8f85e0b70e.bf6264f59fd945ea.7e6d44ede760a5ac
-    0000000000000040
+    965f938ffc6e74d8.1f7c04c2d5ae2d2c.0044fd5873c03484.b471bce49c5ef6fc
+    1955373f6ff96545.99112859c7deddee.a5ecf18d3f3c7766.c2c998542278e830
+    d991ef5c51be70b7.664df15e14c76b1c.f49e0a6c2258bf19.f817b331b8869464
+    44a7bb1b86a16a1b
 
-VPTEST_256_2(reg)
+VROUNDPD_256_0x1(reg)
   before
     70c4f94b9cc7732a.e6e870cb1acefdb6.3c9895d0ac42f738.2972d17db1a2593d
     5e10fae7c45efc84.e71dfd7e8b301c11.1d23d689d890d817.c1e8b41291a3718b
@@ -31246,11 +31246,11 @@
     2ea4fc5019711f0b
   after
     70c4f94b9cc7732a.e6e870cb1acefdb6.3c9895d0ac42f738.2972d17db1a2593d
+    5e10fae7c45efc84.e71dfd7e8b301c11.1d23d689d890d817.c1e8b41291a3718b
     6ad7bb5d9af340d6.1eaa7a5f339d1869.2e431724a3549758.62908a9e5ae947ff
-    6ad7bb5d9af340d6.1eaa7a5f339d1869.2e431724a3549758.62908a9e5ae947ff
-    f0653717bb117dcc.695b645b2f1facea.cc44560fac1c70a6.e835ce0f297f97c6
-    0000000000000001
-VPTEST_256_2(mem)
+    5e10fae7c45efc84.e71dfd7e8b301c11.0000000000000000.c1e8b41291c00000
+    2ea4fc5019711f0b
+VROUNDPD_256_0x1(mem)
   before
     12a9904c46cc99fb.4b056a83c345ec11.a3fb355c9ac596bf.51728eb48c749eae
     6e1006f1cd9bc2c2.d904500c4d1acc52.a7586b4f91989015.1a18bb81e2e65e1b
@@ -31259,12 +31259,12 @@
     a6d9d90ab45a617d
   after
     12a9904c46cc99fb.4b056a83c345ec11.a3fb355c9ac596bf.51728eb48c749eae
-    ed566fb3b9336604.b4fa957c3cba13ee.5c04caa3653a6940.ae8d714b738b6151
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
-    03348ae457c60f82.fb50262558d7ca76.8174f3bc90faa6f2.e900e540594e84d7
-    0000000000000040
+    6e1006f1cd9bc2c2.d904500c4d1acc52.a7586b4f91989015.1a18bb81e2e65e1b
+    20a5db2ac9ea558b.f5afe51ef51c573a.533c81212fa65617.8483d9e14700ec9a
+    0000000000000000.4b056a83c345ec11.bff0000000000000.51728eb48c749eae
+    a6d9d90ab45a617d
 
-VTESTPS_128_1(reg)
+VROUNDPD_256_0x2(reg)
   before
     175ab3abf3b3c039.f2888f09933aacd5.46340e8d11d861b1.0fcd3e0ed2a03ad1
     98d16f8fb3e2ddb6.cb6f66869852e8ad.34a699c2bdab5798.d710dc020ea5cfe1
@@ -31275,9 +31275,9 @@
     175ab3abf3b3c039.f2888f09933aacd5.46340e8d11d861b1.0fcd3e0ed2a03ad1
     98d16f8fb3e2ddb6.cb6f66869852e8ad.34a699c2bdab5798.d710dc020ea5cfe1
     858907228f75f4a1.68b38c47821b7f39.1ff4c330f7dae9d7.b70c4b836214204e
-    3acd79d123f740a6.a6217b396ea02ca3.656889435cf35319.898c067feafaeb43
-    0000000000000001
-VTESTPS_128_1(mem)
+    8000000000000000.cb6f66869852e8ad.3ff0000000000000.d710dc020ea5cfe1
+    2b5b8ae1c161eaed
+VROUNDPD_256_0x2(mem)
   before
     774651960357d978.13eabf060cf4fe70.6285b14677eeac18.6050e6688781d10b
     4a1ad988cde8760f.6c2cd82fe6f969ac.76aaa95cb910bac3.6ef6d60915119e59
@@ -31288,10 +31288,10 @@
     774651960357d978.13eabf060cf4fe70.6285b14677eeac18.6050e6688781d10b
     4a1ad988cde8760f.6c2cd82fe6f969ac.76aaa95cb910bac3.6ef6d60915119e59
     81a19da43b1f7bde.a1dfbdb64c91bf05.bf5ee066521214d1.e9a75594a12ef7ae
-    f6a719d76708a513.0e4f6b09da493a28.1a6bd0505b00746d.2faf5f74c86418b7
-    0000000000000040
+    774651960357d978.3ff0000000000000.6285b14677eeac18.6050e6688781d10b
+    9a59f11425403c1f
 
-VTESTPS_128_1(reg)
+VROUNDPD_256_0x2(reg)
   before
     87f306e2554da093.86faca0b70afafd8.0fc7df932dab17c1.619ef706f2e796c4
     53c79a49f31780be.0d652a2e70215759.009514c0e046917b.71c4d07433d23802
@@ -31302,9 +31302,9 @@
     87f306e2554da093.86faca0b70afafd8.0fc7df932dab17c1.619ef706f2e796c4
     53c79a49f31780be.0d652a2e70215759.009514c0e046917b.71c4d07433d23802
     5822a9b59b2b184d.68b3b72a836a57c3.3c0306fc90a3e503.26a6d78639ce1452
-    f3503093ea14a3ec.71b1ecedc6946c42.215eb2b3d8504f04.5c13892820e6e7e1
-    0000000000000001
-VTESTPS_128_1(mem)
+    53c79a49f31780be.3ff0000000000000.3ff0000000000000.71c4d07433d23802
+    f0d6614705266cda
+VROUNDPD_256_0x2(mem)
   before
     bcbadacd049b616a.819d294d7c5e5e46.052b456254ad5101.0af2125155d80b2b
     9d8d73a7384f80bd.5c559250ec968508.00ed3f7549c0c32d.530b2443a2c85423
@@ -31315,10 +31315,10 @@
     bcbadacd049b616a.819d294d7c5e5e46.052b456254ad5101.0af2125155d80b2b
     9d8d73a7384f80bd.5c559250ec968508.00ed3f7549c0c32d.530b2443a2c85423
     6f19a5c2bd5186fe.e1c36609d64754dd.3ec35512c3da7ef1.57f5e3f35caa6899
-    0e2bed09b0aa2e5a.6c35a2e2d7fd0672.9b780325db063e7a.74fb4bcf1e0d8039
-    0000000000000041
+    8000000000000000.8000000000000000.3ff0000000000000.3ff0000000000000
+    056a5941847adbae
 
-VTESTPS_128_1(reg)
+VROUNDPD_256_0x2(reg)
   before
     658e08b72b7fb3a5.568fc8682c6835fc.59f540498a45d873.f3dac59aaf50bef4
     f2b3549cafa745ca.2310b1ca4e975711.04503ea98caa058b.22b3175e5bc5bb8a
@@ -31329,9 +31329,9 @@
     658e08b72b7fb3a5.568fc8682c6835fc.59f540498a45d873.f3dac59aaf50bef4
     f2b3549cafa745ca.2310b1ca4e975711.04503ea98caa058b.22b3175e5bc5bb8a
     0625395cab7fcdc8.517c241d314150c5.c992976e78b8cb67.04d0765bfa70f169
-    ff30b363bb92864c.bc9d9e4df274db43.04074703ebfc64b2.75fd5d7fa85d1cbc
-    0000000000000040
-VTESTPS_128_1(mem)
+    f2b3549cafa745ca.3ff0000000000000.3ff0000000000000.3ff0000000000000
+    510648b48299f7b0
+VROUNDPD_256_0x2(mem)
   before
     73b6b3e8a42f3f70.3720bf1d7c6cae01.3f409a44ac3bb5b8.11fa4bd680010d19
     b9db1a06292baf2a.0c4057f68a9a7e94.b83193ef7ca39a4f.4cb99e53d4540148
@@ -31342,10 +31342,10 @@
     73b6b3e8a42f3f70.3720bf1d7c6cae01.3f409a44ac3bb5b8.11fa4bd680010d19
     b9db1a06292baf2a.0c4057f68a9a7e94.b83193ef7ca39a4f.4cb99e53d4540148
     fe3ffafa2d9a0507.d8dd795a80a735b0.023c083a7db74635.118e3ce482807dea
-    1eafceb0cd87fb36.f84321b5fa1f0d02.f92d7212cc847496.bcc621f62711bdac
-    0000000000000000
+    73b6b3e8a42f3f70.3ff0000000000000.3ff0000000000000.3ff0000000000000
+    a9ad49f65e93fd39
 
-VTESTPS_128_2(reg)
+VROUNDPD_256_0x3(reg)
   before
     348fb14ec393783e.f4f7121424fe4ee1.c9be4974958f4336.78d04e618414e19d
     b8b8536cf39c6b67.5ee343124f0cb934.a59aef01ec8213f7.5df01915c1754977
@@ -31354,11 +31354,11 @@
     013ce7c0b3f2b8ab
   after
     348fb14ec393783e.f4f7121424fe4ee1.c9be4974958f4336.78d04e618414e19d
-    0000000000000000.0000000000000000.e9230eca9c84b9f2.835a4e19a0b3674f
+    b8b8536cf39c6b67.5ee343124f0cb934.a59aef01ec8213f7.5df01915c1754977
     93732dba8a3b125f.373fdb9669bcfa5c.e9230eca9c84b9f2.835a4e19a0b3674f
-    200e3ba623fba9d3.5ad6588d8f1acb85.f2a4a23a402270d3.c5da69593dd8f852
-    0000000000000001
-VTESTPS_128_2(mem)
+    8000000000000000.5ee343124f0cb934.8000000000000000.5df01915c1754977
+    013ce7c0b3f2b8ab
+VROUNDPD_256_0x3(mem)
   before
     124c423c1e0d6387.bbd3779b5a686b6e.a57635e1dc33e8da.1a6aa7bd75e77545
     d3d6f8b99b34b412.bf0fdf05cc0e95dd.f2e9ee806d120f88.bec11abfd65f03f4
@@ -31367,12 +31367,12 @@
     2a24d9f71c74412d
   after
     124c423c1e0d6387.bbd3779b5a686b6e.a57635e1dc33e8da.1a6aa7bd75e77545
-    0000000000000000.0000000000000000.5a89ca1e23cc1725.e59558428a188aba
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
-    d987626139d63be3.771c20e8cf3710e5.067be54bc853669e.ea5236f08e9aaebc
-    0000000000000040
+    d3d6f8b99b34b412.bf0fdf05cc0e95dd.f2e9ee806d120f88.bec11abfd65f03f4
+    22a5842145736877.8a0e6e50147a63cb.1ffc00545dc3fabb.3af5f5ac0017588d
+    0000000000000000.8000000000000000.8000000000000000.0000000000000000
+    2a24d9f71c74412d
 
-VTESTPS_128_2(reg)
+VROUNDPD_256_0x3(reg)
   before
     56b6d82d47324f8b.d5460f66926ae882.e184f13998d2d9d7.85321b50cbcd0e5d
     ca5631ffab5f1282.f3af061a6d3a2c7f.2694ddb00cd6fa4c.76ec1d4f823eb026
@@ -31381,11 +31381,11 @@
     942bc560f2cdc06a
   after
     56b6d82d47324f8b.d5460f66926ae882.e184f13998d2d9d7.85321b50cbcd0e5d
-    0000000000000000.0000000000000000.a096e1b7c6cfaff1.b777683408b00623
+    ca5631ffab5f1282.f3af061a6d3a2c7f.2694ddb00cd6fa4c.76ec1d4f823eb026
     e24edfd7e388c7bf.0d8ec36be553c306.a096e1b7c6cfaff1.b777683408b00623
-    faebde238b37aaee.01aec24317bf6945.add7f8bc634a3372.229d76eb7932cc80
-    0000000000000001
-VTESTPS_128_2(mem)
+    ca5631ffab5f1282.f3af061a6d3a2c7f.0000000000000000.76ec1d4f823eb026
+    942bc560f2cdc06a
+VROUNDPD_256_0x3(mem)
   before
     eaedd0808f8f9c0d.6e792a4d40faf6bb.a9dd7f901e8cd966.a7a31e297ed2c37a
     feaf13356b831d94.9a44bfc39d5de8d1.e2e5773d17c6d095.ec46506cb4f39bb6
@@ -31394,12 +31394,12 @@
     0d2fff6b0c672856
   after
     eaedd0808f8f9c0d.6e792a4d40faf6bb.a9dd7f901e8cd966.a7a31e297ed2c37a
-    0000000000000000.0000000000000000.5622806fe1732699.585ce1d6812d3c85
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
-    d36232125133fd00.8ac0b640c230ad89.78b405674dae42d0.c240c421df321178
-    0000000000000040
+    feaf13356b831d94.9a44bfc39d5de8d1.e2e5773d17c6d095.ec46506cb4f39bb6
+    ad3d0a6da2b6fe2c.da979af03febbcdc.889425361d780aff.d60c88f0a03af6d1
+    eaedd0808f8f9c0d.6e792a4d40faf6bb.8000000000000000.8000000000000000
+    0d2fff6b0c672856
 
-VTESTPS_128_2(reg)
+VROUNDPD_256_0x3(reg)
   before
     1126363ac3667718.4deb06129306d43d.06090f1fc0b8f984.8c1293bcc2753533
     2b6f63faa1ba396a.f5a50258853b400f.aabfa2f9d810da78.a1794b2198d79f55
@@ -31408,11 +31408,11 @@
     7ee44aea7c22fdea
   after
     1126363ac3667718.4deb06129306d43d.06090f1fc0b8f984.8c1293bcc2753533
-    0000000000000000.0000000000000000.d12e693aa3c38c12.93b7aa83ece33c61
+    2b6f63faa1ba396a.f5a50258853b400f.aabfa2f9d810da78.a1794b2198d79f55
     b756841742efabf7.a85aa2d042dffca1.d12e693aa3c38c12.93b7aa83ece33c61
-    122994fe4092096c.42d76366e7fdc520.d9a2624fbf5e4dfe.3e962bccdaa2c784
-    0000000000000001
-VTESTPS_128_2(mem)
+    0000000000000000.f5a50258853b400f.8000000000000000.8000000000000000
+    7ee44aea7c22fdea
+VROUNDPD_256_0x3(mem)
   before
     2f6b83c7f16e9abe.96338f193a2e8e74.9fe7c0068fa257b7.1d6688a2c86c57e7
     2df8535153935a2d.a0bf71d6ca4f77bc.9b58359c56d96e93.f8c8d8a05979e77a
@@ -31421,12 +31421,12 @@
     b39195d7571511e3
   after
     2f6b83c7f16e9abe.96338f193a2e8e74.9fe7c0068fa257b7.1d6688a2c86c57e7
-    0000000000000000.0000000000000000.60183ff9705da848.e299775d3793a818
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
-    8053a5194f95318a.b690dce21d5265bb.e088575ab42e19c9.e891e24f85c2884c
-    0000000000000040
+    2df8535153935a2d.a0bf71d6ca4f77bc.9b58359c56d96e93.f8c8d8a05979e77a
+    54573573be9cf862.8c1a379f8c8200f0.12f43e1459aec5e0.c8124cb60f123862
+    0000000000000000.8000000000000000.8000000000000000.0000000000000000
+    b39195d7571511e3
 
-VTESTPS_128_3(reg)
+VROUNDPD_256_0x4(reg)
   before
     875e61b922970fd4.8dba1f2f218bc0d1.7a6d5c0a184be1ca.e1e1fd5b8264267b
     be44426382d5c0cb.57561fa151896362.34fdb3831afab1c8.f1c8ab01e05ca821
@@ -31437,9 +31437,9 @@
     875e61b922970fd4.8dba1f2f218bc0d1.7a6d5c0a184be1ca.e1e1fd5b8264267b
     be44426382d5c0cb.57561fa151896362.34fdb3831afab1c8.f1c8ab01e05ca821
     b68e3541125b5e73.baf4225bfa9bd46a.408cdeb9beea1162.ec0cdd3ae8235ae8
-    c98a35bd6eb32679.9260a34939ced014.fa65d718a1a83d44.ad780ff1b9c4f9fc
-    0000000000000001
-VTESTPS_128_3(mem)
+    8000000000000000.57561fa151896362.0000000000000000.f1c8ab01e05ca821
+    12d7bd116d4b4088
+VROUNDPD_256_0x4(mem)
   before
     f6f7648820c5edb9.54823e44336b5389.bb661e57292d128d.bed59c0c5ebe7019
     35a27f41ef3dbaba.b4c34c42fc0e234e.10d20f72e6c45800.e829280191bbe78e
@@ -31450,10 +31450,10 @@
     f6f7648820c5edb9.54823e44336b5389.bb661e57292d128d.bed59c0c5ebe7019
     35a27f41ef3dbaba.b4c34c42fc0e234e.10d20f72e6c45800.e829280191bbe78e
     aaa58a28f5bf64b8.43995b246629d074.6f70f3848da05b9a.d4ab7864d828de4e
-    33cc012a4f58a6de.5e5068540d4796a9.b30b447b3accda87.dda7869fcc939006
-    0000000000000001
+    f6f7648820c5edb9.54823e44336b5389.8000000000000000.8000000000000000
+    616b50200b873a62
 
-VTESTPS_128_3(reg)
+VROUNDPD_256_0x4(reg)
   before
     bb42d1523191180d.abe2613118133e59.62336e408bf4b397.b7708042085490f3
     477705a0d93b65b4.edb5252a6dfce655.a99069537ebd61ea.596b23c513453808
@@ -31464,9 +31464,9 @@
     bb42d1523191180d.abe2613118133e59.62336e408bf4b397.b7708042085490f3
     477705a0d93b65b4.edb5252a6dfce655.a99069537ebd61ea.596b23c513453808
     6057e9789f145f02.d70fc90269205afd.90b155f8822ddd4f.74c8a7f078aa8ff5
-    642e774520a540a4.44bdc9a3298a587e.73e32f9d32d16272.e3538aaf538f50e4
-    0000000000000040
-VTESTPS_128_3(mem)
+    477705a0d93b65b4.edb5252a6dfce655.8000000000000000.596b23c513453808
+    84d846eebf013802
+VROUNDPD_256_0x4(mem)
   before
     31225a99d80b037a.ae48ad73f77c4445.0f8ca1fbc8469a04.ae72f2ad2b332efe
     c8ff3f9cbbba6d79.99f1866ec124a992.1645cef56361ddba.9eaa9a9408e17ba0
@@ -31477,10 +31477,10 @@
     31225a99d80b037a.ae48ad73f77c4445.0f8ca1fbc8469a04.ae72f2ad2b332efe
     c8ff3f9cbbba6d79.99f1866ec124a992.1645cef56361ddba.9eaa9a9408e17ba0
     233972e48319322a.8375ffa3192aa937.33b7cb7d15e6dccd.9dd723bf66678603
-    1f9d705b4d340dba.c61f127c9c1981df.43ad147ffae25568.08448998e04f8ad4
-    0000000000000000
+    0000000000000000.8000000000000000.0000000000000000.8000000000000000
+    3b3fc98c1228c4bf
 
-VTESTPS_128_3(reg)
+VROUNDPD_256_0x4(reg)
   before
     9212de08997b706f.99f7b4ef3417bb55.c03cbd66e57d6c37.23f225e72f6002b8
     690ac47611d6ca91.6b12ba8a55cff726.cb18fbce91e3a8eb.ad547ba1d06c9fe8
@@ -31491,9 +31491,9 @@
     9212de08997b706f.99f7b4ef3417bb55.c03cbd66e57d6c37.23f225e72f6002b8
     690ac47611d6ca91.6b12ba8a55cff726.cb18fbce91e3a8eb.ad547ba1d06c9fe8
     1c73774414c40dd0.72bcfe1acb677e5a.45ffc81f3bd66fa6.be9d9199f712ea25
-    0798f4dd41d176d9.8bbffd8ab3ec0d1d.883d20c480e2fd15.339ae3bbc35f9d9b
-    0000000000000000
-VTESTPS_128_3(mem)
+    690ac47611d6ca91.6b12ba8a55cff726.cb18fbce91e3a8eb.8000000000000000
+    e616edf44e5e7575
+VROUNDPD_256_0x4(mem)
   before
     b4df2b2eb41c2de0.85c735ad328a4158.90e932c628685d9a.f21e002bfb9490e3
     79c01a5712a48307.f44a3820837aaaf8.5e0419ba46ea2dfd.dded63bf487762bd
@@ -31504,10 +31504,10 @@
     b4df2b2eb41c2de0.85c735ad328a4158.90e932c628685d9a.f21e002bfb9490e3
     79c01a5712a48307.f44a3820837aaaf8.5e0419ba46ea2dfd.dded63bf487762bd
     1284355983023117.af6ff8a2d12eec65.d1dd2e522a7b3774.a6f845ec0517b04e
-    59f8f8222442f43c.1280729fb731444d.c63fee7af0293828.aa89a21ecb01b543
-    0000000000000001
+    8000000000000000.8000000000000000.8000000000000000.f21e002bfb9490e3
+    43ed77c138c0af48
 
-VTESTPS_128_3(reg)
+VROUNDSS_0x0(reg)
   before
     ce70be42e7e0d808.2be8df9d107187a1.79caa083d20fee5a.17f8d31fb3ffeb48
     a75d750b75ee6d30.642067b6649ba773.3f9880babd542538.a1d25b2b8f0a0efe
@@ -31518,9 +31518,9 @@
     ce70be42e7e0d808.2be8df9d107187a1.79caa083d20fee5a.17f8d31fb3ffeb48
     a75d750b75ee6d30.642067b6649ba773.3f9880babd542538.a1d25b2b8f0a0efe
     2b0298897e75a96b.e06c0a593bca10dd.c2380db1158d2694.409b018ca1555b76
-    b4a921299d01c966.7b974672b20c7e0c.5df544d275452d1a.d01d422c05ec8fde
-    0000000000000000
-VTESTPS_128_3(mem)
+    0000000000000000.0000000000000000.c2380db1158d2694.409b018c80000000
+    2d2598f9d5dc655f
+VROUNDSS_0x0(mem)
   before
     337f81de30309a28.9fa00e566e1f09cd.116f97eee46cac2c.6b1a1f8b79097575
     bef678c72ff4ea63.4831597b8e5aa54b.7ebe77b7edf75768.4af49c47be643c52
@@ -31531,10 +31531,10 @@
     337f81de30309a28.9fa00e566e1f09cd.116f97eee46cac2c.6b1a1f8b79097575
     bef678c72ff4ea63.4831597b8e5aa54b.7ebe77b7edf75768.4af49c47be643c52
     aa58f9a0f135113c.0ba90006983ed88d.9e5164baeab83bed.54cfb671e0e2bc5d
-    d36f81558ffdcae0.4453ff622958df3e.4df4d8e4f7bb14e6.e7f769777a103141
-    0000000000000001
+    0000000000000000.0000000000000000.c2380db1158d2694.409b018c79097575
+    5db8b1c42879d9ab
 
-VTESTPS_128_3(reg)
+VROUNDSS_0x0(reg)
   before
     145d8bc487a9ee46.14088ad2285bd27b.4f7d50fbdc33f60b.677351202f0d9d80
     6634f2e4332dadbf.4bef9203d558e539.8871f13d4e5c58a0.c7994b59aeb993e7
@@ -31545,9 +31545,9 @@
     145d8bc487a9ee46.14088ad2285bd27b.4f7d50fbdc33f60b.677351202f0d9d80
     6634f2e4332dadbf.4bef9203d558e539.8871f13d4e5c58a0.c7994b59aeb993e7
     b187e28ec79051c1.53f014d5b402bf45.4b7ddd951a5d43a8.4b34407d91cbb146
-    4fa3572fdf5e18f9.08d78d32e1651bcb.f4eb106ddcc5f1d0.ce0eae77f350b5ca
-    0000000000000001
-VTESTPS_128_3(mem)
+    0000000000000000.0000000000000000.4b7ddd951a5d43a8.4b34407d80000000
+    2cf41033f153599e
+VROUNDSS_0x0(mem)
   before
     41b2e29da6e05aef.9dd44d3418243c13.46707708778cb6f8.de088632311d9ec3
     e814a0a12f0473e9.f865c1070d6dfaba.e886504193834cf8.67203c51b5f3882e
@@ -31558,10 +31558,10 @@
     41b2e29da6e05aef.9dd44d3418243c13.46707708778cb6f8.de088632311d9ec3
     e814a0a12f0473e9.f865c1070d6dfaba.e886504193834cf8.67203c51b5f3882e
     ffe6c72ca7ca62b7.baa4ae165bc58d9b.cce693cb505698f6.ea7e2d3403d2e9bd
-    60f3d2282b3ee185.40dc10cb9db93261.cd5cbc91ca12571f.c3705549b747fe1b
-    0000000000000001
+    0000000000000000.0000000000000000.4b7ddd951a5d43a8.4b34407d00000000
+    4e40b0fb6edc02f5
 
-VTESTPS_128_3(reg)
+VROUNDSS_0x0(reg)
   before
     e63c3ab6c42032f6.e9093d82d66dac81.e658e39470d425b9.c6b4477f1ec2459f
     e9aef0e6549ccacb.75f28427c56281d5.096524dc6fa2a24f.95bab18168721ea1
@@ -31572,9 +31572,9 @@
     e63c3ab6c42032f6.e9093d82d66dac81.e658e39470d425b9.c6b4477f1ec2459f
     e9aef0e6549ccacb.75f28427c56281d5.096524dc6fa2a24f.95bab18168721ea1
     b2e2cdf7bade061f.df7b2302132a1aad.034fce0f36b0e4ce.143a7583c22f9d51
-    9c26cd559371229f.057097feddcf3436.3162dd99628928e3.21ff0f714b047fdd
-    0000000000000040
-VTESTPS_128_3(mem)
+    0000000000000000.0000000000000000.034fce0f36b0e4ce.143a758368721ea1
+    96d7fb371dfd806f
+VROUNDSS_0x0(mem)
   before
     518cb6c254275b33.05c5ec6c7ae259f7.c19d5b093e608a9c.efe94de78fb9aa3a
     2cebbafc0d8dcd56.470a27a80cbce8d2.f0cdeb0e52e6da0a.99321a6358cda57e
@@ -31585,10 +31585,10 @@
     518cb6c254275b33.05c5ec6c7ae259f7.c19d5b093e608a9c.efe94de78fb9aa3a
     2cebbafc0d8dcd56.470a27a80cbce8d2.f0cdeb0e52e6da0a.99321a6358cda57e
     04c085d3633c9204.c0437876e48b0add.6fcec3f9366fdead.8b87417a5a50575b
-    b6d69231733f6668.cabadd409fdcfcc4.186a60b6060652b0.2135bd9930cefa7e
-    0000000000000040
+    0000000000000000.0000000000000000.034fce0f36b0e4ce.143a758380000000
+    b7898a2a76d4ca93
 
-VTESTPS_128_3(reg)
+VROUNDSS_0x1(reg)
   before
     a9cca49bc9ed0545.1cfb5e0458a204af.c3bc5274d83afa32.c96e3d32ddb7f440
     534d0857c4a6e541.13f963372e712904.0594d17d2c3140d3.5ca6d657d78f7e89
@@ -31599,9 +31599,9 @@
     a9cca49bc9ed0545.1cfb5e0458a204af.c3bc5274d83afa32.c96e3d32ddb7f440
     534d0857c4a6e541.13f963372e712904.0594d17d2c3140d3.5ca6d657d78f7e89
     1157b0ca048aa633.789e1fb612b99194.ee9058c6364d0a55.aedea7121199adb6
-    3f359a5f242586c6.25b40d6d2085f78b.d8fbe2bd921b9362.9be22c50a6e23cf4
-    0000000000000001
-VTESTPS_128_3(mem)
+    0000000000000000.0000000000000000.ee9058c6364d0a55.aedea712d78f7e89
+    007de2fbb375e96f
+VROUNDSS_0x1(mem)
   before
     b77c4401535e6e52.3834c285c103bfa7.f708aa4873e21814.20206bcddd2718a6
     9dacce4da3aa88c9.5aa022a576b18e81.ca65703328dbb05c.224cef62b3fbd4ce
@@ -31612,10 +31612,10 @@
     b77c4401535e6e52.3834c285c103bfa7.f708aa4873e21814.20206bcddd2718a6
     9dacce4da3aa88c9.5aa022a576b18e81.ca65703328dbb05c.224cef62b3fbd4ce
     8ed7fccbbe63f201.00c5b82ce0ba2f01.7a99dd1b597c7b8f.3bcb6ae9af250586
-    66ca4b67c1986926.86ef7e869aabddd3.e36e6cea25d234d8.c5e9d9cc6d31e579
-    0000000000000000
+    0000000000000000.0000000000000000.ee9058c6364d0a55.aedea712dd2718a6
+    1df237788aaab054
 
-VTESTPS_128_3(reg)
+VROUNDSS_0x1(reg)
   before
     9f31805aa21ca4c2.0150350dc752a964.476a7220410fd5a2.e1b2998ea6e79863
     a7f4b1dc5013fb70.3b3738a9ed9f6ee6.a18190647072531b.502fe0f1f8ca635d
@@ -31626,9 +31626,9 @@
     9f31805aa21ca4c2.0150350dc752a964.476a7220410fd5a2.e1b2998ea6e79863
     a7f4b1dc5013fb70.3b3738a9ed9f6ee6.a18190647072531b.502fe0f1f8ca635d
     9285c46c301cf20a.f049cf274e8a73d8.ef82d2c0c46093e9.0cb2be01388451f2
-    ba31b775dfc2c53b.fc54777406207567.8cb7369ed866d0b9.f107ada981231d4d
-    0000000000000001
-VTESTPS_128_3(mem)
+    0000000000000000.0000000000000000.ef82d2c0c46093e9.0cb2be01f8ca635d
+    dbf92bd5f0b3849b
+VROUNDSS_0x1(mem)
   before
     a656b471a03e4108.7c448563f891afb0.3b22aa7a326c30bf.d66db76c48104736
     2ee8c269aed212bf.340a2aa11816ed14.8980e626ee7a600c.27f05195b1e8340d
@@ -31639,10 +31639,10 @@
     a656b471a03e4108.7c448563f891afb0.3b22aa7a326c30bf.d66db76c48104736
     2ee8c269aed212bf.340a2aa11816ed14.8980e626ee7a600c.27f05195b1e8340d
     4f7cd3a9357ab1ed.3ecea39edadcbb14.c239a6655557c078.dd8b0085af7cd2ea
-    e5de621d5243dbbd.f6deeac3db70545c.c21b6722830e0d32.528cc1a8dd575e78
-    0000000000000040
+    0000000000000000.0000000000000000.ef82d2c0c46093e9.0cb2be0148104700
+    e43d8f6ad7061464
 
-VTESTPS_128_3(reg)
+VROUNDSS_0x1(reg)
   before
     edec66383a14305a.ccdaebb220384b5c.b884fd7db65cf597.64f0a34995ab0264
     cae3427ca10ded05.df3cea52bc65bff6.df0dd738072eda72.8686d8c6a73b5d3b
@@ -31653,9 +31653,9 @@
     edec66383a14305a.ccdaebb220384b5c.b884fd7db65cf597.64f0a34995ab0264
     cae3427ca10ded05.df3cea52bc65bff6.df0dd738072eda72.8686d8c6a73b5d3b
     d86e1fa3a97e8811.fcd0dbeb41d7f0b6.c9c575616b723f98.03a78185d3c9d8e2
-    71dbfa1aedf23d2c.fe613b67cb999dc9.d1f8d1627eb35fb6.b7201a7238613086
-    0000000000000000
-VTESTPS_128_3(mem)
+    0000000000000000.0000000000000000.c9c575616b723f98.03a78185bf800000
+    7dbd1f79ef102053
+VROUNDSS_0x1(mem)
   before
     33490d8617e16674.f275ce4c0af547ff.c0bc85b477b8815a.53f2e9a9db7d7878
     b3925f86c9e1bc16.b88797a49b14e339.20ad35bd613e5796.abfeb8a01e5cc389
@@ -31666,10 +31666,10 @@
     33490d8617e16674.f275ce4c0af547ff.c0bc85b477b8815a.53f2e9a9db7d7878
     b3925f86c9e1bc16.b88797a49b14e339.20ad35bd613e5796.abfeb8a01e5cc389
     db629163241ade64.1d5f51903dda4d84.f900c86ea439dca8.346a3ab5e4dd7f95
-    86871f0b419a8a8b.7e47f97b8bd3c18d.2681b8b35cb5cbbd.4c806c53c98be64a
-    0000000000000000
+    0000000000000000.0000000000000000.c9c575616b723f98.03a78185db7d7878
+    4e8d49e668f33552
 
-VTESTPS_128_3(reg)
+VROUNDSS_0x2(reg)
   before
     95ddccda5da0a859.8fcb85683e6d7ab6.378c8ad1228c7aff.85fc8378a6bde101
     7fbbf39b451e7a0c.d4fb4068379e6b12.a47a00fe9d90b587.f03ca4a99d5dda9f
@@ -31680,9 +31680,9 @@
     95ddccda5da0a859.8fcb85683e6d7ab6.378c8ad1228c7aff.85fc8378a6bde101
     7fbbf39b451e7a0c.d4fb4068379e6b12.a47a00fe9d90b587.f03ca4a99d5dda9f
     6775ba95bbfae817.2fe2cbf6473918cb.215c576e986caed0.450f98325ea172c4
-    a8561b355cbf2e25.7d4ea2fe8a4a3f0c.0a808b8eb0aaa187.5e3fd9000596659c
-    0000000000000000
-VTESTPS_128_3(mem)
+    0000000000000000.0000000000000000.215c576e986caed0.450f983280000000
+    1999e5fdac476e52
+VROUNDSS_0x2(mem)
   before
     50e9371771c04a13.a0a914e5c3f988e3.9b09416c1dde9a02.bb3099c881d8c958
     e0fa4b39700eb40a.a9bba0138d3531fd.63e1252c1c00e5d9.90b97c8aa68263ee
@@ -31693,10 +31693,10 @@
     50e9371771c04a13.a0a914e5c3f988e3.9b09416c1dde9a02.bb3099c881d8c958
     e0fa4b39700eb40a.a9bba0138d3531fd.63e1252c1c00e5d9.90b97c8aa68263ee
     a69a9d4ec43c6964.21d8bb2955fd661e.b3a0c82aa2bddebc.e567303ebb33aaf6
-    7c93aa448a57264c.624c6295b8e063f2.6513a852cb1f3fd7.1686b1525d77dc1b
-    0000000000000040
+    0000000000000000.0000000000000000.215c576e986caed0.450f983280000000
+    7f62fc3128da330a
 
-VTESTPS_256_1(reg)
+VROUNDSS_0x2(reg)
   before
     7c460c46b6e9ec6e.3fb3ed06dd6aa4ef.c9628fc251676327.56054191b435c558
     6980ddffa62f42f5.cbc4e280da81a279.b368401cbc20a367.62440dd178082b68
@@ -31707,9 +31707,9 @@
     7c460c46b6e9ec6e.3fb3ed06dd6aa4ef.c9628fc251676327.56054191b435c558
     6980ddffa62f42f5.cbc4e280da81a279.b368401cbc20a367.62440dd178082b68
     a25a6bc792397248.fd93059e9ca9da15.7aa8700f96975f5e.669b8a0034a62f36
-    8221b20b1691b816.afebd24d3fec09f0.7b6f1b077b56d3b9.3cd53309041a8bec
-    0000000000000000
-VTESTPS_256_1(mem)
+    0000000000000000.0000000000000000.7aa8700f96975f5e.669b8a0078082b68
+    c1bf84d70271fcb6
+VROUNDSS_0x2(mem)
   before
     d125f9584cb63dc2.6721af35cfc65009.be9ac677e059ea35.13093e7006eb3a24
     48d30e77fef50b39.aca65db2586175cd.066a5c099bf93b11.9cc2d4b6d3e2d14a
@@ -31720,10 +31720,10 @@
     d125f9584cb63dc2.6721af35cfc65009.be9ac677e059ea35.13093e7006eb3a24
     48d30e77fef50b39.aca65db2586175cd.066a5c099bf93b11.9cc2d4b6d3e2d14a
     02954020333a224a.adfcb8ee4df0650f.632910f08bdab6b0.73e6d9467fc5d4d8
-    db360a3f08923e1f.c56ebc564cfe597b.b1a15e16cc07183d.f4c0498aa6227f79
-    0000000000000000
+    0000000000000000.0000000000000000.7aa8700f96975f5e.669b8a003f800000
+    7b9e20f0e2850dda
 
-VTESTPS_256_1(reg)
+VROUNDSS_0x2(reg)
   before
     64ca5be2d279bba7.af84e8c198091ae4.52496555ee1890bc.cc9fc3697b8d1ce5
     0b91f5ce108ac48b.5a49579000a973c7.aedab056d1c9447f.90efbad4b3777fd3
@@ -31734,9 +31734,9 @@
     64ca5be2d279bba7.af84e8c198091ae4.52496555ee1890bc.cc9fc3697b8d1ce5
     0b91f5ce108ac48b.5a49579000a973c7.aedab056d1c9447f.90efbad4b3777fd3
     cc3fea1f38446633.b852d19a5b8005f1.376b98c7919db270.d95cbf4391d1fd34
-    04203641e734db4a.a56bd4c9c5998c91.48481913c921163a.83b44ea230a85234
-    0000000000000000
-VTESTPS_256_1(mem)
+    0000000000000000.0000000000000000.376b98c7919db270.d95cbf4380000000
+    6ac1e3ddad0739fe
+VROUNDSS_0x2(mem)
   before
     6a50fbe023fa6fbf.0c80d5a0b8e55f7d.fd60db0b5b01c3d1.3cbf2fa615dfab8a
     5e2d1197af8eb0a2.43aac4a847e33078.9cfc624a38c367dd.701bd7ec1266af0b
@@ -31747,10 +31747,10 @@
     6a50fbe023fa6fbf.0c80d5a0b8e55f7d.fd60db0b5b01c3d1.3cbf2fa615dfab8a
     5e2d1197af8eb0a2.43aac4a847e33078.9cfc624a38c367dd.701bd7ec1266af0b
     2424a1ef6cceb8d4.04ebfec532bb88e6.5d0de67479eb33e2.41a70c515b3f5b6a
-    970127d276c64280.ab8f7f6312f8a474.1e5de2743a86e50c.09b0ca418df8ee52
-    0000000000000000
+    0000000000000000.0000000000000000.376b98c7919db270.d95cbf433f800000
+    26820d29441da270
 
-VTESTPS_256_1(reg)
+VROUNDSS_0x3(reg)
   before
     f269d2731b38b470.9390202eea830bd4.94e243ef8527c0cd.bab9d236969f3786
     cab1138daed760fd.f39c07ede410cff9.1b3047d327d3179e.0ded32a6a943e67d
@@ -31761,9 +31761,9 @@
     f269d2731b38b470.9390202eea830bd4.94e243ef8527c0cd.bab9d236969f3786
     cab1138daed760fd.f39c07ede410cff9.1b3047d327d3179e.0ded32a6a943e67d
     0ba6cee19a86e1c4.95f258fd7f79491e.9cc5867d9388e693.f2c57eb0907cad1d
-    0f93fedd7acf7570.545e8f49d8cb366d.72ecfc5865d26957.470d334166584a91
-    0000000000000000
-VTESTPS_256_1(mem)
+    0000000000000000.0000000000000000.9cc5867d9388e693.f2c57eb080000000
+    e790cb4348e37706
+VROUNDSS_0x3(mem)
   before
     ad1cc4a45127f0a7.33c5a0ecea4056ae.0bac28bd09115212.fbf3a5cf3a3edc96
     777b9a4e9d3273a1.d388ae7a8865c02a.98a8a0453157593a.92247d50ae577afe
@@ -31774,10 +31774,10 @@
     ad1cc4a45127f0a7.33c5a0ecea4056ae.0bac28bd09115212.fbf3a5cf3a3edc96
     777b9a4e9d3273a1.d388ae7a8865c02a.98a8a0453157593a.92247d50ae577afe
     1f7ac72f4910ba1f.4b2826f3edc8f18f.d51e72cd6aaa0611.93cc81465caa8039
-    83e5c93271cc824f.f7f103c3b7f8238a.a0d91a41d01516c2.5937ac1de0c22af3
-    0000000000000000
+    0000000000000000.0000000000000000.9cc5867d9388e693.f2c57eb000000000
+    42b1fa41d72bb3d9
 
-VTESTPS_256_2(reg)
+VROUNDSS_0x3(reg)
   before
     a885671fdc725897.7d881b423072865a.342f4156827e92c6.d3a7148d80a5457a
     e901f0218c2255d8.eb2e394da30e846e.5c2ddd18e9e87cf0.4c52dc9e95644e65
@@ -31786,11 +31786,11 @@
     eb7ee3a04e3ee30c
   after
     a885671fdc725897.7d881b423072865a.342f4156827e92c6.d3a7148d80a5457a
+    e901f0218c2255d8.eb2e394da30e846e.5c2ddd18e9e87cf0.4c52dc9e95644e65
     5f6f90b482c7e649.a7a59f3ee5ad36b7.cc39d17688c11bb4.e5a7ef5e2c61eeae
-    5f6f90b482c7e649.a7a59f3ee5ad36b7.cc39d17688c11bb4.e5a7ef5e2c61eeae
-    681c43455bed4696.8eb7ca01125a5861.e09d1bdafc95acbd.7b72c8bb60a5e181
-    0000000000000001
-VTESTPS_256_2(mem)
+    0000000000000000.0000000000000000.cc39d17688c11bb4.e5a7ef5e80000000
+    eb7ee3a04e3ee30c
+VROUNDSS_0x3(mem)
   before
     0f99bdf81137af78.5e54053fb221b26a.7d3134834722a897.f4a6b6b2e1f16bb8
     c48dd0b1c69d02f4.9f63d20d24ef6671.4edf5bae9f10e086.64a09e69d2609350
@@ -31799,12 +31799,12 @@
     732bffff079ade83
   after
     0f99bdf81137af78.5e54053fb221b26a.7d3134834722a897.f4a6b6b2e1f16bb8
-    f0664207eec85087.a1abfac04dde4d95.82cecb7cb8dd5768.0b59494d1e0e9447
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
-    523496f373dd2cc6.6d357fdac68594cc.0907ceb32b8efa3d.c796472349a8110a
-    0000000000000040
+    c48dd0b1c69d02f4.9f63d20d24ef6671.4edf5bae9f10e086.64a09e69d2609350
+    e7289ab6887a98aa.8595a71d4ce19d59.de8dbb6f3730bd59.8bd7d06a6b6f6132
+    0000000000000000.0000000000000000.cc39d17688c11bb4.e5a7ef5ee1f16bb8
+    732bffff079ade83
 
-VTESTPS_256_2(reg)
+VROUNDSS_0x3(reg)
   before
     ebe0f46a42ce064a.e27e4054a4cf7b76.b49056b02f678776.ac1812659537555d
     8b0222d095d2c30a.73d115c6375e41e4.b4f3280b2311b204.a18e0170943688e6
@@ -31813,11 +31813,11 @@
     0a3db2e81bb28dad
   after
     ebe0f46a42ce064a.e27e4054a4cf7b76.b49056b02f678776.ac1812659537555d
+    8b0222d095d2c30a.73d115c6375e41e4.b4f3280b2311b204.a18e0170943688e6
     aedd869e9d315170.e1fb8f3347953a3c.caa8f2573d115022.c5331ac241985004
-    aedd869e9d315170.e1fb8f3347953a3c.caa8f2573d115022.c5331ac241985004
-    b2bd1b3ef578ee28.08c62c88f08121ab.53fcae0119f39e7b.f4d4d646bb6868e2
-    0000000000000001
-VTESTPS_256_2(mem)
+    0000000000000000.0000000000000000.caa8f2573d115022.c5331ac280000000
+    0a3db2e81bb28dad
+VROUNDSS_0x3(mem)
   before
     e3392b947f837b90.f2eddd1d3a31d4dd.c50067b24f2db35d.a93a5a735441d8bc
     5b96bc3603e6eeb8.cabbc8a807eb403b.f273bd9b80a5ac7d.29b0f11a8a893990
@@ -31826,12 +31826,12 @@
     3d51128721b2a43b
   after
     e3392b947f837b90.f2eddd1d3a31d4dd.c50067b24f2db35d.a93a5a735441d8bc
-    1cc6d46b807c846f.0d1222e2c5ce2b22.3aff984db0d24ca2.56c5a58cabbe2743
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
-    989f170dd9925186.b15c0a6eab8b98a6.0f37a65fc52bc2b9.176fd1b9543563a4
-    0000000000000040
+    5b96bc3603e6eeb8.cabbc8a807eb403b.f273bd9b80a5ac7d.29b0f11a8a893990
+    4e1ee1bac2e7a151.9571d849f92f6df0.6ceca8319df6c838.2fa870635557fea4
+    0000000000000000.0000000000000000.caa8f2573d115022.c5331ac25441d8bc
+    3d51128721b2a43b
 
-VTESTPS_256_2(reg)
+VROUNDSS_0x4(reg)
   before
     fd9a2e3b5857fc16.15e3d81963f4ba84.78c85982b98afd09.b61f32111250572d
     b396224096b2a8e0.a1b7a2cc7c199876.4801c1f1c0b9d8c6.3f72c833a07142bf
@@ -31840,11 +31840,11 @@
     b8dca071eb3866e7
   after
     fd9a2e3b5857fc16.15e3d81963f4ba84.78c85982b98afd09.b61f32111250572d
+    b396224096b2a8e0.a1b7a2cc7c199876.4801c1f1c0b9d8c6.3f72c833a07142bf
     bb91e802764ee446.18e6f010410ba689.7b533f275ca36589.85fae5b18c9b419d
-    bb91e802764ee446.18e6f010410ba689.7b533f275ca36589.85fae5b18c9b419d
-    71d67eed94b7ecf4.563e3ed3ced8a1e8.6f09cd9028d4dffd.64840377f1da0ef0
-    0000000000000001
-VTESTPS_256_2(mem)
+    0000000000000000.0000000000000000.7b533f275ca36589.85fae5b180000000
+    b8dca071eb3866e7
+VROUNDSS_0x4(mem)
   before
     5dce378c98c304ac.31b3df6e8e7afb95.368909003e8c44c1.7e716998c0d983cf
     2e2645b21187a56b.577207effd224ed6.9695cb83ad314d3d.06d50eabc13d8cab
@@ -31853,12 +31853,12 @@
     04e70c604e1d632f
   after
     5dce378c98c304ac.31b3df6e8e7afb95.368909003e8c44c1.7e716998c0d983cf
-    a231c873673cfb53.ce4c20917185046a.c976f6ffc173bb3e.818e96673f267c30
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
-    c937b2d3dde6e08a.45c99da5b053afe6.431b2a3bfa847cd5.ecc464a36c53c12e
-    0000000000000040
+    2e2645b21187a56b.577207effd224ed6.9695cb83ad314d3d.06d50eabc13d8cab
+    09b044d1748e0551.3f60f2dd7f3c2162.512c024838d5768b.6182b836c68c383c
+    0000000000000000.0000000000000000.7b533f275ca36589.85fae5b1c0e00000
+    04e70c604e1d632f
 
-VTESTPS_256_3(reg)
+VROUNDSS_0x4(reg)
   before
     0336aed709765ce8.4a880aa6679bf241.c5f802b12bf3350e.472ebd4810481a47
     46ff457638ebe608.6770c8352eb8f6a3.1a3b1f6f8ca8ef85.3b30385b952f0e0e
@@ -31869,9 +31869,9 @@
     0336aed709765ce8.4a880aa6679bf241.c5f802b12bf3350e.472ebd4810481a47
     46ff457638ebe608.6770c8352eb8f6a3.1a3b1f6f8ca8ef85.3b30385b952f0e0e
     298ccea878073e39.feb8686c4f49a9dc.a2dcf04a70ff18f7.faef1861a6451256
-    092a43d964569f27.e92f6737e65ac617.b8286fae7383ee12.5f35d8445e95e24a
-    0000000000000040
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.a2dcf04a70ff18f7.faef186180000000
+    48d0f4f2da2b3c17
+VROUNDSS_0x4(mem)
   before
     8f8ae9553513dae9.4025a27599654780.06a040820df80a81.b76b9a0730c1ab80
     1230325b8b5a79eb.2bc9e6e8b2bf70ee.2fd66f39e32e3145.fdf16cc143448bed
@@ -31882,10 +31882,10 @@
     8f8ae9553513dae9.4025a27599654780.06a040820df80a81.b76b9a0730c1ab80
     1230325b8b5a79eb.2bc9e6e8b2bf70ee.2fd66f39e32e3145.fdf16cc143448bed
     ab8d4aeff90bd449.26620b9e4bf0571d.429f70498208f790.e506e1484998cc06
-    386fb0fd9b32a931.8d3b0e03018537ba.19c5c09c0693188d.caf6f508dd4aa877
-    0000000000000000
+    0000000000000000.0000000000000000.a2dcf04a70ff18f7.faef186100000000
+    0a0ca56d9ce45ceb
 
-VTESTPS_256_3(reg)
+VROUNDSS_0x4(reg)
   before
     ff95ebe421f5230f.93a0dd718cdcb2cd.bca2e98470094d71.9215d91f8cda4f69
     07ddc5d709063b8f.99ee4e37e814ab49.0fe19a8b3309d5ed.875b39bf2fea5950
@@ -31896,9 +31896,9 @@
     ff95ebe421f5230f.93a0dd718cdcb2cd.bca2e98470094d71.9215d91f8cda4f69
     07ddc5d709063b8f.99ee4e37e814ab49.0fe19a8b3309d5ed.875b39bf2fea5950
     7c302eb4efa5de16.2723803bcce752d2.e2451c86e60f0bda.d5625c670ccef16d
-    bcda23e6705e4850.170cee6a54606194.911a6cdf26a92ae6.59f8bc023e92d4ed
-    0000000000000040
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.e2451c86e60f0bda.d5625c6700000000
+    ede7d77ee142befc
+VROUNDSS_0x4(mem)
   before
     6efd27c612eb6bc5.21279fd827bbb7eb.467514ae9a8b95ba.78ab84048f636fbb
     b8042ac6ed989774.08629df8b04a6591.90296ff5bd74a971.f3466260bbc81605
@@ -31909,10 +31909,10 @@
     6efd27c612eb6bc5.21279fd827bbb7eb.467514ae9a8b95ba.78ab84048f636fbb
     b8042ac6ed989774.08629df8b04a6591.90296ff5bd74a971.f3466260bbc81605
     a8c95c6a8d56fd36.ced91bb1a8968fee.d2f67929d7285be4.5d35015f49645b72
-    1817379f0f305a37.cdd6156fab2c70af.e6a6b03804b26540.14c65d6dd2c379ab
-    0000000000000000
+    0000000000000000.0000000000000000.e2451c86e60f0bda.d5625c6780000000
+    734372f6f572ad5f
 
-VTESTPS_256_3(reg)
+VROUNDSS_0x5(reg)
   before
     d6f93d664bfc3338.e5bc394f8e3269a3.62a6859f54974680.a9068f0d611f84b1
     9834b92a73ee46e2.eb82dd672668e8a5.e99569ab3f644b0c.f7e29393097a7362
@@ -31923,9 +31923,9 @@
     d6f93d664bfc3338.e5bc394f8e3269a3.62a6859f54974680.a9068f0d611f84b1
     9834b92a73ee46e2.eb82dd672668e8a5.e99569ab3f644b0c.f7e29393097a7362
     173fe2ac06d3230a.06379fd4f4df9169.bfeebc00091dbc00.ac0636b818cfef80
-    ae68b45aa237065c.12a5fb8113a3211c.3eff7a0b4d50d407.a43ef668ac2bb436
-    0000000000000000
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.bfeebc00091dbc00.ac0636b800000000
+    bb554e8dde997eb1
+VROUNDSS_0x5(mem)
   before
     cd19ba14cc25081d.b8f92c9ee3a72a83.eb996e59a0be53ea.c3129f36a889d0ce
     b654b6e992dc0fa5.933f44e664aecd2c.6ddf724ab63ee4ff.aa7528efb652ec01
@@ -31936,10 +31936,10 @@
     cd19ba14cc25081d.b8f92c9ee3a72a83.eb996e59a0be53ea.c3129f36a889d0ce
     b654b6e992dc0fa5.933f44e664aecd2c.6ddf724ab63ee4ff.aa7528efb652ec01
     52d3bff94bc84f76.9a86fa9dc2d82903.7442853f722e9086.4f7210a11139644b
-    7d62502e13f884bb.281a492f98b17ab3.dc902324ef9b13ab.0e5653b858ca7359
-    0000000000000000
+    0000000000000000.0000000000000000.bfeebc00091dbc00.ac0636b880000000
+    436ced9f249056d6
 
-VTESTPS_256_3(reg)
+VROUNDSS_0x5(reg)
   before
     4a02dbc51417496f.13cde576077569a1.9b472e0882c6fee8.8193c6e54a90289b
     7f631793c1eb87d0.f0e0fabc434dbb54.4d58a3941da3ef50.3f18ec6e9e198c82
@@ -31950,9 +31950,9 @@
     4a02dbc51417496f.13cde576077569a1.9b472e0882c6fee8.8193c6e54a90289b
     7f631793c1eb87d0.f0e0fabc434dbb54.4d58a3941da3ef50.3f18ec6e9e198c82
     3eda9f76c9994ea4.f0660cebe28c35ff.9c9ba63f04d28a95.f1ec10ab0843fb8b
-    e3b46edac8acd898.ee2c95f1003c95cf.e25a3275d4e10a63.75d8ae89a31931e3
-    0000000000000001
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.9c9ba63f04d28a95.f1ec10ab80000000
+    a6ab42f28ca7e9b6
+VROUNDSS_0x5(mem)
   before
     603049d4defae02f.ca3d812c59b16157.c8fe13b9ba6b95ef.7ce243a2295bad67
     7e323d19b51dd27b.4fc1d2d61932278e.59a8012f2b25f28c.c77fd6339dcdad4d
@@ -31963,10 +31963,10 @@
     603049d4defae02f.ca3d812c59b16157.c8fe13b9ba6b95ef.7ce243a2295bad67
     7e323d19b51dd27b.4fc1d2d61932278e.59a8012f2b25f28c.c77fd6339dcdad4d
     de7e9caf2e1d7ac5.cd8c5f46a3be64e8.7cf6dc40707567d1.1d7de592cfc247c0
-    5be1e1816504953a.a2e923e693de5513.0fb41ed6a467b2eb.db276e2d58c6b66d
-    0000000000000000
+    0000000000000000.0000000000000000.9c9ba63f04d28a95.f1ec10ab00000000
+    5dcb6c6fd76637ff
 
-VTESTPS_256_3(reg)
+VROUNDSS_0x5(reg)
   before
     00b3dcc4e52d0623.d024897b75e0df06.29251a24862035b8.edae45dee4078d06
     1e2cb89820a85f85.1b160e897abd1454.bd8d416b180f4186.f1afcc454b62b44d
@@ -31977,9 +31977,9 @@
     00b3dcc4e52d0623.d024897b75e0df06.29251a24862035b8.edae45dee4078d06
     1e2cb89820a85f85.1b160e897abd1454.bd8d416b180f4186.f1afcc454b62b44d
     1482fe5724617dd0.1682ee9791a5ef50.bc6b9227e338b527.f9842ff5f683e5ed
-    3e01a96d8ce69db1.9f33a491d5a72d28.810c0bc48626cd47.dff9ebdc0076da12
-    0000000000000001
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.bc6b9227e338b527.f9842ff54b62b44d
+    81da7ae5854850e7
+VROUNDSS_0x5(mem)
   before
     b9f35afca2040299.f8f5b546f5c3fbd3.90f7ad6463cc8a05.67bba7ae9b65c493
     650f060d73b7ae53.9ea91f4efa82d2e3.c79883fa5722c116.ccc66351be81d8b7
@@ -31990,10 +31990,10 @@
     b9f35afca2040299.f8f5b546f5c3fbd3.90f7ad6463cc8a05.67bba7ae9b65c493
     650f060d73b7ae53.9ea91f4efa82d2e3.c79883fa5722c116.ccc66351be81d8b7
     5ffcfb04136b0e42.8c6ae1f237b2608d.1ee3a441cbb48f85.0b77391a8c07425e
-    8484b3cd9e2fde91.1e85f99c49dcde7c.73a48b23de8eb07f.7f1c2773a0834135
-    0000000000000000
+    0000000000000000.0000000000000000.bc6b9227e338b527.f9842ff580000000
+    85ff28ca977f0fe8
 
-VTESTPS_256_3(reg)
+VROUNDSD_0x0(reg)
   before
     7a6d38890c89e922.b174ac54310cdc6d.b04462bacc8e8b5d.a0a6b48ea9bde02f
     b8b1541e9b2c0b8f.c0986185e810c202.9ef319b65b53a1db.82b79b6d4a4cdac2
@@ -32004,9 +32004,9 @@
     7a6d38890c89e922.b174ac54310cdc6d.b04462bacc8e8b5d.a0a6b48ea9bde02f
     b8b1541e9b2c0b8f.c0986185e810c202.9ef319b65b53a1db.82b79b6d4a4cdac2
     9d1976f4e2f5b1dd.8ebc4e4dde464d7b.44e018fe92b75ea3.f6a1bdabdd485b63
-    83f09c777a6f16b5.f8acf0962fbb3805.fe565dfd0e47fb61.d63295367dbc1f3f
-    0000000000000000
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.44e018fe92b75ea3.8000000000000000
+    ff349ff947b4e182
+VROUNDSD_0x0(mem)
   before
     4d7457e1563c5e57.c781c113012677c6.d833c14ef87941cb.28a0e31f6a8eb7c0
     9cbd39d8c66152eb.c619e13413a70fba.0b1f3f5f548f22fa.1e0ba6d04319cc6d
@@ -32017,10 +32017,10 @@
     4d7457e1563c5e57.c781c113012677c6.d833c14ef87941cb.28a0e31f6a8eb7c0
     9cbd39d8c66152eb.c619e13413a70fba.0b1f3f5f548f22fa.1e0ba6d04319cc6d
     c8ddc2cbb42f7969.da04f9464b7d1b3e.6d3ae5b7600698be.3be4a27c34737713
-    ae9e6da73cb08efe.608e04b54534d8fd.da51304137ec5e42.dd75d48fda28f45f
-    0000000000000000
+    0000000000000000.0000000000000000.44e018fe92b75ea3.0000000000000000
+    5f0a3776d0c47efd
 
-VTESTPS_256_3(reg)
+VROUNDSD_0x0(reg)
   before
     1cf1c79bb3d45298.28ceb65679f24ed6.b403feee9e597fa4.2e309ae9f64c31b3
     7274806b1ee3acdc.133719c68700751c.33aee35bf1774fde.45a2a19bb833cd3c
@@ -32031,9 +32031,9 @@
     1cf1c79bb3d45298.28ceb65679f24ed6.b403feee9e597fa4.2e309ae9f64c31b3
     7274806b1ee3acdc.133719c68700751c.33aee35bf1774fde.45a2a19bb833cd3c
     bce15f53ad7ec877.4ba613e183e7bffd.37ddaf6adb1b8258.fb75c04399acee0a
-    55825ebefd30e113.ace71f9588b2e7a4.1dda5f85f8cf55be.2c7373ceb7c34f49
-    0000000000000001
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.37ddaf6adb1b8258.45a2a19bb833cd3c
+    b46a36262b85ad24
+VROUNDSD_0x0(mem)
   before
     6f24863813fdc4c8.9ba47b18aa85345c.12c5b9cdb36daa3e.41f2ed1ae22103bb
     396edef18b375060.e893b1cc4f0afdff.590e5d751f25c3f7.ff715794389dcafc
@@ -32044,10 +32044,10 @@
     6f24863813fdc4c8.9ba47b18aa85345c.12c5b9cdb36daa3e.41f2ed1ae22103bb
     396edef18b375060.e893b1cc4f0afdff.590e5d751f25c3f7.ff715794389dcafc
     ee13ba3bae400c19.9a9afd48884a77a8.5c8c8779e9e5f0fa.b3a3995f93cee42c
-    6ae196049823b51f.0b0759f8f2d1df02.f90cb4c52cb9eb74.b9d3ade792408ef8
-    0000000000000000
+    0000000000000000.0000000000000000.37ddaf6adb1b8258.41f2ed1ae2200000
+    6d4f9198ce7f030c
 
-VTESTPS_256_3(reg)
+VROUNDSD_0x0(reg)
   before
     2b6140dee5188013.89a3ef3766ec069d.9924c346292c71ba.0b5b5f4605ae7190
     4f56b625739641ba.26243fc033a8bdc0.9e3f369fc8e6697c.6e4204e68fcf3d7b
@@ -32058,9 +32058,9 @@
     2b6140dee5188013.89a3ef3766ec069d.9924c346292c71ba.0b5b5f4605ae7190
     4f56b625739641ba.26243fc033a8bdc0.9e3f369fc8e6697c.6e4204e68fcf3d7b
     347aefda138682ac.1f31048b1c6294b3.78a2ae6f6b8b02f3.fe901f92e6280c61
-    3819e86762727e96.4f96b9843c2648a3.819a2823afa879cb.96102d3728c69a6d
-    0000000000000000
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.78a2ae6f6b8b02f3.6e4204e68fcf3d7b
+    148da9c06eb4a3cb
+VROUNDSD_0x0(mem)
   before
     53d40f18d6fee3a9.b67f9c3afbe97323.911fdb97b00194bc.16729f252fc70ab1
     2eb2db2d7cb11531.0af707be7a749a01.c398e4b093fe3629.93780fe38877f051
@@ -32071,10 +32071,10 @@
     53d40f18d6fee3a9.b67f9c3afbe97323.911fdb97b00194bc.16729f252fc70ab1
     2eb2db2d7cb11531.0af707be7a749a01.c398e4b093fe3629.93780fe38877f051
     83f189ea7ad8f68f.90cf255e7ca132d9.c0cc52bc0229e716.55f674c855426857
-    2c5d963bef7f41f0.a351f2889dfb755a.6388a0a5188f66b1.b63aca3f33b4ae6e
-    0000000000000000
+    0000000000000000.0000000000000000.78a2ae6f6b8b02f3.0000000000000000
+    138e0db6bd59fe42
 
-VTESTPS_256_3(reg)
+VROUNDSD_0x1(reg)
   before
     c83f3a9890be9381.07c47d0cf5b3b380.a1ca6ba7770fa02e.8a994a59f23b6e24
     31994c52476eaad4.eef0ba49a87f086a.e5868b27a968ef01.0fc9cdc3ab39ba9b
@@ -32085,9 +32085,9 @@
     c83f3a9890be9381.07c47d0cf5b3b380.a1ca6ba7770fa02e.8a994a59f23b6e24
     31994c52476eaad4.eef0ba49a87f086a.e5868b27a968ef01.0fc9cdc3ab39ba9b
     aae73f4e7ef57fea.bfafc9df25f0fcdb.cad14e74cd929d80.d0e5a3ce60960743
-    907710f9d2e04e6d.54cb27b887104bff.aef6b0fb7f19e757.a7b84a682c5d1048
-    0000000000000000
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.cad14e74cd929d80.0000000000000000
+    72103d7c2b9b92d5
+VROUNDSD_0x1(mem)
   before
     0bb7f9f67a5b4a17.3d93babfdfba5209.8b114ec2ebeeb001.eb43ae265c8a0931
     4f7bf8c235a9f139.0e88380d400fc86c.3e4dbce76c93e80d.df024362ff703fbb
@@ -32098,10 +32098,10 @@
     0bb7f9f67a5b4a17.3d93babfdfba5209.8b114ec2ebeeb001.eb43ae265c8a0931
     4f7bf8c235a9f139.0e88380d400fc86c.3e4dbce76c93e80d.df024362ff703fbb
     1b26b8cc77914668.5fa2884d916ceb3f.4b4bec15270dae51.e4806b1c0558c4a1
-    4985b4015c2003d0.8b2da6ed6f5cf931.8cd65b373767bff6.580922bf09cdd58e
-    0000000000000000
+    0000000000000000.0000000000000000.cad14e74cd929d80.eb43ae265c8a0931
+    95e964b6a75bae2e
 
-VTESTPS_256_3(reg)
+VROUNDSD_0x1(reg)
   before
     f96b2e6f7c8f8a2f.b664684b0161e59c.f0758c58756c2cec.debb8338b9aed72b
     dedd7b5524f4a63a.3f8e51988161a7f9.e9c638fa4027c11c.1dc7e206c8ecb21a
@@ -32112,9 +32112,9 @@
     f96b2e6f7c8f8a2f.b664684b0161e59c.f0758c58756c2cec.debb8338b9aed72b
     dedd7b5524f4a63a.3f8e51988161a7f9.e9c638fa4027c11c.1dc7e206c8ecb21a
     a18947d43a163efe.bed1e9d2f92b0713.d26ba53f6c19f36e.26c4f38c80300cf0
-    9fbc8e585b828e25.10f7aee784cbbf15.07b1cf9393ceff8e.d37f32b7fe83a0d8
-    0000000000000000
-VTESTPS_256_3(mem)
+    0000000000000000.0000000000000000.d26ba53f6c19f36e.0000000000000000
+    01c31c715ef32bff
+VROUNDSD_0x1(mem)
   before
     8c5e2ba7bb8b6890.32c24c4d22c3d15c.11cd1bc23f4d8c2b.e4e4b36254d32128
     501bdd46315815b8.b7e77e202b65444e.9d1fac4f45be2982.c4504b1848b395e6
@@ -32125,10 +32125,10 @@
     8c5e2ba7bb8b6890.32c24c4d22c3d15c.11cd1bc23f4d8c2b.e4e4b36254d32128
     501bdd46315815b8.b7e77e202b65444e.9d1fac4f45be2982.c4504b1848b395e6
     29c5ae38dd65eca3.8a771f3b13f523a8.90b9de7ab3295346.054195210dfb9677
-    f329186bdbbeaa7c.07be2b0b75fea915.c6672c2fa49bc6a3.02038cea3f366285
-    0000000000000000
+    0000000000000000.0000000000000000.d26ba53f6c19f36e.e4e4b36254d32128
+    16e12cdd79f032bd
 
-VTESTPD_128_1(reg)
+VROUNDSD_0x1(reg)
   before
     9f29726858b545ca.8a1398c945700a70.8a079ffdee0c1442.1bf4125a351f3ec4
     f82559f67712d559.ca4fab403a85c9aa.709f757c1aac9edb.6b2e0ce781c176d5
@@ -32139,9 +32139,9 @@
     9f29726858b545ca.8a1398c945700a70.8a079ffdee0c1442.1bf4125a351f3ec4
     f82559f67712d559.ca4fab403a85c9aa.709f757c1aac9edb.6b2e0ce781c176d5
     7c22dcf272931f16.8fa8ccbbd40ca357.13d2abf39369838b.92df96c2a48e2b03
-    896cfacae6c25fac.b5ec77262f0e54a3.d0ec3cd0f8d001ff.6cd42dd8bb91197a
-    0000000000000040
-VTESTPD_128_1(mem)
+    0000000000000000.0000000000000000.13d2abf39369838b.6b2e0ce781c176d5
+    d5d94c13e2d6fc66
+VROUNDSD_0x1(mem)
   before
     a9ba6f61346a8ff2.794eace96f2dd0c7.18e5296d689997b9.0339247ee26b52e2
     c44312adcd588f4a.aa16f0bba85faf15.94615c7c9ab929c6.08056069f0c9b2e1
@@ -32152,10 +32152,10 @@
     a9ba6f61346a8ff2.794eace96f2dd0c7.18e5296d689997b9.0339247ee26b52e2
     c44312adcd588f4a.aa16f0bba85faf15.94615c7c9ab929c6.08056069f0c9b2e1
     023fb1e3caacb79b.760ec0ad2de53840.052a8e40e178c6f5.3b9bebfdbb735fa8
-    3e7bc9ee4673c511.3b831a299b4aa7f4.460c3aa35be42a73.f848c0a7e1f793e2
-    0000000000000041
+    0000000000000000.0000000000000000.13d2abf39369838b.0000000000000000
+    9a59ded1fee08b3c
 
-VTESTPD_128_1(reg)
+VROUNDSD_0x2(reg)
   before
     7f183ee8adba8361.56c4d5bc5eb873d7.53c1fa9c8d1a37de.35d5dd922109106b
     02d1dd598b12b6fe.25e451392e877e1a.1b145a73a0e225aa.ad50f1fa51f1350a
@@ -32166,9 +32166,9 @@
     7f183ee8adba8361.56c4d5bc5eb873d7.53c1fa9c8d1a37de.35d5dd922109106b
     02d1dd598b12b6fe.25e451392e877e1a.1b145a73a0e225aa.ad50f1fa51f1350a
     7fd2b88e337361be.87a7b94fd0eda106.f0c83818702dad03.8a48f4c607aa557c
-    5266caf5416ac04f.57db8aeb63f59ac6.2c298ff997870a96.a78a61e15e402bed
-    0000000000000000
-VTESTPD_128_1(mem)
+    0000000000000000.0000000000000000.f0c83818702dad03.8000000000000000
+    e2e3b43972be7487
+VROUNDSD_0x2(mem)
   before
     151d6ab96030ec79.d6d80ff952820f5a.734b3ff900ab2287.2c825b80b37d7a0e
     1e04fd4d44a24fed.697584060147898e.b5c25466c51cf874.4c20981b609a3718
@@ -32179,10 +32179,10 @@
     151d6ab96030ec79.d6d80ff952820f5a.734b3ff900ab2287.2c825b80b37d7a0e
     1e04fd4d44a24fed.697584060147898e.b5c25466c51cf874.4c20981b609a3718
     d866ebe138215810.66892488eb466b95.fb0d451cce53d7ba.e8504335396a7d60
-    1e0daf615bb8c40d.2860eaebac09f11b.1ff88f09365d7a84.5d5c563adb7a8991
-    0000000000000041
+    0000000000000000.0000000000000000.f0c83818702dad03.3ff0000000000000
+    0590cf96e1559858
 
-VTESTPD_128_1(reg)
+VROUNDSD_0x2(reg)
   before
     3d3aaab6e888e360.cdc7c5bac7734f11.0d46d59bdf1f56cd.ff4fac181a449eff
     61a5e1048b9da956.c25eaad6985fb447.7086de042011d757.75de1a359516fe57
@@ -32193,9 +32193,9 @@
     3d3aaab6e888e360.cdc7c5bac7734f11.0d46d59bdf1f56cd.ff4fac181a449eff
     61a5e1048b9da956.c25eaad6985fb447.7086de042011d757.75de1a359516fe57
     cd1c72ed662224e6.d79fd9a3eb87b0dc.ac6e02920c6db064.5f70544cc3df57b7
-    ddec58de16a391bb.ea56ce0bdbf8fffc.1f483eb23ebe1da1.97d3d749c1aa664c
-    0000000000000040
-VTESTPD_128_1(mem)
+    0000000000000000.0000000000000000.ac6e02920c6db064.75de1a359516fe57
+    fbd11d18ab83e442
+VROUNDSD_0x2(mem)
   before
     6537a4a59c7690c4.ed618f4137ab2c82.d54f05fc85bd5dd2.23618dce529159ba
     b2d1e7dcb09024fe.59c7138463c630e6.7555fa6104e2858b.1605eb54e671a15a
@@ -32206,10 +32206,10 @@
     6537a4a59c7690c4.ed618f4137ab2c82.d54f05fc85bd5dd2.23618dce529159ba
     b2d1e7dcb09024fe.59c7138463c630e6.7555fa6104e2858b.1605eb54e671a15a
     be6b62aa04dc5d1e.7d6ae0123980da94.a7352a2674733453.528055af93ea312d
-    66d191f9b367f64d.b595f35753666638.45bc0f37f27d2655.341ec54af78944e1
-    0000000000000040
+    0000000000000000.0000000000000000.ac6e02920c6db064.3ff0000000000000
+    192a3993aed9171f
 
-VTESTPD_128_2(reg)
+VROUNDSD_0x2(reg)
   before
     5bf2acf55366e696.84cef1b7da3cadba.5c9647bf4d030f7d.2cb427809a0b16bd
     57c01bdc83bdedf0.f530fdcf94673c8f.d0b7d8b6c4e41310.38eaeeed872ac1b9
@@ -32218,11 +32218,11 @@
     d3f72e45075f7bd2
   after
     5bf2acf55366e696.84cef1b7da3cadba.5c9647bf4d030f7d.2cb427809a0b16bd
-    0000000000000000.0000000000000000.6c45a3a85393ac9c.4529de6ad6e5e372
+    57c01bdc83bdedf0.f530fdcf94673c8f.d0b7d8b6c4e41310.38eaeeed872ac1b9
     6ae180b5d96967da.95c1312cfef460f8.6c45a3a85393ac9c.4529de6ad6e5e372
-    eea1d9eaf1f691ff.404e09bc33f0d423.8c8ca201979f16ce.303f75e3a2483817
-    0000000000000041
-VTESTPD_128_2(mem)
+    0000000000000000.0000000000000000.6c45a3a85393ac9c.3ff0000000000000
+    d3f72e45075f7bd2
+VROUNDSD_0x2(mem)
   before
     0b1c857a223769cf.404b21e868f1a70c.d2a3026a5067553a.8bd8d32d2b918f51
     b47bf6700edcbe3c.bc2d541cd9e5e4ac.278b972270639f69.c7743199acf751d3
@@ -32231,12 +32231,12 @@
     7a27338dd055a900
   after
     0b1c857a223769cf.404b21e868f1a70c.d2a3026a5067553a.8bd8d32d2b918f51
-    0000000000000000.0000000000000000.2d5cfd95af98aac5.74272cd2d46e70ae
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
-    c917184bcbb98c10.a2c56cd21be9c658.8a4885612b1f7dc1.62d065dde24da27e
-    0000000000000040
+    b47bf6700edcbe3c.bc2d541cd9e5e4ac.278b972270639f69.c7743199acf751d3
+    aae0fe12e8583642.be916ef0e15e858c.1bd443d0b0f26edd.9baeb8afb55c99fd
+    0000000000000000.0000000000000000.6c45a3a85393ac9c.8000000000000000
+    7a27338dd055a900
 
-VTESTPD_128_2(reg)
+VROUNDSD_0x3(reg)
   before
     3eff1e2d1b00ea2f.edebc009d40a7dd0.c413492d2411e3bb.50b5d6bffdf78943
     09a422285edba1b8.f22a72371f58c4ae.81c8016d98631762.49e5b4d743854e8c
@@ -32245,11 +32245,11 @@
     fe046eb5e2ed49d5
   after
     3eff1e2d1b00ea2f.edebc009d40a7dd0.c413492d2411e3bb.50b5d6bffdf78943
-    0000000000000000.0000000000000000.332f90fd11699ff8.51a5999619d588cb
+    09a422285edba1b8.f22a72371f58c4ae.81c8016d98631762.49e5b4d743854e8c
     39623bea35700a47.b39eaac1c6ae1fd7.332f90fd11699ff8.51a5999619d588cb
-    288566df3d4e6087.0e15e593e7184877.3796f24c2db1b72a.44c004e79af4f22a
-    0000000000000041
-VTESTPD_128_2(mem)
+    0000000000000000.0000000000000000.332f90fd11699ff8.49e5b4d743854e8c
+    fe046eb5e2ed49d5
+VROUNDSD_0x3(mem)
   before
     5b3c54ee0ecc48f9.33589d7312fee025.de599e9a9ea3fcba.e84724c388c79ba4
     3633337d3a9eadc2.b728de134f0ec5cc.ff3651c0065af6cb.a49021cfbd368611
@@ -32258,12 +32258,12 @@
     aceab3aa9312cec6
   after
     5b3c54ee0ecc48f9.33589d7312fee025.de599e9a9ea3fcba.e84724c388c79ba4
-    0000000000000000.0000000000000000.21a66165615c0345.17b8db3c7738645b
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
-    db91c94dff4894f1.96ef6c22727cb2e8.a3f0961d5b7daf08.aa156d57274f6476
-    0000000000000040
+    3633337d3a9eadc2.b728de134f0ec5cc.ff3651c0065af6cb.a49021cfbd368611
+    6db6864e806e325c.0e412529900a4c29.4d7a7af33c49f3d6.c6bbe5dc698ab51e
+    0000000000000000.0000000000000000.332f90fd11699ff8.e84724c388c79ba4
+    aceab3aa9312cec6
 
-VTESTPD_128_2(reg)
+VROUNDSD_0x3(reg)
   before
     2885b5434b5e30b9.5c907866d0398eb0.a97eb16b90f230b4.df631f2c7f01e68d
     79346e8ce8c0c6fd.cb7f1086124cddc3.a439ef6f87f8053a.dca0930ac5e15490
@@ -32272,11 +32272,11 @@
     f00b45bf78253c4a
   after
     2885b5434b5e30b9.5c907866d0398eb0.a97eb16b90f230b4.df631f2c7f01e68d
-    0000000000000000.0000000000000000.e36e2299f2186b26.75746ea5492ab43e
+    79346e8ce8c0c6fd.cb7f1086124cddc3.a439ef6f87f8053a.dca0930ac5e15490
     fd41daf308c3cb3b.06290c97de8d3d57.e36e2299f2186b26.75746ea5492ab43e
-    0ff9f6e346f37d22.e75be88653096a97.c36746576ee09f23.88a92ae826e7c2c3
-    0000000000000001
-VTESTPD_128_2(mem)
+    0000000000000000.0000000000000000.e36e2299f2186b26.dca0930ac5e15490
+    f00b45bf78253c4a
+VROUNDSD_0x3(mem)
   before
     886839165ceedcff.0ba8bcc83fdc165b.4ce220408acb20b0.9e71581496dcdcdd
     2e8a84daed515f10.4c9a2a0e8f0bd295.0f8830b0a1e01ace.d1d8533c06966002
@@ -32285,12 +32285,12 @@
     1232926f23bbe4a0
   after
     886839165ceedcff.0ba8bcc83fdc165b.4ce220408acb20b0.9e71581496dcdcdd
-    0000000000000000.0000000000000000.b31ddfbf7534df4f.618ea7eb69232322
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
-    0f510d54890efdf0.1177ec6da169a7b7.2363ca61de30ccc6.afedf47d317a2837
-    0000000000000040
+    2e8a84daed515f10.4c9a2a0e8f0bd295.0f8830b0a1e01ace.d1d8533c06966002
+    bc3fa2f5485781a7.301b3b21d00cef7a.0e1a95c1b452151c.b8e8323b5b9c653b
+    0000000000000000.0000000000000000.e36e2299f2186b26.8000000000000000
+    1232926f23bbe4a0
 
-VTESTPD_128_3(reg)
+VROUNDSD_0x3(reg)
   before
     3d050a7bceebd622.048d43e4ca819118.4df9375f9bb037f7.2c314b7b3c83fcfa
     8cb0570fcd963a6b.75bfbf8f2abcf74b.3eee1a615d6cdae7.034e94fbe95961e1
@@ -32301,9 +32301,9 @@
     3d050a7bceebd622.048d43e4ca819118.4df9375f9bb037f7.2c314b7b3c83fcfa
     8cb0570fcd963a6b.75bfbf8f2abcf74b.3eee1a615d6cdae7.034e94fbe95961e1
     5b807595bc494c24.40b3fd43c2ccebb4.42a390e1802ace32.868822cd01bdb7aa
-    06c1607b388f47fc.3f3479ebb0bc2a80.b3629549a3754d86.8fa970dea1bbba7f
-    0000000000000041
-VTESTPD_128_3(mem)
+    0000000000000000.0000000000000000.42a390e1802ace32.0000000000000000
+    fb7efa18e460258d
+VROUNDSD_0x3(mem)
   before
     a6d33c68e7b7b5ff.e9bf152cdcf5689d.4f0fb073109970da.ef7725075fd9938c
     6d73b2bbc6cd2502.60c58e134505ebb3.4c111dc7fd6e79ef.50303d8652e3def2
@@ -32314,10 +32314,10 @@
     a6d33c68e7b7b5ff.e9bf152cdcf5689d.4f0fb073109970da.ef7725075fd9938c
     6d73b2bbc6cd2502.60c58e134505ebb3.4c111dc7fd6e79ef.50303d8652e3def2
     2a2cd9fb9bad33c1.c721c99e0e4d0ceb.13043cd3944701eb.34d7d832181e6864
-    bac82c1685639969.791dc138d45906f1.7eb58983f030c3f9.f5baf2774c166e8e
-    0000000000000001
+    0000000000000000.0000000000000000.42a390e1802ace32.ef7725075fd9938c
+    f02387c18a582b1b
 
-VTESTPD_128_3(reg)
+VROUNDSD_0x4(reg)
   before
     815f947c6f6fddb7.f91427f79dfc1326.d406734e32b41670.6aef81c32d367c46
     05ba131497e7be10.c3dc468a02825f23.3328d94ac5ea7815.b3809e7f6865e7fd
@@ -32328,9 +32328,9 @@
     815f947c6f6fddb7.f91427f79dfc1326.d406734e32b41670.6aef81c32d367c46
     05ba131497e7be10.c3dc468a02825f23.3328d94ac5ea7815.b3809e7f6865e7fd
     d68002f69d4d0bd0.f4ec06bbcd04378d.f2cff1992888678c.35335ea4bdc7c24b
-    51fc5d8c1d2cffa3.6810e1761c8b588f.6c46b6a7f8182080.ccd33c1c476ac75c
-    0000000000000001
-VTESTPD_128_3(mem)
+    0000000000000000.0000000000000000.f2cff1992888678c.8000000000000000
+    542db5d52259b35b
+VROUNDSD_0x4(mem)
   before
     a90d43ba6ba14175.d27c1e44b410d736.fb1455a70b257e56.ffdb25e1d029df9e
     a73f64b63d4d2ed5.b54a4288fd86cf35.89c3de3ab5de640e.06d838b24d44df91
@@ -32341,10 +32341,10 @@
     a90d43ba6ba14175.d27c1e44b410d736.fb1455a70b257e56.ffdb25e1d029df9e
     a73f64b63d4d2ed5.b54a4288fd86cf35.89c3de3ab5de640e.06d838b24d44df91
     2a8e93b7b56936a8.56b3c6c69519234b.eeeaf61c37c0c7e2.dc8aed850af75e06
-    0ec84ca8ee02151a.1103a56917550e25.06551b37acd963ff.df3d3fc8a3cd96a8
-    0000000000000000
+    0000000000000000.0000000000000000.f2cff1992888678c.ffdb25e1d029df9e
+    693d2ae6b553c325
 
-VTESTPD_128_3(reg)
+VROUNDSD_0x4(reg)
   before
     d8d6aa4bdc142326.2fb70c7505238656.4286dcdd20c7cd6e.add0c7793034f390
     8653bc63b39cf05a.69294d0b15d84689.4587658e4bfa9cd3.bf2778cce0de35c2
@@ -32355,9 +32355,9 @@
     d8d6aa4bdc142326.2fb70c7505238656.4286dcdd20c7cd6e.add0c7793034f390
     8653bc63b39cf05a.69294d0b15d84689.4587658e4bfa9cd3.bf2778cce0de35c2
     d1025b9ad678676a.98e88d543b2e11de.76543ee8357bb600.1826aa1ed8e2e3c1
-    132d835ce233c305.97c1473d9230a382.3137625779d559a0.9498d75a324cb9b8
-    0000000000000001
-VTESTPD_128_3(mem)
+    0000000000000000.0000000000000000.76543ee8357bb600.8000000000000000
+    0e4a7d6c0d2975d3
+VROUNDSD_0x4(mem)
   before
     640917408384d140.a9213016725942d5.447ff7b337eab7a1.d27dcd47b494bf5f
     719f21c2b0698a29.f02a5e3223771e87.7af01aa045690a66.b5727b25814424eb
@@ -32368,10 +32368,10 @@
     640917408384d140.a9213016725942d5.447ff7b337eab7a1.d27dcd47b494bf5f
     719f21c2b0698a29.f02a5e3223771e87.7af01aa045690a66.b5727b25814424eb
     11d817deb1e55bba.42940a1e901893c6.15de2bf2d8b858fe.3662695b7c72c6ee
-    1f827680a1030120.fcaa2f4456c8df3f.f017a6940de35c94.b199925742a9df14
-    0000000000000001
+    0000000000000000.0000000000000000.76543ee8357bb600.d27dcd47b494bf5f
+    8162f2846f76ac0a
 
-VTESTPD_128_3(reg)
+VROUNDSD_0x4(reg)
   before
     040b854d9e64687c.7968b9959dd03887.7bbac91210143c9d.e965077100f7d355
     95de47206bff5016.f9555c07c056bc1a.190ed4f35b87e78d.db95ca77ccff796c
@@ -32382,9 +32382,9 @@
     040b854d9e64687c.7968b9959dd03887.7bbac91210143c9d.e965077100f7d355
     95de47206bff5016.f9555c07c056bc1a.190ed4f35b87e78d.db95ca77ccff796c
     8f28356873d3a082.7d16dbc426a34906.33f34d53d2ad1cbb.a1726c918d070a06
-    50354a91526d946f.e077b2b6edc39a77.25b52f9e121316d2.19ca68ab601c414f
-    0000000000000040
-VTESTPD_128_3(mem)
+    0000000000000000.0000000000000000.33f34d53d2ad1cbb.db95ca77ccff796c
+    1d673ab26049db72
+VROUNDSD_0x4(mem)
   before
     8b175e90aa9b949c.33508207a2586787.fd445ecb2ec16c98.4ba07640b644127f
     3da45132591c27f9.93c7d93702215777.b1495aee07a97a95.01001ea55acc4c6d
@@ -32395,10 +32395,10 @@
     8b175e90aa9b949c.33508207a2586787.fd445ecb2ec16c98.4ba07640b644127f
     3da45132591c27f9.93c7d93702215777.b1495aee07a97a95.01001ea55acc4c6d
     10db8d858adb51b4.cee44c8b0b539dea.d952220b9487819c.a320233a9b38ff49
-    e188907358e1cefa.3ef5d5705c7a788d.4f2a320ef0683dd7.8d4d8269151369bf
-    0000000000000040
+    0000000000000000.0000000000000000.33f34d53d2ad1cbb.4ba07640b644127f
+    1bd4369f63eac37a
 
-VTESTPD_128_3(reg)
+VROUNDSD_0x5(reg)
   before
     a9ff3b4921474c27.8a77d5eae03c5af6.414472538e23220b.f19e07e337576a72
     931b8dd2ecb83e71.e873d9d53df7b0d5.311e1f9f40d9d812.997a1c768661c49a
@@ -32409,9 +32409,9 @@
     a9ff3b4921474c27.8a77d5eae03c5af6.414472538e23220b.f19e07e337576a72
     931b8dd2ecb83e71.e873d9d53df7b0d5.311e1f9f40d9d812.997a1c768661c49a
     357329a560c9d705.d84a16208c1e8dc2.6ccfd6bf0b28d64b.248aedb4f890067b
-    eb5509301805508f.34c60ab7e8beadea.4ca295218d9d5764.6f9af687aaf3ed40
-    0000000000000040
-VTESTPD_128_3(mem)
+    0000000000000000.0000000000000000.6ccfd6bf0b28d64b.8000000000000000
+    5476b3dcb8933416
+VROUNDSD_0x5(mem)
   before
     b0e9a1a03c7e9928.110b2bdeb0f8e8ba.d9b430866de3cb79.2ee5563062c39909
     5fc13bbe55bfd6a3.03e38b1bc52ed933.a3e004793897a49a.6fe218582526d6e6
@@ -32422,10 +32422,10 @@
     b0e9a1a03c7e9928.110b2bdeb0f8e8ba.d9b430866de3cb79.2ee5563062c39909
     5fc13bbe55bfd6a3.03e38b1bc52ed933.a3e004793897a49a.6fe218582526d6e6
     3dc8fd221d63a7b3.1d272353f23460a5.6f16037c65e8f47a.69e6d40572534aa6
-    26cb63b7b075ca83.ba24f1f3d495b9bd.1721a87b0fe17744.793d87a3e6d532f5
-    0000000000000040
+    0000000000000000.0000000000000000.6ccfd6bf0b28d64b.0000000000000000
+    fb332e9f1d38ca81
 
-VTESTPD_128_3(reg)
+VROUNDSD_0x5(reg)
   before
     4c14c463b2094ef4.f696ea6b2a01f940.3825ef6506de1f26.78cf6f63528fe825
     c62b455c41d3fafa.8af40c29a913f115.f2781b16249acf8e.6eead41e4bfd0449
@@ -32436,9 +32436,9 @@
     4c14c463b2094ef4.f696ea6b2a01f940.3825ef6506de1f26.78cf6f63528fe825
     c62b455c41d3fafa.8af40c29a913f115.f2781b16249acf8e.6eead41e4bfd0449
     c6c6aef767220940.bcb347de46b86e2f.43687173cc55059e.d53f539a163787db
-    a82ff99fbf83b872.699d16741ffc2bba.8940ebe6979cfd05.899a69c2ce492d08
-    0000000000000001
-VTESTPD_128_3(mem)
+    0000000000000000.0000000000000000.43687173cc55059e.6eead41e4bfd0449
+    66c790828f40b1fb
+VROUNDSD_0x5(mem)
   before
     489246c57628d0e1.c8b324bfe681423b.6c80f6d850e9e5e1.1f4d87dd23f9f26c
     0bc607799e0b45e6.829e2ac577a8e548.a32661f7f48d58d1.60db40c30cfb2182
@@ -32449,10 +32449,10 @@
     489246c57628d0e1.c8b324bfe681423b.6c80f6d850e9e5e1.1f4d87dd23f9f26c
     0bc607799e0b45e6.829e2ac577a8e548.a32661f7f48d58d1.60db40c30cfb2182
     8b304d8924f7ce35.323c071c0f85db44.e95cd5bb27f43fb5.aa361204ed2bc6f1
-    a39d96e223f825fb.34d8b83049a361dc.1aeecd12062858ba.57aaf90c62171c66
-    0000000000000041
+    0000000000000000.0000000000000000.43687173cc55059e.0000000000000000
+    c582f247084b608c
 
-VTESTPD_128_3(reg)
+VROUNDSD_0x5(reg)
   before
     4e0bf8217b51ce10.31d75c6eb7180763.e4c0376dc28fb2bb.12a7c6e7ad375d0c
     4f92070655b7a29d.10ab1e1afe652f9a.9e3e824015d30b8f.ad553a25372d0ad6
@@ -32463,9 +32463,9 @@
     4e0bf8217b51ce10.31d75c6eb7180763.e4c0376dc28fb2bb.12a7c6e7ad375d0c
     4f92070655b7a29d.10ab1e1afe652f9a.9e3e824015d30b8f.ad553a25372d0ad6
     25611b63350817e0.1ce455d311eb5acb.be9f9413dffea801.c7c2a7bac0141d45
-    2ac530a2b5d16a85.31507e830eb44424.a02f6a53bb99c5c0.3bbb889165fa5084
-    0000000000000000
-VTESTPD_128_3(mem)
+    0000000000000000.0000000000000000.be9f9413dffea801.8000000000000000
+    e70c599641eb60c0
+VROUNDSD_0x5(mem)
   before
     a68196b671f10824.bb094331719dd737.2ab9161811cea9ce.a03afe6d45329d76
     53e6bcdb101a05de.357b4f7a06f899a3.e5ed987d354545f8.190c4ecb1a546dcf
@@ -32476,10 +32476,10 @@
     a68196b671f10824.bb094331719dd737.2ab9161811cea9ce.a03afe6d45329d76
     53e6bcdb101a05de.357b4f7a06f899a3.e5ed987d354545f8.190c4ecb1a546dcf
     cc0645f23b721317.f26550eb0f6fed75.3cb6809d9623d3cc.69f055dbd68c7178
-    ecafafe80d03eefe.4f1542ef288d0f58.0de14b6651770f76.eb340f081464e51d
-    0000000000000001
+    0000000000000000.0000000000000000.be9f9413dffea801.8000000000000000
+    fb2279be706b0469
 
-VTESTPD_128_3(reg)
+VPTEST_128_1(reg)
   before
     f4078d69872a0b09.8eab76a7a3dc52bc.a8d522f2efdf3bf8.333973c3824ab723
     342f4975f42f36a9.90c7141d1806fa80.5af2eb60fdefac02.898c76a144aa85ff
@@ -32491,8 +32491,8 @@
     342f4975f42f36a9.90c7141d1806fa80.5af2eb60fdefac02.898c76a144aa85ff
     15e6a84e5405c0f4.cccf0735888fa374.bfb899a5f04b9f22.eda5cfeab3a23635
     f577a7604339e697.208ecada108208c5.3472282d647f5004.394ffa8bec3e86f2
-    0000000000000040
-VTESTPD_128_3(mem)
+    0000000000000000
+VPTEST_128_1(mem)
   before
     fd89b8862a94f2b0.2f3040175b56e43d.66d2d9faccebe69e.156e9464f415fb53
     2cb142b867668608.1e5b71e03be8f693.7b65b080d7d7f92c.bef6dab73c9cdbbb
@@ -32504,9 +32504,9 @@
     2cb142b867668608.1e5b71e03be8f693.7b65b080d7d7f92c.bef6dab73c9cdbbb
     b59b8ef1de0ba897.204535257c7c5744.3c15cc594d51fd9a.8b57f590d99d2de9
     7212181faa921589.8f3a8854bc9d44fd.83aca76f4b66ae15.d8dde15d67a62c89
-    0000000000000041
+    0000000000000000
 
-VTESTPD_128_3(reg)
+VPTEST_128_1(reg)
   before
     62881d7fc3fd25ce.40e45d2de704890a.c88667d897d7f96a.2df7bfafed21c7c9
     564565adca6496ca.fcdbd807b36fc045.2875cc1ca8b7b136.17c290064e8e05e1
@@ -32518,8 +32518,8 @@
     564565adca6496ca.fcdbd807b36fc045.2875cc1ca8b7b136.17c290064e8e05e1
     3b566d7e3102a4e8.80c4059927de7666.0952b58e8cc8a90e.1bd8945e8ab9238a
     6c08345e95648cd4.a96b60cf615e669b.c86a1d99de961d9e.160749a5beafdfef
-    0000000000000041
-VTESTPD_128_3(mem)
+    0000000000000000
+VPTEST_128_1(mem)
   before
     61dbb3ac7c2a1ba0.45a7b3b991158a39.539c65957dfa4d0d.c20a00a93aae4991
     691960453ec71543.227fe8fbc2a1dac4.5a2291d896bee6eb.517c5b2b3d9b6893
@@ -32531,9 +32531,9 @@
     691960453ec71543.227fe8fbc2a1dac4.5a2291d896bee6eb.517c5b2b3d9b6893
     d99fad7c685e9b53.5edccd91c394b721.9acb5f82c8b6ef5f.d20c298983e9b752
     8b39173d15fc6afc.570a61e5317b5ffb.ef614b8030ef2296.a1086630a7257277
-    0000000000000001
+    0000000000000000
 
-VTESTPD_128_3(reg)
+VPTEST_128_1(reg)
   before
     9a701d0afa941baa.5cb3197461ac3e69.68549d65a7e10bff.35b1d1bfe9753cbb
     7b74901561e0810f.28d82f0d697ad2c6.ec087e7bc253fad8.48876e2a1052f8fa
@@ -32545,8 +32545,8 @@
     7b74901561e0810f.28d82f0d697ad2c6.ec087e7bc253fad8.48876e2a1052f8fa
     1a1362191749428b.cb75d6f54972e340.417001951d5c6633.04af9dadc1941381
     d3998f82b75b9ccb.205688161ca12d03.c1d9211e54888cbb.45f5da331646497a
-    0000000000000001
-VTESTPD_128_3(mem)
+    0000000000000000
+VPTEST_128_1(mem)
   before
     c6096efe222cf574.025213bbdea3c97a.0547c35efe136b3a.ca8fda820464a81e
     be71be191077e3cc.038aea3327ac0545.551402b70cd25b12.b6dd282dc97bf505
@@ -32558,9 +32558,9 @@
     be71be191077e3cc.038aea3327ac0545.551402b70cd25b12.b6dd282dc97bf505
     ab260ce81463dc48.328c11532f038ed7.ec89c10f62ecb7b7.e311088b3e59b01e
     69f5d45749fb9c12.eba6838891329ede.a6717d511b6d3b54.ab757508ff8b1515
-    0000000000000001
+    0000000000000000
 
-VTESTPD_256_1(reg)
+VPTEST_128_2(reg)
   before
     8001e60fd718cc4c.d3a99253cc4bde56.8a223c3eeac87203.5f99b169535fa516
     44bfe372268b96e4.c710c3c6b8605f41.6b4d38e2d54e46f5.f2ced84327d0af28
@@ -32569,11 +32569,11 @@
     67a9e2955f91e9fb
   after
     8001e60fd718cc4c.d3a99253cc4bde56.8a223c3eeac87203.5f99b169535fa516
-    44bfe372268b96e4.c710c3c6b8605f41.6b4d38e2d54e46f5.f2ced84327d0af28
+    0000000000000000.0000000000000000.e97274deee52555e.3dda71cbb2cc16b7
     15df5ca33182fa09.20f4e29e2945dbff.e97274deee52555e.3dda71cbb2cc16b7
     4dac4f1095893368.b9236ac63c060dbb.62dfeba0d25fdcea.1b89f5ed115d95ef
-    0000000000000040
-VTESTPD_256_1(mem)
+    0000000000000001
+VPTEST_128_2(mem)
   before
     ff05b2b0b974ce07.4971b724ed2b7fac.7067da2a0db0b2a2.31df99921d021746
     be68e3283a110041.657c914bd6f41882.208dabb6b74e86e0.b2bd7a226ac5421e
@@ -32582,12 +32582,12 @@
     f88929b87751b843
   after
     ff05b2b0b974ce07.4971b724ed2b7fac.7067da2a0db0b2a2.31df99921d021746
-    be68e3283a110041.657c914bd6f41882.208dabb6b74e86e0.b2bd7a226ac5421e
-    7f9ff1ebff743bd3.fe17d7f1eb703a96.a4605b5656ed45a0.40c68abb5537981d
+    0000000000000000.0000000000000000.8f9825d5f24f4d5d.ce20666de2fde8b9
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     207656e323a93ae9.6e8f8782c92c2293.daae65f60797aa0f.3946c6c97be156f0
-    0000000000000001
+    0000000000000040
 
-VTESTPD_256_1(reg)
+VPTEST_128_2(reg)
   before
     d8dbaff4e612f9c1.7bb990fec3bdbab0.122f9c6a0bb30d26.9c424582e65a7258
     378854e964b15617.6e341a27fabb7654.464512154d9134fa.c8e777e60d4259a8
@@ -32596,11 +32596,11 @@
     583ad35c564a1d77
   after
     d8dbaff4e612f9c1.7bb990fec3bdbab0.122f9c6a0bb30d26.9c424582e65a7258
-    378854e964b15617.6e341a27fabb7654.464512154d9134fa.c8e777e60d4259a8
+    0000000000000000.0000000000000000.661ce5ef2c53d6bc.386a770f9b5a1a2a
     6fdb15048bb90bf0.d3b3704ae4af2b00.661ce5ef2c53d6bc.386a770f9b5a1a2a
     de21edaffab653f9.87010e539ea695e1.ceff126544842d18.ca97c2e7a9ae720b
-    0000000000000040
-VTESTPD_256_1(mem)
+    0000000000000001
+VPTEST_128_2(mem)
   before
     bf1f2658bb3bd799.dea6d8584a356cdd.67eb712e44ab7022.da3b94e130b076b9
     dc1138c9f68c5b9e.cdb6d26919c19049.4d3d13c7f0cb78f1.e61c67d18c64ed4c
@@ -32609,12 +32609,12 @@
     a294a08a5c24bb66
   after
     bf1f2658bb3bd799.dea6d8584a356cdd.67eb712e44ab7022.da3b94e130b076b9
-    dc1138c9f68c5b9e.cdb6d26919c19049.4d3d13c7f0cb78f1.e61c67d18c64ed4c
-    89de839a234a66b1.059dd75003e6fce9.16c3720bc1116877.4eee879ff52bcd7c
+    0000000000000000.0000000000000000.98148ed1bb548fdd.25c46b1ecf4f8946
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     a35085b75d80b400.e4a7e478a330eb68.9f4909e4d189fde2.6efdf1b9079253f6
-    0000000000000001
+    0000000000000040
 
-VTESTPD_256_1(reg)
+VPTEST_128_2(reg)
   before
     4601907e936d4077.0634b90cc13a00b4.c41ff44d962c9a73.c29b55403c3ff25e
     b58ebd0145f920d6.8f569b856a8407fb.0253033b776645b6.5c84d1091f400517
@@ -32623,11 +32623,11 @@
     8dc83d33ac794064
   after
     4601907e936d4077.0634b90cc13a00b4.c41ff44d962c9a73.c29b55403c3ff25e
-    b58ebd0145f920d6.8f569b856a8407fb.0253033b776645b6.5c84d1091f400517
+    0000000000000000.0000000000000000.fb8d0daee26828dc.49d2f82d9597f038
     4d88237f1155952e.1882a80e746b8501.fb8d0daee26828dc.49d2f82d9597f038
     693bbf64900cdb2c.7e835a94fcfa36f2.091a0f1274c07e91.654f4897bb516fed
-    0000000000000040
-VTESTPD_256_1(mem)
+    0000000000000001
+VPTEST_128_2(mem)
   before
     9b0951ed851b1dc6.65f38c1d61ab307b.9d272f011e3ed5f9.894603d3c9fa8483
     6cde02b16144c342.9cfc86141dbdcec8.5138a243f5421f42.d75ce75e7ca1765b
@@ -32636,12 +32636,12 @@
     2e1a06ebe39d290b
   after
     9b0951ed851b1dc6.65f38c1d61ab307b.9d272f011e3ed5f9.894603d3c9fa8483
-    6cde02b16144c342.9cfc86141dbdcec8.5138a243f5421f42.d75ce75e7ca1765b
-    dc12cb6b5dffee02.6ca1a9b762cef2bf.768330449d12d0fa.4faab61d29418fc8
+    0000000000000000.0000000000000000.62d8d0fee1c12a06.76b9fc2c36057b7c
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     c772280794585932.302ff170cc6ad70b.e8d453f233bba44d.4e7a6d7e6d660c74
-    0000000000000000
+    0000000000000040
 
-VTESTPD_256_2(reg)
+VPTEST_256_1(reg)
   before
     4cd47fd22871223b.09cb9671225cc100.43f35badf61eba59.83f78938d2485667
     04f5d39ed76e32ad.7ee78f962416e295.0337e2d97d76d755.23b84d0297c5a373
@@ -32650,11 +32650,11 @@
     b9a5c6b0de5782fe
   after
     4cd47fd22871223b.09cb9671225cc100.43f35badf61eba59.83f78938d2485667
-    b2c8febb8d219610.01939160b6927720.ca47825ffcfc6aaa.a4e21b3c9d3f469d
+    04f5d39ed76e32ad.7ee78f962416e295.0337e2d97d76d755.23b84d0297c5a373
     b2c8febb8d219610.01939160b6927720.ca47825ffcfc6aaa.a4e21b3c9d3f469d
     b29bfd95e5158a0e.709b17bdf3dc3ecb.f67138ad0f3eaf05.e24270d201c1fd12
-    0000000000000001
-VTESTPD_256_2(mem)
+    0000000000000000
+VPTEST_256_1(mem)
   before
     04d59bc2510e928c.60b8cb987cd64a53.a6ca9d98f701f1c2.e100fe2f53c7e111
     a19f6af475f1e8e9.186d6430edf1118d.7feea0dddf0d4c32.e93fd24f63243d7b
@@ -32663,12 +32663,12 @@
     3f1a75a277a6a2a2
   after
     04d59bc2510e928c.60b8cb987cd64a53.a6ca9d98f701f1c2.e100fe2f53c7e111
-    fb2a643daef16d73.9f4734678329b5ac.5935626708fe0e3d.1eff01d0ac381eee
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    a19f6af475f1e8e9.186d6430edf1118d.7feea0dddf0d4c32.e93fd24f63243d7b
+    6bceb033670c4141.3504c4cad5f11c65.d7d19a77c60a0d47.687baf7adce0feee
     3e30e769426c59bf.15cae7d0cf63a68a.89400954c906ee2c.bb00911c5a876117
-    0000000000000040
+    0000000000000000
 
-VTESTPD_256_2(reg)
+VPTEST_256_1(reg)
   before
     4e155576d2c8fd3a.f58f8d84221cec90.130bcaaf77d2eda6.73076860030dac0e
     453d2f060479ae8c.6eb91d6f2428b5df.8b1267d46aca2b65.70f23485912a0219
@@ -32677,11 +32677,11 @@
     7082f7c9477ef2e4
   after
     4e155576d2c8fd3a.f58f8d84221cec90.130bcaaf77d2eda6.73076860030dac0e
-    81ddfebdac46f044.84781316649d72d9.d92dbcaa44d79d74.5bcde7b08e69ad78
+    453d2f060479ae8c.6eb91d6f2428b5df.8b1267d46aca2b65.70f23485912a0219
     81ddfebdac46f044.84781316649d72d9.d92dbcaa44d79d74.5bcde7b08e69ad78
     5c42bf0663ba000d.1299eb65fd86dca9.58a6c59ca0867e7f.1263ffcd17d66958
-    0000000000000001
-VTESTPD_256_2(mem)
+    0000000000000000
+VPTEST_256_1(mem)
   before
     50f44b8e3b6c0449.33b86c4fc7611993.f6e722480befb27d.66cb7c181a620c31
     9086780a0eac5ab2.628b030374c87983.0a3033ababe5ae7e.5ee6df894ff88137
@@ -32690,12 +32690,12 @@
     59f8e2d36489a6f7
   after
     50f44b8e3b6c0449.33b86c4fc7611993.f6e722480befb27d.66cb7c181a620c31
-    af0bb471c493fbb6.cc4793b0389ee66c.0918ddb7f4104d82.993483e7e59df3ce
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    9086780a0eac5ab2.628b030374c87983.0a3033ababe5ae7e.5ee6df894ff88137
+    0a04f928dd4bb14c.45077f8f057a5a89.2c3f9a7af8738ddb.9b43e95bdad3193d
     9c3a49d4c354c443.3878dc5d1703f951.36dfd3a10fa60bbd.7b3096fa587f12ee
-    0000000000000040
+    0000000000000000
 
-VTESTPD_256_2(reg)
+VPTEST_256_1(reg)
   before
     90e6ca509b7c1203.20f3e7fadcd450c2.972917da45f09186.06dd5b0d0b88e353
     7e4848df98e491bf.73fd4c8645d511f6.be682a722bcc5fd4.7605aca80927d3c7
@@ -32704,11 +32704,11 @@
     257037d323e78013
   after
     90e6ca509b7c1203.20f3e7fadcd450c2.972917da45f09186.06dd5b0d0b88e353
-    7d685aeaf84d61d6.7222f5641a66c30b.097f139266249fe8.63234460248f9446
+    7e4848df98e491bf.73fd4c8645d511f6.be682a722bcc5fd4.7605aca80927d3c7
     7d685aeaf84d61d6.7222f5641a66c30b.097f139266249fe8.63234460248f9446
     eb93fbdf5644bcf5.f72f5f807690222c.d4bbcda492838d6e.aa039f1f79cbe5fb
-    0000000000000041
-VTESTPD_256_2(mem)
+    0000000000000000
+VPTEST_256_1(mem)
   before
     b13889673fef22b9.221428284f55dec8.dff005c67561e985.7b6854164a756412
     2b2512c7e8f0871a.7f39db337e0a05fa.0731632334e4d544.5ad2a5532a86617f
@@ -32717,12 +32717,12 @@
     df742604d6ef9337
   after
     b13889673fef22b9.221428284f55dec8.dff005c67561e985.7b6854164a756412
-    4ec77698c010dd46.ddebd7d7b0aa2137.200ffa398a9e167a.8497abe9b58a9bed
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    2b2512c7e8f0871a.7f39db337e0a05fa.0731632334e4d544.5ad2a5532a86617f
+    6d044ddf3af56b62.5f4d126b80f16b38.49bdf681ce26a192.cd44bbc7cf43c061
     54a1b79b520b89bc.1c9bc83cf0964d2e.826238ce60310b9e.300c92ded437bd65
-    0000000000000040
+    0000000000000000
 
-VTESTPD_256_3(reg)
+VPTEST_256_2(reg)
   before
     35c973a570f57f82.bcc8cae74c3d9e55.1370fa126a83e687.8eeaa7f40514cd92
     9057762d3fd8bcf3.814404b043976558.a118a2598b4674ef.4922bee1dad8a39b
@@ -32731,11 +32731,11 @@
     2de2cd848decfce8
   after
     35c973a570f57f82.bcc8cae74c3d9e55.1370fa126a83e687.8eeaa7f40514cd92
-    9057762d3fd8bcf3.814404b043976558.a118a2598b4674ef.4922bee1dad8a39b
+    4b6a2a08de218836.7fe3e0e053269cf2.20dfbe7eef6b3114.90d6fa80fa8b4be4
     4b6a2a08de218836.7fe3e0e053269cf2.20dfbe7eef6b3114.90d6fa80fa8b4be4
     c24d8ba3ea5e1df6.936fda6599f5fd4f.ed1149eb317c599f.3dd2d5bd82387f9a
     0000000000000001
-VTESTPD_256_3(mem)
+VPTEST_256_2(mem)
   before
     3cd25dc138b27efb.504e9568fe1ab8e0.97b56e293110459a.64f93f0ded072a3f
     466d01619e96c0ff.53b745c5b6e2949f.6881191a36832f00.e1e59c51c098de9e
@@ -32744,12 +32744,12 @@
     15b0f81ad7e1a9f0
   after
     3cd25dc138b27efb.504e9568fe1ab8e0.97b56e293110459a.64f93f0ded072a3f
-    466d01619e96c0ff.53b745c5b6e2949f.6881191a36832f00.e1e59c51c098de9e
-    2780354edba57f1f.25d59525af41efe0.e29f5523c45b78ac.c01f5d2245bab268
+    c32da23ec74d8104.afb16a9701e5471f.684a91d6ceefba65.9b06c0f212f8d5c0
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     bbd776750cea7787.24f483f385c3034e.e0dba030f8a4dccb.5ef47deb19f9e24b
-    0000000000000001
+    0000000000000040
 
-VTESTPD_256_3(reg)
+VPTEST_256_2(reg)
   before
     429fca1a1cff4406.dd3e3fc34d716365.ab600a9dd3f50c96.4000762ded681789
     410cf05783deef37.6b810c23b94701e3.1565278e35614864.dddb5106c0b5e411
@@ -32758,11 +32758,11 @@
     baa9e1f281461521
   after
     429fca1a1cff4406.dd3e3fc34d716365.ab600a9dd3f50c96.4000762ded681789
-    410cf05783deef37.6b810c23b94701e3.1565278e35614864.dddb5106c0b5e411
+    6d45643da90ae52f.406c59806c770b2d.c04ed4324896f163.9339afa78c970090
     6d45643da90ae52f.406c59806c770b2d.c04ed4324896f163.9339afa78c970090
     249424392910649c.38caa3c8830d3d71.06690ff6a81d4440.3ee40bfc6d182731
-    0000000000000040
-VTESTPD_256_3(mem)
+    0000000000000001
+VPTEST_256_2(mem)
   before
     e253ad73e12d858c.c1462bb5a07ba627.2f6864e6191655d8.4400d344f0847ca7
     94b0eb6dabd7349d.a0a7761ea9d8e77f.00131ac64b9d0d91.d7601c89bc57d743
@@ -32771,12 +32771,12 @@
     1e2def5c54ca0811
   after
     e253ad73e12d858c.c1462bb5a07ba627.2f6864e6191655d8.4400d344f0847ca7
-    94b0eb6dabd7349d.a0a7761ea9d8e77f.00131ac64b9d0d91.d7601c89bc57d743
-    ab8a18cafb52de80.1d03ffe1e0b2654e.8995405435ae22c6.19d5e732a9208fc0
+    1dac528c1ed27a73.3eb9d44a5f8459d8.d0979b19e6e9aa27.bbff2cbb0f7b8358
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     03afaf78ecaa3e63.94a6c468e2955a40.a5ba537cf1564fa3.67ab2ea9526de0cc
-    0000000000000000
+    0000000000000040
 
-VTESTPD_256_3(reg)
+VPTEST_256_2(reg)
   before
     98a925b64ac1413b.77e92c629ae91170.61dbc0214b0d0302.2f50cd2b9ea05155
     3269cd22d1e0c8f7.e5050c74221d13d3.dff0ef77b6a79b40.05222c4b5598e408
@@ -32785,11 +32785,11 @@
     e0f57a91d90f5adc
   after
     98a925b64ac1413b.77e92c629ae91170.61dbc0214b0d0302.2f50cd2b9ea05155
-    3269cd22d1e0c8f7.e5050c74221d13d3.dff0ef77b6a79b40.05222c4b5598e408
+    48bae10e84b3d9f1.27cec99aa05200b9.6c2f4ed6bfee5fa5.02fbebc9354bc4e7
     48bae10e84b3d9f1.27cec99aa05200b9.6c2f4ed6bfee5fa5.02fbebc9354bc4e7
     36e85fe500c4afd4.1b12e1c02f93934e.63e5d7aa036f8bde.01a8869257c4ad1f
-    0000000000000040
-VTESTPD_256_3(mem)
+    0000000000000001
+VPTEST_256_2(mem)
   before
     79ae41b1d7398849.593f4213e0a1874d.9b9ccfd2ebec89bd.1f5e885f1db55b97
     aa9f59e06c4df292.0b0b8605c0d69d07.853710bcf1699e33.fee65c61aa4c0a7b
@@ -32798,12 +32798,12 @@
     fdce846e1772afe5
   after
     79ae41b1d7398849.593f4213e0a1874d.9b9ccfd2ebec89bd.1f5e885f1db55b97
-    aa9f59e06c4df292.0b0b8605c0d69d07.853710bcf1699e33.fee65c61aa4c0a7b
-    4d943d09b45855e5.a99728253dee2caf.b3b01e6b5c178ddc.5ac8501c45c1d637
+    8651be4e28c677b6.a6c0bdec1f5e78b2.6463302d14137642.e0a177a0e24aa468
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     3f586a18cc656d6b.8f3122e0f37571f1.03d377c9490113e3.91525efc8b9ff876
     0000000000000040
 
-VTESTPD_256_3(reg)
+VTESTPS_128_1(reg)
   before
     fc89bddc86c6352f.5db85af9d080f653.192372a37df7a878.4f6c96c4d334ec74
     e8cf05b47328c701.81808b99dbb5acc7.a3ba13d877010df1.7447f74617bad4bd
@@ -32815,8 +32815,8 @@
     e8cf05b47328c701.81808b99dbb5acc7.a3ba13d877010df1.7447f74617bad4bd
     1fec58617b24a107.887c78e209114af4.894202ed7e1edb07.4f2f163d30a286e7
     fb2bb34f3944feec.4f789dc1779f8d05.2606394d2ddb5067.baf270943af5bf21
-    0000000000000000
-VTESTPD_256_3(mem)
+    0000000000000001
+VTESTPS_128_1(mem)
   before
     b334c2129411b570.dada11e94a161c5d.b0407723406c3027.d854b66421c2a5bd
     fa4cb2111bf2eadd.16436e9d49263406.889f80f28183f185.fa76749ef66119b4
@@ -32828,9 +32828,9 @@
     fa4cb2111bf2eadd.16436e9d49263406.889f80f28183f185.fa76749ef66119b4
     416ecc20046f9609.0cb3c6d6d2fe8592.b363361c55f08a4c.e8ba6f674644e6f8
     65658d2c6a94751f.18761601822c49ad.0e56148cd9bfb7a8.fe6aa32bb0f64937
-    0000000000000000
+    0000000000000001
 
-VTESTPD_256_3(reg)
+VTESTPS_128_1(reg)
   before
     1140a8543bf8c050.42ff701f696d424c.97d85988f53cbd05.7345962e28fd36c4
     c7ff7092965f4c83.b406f1e71e07babc.e3258ad8c5b81d43.bffc39ee5fb5c1cd
@@ -32843,7 +32843,7 @@
     155b617a79c75e60.97478c6ea46d999a.59a9a85e912ea516.ce4778b899f415ee
     569f787a81b93292.c78ebea218ac9b13.55afac84f32a9028.7cf1cf78f3c5ee54
     0000000000000000
-VTESTPD_256_3(mem)
+VTESTPS_128_1(mem)
   before
     2596b58b754e1d9e.e818affc49c303c6.20a7026e96cf7b52.338494b887361b25
     d8283db5d51eecda.2512046e6d700ea8.7e5ed4be38e2f684.4f745a65eae181bb
@@ -32855,9 +32855,9 @@
     d8283db5d51eecda.2512046e6d700ea8.7e5ed4be38e2f684.4f745a65eae181bb
     9a4acd86c4b02f0a.6bd9723b8a4d8fe3.bd7eb07e1df2c7d5.05cbfcf7b7b40093
     46c8e1e85f11a45b.14b9f6cf3ce5c124.b9d4129a5e0aac70.b1d576da8b3dd25c
-    0000000000000040
+    0000000000000000
 
-VTESTPD_256_3(reg)
+VTESTPS_128_1(reg)
   before
     5b31de43b69e616b.ba6df5c9c14c05f9.7efd8a961ec4e116.4e2d77fe1a365f81
     111bc5a1458f960b.d1078514076d0e0f.03f32cfccc772b66.57535a966a839d36
@@ -32869,8 +32869,8 @@
     111bc5a1458f960b.d1078514076d0e0f.03f32cfccc772b66.57535a966a839d36
     2de873004a650f49.67600eb54d817dc9.01e5d76ee389dbbf.b213374f6cfc21b9
     0be4e4cd63ad08d4.58450b98ad930c55.d2208756fe862cce.3a388a133cada836
-    0000000000000040
-VTESTPD_256_3(mem)
+    0000000000000000
+VTESTPS_128_1(mem)
   before
     40e58470b4e9afd1.075b157229f2bc56.7f82f8a946af78dd.d3f03921bafb5b3f
     770522e1948ba646.7d99015d3ac0687b.bae352d432e27c8d.61a1e83cb373a4bd
@@ -32882,9 +32882,9 @@
     770522e1948ba646.7d99015d3ac0687b.bae352d432e27c8d.61a1e83cb373a4bd
     4bba260eb1969166.c8eaa4f832a348f0.e43493058d37d592.d67e8f12837a42f5
     97d10ce32815295d.4699fab1ac289861.d840392974ba3f18.8fd52d0ec89d7292
-    0000000000000001
+    0000000000000000
 
-VTESTPD_256_3(reg)
+VTESTPS_128_2(reg)
   before
     3e1c362d206478ae.3915514c14152d56.52f3fff344da9379.74d5bf2a0278764a
     eba59b276b21c584.0b54703592a0577e.4744b02a974676e5.92bda1f6537c3655
@@ -32893,11 +32893,11 @@
     9865494df5a60042
   after
     3e1c362d206478ae.3915514c14152d56.52f3fff344da9379.74d5bf2a0278764a
-    eba59b276b21c584.0b54703592a0577e.4744b02a974676e5.92bda1f6537c3655
+    0000000000000000.0000000000000000.83d808c240f77d51.10c55c7784d33a65
     4cd7e5f89a299470.eb59e58abec46400.83d808c240f77d51.10c55c7784d33a65
     bdfd100c4a08211e.b3ef2c37b28d1009.61fb0327dc79e368.c8b96a9bb1873fa5
     0000000000000001
-VTESTPD_256_3(mem)
+VTESTPS_128_2(mem)
   before
     5a9474796d3c3a67.9a6519d0164ba839.41e3c1298d0616c4.3cf89dc50658e5d7
     ec14680b3454a941.3f59faae9a7d646d.6f01214a683b345e.721dd3095b21bf49
@@ -32906,12 +32906,12 @@
     c66befe9706cb36d
   after
     5a9474796d3c3a67.9a6519d0164ba839.41e3c1298d0616c4.3cf89dc50658e5d7
-    ec14680b3454a941.3f59faae9a7d646d.6f01214a683b345e.721dd3095b21bf49
-    28af9fef66fa09fb.0827b114732b9267.1b15c78862382303.5db49f5d7660ad6b
+    0000000000000000.0000000000000000.be1c3ed672f9e93b.c307623af9a71a28
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     eb329711203a16c2.5119396c3ddf6dd3.1feb2fce940aa2de.5b0aff2ff49feae8
     0000000000000040
 
-VTESTPD_256_3(reg)
+VTESTPS_128_2(reg)
   before
     fc2369f9875344a6.1269cb5d7d218bc2.767b8f249227335c.584ed6071dbc6b1c
     577e6bcad4ded83e.7720b7c09aba2526.d39bada7118f1eaf.a30c3621165b3be9
@@ -32920,11 +32920,11 @@
     7f578de7c4382c5e
   after
     fc2369f9875344a6.1269cb5d7d218bc2.767b8f249227335c.584ed6071dbc6b1c
-    577e6bcad4ded83e.7720b7c09aba2526.d39bada7118f1eaf.a30c3621165b3be9
+    0000000000000000.0000000000000000.c4c4916054a26b78.daefcd079df2ce70
     34c7f0c8f39bace2.f722d82493129f1b.c4c4916054a26b78.daefcd079df2ce70
     f04bf45f8215fc3e.6e3da8778234b7cc.a54136bdf7ec5562.dac416a5ce8de0dd
     0000000000000001
-VTESTPD_256_3(mem)
+VTESTPS_128_2(mem)
   before
     a574afba9b006f1c.e55773fb1ad904fd.b83ba5a4862c2766.d15f982997f9191a
     28e6f60870f06446.703569085972ffcb.b2e94a96b806ab15.a66bb311cf56f34b
@@ -32933,12 +32933,12 @@
     ac1135e123c15b71
   after
     a574afba9b006f1c.e55773fb1ad904fd.b83ba5a4862c2766.d15f982997f9191a
-    28e6f60870f06446.703569085972ffcb.b2e94a96b806ab15.a66bb311cf56f34b
-    e57be0be5f15c906.ed32d3f2da6d2a55.3613133b37cf0104.7fae84df3c8e1fa2
+    0000000000000000.0000000000000000.47c45a5b79d3d899.2ea067d66806e6e5
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     b6fde8c9837a5888.b999ac263a54c147.21857d7e1c93e360.b8770600792ed8cb
-    0000000000000000
+    0000000000000040
 
-VTESTPD_256_3(reg)
+VTESTPS_128_2(reg)
   before
     b9c70decd5d3e441.78398b13f82bcefa.2eb8f00e15b5ff4d.4f0b034b855c0e54
     39e78b8f2bf1afe6.07fb438adb35e685.a9d99c18061c2212.9c71218f8e383e0d
@@ -32947,11 +32947,11 @@
     d5d8e4557db2418c
   after
     b9c70decd5d3e441.78398b13f82bcefa.2eb8f00e15b5ff4d.4f0b034b855c0e54
-    39e78b8f2bf1afe6.07fb438adb35e685.a9d99c18061c2212.9c71218f8e383e0d
+    0000000000000000.0000000000000000.8649aaaea9136442.e482533452322eb7
     8abba934c2a5f70d.3f0f8e1947a35d58.8649aaaea9136442.e482533452322eb7
     07906549367ef961.fc41e7ac5981ef9d.2155183e9b28018b.030b1527ee579b7d
-    0000000000000040
-VTESTPD_256_3(mem)
+    0000000000000001
+VTESTPS_128_2(mem)
   before
     36b53ba81b4fdb0f.0bb2bb392205f18f.1a5cca2f2cdc5880.d646e13377e73796
     016e960ee53b2733.f46ca57022c81a43.742eb48eddbf532e.016b01f9dadb4012
@@ -32960,12 +32960,12 @@
     de034569416ea9d9
   after
     36b53ba81b4fdb0f.0bb2bb392205f18f.1a5cca2f2cdc5880.d646e13377e73796
-    016e960ee53b2733.f46ca57022c81a43.742eb48eddbf532e.016b01f9dadb4012
-    14cf7171f781df24.1c0c205ad353b128.e8811fb587369dd3.fe0f75fc5f9058a9
+    0000000000000000.0000000000000000.e5a335d0d323a77f.29b91ecc8818c869
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     4aa348bf6b2dbf0d.e1dc2963d130f2eb.51228990474ef29b.297d37a8a392bd07
     0000000000000040
 
-VTESTPD_256_3(reg)
+VTESTPS_128_3(reg)
   before
     79eb9bacd5af59cb.7fb898e3604c851b.9d2abbf7b7ed1938.8bdd6d0c38120eb0
     568233dbfce20989.8fd8dcc9f0e9eb79.ad40d383211561ba.727d4813778eac41
@@ -32977,8 +32977,8 @@
     568233dbfce20989.8fd8dcc9f0e9eb79.ad40d383211561ba.727d4813778eac41
     d1140a635291f4be.55d0905d3710ae54.6e6b6b71ac35071d.e1d094931fcf8978
     45ec1db1724b5716.af6c308b52ce89d7.3af6812ff3d8470f.b6a0cf764ce06182
-    0000000000000000
-VTESTPD_256_3(mem)
+    0000000000000040
+VTESTPS_128_3(mem)
   before
     feebff1aa8a3f0bd.10586730f9996e3e.787739405c2e3930.6e2f1027938a5c39
     2afdedb20e6d2047.8da2e44b810975e2.8bbf2666723c7a88.666014c727d8844a
@@ -32992,7 +32992,7 @@
     dcf6de0ad60efc0d.0c03690a0b7d414c.03319cb930949feb.13de6cac9d76f7cc
     0000000000000001
 
-VBLENDVPS_128(reg)
+VTESTPS_128_3(reg)
   before
     1fcf683d341081f4.1a76daa270fd20a3.c7b2678543997e6b.20f41dbe10f6fa4e
     4f507b74b39b8594.c20728125410633f.a3708a4dee069cb5.f72373e56b35d661
@@ -33000,12 +33000,12 @@
     cfe2b3dc22e6364a.bc8fac2b68d4343a.334827750b04667c.47f58b480580ff49
     782f455d7ba3c576
   after
-    0000000000000000.0000000000000000.a3708a4dee069cb5.f72373e56b35d661
+    1fcf683d341081f4.1a76daa270fd20a3.c7b2678543997e6b.20f41dbe10f6fa4e
     4f507b74b39b8594.c20728125410633f.a3708a4dee069cb5.f72373e56b35d661
     6b93eadbce080322.ae7645479d54800d.fe89cbcfa750d5d7.668a19195e60ee51
     cfe2b3dc22e6364a.bc8fac2b68d4343a.334827750b04667c.47f58b480580ff49
-    782f455d7ba3c576
-VBLENDVPS_128(mem)
+    0000000000000040
+VTESTPS_128_3(mem)
   before
     d305c445dcd4fc03.d78ad0e44abe5bb7.c61ed8acd09d3bf2.9dfa9badb5ae8a51
     354483ea451f601d.dfd74060e21eae16.aaef48b5f2ba5160.9aeb22e142d87f01
@@ -33015,11 +33015,11 @@
   after
     d305c445dcd4fc03.d78ad0e44abe5bb7.c61ed8acd09d3bf2.9dfa9badb5ae8a51
     354483ea451f601d.dfd74060e21eae16.aaef48b5f2ba5160.9aeb22e142d87f01
-    0000000000000000.0000000000000000.aaef48b5d09d3bf2.9dfa9bad42d87f01
+    7bb5fe39d291acf0.4315fcbb87916a12.42cd7531e93731b1.8467b87f4d107f39
     7f27b11e9d359da7.5f900160d4a3cc58.6b86dd0ed2209810.b8ba5af173e1c6a5
-    933002a54fd892f0
+    0000000000000000
 
-VBLENDVPS_128(reg)
+VTESTPS_128_3(reg)
   before
     6f14ae067d801dc7.1e651886c518ee6f.8f944cbd66e11093.01e4fa37c88242aa
     a9b459809a65a4d6.343ab05c64455d74.2f6cd83dd8d67171.e1b44a98e768eaab
@@ -33027,12 +33027,12 @@
     a8539d6f10189549.36dd600178ae7fe2.2ecba456ce177ec0.eada71b313f22790
     ccc7404457ad34cc
   after
-    0000000000000000.0000000000000000.2f6cd83dc70f2d9b.e5c2491de768eaab
+    6f14ae067d801dc7.1e651886c518ee6f.8f944cbd66e11093.01e4fa37c88242aa
     a9b459809a65a4d6.343ab05c64455d74.2f6cd83dd8d67171.e1b44a98e768eaab
     9e5a007f421463c8.9d74f48b96c8a4e1.9b65a14cc70f2d9b.e5c2491d4ddf4d3e
     a8539d6f10189549.36dd600178ae7fe2.2ecba456ce177ec0.eada71b313f22790
-    ccc7404457ad34cc
-VBLENDVPS_128(mem)
+    0000000000000000
+VTESTPS_128_3(mem)
   before
     675731bd341d2f1f.24eb2ebda0fd7706.d94270a92502aca4.46eadbc88a7aa08a
     9754c00bc74dd5b5.6e6daed38f5045ab.636fa16fb9d0e553.3e0e440c96c4d1a5
@@ -33042,11 +33042,11 @@
   after
     675731bd341d2f1f.24eb2ebda0fd7706.d94270a92502aca4.46eadbc88a7aa08a
     9754c00bc74dd5b5.6e6daed38f5045ab.636fa16fb9d0e553.3e0e440c96c4d1a5
-    0000000000000000.0000000000000000.d94270a9b9d0e553.3e0e440c96c4d1a5
+    388b69192c49e2b9.e327191e799c3ae4.b0306d3f5224e71b.7283da8f8f824bbe
     26c8a9d27e1d1258.dd636b0bf96e935c.9c505205090b6e27.3d9499be103f4b81
-    fd8e7e03b6880c99
+    0000000000000000
 
-VBLENDVPS_128(reg)
+VTESTPS_128_3(reg)
   before
     0cbe84cc1ce8cbb3.3dd7fb24d9d620bd.b96fa105ab508cbf.039dccadfc9135a3
     c86ea684deebc47b.5984dafa5a80c915.d395b6772cd061bb.c1e1552447c0f9bc
@@ -33054,12 +33054,12 @@
     b3803471e90c54c2.10e735e23cd3db4d.31616d7809d98d28.b281882b524e6774
     9c752a934bc58a6b
   after
-    0000000000000000.0000000000000000.d395b6772cd061bb.b2e96b5447c0f9bc
+    0cbe84cc1ce8cbb3.3dd7fb24d9d620bd.b96fa105ab508cbf.039dccadfc9135a3
     c86ea684deebc47b.5984dafa5a80c915.d395b6772cd061bb.c1e1552447c0f9bc
     8beae397991e339c.569ac5401c25c88c.8722a6cf177a4df9.b2e96b5405a6769e
     b3803471e90c54c2.10e735e23cd3db4d.31616d7809d98d28.b281882b524e6774
-    9c752a934bc58a6b
-VBLENDVPS_128(mem)
+    0000000000000000
+VTESTPS_128_3(mem)
   before
     4e90cd7a0c1699af.9a7b977e6941629b.6335a8ccd596bc85.2da007de9d795df2
     a3a0ebcbb04d506b.9e26062ab54a9ad1.2b5199ea0478285f.d72a716d70e6f903
@@ -33069,11 +33069,11 @@
   after
     4e90cd7a0c1699af.9a7b977e6941629b.6335a8ccd596bc85.2da007de9d795df2
     a3a0ebcbb04d506b.9e26062ab54a9ad1.2b5199ea0478285f.d72a716d70e6f903
-    0000000000000000.0000000000000000.6335a8ccd596bc85.2da007de70e6f903
+    776f027253776dcc.19ce7fe16ab23710.43078429e487da08.8b4aa6921dad9c08
     a6ca8d5b129faafd.69bffe1023057605.8922e57391cf8fac.a54da2b7405983ad
-    817f61497676e99e
+    0000000000000000
 
-VBLENDVPS_256(reg)
+VTESTPS_128_3(reg)
   before
     7a2ce0b55b910c86.0b7d087208d1c42b.e8457d217dcf935c.d87039b6285a0376
     eea01a658a352611.8454efa3521a7682.f3acfa82139dcac0.0cbbfadcc536f293
@@ -33081,12 +33081,12 @@
     b40baf46374a31c3.1e9df304501f9558.1e4cdbe065747561.927cb8867e0f3074
     9c89ade1d324f690
   after
-    38260bc78a352611.8454efa3521a7682.f3acfa82139dcac0.00d1a6d3c536f293
+    7a2ce0b55b910c86.0b7d087208d1c42b.e8457d217dcf935c.d87039b6285a0376
     eea01a658a352611.8454efa3521a7682.f3acfa82139dcac0.0cbbfadcc536f293
     38260bc79fef74ec.ec1bbfda0b857d2d.e740709d82fb57de.00d1a6d3836f172e
     b40baf46374a31c3.1e9df304501f9558.1e4cdbe065747561.927cb8867e0f3074
-    9c89ade1d324f690
-VBLENDVPS_256(mem)
+    0000000000000040
+VTESTPS_128_3(mem)
   before
     fcc400d09eba28af.bd9c024eeed29b41.f8a8070b3cf27a31.f51d37b6599461f6
     8df82c3ffadc80fd.b123014b5f14ec13.540677ddec0ce8e2.c800818bf9e75649
@@ -33096,11 +33096,11 @@
   after
     fcc400d09eba28af.bd9c024eeed29b41.f8a8070b3cf27a31.f51d37b6599461f6
     8df82c3ffadc80fd.b123014b5f14ec13.540677ddec0ce8e2.c800818bf9e75649
-    fcc400d09eba28af.bd9c024eeed29b41.540677ddec0ce8e2.f51d37b6599461f6
+    2af3af1a0396bba5.ebeda7a9269a60e5.1084bf647b799a97.f33fb3cbe2fa9205
     b07f054ed6f495d4.c645f0d4e0f33562.06ee5c8e05444d7d.d226cbe2af584fd7
-    c203c53cfc8dca6a
+    0000000000000000
 
-VBLENDVPS_256(reg)
+VTESTPS_128_3(reg)
   before
     1d219b4566263e6b.fc69a8c58e03c9b6.a079d83828a8a536.1410c946a779bcc0
     40cb4b6a89aee886.e87d166c48ce1576.d3d35c419b47ed0f.14b582787d24a48b
@@ -33108,12 +33108,12 @@
     4ef626b467bcceb8.145340fc30c9df42.b82d25f37071f37a.5ebcc9fa320ecf6c
     5fb54f224a658ad9
   after
-    40cb4b6a89aee886.e87d166c48ce1576.bda1775c9b47ed0f.14b582787d24a48b
+    1d219b4566263e6b.fc69a8c58e03c9b6.a079d83828a8a536.1410c946a779bcc0
     40cb4b6a89aee886.e87d166c48ce1576.d3d35c419b47ed0f.14b582787d24a48b
     874ed01500b10466.5287ca301f623240.bda1775cd45b4897.e4ab0310a252c10b
     4ef626b467bcceb8.145340fc30c9df42.b82d25f37071f37a.5ebcc9fa320ecf6c
-    5fb54f224a658ad9
-VBLENDVPS_256(mem)
+    0000000000000000
+VTESTPS_128_3(mem)
   before
     c46211750661ad7e.f10f49b15b5a8127.0bacf4bb9612d6a6.22c462740a142b65
     678f8bdd8111f588.cbe5357a78185a60.1460635b6d46d498.55b22a4a3fd02904
@@ -33123,11 +33123,11 @@
   after
     c46211750661ad7e.f10f49b15b5a8127.0bacf4bb9612d6a6.22c462740a142b65
     678f8bdd8111f588.cbe5357a78185a60.1460635b6d46d498.55b22a4a3fd02904
-    c46211758111f588.f10f49b15b5a8127.0bacf4bb9612d6a6.22c462740a142b65
+    25073948d77e1d23.3ac3e77a5981950f.093908c7d3739545.af427ae1aa322c02
     da9898a025b6e37b.99f75a1d9a216edf.c7045febe1a4d5d9.8ac24da4e7c56e0c
-    437c9f0193152ccd
+    0000000000000001
 
-VBLENDVPS_256(reg)
+VTESTPS_128_3(reg)
   before
     37bd6c634aafa1f3.630c23d386c401bb.44cb8acfd884207d.2a8de4b3b5e64f7f
     c0d1b137a71e0b27.9a3156cc17b5330f.978c74fcae37e894.0ea0130c6b43c064
@@ -33135,12 +33135,12 @@
     04a28fe0c4aca86f.85b8a5bf376dc7a6.a405627894bba9e0.ca93611cea847699
     590b77adec7f3342
   after
-    c0d1b13746eea417.5cd1ad7717b5330f.ed861210b9c501d1.500869e01ecae3b3
+    37bd6c634aafa1f3.630c23d386c401bb.44cb8acfd884207d.2a8de4b3b5e64f7f
     c0d1b137a71e0b27.9a3156cc17b5330f.978c74fcae37e894.0ea0130c6b43c064
     3b0468e746eea417.5cd1ad77f39437a5.ed861210b9c501d1.500869e01ecae3b3
     04a28fe0c4aca86f.85b8a5bf376dc7a6.a405627894bba9e0.ca93611cea847699
-    590b77adec7f3342
-VBLENDVPS_256(mem)
+    0000000000000001
+VTESTPS_128_3(mem)
   before
     d93d287e3fc6d7d9.77f6218fbde355db.f1b4b893fe4da041.17545f9edba41a6c
     26f5ee7a00661d8b.f14e1b5ecc1fe506.7c9064dc643e7ea0.a1c105f02c0c9121
@@ -33150,11 +33150,11 @@
   after
     d93d287e3fc6d7d9.77f6218fbde355db.f1b4b893fe4da041.17545f9edba41a6c
     26f5ee7a00661d8b.f14e1b5ecc1fe506.7c9064dc643e7ea0.a1c105f02c0c9121
-    d93d287e00661d8b.f14e1b5ebde355db.7c9064dcfe4da041.a1c105f02c0c9121
+    1cff478f4b6ac283.ccf477bb8ded959c.02172487864f1cef.a09651d8207f49ad
     9727aea83ade82ee.653533119dd8a14a.5f1675808089375c.6f203ec4558a80ba
-    69abc81f67b970f4
+    0000000000000000
 
-VBLENDVPD_128(reg)
+VTESTPS_128_3(reg)
   before
     ec83eb55f1965508.73389fb1eccf19f8.185d4acc976d44bc.6f59d1b46dfa8b10
     52f4a3d28faf6da2.8b0097967a4842cc.41b8b9581836bb9e.0eacb60d6aaed33a
@@ -33162,12 +33162,12 @@
     3bd0c4517ac32116.e4e088a5a0033d84.65368b931c9a145f.68b209e3010b339a
     dcfc6e36d4cec129
   after
-    0000000000000000.0000000000000000.41b8b9581836bb9e.0eacb60d6aaed33a
+    ec83eb55f1965508.73389fb1eccf19f8.185d4acc976d44bc.6f59d1b46dfa8b10
     52f4a3d28faf6da2.8b0097967a4842cc.41b8b9581836bb9e.0eacb60d6aaed33a
     f949ed02de8ff26d.bd4910430355ba97.3c917a21bbc2429b.18db9f7992afcd04
     3bd0c4517ac32116.e4e088a5a0033d84.65368b931c9a145f.68b209e3010b339a
-    dcfc6e36d4cec129
-VBLENDVPD_128(mem)
+    0000000000000041
+VTESTPS_128_3(mem)
   before
     4f874c60260235dd.76d3242bfdd63549.dc917aa66f5d87c0.18f1e71ad94c6f97
     9d1d1e4c14b549e1.049f09fc06546cb1.812762338c6f5376.b00f8a228b638def
@@ -33177,11 +33177,11 @@
   after
     4f874c60260235dd.76d3242bfdd63549.dc917aa66f5d87c0.18f1e71ad94c6f97
     9d1d1e4c14b549e1.049f09fc06546cb1.812762338c6f5376.b00f8a228b638def
-    0000000000000000.0000000000000000.812762338c6f5376.b00f8a228b638def
+    a18b60e6b9f3ba62.42806f312fca00fa.ae70bd3912465ed4.8bdc7018d06baa13
     399d8e1b32c6438c.8dc2533414c32dd2.413606a31eed6403.04a4966644f104ad
-    77b3f67a8280d56c
+    0000000000000040
 
-VBLENDVPD_128(reg)
+VTESTPS_128_3(reg)
   before
     40548ebe26a55afa.401e25d59a3ca18a.3fb0b07352cb31e2.1547b95ccb702032
     bad55aa0cdebce04.91dca0010e619089.b5988259846f46d9.056d525235dc4f8b
@@ -33189,12 +33189,12 @@
     36a27aeb930a763a.853a326088e51138.5d8176ca36b89626.ae2b27a2b29cf56c
     1d5a5bd4fd09e54d
   after
-    0000000000000000.0000000000000000.b5988259846f46d9.ef754d70793cad3a
+    40548ebe26a55afa.401e25d59a3ca18a.3fb0b07352cb31e2.1547b95ccb702032
     bad55aa0cdebce04.91dca0010e619089.b5988259846f46d9.056d525235dc4f8b
     4380548b13de6e35.0aa17b8ca93fccb4.4bc4c552463aa961.ef754d70793cad3a
     36a27aeb930a763a.853a326088e51138.5d8176ca36b89626.ae2b27a2b29cf56c
-    1d5a5bd4fd09e54d
-VBLENDVPD_128(mem)
+    0000000000000040
+VTESTPS_128_3(mem)
   before
     1ad065f2768e3708.ee87c72ce9fc22bf.e073416bc65c1a40.481b902ded7648d6
     7f57c1e93738a7ca.c97b37bab240ad6f.f518259880b2a4f9.66de0fe709fffc1b
@@ -33204,11 +33204,11 @@
   after
     1ad065f2768e3708.ee87c72ce9fc22bf.e073416bc65c1a40.481b902ded7648d6
     7f57c1e93738a7ca.c97b37bab240ad6f.f518259880b2a4f9.66de0fe709fffc1b
-    0000000000000000.0000000000000000.e073416bc65c1a40.481b902ded7648d6
+    29bceca35f12f3be.22c9c601896055f6.a2f559d3d1f26a8f.1416ef6426dfeea1
     f5cb600e0728d512.54bf716e0bea5302.c1d65908d528292d.ae0e2c10dfa35915
-    9014c358d0d67a22
+    0000000000000001
 
-VBLENDVPD_128(reg)
+VTESTPS_128_3(reg)
   before
     1672afa696058d76.bd509b144e860aef.bda7326bd369e63d.3086a123a9619d00
     9c75ec68cdbbceba.5f1718a34d394e83.b7ce07667e6a4853.c9d2ae1069a88234
@@ -33216,12 +33216,12 @@
     18994af4fbecc8c9.9c9ac908e9ccf180.d209db02eb1f6cc3.ed6f03101a928e6c
     2f5645fc444c2dca
   after
-    0000000000000000.0000000000000000.a080ecc9a778b6f1.6987fbbb300a94f4
+    1672afa696058d76.bd509b144e860aef.bda7326bd369e63d.3086a123a9619d00
     9c75ec68cdbbceba.5f1718a34d394e83.b7ce07667e6a4853.c9d2ae1069a88234
     7e6976081084789d.b5eb54a6234c5cfa.a080ecc9a778b6f1.6987fbbb300a94f4
     18994af4fbecc8c9.9c9ac908e9ccf180.d209db02eb1f6cc3.ed6f03101a928e6c
-    2f5645fc444c2dca
-VBLENDVPD_128(mem)
+    0000000000000001
+VTESTPS_128_3(mem)
   before
     0c0a3a69c9442c38.c65362972b80faea.f0eef5b7bdc4c940.aab4d27ce5eca574
     60556045c68749e2.e3e1bc5d3bcb4aae.8eb4539ebb409f66.85cfcba3316a9fb1
@@ -33231,11 +33231,11 @@
   after
     0c0a3a69c9442c38.c65362972b80faea.f0eef5b7bdc4c940.aab4d27ce5eca574
     60556045c68749e2.e3e1bc5d3bcb4aae.8eb4539ebb409f66.85cfcba3316a9fb1
-    0000000000000000.0000000000000000.8eb4539ebb409f66.aab4d27ce5eca574
+    0805327a56203ef5.cd9153b2c85af3be.50b85faafe4c3020.bda4c4e36c259325
     dee42cf6961cc79d.dfad24026db732c9.13c696c5a2f53897.af80b9a832aac07d
-    b8afa45e1e846065
+    0000000000000000
 
-VBLENDVPD_256(reg)
+VTESTPS_256_1(reg)
   before
     327d8371cc3fb088.bfbfcaa4a186a205.758229b9c7714379.b3a973dcc44673fa
     7a36514ed968ec93.87628870946a895a.ea5c60447111617a.0c2f71dc804c9c73
@@ -33243,12 +33243,12 @@
     e498aa127e311710.3c2f5612a0d26e79.e64e52822738b722.594fc64333a4ab59
     05821382630f091d
   after
-    ec260a5fe18a5032.87628870946a895a.9c86c40d0825c979.0c2f71dc804c9c73
+    327d8371cc3fb088.bfbfcaa4a186a205.758229b9c7714379.b3a973dcc44673fa
     7a36514ed968ec93.87628870946a895a.ea5c60447111617a.0c2f71dc804c9c73
     ec260a5fe18a5032.1299e3468ad539c7.9c86c40d0825c979.fa220faff112702e
     e498aa127e311710.3c2f5612a0d26e79.e64e52822738b722.594fc64333a4ab59
-    05821382630f091d
-VBLENDVPD_256(mem)
+    0000000000000000
+VTESTPS_256_1(mem)
   before
     da87735a9c5e45a9.bed92ed14fea7ed9.e1f25dc1f16de39c.23fe040d6bd76720
     b42a61b6fb9d1c27.d735910aee40c03a.ddac753d99b2555b.b1e3d81c6f8d1420
@@ -33258,11 +33258,11 @@
   after
     da87735a9c5e45a9.bed92ed14fea7ed9.e1f25dc1f16de39c.23fe040d6bd76720
     b42a61b6fb9d1c27.d735910aee40c03a.ddac753d99b2555b.b1e3d81c6f8d1420
-    da87735a9c5e45a9.d735910aee40c03a.ddac753d99b2555b.b1e3d81c6f8d1420
+    6f3659829bd949c3.89f8cf28f7c01bdf.0c2a1873b5ae80e3.eb49c91acfe6fbce
     e779d8aa991d8aab.316ee49707f4c974.4a38c450616d1f5f.2c7cd372286f58d5
-    d2c8f29216b266e1
+    0000000000000001
 
-VBLENDVPD_256(reg)
+VTESTPS_256_1(reg)
   before
     377823e6343e62a0.f8bd591a10759908.2be3cdc3b96a07a4.73a2f4beb8f9f0fc
     b8da61d81e9c88bc.7ecf57bf1ded3309.d3a28418a9ae101b.623324abd660ade5
@@ -33270,12 +33270,12 @@
     7fdff449c80441bc.588cc0536770f6a1.9c3251eeb6cd7691.07fe76afd9eddd4e
     74cf8f9ef62bc826
   after
-    b8da61d81e9c88bc.7ecf57bf1ded3309.84f80702754b2186.623324abd660ade5
+    377823e6343e62a0.f8bd591a10759908.2be3cdc3b96a07a4.73a2f4beb8f9f0fc
     b8da61d81e9c88bc.7ecf57bf1ded3309.d3a28418a9ae101b.623324abd660ade5
     b238a8d5715a14e1.547b5083db9213d8.84f80702754b2186.f5b9d102d8ae1248
     7fdff449c80441bc.588cc0536770f6a1.9c3251eeb6cd7691.07fe76afd9eddd4e
-    74cf8f9ef62bc826
-VBLENDVPD_256(mem)
+    0000000000000000
+VTESTPS_256_1(mem)
   before
     17f898bb4b7490fa.7d1b41a1c0244cf9.65d0211cdc929891.769a5f460ac04be7
     ce450df2f2d2f0f6.06388c47f4487143.5711f1c95604b5d4.6e7c2b770db1db35
@@ -33285,11 +33285,11 @@
   after
     17f898bb4b7490fa.7d1b41a1c0244cf9.65d0211cdc929891.769a5f460ac04be7
     ce450df2f2d2f0f6.06388c47f4487143.5711f1c95604b5d4.6e7c2b770db1db35
-    17f898bb4b7490fa.06388c47f4487143.5711f1c95604b5d4.6e7c2b770db1db35
+    74826b300a54a547.7781d0a901fceb47.091dab45f2d20895.e026b3ee5a2b6327
     e47a2c5fac036b19.2c44093282caf7b0.59becb7ecc094f01.28e3f2168dbb1f68
-    a1fee45a43ec4ba5
+    0000000000000000
 
-VBLENDVPD_256(reg)
+VTESTPS_256_1(reg)
   before
     a9c48628184a2289.fcfbce6cf6edfe97.82cb334e1440d12b.22c1ce5fffb44344
     9b81d2eba761e1c1.96cfcd44041d1aee.d3634b6852eab564.3ff22ed4a7dfa389
@@ -33297,12 +33297,12 @@
     ac105d0164ed06dc.c4a3ce01da80dbd6.d9f6324c440689be.e90dfa2ac8e792cb
     2e8f5de479db9a20
   after
-    d281c60f8cbec4f9.90c3a3d2f19f7a4a.7c584ceed952de06.8e1c69c9e19729fd
+    a9c48628184a2289.fcfbce6cf6edfe97.82cb334e1440d12b.22c1ce5fffb44344
     9b81d2eba761e1c1.96cfcd44041d1aee.d3634b6852eab564.3ff22ed4a7dfa389
     d281c60f8cbec4f9.90c3a3d2f19f7a4a.7c584ceed952de06.8e1c69c9e19729fd
     ac105d0164ed06dc.c4a3ce01da80dbd6.d9f6324c440689be.e90dfa2ac8e792cb
-    2e8f5de479db9a20
-VBLENDVPD_256(mem)
+    0000000000000000
+VTESTPS_256_1(mem)
   before
     376f0fe10f80fc27.8379942bca78e416.103bc9bfdacbf8be.4689f9ec2f92f237
     e1798b0fa7e1760d.b50a65fa5bed9a55.4e5610f70d8c8e30.1f5c9d3b3781541e
@@ -33312,11 +33312,11 @@
   after
     376f0fe10f80fc27.8379942bca78e416.103bc9bfdacbf8be.4689f9ec2f92f237
     e1798b0fa7e1760d.b50a65fa5bed9a55.4e5610f70d8c8e30.1f5c9d3b3781541e
-    376f0fe10f80fc27.8379942bca78e416.4e5610f70d8c8e30.4689f9ec2f92f237
+    09794d585c0bc1fe.9c0dcedbb2d76443.5cc21f9590d05956.c0bc1ba5f85fed1f
     893bd1aa4b099c25.96cfca386cc37d8c.144973857fa2155c.85f66e970db8f7e5
-    ca54927b1219ae1d
+    0000000000000000
 
-VPMULDQ_128(reg)
+VTESTPS_256_2(reg)
   before
     eb2383bfa40d5072.3e8a93f08fe7c1af.fd9c557f243c22dd.53b886b4f50f7e6f
     44ae3ece5f211791.0534101645b1edc7.2fc06c1a77ce8fe2.f6dbd60c0e224fbb
@@ -33324,12 +33324,12 @@
     0e2cfefdbdd506dc.34c428b2753b4a54.603c2a015b6fafb6.d36d1beb9b6a1bac
     c673084947b88fa9
   after
-    0000000000000000.0000000000000000.0003464ee31975cc.feab6b01d691ba29
-    44ae3ece5f211791.0534101645b1edc7.2fc06c1a77ce8fe2.f6dbd60c0e224fbb
+    eb2383bfa40d5072.3e8a93f08fe7c1af.fd9c557f243c22dd.53b886b4f50f7e6f
+    3143bd14dddf4026.b803c2078874dc9b.868709770006ff46.d77edf7ae7e7456b
     3143bd14dddf4026.b803c2078874dc9b.868709770006ff46.d77edf7ae7e7456b
     0e2cfefdbdd506dc.34c428b2753b4a54.603c2a015b6fafb6.d36d1beb9b6a1bac
-    c673084947b88fa9
-VPMULDQ_128(mem)
+    0000000000000001
+VTESTPS_256_2(mem)
   before
     8d5d208206dd5b8f.37b7fdf5988fa660.5543bb002713f220.172dca242595dbdd
     02f8e281f5e33b8a.072eb4680d985c5d.f84cf8deba07912b.08a4e54cfa05bf68
@@ -33338,12 +33338,12 @@
     d02af31bce841017
   after
     8d5d208206dd5b8f.37b7fdf5988fa660.5543bb002713f220.172dca242595dbdd
-    02f8e281f5e33b8a.072eb4680d985c5d.f84cf8deba07912b.08a4e54cfa05bf68
-    0000000000000000.0000000000000000.f551b37fbb5dcb60.ff1f54e0313c34c8
+    72a2df7df922a470.c848020a6770599f.aabc44ffd8ec0ddf.e8d235dbda6a2422
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     696b4c81d1c72b6d.11123e6f2fc8f975.2f2b62fbf574a3ad.09577e5c32f09d59
-    d02af31bce841017
+    0000000000000040
 
-VPMULDQ_128(reg)
+VTESTPS_256_2(reg)
   before
     41b5d38fe5912ae9.13ddee5af6bdb2ad.011809dc140658e7.7c998611d5048e7b
     b8421a2511a3297a.dc2f28a9bbc53eb2.0a3a7e7302c5bd82.bac1446807e26038
@@ -33351,12 +33351,12 @@
     2896ce631e08c08a.3ba15559923c53ba.d30652d468ef88e7.796f8085ceb1a72f
     b28df5249cbc95c0
   after
-    0000000000000000.0000000000000000.fed8e491aa9b67e8.fd3b260aeadc6380
-    b8421a2511a3297a.dc2f28a9bbc53eb2.0a3a7e7302c5bd82.bac1446807e26038
+    41b5d38fe5912ae9.13ddee5af6bdb2ad.011809dc140658e7.7c998611d5048e7b
+    911fc548f1474776.a02c765a3beb8aa8.87c697a2958e64f4.c56f19eaa617d410
     911fc548f1474776.a02c765a3beb8aa8.87c697a2958e64f4.c56f19eaa617d410
     2896ce631e08c08a.3ba15559923c53ba.d30652d468ef88e7.796f8085ceb1a72f
-    b28df5249cbc95c0
-VPMULDQ_128(mem)
+    0000000000000001
+VTESTPS_256_2(mem)
   before
     4c94f4b32b425aef.d9f434e43772d162.895a3f93ddc35515.4c47aa7418736607
     2352f91e9851b1e9.0084f036d512b7aa.6623b2f2388c4be4.4cd59bf040a73a01
@@ -33365,12 +33365,12 @@
     1643debfa2d6cfc1
   after
     4c94f4b32b425aef.d9f434e43772d162.895a3f93ddc35515.4c47aa7418736607
-    2352f91e9851b1e9.0084f036d512b7aa.6623b2f2388c4be4.4cd59bf040a73a01
-    0000000000000000.0000000000000000.f86ff748db60edb4.062cd2538c21fc07
+    b36b0b4cd4bda510.260bcb1bc88d2e9d.76a5c06c223caaea.b3b8558be78c99f8
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     f71e07397a3808ed.206e5efd1622ec37.3c1520d48b160791.55073929694cb232
-    1643debfa2d6cfc1
+    0000000000000040
 
-VPMULDQ_128(reg)
+VTESTPS_256_2(reg)
   before
     cefd0cdfc43fd2d9.adc507c02728804f.d160084bf0aab4d5.eed5142ebcee43c6
     db7fbff66b13f628.1051fdd421d07a2c.68b4f919c1974093.9fd67f5e6d396520
@@ -33378,12 +33378,12 @@
     5f0da5bab52e9414.4c4cbc4f6f7ae705.b8b5a1e9b6d1931d.6dc6b0f0bc5546f1
     434e6c2a923f7dc0
   after
-    0000000000000000.0000000000000000.f71c8d72e32f3414.e148c6fbb7f1ab40
-    db7fbff66b13f628.1051fdd421d07a2c.68b4f919c1974093.9fd67f5e6d396520
+    cefd0cdfc43fd2d9.adc507c02728804f.d160084bf0aab4d5.eed5142ebcee43c6
+    9716f37131df7857.fc90665f853db3af.41b72dd42475cc1c.2be2df50b80227ca
     9716f37131df7857.fc90665f853db3af.41b72dd42475cc1c.2be2df50b80227ca
     5f0da5bab52e9414.4c4cbc4f6f7ae705.b8b5a1e9b6d1931d.6dc6b0f0bc5546f1
-    434e6c2a923f7dc0
-VPMULDQ_128(mem)
+    0000000000000001
+VTESTPS_256_2(mem)
   before
     884590ea59cb8964.8fb2d03f908c850b.de537d8efa94d159.29f950c21236d242
     1779991c2a052609.844f706b618689e8.8c6f250a42952ed8.efd136cdd431c536
@@ -33392,12 +33392,12 @@
     dfc10b4c9a182ca8
   after
     884590ea59cb8964.8fb2d03f908c850b.de537d8efa94d159.29f950c21236d242
-    1779991c2a052609.844f706b618689e8.8c6f250a42952ed8.efd136cdd431c536
-    0000000000000000.0000000000000000.fe973598f5fba118.fce21e62edff23ec
+    77ba6f15a634769b.704d2fc06f737af4.21ac8271056b2ea6.d606af3dedc92dbd
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     88c3488860b50304.28a500674e7bb401.b11916667c823006.ef689726fd16b63d
-    dfc10b4c9a182ca8
+    0000000000000040
 
-VCMPPD_256_0x4(reg)
+VTESTPS_256_3(reg)
   before
     96dba6530fe04593.2073e598fc42bab3.90f5e810a48f5497.de3e571ea5854e0c
     6f0564a7f6f93fa9.748d57cb14aef212.2c6e35105e6ef6c1.99aa70c3fba0ceee
@@ -33405,12 +33405,12 @@
     f6b53ae68b50c108.bb37a7472651d392.710aeec670be3088.2582127fa04fe6f0
     ae87957027fbf669
   after
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    96dba6530fe04593.2073e598fc42bab3.90f5e810a48f5497.de3e571ea5854e0c
     6f0564a7f6f93fa9.748d57cb14aef212.2c6e35105e6ef6c1.99aa70c3fba0ceee
     c58a41b4ebf05496.5ee0190cc304664e.585be3d419a4d62e.bc27da3f9bdf6cd5
     f6b53ae68b50c108.bb37a7472651d392.710aeec670be3088.2582127fa04fe6f0
-    ae87957027fbf669
-VCMPPD_256_0x4(mem)
+    0000000000000000
+VTESTPS_256_3(mem)
   before
     3402defc4bef596d.5cd34aaa71a5c1a9.685d7d68589ff50b.d1c55353ff473f7b
     94bf69112938cb27.55316d6a3a7c9225.3f1f175b75fd88e4.d5d90de863cc40b5
@@ -33420,11 +33420,11 @@
   after
     3402defc4bef596d.5cd34aaa71a5c1a9.685d7d68589ff50b.d1c55353ff473f7b
     94bf69112938cb27.55316d6a3a7c9225.3f1f175b75fd88e4.d5d90de863cc40b5
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    a889b29adce107c4.3b199f9481606e29.1e4af20c9a74484a.d89218ef38d76fdf
     4d2e368381f7ca6f.6cd7dc93e2dd9161.dfa88967e212f069.383c70d619f607a8
-    50231208a2b545ba
+    0000000000000040
 
-VCMPPD_256_0x4(reg)
+VTESTPS_256_3(reg)
   before
     7c93f9f1709f65c1.607870b83385d055.42b921d3fb803978.5f0558596ae23d6c
     18d721fd1e40a26a.bb34dc250e97d4a2.1a0969bf65d4a01b.7a2fdccc4df1ea80
@@ -33432,12 +33432,12 @@
     100e242e8cd86652.bc323b57b278c91f.4127f251a2c09eb3.f216efea97f95889
     066b776b340a8fd7
   after
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    7c93f9f1709f65c1.607870b83385d055.42b921d3fb803978.5f0558596ae23d6c
     18d721fd1e40a26a.bb34dc250e97d4a2.1a0969bf65d4a01b.7a2fdccc4df1ea80
     803c869849243a61.3b2ef6b62f3a9381.5115b0c5be6503f5.0df18faea849b5d0
     100e242e8cd86652.bc323b57b278c91f.4127f251a2c09eb3.f216efea97f95889
-    066b776b340a8fd7
-VCMPPD_256_0x4(mem)
+    0000000000000001
+VTESTPS_256_3(mem)
   before
     25bca41f9e8a18e5.2399f82b84e765e7.1a0b25f4b26032a7.478c2bcdac70ac01
     2bd5f0f1ee84ade0.1729fdfbccde72cf.3187327a4bfb8946.bf9058a678016a8a
@@ -33447,11 +33447,11 @@
   after
     25bca41f9e8a18e5.2399f82b84e765e7.1a0b25f4b26032a7.478c2bcdac70ac01
     2bd5f0f1ee84ade0.1729fdfbccde72cf.3187327a4bfb8946.bf9058a678016a8a
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    f482d9cd42050bf3.470a2f0b0148c8b4.dd70ddd39a578b28.067f7448a30014fb
     5c8eda9fb618ee4b.0e878ac5beb1a443.fa93a3edba7ff478.76a47b20c8f8e500
-    6c4d6a9884751a44
+    0000000000000001
 
-VCMPPD_256_0x4(reg)
+VTESTPS_256_3(reg)
   before
     44c43b1e7304ef73.3fc76f5465c91114.caee0a979fa64127.64bcfeb3c8807f63
     5a56ec1d2f30a03a.79f714d66c253179.d689aceb41b1dc0d.f7b76c10e065ea14
@@ -33459,12 +33459,12 @@
     b0fbdb3684908440.626f80f5ef0b57c9.4d8e43ce373ffc8e.08526e449b0c4a7b
     3e8bfbf276e6b988
   after
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    44c43b1e7304ef73.3fc76f5465c91114.caee0a979fa64127.64bcfeb3c8807f63
     5a56ec1d2f30a03a.79f714d66c253179.d689aceb41b1dc0d.f7b76c10e065ea14
     0a4f780157856845.e6eb4612e6370aa7.8da56b2f4061b1a1.8f5068f21c3aefb8
     b0fbdb3684908440.626f80f5ef0b57c9.4d8e43ce373ffc8e.08526e449b0c4a7b
-    3e8bfbf276e6b988
-VCMPPD_256_0x4(mem)
+    0000000000000000
+VTESTPS_256_3(mem)
   before
     0dc589e9ccd4f60c.a8a5122855dc30d6.c94f3e6aa4aed60c.708f3034c2d9f880
     51cd9613b6e3be32.4e9b184363f6a8b3.f756fc5c202b419c.54f62fcd7ebbe325
@@ -33474,11 +33474,11 @@
   after
     0dc589e9ccd4f60c.a8a5122855dc30d6.c94f3e6aa4aed60c.708f3034c2d9f880
     51cd9613b6e3be32.4e9b184363f6a8b3.f756fc5c202b419c.54f62fcd7ebbe325
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    e66f9d5d521ecc27.fe27e8f34c682784.c75237b9808e54a4.530d3b05076ff626
     a7761bb4bc91dd17.149681a4acc1eaf5.170d696ce0e4cd51.ca215049f8837032
-    167f6a03ed828bf3
+    0000000000000000
 
-VCMPPS_128_0x4(reg)
+VTESTPS_256_3(reg)
   before
     917086a083f98416.72b08a020f49ad2d.ec34dcc31e8a2cb1.c25410615b3866ce
     98439e8d55739746.22e768356851f895.e24df7ba3f512b65.a4f3a7840d96dc48
@@ -33486,12 +33486,12 @@
     bbbbb7031fa1fa7f.a0805ef69982ee0f.971f59e4fb074b64.7c69960588a24de2
     2ad7e63a8967c159
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    917086a083f98416.72b08a020f49ad2d.ec34dcc31e8a2cb1.c25410615b3866ce
     98439e8d55739746.22e768356851f895.e24df7ba3f512b65.a4f3a7840d96dc48
     8843b035007c0030.92e93038e2b5797d.512dccf7aaa121bd.98b6abc1130beaeb
     bbbbb7031fa1fa7f.a0805ef69982ee0f.971f59e4fb074b64.7c69960588a24de2
-    2ad7e63a8967c159
-VCMPPS_128_0x4(mem)
+    0000000000000000
+VTESTPS_256_3(mem)
   before
     80ce164e3167027e.8ef9b0654f6dc2e0.27796e5daac31077.0f719aefcf0de407
     5918a22b9cadcc7b.5d4795c62b6d93ff.02a0dd5830849ee2.156d8983c2422a51
@@ -33501,11 +33501,11 @@
   after
     80ce164e3167027e.8ef9b0654f6dc2e0.27796e5daac31077.0f719aefcf0de407
     5918a22b9cadcc7b.5d4795c62b6d93ff.02a0dd5830849ee2.156d8983c2422a51
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    908207bfe845da7c.85f26492502bab87.0fc026d348d2527c.0460240c6e2f57ef
     03d8bff52e3ce9ae.6045183559354425.28a7c5bb0eb8e970.3a9665f67262a78d
-    115a4bad686658d6
+    0000000000000040
 
-VCMPPS_128_0x4(reg)
+VTESTPS_256_3(reg)
   before
     e7facf9decc8a476.8ce648b88c9db43d.4b8ead1be2179a84.2b1f36fa9c431feb
     17c0ee339b13c81b.08771df61e75f854.a21820b1885beb51.f2f5f67d117eaf19
@@ -33513,12 +33513,12 @@
     f4f2effde895861e.4a569c904bb7dbcc.041d8c999a3f69e4.40eb4f001a34d03b
     7ea3e1d8e6c8d989
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    e7facf9decc8a476.8ce648b88c9db43d.4b8ead1be2179a84.2b1f36fa9c431feb
     17c0ee339b13c81b.08771df61e75f854.a21820b1885beb51.f2f5f67d117eaf19
     fcfaa5d910d3ff6f.5459bb9affcf7120.c12e6b61e7907138.5bf57f3187755725
     f4f2effde895861e.4a569c904bb7dbcc.041d8c999a3f69e4.40eb4f001a34d03b
-    7ea3e1d8e6c8d989
-VCMPPS_128_0x4(mem)
+    0000000000000000
+VTESTPS_256_3(mem)
   before
     f2e8b2a4093c2c38.59f5c809bee499d5.c83b3ec51f39f285.c7317ec33df60f02
     76883c509c9d8677.884f2d6b2e4c7440.a8d41c2396627177.66b63d4d6d409e3d
@@ -33528,11 +33528,11 @@
   after
     f2e8b2a4093c2c38.59f5c809bee499d5.c83b3ec51f39f285.c7317ec33df60f02
     76883c509c9d8677.884f2d6b2e4c7440.a8d41c2396627177.66b63d4d6d409e3d
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    e74dfdc8bdf5a370.de4b188ed55a530a.c7edb297cd3d15cd.3df8c6a2c5a95342
     210470f888533f50.b53787de4f9971e0.01527d0ee0d799b4.a742142de2be6abd
-    02e2235c600a1f59
+    0000000000000000
 
-VCMPPS_128_0x4(reg)
+VTESTPS_256_3(reg)
   before
     a922ef9ad91aadc3.017911cc18c01542.6a5d75c737950b6d.33cef772e93bbb58
     f84f7454ec7951a6.61785d30894ae273.5a0adfb52adb5c5e.372e9eb1077535e4
@@ -33540,12 +33540,12 @@
     fda09be74954ca89.1443e35981e35040.562913509e72171b.28cb616dec9c2365
     cd9f74c2eba20fb3
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    a922ef9ad91aadc3.017911cc18c01542.6a5d75c737950b6d.33cef772e93bbb58
     f84f7454ec7951a6.61785d30894ae273.5a0adfb52adb5c5e.372e9eb1077535e4
     4bb5aff432b346af.1ecccf10f8fc610e.df8abf14c3f6a25f.ea3fedb65391c384
     fda09be74954ca89.1443e35981e35040.562913509e72171b.28cb616dec9c2365
-    cd9f74c2eba20fb3
-VCMPPS_128_0x4(mem)
+    0000000000000000
+VTESTPS_256_3(mem)
   before
     b586a4a16fad449a.6c5c349acde917e2.1fa715f53f0a6935.1b33d6d658dcf73f
     bc4e6cf691cb7e45.f334767759fd6a63.1bc5e1d24e7d6818.8bf304108cbf8076
@@ -33555,11 +33555,11 @@
   after
     b586a4a16fad449a.6c5c349acde917e2.1fa715f53f0a6935.1b33d6d658dcf73f
     bc4e6cf691cb7e45.f334767759fd6a63.1bc5e1d24e7d6818.8bf304108cbf8076
-    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
+    bec148ad6f0778e0.ed755dec8a1dfebb.e469c4dbcb490b16.00b7996cd7a7ec6e
     97acb4b3256eef98.b86be663fbd41194.565f38fbd1790c5a.d7c99254d52178d0
-    6c76ea3620b8604a
+    0000000000000001
 
-VCMPPS_256_0x4(reg)
+VTESTPS_256_3(reg)
   before
     1b0a9d7d57f8df88.23dc2df2ce0b9f99.ae630c4a48aedd9a.4d73bb207d192811
     40d1a795136e3236.3e1a2e5886ea430f.2da6cb0c0e389e7a.a570c935ea351b67
@@ -33567,12 +33567,12 @@
     5c27b1e8902a438f.91f8b84596a05b07.324505d17489f377.e85972e07914749d
     8adc064dd3ed53d7
   after
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    1b0a9d7d57f8df88.23dc2df2ce0b9f99.ae630c4a48aedd9a.4d73bb207d192811
     40d1a795136e3236.3e1a2e5886ea430f.2da6cb0c0e389e7a.a570c935ea351b67
     371604eaf3a595fe.c43533cf6a189925.8f832015e9fd92e0.3a24dc2635daa087
     5c27b1e8902a438f.91f8b84596a05b07.324505d17489f377.e85972e07914749d
-    8adc064dd3ed53d7
-VCMPPS_256_0x4(mem)
+    0000000000000000
+VTESTPS_256_3(mem)
   before
     fe79145a5e73f95f.0b4ea9fb88877a93.802e3aa5258e45e2.703778ac4b69feec
     1ffc18f437b22161.a0d8e890774b74b7.6fa533db33ef15e2.a7a674120b28eeea
@@ -33582,11 +33582,11 @@
   after
     fe79145a5e73f95f.0b4ea9fb88877a93.802e3aa5258e45e2.703778ac4b69feec
     1ffc18f437b22161.a0d8e890774b74b7.6fa533db33ef15e2.a7a674120b28eeea
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    c9308e0579b4880a.77116b11f8ff6da6.392721d3ddce8532.31def5704f52011e
     d7e3f37b4088ea86.eb452ceba831a30d.ba817f793e3752ff.6b2bf830b4737134
-    b2d977c0d6187ad7
+    0000000000000001
 
-VCMPPS_256_0x4(reg)
+VTESTPS_256_3(reg)
   before
     6034708a4fcd5ab4.27dfc241a9370200.5ac0298b226c5098.cd7fcab973373775
     d287defcbd1d4b77.94f17742d0cf8da5.1fcd5d5c023cb0f2.50ec7c7f97d9f1bf
@@ -33594,12 +33594,12 @@
     73480a85e7be535c.348784aac5e7eb1f.1ad15b4066ce7dc5.12470a4e1e34d481
     0accdd2fb9057551
   after
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    6034708a4fcd5ab4.27dfc241a9370200.5ac0298b226c5098.cd7fcab973373775
     d287defcbd1d4b77.94f17742d0cf8da5.1fcd5d5c023cb0f2.50ec7c7f97d9f1bf
     651fbe81bc948acb.f9e58f6cd05b47a1.96bac4c9e52e01c8.1e9613b8c7293c0a
     73480a85e7be535c.348784aac5e7eb1f.1ad15b4066ce7dc5.12470a4e1e34d481
-    0accdd2fb9057551
-VCMPPS_256_0x4(mem)
+    0000000000000000
+VTESTPS_256_3(mem)
   before
     e0f20945b3a9daa5.594ec074db28e1d8.1fa2d4e8cc80374c.095f1c2c22a66196
     7282087e282ac0aa.737ddbba335d71e8.9804fa130031e553.beb005f9b544e9e6
@@ -33609,11 +33609,11 @@
   after
     e0f20945b3a9daa5.594ec074db28e1d8.1fa2d4e8cc80374c.095f1c2c22a66196
     7282087e282ac0aa.737ddbba335d71e8.9804fa130031e553.beb005f9b544e9e6
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    9a4b58c53596e28c.1d2157c38ce93f3b.797773157e06b161.94101114ba335063
     36187406f6f9fd76.b38531fc8159867b.a0c8b9db610c59a1.e9ca3de7cd00d3b6
-    172c83df8b36ae8e
+    0000000000000000
 
-VCMPPS_256_0x4(reg)
+VTESTPS_256_3(reg)
   before
     7c80e1698f611d94.20b4d92d865ecd95.91f763cfae388354.e7c34a52c64e9740
     721352ef760e5b77.35ed012601d10e15.13c1eba9b0127274.2b34a164c8d9286a
@@ -33621,12 +33621,12 @@
     85265da35a1b377f.51618f3f2b12d2e5.7390eb24a1e91533.1ba7910e15f7320d
     7e42237d98a223df
   after
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    7c80e1698f611d94.20b4d92d865ecd95.91f763cfae388354.e7c34a52c64e9740
     721352ef760e5b77.35ed012601d10e15.13c1eba9b0127274.2b34a164c8d9286a
     5731d2dfdbc8a5e1.528d6add845e7c21.9530c4f723748f84.49e73aff84b8c84a
     85265da35a1b377f.51618f3f2b12d2e5.7390eb24a1e91533.1ba7910e15f7320d
-    7e42237d98a223df
-VCMPPS_256_0x4(mem)
+    0000000000000000
+VTESTPS_256_3(mem)
   before
     4f826b3828c657eb.5a3ef0a990934cfc.0f34ec3611f8cd8f.092d5a9bc9fe412b
     6834e52be26e895d.30c4865c19bd2205.68d4feaf521d2848.b3520fca353e4f18
@@ -33636,11 +33636,11 @@
   after
     4f826b3828c657eb.5a3ef0a990934cfc.0f34ec3611f8cd8f.092d5a9bc9fe412b
     6834e52be26e895d.30c4865c19bd2205.68d4feaf521d2848.b3520fca353e4f18
-    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
+    a6240d42e1a77662.64051b289025f245.390c3f970b8ca13f.cd4d051c81357ba7
     e51e5f69417cda26.534eab799255fb69.5ca72dd95751f29e.b26838fd4a6f0084
-    c0f0a4d92b791b5a
+    0000000000000000
 
-VPCMPGTB_128(reg)
+VTESTPS_256_3(reg)
   before
     5231461dc1de08d6.01ed588c1ff971d5.57e933bbbadb771d.ae7243615379d791
     c4771933a72b02a4.d65f7398972bf69a.cd22ad5ba443a30c.0b39fd1a1a0e0e46
@@ -33648,12 +33648,12 @@
     b7414289d5aa10e4.1c57ff17c2dbbd18.7fa36d6030e6fb4d.56eb4fd47bb55da0
     fc6ddead4cdeee9e
   after
-    0000000000000000.0000000000000000.000000ff00ff00ff.00ffffffff0000ff
+    5231461dc1de08d6.01ed588c1ff971d5.57e933bbbadb771d.ae7243615379d791
     c4771933a72b02a4.d65f7398972bf69a.cd22ad5ba443a30c.0b39fd1a1a0e0e46
     710d19887aeb466f.413e2c77c31c26a1.114717c3ed17bbe3.4fc8d8f2c91f51e6
     b7414289d5aa10e4.1c57ff17c2dbbd18.7fa36d6030e6fb4d.56eb4fd47bb55da0
-    fc6ddead4cdeee9e
-VPCMPGTB_128(mem)
+    0000000000000000
+VTESTPS_256_3(mem)
   before
     1d1c016759a5bf0c.f15d91a054f49cae.44766963ae717628.7481a99f0a399ef7
     95c234efbe178d18.7aae003b9456257a.9567e547a3ec0f00.4a2ec9eb169ee18d
@@ -33663,11 +33663,11 @@
   after
     1d1c016759a5bf0c.f15d91a054f49cae.44766963ae717628.7481a99f0a399ef7
     95c234efbe178d18.7aae003b9456257a.9567e547a3ec0f00.4a2ec9eb169ee18d
-    0000000000000000.0000000000000000.0000000000000000.00ffffffff00ff00
+    402cf432963f14eb.b0808dc5315ce8f3.eaf6efaebe5742ca.5ef6c7aff1a0ffba
     fa26bc1afd290fb4.ed1f33aac69021c7.21ee03861abfcbb2.0c25a15937cb362b
-    b007535482acc08b
+    0000000000000000
 
-VPCMPGTB_128(reg)
+VTESTPD_128_1(reg)
   before
     a6e8d70c70ceda87.9f7c089510e23c9d.8fd7ef56ef800b9f.151d9dbbd42f68e5
     4a132bed9dbdbfcb.0bf9548eeb7555d2.f0f3bb3549b7e32a.a24d3a3707b3d38f
@@ -33675,12 +33675,12 @@
     0c7b30db2234ddd9.a79cdda9665a3dd3.638b783cff2c4d03.f7e36ab74a2905f6
     76e1f5949132440c
   after
-    0000000000000000.0000000000000000.00ffffff000000ff.00ff00ffff00ff00
+    a6e8d70c70ceda87.9f7c089510e23c9d.8fd7ef56ef800b9f.151d9dbbd42f68e5
     4a132bed9dbdbfcb.0bf9548eeb7555d2.f0f3bb3549b7e32a.a24d3a3707b3d38f
     f8d64a64a406ac02.196b1cf0a9ee1680.6ec195b370c2e511.a44b55e7d058c9dc
     0c7b30db2234ddd9.a79cdda9665a3dd3.638b783cff2c4d03.f7e36ab74a2905f6
-    76e1f5949132440c
-VPCMPGTB_128(mem)
+    0000000000000001
+VTESTPD_128_1(mem)
   before
     ff107368c2804248.e14fd9bfb2d48efb.905912a43fc484f6.2c9e603d928156aa
     6d3e5f21f91ebbd7.d59d427df171fa15.b06e37cd4f38a816.26464a20c64e3db3
@@ -33690,11 +33690,11 @@
   after
     ff107368c2804248.e14fd9bfb2d48efb.905912a43fc484f6.2c9e603d928156aa
     6d3e5f21f91ebbd7.d59d427df171fa15.b06e37cd4f38a816.26464a20c64e3db3
-    0000000000000000.0000000000000000.ffffffffffffffff.00ff0000ffff00ff
+    9c3535aa51196ae4.43b3667f7a975ed3.e2a7c811b3c3645f.abcf3053361e3ec9
     67c271efe67b0d9c.87dc4133e9d2f6e0.04d0425a867075fc.188410407f7d9499
-    cab3e5553cf87cce
+    0000000000000001
 
-VPCMPGTB_128(reg)
+VTESTPD_128_1(reg)
   before
     1ba6acfd0a1a3215.acb18fdbd5525d2b.fc63cf04dbaffee9.f1b42095e54b971a
     68aa5fa4846ff21a.45ce0c5c3aaa19bc.00950c5eebb9b199.8421deafeb6186e4
@@ -33702,12 +33702,12 @@
     66157e9fede47e0c.e7c110cbd30ac096.212a855dd8860ba0.10c1eb2c5e6cba2e
     c18d316802797607
   after
-    0000000000000000.0000000000000000.ff00ffffff000000.00ff00ffffff00ff
+    1ba6acfd0a1a3215.acb18fdbd5525d2b.fc63cf04dbaffee9.f1b42095e54b971a
     68aa5fa4846ff21a.45ce0c5c3aaa19bc.00950c5eebb9b199.8421deafeb6186e4
     0d0bfcb64684f788.10e4635e308dfb7b.eebef5adb67d4c9d.9be1f892b5bdfd87
     66157e9fede47e0c.e7c110cbd30ac096.212a855dd8860ba0.10c1eb2c5e6cba2e
-    c18d316802797607
-VPCMPGTB_128(mem)
+    0000000000000000
+VTESTPD_128_1(mem)
   before
     88114832bff0f03b.cf14e1cb151bc351.a82f8f90402a2437.f725b8daeb602950
     4318ab75aedde2f8.a45322a659b60104.2dfb5c9992fbe28a.cbfb8a908e98e356
@@ -33717,11 +33717,11 @@
   after
     88114832bff0f03b.cf14e1cb151bc351.a82f8f90402a2437.f725b8daeb602950
     4318ab75aedde2f8.a45322a659b60104.2dfb5c9992fbe28a.cbfb8a908e98e356
-    0000000000000000.0000000000000000.ff00ffff00000000.00000000000000ff
+    cc70d71fed4d096a.41203b9d564076d1.54f1f4d3e688b8bc.f8f7f8eb5bb97561
     00e3461c984b21bd.02c52a1aa7465c63.f7ddd22957dd5ff9.dc66fc58ee4f1b1a
-    d1949441e3e61030
+    0000000000000000
 
-VPCMPGTW_128(reg)
+VTESTPD_128_1(reg)
   before
     35cdbc14d80b914d.bc3e7656c9e4e61c.438fea8be853ef67.f38b72860207966c
     625d6e3c664ada1e.da4de2ba9f2213b4.60ca785ab6f36d88.25c651d802111742
@@ -33729,12 +33729,12 @@
     8bb1643ac342b28a.afb75eb1a4c3973d.9ec2eac7671d14d4.9617b80873f7eac5
     8ec439be1beab4cb
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.0000ffff0000ffff
+    35cdbc14d80b914d.bc3e7656c9e4e61c.438fea8be853ef67.f38b72860207966c
     625d6e3c664ada1e.da4de2ba9f2213b4.60ca785ab6f36d88.25c651d802111742
     b590a8252b2d264e.37dc0635341465b0.b5c1cef5acb21073.675ce90a74089fa6
     8bb1643ac342b28a.afb75eb1a4c3973d.9ec2eac7671d14d4.9617b80873f7eac5
-    8ec439be1beab4cb
-VPCMPGTW_128(mem)
+    0000000000000040
+VTESTPD_128_1(mem)
   before
     2c2fe81889edb8e3.3e0ea1e9c915ba7d.1fa9671c0c3d6786.7717c73c82bfb756
     4a244202d90db33a.2bf1589ed9307ad4.617f9c60878d8fb8.9c0e61c09a2533a6
@@ -33744,11 +33744,11 @@
   after
     2c2fe81889edb8e3.3e0ea1e9c915ba7d.1fa9671c0c3d6786.7717c73c82bfb756
     4a244202d90db33a.2bf1589ed9307ad4.617f9c60878d8fb8.9c0e61c09a2533a6
-    0000000000000000.0000000000000000.ffff000000000000.0000ffffffffffff
+    c56ec169265660fb.afa786c390212d3b.5206796b32c0cbff.69f1b4bf4ad9c56f
     79dbe3378cd27d53.247c28c58a74105d.ce087a2828e1d986.390dbda52f6aa95e
-    6aad77dfe4611a1e
+    0000000000000041
 
-VPCMPGTW_128(reg)
+VTESTPD_128_2(reg)
   before
     571fded7064c555d.4235235a288fc46e.e7bb391062b35fe7.b1521c8386fc737a
     5baeeefb30b696c4.fc49febc1598f177.54b2b511b46c5584.d7afda68671d5606
@@ -33756,12 +33756,12 @@
     1d51fa730e3919c0.b3cf71f255c0f105.9cf4dfe1387b29aa.5cd69a8024a4e699
     7337948c37200bf7
   after
-    0000000000000000.0000000000000000.ffffffff0000ffff.00000000ffffffff
-    5baeeefb30b696c4.fc49febc1598f177.54b2b511b46c5584.d7afda68671d5606
+    571fded7064c555d.4235235a288fc46e.e7bb391062b35fe7.b1521c8386fc737a
+    0000000000000000.0000000000000000.c7ab99321d2b30e1.1ced2fc3e7513e57
     d4a5a4b5ff2c1902.83e3ee4b70fac29b.c7ab99321d2b30e1.1ced2fc3e7513e57
     1d51fa730e3919c0.b3cf71f255c0f105.9cf4dfe1387b29aa.5cd69a8024a4e699
-    7337948c37200bf7
-VPCMPGTW_128(mem)
+    0000000000000001
+VTESTPD_128_2(mem)
   before
     3ddd9bd13ed3699e.91feeea0f969d3ad.68d9029ddef63be2.30d78589a2e87f8a
     9692293d55c8bbb9.8ef87ba85d498373.7ecc1d382aa95c5e.dda18696f6fe6c2e
@@ -33770,12 +33770,12 @@
     185f84538ab11b67
   after
     3ddd9bd13ed3699e.91feeea0f969d3ad.68d9029ddef63be2.30d78589a2e87f8a
-    9692293d55c8bbb9.8ef87ba85d498373.7ecc1d382aa95c5e.dda18696f6fe6c2e
-    0000000000000000.0000000000000000.ffffffffffffffff.0000ffffffff0000
+    0000000000000000.0000000000000000.9726fd622109c41d.cf287a765d178075
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     655bd03620aa2ffd.8f0251f9ff46b33c.3da1e2ee75b311e1.f5198a8fce57fe70
-    185f84538ab11b67
+    0000000000000041
 
-VPCMPGTW_128(reg)
+VTESTPD_128_2(reg)
   before
     c4bdca2ca0e5bfd1.9207df9c0daec77f.4bab921a747bac97.9d1a84e1ac231e40
     577d5786ad7e275b.bff467d879254524.ffd05cc6d2908b7b.cfada074153ff2ee
@@ -33783,12 +33783,12 @@
     9f56376e1911327d.86bccf824099de8e.c0c17c70b788e991.1650372becacdde6
     e2f9aa2792156d88
   after
-    0000000000000000.0000000000000000.0000ffffffff0000.ffff0000ffff0000
-    577d5786ad7e275b.bff467d879254524.ffd05cc6d2908b7b.cfada074153ff2ee
+    c4bdca2ca0e5bfd1.9207df9c0daec77f.4bab921a747bac97.9d1a84e1ac231e40
+    0000000000000000.0000000000000000.08beab6ab4118b95.ae26b394cc134817
     2cec28ce4c098fb0.c7ece3d6811a631b.08beab6ab4118b95.ae26b394cc134817
     9f56376e1911327d.86bccf824099de8e.c0c17c70b788e991.1650372becacdde6
-    e2f9aa2792156d88
-VPCMPGTW_128(mem)
+    0000000000000001
+VTESTPD_128_2(mem)
   before
     f0eb8773d95ab328.0c0682d4b1224d6e.d730a7c8d3af71a9.8424ca467683e11a
     1bf34afbdd886cf3.cf4a046ab0c81c2e.9813e8945567d999.b13590568e8eaedd
@@ -33797,12 +33797,12 @@
     3d6c942300817137
   after
     f0eb8773d95ab328.0c0682d4b1224d6e.d730a7c8d3af71a9.8424ca467683e11a
-    1bf34afbdd886cf3.cf4a046ab0c81c2e.9813e8945567d999.b13590568e8eaedd
-    0000000000000000.0000000000000000.0000ffffffff0000.ffff000000000000
+    0000000000000000.0000000000000000.28cf58372c508e56.7bdb35b9897c1ee5
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     3775736f8ecc26b8.c6ba9edb5005c5cd.d65a926f98ee18a7.b18d7ad93700bac0
-    3d6c942300817137
+    0000000000000040
 
-VPMADDWD_128(reg)
+VTESTPD_128_2(reg)
   before
     a12818589240ed98.e086d13373fba00b.b37ead8d2ab41704.0c56f35691d5661d
     3a0d01e488cb6b8f.17de05e386427c38.6504e420db280cba.20f1ac73e98f7a18
@@ -33810,12 +33810,12 @@
     7681f3b111745dee.9b8ee0b8a3494cd3.8c8bb8992f90d356.563618fe28a9de4a
     3079c2454621a7db
   after
-    0000000000000000.0000000000000000.105f6c68fed66e1a.eae922fb0c6c6011
-    3a0d01e488cb6b8f.17de05e386427c38.6504e420db280cba.20f1ac73e98f7a18
+    a12818589240ed98.e086d13373fba00b.b37ead8d2ab41704.0c56f35691d5661d
+    0000000000000000.0000000000000000.3a9a3e00fdede29d.f0f83ab1bd270dc3
     62664b337eae27c8.b6478b6be2ae766c.3a9a3e00fdede29d.f0f83ab1bd270dc3
     7681f3b111745dee.9b8ee0b8a3494cd3.8c8bb8992f90d356.563618fe28a9de4a
-    3079c2454621a7db
-VPMADDWD_128(mem)
+    0000000000000001
+VTESTPD_128_2(mem)
   before
     588bb472349c25a0.d2a8f4cbdda948ad.a07f7eb4e622b898.b9224c580a9b1c94
     ab3a6b710e2514c5.d22849eb7dd925b2.a3e6e34dc64277e7.1cadf8a72d9df800
@@ -33824,12 +33824,12 @@
     1ff45f3452d95c1d
   after
     588bb472349c25a0.d2a8f4cbdda948ad.a07f7eb4e622b898.b9224c580a9b1c94
-    ab3a6b710e2514c5.d22849eb7dd925b2.a3e6e34dc64277e7.1cadf8a72d9df800
-    0000000000000000.0000000000000000.1427c73ee463d9ec.f5dee16200ff200f
+    0000000000000000.0000000000000000.5f80814b19dd4767.46ddb3a7f564e36b
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     439a1596f39334e2.2e63e5f1aa5ca43e.0e45f002cf8cddd7.f2ca85a9b5af5d19
-    1ff45f3452d95c1d
+    0000000000000040
 
-VPMADDWD_128(reg)
+VTESTPD_128_3(reg)
   before
     f1423f00a627e000.3fe30093378fdd31.42b622af70c7be1c.30d690f72fcefcce
     c6ff23794d27236f.d7f99f13d6c9e691.6992a5247a5cbaef.be0ce5389d875e00
@@ -33837,12 +33837,12 @@
     e4f4e422016bd99f.46b8eb4897290c32.65136ae3cb3a4727.919aa44e1294d9c4
     8e8a04fb50ff6bae
   after
-    0000000000000000.0000000000000000.dafdd4143c25b918.0fe8f028d34cf76a
+    f1423f00a627e000.3fe30093378fdd31.42b622af70c7be1c.30d690f72fcefcce
     c6ff23794d27236f.d7f99f13d6c9e691.6992a5247a5cbaef.be0ce5389d875e00
     f876060be2656215.e5a76f00ed4e0d2d.014269bc64a9d364.95b46db135c6be99
     e4f4e422016bd99f.46b8eb4897290c32.65136ae3cb3a4727.919aa44e1294d9c4
-    8e8a04fb50ff6bae
-VPMADDWD_128(mem)
+    0000000000000001
+VTESTPD_128_3(mem)
   before
     684f0ba50c123082.e6c5ba2a47c7c3b9.d6f98fd6f1679fcc.f151a5054a9a4fe3
     fcb7343662dae36d.5b35838f50055d0e.7136d79616138426.0148148e7e552a45
@@ -33852,11 +33852,11 @@
   after
     684f0ba50c123082.e6c5ba2a47c7c3b9.d6f98fd6f1679fcc.f151a5054a9a4fe3
     fcb7343662dae36d.5b35838f50055d0e.7136d79616138426.0148148e7e552a45
-    0000000000000000.0000000000000000.ff9042ea2d48aced.f89f1c8e32015751
+    248cfb9c6d62419b.9d903bbeb7afe34b.f33b40742339756d.f044b5eb02f813f9
     bd9bdcc149b60637.0921de211853901b.38d4445c33e62fcc.1c918386720d45aa
-    e07a7acd6c23fc05
+    0000000000000040
 
-VPMADDWD_128(reg)
+VTESTPD_128_3(reg)
   before
     974d972a89c376b5.a3b0549313e3ed6e.fb366826107da12b.1ccc613a63246e70
     9f54d50b677bed67.b297ddfde6f4b46b.cf19d6373ab75227.7bf113face02ed85
@@ -33864,12 +33864,12 @@
     0e31a406d561c57f.ba0a184919f2cc6a.8d7c4b3296918391.1aed22d1c6c79eb0
     125d77bf8cc8471e
   after
-    0000000000000000.0000000000000000.00116eed01782546.145b110d0e2c0620
+    974d972a89c376b5.a3b0549313e3ed6e.fb366826107da12b.1ccc613a63246e70
     9f54d50b677bed67.b297ddfde6f4b46b.cf19d6373ab75227.7bf113face02ed85
     52dc2fdba2d69ec6.c61cf5ebdff5155b.e11723c23390dfba.310dd48890896936
     0e31a406d561c57f.ba0a184919f2cc6a.8d7c4b3296918391.1aed22d1c6c79eb0
-    125d77bf8cc8471e
-VPMADDWD_128(mem)
+    0000000000000001
+VTESTPD_128_3(mem)
   before
     f5295140fd9622ad.2d9e2df79ca79d3e.6c2fc003b1f897c3.2f944af300487b57
     9f1c2c3f353fe989.0d71c81d943464ae.b7556b05c2133093.23aa1c710c4003b9
@@ -33879,11 +33879,11 @@
   after
     f5295140fd9622ad.2d9e2df79ca79d3e.6c2fc003b1f897c3.2f944af300487b57
     9f1c2c3f353fe989.0d71c81d943464ae.b7556b05c2133093.23aa1c710c4003b9
-    0000000000000000.0000000000000000.c68a85aaff18da61.0ef47d8b01ce98df
+    ec0482a851cf58dd.08f46fe15995537c.7749943b694d5405.c50cbe1857055763
     b7abd1666c502dd6.7c7520b08555a954.88d7b791c1b4be46.71042b547c24b200
-    83df5f921828513d
+    0000000000000041
 
-VADDSUBPS_128(reg)
+VTESTPD_128_3(reg)
   before
     57e9563cc69e6fc5.dede9467a3d0229f.c33ed7f6b700a0e1.c6cb50f4e7542b81
     496e0dbf22114a45.3c694797125bf465.3a9c8e20892375d0.0cf0dc4ef63757e4
@@ -33891,12 +33891,12 @@
     f618a802571e22dc.0cb76e2f05be1d96.2946f1cc7efea982.2501b99c40fcdbcc
     ae840367b4f5acaa
   after
-    0000000000000000.0000000000000000.3edae026174964cc.3814d58df63757e4
+    57e9563cc69e6fc5.dede9467a3d0229f.c33ed7f6b700a0e1.c6cb50f4e7542b81
     496e0dbf22114a45.3c694797125bf465.3a9c8e20892375d0.0cf0dc4ef63757e4
     b5ba7f88c90d1c69.ac1866e0d3fb5e53.3eda4398974964cc.3814d58d0a6bfe98
     f618a802571e22dc.0cb76e2f05be1d96.2946f1cc7efea982.2501b99c40fcdbcc
-    ae840367b4f5acaa
-VADDSUBPS_128(mem)
+    0000000000000041
+VTESTPD_128_3(mem)
   before
     b16930da81622a5e.6ad6849867d1974b.3711da70c1b0ed5a.582a9427d9cf7f9d
     087cbae1c34f1415.6c3e0fb895b1b961.08f4269025dc8aca.27d42815444723ca
@@ -33906,11 +33906,11 @@
   after
     b16930da81622a5e.6ad6849867d1974b.3711da70c1b0ed5a.582a9427d9cf7f9d
     087cbae1c34f1415.6c3e0fb895b1b961.08f4269025dc8aca.27d42815444723ca
-    0000000000000000.0000000000000000.3711da7041b0ed5a.582a942759cf7f9d
+    91881f6897c924fb.579d46cd7e4bc1cb.5d2ace794d4eaf13.f38eaa015df2d0b5
     265bda5b18db173b.893f2443bd2aee34.10804e1954121a61.16a51459bd5dc409
-    ed65648902133973
+    0000000000000041
 
-VADDSUBPS_128(reg)
+VTESTPD_128_3(reg)
   before
     d41996fbc8a06b9e.a5bf68a66391a902.5d70a587efda7b49.ffc2235b573584df
     270fa41caa919837.e881433693f8957b.2e7bc503b0e7a3b6.04bcc82b71c2acba
@@ -33918,12 +33918,12 @@
     81ec491c33cdce62.2e4fd5d114076e36.3b53d4574c4bb646.c40772255b4b2135
     36f07027645fe72d
   after
-    0000000000000000.0000000000000000.5aae8124b0e7a3b6.fd39b97571c2acba
+    d41996fbc8a06b9e.a5bf68a66391a902.5d70a587efda7b49.ffc2235b573584df
     270fa41caa919837.e881433693f8957b.2e7bc503b0e7a3b6.04bcc82b71c2acba
     42918c584471faea.cd6de9f5c51b99d4.5aae81249adea326.fd39b975bec54c1d
     81ec491c33cdce62.2e4fd5d114076e36.3b53d4574c4bb646.c40772255b4b2135
-    36f07027645fe72d
-VADDSUBPS_128(mem)
+    0000000000000041
+VTESTPD_128_3(mem)
   before
     30c12e67f40e5a32.406cd7d2132f504c.e8f383b49dc7d3cf.2fb7ba065fb819c2
     8c4628d127633570.db5d32e87f25bb53.d8246f8c7b6782cb.90262f9f71b30845
@@ -33933,11 +33933,11 @@
   after
     30c12e67f40e5a32.406cd7d2132f504c.e8f383b49dc7d3cf.2fb7ba065fb819c2
     8c4628d127633570.db5d32e87f25bb53.d8246f8c7b6782cb.90262f9f71b30845
-    0000000000000000.0000000000000000.e8f383b47b6782cb.2fb7ba0671b30845
+    274bda521a6a3512.ae0b56c9133b4c24.d8b01644cbf33856.bcec2f8c1ec8bf7c
     de9cc0d4e82f1545.15c140e16cfc3f6b.c561f3c8a878b19b.0d54b73b01817a12
-    e0acc217b76c74b4
+    0000000000000001
 
-VADDSUBPS_128(reg)
+VTESTPD_128_3(reg)
   before
     923e4c8cdb14ea0d.8b045745aebf9334.6ccdeb9c25f4d0d3.7c0482042f01a9c6
     7d575106090617ca.0b511a908725690c.0e795366dbaf3a08.d7653fe47b9bdb05
@@ -33945,12 +33945,12 @@
     714ebdbaf6f58a1f.f4c51463e4a50f26.a8e44bd7aca08b8d.ec903441d32fdf69
     5ef3649518412ae7
   after
-    0000000000000000.0000000000000000.591275abdbaf3a08.d7653fe47b9bdb05
+    923e4c8cdb14ea0d.8b045745aebf9334.6ccdeb9c25f4d0d3.7c0482042f01a9c6
     7d575106090617ca.0b511a908725690c.0e795366dbaf3a08.d7653fe47b9bdb05
     fe43cef1decd3997.3a4d85a0906e53f9.591275ab29babab8.b350a654a8510481
     714ebdbaf6f58a1f.f4c51463e4a50f26.a8e44bd7aca08b8d.ec903441d32fdf69
-    5ef3649518412ae7
-VADDSUBPS_128(mem)
+    0000000000000001
+VTESTPD_128_3(mem)
   before
     e543b23e91949f27.33c41ccbec0b460f.158544c4a0d657c0.573bd356ffeeeb33
     5d4d9a265d34fa57.9ef1e6915c9aab12.79588fafdf0ee8f2.c1630895bf2f1457
@@ -33960,11 +33960,11 @@
   after
     e543b23e91949f27.33c41ccbec0b460f.158544c4a0d657c0.573bd356ffeeeb33
     5d4d9a265d34fa57.9ef1e6915c9aab12.79588fafdf0ee8f2.c1630895bf2f1457
-    0000000000000000.0000000000000000.79588fafdf0ee8f2.573bd356ffeeeb33
+    a2dd993b962bf9a0.0f201879e32ff3d5.fc0c7310be587ee9.44a7e6fe87ef43a5
     90bf2a6858875631.e29eacee1c545b04.7a6b6bd458c0d4d1.3b546afff4bbb3c8
-    01b78f03a11da26d
+    0000000000000041
 
-VADDSUBPS_256(reg)
+VTESTPD_128_3(reg)
   before
     f41a51752aa44a40.03bfc999c053ce34.73b7a05ba4971f4a.cf43f4e5c953a7d5
     6ec9acc32cd9e7ec.d7a8f2bae99c1dd5.1eb7ef2e16847a54.d75e88302f1bb322
@@ -33972,12 +33972,12 @@
     6b401ea00a83f481.1269d37cf0d22ea4.329c8fb32a89e862.708fc62643806545
     b93e68a72a348374
   after
-    6ec9acc3c34ab71e.e84821b7706df961.3fea95d2168477b9.6e89a5a22f1bb323
+    f41a51752aa44a40.03bfc999c053ce34.73b7a05ba4971f4a.cf43f4e5c953a7d5
     6ec9acc32cd9e7ec.d7a8f2bae99c1dd5.1eb7ef2e16847a54.d75e88302f1bb322
     cd129c58434ab71e.e84821b7f06dfe42.3fea95d20fa6a9cd.6e89a5a2a327b3e3
     6b401ea00a83f481.1269d37cf0d22ea4.329c8fb32a89e862.708fc62643806545
-    b93e68a72a348374
-VADDSUBPS_256(mem)
+    0000000000000040
+VTESTPD_128_3(mem)
   before
     25600513754fc99b.a69e2c081d0edbc2.31d883f506d8692a.5318d83d04b972bf
     8fc31b5540dbf5e7.d879c4fa1979a78c.2061ad0f4d8a6bfe.feab6cdd38c3858f
@@ -33987,11 +33987,11 @@
   after
     25600513754fc99b.a69e2c081d0edbc2.31d883f506d8692a.5318d83d04b972bf
     8fc31b5540dbf5e7.d879c4fa1979a78c.2061ad0f4d8a6bfe.feab6cdd38c3858f
-    25600513f54fc99b.d879c4fa9d0de21a.31d883f54d8a6bfe.feab6cdd38c3858f
+    d5312559a5e6c183.5e1de2e3994f968c.bdd0cdb4e1f4ef4c.8fa147fd63325a7f
     d2779f0bc37cea9c.95d680303a1de26e.e3f060d2df23b241.6246650a2093303a
-    d3e6c3710b70426d
+    0000000000000041
 
-VADDSUBPS_256(reg)
+VTESTPD_128_3(reg)
   before
     3dcd5b9cc158cbc4.61610557b4a72b5e.d7f09c4b976ec7dd.6e8fe15363226f09
     fe472bf9ded407ea.60bad42a947641f4.81b731a24dce8386.3977cc2588fde4cf
@@ -33999,12 +33999,12 @@
     f22261f6babd8c55.1aed99109329dc4e.7e7ab6b032ed6b35.0355d0692679e108
     bae3e2b3d832e1d2
   after
-    fe472bf97d72348c.60bad42a7ff2e88a.f0763ba077ca5015.3977cc25eac1cbc0
+    3dcd5b9cc158cbc4.61610557b4a72b5e.d7f09c4b976ec7dd.6e8fe15363226f09
     fe472bf9ded407ea.60bad42a947641f4.81b731a24dce8386.3977cc2588fde4cf
     719f2ff3fd72348c.aa50866e7ff2e88a.f0763ba0f7ca5015.22759d336ac1cbc0
     f22261f6babd8c55.1aed99109329dc4e.7e7ab6b032ed6b35.0355d0692679e108
-    bae3e2b3d832e1d2
-VADDSUBPS_256(mem)
+    0000000000000040
+VTESTPD_128_3(mem)
   before
     22ea4efd9bf6894b.dc1cbf6eb2424cf2.8e5f89fde926d86a.88109f4099c31092
     163890338bd4939e.8dd944c7808cb00e.e070d0209ff59a0a.6a81f0bbc9d97ad9
@@ -34014,11 +34014,11 @@
   after
     22ea4efd9bf6894b.dc1cbf6eb2424cf2.8e5f89fde926d86a.88109f4099c31092
     163890338bd4939e.8dd944c7808cb00e.e070d0209ff59a0a.6a81f0bbc9d97ad9
-    22ea4efd1bf6894b.dc1cbf6e32424cf2.e070d0206926d86a.6a81f0bbc9d97ad9
+    73972441c5d5bbf8.5fa5ec6dc127f356.eeedec64d1a3db5b.801ca78d5dbae6b6
     16d486146407bf84.b0cbb3cc119f5276.92a158b79a3b5a89.262cc023f1f390d5
-    b8fc35e7220eb3e1
+    0000000000000000
 
-VADDSUBPS_256(reg)
+VTESTPD_128_3(reg)
   before
     92da04468c9a8c86.d9bb33968575596f.db9996500a810919.aa5a900417cad1bf
     101028adca205771.9a18a6b5432b46e5.3b598f664b5954ec.10e21037635afd2a
@@ -34026,12 +34026,12 @@
     68b75f3f334fb2c9.8164cf7608a10820.0ee2b8f40e1794d1.3a93d900d9b3644e
     b5531a6d3b93165e
   after
-    0fe569f8f82e504e.33b75b5b432b479b.3b598f66edb16e9b.a207553c635afd2a
+    92da04468c9a8c86.d9bb33968575596f.db9996500a810919.aa5a900417cad1bf
     101028adca205771.9a18a6b5432b46e5.3b598f664b5954ec.10e21037635afd2a
     8eeb9d86782e504e.33b75b5bbb364111.2e589c786db16e9b.a207553c9af99af5
     68b75f3f334fb2c9.8164cf7608a10820.0ee2b8f40e1794d1.3a93d900d9b3644e
-    b5531a6d3b93165e
-VADDSUBPS_256(mem)
+    0000000000000041
+VTESTPD_128_3(mem)
   before
     ef139470dda56d53.fac06b43970fba8c.61ea7cf14779553d.3843e045ca16023b
     c59ec1f6dbf52459.a051bbfe3efba446.ad16e0b893c9e595.09c70ed73c3bf384
@@ -34041,11 +34041,11 @@
   after
     ef139470dda56d53.fac06b43970fba8c.61ea7cf14779553d.3843e045ca16023b
     c59ec1f6dbf52459.a051bbfe3efba446.ad16e0b893c9e595.09c70ed73c3bf384
-    ef1394705d961b0d.fac06b433efba446.61ea7cf1c779553d.3843e0454a16023b
+    11c21fe94f90f99c.b6b84ddcc79eaca1.42b476b7089d7354.dbb940150111a559
     b04929375882a647.983f1c49cb850d4a.fc90badac301bca5.0c66716db4245165
-    f61b9e4bf1013655
+    0000000000000041
 
-VADDSUBPD_128(reg)
+VTESTPD_128_3(reg)
   before
     f622c11955338ed5.7e005bcb0fd5e786.a13325b1e93b04ec.b776290de0027cb5
     68c8d8447c469690.57b3319193977a87.2fe06280ba4ccd34.50323d3d7aac6fb0
@@ -34053,12 +34053,12 @@
     1320cf628041a669.9a3dba636b968179.47946d04ebb0c365.875a49409627dc14
     de5f39eb5111cfd6
   after
-    0000000000000000.0000000000000000.2fe06280ba4ccd34.50323d3d7aac6fb0
+    f622c11955338ed5.7e005bcb0fd5e786.a13325b1e93b04ec.b776290de0027cb5
     68c8d8447c469690.57b3319193977a87.2fe06280ba4ccd34.50323d3d7aac6fb0
     a858de3801c78a33.172e2775fdd31973.9d92d122dd44a3ce.a18f7454ad0950c1
     1320cf628041a669.9a3dba636b968179.47946d04ebb0c365.875a49409627dc14
-    de5f39eb5111cfd6
-VADDSUBPD_128(mem)
+    0000000000000041
+VTESTPD_128_3(mem)
   before
     826abe43f8d4e433.036aa72c964125df.bcab6547f9eb6ec3.88343390821b69a6
     4f475633aa7bd957.d5836304de514441.5946a40dc2de9b7d.bebc1d343e12d13c
@@ -34068,11 +34068,11 @@
   after
     826abe43f8d4e433.036aa72c964125df.bcab6547f9eb6ec3.88343390821b69a6
     4f475633aa7bd957.d5836304de514441.5946a40dc2de9b7d.bebc1d343e12d13c
-    0000000000000000.0000000000000000.5946a40dc2de9b7d.bebc1d343e12d13c
+    21c27ca78012686d.e5b8fe55f5ff3e3a.4dd8f4a2e37cc5d4.4379295bba2036d4
     d4a6ac8b99a64da1.8f52748b76d75177.742ecff077d0a8f4.75b7527093d1d519
-    afc294e164b2eab8
+    0000000000000040
 
-VADDSUBPD_128(reg)
+VTESTPD_128_3(reg)
   before
     4ce6eb19c94eb05d.43c163cb0e424620.2fa0c112fe64b7a3.aa14b3e59ae6ff09
     a96e54845f3164b3.4cdd1b53fef20d16.21ede2562832ad6b.cb561b6b69cb883e
@@ -34080,12 +34080,12 @@
     14de49a48cfe8625.994b83ecb8c0f715.6bb38cc5d4c2377e.3e1d68df792f1ab9
     473a45a4f3c79d58
   after
-    0000000000000000.0000000000000000.c184d1c391cd6e7b.cb561b6b69cb883e
+    4ce6eb19c94eb05d.43c163cb0e424620.2fa0c112fe64b7a3.aa14b3e59ae6ff09
     a96e54845f3164b3.4cdd1b53fef20d16.21ede2562832ad6b.cb561b6b69cb883e
     23a8ca8ec1e84267.cac7520f82c35fae.c184d1c391cd6e7b.b3c08370008afdbf
     14de49a48cfe8625.994b83ecb8c0f715.6bb38cc5d4c2377e.3e1d68df792f1ab9
-    473a45a4f3c79d58
-VADDSUBPD_128(mem)
+    0000000000000040
+VTESTPD_128_3(mem)
   before
     ace395ab885d40c7.da5dcd305cff6b98.95352bd4bcf59277.7bc40ec88e9c4421
     48e4d7e054fdc033.cf71529fcb772e6c.9950c4b5a96fecff.4d0454395ae7d10f
@@ -34095,11 +34095,11 @@
   after
     ace395ab885d40c7.da5dcd305cff6b98.95352bd4bcf59277.7bc40ec88e9c4421
     48e4d7e054fdc033.cf71529fcb772e6c.9950c4b5a96fecff.4d0454395ae7d10f
-    0000000000000000.0000000000000000.9950c4b5a96fecff.fbc40ec88e9c4421
+    f709842f74b4d8c8.5066d55e78f30b4f.836acc799c39c1da.3cbf5882d43019f5
     941e1a84038d45b1.ba8751d8fcff3deb.2e4dbe0eb05fcc33.a64018119902597f
-    e6d58f5045eacd58
+    0000000000000040
 
-VADDSUBPD_128(reg)
+VTESTPD_256_1(reg)
   before
     58c8b9ad7373b12d.fdef13cc1e94c31b.6722c278f62501ec.75c6165f01eecb37
     57669393bf2940a9.0c47edf1e0d60e31.b48124acfff493ff.36a15158acf17711
@@ -34107,12 +34107,12 @@
     71d343aa234d5248.90bf3286cb38fa13.9ebead7db4b6100a.92ac5cf27e84cdfa
     e675256bde2cee61
   after
-    0000000000000000.0000000000000000.fdf174dfb5f52fd0.ccaae9e5cc748fef
+    58c8b9ad7373b12d.fdef13cc1e94c31b.6722c278f62501ec.75c6165f01eecb37
     57669393bf2940a9.0c47edf1e0d60e31.b48124acfff493ff.36a15158acf17711
     41fb176ec699b779.9ff324e1665ee120.fdf174dfb5f52fd0.4caae9e5cc748fef
     71d343aa234d5248.90bf3286cb38fa13.9ebead7db4b6100a.92ac5cf27e84cdfa
-    e675256bde2cee61
-VADDSUBPD_128(mem)
+    0000000000000000
+VTESTPD_256_1(mem)
   before
     22cfc03c0779ae4d.423a12b373d44cc3.bd7795ce2b711237.f334cbf297c2735a
     2387aa521575c8ed.127c81f551b7e296.00e7c8a4a314e8b8.599fcaaafba5946b
@@ -34122,11 +34122,11 @@
   after
     22cfc03c0779ae4d.423a12b373d44cc3.bd7795ce2b711237.f334cbf297c2735a
     2387aa521575c8ed.127c81f551b7e296.00e7c8a4a314e8b8.599fcaaafba5946b
-    0000000000000000.0000000000000000.bd7795ce2b711237.7334cbf297c2735a
+    c6695e97252ffa6b.3be48add5a84506c.37da47f44f2e36c1.2a4aa6127becaeea
     e54158f952b0fdf4.1bbf2bd529c6d2f2.3c1e8eaa4ac9b97f.c3835c94b322ff83
-    8094e79e40d3c1e1
+    0000000000000040
 
-VADDSUBPD_256(reg)
+VTESTPD_256_1(reg)
   before
     bdca439abe8c30b1.5edb1463b90690b3.0c595f4b5b0aa3d4.ed7d1ab2b0f42d1e
     d6716cf6c8d88a9e.0b030ec0753c6dd5.6cfe22a98bdb00bd.24c465f89eb84ec9
@@ -34134,12 +34134,12 @@
     0b41167af15be982.742bad085d79f8f0.e59946d257554d56.973a2def804085f5
     8c01a277ad1c13cd
   after
-    d6716cf6c8d88a9e.4984c3fea25e5185.6cfe22a98bdb00bd.3ebfed693023d7ac
+    bdca439abe8c30b1.5edb1463b90690b3.0c595f4b5b0aa3d4.ed7d1ab2b0f42d1e
     d6716cf6c8d88a9e.0b030ec0753c6dd5.6cfe22a98bdb00bd.24c465f89eb84ec9
     26d45f1dfa440955.c984c3fea25e5185.95fa705d56c5255a.bebfed693023d7ac
     0b41167af15be982.742bad085d79f8f0.e59946d257554d56.973a2def804085f5
-    8c01a277ad1c13cd
-VADDSUBPD_256(mem)
+    0000000000000040
+VTESTPD_256_1(mem)
   before
     77dfc7eed1c23f63.e0028f7b48a968d0.e9c44acac2991e42.b6269f742b16b55e
     35a2173f083ec3e1.0165c68b9cbac0eb.021b1630ecc87ea6.65ef77af6d94991d
@@ -34149,11 +34149,11 @@
   after
     77dfc7eed1c23f63.e0028f7b48a968d0.e9c44acac2991e42.b6269f742b16b55e
     35a2173f083ec3e1.0165c68b9cbac0eb.021b1630ecc87ea6.65ef77af6d94991d
-    77dfc7eed1c23f63.60028f7b48a968d0.e9c44acac2991e42.65ef77af6d94991d
+    a21410556f9c5b74.cab4b517881b2e81.9cfc8b27f814d549.4f3ecaefb95c3540
     9a022e1e21e9c547.963c5a89a957ee3c.933327990088de56.ce6095a0acf9c473
-    3fa1d32ee2f78361
+    0000000000000040
 
-VADDSUBPD_256(reg)
+VTESTPD_256_1(reg)
   before
     fe4d7f06f6e3aeb7.f938eb853a30bb87.c349af4e9afb3bc8.c38b6573233157fa
     67af989284488020.9b81c576d87efa5f.ac26b2d3f89252d2.08d1c1a27b1afa61
@@ -34161,12 +34161,12 @@
     a8c9fa7a80ae0cde.1880bda70c5c4289.2184b0c968c9ce0f.4157c4ab3bddb026
     ed2f635edbce3bdc
   after
-    67af989284488020.dcab37de14de3efc.ad215f99117c6798.bed1b710244f83b6
+    fe4d7f06f6e3aeb7.f938eb853a30bb87.c349af4e9afb3bc8.c38b6573233157fa
     67af989284488020.9b81c576d87efa5f.ac26b2d3f89252d2.08d1c1a27b1afa61
     d714174029b23749.5cab37de14de3efc.ad215f825ea86f06.3ed1b710244f83b6
     a8c9fa7a80ae0cde.1880bda70c5c4289.2184b0c968c9ce0f.4157c4ab3bddb026
-    ed2f635edbce3bdc
-VADDSUBPD_256(mem)
+    0000000000000000
+VTESTPD_256_1(mem)
   before
     1e2510152131e105.37183bae26c73e8a.abced4bedc05c334.669ca312b382aa9a
     b00447bc280f5ecd.e04ed847b68a07fa.f15ff6109fe47d26.d6b533cbdb5f4053
@@ -34176,11 +34176,11 @@
   after
     1e2510152131e105.37183bae26c73e8a.abced4bedc05c334.669ca312b382aa9a
     b00447bc280f5ecd.e04ed847b68a07fa.f15ff6109fe47d26.d6b533cbdb5f4053
-    b00447bc280f5ecd.e04ed847b68a07fa.f15ff6109fe47d26.e69ca312b382aa9a
+    7f9a843f0d766d5f.ffb6cdb1cd81a5d9.c600a18771052b8e.cf1b5c5f7beacce5
     67b1448aeb72cbe8.f09e1458063b51d4.067c50116f758b96.ab1a1a3a2fb189fd
-    c8fd6ac8943fb446
+    0000000000000001
 
-VADDSUBPD_256(reg)
+VTESTPD_256_2(reg)
   before
     801247754621896d.44160289df0d3493.0f51aba8fe414a97.8da17f98b53f576a
     31a3adaee0e2441d.f1953a290455648d.b81a8d0d5021cacd.373aab0a5e6f4b37
@@ -34188,12 +34188,12 @@
     e96c046f3d325acb.301009f8531a071d.172122c7749c5244.63f6e65c4a339f6c
     9eb2ee14c5de762a
   after
-    35fd98ddfe0e2003.f1953a290455648d.4746b6f499660e23.5f124e5286122529
-    31a3adaee0e2441d.f1953a290455648d.b81a8d0d5021cacd.373aab0a5e6f4b37
+    801247754621896d.44160289df0d3493.0f51aba8fe414a97.8da17f98b53f576a
+    35fd98ddfe0e2003.4cfa685477561602.4746b6f499660e23.df124e5286122529
     35fd98ddfe0e2003.4cfa685477561602.4746b6f499660e23.df124e5286122529
     e96c046f3d325acb.301009f8531a071d.172122c7749c5244.63f6e65c4a339f6c
-    9eb2ee14c5de762a
-VADDSUBPD_256(mem)
+    0000000000000001
+VTESTPD_256_2(mem)
   before
     6c12e36614206592.aa3ceed138d92e20.79a597ffb4aff20a.86f7cef37d50d1dd
     a8e23f3f520429ce.d2b8516d8c8fd7af.02839057b72195f7.ef14b5e5510dc89a
@@ -34202,12 +34202,12 @@
     9d0ba490a4f5d45d
   after
     6c12e36614206592.aa3ceed138d92e20.79a597ffb4aff20a.86f7cef37d50d1dd
-    a8e23f3f520429ce.d2b8516d8c8fd7af.02839057b72195f7.ef14b5e5510dc89a
-    6c12e36614206592.d2b8516d8c8fd7af.79a597ffb4aff20a.ef14b5e5510dc89a
+    93ed1c99ebdf9a6d.55c3112ec726d1df.865a68004b500df5.7908310c82af2e22
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     de0021320de32074.cae87208ad5a9b29.494db1a712c9ee7b.1e5124c7c9d40d2d
-    9d0ba490a4f5d45d
+    0000000000000040
 
-VCVTSS2SI_64(reg)
+VTESTPD_256_2(reg)
   before
     863b50ceba4f0260.90e89e24c2f6ca36.533329deb2862e6d.bdd1d177a1171c6b
     342e23eda66fd3e2.206f744dd6db3a7d.b35b499f80f2869a.e3ce4a474272f20a
@@ -34216,11 +34216,11 @@
     119aadf0a644b2b6
   after
     863b50ceba4f0260.90e89e24c2f6ca36.533329deb2862e6d.bdd1d177a1171c6b
-    342e23eda66fd3e2.206f744dd6db3a7d.b35b499f80f2869a.e3ce4a474272f20a
+    052f195a05e18590.6c621e98659f2974.47acceb7b229e05d.95129a0310e52a83
     052f195a05e18590.6c621e98659f2974.47acceb7b229e05d.95129a0310e52a83
     548c2e7f722f5216.4e8c17f08c4d5647.6b72b492e4b77862.b1673d98287c8003
-    000000000000003d
-VCVTSS2SI_64(mem)
+    0000000000000001
+VTESTPD_256_2(mem)
   before
     927768f8a4487ac7.7c8f5fc98ae7771f.a4bbde4367f27b24.7bf8f79db3298a54
     11cae99d40959562.db86a7a5e8942f58.48b9ec7c11995534.d38b9442bb0a51df
@@ -34229,12 +34229,12 @@
     238b590d3cc241d3
   after
     927768f8a4487ac7.7c8f5fc98ae7771f.a4bbde4367f27b24.7bf8f79db3298a54
-    11cae99d40959562.db86a7a5e8942f58.48b9ec7c11995534.d38b9442bb0a51df
-    685facca9635beb5.cbbb017d29c3b86d.1854be88a64ea0a6.cf7886ee97e70ab0
+    6d8897075bb78538.8370a036751888e0.5b4421bc980d84db.840708624cd675ab
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     74022d6ac137b3e9.aa7b6cbfe8ff4c09.ee56d151431d18a4.cb09c90ee34bf073
-    0000000000000000
+    0000000000000040
 
-VCVTSS2SI_64(reg)
+VTESTPD_256_2(reg)
   before
     334933563dd8377d.127ee96bdea42e2d.d212e1d5c2d427d8.a78ca0c40413785b
     57915157831a0f1d.1ca05bb8088aecab.a0cb5e2d52cf8788.20c2a7cd043b7df6
@@ -34243,11 +34243,11 @@
     9a5ae6a6985ac0db
   after
     334933563dd8377d.127ee96bdea42e2d.d212e1d5c2d427d8.a78ca0c40413785b
-    57915157831a0f1d.1ca05bb8088aecab.a0cb5e2d52cf8788.20c2a7cd043b7df6
+    eaadb17baa13045e.6f34ff3d5cf4a890.71f4de32357ba6c3.33c363595fa2e2a2
     eaadb17baa13045e.6f34ff3d5cf4a890.71f4de32357ba6c3.33c363595fa2e2a2
     4aea4f2e4c5053ed.e70651e6f5ef1f07.9fd75d500664c135.bd5d4e533253658a
-    0000000000000000
-VCVTSS2SI_64(mem)
+    0000000000000001
+VTESTPD_256_2(mem)
   before
     a687a640aec3afc1.d29525dc085b3875.61e2cea0ef860d3d.87c1d7f36117138b
     bdb00b0c8f9bf067.def831f277c3efa3.b794f05567c52e5d.86fe4887e31fda71
@@ -34256,12 +34256,12 @@
     9c9e402268af3b37
   after
     a687a640aec3afc1.d29525dc085b3875.61e2cea0ef860d3d.87c1d7f36117138b
-    bdb00b0c8f9bf067.def831f277c3efa3.b794f05567c52e5d.86fe4887e31fda71
-    bba18ff658ee3dfa.ca5f6dda3711b423.c6e735f279b83d94.f6daad7928085092
+    597859bf513c503e.2d6ada23f7a4c78a.9e1d315f1079f2c2.783e280c9ee8ec74
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     7d26b0ea24c653a5.f118d801e4d3c2a0.6aa81864406cf70e.34a10133ca5fb29b
-    8000000000000000
+    0000000000000040
 
-VCVTSS2SI_64(reg)
+VTESTPD_256_3(reg)
   before
     8a1f67b39c842813.dd0ae9d40f31ee95.b16d6bd4199455c7.7fa31696d8ed18f6
     5b6e7051026bb5db.b81bb6a0363ac9f6.64ac23bd73e1ab43.e1a4a9735e455b79
@@ -34273,8 +34273,8 @@
     5b6e7051026bb5db.b81bb6a0363ac9f6.64ac23bd73e1ab43.e1a4a9735e455b79
     69d8596737ef1e3a.e923933bb5eea1f3.681ffd2a8d45fec1.6c774fe9ed827ec2
     11a91d63d69d9edd.4eeffd8fa75832b9.1813f486034c8bec.fce883e3a2af3bfe
-    3156de4000000000
-VCVTSS2SI_64(mem)
+    0000000000000000
+VTESTPD_256_3(mem)
   before
     9bd38613ec0b75fe.af2db8b07cff726f.c24b6f8a29843773.cfd4043d72838e71
     61e54c21b9516a19.9faf27bac4a3d69d.21036516557f6e4e.ebad29bb767442fc
@@ -34286,9 +34286,9 @@
     61e54c21b9516a19.9faf27bac4a3d69d.21036516557f6e4e.ebad29bb767442fc
     9dc591631cb8ead8.3d7d64ed4b150613.47e35b214a549176.c6ec606caaaee538
     2a3fd0c6304bb065.e4e16db6ace03d7c.10b6ce96220f5c16.bedba4bcaabab0d2
-    8000000000000000
+    0000000000000000
 
-VCVTSS2SI_32(reg)
+VTESTPD_256_3(reg)
   before
     70fd43ea807eb5cf.e41f8534111679ec.f2283e7f8390b885.58493861f9bd8d5a
     e4c7979f8e4c6689.a7302d9bdc26019a.c29ed1b56eb1b2d9.fa68176eec69de70
@@ -34300,8 +34300,8 @@
     e4c7979f8e4c6689.a7302d9bdc26019a.c29ed1b56eb1b2d9.fa68176eec69de70
     e371e7a4d91e3152.4e4043e5ad86049b.b08f23c506d06925.d4dfe6a9161f0c82
     ca493163fb8052d3.b71943009f423d1a.18473119e9781715.c17a22fe94ecd2bc
-    0000000080000000
-VCVTSS2SI_32(mem)
+    0000000000000000
+VTESTPD_256_3(mem)
   before
     434ccda7faf8195b.f599704a93fc04bb.bc88a9d7ce676944.5611f61fb336f954
     901a35d21a501217.c1afa1c43a2084b4.3b59f15657004445.c53b6e42ff954a8e
@@ -34315,7 +34315,7 @@
     917e9673c1df5a46.a758c5212b8edd8b.135019fce6bff67a.abda698f8e662ca7
     0000000000000000
 
-VCVTSS2SI_32(reg)
+VTESTPD_256_3(reg)
   before
     a8850060774d9ebd.fbac86c1802d2010.7a84b1dcacf02ec1.250ff0fb23fd4506
     75fcbc687307a2f6.7c92479d56e7a436.5da47edaae2a3cb8.1f5f99532ae03319
@@ -34327,8 +34327,8 @@
     75fcbc687307a2f6.7c92479d56e7a436.5da47edaae2a3cb8.1f5f99532ae03319
     9d9b13159aaa7e32.f1fb54f35f16a0e6.ac062887ccc7451d.df0d91ee16737bde
     7bac02d487c26d1e.34b52aafb8c8d14a.c3f4ac50a253839c.3fe552b904c2da82
-    0000000000000000
-VCVTSS2SI_32(mem)
+    0000000000000041
+VTESTPD_256_3(mem)
   before
     5343249154c5cd16.6a7c840fd7dcac66.238a43bd7d08f38e.febb059fcd5a33e0
     be612d75ee91d85e.c7579534258377b5.98471d09c9e2c2df.b9a72fe2e9699196
@@ -34340,9 +34340,9 @@
     be612d75ee91d85e.c7579534258377b5.98471d09c9e2c2df.b9a72fe2e9699196
     3ad8ef38fa4aea35.ef8932ae0e430ab7.70b83380b863f969.50042683900bd869
     a475e8c893fbbfc6.3c5d55e92da9a11a.88a9010c67965557.1f1ee7f061cd4506
-    00000000f25cc200
+    0000000000000040
 
-VCVTSS2SI_32(reg)
+VTESTPD_256_3(reg)
   before
     d5b8b4dbebdd804d.d6049310d5b0133d.0c21fc501f407788.bae6049bf18891d6
     74d0b831dd45c74e.ad516cfddd75a1c7.b91f22517f94c9ad.e33ab61773446b11
@@ -34354,8 +34354,8 @@
     74d0b831dd45c74e.ad516cfddd75a1c7.b91f22517f94c9ad.e33ab61773446b11
     bad5750267fc23ca.0528f079c7572690.a0a4c458e932d236.df73956e08d69d35
     0513e8ba268ed06b.ba559a71ae615dc4.1dfcdccffaa5d0cf.8a5b1c8bcd4be36e
-    0000000080000000
-VCVTSS2SI_32(mem)
+    0000000000000000
+VTESTPD_256_3(mem)
   before
     5e6b13c7550b9fcd.b0d60cc6b5880cdd.a8a3e5d2aea0048e.8d7368234e79fd23
     3e2a7bbe506e8c4b.166add90b17411cd.abdf5086e41fd51a.4a5563c07f3b95df
@@ -34367,9 +34367,9 @@
     3e2a7bbe506e8c4b.166add90b17411cd.abdf5086e41fd51a.4a5563c07f3b95df
     3dca7b2bebe47e8e.951a5786b5e11ce7.9fd5547b6cea8c96.b1eec9132c76d6ae
     37158ffa417830c2.883476125d5868d6.60516e9b600ee72b.1e899686efb6fa3d
-    000000003e7f48c0
+    0000000000000000
 
-VCVTSD2SI_32(reg)
+VTESTPD_256_3(reg)
   before
     7af857812877de4a.08d933176e375f12.4a0237a246673347.ca1f1bd4df96a008
     216442e0d60f1520.8be0e46f8f2cc7ab.39d195a10c99b7e6.b90bd611038e7457
@@ -34382,7 +34382,7 @@
     3e0384100bdd2065.9ef71decc06323b8.afed8c7b4a7b305e.09e01b3ee8031f44
     2d21197d626c3bc6.1ce95a7c1ce93166.0aa1199c9c98dc5b.966c6747ab005cfc
     0000000000000000
-VCVTSD2SI_32(mem)
+VTESTPD_256_3(mem)
   before
     d7d4009e38c37f7c.4a09fe937849a1ef.e184170abfc9abe1.a43b36709f7cf58b
     434947c33ba1dd9c.f1082ebee8ff908b.c993d081c60f4d54.db05e163efb4b898
@@ -34396,7 +34396,7 @@
     fdb0319e4692dc78.4d7c5f044726f3ce.713b28df6efffdd4.8c5cce57e34d2bfa
     0000000000000000
 
-VCVTSD2SI_32(reg)
+VTESTPD_256_3(reg)
   before
     fc07c0d759c414e3.043bce2c86bdf58c.ba8759f66fb0e0cd.ea6dbe9d47c08239
     a33af1b94bd0ac58.4b0fd50967c4c69e.21da8eae614346f0.f64341f6f4181f46
@@ -34408,8 +34408,8 @@
     a33af1b94bd0ac58.4b0fd50967c4c69e.21da8eae614346f0.f64341f6f4181f46
     0d659743317855b2.b0f9c22305b409db.ddc0fa96ba6c5ee2.70892bd491129129
     97d5afe0a8474c9e.0ec512657d987b6f.4c84991c14b6674f.360afa2438bb940b
-    0000000080000000
-VCVTSD2SI_32(mem)
+    0000000000000000
+VTESTPD_256_3(mem)
   before
     12f134cb1a463c82.9dd733fc4bc9ccc8.403f3fbbeb7cd785.c97368ab0ead9be5
     e1ee98fa8c425a6f.7bb52103b68b13db.2432c711696ddb49.afd961af42dd374e
@@ -34421,9 +34421,9 @@
     e1ee98fa8c425a6f.7bb52103b68b13db.2432c711696ddb49.afd961af42dd374e
     6a57cf4b7a1cf70c.8dbb746186185b84.946c2553167641e9.5c0282944cd37736
     8bf757aaffe0d286.2f37288257fce16e.6eb7d56e0ca4c58f.2b3ac6c6c91a964a
-    0000000080000000
+    0000000000000040
 
-VCVTSD2SI_32(reg)
+VTESTPD_256_3(reg)
   before
     9e06a8c28acd64a5.1e9cab03379aa508.be743ad2c4c4e046.8ce0544c67012567
     fa323e6306508b44.001048423f572dbf.94bda4be6afb95b8.ccb31ddb449b1b9e
@@ -34435,8 +34435,8 @@
     fa323e6306508b44.001048423f572dbf.94bda4be6afb95b8.ccb31ddb449b1b9e
     e99de702655581bf.0e21a853332226d6.0e5f64b0e42e3c6f.08fcac05be7e6460
     c5939f09426783c1.229949222e084c7a.88a67516cee71118.1d877db8f2b5bbd8
-    0000000080000000
-VCVTSD2SI_32(mem)
+    0000000000000000
+VTESTPD_256_3(mem)
   before
     4392d665f54f879c.ec6062e63a12cdf6.1945a69b4c135ad7.5dded35ac5b44f5e
     0baa5638fdcb7340.b8502d04e8e39a0c.d0f13babaa520d18.eb537bea642133ee
@@ -34448,9 +34448,9 @@
     0baa5638fdcb7340.b8502d04e8e39a0c.d0f13babaa520d18.eb537bea642133ee
     1c3408432fcb5d4b.86aefbcfe86527ad.2168853c63ce206a.8d50683148b9f974
     53fc6873a65c02e8.b3c8c8b3d724b085.e978fe3c949551f8.9f23969b0c08dd9b
-    0000000080000000
+    0000000000000001
 
-VCVTSD2SI_64(reg)
+VTESTPD_256_3(reg)
   before
     8376a588a6fced7e.8acef2b27f891e44.99e8901c51ad7141.04eb249558b25af0
     0c8f7fe3b4b99292.9e7623edd55e6d8a.955b5076f18ba58d.4e8e7235cc32f77b
@@ -34462,8 +34462,8 @@
     0c8f7fe3b4b99292.9e7623edd55e6d8a.955b5076f18ba58d.4e8e7235cc32f77b
     76ad8a12125e44f8.6bbf7611c4e8aae7.046d022d534a8914.a32d64070b20e6c7
     1c1bc27f5d76405b.cd76670869329287.4069a4ae14775983.e09477f73288e100
-    8000000000000000
-VCVTSD2SI_64(mem)
+    0000000000000000
+VTESTPD_256_3(mem)
   before
     7deaede1a6f7eee8.59272398308dc267.a06772c0df48e195.a69d3163d09d5185
     967048b42b1777ee.8b1baac7283006ca.c05e14234336523e.9253a6ba2248acc7
@@ -34475,9 +34475,9 @@
     967048b42b1777ee.8b1baac7283006ca.c05e14234336523e.9253a6ba2248acc7
     06eeb35407e0fd91.0d44517ae0e9472e.0927c81fb009a3ad.60d9fd1da605a7f5
     a830abae57603cfd.3aee161cf447c23f.578e0a9f43cd8e0f.6c7934faf95f7dba
-    0000000000000000
+    0000000000000040
 
-VCVTSD2SI_64(reg)
+VTESTPD_256_3(reg)
   before
     ae3930cf7a1baebb.5a02abaf37a3ef5d.7065f41901d3b2aa.865e568f178ccf90
     9cf2ec9fe095804f.f7302f42c2b3d4de.09f5e8dda31b551b.726528db4954245b
@@ -34489,8 +34489,8 @@
     9cf2ec9fe095804f.f7302f42c2b3d4de.09f5e8dda31b551b.726528db4954245b
     38f5789885dd1d2b.5b86b352149ea5ac.63eaecd475abe53d.f76dfd6ff431479d
     de90cf26047dc2fa.62cfb3cd4a6f1ef2.d88ffe6a130d9fbd.f0435038352df581
-    8000000000000000
-VCVTSD2SI_64(mem)
+    0000000000000000
+VTESTPD_256_3(mem)
   before
     b3896014e7b8e0e2.ea0dedb6f904ab69.e8d8ac9e8033fddd.c631190b1acfbf47
     34901601905d96b6.b8b9ceb201fb1423.c86e19b1d0f5fc98.871c3923257c8086
@@ -34502,9 +34502,9 @@
     34901601905d96b6.b8b9ceb201fb1423.c86e19b1d0f5fc98.871c3923257c8086
     999639d23e53c7dd.a4e06f87b8f038d5.e05b76f259c2d850.789c5b1fd1a11f26
     c06547720ea62e82.09cdcaa2b96e542b.0b6b3f4d34a44c31.f6fd7969b9c9d8d5
-    8000000000000000
+    0000000000000000
 
-VCVTSD2SI_64(reg)
+VTESTPD_256_3(reg)
   before
     04919e9caf53860a.84cabccf1c6088d2.45cedd6ea002a4d0.246cf1af80a91566
     4d5c9d5cf5cdf4e9.c09112d4839091f8.b32da4560a366470.0929070256ddef1b
@@ -34517,7 +34517,7 @@
     9238881ae77a6c85.5286c76d5f3f0521.af3719c89399cfb9.956dfd33d54a967e
     30715d4422e7298c.14755586cd7b9f79.94393a2fd6b42255.a3054f2f16ffc5b9
     0000000000000000
-VCVTSD2SI_64(mem)
+VTESTPD_256_3(mem)
   before
     b961f834546aae68.81531746419f68a7.e4293b0be84f1c2b.c07c02f76f1599f0
     79bd47168839e035.e22ab28ae02f6585.9c6ff2e9cdc73864.8e4f6d8dfb476f37
@@ -34529,9 +34529,9 @@
     79bd47168839e035.e22ab28ae02f6585.9c6ff2e9cdc73864.8e4f6d8dfb476f37
     2b9de272ef7e8a8a.af412b7d9d215bd0.1a13f70a98f0ae50.59fd775b15d7e1d6
     accc4534a6466994.44e67c8b11048834.38e2c75c63d53b1a.7fd11dce5a502b78
-    fffffffffffffe40
+    0000000000000000
 
-VDPPS_128_1of4(reg)
+VBLENDVPS_128(reg)
   before
     481f2954d32e3678.d917ed48c99c397f.fd63a321da61265f.d3a5ddc94d839bee
     a330893f3fab6f2d.8c4a559b738db676.36059ba993c671fa.c82bb53f6f048afa
@@ -34539,12 +34539,12 @@
     14a2e57f837d745e.f89855a9cd6da539.98e8ef4448d50237.2bac9cf3d1b50364
     533fa30848fc061b
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.4b18619193c671fa.c82bb53fe767c368
     a330893f3fab6f2d.8c4a559b738db676.36059ba993c671fa.c82bb53f6f048afa
     c897737e46417095.a231f917c0249ba5.4b186191d9bea7b4.f13fcba9e767c368
     14a2e57f837d745e.f89855a9cd6da539.98e8ef4448d50237.2bac9cf3d1b50364
     533fa30848fc061b
-VDPPS_128_1of4(mem)
+VBLENDVPS_128(mem)
   before
     43c45cd7694788b9.e19bd9ad92eab831.684be53eb5748f5e.79c0432e7b98be2f
     d80743494fa34469.8dd04d74101478bd.cf1526c095461740.49ee58bb0e92194a
@@ -34554,11 +34554,11 @@
   after
     43c45cd7694788b9.e19bd9ad92eab831.684be53eb5748f5e.79c0432e7b98be2f
     d80743494fa34469.8dd04d74101478bd.cf1526c095461740.49ee58bb0e92194a
-    eed4d54b161bf758.728b3d409988f0ac.09c4931d89eef70a.66bc2a579e504d31
+    0000000000000000.0000000000000000.684be53eb5748f5e.49ee58bb7b98be2f
     61f78cc9dbbb5cb1.ed19a37dc8d15bab.f222a840ab79ebe8.2b77b56ec65d9793
     f46bf66c2345331a
 
-VDPPS_128_1of4(reg)
+VBLENDVPS_128(reg)
   before
     1ce4e8bd50945c72.0d3be6b0ba8f31a1.5ac67d98397bf665.67fce11519f2b108
     012d87cee9d74f48.cf6d5eeacea43054.16dec6fb8913fd87.421ebb88ef650393
@@ -34566,12 +34566,12 @@
     6e63bddcd267831d.00cc990c06bf9eb1.e67e954d353a3eb1.9d693ef8416b3ea1
     d52ae1cdf5159e7a
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.7bac7a138913fd87.6053b085ef650393
     012d87cee9d74f48.cf6d5eeacea43054.16dec6fb8913fd87.421ebb88ef650393
     fe94cf098c994848.815a7165330615f5.7bac7a135424abbc.6053b08548df9eb8
     6e63bddcd267831d.00cc990c06bf9eb1.e67e954d353a3eb1.9d693ef8416b3ea1
     d52ae1cdf5159e7a
-VDPPS_128_1of4(mem)
+VBLENDVPS_128(mem)
   before
     e46413f181e97b71.afe74bb259cc3b74.288f54ca62dd85b3.b39e1414c8e2ef12
     a6e1524e00f491af.1c6c77f6bd54adf9.d4711d8d646b8728.3e59f2d3aaa7fd8a
@@ -34581,11 +34581,11 @@
   after
     e46413f181e97b71.afe74bb259cc3b74.288f54ca62dd85b3.b39e1414c8e2ef12
     a6e1524e00f491af.1c6c77f6bd54adf9.d4711d8d646b8728.3e59f2d3aaa7fd8a
-    f66e18d18e429b63.103e3c16998c1557.e23d70402776603c.e3fb2bf87615a2c6
+    0000000000000000.0000000000000000.d4711d8d62dd85b3.b39e1414c8e2ef12
     b2d6e36748dd57b7.e9a9977d89ffae3a.2dbecacfc809cb1a.fed0bbeec9b91b71
     eb239f213e1ea438
 
-VDPPS_128_1of4(reg)
+VBLENDVPS_128(reg)
   before
     0642d1fd72d179c7.b5e72ffb49d37fd7.01f882972a39b550.91c1a526623085ef
     ab774fef005cd5c9.db6c7679ae30cff0.b579fbd118c76643.ea127f3212f84ae6
@@ -34593,12 +34593,12 @@
     03561dc09b3015d8.ff00eae3134bdbbc.623c8450480cb571.eace1e152198e4ec
     4ad0dac4ba893154
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.b579fbd118c76643.147dd3dd12f84ae6
     ab774fef005cd5c9.db6c7679ae30cff0.b579fbd118c76643.ea127f3212f84ae6
     360f1461844df5eb.003036cd93fe052e.6276fd95ed34fdbf.147dd3ddf36cd62c
     03561dc09b3015d8.ff00eae3134bdbbc.623c8450480cb571.eace1e152198e4ec
     4ad0dac4ba893154
-VDPPS_128_1of4(mem)
+VBLENDVPS_128(mem)
   before
     0f5185d8d74a788d.6d986479e190703d.b6a80ea74a230ec7.13178d6fc3dbcb05
     151b9a3b96e777c6.d221e7f6f1f943c5.00f41e055590597b.cf53135cfa2e7b26
@@ -34608,11 +34608,11 @@
   after
     0f5185d8d74a788d.6d986479e190703d.b6a80ea74a230ec7.13178d6fc3dbcb05
     151b9a3b96e777c6.d221e7f6f1f943c5.00f41e055590597b.cf53135cfa2e7b26
-    37fb95db136de828.8d3ca1a567f7ca1e.b8b097e94fa07903.f33b11858a910081
+    0000000000000000.0000000000000000.b6a80ea75590597b.13178d6ffa2e7b26
     53bdf2a368e788e2.fa378ef1e01740f1.bca7f440555f2a8c.db1d86550e8e97c1
     e4436b3722b47c93
 
-VDPPS_128_2of4(reg)
+VBLENDVPS_256(reg)
   before
     68fabd99648ceba3.432d2e7fb462121e.745cab46f8e5e3ed.e7a7b1f482d82841
     c48e79e66da41f9c.e517c45b11e84409.59f8f2104aebedbc.147a4af3f2172e4f
@@ -34620,12 +34620,12 @@
     747d1cf24ac1c9fb.ab87eec46f4b8a9a.d0c4f3b30dd42884.e8cc017e0e184524
     47e217e3f1f2ce44
   after
-    0000000000000000.0000000000000000.7e29354c00000000.7e29354c00000000
+    c48e79e66da41f9c.1346302411e84409.045761bb4aebedbc.21ed3b27f2172e4f
     c48e79e66da41f9c.e517c45b11e84409.59f8f2104aebedbc.147a4af3f2172e4f
     544b9a8adb87552b.134630249b87d8ce.045761bb72b79a0a.21ed3b27c328fae1
     747d1cf24ac1c9fb.ab87eec46f4b8a9a.d0c4f3b30dd42884.e8cc017e0e184524
     47e217e3f1f2ce44
-VDPPS_128_2of4(mem)
+VBLENDVPS_256(mem)
   before
     18fdf94288c24f6c.806ffc8855dfb7b9.87a77b28a83f1898.1b8da564b6cfd1d6
     38e72387ee9585c9.d46e34b9986c5a11.8570513d636f3cf5.3ffc713a0a33d2ab
@@ -34635,11 +34635,11 @@
   after
     18fdf94288c24f6c.806ffc8855dfb7b9.87a77b28a83f1898.1b8da564b6cfd1d6
     38e72387ee9585c9.d46e34b9986c5a11.8570513d636f3cf5.3ffc713a0a33d2ab
-    846e129e3f762c87.ccc7c2f2b0f4efae.7faeeeedbbe7b3dd.9a5f55a2a48c66b0
+    18fdf94288c24f6c.806ffc88986c5a11.8570513da83f1898.1b8da5640a33d2ab
     d65c4173987200d1.c4c4a19d3904b13d.522fcd26cdb4387b.86004c062167cb91
     612c52d41c4f3bf9
 
-VDPPS_128_2of4(reg)
+VBLENDVPS_256(reg)
   before
     852f647732d0f294.0b7e2cf21494bcd3.18b2ce28ce27de69.dbbe6bd3b4e189fc
     50547c5bfe762e10.00a04f08d0e81dbb.24dc43fe0beab0df.f42642e08d7b608c
@@ -34647,12 +34647,12 @@
     4638b39529642055.95132ea57657bde7.d418fa3bef7d3558.49b490ca82239286
     3e72ff7fd749654a
   after
-    0000000000000000.0000000000000000.c18aec4e00000000.c18aec4e00000000
+    50547c5bfe762e10.8f8d269fd0e81dbb.4490fe8b8dd8644b.f42642e0738d7a56
     50547c5bfe762e10.00a04f08d0e81dbb.24dc43fe0beab0df.f42642e08d7b608c
     1ce998eb1cce2916.8f8d269fe87adeb2.4490fe8b8dd8644b.7a34d039738d7a56
     4638b39529642055.95132ea57657bde7.d418fa3bef7d3558.49b490ca82239286
     3e72ff7fd749654a
-VDPPS_128_2of4(mem)
+VBLENDVPS_256(mem)
   before
     333a97448e0cafcb.2b8ec9c5c1c24e77.eefce205998a7484.2fc2337ace6560b3
     05d8d605c2772c38.2537d7e57f76f129.7615beaa6a20bfb6.b3d8a5b4c51d2107
@@ -34662,11 +34662,11 @@
   after
     333a97448e0cafcb.2b8ec9c5c1c24e77.eefce205998a7484.2fc2337ace6560b3
     05d8d605c2772c38.2537d7e57f76f129.7615beaa6a20bfb6.b3d8a5b4c51d2107
-    901737af8f9797bb.917fd862ff0c4316.0a2a3e8208245ca8.bba74d557130b401
+    333a9744c2772c38.2b8ec9c5c1c24e77.eefce205998a7484.2fc2337ac51d2107
     b0c4362c1277ad80.cbb2c8a8de0e81eb.8407df788ca20587.a37a26c96d2b544d
     c69f2c7d56993f96
 
-VDPPS_128_2of4(reg)
+VBLENDVPS_256(reg)
   before
     82615bdbc706ae88.41ac4f6a67232ab5.2f1ba324b80be653.c1781b7814a7777e
     320bb0515dfee0d1.1f99ff54a8a8c983.1a086540278caffb.9d49706ebc3e6eba
@@ -34674,12 +34674,12 @@
     dd4ab83165c27812.32b410db656a61a1.f099900d3b4f5dba.a23953edda53d9b0
     83f1d84e88e8c6c1
   after
-    0000000000000000.0000000000000000.b22edd9800000000.b22edd9800000000
+    31ea254a5dfee0d1.1f99ff54a8a8c983.e6c30b6a278caffb.f44559479f73a567
     320bb0515dfee0d1.1f99ff54a8a8c983.1a086540278caffb.9d49706ebc3e6eba
     31ea254ab30e0f1b.2657c0d5f4114819.e6c30b6aca1f188f.f44559479f73a567
     dd4ab83165c27812.32b410db656a61a1.f099900d3b4f5dba.a23953edda53d9b0
     83f1d84e88e8c6c1
-VDPPS_128_2of4(mem)
+VBLENDVPS_256(mem)
   before
     72396654c54127c8.9077657410a45763.1f7b6b5117c0d047.94d6f09516a8b929
     4ddd78edae67baef.a8bd267e5042e7ba.c9774b23271e5339.2ec6276ef8b76987
@@ -34689,11 +34689,11 @@
   after
     72396654c54127c8.9077657410a45763.1f7b6b5117c0d047.94d6f09516a8b929
     4ddd78edae67baef.a8bd267e5042e7ba.c9774b23271e5339.2ec6276ef8b76987
-    efa98b035f683962.7f67f8bbc02766c2.0c752e3eb090a4a0.1ab431047c07a981
+    4ddd78edc54127c8.a8bd267e10a45763.1f7b6b5117c0d047.94d6f095f8b76987
     34681984f350604f.73c2d897fce00d28.c3418f8cce237fab.b4ee0bc33e24b5c3
     58beb017dc9bc8f8
 
-VDPPS_128_3of4(reg)
+VBLENDVPD_128(reg)
   before
     62711c6ceff71fcd.f8e7a05b8629eddf.de1bc17fa1f81b97.cca7eafa9fe2a284
     2d534b2f15c5f5ed.16f39b7435019a41.1dbcb0dd4afbcabd.0273bb753cd9c757
@@ -34701,12 +34701,12 @@
     7bd4e4ab09e412c0.d5dcdd1c55dd4625.88088caf1af4fed7.646cb03e50a10a9e
     4931cc65fe899f69
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.8df29f1e94765743.0273bb753cd9c757
     2d534b2f15c5f5ed.16f39b7435019a41.1dbcb0dd4afbcabd.0273bb753cd9c757
     17b03acaea908805.6c5686bb1be4239f.8df29f1e94765743.41707ee7c315ab51
     7bd4e4ab09e412c0.d5dcdd1c55dd4625.88088caf1af4fed7.646cb03e50a10a9e
     4931cc65fe899f69
-VDPPS_128_3of4(mem)
+VBLENDVPD_128(mem)
   before
     cb8c4e47e9da27df.b50a453c0e4dd0cc.2d531d84fef8bd00.6b4c72fb7901fb25
     c549b3d22e9f5e2c.21a059eb9658fdd2.4f86c1dd3341455c.93094d6d4c2a89d9
@@ -34716,11 +34716,11 @@
   after
     cb8c4e47e9da27df.b50a453c0e4dd0cc.2d531d84fef8bd00.6b4c72fb7901fb25
     c549b3d22e9f5e2c.21a059eb9658fdd2.4f86c1dd3341455c.93094d6d4c2a89d9
-    153475f1e9e4007b.1ae01c233d90d681.194045150fc59a64.5a8a197330fae59e
+    0000000000000000.0000000000000000.4f86c1dd3341455c.93094d6d4c2a89d9
     9519129034b6c8f8.fe178b509e829783.654e2516af8f7745.1d1cd378c0fd4a20
     380b75e899c0f60d
 
-VDPPS_128_3of4(reg)
+VBLENDVPD_128(reg)
   before
     07a3fd2f56ce230e.23c3059c2e2073d1.2891a1de55b97c84.117cddce2eab9a2b
     e62f67b993b30dd2.99ffcbfff12fbd30.f39a5a39ffc1c131.f796ea28a826bc41
@@ -34728,12 +34728,12 @@
     4457cd4700340c4d.b15ebc7e43681c31.e088a6079a76593e.e5bef0710067f4af
     a563e1391544815e
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.bd7db2cd3727a136.f568c70f3a0b9cb3
     e62f67b993b30dd2.99ffcbfff12fbd30.f39a5a39ffc1c131.f796ea28a826bc41
     31fdadf3edfcf203.d59adea699ed6141.bd7db2cd3727a136.f568c70f3a0b9cb3
     4457cd4700340c4d.b15ebc7e43681c31.e088a6079a76593e.e5bef0710067f4af
     a563e1391544815e
-VDPPS_128_3of4(mem)
+VBLENDVPD_128(mem)
   before
     0f24175395b1ffef.7b8ac12367e8985e.0b17e0710aacaa2c.ba053151c33a24f6
     00cd0dac9db7298c.32e288f1bea3d2df.bd93c66d0bc4c75d.a5414f194fff3f0a
@@ -34743,11 +34743,11 @@
   after
     0f24175395b1ffef.7b8ac12367e8985e.0b17e0710aacaa2c.ba053151c33a24f6
     00cd0dac9db7298c.32e288f1bea3d2df.bd93c66d0bc4c75d.a5414f194fff3f0a
-    552a3e2e4964bd62.c5ab1b1fa2f1f57f.a49dea5d61bc2ef1.ff88fcc9d952e625
+    0000000000000000.0000000000000000.0b17e0710aacaa2c.a5414f194fff3f0a
     e80729c6b3c3759c.90317718af5e3ee8.9d00c92d28a09c13.222634cffebf55f3
     6b67f49659d0c822
 
-VDPPS_128_3of4(reg)
+VBLENDVPD_128(reg)
   before
     3796378a86137a5b.96304761fae10d67.efc099477f77e9c6.8289dec97d7dcdf0
     e000f9172214a84d.3b7016ea38c842ee.3ea37c1ab1c731c6.3004a51d7c5e7cb4
@@ -34755,12 +34755,12 @@
     3db6ebac167c6707.db69b4750a2773e3.1c98765aa53d8cdc.5700399de65e489f
     8819ffa18994db1f
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.3ea37c1ab1c731c6.3004a51d7c5e7cb4
     e000f9172214a84d.3b7016ea38c842ee.3ea37c1ab1c731c6.3004a51d7c5e7cb4
     c3f236a9c95d8da2.b395114c8987d15e.d9271cfcdedb5494.833d9a154050678a
     3db6ebac167c6707.db69b4750a2773e3.1c98765aa53d8cdc.5700399de65e489f
     8819ffa18994db1f
-VDPPS_128_3of4(mem)
+VBLENDVPD_128(mem)
   before
     f353670e45ffde35.a898128ca5fd7027.8db97b50d6b6e7a8.6242849e9f7c1548
     727bedce37aa0b0d.61e6a9b6136ae4af.a651e2c90a3fe7da.097144356b212d87
@@ -34770,11 +34770,11 @@
   after
     f353670e45ffde35.a898128ca5fd7027.8db97b50d6b6e7a8.6242849e9f7c1548
     727bedce37aa0b0d.61e6a9b6136ae4af.a651e2c90a3fe7da.097144356b212d87
-    e25e0dcf7aa11ed4.c4ebab94fc51014a.02fd66ccc1cf30a4.6c71b18ca2ba0e43
+    0000000000000000.0000000000000000.a651e2c90a3fe7da.6242849e9f7c1548
     1fc644fc2bf0d5b6.2df21594fa3e01a5.7d88824517717e33.e68dc70de2d2f529
     d5138326c7f61de4
 
-VDPPS_128_4of4(reg)
+VBLENDVPD_256(reg)
   before
     944de041ecb1c421.057f0d4065a4eadf.f948e120acbc216c.f3bfb22029318cb3
     7e88d9ccee8f238c.7057e48945c91a79.82390da6ac579d4a.406f734a131c174f
@@ -34782,12 +34782,12 @@
     473095dff6e50199.4490acd76592bab7.3e1c724d071597fd.cf659437dca0938d
     c844edd2f452fd87
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    7e88d9ccee8f238c.7057e48945c91a79.82390da6ac579d4a.40623fadf03ddb34
     7e88d9ccee8f238c.7057e48945c91a79.82390da6ac579d4a.406f734a131c174f
     f1106d32681c79d0.3b1945c2e76921b3.25119491969bb0ec.40623fadf03ddb34
     473095dff6e50199.4490acd76592bab7.3e1c724d071597fd.cf659437dca0938d
     c844edd2f452fd87
-VDPPS_128_4of4(mem)
+VBLENDVPD_256(mem)
   before
     09cac66c545ed24e.de364f3f3576f695.668996b5dd50a2b2.29a6a4469a508e2a
     6dc59cf017d0d10d.106c95bec059956d.7dd07e466bad95cf.42fa25e8ebd8d01f
@@ -34797,11 +34797,11 @@
   after
     09cac66c545ed24e.de364f3f3576f695.668996b5dd50a2b2.29a6a4469a508e2a
     6dc59cf017d0d10d.106c95bec059956d.7dd07e466bad95cf.42fa25e8ebd8d01f
-    d0ffea4a59b5b5f0.3a1f65c9341c19d0.6531e0772ab74f3b.e466f09f983a9a87
+    6dc59cf017d0d10d.de364f3f3576f695.668996b5dd50a2b2.42fa25e8ebd8d01f
     0e452c6637183925.b99cbbca2d4bc068.fa783835377a8b22.6d3404d83a01280f
     38b15afd6fbab662
 
-VDPPS_128_4of4(reg)
+VBLENDVPD_256(reg)
   before
     a128f07bd3f07f2d.0263de30cc0519d6.e72c912e4570c4e2.1770036aad0006af
     04e7c0bf012fc11b.8a257c943589132f.211ee5621b1961e9.9ae7bc04a8577b0f
@@ -34809,12 +34809,12 @@
     276904462cf99a13.c2c46ddbf183408c.2a54f4e66b255a50.3e7de813a0a647f6
     18355361d4b615d5
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    04e7c0bf012fc11b.8157837e8dafe15d.211ee5621b1961e9.9ae7bc04a8577b0f
     04e7c0bf012fc11b.8a257c943589132f.211ee5621b1961e9.9ae7bc04a8577b0f
     bd39c8349503b5da.8157837e8dafe15d.c4bdb2d048d2d52a.5ea7dfee458ba86d
     276904462cf99a13.c2c46ddbf183408c.2a54f4e66b255a50.3e7de813a0a647f6
     18355361d4b615d5
-VDPPS_128_4of4(mem)
+VBLENDVPD_256(mem)
   before
     c69b9dc3fdc7cd38.a0c46e60629caa75.2b3ab8957c12ece7.b031a70f1da02d08
     267b412638e42d48.839604f0d17922aa.9683e09a4b67a09b.b29ec8b7fccf89fe
@@ -34824,11 +34824,11 @@
   after
     c69b9dc3fdc7cd38.a0c46e60629caa75.2b3ab8957c12ece7.b031a70f1da02d08
     267b412638e42d48.839604f0d17922aa.9683e09a4b67a09b.b29ec8b7fccf89fe
-    12a0bb74a019ef33.2b2bc161181b3e5e.e16c5fd4798e1ad4.8de8514aa43cacdd
+    267b412638e42d48.a0c46e60629caa75.2b3ab8957c12ece7.b031a70f1da02d08
     68d7879a5272cf25.f6cfa120d10e393e.e6c1b331229413bd.9b5a4034b075d052
     394291e1bd063208
 
-VDPPS_128_4of4(reg)
+VBLENDVPD_256(reg)
   before
     c3eb3ebe667a0dac.02ed21846afc8b4a.3ecea09798df50f6.834d579c64844a83
     95a04535475d9eea.beac061f02c2ddcd.6173ba330a18bf31.92dec701586b7951
@@ -34836,12 +34836,12 @@
     81614ea524a1d2e2.07579e142833359f.a4e2318b5df894e3.7a3bfc69cb4bb2b7
     0a9fb844825c33a7
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0baea1b3fd3b216d.beac061f02c2ddcd.ba0bec61c248c29c.92dec701586b7951
     95a04535475d9eea.beac061f02c2ddcd.6173ba330a18bf31.92dec701586b7951
     0baea1b3fd3b216d.76e0b15539d182db.ba0bec61c248c29c.f13f7f4c1c545d54
     81614ea524a1d2e2.07579e142833359f.a4e2318b5df894e3.7a3bfc69cb4bb2b7
     0a9fb844825c33a7
-VDPPS_128_4of4(mem)
+VBLENDVPD_256(mem)
   before
     7e3731ca5d949e50.53054876571aecf4.4edc4a47edf7b446.7c44851f76b672b1
     b0cfe3e577feaddd.dde68b913232ac50.253a2fdaa426b9fb.9f7de587a90e98b2
@@ -34851,11 +34851,11 @@
   after
     7e3731ca5d949e50.53054876571aecf4.4edc4a47edf7b446.7c44851f76b672b1
     b0cfe3e577feaddd.dde68b913232ac50.253a2fdaa426b9fb.9f7de587a90e98b2
-    7d324883eca71c7b.7a4f146452764ea2.693ecbb968ce01eb.67d94b31948a4194
+    7e3731ca5d949e50.53054876571aecf4.4edc4a47edf7b446.9f7de587a90e98b2
     c12ede8ed99aa855.888ede5a52710e95.f7b499d056fa4742.32a3b588d0b8aa00
     5a291ef8fb240fa5
 
-VDPPS_256_1of4(reg)
+VPMULDQ_128(reg)
   before
     3cb583edb158ac2d.588d1ff459e30e98.62ede5dfcfb027d6.a968150b89b7482b
     3594ded38de2bc45.1f1c8aa0898e0770.64b9265f64bed610.5c26bc561d0fc0d3
@@ -34863,12 +34863,12 @@
     d77a6b23282628d3.a8fac679673ca98d.4fc842014878e521.35ef77cddbc6040e
     139284d03c3c48fa
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.dfca5b1cca181f00.0557dea397d2443f
     3594ded38de2bc45.1f1c8aa0898e0770.64b9265f64bed610.5c26bc561d0fc0d3
     9f122d172b4e7c98.f0a7987d84a85208.ea3e9b47ae2757f0.ecba089e2f116b65
     d77a6b23282628d3.a8fac679673ca98d.4fc842014878e521.35ef77cddbc6040e
     139284d03c3c48fa
-VDPPS_256_1of4(mem)
+VPMULDQ_128(mem)
   before
     6270ac946e7ef354.391a94651ff8fca1.23e191804d57c92a.f1a316facf3bbd51
     fe5369048e99c049.213ca447ad5033af.3d28747c52046e0c.2b1a139fdeff1b29
@@ -34878,11 +34878,11 @@
   after
     6270ac946e7ef354.391a94651ff8fca1.23e191804d57c92a.f1a316facf3bbd51
     fe5369048e99c049.213ca447ad5033af.3d28747c52046e0c.2b1a139fdeff1b29
-    c307390cb7986d04.eb2e98376eb80aa9.d29aeb5a944f535f.587a365a114d3a58
+    0000000000000000.0000000000000000.18c7750df13579f8.064978304f37dcf9
     8d5a97970687b4b2.f33a6b9ffcbfbc3a.be0473062c45354e.d6107a9905b35888
     ff26dbc756bcaf65
 
-VDPPS_256_1of4(reg)
+VPMULDQ_128(reg)
   before
     310855509ff57b9c.3817ff939673517f.95ad19edf6ee870f.dd32866d38f1d006
     c604e4a07ce9fad9.a009eeec84670296.2dd29e8cf5d3a5d3.0bf0a279d45fdfb2
@@ -34890,12 +34890,12 @@
     8d7632456533fc13.17bf4d60e8988a54.af661e6d78ecccdb.034ce23529b34c99
     8681ffbb1bb0222b
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.04181c3a56829f09.fb4b817a6dfe394e
     c604e4a07ce9fad9.a009eeec84670296.2dd29e8cf5d3a5d3.0bf0a279d45fdfb2
     1c6585238a2466c7.a1fdde8ceb6f8124.17f7f7e898f95233.230a42181b9c207f
     8d7632456533fc13.17bf4d60e8988a54.af661e6d78ecccdb.034ce23529b34c99
     8681ffbb1bb0222b
-VDPPS_256_1of4(mem)
+VPMULDQ_128(mem)
   before
     887613980ca05d62.7784ea72a8a1f768.dd1bb65496eddb53.516d118833394d76
     e5f89cb7198eb869.34dba617effa9573.d1dd9655117a2e4d.5956cba3656b12b0
@@ -34905,11 +34905,11 @@
   after
     887613980ca05d62.7784ea72a8a1f768.dd1bb65496eddb53.516d118833394d76
     e5f89cb7198eb869.34dba617effa9573.d1dd9655117a2e4d.5956cba3656b12b0
-    78d116045d86ef6d.21c7639ed7cb10e0.ced0674d774c406d.236e492ba90f5737
+    0000000000000000.0000000000000000.f8d3a5ea2b81e1f7.144b08402d298d20
     1fcdfb6cf595c099.9b941e75fb9fa55a.b0c2a72ae16ecddf.0b01858d9caf57b5
     6d5a7d33d9da4fd6
 
-VDPPS_256_1of4(reg)
+VPMULDQ_128(reg)
   before
     a4c72c8bfc197b47.b5bac8d9fcc6e51b.fc8ed206f8028f8e.527dd1d76dec90d1
     0e928e00a2fa17b4.1563fa388f251b1c.a1007bbf69810b28.92ce614037d3466d
@@ -34917,12 +34917,12 @@
     e7765cf1e5d08d30.a7177b7dc79fa951.287f9d561900a93b.5862a4f6f20a7b54
     963d4f1b1c7171f8
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.f79d60a2cd2879f8.13aa7433baab27f3
     0e928e00a2fa17b4.1563fa388f251b1c.a1007bbf69810b28.92ce614037d3466d
     0609a0fe67085ec9.1d930c76c9bf1ecb.e637150beba755d3.4a81d3505a2eabdf
     e7765cf1e5d08d30.a7177b7dc79fa951.287f9d561900a93b.5862a4f6f20a7b54
     963d4f1b1c7171f8
-VDPPS_256_1of4(mem)
+VPMULDQ_128(mem)
   before
     e2dd50acf3714af6.0f26c045bbdde098.91bbc13ba4d27add.c1240e0c9019420e
     160f23959416c27b.d964c76683bb92ab.b54b5c9b7d624a99.0e726499eb7d5df5
@@ -34932,11 +34932,11 @@
   after
     e2dd50acf3714af6.0f26c045bbdde098.91bbc13ba4d27add.c1240e0c9019420e
     160f23959416c27b.d964c76683bb92ab.b54b5c9b7d624a99.0e726499eb7d5df5
-    10a045c31a6b94b3.a07e6ec0d9f6e016.f193c7896d5dd8b2.6bb59b69c6b8369f
+    0000000000000000.0000000000000000.d357c3ff4ae95015.08f720d830014d66
     aa5a3120a27c7dc9.c2beafbf5a1b0684.1f5f7ef090cfde53.3438afe8be5708b6
     c5499d836fe511e6
 
-VDPPS_256_2of4(reg)
+VCMPPD_256_0x4(reg)
   before
     7a3260a474ef8add.c209629a475539e9.997288d0a1b640a2.1d7afdbf03c319a9
     af40f4b969ffb244.327b571b26038441.83e4f45d4b51c91b.c5b1c0dfe24545df
@@ -34944,12 +34944,12 @@
     09fb806b9567fb19.8ed476e7000cb543.fc3475a035bcbbd1.87a304c551245f9e
     58f67c641a99c57e
   after
-    ff80000000000000.ff80000000000000.ff4d94d100000000.ff4d94d100000000
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     af40f4b969ffb244.327b571b26038441.83e4f45d4b51c91b.c5b1c0dfe24545df
     c0bf552deba3c4ca.d77b89915a9119fa.da61efd4f37ade9d.f4d0443d48611d22
     09fb806b9567fb19.8ed476e7000cb543.fc3475a035bcbbd1.87a304c551245f9e
     58f67c641a99c57e
-VDPPS_256_2of4(mem)
+VCMPPD_256_0x4(mem)
   before
     44952904becd0bef.e63f6fe104d693dd.31539809337f1446.43ab832dafa49b65
     274b85935acbee1d.b3d920fad47ccac3.9dc46de30ff6f130.0c1114e6fabdbb05
@@ -34959,11 +34959,11 @@
   after
     44952904becd0bef.e63f6fe104d693dd.31539809337f1446.43ab832dafa49b65
     274b85935acbee1d.b3d920fad47ccac3.9dc46de30ff6f130.0c1114e6fabdbb05
-    dee60efb099f2b33.cb138e229fe5da77.aef37161b17d0a2c.b4b12439b493575d
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     43303f2ae8557b5d.8c3ab6c5049e00a4.40ac1e6f35211967.95d8af9279b3ab18
     0cd2b25be4a8f2e2
 
-VDPPS_256_2of4(reg)
+VCMPPD_256_0x4(reg)
   before
     76eb270191fe6969.33f6950b12fa9dc8.519a924f9c3278f7.30bbf2fab6edda0c
     2d6f0cf01d424c57.8a048a8aa49a4ba0.767f202d052e7d1c.58eb68ec50ee0b48
@@ -34971,12 +34971,12 @@
     f5e7145a40c24419.dd2746126ef73e46.4f074091b98b218a.c3e22ab942bca734
     be406f6cd1a28c3c
   after
-    1e668c7c00000000.1e668c7c00000000.31a318d100000000.31a318d100000000
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     2d6f0cf01d424c57.8a048a8aa49a4ba0.767f202d052e7d1c.58eb68ec50ee0b48
     8ea95d9523ffd658.24269c93b93f4211.56345bc9db1d4cbe.9509fc33202f6647
     f5e7145a40c24419.dd2746126ef73e46.4f074091b98b218a.c3e22ab942bca734
     be406f6cd1a28c3c
-VDPPS_256_2of4(mem)
+VCMPPD_256_0x4(mem)
   before
     62ef4537e9eccf8a.be732fad1015d246.91d504f3decdfa6b.bc42c9ef3c05382b
     8bbd2a06a7a62d4b.459aa8f92d86bc8a.1cfa522325ce33ad.f832f451ff15cc4e
@@ -34986,11 +34986,11 @@
   after
     62ef4537e9eccf8a.be732fad1015d246.91d504f3decdfa6b.bc42c9ef3c05382b
     8bbd2a06a7a62d4b.459aa8f92d86bc8a.1cfa522325ce33ad.f832f451ff15cc4e
-    15759ac526dd62aa.e6a87daa36a13d92.5a63ad8c6005a538.6123bc229e4a1a9e
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     dbe20f60839c29d5.fde9aa2cc4f19209.27dc901cab7e0b37.51611dceb62d5ec9
     263813c1e34cd378
 
-VDPPS_256_2of4(reg)
+VCMPPD_256_0x4(reg)
   before
     3af39b67c033b65a.bbd107c3d9ef3ff5.e6a829eb7602f79c.5f3177bd214623d7
     ebe0b02ce96c4318.900efdda44e36039.fd33f853e560a8f7.dd2dde5dde68a644
@@ -34998,12 +34998,12 @@
     8f7b71c491094adf.89a2d3d5ccdbb2d7.25d873ce7035dcb2.204e1d479febe533
     9c0aed69db64170d
   after
-    7f80000000000000.7f80000000000000.fff053a900000000.fff053a900000000
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     ebe0b02ce96c4318.900efdda44e36039.fd33f853e560a8f7.dd2dde5dde68a644
     93494e7cfb85b661.36656d91e28348cb.9ed412d0af98e0c5.7f9e42e7fff053a9
     8f7b71c491094adf.89a2d3d5ccdbb2d7.25d873ce7035dcb2.204e1d479febe533
     9c0aed69db64170d
-VDPPS_256_2of4(mem)
+VCMPPD_256_0x4(mem)
   before
     ce9e2d39cf67a564.3cc2156e48853c3f.6490ac9020f85b8a.ee8b17bac3c4d86c
     94d65aa395014d64.f46a37e8bc84c82c.a5fd72b0fae5fe10.5539fbfe45cf0f9d
@@ -35013,11 +35013,11 @@
   after
     ce9e2d39cf67a564.3cc2156e48853c3f.6490ac9020f85b8a.ee8b17bac3c4d86c
     94d65aa395014d64.f46a37e8bc84c82c.a5fd72b0fae5fe10.5539fbfe45cf0f9d
-    c97eee934c3dc938.14bed29c87922953.27b3a32075ae5994.b52e1a0891e5bef1
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     486167f60d27d60d.f90ce2f8483c9c5f.c57fbaccad602643.6cb57042438f2115
     d51cf91af85b73b5
 
-VDPPS_256_3of4(reg)
+VCMPPS_128_0x4(reg)
   before
     4cadb1fb4bd4f27d.ef4d40b6f6cc300e.fd9e6367980d5dfd.5d2d34a0bf062249
     2cb59551d987d817.980cf5c123379268.7dc152551591a8d9.ca898b88c7ac08d1
@@ -35025,12 +35025,12 @@
     9c5ace0c15c8cb78.6436e464b79061d5.61ea675e05e4caf9.927ac544262a8619
     a5a7a0f0b6199431
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     2cb59551d987d817.980cf5c123379268.7dc152551591a8d9.ca898b88c7ac08d1
     d380a0883eff6132.216b0302af75ba46.d5c1aa2e5b55b89e.e75f3d70df5f9608
     9c5ace0c15c8cb78.6436e464b79061d5.61ea675e05e4caf9.927ac544262a8619
     a5a7a0f0b6199431
-VDPPS_256_3of4(mem)
+VCMPPS_128_0x4(mem)
   before
     fdb34861ab397e7b.e28e1b49fa6e5096.3f3916d556974641.7d888551b0cb1a95
     77683b812295fe24.036a84ac8a7e2d37.8c3f1440a89323b5.85e60073f794e41f
@@ -35040,11 +35040,11 @@
   after
     fdb34861ab397e7b.e28e1b49fa6e5096.3f3916d556974641.7d888551b0cb1a95
     77683b812295fe24.036a84ac8a7e2d37.8c3f1440a89323b5.85e60073f794e41f
-    ed92f43e363ad158.5938039f60849d08.29165b91ca92b55e.d552d53176cd6343
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     3dffef820433b242.42459690190adeb4.f08865b4d89fb868.c916fff5ca02d4ac
     bd7f7a2d8fbe7207
 
-VDPPS_256_3of4(reg)
+VCMPPS_128_0x4(reg)
   before
     0dd942435f8d7bff.417aa83ba78c5f0f.18dd39e9509e2ae9.be62b095edc6e7fe
     156f54a5d9fb2941.d6ce9c543b5192eb.384ce618a1cbbd50.7070b7212514004c
@@ -35052,12 +35052,12 @@
     bd8342fa35e66652.24342256a9517c7d.c7de53a50422ac6a.eb57eae67053dac3
     6dc90df7bb5c1444
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     156f54a5d9fb2941.d6ce9c543b5192eb.384ce618a1cbbd50.7070b7212514004c
     318faabe9795b979.d8c846b9de8f0801.ffdd9b88a91ed597.e07ef6429d94bd80
     bd8342fa35e66652.24342256a9517c7d.c7de53a50422ac6a.eb57eae67053dac3
     6dc90df7bb5c1444
-VDPPS_256_3of4(mem)
+VCMPPS_128_0x4(mem)
   before
     439edd6399bb282d.159918c5507b6d79.94deac17baa4ab8c.ee990adb4d637f75
     47a3d515277dcfaa.941b268b83df0a99.059260e82d93515a.ce5bbc96216e8963
@@ -35067,11 +35067,11 @@
   after
     439edd6399bb282d.159918c5507b6d79.94deac17baa4ab8c.ee990adb4d637f75
     47a3d515277dcfaa.941b268b83df0a99.059260e82d93515a.ce5bbc96216e8963
-    56a472f980adc8e9.98566ab86b9e795f.531cbbb61d2a2a13.c47065421bce08e0
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     4c6d2efbc157cd13.7c96deb9a344f576.5a47386ba676f1e2.2c24024bd70f369a
     63c38e1ef2be503a
 
-VDPPS_256_3of4(reg)
+VCMPPS_128_0x4(reg)
   before
     c39905250766916f.05ca870705879b57.9c2680f8c85ebc8c.f6e053f5e58163f3
     a9f164ceb39436e3.5d87f809694aeedf.53544ce37577074a.03b4893ef55a3c73
@@ -35079,12 +35079,12 @@
     775ac6b23eae9c3a.5a4f129ffeb7116d.fab54e69d8d82074.e03732c2fb9f1270
     68809ed427258744
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     a9f164ceb39436e3.5d87f809694aeedf.53544ce37577074a.03b4893ef55a3c73
     7118a58392d27b43.306ffded08ac81d7.ff6a3ce4461c155f.5d8d5434f30a378e
     775ac6b23eae9c3a.5a4f129ffeb7116d.fab54e69d8d82074.e03732c2fb9f1270
     68809ed427258744
-VDPPS_256_3of4(mem)
+VCMPPS_128_0x4(mem)
   before
     d133145696a65236.1703c2c656b4d475.b7f3b40c68795aca.a2817dddc7376538
     f71b103461303173.ad5f952b736e609f.23275e1e62fd171d.521ac5acaec62055
@@ -35094,11 +35094,11 @@
   after
     d133145696a65236.1703c2c656b4d475.b7f3b40c68795aca.a2817dddc7376538
     f71b103461303173.ad5f952b736e609f.23275e1e62fd171d.521ac5acaec62055
-    b6050f5aa6cede27.95ba3c4d336b7c65.7ab78cc307500690.65cc224229108c78
+    0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff
     eabd8cb4818d157d.2b5fb19832346372.976fbae6737de04f.39e2910bd5a1e74c
     28aa0d734e066a7e
 
-VDPPS_256_4of4(reg)
+VCMPPS_256_0x4(reg)
   before
     8f6e92e62fc954b9.6e0f032f0d7894a2.cb9bf2780b575374.581a6573c3906487
     cb7b1cd01479dfaa.20c7f0b5679c15c2.d1bafa5a5b5f8614.9886075513964d64
@@ -35106,12 +35106,12 @@
     2da030ba5cc9cb5d.7b981e96f2bb10a1.7ed150cfce4fa7e5.04cc25ce20a83bbb
     e93f993b16cdba8e
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     cb7b1cd01479dfaa.20c7f0b5679c15c2.d1bafa5a5b5f8614.9886075513964d64
     361da79e9a9f48fd.dbb0d034aa035508.9908c6a8bdd83801.337d1e7a7d9a5611
     2da030ba5cc9cb5d.7b981e96f2bb10a1.7ed150cfce4fa7e5.04cc25ce20a83bbb
     e93f993b16cdba8e
-VDPPS_256_4of4(mem)
+VCMPPS_256_0x4(mem)
   before
     bda1f4ae7b148db5.0d4fb292f783a377.db4956c95cd001b8.de61963c294f0d6c
     5bc0b4136b8a715d.3078299106570ef7.d990f4b8044ce57a.1404935a6a65a743
@@ -35121,11 +35121,11 @@
   after
     bda1f4ae7b148db5.0d4fb292f783a377.db4956c95cd001b8.de61963c294f0d6c
     5bc0b4136b8a715d.3078299106570ef7.d990f4b8044ce57a.1404935a6a65a743
-    a1665457043922b1.f365912326d44688.5039744f053d7813.7c0543952e1cb016
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     696050645f2f5bde.b263e7b3f28387d6.1b10537a7baf76ae.71b1a35810006590
     5154ad11ad9e025e
 
-VDPPS_256_4of4(reg)
+VCMPPS_256_0x4(reg)
   before
     773a5f2ba180c32c.917a25289a78da0f.c9be26af06f20f8e.18e10c2583ad9a77
     3eafb4138635e3a5.f3804d8ed11f5871.95c24a83ffac185c.21771b3c3943a19c
@@ -35133,12 +35133,12 @@
     237538f89a41334a.d9808bf0a1b74877.b7f4315e0f329fe9.cb262c5f1c6847a4
     23d62542810f5ee0
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     3eafb4138635e3a5.f3804d8ed11f5871.95c24a83ffac185c.21771b3c3943a19c
     04fea933fb46a076.6d3e46821f309430.70ba4f99793ddeec.149ffcabb77d4747
     237538f89a41334a.d9808bf0a1b74877.b7f4315e0f329fe9.cb262c5f1c6847a4
     23d62542810f5ee0
-VDPPS_256_4of4(mem)
+VCMPPS_256_0x4(mem)
   before
     f97c6542057e4827.f95e5fcfffb1dbce.151199c472c13173.c6baed3e5e1695ff
     27e36749c1c2c1a4.e0061922c623d2ad.fbbeeaeaae590b50.f95a7ea60175fddb
@@ -35148,11 +35148,11 @@
   after
     f97c6542057e4827.f95e5fcfffb1dbce.151199c472c13173.c6baed3e5e1695ff
     27e36749c1c2c1a4.e0061922c623d2ad.fbbeeaeaae590b50.f95a7ea60175fddb
-    8ad9a845d3e68484.36b9625f8d225594.6854fc4e728c9139.ac1ee00194dc1329
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     ff28a22157f74ef2.55c337f0ed3aa02f.399c4adcd964815a.3b520fbab4d61295
     0244083ffcf037ca
 
-VDPPS_256_4of4(reg)
+VCMPPS_256_0x4(reg)
   before
     5c3fc6fb09b5be74.609dd3c96800db1b.9b70924384f8ef29.4865508100f095e1
     a78e455a76b1e240.8a04b629230de62b.620b71c3eee77d2f.727a8b27033989f8
@@ -35160,12 +35160,12 @@
     7d5c76b1e27ff5ed.aad883c104646aae.e73fa8faa989480e.88b78c2b0a370587
     2b774b5f46040358
   after
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     a78e455a76b1e240.8a04b629230de62b.620b71c3eee77d2f.727a8b27033989f8
     3e7e81c8e070e1da.5929c72da32b2d4d.07e1cfdcc69387ed.93a675bcfc4d1acb
     7d5c76b1e27ff5ed.aad883c104646aae.e73fa8faa989480e.88b78c2b0a370587
     2b774b5f46040358
-VDPPS_256_4of4(mem)
+VCMPPS_256_0x4(mem)
   before
     59b32e46cfbfd369.c071218119695a26.57dd65d263c75979.5c6ff9893154fd3e
     ee37b2cbbe742fe7.620c7da420bb4e31.3d03e84adc5db8db.c3bebdf6fd80e32b
@@ -35175,11 +35175,11 @@
   after
     59b32e46cfbfd369.c071218119695a26.57dd65d263c75979.5c6ff9893154fd3e
     ee37b2cbbe742fe7.620c7da420bb4e31.3d03e84adc5db8db.c3bebdf6fd80e32b
-    c6cf52da312fd4fd.c178868794000bb9.38188b178a344100.7877f0aba79a337e
+    ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff
     bd468a5f44fd7ed8.3800389410c4ce6b.24e6c7238957b013.d8e88e16cb2d2ce6
     3d5b93a106c5080d
 
-VHADDPS_128(reg)
+VPCMPGTB_128(reg)
   before
     041dfcbaf3ef049f.af6ad64712eae8a4.22f28f393193d2f2.dd3a195cf6d3c341
     897bc4cb2f365c4a.7805b27cb800cf8c.dd9888e192fa54fb.3fdffeadecb334b5
@@ -35187,12 +35187,12 @@
     3d35618a024c0e95.ffd30c81f9dd0362.32334de985bec241.6e516e47e5d02322
     f3b4f26820251872
   after
-    0000000000000000.0000000000000000.cf85903126a3f102.dd9888e1ecb334b5
+    0000000000000000.0000000000000000.ff00000000ffff00.ffffff00ff00ffff
     897bc4cb2f365c4a.7805b27cb800cf8c.dd9888e192fa54fb.3fdffeadecb334b5
     28bee74255274bb7.f4e49beb514defbd.c33f1ef7cf859031.26a3f1028803c09c
     3d35618a024c0e95.ffd30c81f9dd0362.32334de985bec241.6e516e47e5d02322
     f3b4f26820251872
-VHADDPS_128(mem)
+VPCMPGTB_128(mem)
   before
     9099f851540e5cb9.242b2e0fd133e18e.759e8129cdbac9a8.84bf1122503326d7
     23ccfbee9e98ab22.39eb4b3d5f68ff4e.311076cee9f2faba.1731670ecb6ff79e
@@ -35202,11 +35202,11 @@
   after
     9099f851540e5cb9.242b2e0fd133e18e.759e8129cdbac9a8.84bf1122503326d7
     23ccfbee9e98ab22.39eb4b3d5f68ff4e.311076cee9f2faba.1731670ecb6ff79e
-    0000000000000000.0000000000000000.759e8129503326d7.e9f2fabacb6ff79e
+    0000000000000000.0000000000000000.00ffff00ffffffff.ffffff0000ff0000
     984ceef5e2bc590d.5dfd624526e90fd6.f01dd1c466a195f5.6cf3b6b0426ed272
     e6dba73d764855d6
 
-VHADDPS_128(reg)
+VPCMPGTB_128(reg)
   before
     10d81a2ecb1a351c.3130d437146f30e6.23e654f6974d79f6.aa4f2fec00307576
     473509eddc6faeef.3093a9dccbf20192.88ca8601362f1e8d.1a59fdc2514ab173
@@ -35214,12 +35214,12 @@
     4743508aa4d35fee.cc010d043b998511.9cb297d1719b0cd1.9125da298a4b3192
     4e7ee191aa4cec0d
   after
-    0000000000000000.0000000000000000.e7f4f3d076f90718.362f1e8d514ab173
+    0000000000000000.0000000000000000.000000ffffff0000.00ffff0000ff00ff
     473509eddc6faeef.3093a9dccbf20192.88ca8601362f1e8d.1a59fdc2514ab173
     e54072e846d3fefc.703fe8d224518a3c.e7f4f3d0a01a3c47.1e07b83276f90718
     4743508aa4d35fee.cc010d043b998511.9cb297d1719b0cd1.9125da298a4b3192
     4e7ee191aa4cec0d
-VHADDPS_128(mem)
+VPCMPGTB_128(mem)
   before
     33e04857f106f4b4.c98ca03e93fa0e72.22a5955e2bd5af3c.034e6e6f443dcdd7
     1b158b687b8804b4.c8655c72aed44634.4df7facc1011c3ea.77157416b58cb904
@@ -35229,11 +35229,11 @@
   after
     33e04857f106f4b4.c98ca03e93fa0e72.22a5955e2bd5af3c.034e6e6f443dcdd7
     1b158b687b8804b4.c8655c72aed44634.4df7facc1011c3ea.77157416b58cb904
-    0000000000000000.0000000000000000.2bd5af65443dcdd7.4df7facc77157416
+    0000000000000000.0000000000000000.ffffff0000ffff00.ff00ff00000000ff
     632b9617cb0d2f6e.a8fa0d07dad34520.91d450942bbb9d7e.fb54ff2fe4620586
     c1647b79d802dc32
 
-VHADDPS_128(reg)
+VPCMPGTB_128(reg)
   before
     06cf167cdc7ecfb6.7ba4568ec829c27f.424df941220f83a2.62f738c69941d9bc
     24e0cda489641abd.0620e2ff793b4d9a.c86243a9082f3a12.79f9efbd6cf7f12d
@@ -35241,12 +35241,12 @@
     5f277c14549ca706.e6554f7f64733e98.08fdddb71749066b.e4c5b7a6b323a055
     f227c0715fb2af66
   after
-    0000000000000000.0000000000000000.25bea71cc1e99ffc.c86243a979f9efbd
+    0000000000000000.0000000000000000.ffffff0000ffff00.ffff0000ffffffff
     24e0cda489641abd.0620e2ff793b4d9a.c86243a9082f3a12.79f9efbd6cf7f12d
     79e49b5e7e3ff9f4.e16db756f9508de9.9683e5ac25bea71c.b0a4f063c1e99ffc
     5f277c14549ca706.e6554f7f64733e98.08fdddb71749066b.e4c5b7a6b323a055
     f227c0715fb2af66
-VHADDPS_128(mem)
+VPCMPGTB_128(mem)
   before
     b49887afe0a18a59.34f56c34aa0661a0.f2a52867d7b11bd4.7a1c2634795b93ac
     07e2894e53fdeb5a.529a67291909636e.e229bdf86e15e2c9.482cbc91e880898a
@@ -35256,11 +35256,11 @@
   after
     b49887afe0a18a59.34f56c34aa0661a0.f2a52867d7b11bd4.7a1c2634795b93ac
     07e2894e53fdeb5a.529a67291909636e.e229bdf86e15e2c9.482cbc91e880898a
-    0000000000000000.0000000000000000.f2a528677a530b1f.6e15e2c8e880898a
+    0000000000000000.0000000000000000.00ff0000ffff0000.00ff000000000000
     d1342a5c7c293139.dd987041b80c2d54.d9fc0bc9757f188c.684fc1985c34a3d0
     72f9271a98db3f8f
 
-VHADDPS_256(reg)
+VPCMPGTW_128(reg)
   before
     47c4ca2b51c6349b.ffd4c3a36b118e6e.018a753d1f236ec5.99e4bde01e9e00b2
     45fca637227fbfa2.2e7e85fbbc966262.df8275bf1004e719.ad2f1b525a13c241
@@ -35268,12 +35268,12 @@
     29e3fbf07e91864b.ff1f7989f1a55e35.3ab7570003516f1c.3c22cbf4fd31be49
     706016fc9bf1711a
   after
-    c7edb8aa3afeee4e.45fca637bc966262.d4cd6d31efaba10a.df8275bf5a13c241
+    0000000000000000.0000000000000000.ffffffff0000ffff.0000ffffffff0000
     45fca637227fbfa2.2e7e85fbbc966262.df8275bf1004e719.ad2f1b525a13c241
     c7edb8aaa8951c4e.3afeee4e8ac36940.d4cd6d31283ad3fc.efaba10a46eb1765
     29e3fbf07e91864b.ff1f7989f1a55e35.3ab7570003516f1c.3c22cbf4fd31be49
     706016fc9bf1711a
-VHADDPS_256(mem)
+VPCMPGTW_128(mem)
   before
     6733fd0e3e38ed03.c62a6b7640013a46.59afa2990e47fe6d.6e8c31983cd6f722
     fd66fb16ff11ee31.fc0d04a68c7074eb.2478e568fdb50513.cc97f6666f54a7bd
@@ -35283,11 +35283,11 @@
   after
     6733fd0e3e38ed03.c62a6b7640013a46.59afa2990e47fe6d.6e8c31983cd6f722
     fd66fb16ff11ee31.fc0d04a68c7074eb.2478e568fdb50513.cc97f6666f54a7bd
-    6733fd0ec62a6362.ff205de2fc0d04a6.59afa2996e8c3198.fdb505136f54a7bd
+    0000000000000000.0000000000000000.0000ffff0000ffff.00000000ffff0000
     761a32b951a96d0b.9fdba2b92b7d69e1.7de7abf8be27375b.77833250356c6d5c
     7bfba145001efbba
 
-VHADDPS_256(reg)
+VPCMPGTW_128(reg)
   before
     19daeb1f35faa25a.1134622b1981640f.c55d9f72b8329c8b.c3262590c942da55
     ad6b0d4a718a9ceb.bbde9944701ccf07.f2acb5873d16448e.eacfa9981559d36e
@@ -35295,12 +35295,12 @@
     27d8c5436cfc7b8a.ac1212173ec7f486.d5e01d72a09ee751.4b8dc0a8e2aebbab
     3d3b4b889a022027
   after
-    4f5c251773846c20.718a9ceb701ccf07.56b69f97ceadb3fc.f2acb587eacfa998
+    0000000000000000.0000000000000000.ffff00000000ffff.ffff0000ffff0000
     ad6b0d4a718a9ceb.bbde9944701ccf07.f2acb5873d16448e.eacfa9981559d36e
     93fc01324f5c2517.50e456ee73846c20.8413e16356b69f97.ceadb3fcbf79e0d1
     27d8c5436cfc7b8a.ac1212173ec7f486.d5e01d72a09ee751.4b8dc0a8e2aebbab
     3d3b4b889a022027
-VHADDPS_256(mem)
+VPCMPGTW_128(mem)
   before
     8083d0890583cd72.c54a54e963f5d8f2.aa334aaaecf12664.435d6720b7585969
     ef31cb953c3d7cb7.c89faa90d1d379f8.28157b93990cbde7.28d7bada3572308a
@@ -35310,11 +35310,11 @@
   after
     8083d0890583cd72.c54a54e963f5d8f2.aa334aaaecf12664.435d6720b7585969
     ef31cb953c3d7cb7.c89faa90d1d379f8.28157b93990cbde7.28d7bada3572308a
-    0583ac7e63f5d8f2.ef31cb95d1d37a20.ecf12664435d671f.28157b933572308a
+    0000000000000000.0000000000000000.ffffffff00000000.00000000ffff0000
     c6ee14828489d3e2.72229c927f6f7695.1147b517624b078a.cbf26c1dddf4019a
     402bc2803d7472e0
 
-VHADDPS_256(reg)
+VPCMPGTW_128(reg)
   before
     9d91129e768438e0.e4955a3bcc33f220.d0e82fc5f8454a82.3330b68ab6853402
     3e6f57e223ae9046.a0d207b051460407.04c07aa8583152bf.4508a00379e2b5cf
@@ -35322,12 +35322,12 @@
     bdc7b1914b86e6f1.5e3e827e85d4f187.5dda26333a78edd8.a5b91cb8be34a617
     ac29a6cc78408dea
   after
-    e080b6bdd57195cd.3e6f57e251460407.69f779a9c86e471d.583152bf79e2b5cf
+    0000000000000000.0000000000000000.0000ffffffffffff.ffff0000ffff0000
     3e6f57e223ae9046.a0d207b051460407.04c07aa8583152bf.4508a00379e2b5cf
     80128ebae080b6bd.d57195cd30cdc5c6.69f779a93abecaf8.219dee6fc86e471d
     bdc7b1914b86e6f1.5e3e827e85d4f187.5dda26333a78edd8.a5b91cb8be34a617
     ac29a6cc78408dea
-VHADDPS_256(mem)
+VPCMPGTW_128(mem)
   before
     11b90895119ebac2.52d8bed3fd4a5b8f.190548af6b684377.3bb37fb2f5ebf80c
     b235bf01a55be6ca.9b91b0ec945a5243.e091654cfe9478c1.5ecf7f9206a42740
@@ -35337,11 +35337,11 @@
   after
     11b90895119ebac2.52d8bed3fd4a5b8f.190548af6b684377.3bb37fb2f5ebf80c
     b235bf01a55be6ca.9b91b0ec945a5243.e091654cfe9478c1.5ecf7f9206a42740
-    122be1acfd4a5b8f.b235bf019b91b2a1.6b684377f5ebf80c.fe9478c15ecf7f92
+    0000000000000000.0000000000000000.0000ffff0000ffff.ffff0000ffffffff
     1321196f311f321c.b9303454e08db59c.062c927b9de57a15.e8ff64259d16df56
     05ab42b159e7e190
 
-VHADDPD_128(reg)
+VPMADDWD_128(reg)
   before
     d9cbb64ddd2df77a.8d28b449603fc9be.46acbd7accc79a98.1dd29ae4e122bf77
     bea9be67c2755cbf.b14b9475faed5140.f7011c280d7cef5a.b06ee86a4228d7e4
@@ -35349,12 +35349,12 @@
     2fd278c12538060d.6b161074e2252397.35664ac8fd89e0e0.beb74679cdbc6f8d
     f0fc4fdb2e626722
   after
-    0000000000000000.0000000000000000.287b4cc83f39f38e.f7011c280d7cef5a
+    0000000000000000.0000000000000000.0705b4bb0423b688.1f7bc5eae3221d8c
     bea9be67c2755cbf.b14b9475faed5140.f7011c280d7cef5a.b06ee86a4228d7e4
     11925569a64a4d0c.5d5734df1c3685cf.287b4cc83f39f38e.9ccbf8f8dd027e87
     2fd278c12538060d.6b161074e2252397.35664ac8fd89e0e0.beb74679cdbc6f8d
     f0fc4fdb2e626722
-VHADDPD_128(mem)
+VPMADDWD_128(mem)
   before
     0f678e091e012271.72b422dadaccc26d.b854a41e67c6e5c3.7a0e1093e3f8f4fa
     f7c57fefb6a45ba6.38864e206291bed9.20df6ccac7258780.53be9c948e13688b
@@ -35364,11 +35364,11 @@
   after
     0f678e091e012271.72b422dadaccc26d.b854a41e67c6e5c3.7a0e1093e3f8f4fa
     f7c57fefb6a45ba6.38864e206291bed9.20df6ccac7258780.53be9c948e13688b
-    0000000000000000.0000000000000000.7a0e1093e3f8f4fa.53be9c948e13688b
+    0000000000000000.0000000000000000.cfc038d8f54da01e.217d496007f90f26
     9384689454283b75.b82522e358df6684.b2088ada8a505e5b.316af3eda17b67bd
     edfdb61d41e069b6
 
-VHADDPD_128(reg)
+VPMADDWD_128(reg)
   before
     aec92f331620bdd5.fe7f572a91205867.2c8bc038ff80891a.933ed71525320bd2
     cf1a599cbbc89ec6.a29be928e74de5ef.9110d26ae982dc6d.fff048010b038989
@@ -35376,12 +35376,12 @@
     a07ab018e77dfacc.056ae40d50733973.a1a63f16f3db01f4.e8f887a12aa0e669
     1de54d2d9a843eea
   after
-    0000000000000000.0000000000000000.d2ea5a8c59ce93ad.fff848010b038989
+    0000000000000000.0000000000000000.d397a93c14ea9512.197a8bec35fd83ff
     cf1a599cbbc89ec6.a29be928e74de5ef.9110d26ae982dc6d.fff048010b038989
     ac3b30c5cd624934.5ba6997b73b99c39.440053e6b1729b26.d2ea5a8c59ce93ad
     a07ab018e77dfacc.056ae40d50733973.a1a63f16f3db01f4.e8f887a12aa0e669
     1de54d2d9a843eea
-VHADDPD_128(mem)
+VPMADDWD_128(mem)
   before
     4d7f281ac686565c.0921d603a6a2ed39.7cb444cc9b847ac6.045092684c494b81
     54909255cab3ebea.417d9cf0a55f5d28.9c5037a370fa1961.c94849465749b579
@@ -35391,11 +35391,11 @@
   after
     4d7f281ac686565c.0921d603a6a2ed39.7cb444cc9b847ac6.045092684c494b81
     54909255cab3ebea.417d9cf0a55f5d28.9c5037a370fa1961.c94849465749b579
-    0000000000000000.0000000000000000.7cb444cc9b847ac6.c94849465749b579
+    0000000000000000.0000000000000000.de644a24dfd379ee.dfb5b6f0040774ca
     574a0766c8bb7b0c.9284fd85d4cfa73a.47adc34925436419.e955d05bf52cd85d
     fc029869c02809a1
 
-VHADDPD_128(reg)
+VPMADDWD_128(reg)
   before
     e12db4b4ade54a00.0b8b0a14f9aeeef8.63c790043d9af8b6.8a0655f03d2e878f
     f4241ea859f0d726.06738ec073fcceb1.73efb336562cb763.e6e1685f4fadf9fc
@@ -35403,12 +35403,12 @@
     14a1d13c5c1dc37a.406c05c1acd7c538.c41c9e6409d76f03.584d0646d099b96a
     27768995771d80c2
   after
-    0000000000000000.0000000000000000.360a7a8277cd768c.73efb336562cb763
+    0000000000000000.0000000000000000.f076a0c3df751122.2ca4c10822801659
     f4241ea859f0d726.06738ec073fcceb1.73efb336562cb763.e6e1685f4fadf9fc
     9131d4b15fd4ebc1.23d00d5550b1d762.20476487bb1220ee.360a7a8277cd768c
     14a1d13c5c1dc37a.406c05c1acd7c538.c41c9e6409d76f03.584d0646d099b96a
     27768995771d80c2
-VHADDPD_128(mem)
+VPMADDWD_128(mem)
   before
     7f517d5d876685c1.d9c012b3eb579b00.3814f1efa47d535e.bdba5d37db07df4d
     3ba960881c7f8493.3cda9183a80faefd.e7944dcb53ac3d01.656d9e6dce2fad78
@@ -35418,11 +35418,11 @@
   after
     7f517d5d876685c1.d9c012b3eb579b00.3814f1efa47d535e.bdba5d37db07df4d
     3ba960881c7f8493.3cda9183a80faefd.e7944dcb53ac3d01.656d9e6dce2fad78
-    0000000000000000.0000000000000000.bdba5d37db07df4d.e7944dcb53a88933
+    0000000000000000.0000000000000000.f6603315f5f4c45a.c236cc9d11bc8d61
     5403e0bc4852645e.4b2e3ee01f27780d.d94c463e48da196d.364192b485945225
     16fb3e9b81eaa1fd
 
-VHADDPD_256(reg)
+VADDSUBPS_128(reg)
   before
     16f95c960e673e67.679d759c1624bcb0.b0016344109fa679.d51bdbacc6f0828d
     9288e610c797650f.50e5e990d9f7fe84.23feb8b09fc4010c.f7f3d0796bc138db
@@ -35430,12 +35430,12 @@
     6e8933312f423fc7.10ae5b64b1cd3464.a2a9de550946285a.21e9cadc9cc17aab
     e1a0c84b60097d86
   after
-    e9a7b784aed6eaa1.50e5e990d9f7fe84.1d9ea18f5458f681.f7f3d0796bc138db
+    0000000000000000.0000000000000000.23feb8b0e922c373.f7f3d0796bc138db
     9288e610c797650f.50e5e990d9f7fe84.23feb8b09fc4010c.f7f3d0796bc138db
     e6f4da75490751a0.e9a7b784aed6e806.007237926922c373.1d9ea18f5458f681
     6e8933312f423fc7.10ae5b64b1cd3464.a2a9de550946285a.21e9cadc9cc17aab
     e1a0c84b60097d86
-VHADDPD_256(mem)
+VADDSUBPS_128(mem)
   before
     378f16c7bb3bbe3e.8793edb015d46b2f.9fc8511dfce89ec8.67efa8661cbb6e6c
     0181303ec964f7fe.8b5d055f984a1185.74bf1699ae34e45e.a98f922f3e0ecf56
@@ -35445,11 +35445,11 @@
   after
     378f16c7bb3bbe3e.8793edb015d46b2f.9fc8511dfce89ec8.67efa8661cbb6e6c
     0181303ec964f7fe.8b5d055f984a1185.74bf1699ae34e45e.a98f922f3e0ecf56
-    378f16c7bb3bbe3e.8b5d055f984a1185.67efa8661cbb6e6c.74bf1699ae34e45e
+    0000000000000000.0000000000000000.74bf16997ce89ec8.67efa8663e0ecf56
     5ca2b9cb71c84448.c7653bf8e410b9aa.5b77f98eb18cefd3.1811b29d1c7bd460
     fd8ae11910aef1d8
 
-VHADDPD_256(reg)
+VADDSUBPS_128(reg)
   before
     cf8e1fff83ee19d8.a76820b8411bcf2a.b73a52bce47733d1.27cf10df3ab12c09
     ec6969b911c7880c.d462434f369544c5.0300b75ff1f21895.a736e6a39a363522
@@ -35457,12 +35457,12 @@
     72d30d5eec762fbe.4722ad2cf92cd6d4.1e8e57f1a0530ea7.375cbb39489295ab
     feb5b3e2d0806674
   after
-    c05c9e7d6a415d44.ec6969b911c7880c.b876f5c8ea28c449.a736e6a39a363522
+    0000000000000000.0000000000000000.06056729f1f21895.b876f5c86a28c449
     ec6969b911c7880c.d462434f369544c5.0300b75ff1f21895.a736e6a39a363522
     ae66b9b555c67c1f.c05c9e7d6a415d44.0603644ca70da2a3.b876f5c8ea28c449
     72d30d5eec762fbe.4722ad2cf92cd6d4.1e8e57f1a0530ea7.375cbb39489295ab
     feb5b3e2d0806674
-VHADDPD_256(mem)
+VADDSUBPS_128(mem)
   before
     ea4a59af9dfff1cf.95fa60207163de95.467fed4a00606ca1.a6ee8bb97b50974c
     d7ea2a8dcb19f3e9.7128ae67801ac44f.9740d9c19aecdbd6.fa70fc10d1907a3e
@@ -35472,11 +35472,11 @@
   after
     ea4a59af9dfff1cf.95fa60207163de95.467fed4a00606ca1.a6ee8bb97b50974c
     d7ea2a8dcb19f3e9.7128ae67801ac44f.9740d9c19aecdbd6.fa70fc10d1907a3e
-    ea4a59af9dfff1cf.7128ae67801ac44f.467fed4a00606ca1.fa70fc10d1907a3e
+    0000000000000000.0000000000000000.467fed4a9aecdbd6.fa70fc10fb50974c
     24773a27bd544b09.c8c92d35af13291e.a21fa56ff9353429.7505861c640b3ebd
     55b197a8d95e96a0
 
-VHADDPD_256(reg)
+VADDSUBPS_128(reg)
   before
     71add57339243981.3dfd71bdb88c1966.fad45493066e1f8a.14d37e7df60b95a0
     24473cea22e9600c.c6bcc21384904e32.5616682757c23c8b.491cf295f668bf30
@@ -35484,12 +35484,12 @@
     c4807688fea131ce.9b18a3ae012edcc6.fc6d409d5986def6.6c99a09371e45d48
     1265d252231c4929
   after
-    ccc9c978303a4aec.c6bcc21384904e32.38da625b3f9bbdcb.5616682757c23c8b
+    0000000000000000.0000000000000000.5616682757c23c8b.491cf295f668bf30
     24473cea22e9600c.c6bcc21384904e32.5616682757c23c8b.491cf295f668bf30
     ccc9c978303a4aec.9c81aa143e6da599.38da625b3f9bbdcb.1dc57fa316576e04
     c4807688fea131ce.9b18a3ae012edcc6.fc6d409d5986def6.6c99a09371e45d48
     1265d252231c4929
-VHADDPD_256(mem)
+VADDSUBPS_128(mem)
   before
     ebf58fca490aeed3.67b8418829ad525e.9e4c2bcceadface6.fe1bfc57420edbba
     d31555e9ffba0772.13bd25e34ce7e947.83ebbe5a148dd425.9a3094f795bfefc0
@@ -35499,11 +35499,11 @@
   after
     ebf58fca490aeed3.67b8418829ad525e.9e4c2bcceadface6.fe1bfc57420edbba
     d31555e9ffba0772.13bd25e34ce7e947.83ebbe5a148dd425.9a3094f795bfefc0
-    ebf58fca490aeed3.d31555e9ffba0772.fe1bfc57420edbba.9a3094f795bfefc0
+    0000000000000000.0000000000000000.9e4c2bcc6adface6.fe1bfc57c20edbba
     4035eac88892883c.f25d295aeb1a67d6.6095f1769d0d18ae.10bf4696ebce4f49
     a2d0586d26441222
 
-VHSUBPS_128(reg)
+VADDSUBPS_256(reg)
   before
     3e7835da3b12deef.7cccb06194d168c0.dd91414e9f2bc7d4.103989dc34f8ab50
     4004d947c7c7ed5c.38246f509f03ade9.41c1624dbc9b8ddb.11771d637c0f86c1
@@ -35511,12 +35511,12 @@
     e6f267d5b10fc6c5.9d42c5e0246d53d8.df48b01d9fc939b7.75f1218091f2ffbf
     91c48bef95d616a4
   after
-    0000000000000000.0000000000000000.f83a88c4be1b26f5.c1c189307c0f86c1
+    4004d947e5ec7b15.4f07a281463312e2.783a88c45ef6f498.3e1b26f57c0f86c1
     4004d947c7c7ed5c.38246f509f03ade9.41c1624dbc9b8ddb.11771d637c0f86c1
     04be402165ec7b15.4f07a281c63312e2.783a88c4def6f498.3e1b26f5925e632d
     e6f267d5b10fc6c5.9d42c5e0246d53d8.df48b01d9fc939b7.75f1218091f2ffbf
     91c48bef95d616a4
-VHSUBPS_128(mem)
+VADDSUBPS_256(mem)
   before
     6e61df2dbb166307.41ee49cd48bb0818.fda15459d6be2ef7.d337d5c69e9f98e3
     e79499281fbfa315.73fde277c67d7ebb.4defccd8f7315d6a.ae52f22974044cc9
@@ -35526,11 +35526,11 @@
   after
     6e61df2dbb166307.41ee49cd48bb0818.fda15459d6be2ef7.d337d5c69e9f98e3
     e79499281fbfa315.73fde277c67d7ebb.4defccd8f7315d6a.ae52f22974044cc9
-    0000000000000000.0000000000000000.7da154595337d5c6.f7315d6a74044cc9
+    6e61da883b166307.73fde277c8c2f40e.fda15459f7315d6a.d337d5c674044cc9
     21ec30020e79ece0.c982298ee470f4a0.298c6399f8aeaafe.8c400ad21bada771
     47aafbef2308c48c
 
-VHSUBPS_128(reg)
+VADDSUBPS_256(reg)
   before
     5b71d67774232710.9aa905b9d2a36cf6.a491d0d3bdb96d3a.6e727cb310d03f77
     22e196d6a9890daa.1f2b30dc4365cf66.c6e31e79ec480ad4.11796c82074419f4
@@ -35538,12 +35538,12 @@
     3cebb6c931674ccf.c1b279179ee22d07.4b7f9f98be669fb6.e514c6f404548cad
     ce42276e41089c40
   after
-    0000000000000000.0000000000000000.0ea8ca29fa17f493.ec480ad491796c76
+    f9463778dfc7af06.1f2b30dcfeccd15d.c6e31e79ec480ad4.f06ab1f47a17f4a2
     22e196d6a9890daa.1f2b30dc4365cf66.c6e31e79ec480ad4.11796c82074419f4
     f94637785fc7af06.8e402d587eccd15d.8ac40fec0ea80619.f06ab1f4fa17f4a2
     3cebb6c931674ccf.c1b279179ee22d07.4b7f9f98be669fb6.e514c6f404548cad
     ce42276e41089c40
-VHSUBPS_128(mem)
+VADDSUBPS_256(mem)
   before
     85bf504ece3ee188.471d0e36bbf71eb1.964e8f07c0b6a08f.6762cbe9990d0e56
     e758be80c70217b1.76293a299a036259.e7e0eb12ff51e622.38b78e4c3a2992a6
@@ -35553,11 +35553,11 @@
   after
     85bf504ece3ee188.471d0e36bbf71eb1.964e8f07c0b6a08f.6762cbe9990d0e56
     e758be80c70217b1.76293a299a036259.e7e0eb12ff51e622.38b78e4c3a2992a6
-    0000000000000000.0000000000000000.c0b6a08fe762cbe9.ff51e6223a12a0dc
+    e758be804e3edf80.76293a293bf71eb1.e7e0eb12ff51e622.6762cbe93a2992a6
     1d0f558b6a654553.b0fa0456c6bc2faa.7115652e4611da17.6deac9f440f2c404
     89603912ddb6eb6b
 
-VHSUBPS_128(reg)
+VADDSUBPS_256(reg)
   before
     ca7931f1b0201531.a8c3783b4d1cb426.735798664a8130ab.61507c15864e00d1
     8d80acfc56bb8003.4ec4ceee0b920588.cabef2ae93f29322.3eb1c9c95382e946
@@ -35565,12 +35565,12 @@
     0a8c1b4c88b4037a.5cd908098ae838b0.a3d6e593e2066e20.3015f5460605f310
     fcb0cce6236b8cbd
   after
-    0000000000000000.0000000000000000.3c9a93ba6405c835.4abef2ae5382e946
+    2fc3a6a1ea13668d.ecddd58e41d2f2a8.cabef2aebc9a93ba.e405c8355382e952
     8d80acfc56bb8003.4ec4ceee0b920588.cabef2ae93f29322.3eb1c9c95382e946
     2fc3a6a16a13668d.ecddd58ec1d2f2a8.10790d993c9a93ba.e405c835c9bc50a2
     0a8c1b4c88b4037a.5cd908098ae838b0.a3d6e593e2066e20.3015f5460605f310
     fcb0cce6236b8cbd
-VHSUBPS_128(mem)
+VADDSUBPS_256(mem)
   before
     25a1ca023ef9d7d4.7b2807674d2c9476.7b85e34a83e093cc.de1f770820c15eff
     87b36a8772bc9182.dee3675f5504552e.25ade23dc7c7bf2a.1da1bd6493579f04
@@ -35580,11 +35580,11 @@
   after
     25a1ca023ef9d7d4.7b2807674d2c9476.7b85e34a83e093cc.de1f770820c15eff
     87b36a8772bc9182.dee3675f5504552e.25ade23dc7c7bf2a.1da1bd6493579f04
-    0000000000000000.0000000000000000.fb85e34a5e1f7708.c7c7bf2a9da1bd6b
+    25a1ca0272bc9182.7b28076755045481.7b85e34ac7c7bf2a.de1f7708a0c15eff
     666e8078980e4252.ebe570979b095782.8aa13de9a2907856.167f5a828645082f
     8973a81c3eb5a7ad
 
-VHSUBPS_256(reg)
+VADDSUBPD_128(reg)
   before
     6fd19c4c9a318700.9baeefbcc1b6b1cc.4cc412ae124d0f75.fd04917a718a7d7d
     26e331803744e5d5.7940f01973c27e8c.0ff316533b23e7d3.6b14f96dfba24494
@@ -35592,12 +35592,12 @@
     73562ea1a3600bb3.a08998cbe4362591.2b6c39f415b2e683.a866f62ab15e0345
     2f4183cb16197337
   after
-    b17afdd75cefff7a.3744e5d5f940d7c9.b3161a4a5ce587c9.3b23e7d3fba24494
+    0000000000000000.0000000000000000.90bc79c04de2680c.6b14f96dfba24494
     26e331803744e5d5.7940f01973c27e8c.0ff316533b23e7d3.6b14f96dfba24494
     09f66223b17afdd7.dcefff7acb3e66bf.90bc7af1b3161a4a.b09bf2ae5ce587c9
     73562ea1a3600bb3.a08998cbe4362591.2b6c39f415b2e683.a866f62ab15e0345
     2f4183cb16197337
-VHSUBPS_256(mem)
+VADDSUBPD_128(mem)
   before
     21f8147fa62394c9.c24f8e66a9814b15.a1d837f8dbb7762d.3c4e4fc8fe84852d
     5a5625317d872227.502c80de6069f8a8.bba959edcbcd16c0.1fb0b9d9091734f2
@@ -35607,11 +35607,11 @@
   after
     21f8147fa62394c9.c24f8e66a9814b15.a1d837f8dbb7762d.3c4e4fc8fe84852d
     5a5625317d872227.502c80de6069f8a8.bba959edcbcd16c0.1fb0b9d9091734f2
-    a62410d3424f8e66.7d8722276069f8a8.dbb7762dfe84852d.cbcd16c09fb0b9d9
+    0000000000000000.0000000000000000.bba959edcbcd16c0.bc4e4fc8fe84852d
     103bb93e738e74fa.9dc6069750bf8b14.a90113e008e43279.cb207562f7b1b07e
     4cc6c1b212d0f69e
 
-VHSUBPS_256(reg)
+VADDSUBPD_128(reg)
   before
     0f1b4ff0bfe13c8a.46593272c849b1c6.131a94b1c046e944.3620a3b58cff27f8
     6f6b1c869a6fbded.334f1d55d68e490f.3a83a22d51c3a555.4cf1a6037add5a1d
@@ -35619,12 +35619,12 @@
     7b2b656e4d3263c9.a1f332d387e881c7.06c333ff44d527cd.82d7f1b603186c0b
     5b8533f4d58cc32c
   after
-    4a0125eab6692719.ef6b1c86d68e490f.ec4c2e79ee8c8714.51c3a5557add5a1d
+    0000000000000000.0000000000000000.6c4c2e799ec4fbf5.4cf1a6037add5a1d
     6f6b1c869a6fbded.334f1d55d68e490f.3a83a22d51c3a555.4cf1a6037add5a1d
     ca0125e24006b773.b2e9f3d1b66afb01.6c4c2e799ec4fbf5.c63f97b5ee8c8714
     7b2b656e4d3263c9.a1f332d387e881c7.06c333ff44d527cd.82d7f1b603186c0b
     5b8533f4d58cc32c
-VHSUBPS_256(mem)
+VADDSUBPD_128(mem)
   before
     2c15d65a81f449a3.de33d8985c80009b.db3854476214988e.6432ad2dde80648c
     d35358d4235cb99d.4e667bcb097cc894.3b86d71a66fbfc81.e3e7986e0953efdc
@@ -35634,11 +35634,11 @@
   after
     2c15d65a81f449a3.de33d8985c80009b.db3854476214988e.6432ad2dde80648c
     d35358d4235cb99d.4e667bcb097cc894.3b86d71a66fbfc81.e3e7986e0953efdc
-    ac15d65a5e43d8ab.535358d4ce667bcb.62149b6fe432bd3a.66fbfc8163e7986e
+    0000000000000000.0000000000000000.db3854476214988e.e43369f14ecb040b
     0f08e6b4b65e4bc9.ca7d3dfcafaaccae.e168ee895228999d.af4eb2d980a0dee1
     b599d9db0431baee
 
-VHSUBPS_256(reg)
+VADDSUBPD_128(reg)
   before
     4b5862a08819d43c.5c18eaf3e00fe353.8cf956d2e0f57f26.df957afe74854b1f
     cdd94794a9e56778.ef05bcf56ff15710.cdd08d611f1e4e76.73fa56812dcd3a7c
@@ -35646,12 +35646,12 @@
     054c19ba3156eb69.53a9bcf62e76bed0.38bd495b3937304c.d19bee61d54dbd7d
     526fa396fd9cca79
   after
-    17668624229cd9a8.4dd94794701a1ac5.674ddf16fb62fefe.4dd08d61f3fa5681
+    0000000000000000.0000000000000000.e74ddf1609b07549.fb62fefe990c21e2
     cdd94794a9e56778.ef05bcf56ff15710.cdd08d611f1e4e76.73fa56812dcd3a7c
     976686240320b04e.a29cd9a8800f612b.e74ddf1609b07549.7b62fefe990c21e2
     054c19ba3156eb69.53a9bcf62e76bed0.38bd495b3937304c.d19bee61d54dbd7d
     526fa396fd9cca79
-VHSUBPS_256(mem)
+VADDSUBPD_128(mem)
   before
     dbab97892c050301.73d7ffc4cf145476.dcf7e1cd9631292d.1a6dc69e4c40ba2a
     461b48267e952642.3d5331ac7ae52620.1a54c518d34c606b.eba75249dd555090
@@ -35661,11 +35661,11 @@
   after
     dbab97892c050301.73d7ffc4cf145476.dcf7e1cd9631292d.1a6dc69e4c40ba2a
     461b48267e952642.3d5331ac7ae52620.1a54c518d34c606b.eba75249dd555090
-    5bab9789f3d7ffc4.7e9526427ae52620.5cf7e1cd4c40ba2a.d34c606b6ba75249
+    0000000000000000.0000000000000000.dcf7e1cd9631292d.eba75249dd555090
     36c7cf0ffd58149d.554e6dcb65f1f8fd.2667b6b93ed31c41.c6eb888cebd98fa3
     888d2afba05fb0a8
 
-VHSUBPD_128(reg)
+VADDSUBPD_256(reg)
   before
     a8ebcb834323cde5.729a9d3362a3580f.5b646fd9de457089.abb5bce8a3571b2f
     834f689070af2205.01d116b05b4475ea.2d9bae76d2db4161.5541703c4e6cd4b1
@@ -35673,12 +35673,12 @@
     d55c82e9db55629f.889cff6a75b92a8a.a49cd40da102e1ac.8842d3fee576671b
     ca4f7a460883b85c
   after
-    0000000000000000.0000000000000000.a63f270ee041a834.5541703c4e6cd4b1
+    7306fb8ec491eab4.3f39b8740247275a.2d9bae76d2db4161.5541703c4e6cd4b1
     834f689070af2205.01d116b05b4475ea.2d9bae76d2db4161.5541703c4e6cd4b1
     7306fb8ec491eab4.bf39b8740247275a.263f270ee041a834.00d64f9f5b1d04f1
     d55c82e9db55629f.889cff6a75b92a8a.a49cd40da102e1ac.8842d3fee576671b
     ca4f7a460883b85c
-VHSUBPD_128(mem)
+VADDSUBPD_256(mem)
   before
     a0cbbf61e151b4e0.059df80e5085c672.38c7657ed0a639a7.02feb3e0b3ab2775
     e7801f3d8bec17d2.60145967bfb051d9.ab85689c2e1811dc.9bb1bff1b2c7b73c
@@ -35688,11 +35688,11 @@
   after
     a0cbbf61e151b4e0.059df80e5085c672.38c7657ed0a639a7.02feb3e0b3ab2775
     e7801f3d8bec17d2.60145967bfb051d9.ab85689c2e1811dc.9bb1bff1b2c7b73c
-    0000000000000000.0000000000000000.b8c7657ed0a639a7.2b85689c2e1811dc
+    e7801f3d8bec17d2.60145967bfb051d9.38c7657ed0a639a7.9bb1bff1b2c7b73c
     38c81ce4c5b501b2.02d8cd69fd20d010.4aee32a765c00b41.f3394f81e588a473
     68a6cbd851467a3b
 
-VHSUBPD_128(reg)
+VADDSUBPD_256(reg)
   before
     8a94641e19a789b1.faf2b2888bfcfff8.02bcd8ea047e3a3a.2e30f26b760ea5c8
     b34f16bfda380d80.9c87529c9440555c.9c07be507505bda6.45373de9fa12f818
@@ -35700,12 +35700,12 @@
     8e5bb6c2b61768db.f51da1c4d9ecf531.0e010b7b07c0f8fb.7cbe69c5cc6db7c1
     54d841f952dc9c72
   after
-    0000000000000000.0000000000000000.6bcc910e0dd8bf5c.45373de9fa12f818
+    4122dd2730844454.7c51790cf98cbe0c.2c057b07ed429303.ebcc910e0dd8bf5c
     b34f16bfda380d80.9c87529c9440555c.9c07be507505bda6.45373de9fa12f818
     4122dd2730844454.fc51790cf98cbe0c.2c057b07ed429303.6bcc910e0dd8bf5c
     8e5bb6c2b61768db.f51da1c4d9ecf531.0e010b7b07c0f8fb.7cbe69c5cc6db7c1
     54d841f952dc9c72
-VHSUBPD_128(mem)
+VADDSUBPD_256(mem)
   before
     cfe59698bc312a9d.f8449bfc087eb6bf.63b748b14d6db6fa.9e496b18600b2a3a
     c8b3e28d26791c6b.d92a8a41c34469ac.22ebe9bd731abf91.3827964a93b0636d
@@ -35715,11 +35715,11 @@
   after
     cfe59698bc312a9d.f8449bfc087eb6bf.63b748b14d6db6fa.9e496b18600b2a3a
     c8b3e28d26791c6b.d92a8a41c34469ac.22ebe9bd731abf91.3827964a93b0636d
-    0000000000000000.0000000000000000.e3b748b14d6db6fa.3827964a93b0636d
+    cfe59698bc312a9d.78449bfc087eb6bf.63b748b14d6db6fa.3827964a93b0636d
     a9bd5429670f1fa7.741d749de21ef254.02510ae6442994da.f9d83e1ef936dd5f
     d943b297632f9574
 
-VHSUBPD_128(reg)
+VADDSUBPD_256(reg)
   before
     3375e25618b1452e.479272a87776a86b.e5c2678b7f4a3e66.dc1a82db27a3d9e5
     63b9c9c6b4482937.d556772ef6ff8584.3e945335f305e132.77ade49f2b7a546e
@@ -35727,12 +35727,12 @@
     b4abad680ee77ce8.2ddf2bfab3a82e64.19ee066ad65a17a6.5f615649076bdfad
     641a5f06179f67ba
   after
-    0000000000000000.0000000000000000.5cde3406dddc1563.77ade49f2b7a546e
+    63b9c9c6b4482937.d556772ef6ff8584.dcde3406dddc1563.77ade49f2b7a546e
     63b9c9c6b4482937.d556772ef6ff8584.3e945335f305e132.77ade49f2b7a546e
     c55d6353d2817d3c.2ed7e1a501b6731e.dcde3406dddc1563.aed6ac206cb8c2a2
     b4abad680ee77ce8.2ddf2bfab3a82e64.19ee066ad65a17a6.5f615649076bdfad
     641a5f06179f67ba
-VHSUBPD_128(mem)
+VADDSUBPD_256(mem)
   before
     9bcd4243b95e15f6.8ef0a173050763e8.b03bd11a28e07183.520ec6cc7c0b23a7
     de457bed09b7a68c.ae783ddf526c6ee8.91b850f07d6bf9a7.e38b6e9a6b7c7411
@@ -35742,11 +35742,11 @@
   after
     9bcd4243b95e15f6.8ef0a173050763e8.b03bd11a28e07183.520ec6cc7c0b23a7
     de457bed09b7a68c.ae783ddf526c6ee8.91b850f07d6bf9a7.e38b6e9a6b7c7411
-    0000000000000000.0000000000000000.520ec6cc7c0b23a7.e38b6e9a6b7c7411
+    de457bed09b7a68c.ae783ddf526c6ee8.b03bd11a28e07183.e38b6e9a6b7c7411
     fcb8e03320606078.2f805a8b6036de95.e13fc56d36a7c8ab.7dcb6c2892cbd8d2
     3f27b8bf02c26281
 
-VHSUBPD_256(reg)
+VCVTSS2SI_64(reg)
   before
     c80fde712aa8234a.8f4a03a91fc90126.4898d4a259b3bc9c.08e3b5edd27086e5
     75d0d9aba70a54d8.9ed26d3a3dfa75df.1824e5cb18a5ae52.fdd66cd3bdbc79d3
@@ -35754,12 +35754,12 @@
     aa0d3e630e6ffdf5.a4f3046240e6c520.49c3bcff5a19bc7c.c5dd2382f10aed7c
     4f881b227225e790
   after
-    21b6a5d8157234d8.f5d0d9aba70a54d8.796e89703a98ef63.fdd66cd3bdbc79d3
+    c80fde712aa8234a.8f4a03a91fc90126.4898d4a259b3bc9c.08e3b5edd27086e5
     75d0d9aba70a54d8.9ed26d3a3dfa75df.1824e5cb18a5ae52.fdd66cd3bdbc79d3
     a1b6a5d8157234d8.061b9ad4930078ce.f96e89703a98ef63.9de6670b13965da1
     aa0d3e630e6ffdf5.a4f3046240e6c520.49c3bcff5a19bc7c.c5dd2382f10aed7c
-    4f881b227225e790
-VHSUBPD_256(mem)
+    0000000000000000
+VCVTSS2SI_64(mem)
   before
     18b2cbd8b3f30408.eb21a1ba318aeddc.522428d05db91901.626f7ae215b45149
     fd29b091d07e0311.c03dc84818513d39.ed7c830a0884309c.a2bdc08706f3e975
@@ -35769,11 +35769,11 @@
   after
     18b2cbd8b3f30408.eb21a1ba318aeddc.522428d05db91901.626f7ae215b45149
     fd29b091d07e0311.c03dc84818513d39.ed7c830a0884309c.a2bdc08706f3e975
-    eb21a1ba318aeddc.7d29b091d07e0311.626f7ae215b45149.6d7c830a0884309c
+    d8b84437e3d49ed6.85afb1795f4f2cb7.52c590fc5d53c51d.63fb8959ca64c1ad
     862a05b80b009284.96c157b9a311f403.5bcccc92773296b1.0273d1c4fc93159c
-    db729434380a21f0
+    0000000000000000
 
-VHSUBPD_256(reg)
+VCVTSS2SI_64(reg)
   before
     4b44cf151b572052.e34c6eff610f9b47.4fc0b7747f21d2c8.e55cb1b8722e5d84
     ac357cd441064f70.cbeafcf8040c754a.0bf8cb16900e02b3.cc43bd5a6b53d6c2
@@ -35781,12 +35781,12 @@
     b4a32298c3b62c90.acca73b09a008ac2.014304c0bfa846aa.214237c3c644d22c
     47f29d625f29cbb1
   after
-    db9199db44a1eaf6.cbeafcf8040c754a.ec4b6b657eabbe96.cc43bd5a6b53d6c2
+    4b44cf151b572052.e34c6eff610f9b47.4fc0b7747f21d2c8.e55cb1b8722e5d84
     ac357cd441064f70.cbeafcf8040c754a.0bf8cb16900e02b3.cc43bd5a6b53d6c2
     5b9199db44a1eaf6.1ad0298f0d03dbba.28b5910b7161bf70.ec4b6b657eabbe96
     b4a32298c3b62c90.acca73b09a008ac2.014304c0bfa846aa.214237c3c644d22c
-    47f29d625f29cbb1
-VHSUBPD_256(mem)
+    8000000000000000
+VCVTSS2SI_64(mem)
   before
     3a281a2d66676851.13b9117558d152e9.5da35547c7103d8f.f1ed219f156ed30d
     d6b0280ff6096338.d51d63e09f7d98ad.09294b40af3fb24d.5600e2160f40a247
@@ -35796,11 +35796,11 @@
   after
     3a281a2d66676851.13b9117558d152e9.5da35547c7103d8f.f1ed219f156ed30d
     d6b0280ff6096338.d51d63e09f7d98ad.09294b40af3fb24d.5600e2160f40a247
-    ba281a2d66676851.56b0280feeb06b10.f1ed219f156ed30d.5600e2160f40a247
+    f75545f62c1b7991.541c154335463a89.8c26d1886f97a327.8bc945904aa9ee02
     79e5edcd23aa6688.ed02220cb5b87329.c26764092226cd4a.eb9245796235f4ea
-    d4a7de3cf270f0ac
+    0000000000000000
 
-VHSUBPD_256(reg)
+VCVTSS2SI_64(reg)
   before
     a0560c4796e71df4.382a9a80f8c1e54a.fc1b87a6bc608039.87b87fb1e4f7ebe1
     adeacc05eb26b86d.10f1cafbc66cb303.ddb23e7de5c99d64.b7e59e6ad217ba19
@@ -35808,12 +35808,12 @@
     f5efef4b172828a5.7a35a0fabfb02b08.858e97930f0ff6bc.c802d9c4a1715b1b
     608aec3cb9c4a43d
   after
-    dd06f82baab88cde.2deacc05eb26b86d.6c1545fdcd7f0656.5db23e7de5c99d64
+    a0560c4796e71df4.382a9a80f8c1e54a.fc1b87a6bc608039.87b87fb1e4f7ebe1
     adeacc05eb26b86d.10f1cafbc66cb303.ddb23e7de5c99d64.b7e59e6ad217ba19
     55ae19e38db7fdc4.dd06f82baab88cde.ec1545fdcd7f0656.2eb93d220891f61e
     f5efef4b172828a5.7a35a0fabfb02b08.858e97930f0ff6bc.c802d9c4a1715b1b
-    608aec3cb9c4a43d
-VHSUBPD_256(mem)
+    ffffffda1179c000
+VCVTSS2SI_64(mem)
   before
     d41ef4766d958faf.eaf94aaa250574bb.c54a3e5622604ead.036a30a94704aa42
     ff8a6c5ed8f0d59e.8e18266d54d81eb2.99114f29eed5aff8.c4f50cac12eb5e94
@@ -35823,11 +35823,11 @@
   after
     d41ef4766d958faf.eaf94aaa250574bb.c54a3e5622604ead.036a30a94704aa42
     ff8a6c5ed8f0d59e.8e18266d54d81eb2.99114f29eed5aff8.c4f50cac12eb5e94
-    eaf94aaa250574bb.7f8a6c5ed8f0d59e.454a3e5622604ead.c4f50cac12eb5e94
+    bc9ad1e017e23535.3e9880fe3f2f6238.d2554d613f1a0a16.237b28090c4f4d5c
     e91a9de8457669a1.57c553cb83967bf6.4be3b6e9323b1d32.7c487e2ad0bcb449
-    2ba70c7dfbbecf05
+    00000000000084aa
 
-VEXTRACTPS_0x0(reg)
+VCVTSS2SI_32(reg)
   before
     8be6ce6d27e2d93d.61d54e637fb92e0e.33ea9b3fbb97a69b.e28705ace345a279
     fa4fbe66f3b3109c.ff995f3be0b540a7.2f5454c584c01fd1.710db7986d435617
@@ -35839,8 +35839,8 @@
     fa4fbe66f3b3109c.ff995f3be0b540a7.2f5454c584c01fd1.710db7986d435617
     d32fdad4f9beaecf.a1304c5e85785a99.a74f7bcb799d2244.d6414698ec41f437
     71d21d23d58eef82.216792b6890e3910.f8270bbc36b8eaa2.ebef30987d4c3a05
-    000000006d435617
-VEXTRACTPS_0x0(mem)
+    0000000080000000
+VCVTSS2SI_32(mem)
   before
     99e8034943b7a85e.328483bf24af1160.5d0aab3108829937.7c280004599fb494
     eacbe3d1b02e4a41.7190081481ae4e15.2fe515ba1fe0363b.909e56107bdebcc9
@@ -35848,13 +35848,13 @@
     ca5bffde2bdf0d4e.d8ea609ad7730bb8.0972caa6848b1588.d818161f329175a6
     c4b478fcfe1d9ea8
   after
-    99e8034943b7a85e.328483bf24af1160.5d0aab3108829937.7c2800047bdebcc9
+    99e8034943b7a85e.328483bf24af1160.5d0aab3108829937.7c280004599fb494
     eacbe3d1b02e4a41.7190081481ae4e15.2fe515ba1fe0363b.909e56107bdebcc9
     5b580e0a9fe38282.8944a98e8915e34f.75c34b3dea34cb47.90d4094a3a003eeb
     ca5bffde2bdf0d4e.d8ea609ad7730bb8.0972caa6848b1588.d818161f329175a6
-    c4b478fcfe1d9ea8
+    0000000080000000
 
-VEXTRACTPS_0x0(reg)
+VCVTSS2SI_32(reg)
   before
     b0f52b4b3a31f49a.119f323b7130a6d0.b8cf2ba2085104fc.c8bc0ce109f0d029
     f8272b7a8358b52b.0df2230c8ce10b35.873f0614b73d08c8.8f6e8fda9670b757
@@ -35866,8 +35866,8 @@
     f8272b7a8358b52b.0df2230c8ce10b35.873f0614b73d08c8.8f6e8fda9670b757
     f89675f4741e1b05.9b1e4f3d99fff6a8.9f86eb5b81c353c8.3854ce7d4715883e
     0c8d0325aa1063d4.95f131bab3942356.5df0d8e3016d23a7.a03a45b736eefc09
-    000000009670b757
-VEXTRACTPS_0x0(mem)
+    0000000000000000
+VCVTSS2SI_32(mem)
   before
     1e35cc9c4565c4fd.8f5ad379c0b9c846.d835456ff7af506b.1ec8c717d3c9b212
     ebe2d4209b1c8f7e.df47e15c53a68704.40b7074880593712.3c5bb76595633db4
@@ -35875,13 +35875,13 @@
     ee99d9e572bea06a.53b4a37f5e79031b.f0a48616d28f26c8.03e382fd527d3650
     636e571e86171ca1
   after
-    1e35cc9c4565c4fd.8f5ad379c0b9c846.d835456ff7af506b.1ec8c71795633db4
+    1e35cc9c4565c4fd.8f5ad379c0b9c846.d835456ff7af506b.1ec8c717d3c9b212
     ebe2d4209b1c8f7e.df47e15c53a68704.40b7074880593712.3c5bb76595633db4
     e7c004e9a136ef94.57a1273afe62dcbd.a942f3316aa09578.14f6a139e0c5ff3a
     ee99d9e572bea06a.53b4a37f5e79031b.f0a48616d28f26c8.03e382fd527d3650
-    636e571e86171ca1
+    0000000080000000
 
-VEXTRACTPS_0x0(reg)
+VCVTSS2SI_32(reg)
   before
     91e51b08191dedda.dc3acdff2ac05d2d.2ecc4f970e7737ca.efa73be4d333a52f
     e993ca28a71de7a7.8d6e5e23e749e309.463429efabe9b677.83198e858a97cfd9
@@ -35893,8 +35893,8 @@
     e993ca28a71de7a7.8d6e5e23e749e309.463429efabe9b677.83198e858a97cfd9
     c7c361e8cba344b3.dd03073ec263ed28.f63a2df1d05bb9ce.88c4fbe713c760f1
     87c2dab6213941aa.a8c3443ad91d39b9.9928550b1a577f7a.da75fff589d013a4
-    000000008a97cfd9
-VEXTRACTPS_0x0(mem)
+    0000000000000000
+VCVTSS2SI_32(mem)
   before
     d518b9c4ad9ad289.85dc33fd466d1a39.ca7b9104488081e6.8d4b9fa8246b4228
     36a3675e93735614.1d5d6729d5cb0a0c.1ff86b892a9a82dc.2cef06338a223f84
@@ -35902,13 +35902,13 @@
     0a25d293944c5235.8bc451e0a332222d.d26bb370b8219dd1.dfea1bc8ddabd6f3
     abd8c2a90194e860
   after
-    d518b9c4ad9ad289.85dc33fd466d1a39.ca7b9104488081e6.8d4b9fa88a223f84
+    d518b9c4ad9ad289.85dc33fd466d1a39.ca7b9104488081e6.8d4b9fa8246b4228
     36a3675e93735614.1d5d6729d5cb0a0c.1ff86b892a9a82dc.2cef06338a223f84
     53639b54d755ece9.ab9172a66bde4ecf.83044db39b77f7c6.d460861ae909b239
     0a25d293944c5235.8bc451e0a332222d.d26bb370b8219dd1.dfea1bc8ddabd6f3
-    abd8c2a90194e860
+    0000000000000000
 
-VEXTRACTPS_0x1(reg)
+VCVTSD2SI_32(reg)
   before
     92787629f151242a.36b58705e7624123.1941fe431a53c1d2.e8fb19aa9da63029
     f21433b54a6dc6fd.b3df3697eba578e0.b156773b6bce696b.a17efb4f65126cf9
@@ -35920,8 +35920,8 @@
     f21433b54a6dc6fd.b3df3697eba578e0.b156773b6bce696b.a17efb4f65126cf9
     25f9f5b7a7740986.5d6f5b36bc21b198.af4db734322e54a4.d8c2d64a2c6f0c6e
     8873b89da5f32a71.0f3173cc77e0a976.6f73bb9b0c00be28.6b9125870fcbceb3
-    00000000a17efb4f
-VEXTRACTPS_0x1(mem)
+    0000000000000000
+VCVTSD2SI_32(mem)
   before
     1203107797aea260.78ce79d1df756569.a7f0f94738f01ca6.4d147dda95cee5a4
     dd3da303744d2d1f.4f5533c1f286f51b.007969921a5dc556.a57bfb5f682703c4
@@ -35929,13 +35929,13 @@
     b1b273dced23324b.261b82811187085b.6419f747b27bace0.32cf18e75da3169e
     2053b0c3b8df83b0
   after
-    1203107797aea260.78ce79d1df756569.a7f0f94738f01ca6.4d147ddaa57bfb5f
+    1203107797aea260.78ce79d1df756569.a7f0f94738f01ca6.4d147dda95cee5a4
     dd3da303744d2d1f.4f5533c1f286f51b.007969921a5dc556.a57bfb5f682703c4
     74349b80dd1bc95e.6a56e2d779b31832.f5983f98393261b0.d2f6309421945533
     b1b273dced23324b.261b82811187085b.6419f747b27bace0.32cf18e75da3169e
-    2053b0c3b8df83b0
+    0000000080000000
 
-VEXTRACTPS_0x1(reg)
+VCVTSD2SI_32(reg)
   before
     f8cef294cdd5d816.7285a701c1712310.ddf1102a558e0142.28c80e8aa1446213
     158cdcc63810517c.9177b4dd741159d9.ec24873ee2554092.1c71ff4d219a3e75
@@ -35947,8 +35947,8 @@
     158cdcc63810517c.9177b4dd741159d9.ec24873ee2554092.1c71ff4d219a3e75
     d5d969c5961c298d.ec55145b221090d3.af00e329536702f8.1edf467d4e88fd31
     920196fd82859ef5.5dea4566e879842a.82d120574450801f.08e05f04451a5b74
-    000000001c71ff4d
-VEXTRACTPS_0x1(mem)
+    0000000000000000
+VCVTSD2SI_32(mem)
   before
     08c6f8cbff5ce23e.aa4f5ddb99d8e962.c204c2ece258f009.c1e23a35539df9b4
     d54470e2fa24841c.7710bcc976a1497e.f56d08d82bba919d.c8812e2d19d9a763
@@ -35956,13 +35956,13 @@
     57512316b93c30aa.a41b2f89f4c13374.3960db931b356193.9e94911f3f4f95bd
     25a1f8f1d7a14cc0
   after
-    08c6f8cbff5ce23e.aa4f5ddb99d8e962.c204c2ece258f009.c1e23a35c8812e2d
+    08c6f8cbff5ce23e.aa4f5ddb99d8e962.c204c2ece258f009.c1e23a35539df9b4
     d54470e2fa24841c.7710bcc976a1497e.f56d08d82bba919d.c8812e2d19d9a763
     fc83aa022fc0b532.5790ae35b66af8f5.d4f39117dfaa2311.f3f8f7ad3491c7d7
     57512316b93c30aa.a41b2f89f4c13374.3960db931b356193.9e94911f3f4f95bd
-    25a1f8f1d7a14cc0
+    0000000080000000
 
-VEXTRACTPS_0x1(reg)
+VCVTSD2SI_32(reg)
   before
     e46a298e9813298d.c378550ab5a4b2b0.bcfd3c33cd3136a7.01816139fb66094c
     373d1e611d3068d0.1cc6beca3e05f771.f982cf9edc473c39.08219ff59a49d46a
@@ -35974,8 +35974,8 @@
     373d1e611d3068d0.1cc6beca3e05f771.f982cf9edc473c39.08219ff59a49d46a
     7a64d5d802844434.3f05d942706aba19.b8f5e636bd8e83d7.2b0e12b414ea8119
     082d4a5ee49bfb66.0602225e68e0b9d3.56a47c670d92452c.441334618656ca85
-    0000000008219ff5
-VEXTRACTPS_0x1(mem)
+    0000000000000000
+VCVTSD2SI_32(mem)
   before
     cb937a34c0bd2341.3fe277605e02c711.4e88160a4272adcc.2dd98d9d68e0bee5
     f1a79533c0d0abeb.7ad05a480d44e4e2.f3652f32192c552f.9ae1164469032bae
@@ -35983,13 +35983,13 @@
     4e7329f713f11caf.6b862f7e778b05a5.c450c5a72f49ade6.a7997d96cef9d11e
     fee253186be4821e
   after
-    cb937a34c0bd2341.3fe277605e02c711.4e88160a4272adcc.2dd98d9d9ae11644
+    cb937a34c0bd2341.3fe277605e02c711.4e88160a4272adcc.2dd98d9d68e0bee5
     f1a79533c0d0abeb.7ad05a480d44e4e2.f3652f32192c552f.9ae1164469032bae
     7e0351d028ddbf00.1542ed838cee9085.d163ebc3091a6b29.fa0812c8ac87c832
     4e7329f713f11caf.6b862f7e778b05a5.c450c5a72f49ade6.a7997d96cef9d11e
-    fee253186be4821e
+    0000000000000000
 
-VEXTRACTPS_0x2(reg)
+VCVTSD2SI_64(reg)
   before
     5b2d90bc1ed516dd.3dc299949d177d22.dae719a36ca780ee.a8f63acca6c5d491
     1ac831ec8356ca07.27be1d93e45ba085.bdb0a86004cf3c0e.5922c41d8b989f57
@@ -36001,8 +36001,8 @@
     1ac831ec8356ca07.27be1d93e45ba085.bdb0a86004cf3c0e.5922c41d8b989f57
     97fd311637f5d949.e83131e101c93f05.6f2ed91fdd8d76af.b3a0e186fad0c863
     2e198ca5d53e814f.5ce85268126e17ce.4eada74e93706a7d.923b0cf20d780ce2
-    0000000004cf3c0e
-VEXTRACTPS_0x2(mem)
+    8000000000000000
+VCVTSD2SI_64(mem)
   before
     4ffc7d88954ad4e8.3b673e05fabcfcc5.5faffb163356e30c.b4790e58c1015425
     e5b9ba8a428bd0c7.1a3543a241fb8756.cd52a8d57f8b60ea.ffde0aa903ce7053
@@ -36010,13 +36010,13 @@
     cbe9ac94f6fba418.be7d3843a7edbb7a.5a5bfe3b09125d37.b0a2b3d0364a2cef
     ce99577f5d1144b5
   after
-    4ffc7d88954ad4e8.3b673e05fabcfcc5.5faffb163356e30c.b4790e587f8b60ea
+    4ffc7d88954ad4e8.3b673e05fabcfcc5.5faffb163356e30c.b4790e58c1015425
     e5b9ba8a428bd0c7.1a3543a241fb8756.cd52a8d57f8b60ea.ffde0aa903ce7053
     70c4f63f036dd7c8.27cd98e847875dae.829cd593121b4a94.892798adf662f9b2
     cbe9ac94f6fba418.be7d3843a7edbb7a.5a5bfe3b09125d37.b0a2b3d0364a2cef
-    ce99577f5d1144b5
+    0000000000000000
 
-VEXTRACTPS_0x2(reg)
+VCVTSD2SI_64(reg)
   before
     405980240a437eb2.d4f459763741f5e2.3b8f1f20fdb8dd66.3059a0b97f7a54ff
     632e2b2cd76d168f.66b177cfe14c8453.fa5049e9e675ff1d.e26336f99161ed17
@@ -36028,8 +36028,8 @@
     632e2b2cd76d168f.66b177cfe14c8453.fa5049e9e675ff1d.e26336f99161ed17
     91645204601a48fa.5deb848d11270d97.570cb30bfeae5c4c.4b453ce75ad3e1ac
     2746f31742d6509f.946ffb9be2de4eda.ad0e58f3e0f2319f.47cb2e6ff7daefea
-    00000000e675ff1d
-VEXTRACTPS_0x2(mem)
+    8000000000000000
+VCVTSD2SI_64(mem)
   before
     67f2c8fe1bdd440f.822209d0182e692a.e90958e5707e0146.5aa4340c28cabac1
     432c67dcdaf0044e.fc42919d7eadd046.37851856d812e30a.b91843c273c4335f
@@ -36037,13 +36037,13 @@
     e1e6b6633f745902.c081e3206d5177e3.2d53ad63a4472345.fcceebb4814ce3bd
     99a77cc97bf293d6
   after
-    67f2c8fe1bdd440f.822209d0182e692a.e90958e5707e0146.5aa4340cd812e30a
+    67f2c8fe1bdd440f.822209d0182e692a.e90958e5707e0146.5aa4340c28cabac1
     432c67dcdaf0044e.fc42919d7eadd046.37851856d812e30a.b91843c273c4335f
     2339e205ddc9cce6.f2f385e912dfc09f.59afb5dc35a7af50.26b881805d6bd724
     e1e6b6633f745902.c081e3206d5177e3.2d53ad63a4472345.fcceebb4814ce3bd
-    99a77cc97bf293d6
+    8000000000000000
 
-VEXTRACTPS_0x2(reg)
+VCVTSD2SI_64(reg)
   before
     588e302ce8e9221a.5bff5de41dfe67cf.c238a6ae2d8e2fbb.8d3c7bd54101f914
     94d1034763bdcd35.6b5055739272b279.5463caffee2325d6.57389b1f26deedea
@@ -36055,8 +36055,8 @@
     94d1034763bdcd35.6b5055739272b279.5463caffee2325d6.57389b1f26deedea
     abbaf28789fbd0d5.efa419fcbaddf52b.d2504b804b9a94de.65118a2d72ecbdf2
     f797f859f52f67a4.c1c9256bb249ed12.9849269be081b97f.9494c3ec3e362359
-    00000000ee2325d6
-VEXTRACTPS_0x2(mem)
+    8000000000000000
+VCVTSD2SI_64(mem)
   before
     c6c70329ccafa3f3.d6b2112744e3cd4e.bf89f6ac96c4565a.029c56bd4a64d067
     80100280c6f6367e.a258395f11a53f80.c3b107ab815aeb2e.6c93d75325ce153f
@@ -36064,13 +36064,13 @@
     84fb2b3aa8d6aaec.7574a7b99781362b.5069d994dd048c2c.b09fbd879b671776
     424d1afe6faf4d2b
   after
-    c6c70329ccafa3f3.d6b2112744e3cd4e.bf89f6ac96c4565a.029c56bd815aeb2e
+    c6c70329ccafa3f3.d6b2112744e3cd4e.bf89f6ac96c4565a.029c56bd4a64d067
     80100280c6f6367e.a258395f11a53f80.c3b107ab815aeb2e.6c93d75325ce153f
     cc323c37b0aa4f18.b9d46c6bf900f9e6.aa0dd4558f166aba.327aa5c80c4bc3b6
     84fb2b3aa8d6aaec.7574a7b99781362b.5069d994dd048c2c.b09fbd879b671776
-    424d1afe6faf4d2b
+    0000000000000000
 
-VEXTRACTPS_0x3(reg)
+VDPPS_128_1of4(reg)
   before
     44cfb89823aea182.85354d75ca860526.3383e5b487b333fc.92919256863010ad
     127293c154f14e27.abad1ed431c61af4.504c22c866222c04.4a507c85a7a7b06c
@@ -36078,12 +36078,12 @@
     814bf1719b70a509.d786b9af3f2865f6.123f8aeb60e9016c.8fc7d0dfbfa4374f
     d41632e0ee4296cb
   after
-    44cfb89823aea182.85354d75ca860526.3383e5b487b333fc.92919256863010ad
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     127293c154f14e27.abad1ed431c61af4.504c22c866222c04.4a507c85a7a7b06c
     0882a7e59d0391c6.d32e1843f9a3a67f.261c5a61d05b5df0.5574120f5b752993
     814bf1719b70a509.d786b9af3f2865f6.123f8aeb60e9016c.8fc7d0dfbfa4374f
-    00000000504c22c8
-VEXTRACTPS_0x3(mem)
+    d41632e0ee4296cb
+VDPPS_128_1of4(mem)
   before
     002db500055a0134.db196ccfe9c4c89f.947f7c021f621283.7001acd3b2585523
     efd7d32b1ff935b5.7138146c248c3432.e6e7dd29b45c6a52.9daebe83633595c2
@@ -36091,13 +36091,13 @@
     8618d64dcef9e7b1.c098db15cfa6d901.b92f6aa56ec10a69.cff8a0ef5066c867
     8d2d6783c5d333c4
   after
-    002db500055a0134.db196ccfe9c4c89f.947f7c021f621283.7001acd3e6e7dd29
+    002db500055a0134.db196ccfe9c4c89f.947f7c021f621283.7001acd3b2585523
     efd7d32b1ff935b5.7138146c248c3432.e6e7dd29b45c6a52.9daebe83633595c2
     7ee20a4b592aed7b.9ef3e5b5e753266f.a98858111a222991.f391bb690f0bfcf5
     8618d64dcef9e7b1.c098db15cfa6d901.b92f6aa56ec10a69.cff8a0ef5066c867
     8d2d6783c5d333c4
 
-VEXTRACTPS_0x3(reg)
+VDPPS_128_1of4(reg)
   before
     897d0e8f08dd79b9.e647b11d9a73dd85.3271f3f777108b95.f2a88ed1cb44cb09
     1f349081b511d8f2.793919a8daa38c20.4fcb28c97b1d76d7.30be40814eb7259b
@@ -36105,12 +36105,12 @@
     890616c4bf24cbdf.a8987c9b25560362.fe31daea0a52e912.2bf53e1d349f9b46
     9fad83e1cf2b2fb8
   after
-    897d0e8f08dd79b9.e647b11d9a73dd85.3271f3f777108b95.f2a88ed1cb44cb09
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     1f349081b511d8f2.793919a8daa38c20.4fcb28c97b1d76d7.30be40814eb7259b
     ab9ee9c469f98a1b.1bbb88d8aa95afb1.75f276f6785ad672.4f3ffca01227d74b
     890616c4bf24cbdf.a8987c9b25560362.fe31daea0a52e912.2bf53e1d349f9b46
-    000000004fcb28c9
-VEXTRACTPS_0x3(mem)
+    9fad83e1cf2b2fb8
+VDPPS_128_1of4(mem)
   before
     893346d900d84ccd.15ba12ed531bd9ea.fc9e71dc67f1445f.48d64e11cc91e965
     c45303f1e2b1b1b0.ab04d9acc36ceee9.f397e1868d722ed5.ad2bd0d75aa41314
@@ -36118,13 +36118,13 @@
     9c915c322b183e91.658db897a0492072.399627caf358ecdc.3c19ebf14c73d43d
     1d497d1ce847e30e
   after
-    893346d900d84ccd.15ba12ed531bd9ea.fc9e71dc67f1445f.48d64e11f397e186
+    893346d900d84ccd.15ba12ed531bd9ea.fc9e71dc67f1445f.48d64e11cc91e965
     c45303f1e2b1b1b0.ab04d9acc36ceee9.f397e1868d722ed5.ad2bd0d75aa41314
     2cd9361692c2188d.a731676ba8a24788.69514a87b2e67cf0.8a7e5ba85115a2ce
     9c915c322b183e91.658db897a0492072.399627caf358ecdc.3c19ebf14c73d43d
     1d497d1ce847e30e
 
-VEXTRACTPS_0x3(reg)
+VDPPS_128_1of4(reg)
   before
     8a590b97c01f0bec.f246ef33c9bedfe8.4164c99d47eeb454.4133f43b6cd437c3
     e09793cc71878a84.09c56d0489c0b6bd.960294e7381c40da.5cf42dc737671cd4
@@ -36132,12 +36132,12 @@
     b2c97f19cc337890.e95118c6de0af994.20c24efc69453080.3a11d5db39ff9f1f
     b5053b3da71db6b1
   after
-    8a590b97c01f0bec.f246ef33c9bedfe8.4164c99d47eeb454.4133f43b6cd437c3
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     e09793cc71878a84.09c56d0489c0b6bd.960294e7381c40da.5cf42dc737671cd4
     794d102996099a81.bcda5291872b803d.c2b217e30f6000af.65a44f58731c5539
     b2c97f19cc337890.e95118c6de0af994.20c24efc69453080.3a11d5db39ff9f1f
-    00000000960294e7
-VEXTRACTPS_0x3(mem)
+    b5053b3da71db6b1
+VDPPS_128_1of4(mem)
   before
     b44efd68d981551c.e755da08ae91605d.6bf63d8faa69dded.0b7c339ee2570bf8
     12b6974aea37398c.743e1f62d9ae8d93.1d953bd80855e774.e12dc4351523cec4
@@ -36145,13 +36145,13 @@
     591545e01bcbc028.075654077755a9ec.85f0b89ae80260c0.baa4d7f21a16fb07
     760151f02455ddd5
   after
-    b44efd68d981551c.e755da08ae91605d.6bf63d8faa69dded.0b7c339e1d953bd8
+    b44efd68d981551c.e755da08ae91605d.6bf63d8faa69dded.0b7c339ee2570bf8
     12b6974aea37398c.743e1f62d9ae8d93.1d953bd80855e774.e12dc4351523cec4
     aa0a86cef74c1e2c.b6d04993e8163cdf.ddf9908d13d9d457.fd21fc2d9e33b590
     591545e01bcbc028.075654077755a9ec.85f0b89ae80260c0.baa4d7f21a16fb07
     760151f02455ddd5
 
-VLDDQU_128(reg)
+VDPPS_128_2of4(reg)
   before
     8c866693597e97a8.fca5506c72c1daae.c41e3d2a23f80f67.f3442deca2da46db
     577d1348541c642a.6d84235e193829e7.4972fe69888aabfc.01c26d6d5e7043d5
@@ -36159,12 +36159,12 @@
     80f422940ee92bec.2d631324c6df5529.1bf1fde7eaac7522.716b3bb04aff7215
     8a2fc14ab2111bb3
   after
-    8c866693597e97a8.fca5506c72c1daae.c41e3d2a23f80f67.f3442deca2da46db
+    0000000000000000.0000000000000000.56c078f300000000.56c078f300000000
     577d1348541c642a.6d84235e193829e7.4972fe69888aabfc.01c26d6d5e7043d5
     34335379b2bc8207.8a803ba22c3f6902.f29f952e4197b956.8c36f30b37cd13da
     80f422940ee92bec.2d631324c6df5529.1bf1fde7eaac7522.716b3bb04aff7215
     8a2fc14ab2111bb3
-VLDDQU_128(mem)
+VDPPS_128_2of4(mem)
   before
     b44c02c48c0fcbdf.950c7d04052f9b85.33fa27d00326ab89.20b432ff20541a0b
     cc90790af3063ec6.d1c65e35321b107d.7911f393001f244d.5d3431e17f1ce6be
@@ -36173,12 +36173,12 @@
     fb18bc84a4a68149
   after
     b44c02c48c0fcbdf.950c7d04052f9b85.33fa27d00326ab89.20b432ff20541a0b
-    0000000000000000.0000000000000000.8533fa27d00326ab.8920b432ff20541a
+    cc90790af3063ec6.d1c65e35321b107d.7911f393001f244d.5d3431e17f1ce6be
     acc5a20804022f94.8e70c3923138c481.d973f357d8d77fa2.2dbcf5fba18e12e7
     31b8f9aada0d5c74.2954a7899f12f43c.30eea40aa85876b3.ee9a7ab82539dd31
     fb18bc84a4a68149
 
-VLDDQU_128(reg)
+VDPPS_128_2of4(reg)
   before
     b083b7cbbd633bda.3734fbdc91357e93.ffbf07861836dc5b.5a4c81968bb1c6ad
     692768fa09fb4791.9a07228b4685541d.6afdddf3372fb78a.335a06e99eeb2bbc
@@ -36186,12 +36186,12 @@
     564ad9bbb0ee4320.e7ded40c18cf081f.7222e0d0d8d139c6.62b6f991c23723c7
     719c5ebe0b612e1b
   after
-    b083b7cbbd633bda.3734fbdc91357e93.ffbf07861836dc5b.5a4c81968bb1c6ad
+    0000000000000000.0000000000000000.5b884e6e00000000.5b884e6e00000000
     692768fa09fb4791.9a07228b4685541d.6afdddf3372fb78a.335a06e99eeb2bbc
     8150ca7b27fbe019.36fbeca1150a983d.c75a273d9889c274.97e4afeefc14610b
     564ad9bbb0ee4320.e7ded40c18cf081f.7222e0d0d8d139c6.62b6f991c23723c7
     719c5ebe0b612e1b
-VLDDQU_128(mem)
+VDPPS_128_2of4(mem)
   before
     9e615c61f49d3d34.436091274260ac4f.897a57b66ee05df0.c8a104199392572b
     c6d36e6798f70e3e.a3dfee2979dd5755.f89cef8d314956dc.23228f8263585950
@@ -36200,12 +36200,12 @@
     f0af75be75440ef5
   after
     9e615c61f49d3d34.436091274260ac4f.897a57b66ee05df0.c8a104199392572b
-    0000000000000000.0000000000000000.4f897a57b66ee05d.f0c8a10419939257
+    c6d36e6798f70e3e.a3dfee2979dd5755.f89cef8d314956dc.23228f8263585950
     c5bc11ba137c5b64.d414ed2ff0f27fdc.10101a7c7d17ad0e.e0f27e79e7b07be1
     76e9bf478237e1d3.304989a4442a6190.ada1536f6f561fb3.5b5dcc69b925f989
     f0af75be75440ef5
 
-VLDDQU_128(reg)
+VDPPS_128_2of4(reg)
   before
     fb3475e4b897f7d0.b726f6fb01345bb6.15cabef41012391e.ab1d1652221068f7
     d838c9471dacf0c7.633f31c0ab80863a.dde5898bf0354232.e64ee011b3534305
@@ -36213,12 +36213,12 @@
     78eb5974bf4b01b8.6c34a432f132dfd4.8a15cd3e5e5dda9a.830375d3dda2a231
     9d1d39aeaec69da7
   after
-    fb3475e4b897f7d0.b726f6fb01345bb6.15cabef41012391e.ab1d1652221068f7
+    0000000000000000.0000000000000000.319b72fc00000000.319b72fc00000000
     d838c9471dacf0c7.633f31c0ab80863a.dde5898bf0354232.e64ee011b3534305
     e3066b53400f3586.5600ed849c261e8b.e6e5e4d5811fb977.3a012b983d2b6d0a
     78eb5974bf4b01b8.6c34a432f132dfd4.8a15cd3e5e5dda9a.830375d3dda2a231
     9d1d39aeaec69da7
-VLDDQU_128(mem)
+VDPPS_128_2of4(mem)
   before
     631ef316cca31c98.f3338e1633ec910a.81a8d4b6c6b18441.27c23f32247ae146
     b3d120f55443d92f.af2a07a63a7e2027.7028f8fc35aecb00.1738361e6f020928
@@ -36227,12 +36227,12 @@
     784813e28097a4c8
   after
     631ef316cca31c98.f3338e1633ec910a.81a8d4b6c6b18441.27c23f32247ae146
-    0000000000000000.0000000000000000.0a81a8d4b6c6b184.4127c23f32247ae1
+    b3d120f55443d92f.af2a07a63a7e2027.7028f8fc35aecb00.1738361e6f020928
     68013b3962b49099.0a1cbe8e708eecbc.17808cf05d356d3b.b7c3af6cd9828fec
     5d7bc0cd1102ff01.5f55b13c70a72f75.517c0c7e5853291e.64afa48a0185af3d
     784813e28097a4c8
 
-VLDDQU_256(reg)
+VDPPS_128_3of4(reg)
   before
     50d9f7e2f545ab39.700c2b9d7d37e094.0a21db1ad65626fd.f9e8f5924213b9d6
     48af4df5f91a003b.7c7df895c362f07d.67cb38963f260c01.ed90c2193781da8f
@@ -36240,12 +36240,12 @@
     095b3b04246a83a4.ee37aaad4cc38c04.a6ec7c158959992b.25c2f82cb599beb2
     22e55991755af975
   after
-    50d9f7e2f545ab39.700c2b9d7d37e094.0a21db1ad65626fd.f9e8f5924213b9d6
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     48af4df5f91a003b.7c7df895c362f07d.67cb38963f260c01.ed90c2193781da8f
     bd170f872ba2df7a.5c9da4a1ff8ceae9.d1a0c51b47a31f2c.083feffd55aa4874
     095b3b04246a83a4.ee37aaad4cc38c04.a6ec7c158959992b.25c2f82cb599beb2
     22e55991755af975
-VLDDQU_256(mem)
+VDPPS_128_3of4(mem)
   before
     d9748f17b1fab5e8.89c7ccd882fd2962.0c1686a5c61290f9.41fb5bf0a1d5b6a9
     283b15ac8484ae37.99a9be6fe1e70d63.9408b4758a85b2f5.fd195d182ca3b454
@@ -36254,12 +36254,12 @@
     97c30f97936a420f
   after
     d9748f17b1fab5e8.89c7ccd882fd2962.0c1686a5c61290f9.41fb5bf0a1d5b6a9
-    54d9748f17b1fab5.e889c7ccd882fd29.620c1686a5c61290.f941fb5bf0a1d5b6
+    283b15ac8484ae37.99a9be6fe1e70d63.9408b4758a85b2f5.fd195d182ca3b454
     e905673b0b059f90.954c0e35dcb56b51.60d7b10ab329b024.38917ff9c54dcdd5
     f9a001b06188451d.d9fbb6970ff27ed8.4e50f74e5e0944b1.4cb1bb0009613edb
     97c30f97936a420f
 
-VLDDQU_256(reg)
+VDPPS_128_3of4(reg)
   before
     7314762c00f51720.35d660f7a2195c0a.c103b4ff172b83a6.383f042fa6322bc9
     3ef0ec29eb8df7b8.7774fffcebc49f84.a9b003db90eab564.fb6f5397a8ae2097
@@ -36267,12 +36267,12 @@
     0d79f610ad15ca2f.8118edf1039a9cce.e929859b42309467.7dc6a8b148d52807
     f385a63a1e97b101
   after
-    7314762c00f51720.35d660f7a2195c0a.c103b4ff172b83a6.383f042fa6322bc9
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     3ef0ec29eb8df7b8.7774fffcebc49f84.a9b003db90eab564.fb6f5397a8ae2097
     52a36dfcf0be1e84.9c465aac5796ccb7.ed4ea09515be52c1.74ae61747f8ce148
     0d79f610ad15ca2f.8118edf1039a9cce.e929859b42309467.7dc6a8b148d52807
     f385a63a1e97b101
-VLDDQU_256(mem)
+VDPPS_128_3of4(mem)
   before
     b2b5d6fb1ddd3a62.c9bd82d1bb1d3566.00b634b90bddcef6.f98cb058b4ceb802
     9723b4e062b47d55.e3bc0dabb8629cd4.f6ebacee896a1c5a.79c51c380623f93f
@@ -36281,12 +36281,12 @@
     3063bfe258e7c878
   after
     b2b5d6fb1ddd3a62.c9bd82d1bb1d3566.00b634b90bddcef6.f98cb058b4ceb802
-    3fb2b5d6fb1ddd3a.62c9bd82d1bb1d35.6600b634b90bddce.f6f98cb058b4ceb8
+    9723b4e062b47d55.e3bc0dabb8629cd4.f6ebacee896a1c5a.79c51c380623f93f
     7c9abdd509273707.b8c3930a40713a26.3f85d07e9c4d4327.c41ec5a7d5bc94ca
     3ee86cc72d4224a3.a21c115aeed54d08.b74e1c545d92ff89.38e4a711bc23c54e
     3063bfe258e7c878
 
-VLDDQU_256(reg)
+VDPPS_128_3of4(reg)
   before
     08e708874491d8f4.b9d73ca0ea11ff56.fe1481075e1a0f25.3a130c5ceb460cab
     1bbb7e6a1daf326d.c935ac4e5da1854c.28f6e17e2dcdbc2a.a5a01c825f7525ba
@@ -36294,12 +36294,12 @@
     6787e29e0375b408.186954d5d33281af.56ac5f7656aacb9a.9e418ed86f706d4d
     e5ede7e04255152a
   after
-    08e708874491d8f4.b9d73ca0ea11ff56.fe1481075e1a0f25.3a130c5ceb460cab
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     1bbb7e6a1daf326d.c935ac4e5da1854c.28f6e17e2dcdbc2a.a5a01c825f7525ba
     c72d1df97ecc1290.4acc35bba1fe72b0.7c102d29f67992c2.d2c0c9b2d72907e1
     6787e29e0375b408.186954d5d33281af.56ac5f7656aacb9a.9e418ed86f706d4d
     e5ede7e04255152a
-VLDDQU_256(mem)
+VDPPS_128_3of4(mem)
   before
     839251b66de5b9a3.5616c7c749355382.0fd886870f4b6f74.131775cfe9eda45e
     53fa46470b2b16e5.f226cadfec982ca9.0be446bd6f54f82c.0d9e69a249cd59b9
@@ -36308,12 +36308,12 @@
     07c95b295b95f510
   after
     839251b66de5b9a3.5616c7c749355382.0fd886870f4b6f74.131775cfe9eda45e
-    b9839251b66de5b9.a35616c7c7493553.820fd886870f4b6f.74131775cfe9eda4
+    53fa46470b2b16e5.f226cadfec982ca9.0be446bd6f54f82c.0d9e69a249cd59b9
     33f2447d3833e71b.9503e652872a7b2b.e85b1063125ad803.a18a395a15d72558
     fe45c646110ae972.9df9188cb6787bb1.820761651168ca24.2b2ae163e69545e6
     07c95b295b95f510
 
-VMAXPS_256(reg)
+VDPPS_128_4of4(reg)
   before
     91b2a5180d637082.90c1488db2bbd816.64535af9160e69ea.b5b5b4af8b8a8cbc
     2533ba9c9a8af4e7.c530473e35527032.485faa054376817f.5c32842d99cdd7f6
@@ -36321,12 +36321,12 @@
     da283514b413013c.871ba98e58648a84.d2b861aa71f21e74.7bc39176e7e3ff02
     aa71c4195ecf532d
   after
-    2533ba9c9a8af4e7.871ba98e58648a84.485faa0571f21e74.7bc3917699cdd7f6
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     2533ba9c9a8af4e7.c530473e35527032.485faa054376817f.5c32842d99cdd7f6
     1e9696229e96bbec.79603e45b9dc6cf3.a367031cd83eff1f.554750cc593c6aff
     da283514b413013c.871ba98e58648a84.d2b861aa71f21e74.7bc39176e7e3ff02
     aa71c4195ecf532d
-VMAXPS_256(mem)
+VDPPS_128_4of4(mem)
   before
     bd1c669fdb0b22a9.b43594df798e0484.cd2e04052ef68312.329ec11cab1c1b2b
     9291f2f679a327a5.0808aef08892fe70.2665cb96589f16c8.1d651edc214a32ef
@@ -36336,11 +36336,11 @@
   after
     bd1c669fdb0b22a9.b43594df798e0484.cd2e04052ef68312.329ec11cab1c1b2b
     9291f2f679a327a5.0808aef08892fe70.2665cb96589f16c8.1d651edc214a32ef
-    9291f2f679a327a5.0808aef0798e0484.2665cb96589f16c8.329ec11c214a32ef
+    049de40954a41f4b.32ef7fb27dac2cab.6d8b7b2df16afdd4.f058735870089e6d
     ee09b9c48919c6c7.8d340391f567c9e2.806e8eb61663f55f.08c5bffb33e09d50
     bff6fb3107606845
 
-VMAXPS_256(reg)
+VDPPS_128_4of4(reg)
   before
     7238246687143ef8.2ea4eb13330fd846.772436f88c4f12c0.3ad8821ee297ba98
     7dd7370650865914.9e39f8e26f9010f4.4b0b1555dcf043f2.7697d34f711107a8
@@ -36348,12 +36348,12 @@
     0b5c08372ada5139.828090b00b69e58b.20eec49f1e8f4c01.e83f78c14b082c04
     d6c0c5d9cd9d7ca7
   after
-    7dd7370650865914.828090b06f9010f4.4b0b15551e8f4c01.7697d34f711107a8
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     7dd7370650865914.9e39f8e26f9010f4.4b0b1555dcf043f2.7697d34f711107a8
     3c1f2f7dfd44f646.1c935b1d59aa2bfc.64359b1384d79823.1275fb37e1de99be
     0b5c08372ada5139.828090b00b69e58b.20eec49f1e8f4c01.e83f78c14b082c04
     d6c0c5d9cd9d7ca7
-VMAXPS_256(mem)
+VDPPS_128_4of4(mem)
   before
     b6c65e6b83a944d2.46d9bfa074d3a69a.aeca1488a4d8f9cd.da828c6346a59d35
     651bbf63883741b2.49e44e2477bb3015.7a3e628f3e0324ed.ed3cf0cc99a4c46e
@@ -36363,11 +36363,11 @@
   after
     b6c65e6b83a944d2.46d9bfa074d3a69a.aeca1488a4d8f9cd.da828c6346a59d35
     651bbf63883741b2.49e44e2477bb3015.7a3e628f3e0324ed.ed3cf0cc99a4c46e
-    651bbf6383a944d2.49e44e2477bb3015.7a3e628f3e0324ed.da828c6346a59d35
+    c08d65adf8532f72.70c7b330ce1e2c55.c3a8f6b3f5f62217.b769ea47b2180055
     a1e6ca35f009c93f.17cfe92f1589d607.66d34cdee5beaf79.9255783e2e8e8b99
     dc4c961fa891a2e4
 
-VMAXPS_256(reg)
+VDPPS_128_4of4(reg)
   before
     ef9a3e54bcad81e3.e5f36ce78b66cd45.9a48ed8ce98769d6.3d8de0fe2c66863c
     288b6e4b086f6341.6980c7b0e675f4af.557db9b5e5a4226f.25a02ffee3fb648f
@@ -36375,12 +36375,12 @@
     7d85532cb11223cc.9c4994334bdba262.e34f9e18c86df5ae.9905eb4e1719248f
     dcee5076cbba7f96
   after
-    7d85532c086f6341.6980c7b04bdba262.557db9b5c86df5ae.25a02ffe1719248f
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     288b6e4b086f6341.6980c7b0e675f4af.557db9b5e5a4226f.25a02ffee3fb648f
     e46a216f256286ab.0758557a1d43fdaa.a4bc4b15a66d3d7e.fbdab4ca2888059c
     7d85532cb11223cc.9c4994334bdba262.e34f9e18c86df5ae.9905eb4e1719248f
     dcee5076cbba7f96
-VMAXPS_256(mem)
+VDPPS_128_4of4(mem)
   before
     a0605f2e6078cfdb.502600ee480c7951.041dfec68c49a002.6e84ae2ae53188ac
     c1299563f35ed38a.ba9a242185dbc2e6.1ba1121efd9ab3b6.a0a577b79c443023
@@ -36390,11 +36390,11 @@
   after
     a0605f2e6078cfdb.502600ee480c7951.041dfec68c49a002.6e84ae2ae53188ac
     c1299563f35ed38a.ba9a242185dbc2e6.1ba1121efd9ab3b6.a0a577b79c443023
-    a0605f2e6078cfdb.502600ee480c7951.1ba1121e8c49a002.6e84ae2a9c443023
+    1b136dffa07945d0.152dbc32040b3b36.bea14929b9d897ab.d7fff62b863229c0
     8bec63f082d4e2d9.be2bc38b622920ee.c7e920d2dc12070d.6ede26f34187b12e
     c18d037969d0021a
 
-VMAXPD_128(reg)
+VDPPS_256_1of4(reg)
   before
     2b5a892a99995930.eb7ef320b57b66d0.11df359a3ac0adb9.134514058451c008
     0a8fb5736e6cf11c.18969a7d567b8de2.6a960fc9295c1d44.7e80a0aecaa37dc7
@@ -36402,12 +36402,12 @@
     9364eb7a7465d723.48871a6b50b3b205.9e3ee73bbad59849.21c77113a6aef742
     116aada6737f2b57
   after
-    0000000000000000.0000000000000000.6a960fc9295c1d44.7e80a0aecaa37dc7
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     0a8fb5736e6cf11c.18969a7d567b8de2.6a960fc9295c1d44.7e80a0aecaa37dc7
     b87981bf83d70788.ee00d3f280df123a.259d4b86cb8aad3b.e46840bacc13fc76
     9364eb7a7465d723.48871a6b50b3b205.9e3ee73bbad59849.21c77113a6aef742
     116aada6737f2b57
-VMAXPD_128(mem)
+VDPPS_256_1of4(mem)
   before
     8f1d72604f9253e0.f69cef0fdea39d97.04f9ebd4e104296e.32c6de5695c91c1b
     79ac3b2c57f42c0a.3c6d87ec5d1c9591.fd20c21950dd32a3.3b812c42f5f3735c
@@ -36417,11 +36417,11 @@
   after
     8f1d72604f9253e0.f69cef0fdea39d97.04f9ebd4e104296e.32c6de5695c91c1b
     79ac3b2c57f42c0a.3c6d87ec5d1c9591.fd20c21950dd32a3.3b812c42f5f3735c
-    0000000000000000.0000000000000000.04f9ebd4e104296e.3b812c42f5f3735c
+    aae384f5a7b07201.c222b07c8c5cfabc.0fca1c26b84a8acd.16bace6b79dedab9
     fe8dcaa95ad2e1f0.e509672c07f009c5.16c174e73658ed1b.1ebfbe3dba178cde
     b1dafa255629c676
 
-VMAXPD_128(reg)
+VDPPS_256_1of4(reg)
   before
     2a587d8de9a0c42e.517788338c673404.ff6ca7666b63fd57.eed14649e51216b7
     e58544e20e08c2b1.7e6d397f5a7a2968.6e986d975341131f.72c80e36e284c3cd
@@ -36429,12 +36429,12 @@
     911c8a0480ddaccb.dbad6a0d384be3d3.b67b778f22709500.f397716533c2931a
     a607047fc0a530a8
   after
-    0000000000000000.0000000000000000.6e986d975341131f.72c80e36e284c3cd
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     e58544e20e08c2b1.7e6d397f5a7a2968.6e986d975341131f.72c80e36e284c3cd
     3ead499162eefbac.633b5c79df177949.8cd9b32c5c1787c9.8071499c48bbae8a
     911c8a0480ddaccb.dbad6a0d384be3d3.b67b778f22709500.f397716533c2931a
     a607047fc0a530a8
-VMAXPD_128(mem)
+VDPPS_256_1of4(mem)
   before
     778e7ed50b713f61.391d02a9046211b9.c18fe02880212131.49c9b42e3fd87971
     41f659532f317d71.94fdadeb8b086623.f3ad3bb4d4a6f08f.9f11667452dc6ec8
@@ -36444,11 +36444,11 @@
   after
     778e7ed50b713f61.391d02a9046211b9.c18fe02880212131.49c9b42e3fd87971
     41f659532f317d71.94fdadeb8b086623.f3ad3bb4d4a6f08f.9f11667452dc6ec8
-    0000000000000000.0000000000000000.c18fe02880212131.49c9b42e3fd87971
+    df0b13e548f1a503.fd098836b05be6b4.4cd2f69f4fe40c1b.159d89ccf407b1b0
     2f9b267773be7544.d08b8ef610e7ce19.a7cb8ed30ee930ff.07ba1aa4c3e57dd5
     d1b413675b0310e4
 
-VMAXPD_128(reg)
+VDPPS_256_1of4(reg)
   before
     d0d7728157eca489.0b7011f5cba3a75f.68d0ba9747395afd.e2647d3e2cc11967
     5e6f325f542c7570.51584d4b6dadf781.23230a85f0dcc50e.d76941cac5778380
@@ -36456,12 +36456,12 @@
     9a2cc712bee3c2b1.878cac30fd5ce588.6e2704f909472b61.63e635fadbadc974
     b1f75d758f461da7
   after
-    0000000000000000.0000000000000000.6e2704f909472b61.63e635fadbadc974
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     5e6f325f542c7570.51584d4b6dadf781.23230a85f0dcc50e.d76941cac5778380
     d8c7506bed50c144.db1d576674e623d5.5bd27a2ca75d4cf5.64a65565f6172a76
     9a2cc712bee3c2b1.878cac30fd5ce588.6e2704f909472b61.63e635fadbadc974
     b1f75d758f461da7
-VMAXPD_128(mem)
+VDPPS_256_1of4(mem)
   before
     2ba349c22eede23b.00eb92c16472b564.2f71c797231bfac6.b670a656b1269efb
     abb776ced5afd35b.664eb0e27b87d609.b0982486032e1dba.91f75bb03c87e072
@@ -36471,11 +36471,11 @@
   after
     2ba349c22eede23b.00eb92c16472b564.2f71c797231bfac6.b670a656b1269efb
     abb776ced5afd35b.664eb0e27b87d609.b0982486032e1dba.91f75bb03c87e072
-    0000000000000000.0000000000000000.2f71c797231bfac6.91f75bb03c87e072
+    0eff5f83a096ae33.28a21ae39db0604c.e7cc3fe8b8a10c91.59091f7445f52e70
     314780ceaab12cf0.a132cd2f697990d8.aeda95ab5f808177.6cf2ef0d68fcc4a2
     24fdc5e74229ddb3
 
-VMAXPD_256(reg)
+VDPPS_256_2of4(reg)
   before
     df789f6e6f07b650.ee5b569c0f090cbe.2f4cc632796da259.e28fa1ba13d83897
     f7ad780d8a228b24.22065bd7ecac08c9.2d3a00586918d27c.5fb5df01f1b4ef1d
@@ -36483,12 +36483,12 @@
     b1781849fc411824.5f55e7497c014743.e9c628bd5bc47a57.a586e2e8982a480e
     25ca9e5f9adb63d1
   after
-    b1781849fc411824.5f55e7497c014743.2d3a00586918d27c.5fb5df01f1b4ef1d
+    ff80000000000000.ff80000000000000.ff80000000000000.ff80000000000000
     f7ad780d8a228b24.22065bd7ecac08c9.2d3a00586918d27c.5fb5df01f1b4ef1d
     c9e94c33300798dc.a9160d6d5ca5dd3c.f749770dd6065bed.0219cb6c14216036
     b1781849fc411824.5f55e7497c014743.e9c628bd5bc47a57.a586e2e8982a480e
     25ca9e5f9adb63d1
-VMAXPD_256(mem)
+VDPPS_256_2of4(mem)
   before
     5eb07dbe36416caa.0ca6d7bc8a5c48a7.2190665767cb020c.5efb0dd495dd6a67
     2c03faf2866720c5.34bf85f877e56412.c99304833a0fc9c0.b43424be1fde69c9
@@ -36498,11 +36498,11 @@
   after
     5eb07dbe36416caa.0ca6d7bc8a5c48a7.2190665767cb020c.5efb0dd495dd6a67
     2c03faf2866720c5.34bf85f877e56412.c99304833a0fc9c0.b43424be1fde69c9
-    5eb07dbe36416caa.34bf85f877e56412.2190665767cb020c.5efb0dd495dd6a67
+    6b9092e5a9593b4f.860e1e6a5e67a710.34293fb910d9598e.46bf68e89652b128
     f723bf85b9237874.5ee19e7cdc6e4f4e.3e2092e505366da0.70e6d5bc95c57f31
     8df768a8b8c40e8f
 
-VMAXPD_256(reg)
+VDPPS_256_2of4(reg)
   before
     fb3c1c179cd99cef.ac88ffbdd2d29460.1882029c8d879678.c34279f33632c322
     1402ec74dd9363fc.668acd7911724b3e.103e45350b3db839.9f5d70d0bfd71542
@@ -36510,12 +36510,12 @@
     bb40d6ade31f8ed0.5999042d6fb17981.2a375882e4b18132.cba980a346519f06
     d47290717d3e4f03
   after
-    1402ec74dd9363fc.668acd7911724b3e.2a375882e4b18132.9f5d70d0bfd71542
+    b490decc00000000.b490decc00000000.c0e87b6d00000000.c0e87b6d00000000
     1402ec74dd9363fc.668acd7911724b3e.103e45350b3db839.9f5d70d0bfd71542
     3695d72d167b9f63.01f7a5a5910d593a.a26163b3f51cf33e.ae3bf466bb332029
     bb40d6ade31f8ed0.5999042d6fb17981.2a375882e4b18132.cba980a346519f06
     d47290717d3e4f03
-VMAXPD_256(mem)
+VDPPS_256_2of4(mem)
   before
     a464a0be7c05ec4c.0151e760e10a6aee.4a3e64fdc66a693f.040b200e77879ec2
     174a2d755eb2320e.621204b2acc9706a.afb04301b342e29f.8c2bb8c3472b889a
@@ -36525,11 +36525,11 @@
   after
     a464a0be7c05ec4c.0151e760e10a6aee.4a3e64fdc66a693f.040b200e77879ec2
     174a2d755eb2320e.621204b2acc9706a.afb04301b342e29f.8c2bb8c3472b889a
-    174a2d755eb2320e.621204b2acc9706a.4a3e64fdc66a693f.040b200e77879ec2
+    09efb1823f52dc75.3cd12b10dfe7dbf0.66bb1c265147a3ce.1ee11b0df2277965
     5520aad13cf0a8ac.e9d858e416f0e92b.4a2d6c56bc8566f8.167a4558140aaed0
     d0423211485d6386
 
-VMAXPD_256(reg)
+VDPPS_256_2of4(reg)
   before
     a885dfa22baed334.d9a9934e70994fe0.c674859cee71d4c8.37d1ad7f1106e848
     fa8f477958883b86.7056e9e5f857903d.30f0b0a202f5d872.08725d8b6cd8e5eb
@@ -36537,12 +36537,12 @@
     7b2738a50108e3c4.464bc8127248cb20.16bced4c50371f9f.cbdff701a19d3ed8
     7342d942b4a8137a
   after
-    7b2738a50108e3c4.7056e9e5f857903d.30f0b0a202f5d872.08725d8b6cd8e5eb
+    7f80000000000000.7f80000000000000.ff80000000000000.ff80000000000000
     fa8f477958883b86.7056e9e5f857903d.30f0b0a202f5d872.08725d8b6cd8e5eb
     21ab66006b78d727.f5f32682ef3825ee.819ad464ef0833d6.9bddf768e807180c
     7b2738a50108e3c4.464bc8127248cb20.16bced4c50371f9f.cbdff701a19d3ed8
     7342d942b4a8137a
-VMAXPD_256(mem)
+VDPPS_256_2of4(mem)
   before
     71d21a173d345320.634db9d3b5c79a08.3e2b4a7f9c913efe.4ba4f7c8c20dd97a
     9f5d356c574cb9f3.346ae6f6243e39a0.b86028b78a2139b5.7d9cef43e0169d13
@@ -36552,11 +36552,11 @@
   after
     71d21a173d345320.634db9d3b5c79a08.3e2b4a7f9c913efe.4ba4f7c8c20dd97a
     9f5d356c574cb9f3.346ae6f6243e39a0.b86028b78a2139b5.7d9cef43e0169d13
-    71d21a173d345320.634db9d3b5c79a08.3e2b4a7f9c913efe.7d9cef43e0169d13
+    dbada62d1efc0222.4ccaba7aeafbfb37.92b4dfa457047970.06f1cf2946dfa615
     ff90e946af50ead6.06b931cba1891e7a.a6f4ea342045ba5c.43ef95e692f3312d
     90e13de65ddf7a06
 
-VMINPS_256(reg)
+VDPPS_256_3of4(reg)
   before
     4915c196452dbc4d.e9d07ba425552c3e.bd824755e875dc15.d2ebc45200f0b8a5
     cad51f60e66b34ae.733ad6319d168584.cf73f985594a72b3.f067ebea13112e76
@@ -36564,12 +36564,12 @@
     942c56f6c0e6b66c.dbbcdc8d01fd6c5c.70f81e8329e015ab.761a0e3845e77563
     95e902c69ab4bdd6
   after
-    cad51f60e66b34ae.dbbcdc8d9d168584.cf73f98529e015ab.f067ebea13112e76
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     cad51f60e66b34ae.733ad6319d168584.cf73f985594a72b3.f067ebea13112e76
     6f6e52b2db251ed4.7b9a78db32a0b1d5.96d642c590941b01.de32dbe876b5d9fc
     942c56f6c0e6b66c.dbbcdc8d01fd6c5c.70f81e8329e015ab.761a0e3845e77563
     95e902c69ab4bdd6
-VMINPS_256(mem)
+VDPPS_256_3of4(mem)
   before
     186c327f94276f81.955b279a323a3721.706b7f32253c7146.b7258929c2b99a5c
     d96f1a4d4d4c4492.ce47c109ccaddea0.1774dbb8bb667dbe.c9a97f25f4abe6c1
@@ -36579,11 +36579,11 @@
   after
     186c327f94276f81.955b279a323a3721.706b7f32253c7146.b7258929c2b99a5c
     d96f1a4d4d4c4492.ce47c109ccaddea0.1774dbb8bb667dbe.c9a97f25f4abe6c1
-    d96f1a4d94276f81.ce47c109ccaddea0.1774dbb8bb667dbe.c9a97f25f4abe6c1
+    b5bd371de12ffb33.9b3c21af2bcce795.aaa46e0ade894cf1.00cffde25d433785
     882403dc6ddd4e90.578542f7ea228eab.06c5b314aab0990b.b9e5fecc990bc755
     51357e4f4392d3dc
 
-VMINPS_256(reg)
+VDPPS_256_3of4(reg)
   before
     220c79d7f86197c7.2e6efc750c61fad6.606f204fa63c0e8e.07a427c23ce82237
     89b6ecd053064ec2.84689dd4dbc8bb31.1146b823faa5a4ec.890c4401b03ca0a2
@@ -36591,12 +36591,12 @@
     8ab326c66c018896.ab9cc893776c6bd4.dbeb02eadc9401c3.81ac6eddab6872e3
     ae7a72546b593d12
   after
-    8ab326c653064ec2.ab9cc893dbc8bb31.dbeb02eafaa5a4ec.890c4401b03ca0a2
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     89b6ecd053064ec2.84689dd4dbc8bb31.1146b823faa5a4ec.890c4401b03ca0a2
     e27fd1a6f00d3578.64de63e4f51d4dcc.c65604dd83e98c6f.68cb88bb21b8d277
     8ab326c66c018896.ab9cc893776c6bd4.dbeb02eadc9401c3.81ac6eddab6872e3
     ae7a72546b593d12
-VMINPS_256(mem)
+VDPPS_256_3of4(mem)
   before
     cc02100b7d96ef2f.db9ee69a626e82c7.356e4acc7cc2d274.ab51adb7a2334095
     b710c5edfb2c4467.328b0e906fe060b8.de1f647c21293dd9.94d301ae70518591
@@ -36606,11 +36606,11 @@
   after
     cc02100b7d96ef2f.db9ee69a626e82c7.356e4acc7cc2d274.ab51adb7a2334095
     b710c5edfb2c4467.328b0e906fe060b8.de1f647c21293dd9.94d301ae70518591
-    cc02100bfb2c4467.db9ee69a626e82c7.de1f647c21293dd9.ab51adb7a2334095
+    4b700be80426f7e5.ebc798122ee45e15.827d928d81b06a2f.f0bffb3de37b0c62
     64ed60e7b190c5d6.629e828e3c05b889.fd5250ecb86013a1.1d5f96ce963c10b5
     7600cecf2520ce36
 
-VMINPS_256(reg)
+VDPPS_256_3of4(reg)
   before
     56ee9fab2db48290.dd5540d621776a66.f35cc76f35cfa9c1.2b6b1b86e347f55c
     1b7405ce4a836770.947225a16de6a1c0.fa4d6421b3cf6e68.e8946e451e71cb8b
@@ -36618,12 +36618,12 @@
     c07c81993003b770.29fff37b0f8db884.daf792a8b49f64b6.7e469ce731ba46f7
     106670a042f3638d
   after
-    c07c81993003b770.947225a10f8db884.fa4d6421b49f64b6.e8946e451e71cb8b
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     1b7405ce4a836770.947225a16de6a1c0.fa4d6421b3cf6e68.e8946e451e71cb8b
     1fe0fda41719ba81.64128d34b4e92711.d3bd53105490432b.0f99c51784e8525b
     c07c81993003b770.29fff37b0f8db884.daf792a8b49f64b6.7e469ce731ba46f7
     106670a042f3638d
-VMINPS_256(mem)
+VDPPS_256_3of4(mem)
   before
     a1c6bb30d29d6446.5895901a32cb9ae8.bf05d3639cdd0f46.6b481c556e860cb4
     0d33fb82fec60751.44772391b8009e96.02f2a9d677e5ea83.e2fded841fd378d2
@@ -36633,11 +36633,11 @@
   after
     a1c6bb30d29d6446.5895901a32cb9ae8.bf05d3639cdd0f46.6b481c556e860cb4
     0d33fb82fec60751.44772391b8009e96.02f2a9d677e5ea83.e2fded841fd378d2
-    a1c6bb30fec60751.44772391b8009e96.bf05d3639cdd0f46.e2fded841fd378d2
+    2f77ab82e17a05d8.e16e376b5f2b0026.cd91f1c2bbb20366.9b60019f6212e3bb
     e55e481d98c31d07.89c6c915c2dafc43.fead2811854f161b.f2bd5514d3ce8b1c
     4262e34d0f93aaa1
 
-VMINPD_128(reg)
+VDPPS_256_4of4(reg)
   before
     e99aa9b8b2ed7df5.0ab64c3d3eaf090b.99cbd4fa7e99cd9a.7013c9b1f0c8e1d0
     42b0a3c057693fc5.794a35cff04a8610.6dc854852ef2b0d6.fe90508d182a1eaf
@@ -36645,12 +36645,12 @@
     79a91f5618f58487.a954a3fae6ba22cb.d2dea442dca89cb0.e2f901a911d7e09c
     f07f23c11a39de03
   after
-    0000000000000000.0000000000000000.d2dea442dca89cb0.fe90508d182a1eaf
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     42b0a3c057693fc5.794a35cff04a8610.6dc854852ef2b0d6.fe90508d182a1eaf
     a9f1cbd09a922ebc.10e57ec0c99f5041.620a45246f73e1a5.86ee3a911a808ae4
     79a91f5618f58487.a954a3fae6ba22cb.d2dea442dca89cb0.e2f901a911d7e09c
     f07f23c11a39de03
-VMINPD_128(mem)
+VDPPS_256_4of4(mem)
   before
     8a4a1bc551b43e44.10249abd6d1d7dd1.2263216b62a7b9da.1a8e6c4b121c1ca5
     8e2866a2d154bc8c.c8ae387233965747.55de72fe5a73d199.966699abac5b9e30
@@ -36660,11 +36660,11 @@
   after
     8a4a1bc551b43e44.10249abd6d1d7dd1.2263216b62a7b9da.1a8e6c4b121c1ca5
     8e2866a2d154bc8c.c8ae387233965747.55de72fe5a73d199.966699abac5b9e30
-    0000000000000000.0000000000000000.2263216b62a7b9da.966699abac5b9e30
+    d6e37e42b6241607.ff92f5df09ed4c95.2091149fe9292634.a2b427ce47f15efd
     4048e1921d3006e0.101ece7188ad9966.5d4882392bd573d9.9ac312217e6b97b7
     dade570eed54870a
 
-VMINPD_128(reg)
+VDPPS_256_4of4(reg)
   before
     be52f102313868a3.a6230a7f21844943.569cbd954f627967.eace39ba3d8475b1
     a26bdc6ae5a4762e.e54075f4de2d9a5e.2f59c0b5f7992944.a1f0b30e3b41e8eb
@@ -36672,12 +36672,12 @@
     dabc964210420dc8.5f6f0225f6ac5a66.05c0f09d60bae940.0138e5da68171030
     61f6942cd0473c93
   after
-    0000000000000000.0000000000000000.05c0f09d60bae940.a1f0b30e3b41e8eb
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     a26bdc6ae5a4762e.e54075f4de2d9a5e.2f59c0b5f7992944.a1f0b30e3b41e8eb
     e27514b1a623ef57.da6a9edc7236b75a.f5a1d23f1fdce5a8.5f7a6e1f401987b1
     dabc964210420dc8.5f6f0225f6ac5a66.05c0f09d60bae940.0138e5da68171030
     61f6942cd0473c93
-VMINPD_128(mem)
+VDPPS_256_4of4(mem)
   before
     5c80f8ff93b5ca07.e68b5c8bbe8b0d30.51191cba889a3fac.bc02153d58bc71b7
     cea18b41ce6e74b7.623064f74c8d2a39.8d356887440c2459.74b23c8aa370b8ba
@@ -36687,11 +36687,11 @@
   after
     5c80f8ff93b5ca07.e68b5c8bbe8b0d30.51191cba889a3fac.bc02153d58bc71b7
     cea18b41ce6e74b7.623064f74c8d2a39.8d356887440c2459.74b23c8aa370b8ba
-    0000000000000000.0000000000000000.8d356887440c2459.bc02153d58bc71b7
+    9327cbdc9c7df7d0.aaf5a9f257d1a190.ed8f6278450ec398.8a1e63f0dc62fbf4
     88dc33be1aef0f7e.192728e87ae5aee0.4ef3867aa7add996.5b9086db9f1c7512
     41559fb7892c64c0
 
-VMINPD_128(reg)
+VDPPS_256_4of4(reg)
   before
     99b9acf1361e02a9.878d3fd263cf78ec.0d12db4652548dd6.8c2c517787f4227e
     bf07a8f3417c8b7a.6d066c049429ed47.e102c0767aab791e.83083e5c01f0597d
@@ -36699,12 +36699,12 @@
     e6955d03e2b25282.5e7f16721c7ded72.98200e002c3e6b52.0cd46e903034846f
     565daab51e95efba
   after
-    0000000000000000.0000000000000000.e102c0767aab791e.83083e5c01f0597d
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     bf07a8f3417c8b7a.6d066c049429ed47.e102c0767aab791e.83083e5c01f0597d
     108d8f2b46d43dde.16123540c80a2bba.f043d2e58e75af63.0f51c91630ac3bbf
     e6955d03e2b25282.5e7f16721c7ded72.98200e002c3e6b52.0cd46e903034846f
     565daab51e95efba
-VMINPD_128(mem)
+VDPPS_256_4of4(mem)
   before
     c9b8f87315da39cb.9e6d0fe9b0a10712.21178b86ab8ef19b.34e66e32ed92e996
     41b0d4b5320f1ecf.945fa0484d2d9839.3ba81069914af160.1fe1f0e66ffe64dc
@@ -36714,11 +36714,11 @@
   after
     c9b8f87315da39cb.9e6d0fe9b0a10712.21178b86ab8ef19b.34e66e32ed92e996
     41b0d4b5320f1ecf.945fa0484d2d9839.3ba81069914af160.1fe1f0e66ffe64dc
-    0000000000000000.0000000000000000.21178b86ab8ef19b.1fe1f0e66ffe64dc
+    9a13ba6790415af2.24b80c8b54e240a4.88fc2205ebbbaaee.b75d8f8a4e0d19cf
     b0ab26754c7ba85f.aac34f20624d3cfe.e4e03c48d5f0d770.56a64789254c441c
     5a08144f9046206f
 
-VMINPD_256(reg)
+VHADDPS_128(reg)
   before
     1dcff3482c87ea73.5f4695cb81c9c642.82ce667212f9c8f4.2a1fda1c6af23513
     fd46dfe0959cded5.83ae82564c386dc9.08234bed01721f32.3887786fc6cf8003
@@ -36726,12 +36726,12 @@
     8077ce9e3b6f3362.9917c6b612a64d6d.8edf740f0afd2234.19fea53f4548cc77
     a4a52c94a0fc4655
   after
-    fd46dfe0959cded5.9917c6b612a64d6d.8edf740f0afd2234.19fea53f4548cc77
+    0000000000000000.0000000000000000.ca457f63e9e3922c.08234fb5c6cf8003
     fd46dfe0959cded5.83ae82564c386dc9.08234bed01721f32.3887786fc6cf8003
     54bad48365103841.f7b06900c8d35c1e.9810fcfeca457f63.e9e3922c0693746b
     8077ce9e3b6f3362.9917c6b612a64d6d.8edf740f0afd2234.19fea53f4548cc77
     a4a52c94a0fc4655
-VMINPD_256(mem)
+VHADDPS_128(mem)
   before
     65a4a31733bb9b2f.dbc9c99bb1460ce4.44b1166545befde3.46ddb08d5c274450
     3ac787b418908a31.c2fcc2e86320ff75.d448d4f87d2628ac.1b56aae55c4e2364
@@ -36741,11 +36741,11 @@
   after
     65a4a31733bb9b2f.dbc9c99bb1460ce4.44b1166545befde3.46ddb08d5c274450
     3ac787b418908a31.c2fcc2e86320ff75.d448d4f87d2628ac.1b56aae55c4e2364
-    3ac787b418908a31.dbc9c99bb1460ce4.d448d4f87d2628ac.1b56aae55c4e2364
+    0000000000000000.0000000000000000.45eb437c5c274450.7d2628ac5c4e2364
     8ca882ed4eac2160.a5349b1eed0e226e.12a18a796f17dde5.91e8cdcfd9c30223
     e999ed3a8d2a7c26
 
-VMINPD_256(reg)
+VHADDPS_128(reg)
   before
     cef5bd2e5fbea1d0.c2fe9260d70c42e4.58d173e0fd3ac92f.78fa7a4060b8e0ae
     9e493717ec0caece.7aa9fe9e22b2eb41.077f39a1b9997bae.3480c99bc6d94e79
@@ -36753,12 +36753,12 @@
     6b031e78a5036f74.e429db277401c835.c93e7cd0a622eb94.1a4871bd63cd59c7
     fc20c25dd2b76fa2
   after
-    9e493717ec0caece.e429db277401c835.c93e7cd0a622eb94.1a4871bd63cd59c7
+    0000000000000000.0000000000000000.bdb87296be87e273.b9997baec6d94e79
     9e493717ec0caece.7aa9fe9e22b2eb41.077f39a1b9997bae.3480c99bc6d94e79
     b4de5961d09fdfcb.927343924daad9a3.0e8ae8cdbdb87296.2001f276be87e273
     6b031e78a5036f74.e429db277401c835.c93e7cd0a622eb94.1a4871bd63cd59c7
     fc20c25dd2b76fa2
-VMINPD_256(mem)
+VHADDPS_128(mem)
   before
     a45661402752df2f.210383c80ac59c75.4e96444bb2c27424.95e7f11610632253
     ecb6cb547ca9669b.302982be98709f79.aa88f9e923fa989b.ccd0430b96085380
@@ -36768,11 +36768,11 @@
   after
     a45661402752df2f.210383c80ac59c75.4e96444bb2c27424.95e7f11610632253
     ecb6cb547ca9669b.302982be98709f79.aa88f9e923fa989b.ccd0430b96085380
-    ecb6cb547ca9669b.210383c80ac59c75.aa88f9e923fa989b.ccd0430b96085380
+    0000000000000000.0000000000000000.4e96444b95e7d4b2.aa88f5ffccd0430b
     d024edbb9cbda9bf.cd1b4347a5b11e3d.ac27384311fb3bd3.ee9670b367ac91d3
     910a423eebc21751
 
-VMINPD_256(reg)
+VHADDPS_128(reg)
   before
     0fefe128fb6d86ec.23c99ee79e91dccf.137efcb45c601154.096cbad7c5de31ec
     c6914adc33361b51.88c908f21251166e.22374176ac29cc1f.ca6578961c67913e
@@ -36780,12 +36780,12 @@
     4c3b66578d57a628.f305fc5abec78e06.0fdf5ba98d35897f.e3a29841259c793b
     f47ff3050f5f7a3e
   after
-    c6914adc33361b51.f305fc5abec78e06.0fdf5ba98d35897f.e3a29841259c793b
+    0000000000000000.0000000000000000.58940cf9c9deee6a.ac29cc14ca657896
     c6914adc33361b51.88c908f21251166e.22374176ac29cc1f.ca6578961c67913e
     113b77c830ab122c.d9eea9ca130a13c7.58940cf933968a49.c9deee6a33a214f4
     4c3b66578d57a628.f305fc5abec78e06.0fdf5ba98d35897f.e3a29841259c793b
     f47ff3050f5f7a3e
-VMINPD_256(mem)
+VHADDPS_128(mem)
   before
     d83f7aa40cfad42a.d3db13f5e7c715f1.b2da7d8f2e954559.a46629f25592026c
     6cafa9093976432b.0268780ed9859835.f239a9537f7ff1e9.74737240273734bd
@@ -36795,11 +36795,11 @@
   after
     d83f7aa40cfad42a.d3db13f5e7c715f1.b2da7d8f2e954559.a46629f25592026c
     6cafa9093976432b.0268780ed9859835.f239a9537f7ff1e9.74737240273734bd
-    d83f7aa40cfad42a.d3db13f5e7c715f1.f239a9537f7ff1e9.a46629f25592026c
+    0000000000000000.0000000000000000.b2d9e84a5592026c.7f7ff1e974737240
     0fcff0d591464f1a.c7795e62f721d2d8.66c4ee3c37d81f77.3052679b5c8fae3a
     d5bc0a80f6586fbe
 
-VMOVHPS_128_StoreForm(reg)
+VHADDPS_256(reg)
   before
     24dc181b0a9bd855.d7170014f4b26460.1694d7745b16ff90.51880038d55f18cb
     7a008dd635e424ac.be3fa8c9f7307d6b.7ccdfab2c78a3272.2d06ad75c432f80f
@@ -36807,12 +36807,12 @@
     a67f9d613eb55749.595db0454b93af7f.02c42a5e29219862.2860c45e07ed5c11
     ffd427e393ee5828
   after
-    24dc181b0a9bd855.d7170014f4b26460.1694d7745b16ff90.51880038d55f18cb
+    3172661fb5cc5867.7a008dd6f7307d6b.d79deb8fd60a6fdd.7ccdfab2c432f80f
     7a008dd635e424ac.be3fa8c9f7307d6b.7ccdfab2c78a3272.2d06ad75c432f80f
     3172661f12be906f.a01264e0b5cc5867.576ec186d80aa629.d60a6fdd215d7b6c
     a67f9d613eb55749.595db0454b93af7f.02c42a5e29219862.2860c45e07ed5c11
     ffd427e393ee5828
-VMOVHPS_128_StoreForm(mem)
+VHADDPS_256(mem)
   before
     37311458e06a2bdd.357331085455b7e7.c5ec09e5d4903fe0.d81b30a5565b44c9
     ab4408a90b6f905d.3a9a1b80f12beaf4.c08be9aa6ccfc3b5.37bfcfc7fc44e609
@@ -36820,13 +36820,13 @@
     bcbdf1906942036e.16b0e5932ea6bb0e.d22934583b459a6e.fc1dc94c2256fbc6
     1a701c87d995e59b
   after
-    37311458e06a2bdd.357331085455b7e7.c5ec09e5d4903fe0.c08be9aa6ccfc3b5
+    37311458e06a2bdd.357331085455b7e7.c5ec09e5d4903fe0.d81b30a5565b44c9
     ab4408a90b6f905d.3a9a1b80f12beaf4.c08be9aa6ccfc3b5.37bfcfc7fc44e609
-    39da7dc22f0944d4.113f5835b0c22d1d.2606cf82305df82b.79fc0330b769b9cf
+    e06a2bdd5455b7e7.ab4408a9f12beaf4.d4903fe0d80d7c58.6ccfc3b5fc44e609
     bcbdf1906942036e.16b0e5932ea6bb0e.d22934583b459a6e.fc1dc94c2256fbc6
     1a701c87d995e59b
 
-VMOVHPS_128_StoreForm(reg)
+VHADDPS_256(reg)
   before
     313ff84d79b4b6f9.10badffdd4288855.a537bd060664d172.a2bf9518aa9365a9
     9bd7590b9d3fa88d.119cc4f68cc791b8.1921dcfad587abf6.71956fad99541409
@@ -36834,12 +36834,12 @@
     dc929b1be3c5e206.89435f3e565c199d.254ee016c52e9a0c.7b327b0c645c11e6
     6f8fa5ac79bcd7bb
   after
-    313ff84d79b4b6f9.10badffdd4288855.a537bd060664d172.a2bf9518aa9365a9
+    e2c0f803ae29d8c1.9d5a93ae119c9312.d0ba3edc23936635.d587abf671956fad
     9bd7590b9d3fa88d.119cc4f68cc791b8.1921dcfad587abf6.71956fad99541409
     b5843b2be2c0f803.9a311a68ae29d8c1.d0ba3edc369c8545.1b783d05239365b9
     dc929b1be3c5e206.89435f3e565c199d.254ee016c52e9a0c.7b327b0c645c11e6
     6f8fa5ac79bcd7bb
-VMOVHPS_128_StoreForm(mem)
+VHADDPS_256(mem)
   before
     d25d38d27dbe7166.6a4c74453ddaa243.b9a00e639f6c1277.7429bd161fc927f7
     7f67af6a8d6e9c10.bc00c2178b897365.0512a3c5a5637d7c.1996d146e0f968b1
@@ -36847,13 +36847,13 @@
     2b5d39a13e0a9418.1c81ae6075eb3a0b.666770ed5b3c9bb6.d45a8eeb044af544
     a3483037a083b975
   after
-    d25d38d27dbe7166.6a4c74453ddaa243.b9a00e639f6c1277.0512a3c5a5637d7c
+    d25d38d27dbe7166.6a4c74453ddaa243.b9a00e639f6c1277.7429bd161fc927f7
     7f67af6a8d6e9c10.bc00c2178b897365.0512a3c5a5637d7c.1996d146e0f968b1
-    54788661c4d914e8.2ef881fc6a609219.4b669a4f854f17d8.6fe31814a34b99e6
+    7dbe71666a4c7445.7f67af6abc00c217.b9a00e637429bd16.a5637d7ce0f968b1
     2b5d39a13e0a9418.1c81ae6075eb3a0b.666770ed5b3c9bb6.d45a8eeb044af544
     a3483037a083b975
 
-VMOVHPS_128_StoreForm(reg)
+VHADDPS_256(reg)
   before
     37f9f96412812125.e2e24418180dd9cc.e3e744af49b4a9e6.31e3a08b4235c642
     eeb8e5def7d06801.53d324b16eef9f31.dd763f5581491957.8aa5a615564654aa
@@ -36861,12 +36861,12 @@
     3194176a889286ec.d72950f9fc7e9dbd.dd3e54568e06eeaa.5129259e77e189b8
     79849575bc83a7b7
   after
-    37f9f96412812125.e2e24418180dd9cc.e3e744af49b4a9e6.31e3a08b4235c642
+    ebfdcbb55d159e7a.f7d0682f6eef9f31.677a9bbe4b78fe78.dd763f55564654aa
     eeb8e5def7d06801.53d324b16eef9f31.dd763f5581491957.8aa5a615564654aa
     23d3f012ebfdcbb5.5cfc54585bbba273.677a9bbeb936c60a.4b78fe78b47b0118
     3194176a889286ec.d72950f9fc7e9dbd.dd3e54568e06eeaa.5129259e77e189b8
     79849575bc83a7b7
-VMOVHPS_128_StoreForm(mem)
+VHADDPS_256(mem)
   before
     9d55cce79e6e1841.764955536d1ed553.a22594806c424d3c.9b0f678a9c45cbe3
     9b6846e23aac9781.4c3ca63a332af396.97bd9dd9c7166e1b.fd3acfc47e7f9a62
@@ -36874,13 +36874,13 @@
     9083ef200e57b3d5.1f0f71aed8f88f5d.73f1ebb1b017f2ac.1dc98efe2f16fde1
     93c5ded6378a0939
   after
-    9d55cce79e6e1841.764955536d1ed553.a22594806c424d3c.97bd9dd9c7166e1b
+    9d55cce79e6e1841.764955536d1ed553.a22594806c424d3c.9b0f678a9c45cbe3
     9b6846e23aac9781.4c3ca63a332af396.97bd9dd9c7166e1b.fd3acfc47e7f9a62
-    4d887d51ab4be2a4.11ba068978441d60.93bde6f02a03bb87.5f098872d04197d3
+    9e91c5bd7649557b.3aac97814c3ca63a.6c424d3c9c69a5c6.c7166e1b7e50e671
     9083ef200e57b3d5.1f0f71aed8f88f5d.73f1ebb1b017f2ac.1dc98efe2f16fde1
     93c5ded6378a0939
 
-VMOVNTDQ_256(reg)
+VHADDPD_128(reg)
   before
     1d4b7365822af787.4023163a7edbc641.d386e414eed0843b.11252809765dccb5
     16a54817af810376.3a35708e17e3d914.8a6d5a27575a39a4.4a2519e298e208cf
@@ -36888,12 +36888,12 @@
     ca09a894198663e9.77dfab8c37b0ea9d.6cb63f048fb2d3c8.feb809cc5dd691e5
     30e3ffb3385d5738
   after
-    1d4b7365822af787.4023163a7edbc641.d386e414eed0843b.11252809765dccb5
+    0000000000000000.0000000000000000.fabc3b2a30b16026.4a2519e298e208cf
     16a54817af810376.3a35708e17e3d914.8a6d5a27575a39a4.4a2519e298e208cf
     dc215c58571c68b3.58857905f67ca679.9e0ecf53ae22ea44.fabc3b2a30b16026
     ca09a894198663e9.77dfab8c37b0ea9d.6cb63f048fb2d3c8.feb809cc5dd691e5
     30e3ffb3385d5738
-VMOVNTDQ_256(mem)
+VHADDPD_128(mem)
   before
     6d0a99cde0536e4c.3caa2a378e4b2fc5.730e840ff58e61ab.51b1a6a697982fdc
     91f954056ec3914d.8d4fddae55f70af3.28e07f7b4c1fc6d0.a74b01a562603b2b
@@ -36901,13 +36901,13 @@
     fe5e197fb243edc5.41dac6c44237d8f3.2d98cbba388f4d0e.198b806baec2522c
     edca9d0a6876d636
   after
+    6d0a99cde0536e4c.3caa2a378e4b2fc5.730e840ff58e61ab.51b1a6a697982fdc
     91f954056ec3914d.8d4fddae55f70af3.28e07f7b4c1fc6d0.a74b01a562603b2b
-    91f954056ec3914d.8d4fddae55f70af3.28e07f7b4c1fc6d0.a74b01a562603b2b
-    787caa4700ba7d67.1b46bd6307172e1e.721f18ba5971d638.cbd04b6e8b943362
+    0000000000000000.0000000000000000.730e840ff58e61ab.28e07f7b455f5d77
     fe5e197fb243edc5.41dac6c44237d8f3.2d98cbba388f4d0e.198b806baec2522c
     edca9d0a6876d636
 
-VMOVNTDQ_256(reg)
+VHADDPD_128(reg)
   before
     a3d79cb5543af82c.ff6c1d9a9f6a9f93.5a56f43ba2e1431d.351715650386e67f
     97ff7bda0f9cf7b9.57733082e43c4dfe.c4074436c2a3ad49.666870a9d9615eb6
@@ -36915,12 +36915,12 @@
     aad0c63f6069784a.7c97776de30e8f5b.f7383765b49d6855.b3af4fa910f4db29
     873dc93daac457bc
   after
-    a3d79cb5543af82c.ff6c1d9a9f6a9f93.5a56f43ba2e1431d.351715650386e67f
+    0000000000000000.0000000000000000.da39b1203f085022.666870a9d9615eb6
     97ff7bda0f9cf7b9.57733082e43c4dfe.c4074436c2a3ad49.666870a9d9615eb6
     268e35e434280d8a.e23dd0249cc4b432.da39b1203f085022.9c575a71d42c71e0
     aad0c63f6069784a.7c97776de30e8f5b.f7383765b49d6855.b3af4fa910f4db29
     873dc93daac457bc
-VMOVNTDQ_256(mem)
+VHADDPD_128(mem)
   before
     f4ce4619bda8a3c6.80102b572eeb71a6.014da348d6279ba3.7950d271bded338e
     d62c412a65ad7872.039c5f983b3a374a.4c2ad0a0911a9439.bacc7fb0f784eb78
@@ -36928,13 +36928,13 @@
     6881a197e747b463.85c3244680711518.a98d197cccbf3cfa.ed24fc776cb91412
     9697c4d7e06efe19
   after
+    f4ce4619bda8a3c6.80102b572eeb71a6.014da348d6279ba3.7950d271bded338e
     d62c412a65ad7872.039c5f983b3a374a.4c2ad0a0911a9439.bacc7fb0f784eb78
-    d62c412a65ad7872.039c5f983b3a374a.4c2ad0a0911a9439.bacc7fb0f784eb78
-    0824365abfde95ed.91be5d6e22e304e1.3bfc78632ef33647.17fa398efdefcdc0
+    0000000000000000.0000000000000000.7950d271bded338e.4c2ad0a0911a9439
     6881a197e747b463.85c3244680711518.a98d197cccbf3cfa.ed24fc776cb91412
     9697c4d7e06efe19
 
-VMOVNTDQ_256(reg)
+VHADDPD_128(reg)
   before
     709f8e1bf39bc581.d111ffcbf8f592ff.3bf7ad8af071a69a.72aa2ed78589647d
     d58754ad44cba5f8.1f9ecae40ff3ebee.0fa6f5a80e6df214.711f3360755d67fd
@@ -36942,12 +36942,12 @@
     b32cc9700a65a4bd.d9e39c71bc10fc73.80a4b41ec78fae9f.8641fead6c55f5a3
     5285bc48ab90f721
   after
-    709f8e1bf39bc581.d111ffcbf8f592ff.3bf7ad8af071a69a.72aa2ed78589647d
+    0000000000000000.0000000000000000.5d1cf90a77f43632.711f3360755d67fd
     d58754ad44cba5f8.1f9ecae40ff3ebee.0fa6f5a80e6df214.711f3360755d67fd
     229d14fb6c8adc27.2df680cc474d7a5b.5d1cf90a77f43632.84b8a403b94804a6
     b32cc9700a65a4bd.d9e39c71bc10fc73.80a4b41ec78fae9f.8641fead6c55f5a3
     5285bc48ab90f721
-VMOVNTDQ_256(mem)
+VHADDPD_128(mem)
   before
     c6525ac19106c64b.e57f7078b7e73a64.fd329bbe8b472d61.d68c234f99cc9607
     bc7254053bc21d4e.12e3037f129cdac9.77aef79fd0fec952.ba1e400889362918
@@ -36955,13 +36955,13 @@
     a2de4d9a483d568d.d00ee23a3bd1267b.d962bbce291e30ec.9b7378c735c342df
     51ce8ca529fd41ee
   after
+    c6525ac19106c64b.e57f7078b7e73a64.fd329bbe8b472d61.d68c234f99cc9607
     bc7254053bc21d4e.12e3037f129cdac9.77aef79fd0fec952.ba1e400889362918
-    bc7254053bc21d4e.12e3037f129cdac9.77aef79fd0fec952.ba1e400889362918
-    12b226ffc4d0b955.97a480f1b411bf97.22252e00a5428b72.88a709b7345aa47c
+    0000000000000000.0000000000000000.fd329bbe8b472d61.77aef79fd0fec952
     a2de4d9a483d568d.d00ee23a3bd1267b.d962bbce291e30ec.9b7378c735c342df
     51ce8ca529fd41ee
 
-VMOVHPS_128_LoadForm(reg)
+VHADDPD_256(reg)
   before
     04033ebbab94db55.4ac144c4e414b022.196c25c643684b20.7a301bf3769f74ed
     12608b7658154dbf.e4298768b462823f.ce0c460167636933.df5cc85ca8d012a1
@@ -36969,12 +36969,12 @@
     abbde88ca103a84f.62b4e2ce5d9081c4.ec3d0e3574b28352.69fefeab2d724fd0
     450c7e69b8fc66a3
   after
-    04033ebbab94db55.4ac144c4e414b022.196c25c643684b20.7a301bf3769f74ed
+    d52f7043cb0cd2d9.e4298768b462823f.e5b240f6dcbdc733.df5cc85ca8d012a1
     12608b7658154dbf.e4298768b462823f.ce0c460167636933.df5cc85ca8d012a1
     d52f7043cb0cd2d9.4ee19272d3328911.4b383f58434dbd60.e5b240f6dcbdc733
     abbde88ca103a84f.62b4e2ce5d9081c4.ec3d0e3574b28352.69fefeab2d724fd0
     450c7e69b8fc66a3
-VMOVHPS_128_LoadForm(mem)
+VHADDPD_256(mem)
   before
     56a73c1b9866c7d9.ee56efbf758809cc.fd6ff2696f882583.0d68ae06961ff7b6
     799db5ade9bd2f9d.fc468246e42631fc.fcde3e2d2527327a.0a021b35441f5437
@@ -36984,11 +36984,11 @@
   after
     56a73c1b9866c7d9.ee56efbf758809cc.fd6ff2696f882583.0d68ae06961ff7b6
     799db5ade9bd2f9d.fc468246e42631fc.fcde3e2d2527327a.0a021b35441f5437
-    0000000000000000.0000000000000000.0d68ae06961ff7b6.0a021b35441f5437
+    ee56efbf758809cc.fc468246e4262e45.fd6ff2696f882583.fcde3e2d2527327a
     60c5c521515f0382.e55a380501dfca29.91077ae4ea8877c3.08bb4e62b50abc42
     c1700b37b00c3f25
 
-VMOVHPS_128_LoadForm(reg)
+VHADDPD_256(reg)
   before
     c5c6851ba8d19bd4.dd9054db9fc2e8fa.78165414e711b27c.e05a63ae3262266d
     7209b87a38e60dfe.dce58d25cf42c2b1.455aec28d78d5233.039078538d122eff
@@ -36996,12 +36996,12 @@
     34863b5a922e226d.cb5cef1a42c74c8a.fea47c104890a87c.30d816dbee25398d
     f38298962ba1b3e0
   after
-    c5c6851ba8d19bd4.dd9054db9fc2e8fa.78165414e711b27c.e05a63ae3262266d
+    378fedebfcea50d2.7209b87a38e60dfe.d47635be18a44ba5.455aec28d78d5233
     7209b87a38e60dfe.dce58d25cf42c2b1.455aec28d78d5233.039078538d122eff
     2385a1c0fdd6d14d.378fedebfcea50d2.a870faad6edee5fa.d47635be18a44ba5
     34863b5a922e226d.cb5cef1a42c74c8a.fea47c104890a87c.30d816dbee25398d
     f38298962ba1b3e0
-VMOVHPS_128_LoadForm(mem)
+VHADDPD_256(mem)
   before
     f94035dbed2276cd.005882b294793d0b.74160f9cbee47305.a1446dbb0030d766
     1ede6b964db63d7e.e54672359e435ed3.0e8ac95f8b4d816e.ee9bc91c3249ad63
@@ -37011,11 +37011,11 @@
   after
     f94035dbed2276cd.005882b294793d0b.74160f9cbee47305.a1446dbb0030d766
     1ede6b964db63d7e.e54672359e435ed3.0e8ac95f8b4d816e.ee9bc91c3249ad63
-    0000000000000000.0000000000000000.a1446dbb0030d766.ee9bc91c3249ad63
+    f94035dbed2276cd.e54672359e435ed3.74160f9cbee47305.ee9bc91c3249ad63
     35e8901f5d45cbde.66aa3e6e3c85a18f.85d0fd548a3541bc.f69cb3ac76174149
     69df39b4c0e47789
 
-VMOVHPS_128_LoadForm(reg)
+VHADDPD_256(reg)
   before
     f6091a20f45b448d.dfed76c4445809e4.bbb712fb07163bdc.1a3a6e5ff4cb6bf9
     f966525eaf07e500.1802e5903aad3b60.97117f624b55cb02.108d695a1fde6cd5
@@ -37023,12 +37023,12 @@
     d1e8b8fd282e93e6.a68c4c49c64f6e64.58db1573ac12bb8b.8e22eed12aa8e118
     cffb70244277ced7
   after
-    f6091a20f45b448d.dfed76c4445809e4.bbb712fb07163bdc.1a3a6e5ff4cb6bf9
+    ce42ddd98c74968f.f966525eaf07e500.58038211a3d08cad.97117f624b55cb02
     f966525eaf07e500.1802e5903aad3b60.97117f624b55cb02.108d695a1fde6cd5
     ce42ddd98c74968f.bcf3586d5c511e7c.58038211a3d08cad.43966a312878ff7b
     d1e8b8fd282e93e6.a68c4c49c64f6e64.58db1573ac12bb8b.8e22eed12aa8e118
     cffb70244277ced7
-VMOVHPS_128_LoadForm(mem)
+VHADDPD_256(mem)
   before
     e1ee6c178bf381e5.5ea6de371ec217b0.b4983b0f93b3e745.f5e336f502a89446
     a0c65e972228b86d.d1c64bf10bbb5f9a.c1e4a3abdf8a444b.8969e001401d538a
@@ -37038,11 +37038,11 @@
   after
     e1ee6c178bf381e5.5ea6de371ec217b0.b4983b0f93b3e745.f5e336f502a89446
     a0c65e972228b86d.d1c64bf10bbb5f9a.c1e4a3abdf8a444b.8969e001401d538a
-    0000000000000000.0000000000000000.f5e336f502a89446.8969e001401d538a
+    e1ee6c178bf381e4.d1c64bf10bbb5f9a.f5e336f502a89446.c1e4a3abdf8a444b
     945916eaa7ea9c9e.d95feb99370d2a7c.476dcb1566be9d74.0a19c06be5d57160
     aeddeda084304949
 
-VMOVNTDQA_128(reg)
+VHSUBPS_128(reg)
   before
     ba4e94117c9af66c.82acd396ce8fc39f.266f165eaf7f25cd.794083bbd93411f0
     8bb7b02968a0b574.8c14767db31d5cca.c81378558e85d4ed.1a84a4e73b4c5940
@@ -37050,12 +37050,12 @@
     e7a538fd8ead59e6.69555fb12421d64f.8042d286ee823d4c.188b0d823e93580e
     2ee64fc917da86e4
   after
-    ba4e94117c9af66c.82acd396ce8fc39f.266f165eaf7f25cd.794083bbd93411f0
+    0000000000000000.0000000000000000.6fad7288a9123291.481378553b4c5940
     8bb7b02968a0b574.8c14767db31d5cca.c81378558e85d4ed.1a84a4e73b4c5940
     7b663e53e5cdc20e.905e7b8d719f244b.1d950de96fad7288.0504a886a9123291
     e7a538fd8ead59e6.69555fb12421d64f.8042d286ee823d4c.188b0d823e93580e
     2ee64fc917da86e4
-VMOVNTDQA_128(mem)
+VHSUBPS_128(mem)
   before
     22e1e8454ff4793e.2bc19c9200cdb5a7.f2c79dd5e9b02f02.4c66c198a8916ee3
     d24856e402ebed4a.a306657ed6b813fe.097fb1e6db57eb8f.df4dd88b386544f9
@@ -37065,11 +37065,11 @@
   after
     22e1e8454ff4793e.2bc19c9200cdb5a7.f2c79dd5e9b02f02.4c66c198a8916ee3
     d24856e402ebed4a.a306657ed6b813fe.097fb1e6db57eb8f.df4dd88b386544f9
-    18e714914dce9e31.abbf8f2eacfbaf96.884817ce1722c623.944312cb3b8afa3b
-    0000000000000000.0000000000000000.f2c79dd5e9b02f02.4c66c198a8916ee3
+    0000000000000000.0000000000000000.72c79da9cc66c198.db57eb8f5f4dd88b
+    d18a9e384ca64721.9f3a170c1f20c41c.4def4c7ab91e7ce9.c6946cc44c8ccb55
     d38be0e308f8f4f2
 
-VMOVNTDQA_128(reg)
+VHSUBPS_128(reg)
   before
     15756c920a5ab0bf.dafc70c51a81a546.dcc1f785cbb5903c.3240cad7db56c80f
     ea9e0b3eef3c3c68.0d0a0724d36a74cc.bba12d064b464da1.14070fcf9cd767be
@@ -37077,12 +37077,12 @@
     b9dd723fd0b5b4fb.652a7008799753a8.d79c89cc38898cec.4026dc4564e18d6d
     41175b9aa5828cc5
   after
-    15756c920a5ab0bf.dafc70c51a81a546.dcc1f785cbb5903c.3240cad7db56c80f
+    0000000000000000.0000000000000000.3b5e37f850109650.4b464da19cd76802
     ea9e0b3eef3c3c68.0d0a0724d36a74cc.bba12d064b464da1.14070fcf9cd767be
     ac52b954522cd498.4780dd41946d6fde.9b26b4f93b5e37f8.d010965015ac1424
     b9dd723fd0b5b4fb.652a7008799753a8.d79c89cc38898cec.4026dc4564e18d6d
     41175b9aa5828cc5
-VMOVNTDQA_128(mem)
+VHSUBPS_128(mem)
   before
     b0ad913bf39ccd57.6b8b336b0464183f.41d43c669df3dc58.cb4fa6eadd53862a
     67b5f9146b3a0e4f.1fa7f7448bc43b0e.b84abb451c8ec618.d38a09bfc749615e
@@ -37092,11 +37092,11 @@
   after
     b0ad913bf39ccd57.6b8b336b0464183f.41d43c669df3dc58.cb4fa6eadd53862a
     67b5f9146b3a0e4f.1fa7f7448bc43b0e.b84abb451c8ec618.d38a09bfc749615e
-    43fb0f11286909db.327fba3600615a14.a6576b931373cc14.4b9badb792f65b33
-    0000000000000000.0000000000000000.41d43c669df3dc58.cb4fa6eadd53862a
+    0000000000000000.0000000000000000.c1d43c66dd53862a.384abb45538a09bf
+    204b501e46347b24.fe5d78adffc8b0fe.e8c9c73b9daeab79.8fcc8e3ed8e7ae56
     fb6aa8c038a79772
 
-VMOVNTDQA_128(reg)
+VHSUBPS_128(reg)
   before
     eac1f8a94bc25234.da703627e2a72059.e08e2e1525847b78.586a4b28d74c1f73
     ba1d7965b0c41a48.4d383f1918cfb3a4.345ed6da0e21f52d.d3077348dc57e42d
@@ -37104,12 +37104,12 @@
     6913fe07d9afc413.cedca864bf6b962e.a30af22c9630e8fa.5a65a0ceb9ea4f93
     1ebd9d0dc8896d97
   after
-    eac1f8a94bc25234.da703627e2a72059.e08e2e1525847b78.586a4b28d74c1f73
+    0000000000000000.0000000000000000.d70da8bbc9deb5d4.b45ed6dadc57e40b
     ba1d7965b0c41a48.4d383f1918cfb3a4.345ed6da0e21f52d.d3077348dc57e42d
     c6ca2761003a2c59.556de7de03b6f132.57186e68552c5aca.356cbb86c9deb5d4
     6913fe07d9afc413.cedca864bf6b962e.a30af22c9630e8fa.5a65a0ceb9ea4f93
     1ebd9d0dc8896d97
-VMOVNTDQA_128(mem)
+VHSUBPS_128(mem)
   before
     5d422e2d14c6cd0c.0145fbc5d7b01e24.9451ff9669f75dc4.757e5c906eb9d96a
     f3bed01bb6ae291d.e9ad180695c87536.8398695f1c680322.29c2aa0278546ac6
@@ -37119,11 +37119,11 @@
   after
     5d422e2d14c6cd0c.0145fbc5d7b01e24.9451ff9669f75dc4.757e5c906eb9d96a
     f3bed01bb6ae291d.e9ad180695c87536.8398695f1c680322.29c2aa0278546ac6
-    bcfefdc4cc4c3ef7.7c955335af8306f5.777d61adf5ca4472.1b20d6ed518cd7b9
-    0000000000000000.0000000000000000.9451ff9669f75dc4.757e5c906eb9d96a
+    0000000000000000.0000000000000000.69f75dc4f57e56c1.1c68032278546ac6
+    94ce331272acc7c5.1849a7c0c26e0d0e.4ccb636b0f27dce0.a7e5debd94ee5bf0
     295cbedede043316
 
-VMASKMOVDQU_128(reg)
+VHSUBPS_256(reg)
   before
     fdd370bcca5d9bd8.57faedf3c3db81b4.171711126a14c52d.de4fec85878d869a
     7f94f2c3f582cee2.e14da751dbe428ef.d74a8b9742016bfd.09d676e87807ffc9
@@ -37131,12 +37131,12 @@
     fd2853fc7665887c.b99c0d39d2b52cfc.050da4ebf3e17163.9a18823437694e3d
     b76bfcf73c689bd8
   after
-    fdd370bcca5d9bd8.57faedf3c3db81b4.171711126a14c52d.de4fec85878d869a
+    fa010adfd7d378a4.7fd4f2c3614d8acc.e6c13b2bffe2039c.574a8b977807ffc9
     7f94f2c3f582cee2.e14da751dbe428ef.d74a8b9742016bfd.09d676e87807ffc9
     0bed3f5ffa010adf.0d95de1ad7d378a4.b22d13bbe6c13b2b.a92a7f7effa2039c
     fd2853fc7665887c.b99c0d39d2b52cfc.050da4ebf3e17163.9a18823437694e3d
     b76bfcf73c689bd8
-VMASKMOVDQU_128(mem)
+VHSUBPS_256(mem)
   before
     def167b12caca79a.b1922a07043a8764.c02faf9ae9950126.2d363a9104ed4850
     ea74415020402eaf.8377c1ea400d4244.fe1a4329377fb34c.84f4d21bb66ffd9e
@@ -37144,13 +37144,13 @@
     20a52fe98a899b80.f0e11cec35dbd99b.8e282a82eaa39d3d.335ff4876b0bf010
     42a37741a73ba78c
   after
-    def167b12caca79a.b1922a07043a8764.8e2faf9ae9959d26.335ff4916bedf010
+    def167b12caca79a.b1922a07043a8764.c02faf9ae9950126.2d363a9104ed4850
     ea74415020402eaf.8377c1ea400d4244.fe1a4329377fb34c.84f4d21bb66ffd9e
-    b6c205bf3631eb42.ce221313c769f4c7.4e2942d2d980fe9a.679366f3a5f5ccfb
+    5ef167b131922a07.6a744150400d4244.e9950126ad363a91.7e1a4329b66ffd9e
     20a52fe98a899b80.f0e11cec35dbd99b.8e282a82eaa39d3d.335ff4876b0bf010
     42a37741a73ba78c
 
-VMASKMOVDQU_128(reg)
+VHSUBPS_256(reg)
   before
     f1acec8ff2132a19.03ea3cbc3656fa95.44fed8e325ee2f69.98e2752387f54d61
     9cc64ddcea1fb863.3a5ca62359a4c4ac.26c74363332e30e0.4a25a1a3cb80ca31
@@ -37158,12 +37158,12 @@
     575dc8235000e0e1.18fc865e6ef08792.038818ae1b662673.12718aecba771988
     e1133f8e9dfa6466
   after
-    f1acec8ff2132a19.03ea3cbc3656fa95.44fed8e325ee2f69.98e2752387f54d61
+    2bea8b1923c9eb0b.ea1fb86359a4c4ac.fc2819a67ffb2aec.332e30e0cb957e65
     9cc64ddcea1fb863.3a5ca62359a4c4ac.26c74363332e30e0.4a25a1a3cb80ca31
     a03d98942bea8b18.a3c9eb0b0d7eb4f2.f1865ad8fc2819aa.7fbb2aecd352cfda
     575dc8235000e0e1.18fc865e6ef08792.038818ae1b662673.12718aecba771988
     e1133f8e9dfa6466
-VMASKMOVDQU_128(mem)
+VHSUBPS_256(mem)
   before
     c66dc4bd97e76ca0.1e72d9f6f6edf36d.77c0f3099906f9b9.b61879512d7792e8
     9e4a9567c44aec64.51c7c877b83e0066.9ae2aff8a9cdc592.6884792ecde49ab5
@@ -37171,13 +37171,13 @@
     98c10cda2aa44734.6b652c370139f651.a0700153ea9b5e0d.351c474129076e05
     09e00d511dd5b1e1
   after
-    c66dc4bd97e76ca0.1e72d9f6f6edf36d.a0700153ea9b5e0d.b61c795129076e05
+    c66dc4bd97e76ca0.1e72d9f6f6edf36d.77c0f3099906f9b9.b61879512d7792e8
     9e4a9567c44aec64.51c7c877b83e0066.9ae2aff8a9cdc592.6884792ecde49ab5
-    46782e774130a1dc.4caa8f13327e4278.5f2e3518bb50a84a.741615af983b7a85
+    466dc4bdf6edf36d.c44aec64d1c7c877.f7c0f3093618798f.a9cdc592e884792e
     98c10cda2aa44734.6b652c370139f651.a0700153ea9b5e0d.351c474129076e05
     09e00d511dd5b1e1
 
-VMASKMOVDQU_128(reg)
+VHSUBPS_256(reg)
   before
     4aaf63490f3080c4.72f2a97a9ab39999.0a459a4dc1fc579a.3a748f9753bba306
     55d443979ca4175a.aed78344ad675437.8596d6c30c52a302.0a055bcf11bb3262
@@ -37185,12 +37185,12 @@
     3a5595e2f5098c52.bfecdc072ef4f5cc.7ebaa47cbae8e7d9.b7029ecbfe8d21f2
     4d050d676476f87d
   after
-    4aaf63490f3080c4.72f2a97a9ab39999.0a459a4dc1fc579a.3a748f9753bba306
+    5fbeb151a93c1624.d5d443972eba98bd.b8a4da046af1e2e7.0c52a7b911bb3157
     55d443979ca4175a.aed78344ad675437.8596d6c30c52a302.0a055bcf11bb3262
     879daba65fbeb151.293c162480cf3439.38a4da0481c81433.eaf1e2e741a8c84c
     3a5595e2f5098c52.bfecdc072ef4f5cc.7ebaa47cbae8e7d9.b7029ecbfe8d21f2
     4d050d676476f87d
-VMASKMOVDQU_128(mem)
+VHSUBPS_256(mem)
   before
     89c6aba790700a1b.cb4700b7f911e10c.4db553d8d4e4521b.b5262f96534157a2
     4511f2779e8513f8.97c0e5910763ef29.ad61f5828daa0853.383277c1e95ca137
@@ -37198,13 +37198,13 @@
     b0747078cd36f91e.4b771104b412213e.5695b016aaea6f2d.925d2ff27a0db37c
     201497d1adbbf382
   after
-    89c6aba790700a1b.cb4700b7f911e10c.56b5b016aaea521b.b5262ff27a41b3a2
+    89c6aba790700a1b.cb4700b7f911e10c.4db553d8d4e4521b.b5262f96534157a2
     4511f2779e8513f8.97c0e5910763ef29.ad61f5828daa0853.383277c1e95ca137
-    5eb160c3a9c4cf40.f80c41dcbc8af056.bcbd40f37653d3a0.632b786617c70147
+    907003e6f911e10c.c511f27717c0e591.d4e454f0534157a2.2d61f582e95ca137
     b0747078cd36f91e.4b771104b412213e.5695b016aaea6f2d.925d2ff27a0db37c
     201497d1adbbf382
 
-VMOVMSKPD_128(reg)
+VHSUBPD_128(reg)
   before
     6b9bac704d5cfc06.17249e8027e94ebe.ec4d50768988be8e.57b5bfd7467b9727
     ce406a39f57c0ab4.6f8e66c9d3e88a4d.38d9fa9cda7703f1.9be9eb22651208b9
@@ -37212,12 +37212,12 @@
     4b0fd2fdce6a293c.62c0b6cb8efca6e8.3c4780b85af173a3.5cbc87069e85b458
     91f3f078ef7767bc
   after
-    6b9bac704d5cfc06.17249e8027e94ebe.ec4d50768988be8e.57b5bfd7467b9727
+    0000000000000000.0000000000000000.fefdafe324bc7d10.b8d9fa9cda7703f1
     ce406a39f57c0ab4.6f8e66c9d3e88a4d.38d9fa9cda7703f1.9be9eb22651208b9
     a44dce9a41a75b37.947e453eeb4069f7.89690ce4416b2b14.fefdafe324bc7d10
     4b0fd2fdce6a293c.62c0b6cb8efca6e8.3c4780b85af173a3.5cbc87069e85b458
-    0000000000000000
-VMOVMSKPD_128(mem)
+    91f3f078ef7767bc
+VHSUBPD_128(mem)
   before
     796e642334a05369.1dd274d03850b16f.b520355bd628fe4b.adc05486c2941649
     f0f961f5890c338a.78e2af7e1ae62f7b.69693edcdfd12d4c.382083b914e152b3
@@ -37227,11 +37227,11 @@
   after
     796e642334a05369.1dd274d03850b16f.b520355bd628fe4b.adc05486c2941649
     f0f961f5890c338a.78e2af7e1ae62f7b.69693edcdfd12d4c.382083b914e152b3
-    d26062d809c5c44c.b68b807310b7de0c.5a684d3ac602ee18.39b309bded62618c
+    0000000000000000.0000000000000000.3520355bd628fe4b.e9693edcdfd12d4c
     fb6fe3bad0d9c2db.3518e11bb74ffcd0.64eadf5fa6c7fedb.0cc4e3fee8a58081
     0da10be8a236ea3e
 
-VMOVMSKPD_128(reg)
+VHSUBPD_128(reg)
   before
     98947fe7b6a0dc6e.46f16186fb53e962.4fd7d0e2ab3bc271.62b96f389b2d19c0
     09ea3a68c06f92be.91b45628a540f40e.6212483587066f9b.32a279b1c33ffaf4
@@ -37239,12 +37239,12 @@
     0cef769c296d396c.94289a9ee9a1a983.de2fc42a686a693d.b5f1ec34159802f8
     1fef4c1679f79f20
   after
-    98947fe7b6a0dc6e.46f16186fb53e962.4fd7d0e2ab3bc271.62b96f389b2d19c0
+    0000000000000000.0000000000000000.4816457ee73c3dfb.e212483587066f9b
     09ea3a68c06f92be.91b45628a540f40e.6212483587066f9b.32a279b1c33ffaf4
     bcef39d55e2f48d9.b782408cebaba00a.c816457ee73c3dfb.af7079b737095fa3
     0cef769c296d396c.94289a9ee9a1a983.de2fc42a686a693d.b5f1ec34159802f8
-    0000000000000003
-VMOVMSKPD_128(mem)
+    1fef4c1679f79f20
+VHSUBPD_128(mem)
   before
     cb3817487e32f446.5736ef27bfb4a222.0372e14ab92ccba4.01a9c0a6a51b2f0c
     9496c9b64056bb97.f80f9fe4bc91bfa9.e22b8f7c7a5ac19a.8bcf345d3bdbcb15
@@ -37254,11 +37254,11 @@
   after
     cb3817487e32f446.5736ef27bfb4a222.0372e14ab92ccba4.01a9c0a6a51b2f0c
     9496c9b64056bb97.f80f9fe4bc91bfa9.e22b8f7c7a5ac19a.8bcf345d3bdbcb15
-    55d6dc4bdc6eb13e.4bc8823eba8fccaa.0b21222145374891.d9ef1fbac5377803
+    0000000000000000.0000000000000000.8372e14ab85ec66f.622b8f7c7a5ac19a
     ecc3cef56e869169.abab95a0583a04d4.5c1e152338cd1cb4.47537a2be0ba7383
     3248421b27f0f741
 
-VMOVMSKPD_128(reg)
+VHSUBPD_128(reg)
   before
     f41a74f6366642e8.332b19a010ab1841.7605d278301ea4d1.b0efe4706f2bf830
     ea150b28aba78e25.08d93b36e1e802f5.07223731dec8e84d.e2600cf2055a9931
@@ -37266,12 +37266,12 @@
     e2b5594230bb1b0f.c835f2d67adcef9b.ead467f72e9c4a75.5452534ac0601a70
     4c6b6cf71c4e7106
   after
-    f41a74f6366642e8.332b19a010ab1841.7605d278301ea4d1.b0efe4706f2bf830
+    0000000000000000.0000000000000000.d03d08971768bbe2.e2600cf2055a9931
     ea150b28aba78e25.08d93b36e1e802f5.07223731dec8e84d.e2600cf2055a9931
     7085031d1f3f17a3.4598b0a4fb4a0bae.b94ebf38ffc40bf5.d03d08971768bbe2
     e2b5594230bb1b0f.c835f2d67adcef9b.ead467f72e9c4a75.5452534ac0601a70
-    0000000000000002
-VMOVMSKPD_128(mem)
+    4c6b6cf71c4e7106
+VHSUBPD_128(mem)
   before
     9253cc8a483f7dd1.9cf308017aa6d415.6b7c7fb97baa69e6.f40229db08dee178
     03d7f0ef603efafc.fa890bc7988d7f60.0b39d23819c036bc.3522035128150cab
@@ -37281,11 +37281,11 @@
   after
     9253cc8a483f7dd1.9cf308017aa6d415.6b7c7fb97baa69e6.f40229db08dee178
     03d7f0ef603efafc.fa890bc7988d7f60.0b39d23819c036bc.3522035128150cab
-    7cc355127f58a3b4.58c4600126fa589d.8538673e712b1148.0781f0c32bce06ba
+    0000000000000000.0000000000000000.f40229db08dee178.3522035128150cab
     d7e376e0c1983525.12f0031ac17c9a77.b344bab99ef6b8b7.c86bec9fac940c50
     d22cf44f48f35a19
 
-VMOVMSKPD_256(reg)
+VHSUBPD_256(reg)
   before
     830f02419a782bc3.f103cf43430a6c7a.8458ee7d049c829b.722b4894bc2ee534
     356214e03eaebcf7.a6efdd2920ba04e0.0a4a1f988ce84cb5.9fb78cbbe8dd54ec
@@ -37293,12 +37293,12 @@
     108331d5ef5e0eb4.525a042a5d06458d.c1f840a3d9327579.aef1269dd9d6ecbc
     49377530d6378c2c
   after
-    830f02419a782bc3.f103cf43430a6c7a.8458ee7d049c829b.722b4894bc2ee534
+    d3721a7c75b5b882.b56214e03eaebcf7.14b5021a3e12c30b.9fb78cbbe8dd54ec
     356214e03eaebcf7.a6efdd2920ba04e0.0a4a1f988ce84cb5.9fb78cbbe8dd54ec
     456f2598d2214964.d3721a7c75b5b882.001091d6f4eb3370.14b5021a3e12c30b
     108331d5ef5e0eb4.525a042a5d06458d.c1f840a3d9327579.aef1269dd9d6ecbc
-    0000000000000003
-VMOVMSKPD_256(mem)
+    49377530d6378c2c
+VHSUBPD_256(mem)
   before
     c15269c050405f86.f0ea350333f04694.0071161ef5ba672d.ab4c296bd6474c7b
     f210803763fe20f7.42f02c8f39632eaf.b984cd4458dcda8d.1959469b88b9f423
@@ -37308,11 +37308,11 @@
   after
     c15269c050405f86.f0ea350333f04694.0071161ef5ba672d.ab4c296bd6474c7b
     f210803763fe20f7.42f02c8f39632eaf.b984cd4458dcda8d.1959469b88b9f423
-    b93b35832c7c8cab.62e112e39e4402b2.595fa387a37859da.676b959d8a11ab1d
+    f0ea350333f04694.7210803763fe20f7.ab4c296bd6474c7b.3984cd4458dcda8d
     f0a0058ec6c65fcd.ac09e36dfe1efd48.bcce16d6f19ba13f.f0cd11de79ddab14
     12cdb6cbf0a831b4
 
-VMOVMSKPD_256(reg)
+VHSUBPD_256(reg)
   before
     28b581cf8cff78ab.740b6a464ee9548a.7db39b97f47d5d1e.be9ca11a5f506de9
     8dd26c55e86dbea3.2148e296dff0280d.2f2c37cf1cee5be0.3b97c04008a37b04
@@ -37320,12 +37320,12 @@
     b8db989c51be3147.6567f8ae8eda5d18.a9bb0815743328d6.163fabe37c54483b
     2c856f3780cb7faf
   after
-    28b581cf8cff78ab.740b6a464ee9548a.7db39b97f47d5d1e.be9ca11a5f506de9
+    d223e86a96e79783.2148e296dff0280d.9fc0b28013fc3639.3b97c04008a37b04
     8dd26c55e86dbea3.2148e296dff0280d.2f2c37cf1cee5be0.3b97c04008a37b04
     9f7075cba07e3d48.d223e86a96e79783.1fc0b28013fc3639.0f89ef3408a085bb
     b8db989c51be3147.6567f8ae8eda5d18.a9bb0815743328d6.163fabe37c54483b
-    000000000000000a
-VMOVMSKPD_256(mem)
+    2c856f3780cb7faf
+VHSUBPD_256(mem)
   before
     2d27b71e2f0fe744.365fcf3497bad84c.b5e28f4ee4d635f7.296935fcdc206f62
     f5f0ff83a52e3c26.734718ff0dfe6c02.9e5e2736b3e7dc4d.fb1635a0e64e448a
@@ -37335,11 +37335,11 @@
   after
     2d27b71e2f0fe744.365fcf3497bad84c.b5e28f4ee4d635f7.296935fcdc206f62
     f5f0ff83a52e3c26.734718ff0dfe6c02.9e5e2736b3e7dc4d.fb1635a0e64e448a
-    5faec451ff343a80.cde16d694f142a16.fca83e5218170e45.7b0d056d2f4ae6fa
+    365fcf3497bad84c.75f0ff83a52e3f09.35e28f4ee4d635f7.fb1635a0e64e448a
     492b8076592b9c7f.9e77ccdefa8a4d33.ab8c4f8e2e74870c.059ba0d0529f8f5d
     f40d0233ebd97c60
 
-VMOVMSKPD_256(reg)
+VHSUBPD_256(reg)
   before
     a6ac27039784e9ae.8e34b1ddcd211f4e.435631cba9ec1307.86d5d6d7120a02ce
     76c70cadf22d11f4.0a95d2727a227f1a.19ca969af9c4b63b.6b515017dfe33cb6
@@ -37347,12 +37347,12 @@
     e09e033b22a78517.168fd5d7e971c558.c3a05592ea0c8579.bf0e0a31a594dcaa
     e7e742e2d783ba0e
   after
-    a6ac27039784e9ae.8e34b1ddcd211f4e.435631cba9ec1307.86d5d6d7120a02ce
+    40a9ac9b975f31dd.f6c70cadf22d11f4.fa1ff9b985a0727d.6b515017dfe33cb6
     76c70cadf22d11f4.0a95d2727a227f1a.19ca969af9c4b63b.6b515017dfe33cb6
     c0a9ac9b975f31dd.981a60227938780f.7a1ff9b985a0727d.35ca383cb10df1f0
     e09e033b22a78517.168fd5d7e971c558.c3a05592ea0c8579.bf0e0a31a594dcaa
-    000000000000000b
-VMOVMSKPD_256(mem)
+    e7e742e2d783ba0e
+VHSUBPD_256(mem)
   before
     88225c3b62e64748.31f10df83090484b.5fbfaf7ee3d92321.519ba693c39229db
     7d8bd52862c93f85.11efc63e5da6b828.4e786904867b4e98.7e5ae827adc09b4e
@@ -37362,11 +37362,11 @@
   after
     88225c3b62e64748.31f10df83090484b.5fbfaf7ee3d92321.519ba693c39229db
     7d8bd52862c93f85.11efc63e5da6b828.4e786904867b4e98.7e5ae827adc09b4e
-    a4ed2895f4395df1.dbe42b7944750f58.c1847f53eb6301e7.a72a18ba4322177e
+    31f10df83090484b.fd8bd52862c93f85.dfbfaf7ee3d92321.7e5ae827adc09b4e
     d716d16e33415eb7.ea1c3715818a8987.92b06e59309df93a.285730b82242d819
     5d2d2e8de5ae1bc8
 
-VMOVMSKPS_128(reg)
+VEXTRACTPS_0x0(reg)
   before
     a2f80ea529f21c3a.f4d04c9f3cedfe04.9ce3e67eb1706462.9fc8b0017136f2be
     5303ca6c89991619.d5e816152b4af804.4c8434206fb4da95.c298c337c939a89f
@@ -37378,8 +37378,8 @@
     5303ca6c89991619.d5e816152b4af804.4c8434206fb4da95.c298c337c939a89f
     cc9b604fa12f4611.582aa9ba1a6309e2.554d1e6858e128cb.d9eb22e755b2d608
     690dcab80e40e8d0.5762837c2845edca.15889fc0078389b1.be8f4afd30ae3926
-    0000000000000002
-VMOVMSKPS_128(mem)
+    00000000c939a89f
+VEXTRACTPS_0x0(mem)
   before
     66f5e10b445d8d2f.86a307156b5938ff.af5c1f456efb60ea.e682b39519273bf3
     e05049dbb528f673.7fa910d15505714d.3de3fa030a911d6b.268756542958783c
@@ -37387,13 +37387,13 @@
     6d51beaaf2e0f354.753a7a153f4791f0.66cc590bb38e6847.5ee23a3db5928595
     10cf733f68b3cdfc
   after
-    66f5e10b445d8d2f.86a307156b5938ff.af5c1f456efb60ea.e682b39519273bf3
+    66f5e10b445d8d2f.86a307156b5938ff.af5c1f456efb60ea.e682b3952958783c
     e05049dbb528f673.7fa910d15505714d.3de3fa030a911d6b.268756542958783c
     992b69c2e6a5841b.b06de25768d0d064.dbc58ea11813e17c.2fe38468d4a27c38
     6d51beaaf2e0f354.753a7a153f4791f0.66cc590bb38e6847.5ee23a3db5928595
     10cf733f68b3cdfc
 
-VMOVMSKPS_128(reg)
+VEXTRACTPS_0x0(reg)
   before
     9ff72bda8a91911c.3990c281f6e6fe4a.2a5bd37676f5f09e.bac5d62df80d6df9
     68a75e7ab7b90c9f.d7b2f3310ec26228.2b1de9e6aa67281a.b47c81f3029dadbd
@@ -37405,8 +37405,8 @@
     68a75e7ab7b90c9f.d7b2f3310ec26228.2b1de9e6aa67281a.b47c81f3029dadbd
     c829098b8ab67c32.2484cca85481db1a.d3cdb9d176287610.2ebdd749ed49e4c0
     19ca26799f141b80.fcd3cad1e72e254d.80b53da477c4162a.0553531cd61dce2d
-    0000000000000009
-VMOVMSKPS_128(mem)
+    00000000029dadbd
+VEXTRACTPS_0x0(mem)
   before
     3ab2ade5116ea9f8.b8d5b3b093602636.3b686798e0d5fbed.8d2173c948c74317
     501283b39a0413ad.0198ab9d0225d8ff.bd1221e95d831a26.565f56ad85be3a81
@@ -37414,13 +37414,13 @@
     bf30eec111438b93.0171cd45be4b247d.fad1d9da52212210.8b7d1463b6b6767e
     aff5e70de1cf3269
   after
-    3ab2ade5116ea9f8.b8d5b3b093602636.3b686798e0d5fbed.8d2173c948c74317
+    3ab2ade5116ea9f8.b8d5b3b093602636.3b686798e0d5fbed.8d2173c985be3a81
     501283b39a0413ad.0198ab9d0225d8ff.bd1221e95d831a26.565f56ad85be3a81
     33f870ae91f1207d.505d0baa87ef6e88.5e9c73b07a433d23.36b9e2bdcc353715
     bf30eec111438b93.0171cd45be4b247d.fad1d9da52212210.8b7d1463b6b6767e
     aff5e70de1cf3269
 
-VMOVMSKPS_128(reg)
+VEXTRACTPS_0x0(reg)
   before
     006e5726e90ba882.d0867bd83705111c.7121efd944c43689.6d7ecf51022a831a
     d934601a69f71474.42c593df1e446e44.fab66cd2b4e6df59.936fd202a5691d6d
@@ -37432,8 +37432,8 @@
     d934601a69f71474.42c593df1e446e44.fab66cd2b4e6df59.936fd202a5691d6d
     9592fe55fd1eb1eb.f1bbb0c2e30b5d36.f97f409cab3e5c98.48705dda57eaab35
     92d62e43420cbc95.b932506da1669b1e.cac768a3c457e9f3.684decc435b9ea9d
-    000000000000000c
-VMOVMSKPS_128(mem)
+    00000000a5691d6d
+VEXTRACTPS_0x0(mem)
   before
     58ca067de3746bfe.2a4aea50d44e711b.75f7edcc7562e42a.c8d9df539cbec216
     e1038a25ec762450.ba3c30e84d6f0c2c.03d606cb7a0af384.5103a118cefe22ac
@@ -37441,13 +37441,13 @@
     6063eaa7eb033511.33c5486a6b7fe29a.0211945a898f57d3.71caf692b13969e3
     c000821e9b4dc9dc
   after
-    58ca067de3746bfe.2a4aea50d44e711b.75f7edcc7562e42a.c8d9df539cbec216
+    58ca067de3746bfe.2a4aea50d44e711b.75f7edcc7562e42a.c8d9df53cefe22ac
     e1038a25ec762450.ba3c30e84d6f0c2c.03d606cb7a0af384.5103a118cefe22ac
     4547028f90f77ef2.9ff6fc784cfbc872.3e9a1457cc6a8658.c08faa5ef6a34662
     6063eaa7eb033511.33c5486a6b7fe29a.0211945a898f57d3.71caf692b13969e3
     c000821e9b4dc9dc
 
-VMOVMSKPS_256(reg)
+VEXTRACTPS_0x1(reg)
   before
     097c48704f6aa0f8.0d23bf591aa505d9.d3f4122c4686964f.2a0503c2ca842221
     a88c46f2691d2be5.2a52fb9238e9a975.dcd155287a9c1f3e.9444dc7aad56a56d
@@ -37459,8 +37459,8 @@
     a88c46f2691d2be5.2a52fb9238e9a975.dcd155287a9c1f3e.9444dc7aad56a56d
     f87a781286f0a54c.92be1c3c62dbde12.a8a60dcca24eba12.1b989b6e4e0f9ae4
     5793d83b42724bdc.20319d44b38860db.94c136835b27a378.9acebd8ac8bdbeb2
-    000000000000001b
-VMOVMSKPS_256(mem)
+    000000009444dc7a
+VEXTRACTPS_0x1(mem)
   before
     f40f16eab8268101.202364d9382c593e.b278fa9747fbeafd.fc6ccdb940b3161c
     87b3460666fa99da.ae76175804ac0b21.225fb0203c4039a3.3cf4ccdaed7f4ea9
@@ -37468,13 +37468,13 @@
     c3fb19b3bb19e2cc.8d95e2aa902c4a15.103d1383b272162e.b5caf88d12040030
     a5b11bf7c1d6f182
   after
-    f40f16eab8268101.202364d9382c593e.b278fa9747fbeafd.fc6ccdb940b3161c
+    f40f16eab8268101.202364d9382c593e.b278fa9747fbeafd.fc6ccdb93cf4ccda
     87b3460666fa99da.ae76175804ac0b21.225fb0203c4039a3.3cf4ccdaed7f4ea9
     8268c8fa5ef1d0ba.5fd8ed24437d9d2f.4eb239caab6409fa.b1a53152ff1688cc
     c3fb19b3bb19e2cc.8d95e2aa902c4a15.103d1383b272162e.b5caf88d12040030
     a5b11bf7c1d6f182
 
-VMOVMSKPS_256(reg)
+VEXTRACTPS_0x1(reg)
   before
     dda498fda817996e.2438b41b9a7d8a3d.96f8f35488444f7e.46ccb9366d771b6a
     b9f06a096453329f.83eb152016298539.d44e1a8fc651e717.ca2aa8cff77dd5db
@@ -37486,8 +37486,8 @@
     b9f06a096453329f.83eb152016298539.d44e1a8fc651e717.ca2aa8cff77dd5db
     95e18d899117f8c2.bae0b8ac4c2a8eeb.a5e355c8e7e04f8b.79245a3a6c9300ad
     cdc3fde7caee2982.a6e219ad578b6380.63039f69867cc388.30874d64e9c2570b
-    00000000000000e5
-VMOVMSKPS_256(mem)
+    00000000ca2aa8cf
+VEXTRACTPS_0x1(mem)
   before
     21b2e3a069a07c1d.bde2b791ab65ff8c.24bfb50e5459be24.6cfaf5e040b17fb7
     14147f8ca567c228.c08ab5f2d107b68c.0e4107bb5e9f5b02.1a145198b00cbfc6
@@ -37495,13 +37495,13 @@
     3c6bc2999edf5f22.74a372895afcbb1c.9967bda90ac34f1e.d9e0107b2361b934
     a12a6b7e5f74ebea
   after
-    21b2e3a069a07c1d.bde2b791ab65ff8c.24bfb50e5459be24.6cfaf5e040b17fb7
+    21b2e3a069a07c1d.bde2b791ab65ff8c.24bfb50e5459be24.6cfaf5e01a145198
     14147f8ca567c228.c08ab5f2d107b68c.0e4107bb5e9f5b02.1a145198b00cbfc6
     7f0d4ae557772471.3406f576d7608c2d.41358ba09169f846.cb9cb1fd7218be61
     3c6bc2999edf5f22.74a372895afcbb1c.9967bda90ac34f1e.d9e0107b2361b934
     a12a6b7e5f74ebea
 
-VMOVMSKPS_256(reg)
+VEXTRACTPS_0x1(reg)
   before
     7fc7bc72c1dc922f.28f8629393a82f67.dcad2997f5688004.f2a319c2e5ba1db3
     d00301c3e525e8b1.1f81a6bf55e0506e.c870140c452f1792.28b41cd83d5a1d34
@@ -37513,8 +37513,8 @@
     d00301c3e525e8b1.1f81a6bf55e0506e.c870140c452f1792.28b41cd83d5a1d34
     ee2a35de68dc291a.fdd20b09fd927d60.93383155e5debb71.186841d52ead0dcb
     3687542de68c9316.9eb70c5daacb736c.9b517bdc7200a94f.9c8904a7d5c1a7a4
-    000000000000007b
-VMOVMSKPS_256(mem)
+    0000000028b41cd8
+VEXTRACTPS_0x1(mem)
   before
     d3455576b35acbcf.04675a1ef9c16052.defb25a77596edbc.3b06ef0f87211dd5
     3e78db4c23f7cd79.b417441b4008cd7a.996cd2d37cffa97c.cea48758c1ce53b2
@@ -37522,13 +37522,13 @@
     fe830d708e0e5ecf.2a12b1eed4f9763c.f000d982adddd2ff.41cc18e111f9f31b
     d9ed08f8608fd600
   after
-    d3455576b35acbcf.04675a1ef9c16052.defb25a77596edbc.3b06ef0f87211dd5
+    d3455576b35acbcf.04675a1ef9c16052.defb25a77596edbc.3b06ef0fcea48758
     3e78db4c23f7cd79.b417441b4008cd7a.996cd2d37cffa97c.cea48758c1ce53b2
     ae49efa6b8846a15.a2e10d9255ec1639.abd48fcddb1361da.b2784125bb91868f
     fe830d708e0e5ecf.2a12b1eed4f9763c.f000d982adddd2ff.41cc18e111f9f31b
     d9ed08f8608fd600
 
-VMOVNTPD_128(reg)
+VEXTRACTPS_0x2(reg)
   before
     d4260dd644e16aeb.0cf4b196c2a064d4.a8f62c9b5abc2a2e.44bc2bdc0e69b71a
     90c524e7587aec87.b36658046f463950.78d87b0582c06ebc.83d401c91bc4cd55
@@ -37540,8 +37540,8 @@
     90c524e7587aec87.b36658046f463950.78d87b0582c06ebc.83d401c91bc4cd55
     6714489738e79881.cfa67da6b10d996f.f6069898e8927d92.8913d734f0f9d0dc
     b760755281b3aa84.3c809c69a600405b.7eca81c02abc955b.32472909a8147cdc
-    593a74345f228c81
-VMOVNTPD_128(mem)
+    0000000082c06ebc
+VEXTRACTPS_0x2(mem)
   before
     dcb933a1322ebdf7.daf5a784ce6a5d3d.d6bf3137672be943.6c7131eae1cdefc3
     9690e23c3c44cb68.2d1fda9abc99ee58.7831b9fe129b5151.1c47a580ab4eca78
@@ -37549,13 +37549,13 @@
     1e7601ac67c06df2.d462351ee98c9962.49da8e2395774d91.32b0c5a4e7d5ef73
     4fda6a0a90f3b012
   after
-    dcb933a1322ebdf7.daf5a784ce6a5d3d.49da8e2395774d91.32b0c5a4e7d5ef73
+    dcb933a1322ebdf7.daf5a784ce6a5d3d.d6bf3137672be943.6c7131ea129b5151
     9690e23c3c44cb68.2d1fda9abc99ee58.7831b9fe129b5151.1c47a580ab4eca78
     628bfdf19a717203.0d2a0bfee6cb9980.00a0aea8c35b34b2.ea98d7f024cd6124
     1e7601ac67c06df2.d462351ee98c9962.49da8e2395774d91.32b0c5a4e7d5ef73
     4fda6a0a90f3b012
 
-VMOVNTPD_128(reg)
+VEXTRACTPS_0x2(reg)
   before
     9f63c28dbcb1e2ad.a51c6959c03d7962.df12546560692baa.2ea9d55aa4fc591b
     7d98ca98079ebff0.d24bb1e5c0f5527e.8a87643fe8ed8b03.8ddafd390df5147c
@@ -37567,8 +37567,8 @@
     7d98ca98079ebff0.d24bb1e5c0f5527e.8a87643fe8ed8b03.8ddafd390df5147c
     44c37c990c438485.83cd553b84f3b373.320e62181ca4f519.403984acec6e3adf
     5231d6fb672e6d1b.926fd2462743596c.31f1495c991ba49a.2591e59f5b748670
-    16b09cfe7912b55d
-VMOVNTPD_128(mem)
+    00000000e8ed8b03
+VEXTRACTPS_0x2(mem)
   before
     f16025b5605583d0.022dd32bb5eab55c.ddfda2f4c5f20097.e47c1577faddd52f
     906efcb12c47abf5.af057093910499f5.3e4343307b0b641d.a7fdc2d5db77c487
@@ -37576,13 +37576,13 @@
     8ed48624e56efc08.747576bf657f25dd.b626e5029ead51f0.cd0db00b905fcb2a
     e834e9ba9bc75bcf
   after
-    f16025b5605583d0.022dd32bb5eab55c.b626e5029ead51f0.cd0db00b905fcb2a
+    f16025b5605583d0.022dd32bb5eab55c.ddfda2f4c5f20097.e47c15777b0b641d
     906efcb12c47abf5.af057093910499f5.3e4343307b0b641d.a7fdc2d5db77c487
     d1a69edcfaf7eaf9.b703a7a098075591.930c30e6659b402d.d6bf4ce2d973ad4c
     8ed48624e56efc08.747576bf657f25dd.b626e5029ead51f0.cd0db00b905fcb2a
     e834e9ba9bc75bcf
 
-VMOVNTPD_128(reg)
+VEXTRACTPS_0x2(reg)
   before
     8380f35d963698e4.a4c430730aba9d4d.44a5d85a95f94484.845bdf70424d5395
     fa3dca5e1e38c018.f04119b784e688f5.81e0c9dfc300ef34.da78991c6e870146
@@ -37594,8 +37594,8 @@
     fa3dca5e1e38c018.f04119b784e688f5.81e0c9dfc300ef34.da78991c6e870146
     a9b76b2bcf590d15.4c19bbdb6fff7a2b.897245b88c206296.92498ff23e681830
     ec39d02f4326bc87.951694cbe90f2f1c.b6a649538be5d858.899a3ddfcdfb547e
-    9c371fcd374d715d
-VMOVNTPD_128(mem)
+    00000000c300ef34
+VEXTRACTPS_0x2(mem)
   before
     a5ebb2aa99692af8.1f11f7d6192a081b.a8051f730b2562f4.65cad01b5cdc8e26
     818371610e5b3c7c.9d89db8cebf22e7d.5fb2d8bff34ad0de.f328d67c9c91c0ac
@@ -37603,13 +37603,13 @@
     2290630ca3f25bee.ef8cccd5f3fbf859.2c75c5f484f64d9a.17c550b9d861878d
     669cbc6e0b969442
   after
-    a5ebb2aa99692af8.1f11f7d6192a081b.2c75c5f484f64d9a.17c550b9d861878d
+    a5ebb2aa99692af8.1f11f7d6192a081b.a8051f730b2562f4.65cad01bf34ad0de
     818371610e5b3c7c.9d89db8cebf22e7d.5fb2d8bff34ad0de.f328d67c9c91c0ac
     0cccd8ddb32f6315.c4ee79bd55096a58.97e93c9cbd8c3507.ba0d57e2e78eaa95
     2290630ca3f25bee.ef8cccd5f3fbf859.2c75c5f484f64d9a.17c550b9d861878d
     669cbc6e0b969442
 
-VMOVNTPD_256(reg)
+VEXTRACTPS_0x3(reg)
   before
     04de966b1db80d5e.9f9b8fd9fbafdf34.7aafcf416354142c.fa24f1b46495d3c4
     4bd6dd1eaa532e8d.5fbbd630d673ac12.c0a2806b3ea1f97c.ddc03bc97a7484b1
@@ -37621,8 +37621,8 @@
     4bd6dd1eaa532e8d.5fbbd630d673ac12.c0a2806b3ea1f97c.ddc03bc97a7484b1
     98d28af14cf3327c.3ebbb6fd50497db5.1fb3dbc0226de3f6.b116201de19f1c8c
     471c9b52a22556d7.1866ab2d863d1049.f22cdaadab451045.52f21a9eb6235782
-    9c20a737140af0be
-VMOVNTPD_256(mem)
+    00000000c0a2806b
+VEXTRACTPS_0x3(mem)
   before
     6b6c42d41863a46d.b4010aac4674d549.c9892faa945c1ff9.945a7b9d74b4ba16
     9ba16761de372ebb.3bcdd56ad46ced7f.2df0c06295b167f2.6389b9fc1a461e14
@@ -37630,13 +37630,13 @@
     8efa40fb1c86b8e2.07496dc72089d3e5.7ebaf52fe12e906d.f41afcb66a05034a
     6e14faea4d49fdda
   after
-    8efa40fb1c86b8e2.07496dc72089d3e5.7ebaf52fe12e906d.f41afcb66a05034a
+    6b6c42d41863a46d.b4010aac4674d549.c9892faa945c1ff9.945a7b9d2df0c062
     9ba16761de372ebb.3bcdd56ad46ced7f.2df0c06295b167f2.6389b9fc1a461e14
     088d93ca80944cd3.38ccf8fae99ad824.2067d83fa548a35f.b9059035388878ed
     8efa40fb1c86b8e2.07496dc72089d3e5.7ebaf52fe12e906d.f41afcb66a05034a
     6e14faea4d49fdda
 
-VMOVNTPD_256(reg)
+VEXTRACTPS_0x3(reg)
   before
     853e853e7ce09f46.09b5ece0ce172f13.0492323d15c6196e.23b5931c656eea47
     93e5991c9457283d.548a1266b1556c93.8bf142c966dbe76a.eb232cf44c146d1b
@@ -37648,8 +37648,8 @@
     93e5991c9457283d.548a1266b1556c93.8bf142c966dbe76a.eb232cf44c146d1b
     f55532f1313ad269.4d442f77e24c2d8e.f8b399d5ac567985.b1d23ea2b22dd412
     08da4c2aed13da77.cfb1bd017c062c2f.a72433ce85c30b6d.538c4412b4c4dc5b
-    ac1eba306de54120
-VMOVNTPD_256(mem)
+    000000008bf142c9
+VEXTRACTPS_0x3(mem)
   before
     97541ce8fa9dbf8d.26c0e43167707c12.b59b3aee9b9125a3.f4900d218dadd8cc
     f2f9e72776f711cf.ac52f57438ddf4e7.ddd0212c5cf9d615.3a4322385fa01d4e
@@ -37657,13 +37657,13 @@
     64c4a5e6adc22481.61ae725a551354ed.5f461d48338d4ba5.26aded67d2d2ff6e
     83fc9b56ac291363
   after
-    64c4a5e6adc22481.61ae725a551354ed.5f461d48338d4ba5.26aded67d2d2ff6e
+    97541ce8fa9dbf8d.26c0e43167707c12.b59b3aee9b9125a3.f4900d21ddd0212c
     f2f9e72776f711cf.ac52f57438ddf4e7.ddd0212c5cf9d615.3a4322385fa01d4e
     98db96d7fefff412.f6de7b5effe47da1.221aeea6db49f9b2.d7886e81972816a0
     64c4a5e6adc22481.61ae725a551354ed.5f461d48338d4ba5.26aded67d2d2ff6e
     83fc9b56ac291363
 
-VMOVNTPD_256(reg)
+VEXTRACTPS_0x3(reg)
   before
     49c275bac0ba8f2c.3481903ea04b5c49.470fd7d6d9f6b477.72202bfe80d1871b
     d64b76ffaa10af75.e2ded3cdf2a75996.054da53d2418dbea.357393b4df226a40
@@ -37675,8 +37675,8 @@
     d64b76ffaa10af75.e2ded3cdf2a75996.054da53d2418dbea.357393b4df226a40
     84e39a9107b7aee9.4ca7eb7ebfe0d793.f7b4d8fbd40503f3.860dd1566c8bb03f
     b1d5dddc723cc935.4ca8533c2504926c.79906c7d8549683d.3fb861d041181545
-    3e41c00f7dd6557e
-VMOVNTPD_256(mem)
+    00000000054da53d
+VEXTRACTPS_0x3(mem)
   before
     5d7468fd39d02b15.b86f3c4d882a3c04.c0ad87f53d1f454f.e72c5d2dd2714875
     7a1dd78894135436.f4fbb24ee40d4303.82810394253cad66.9dd6a8785708dd47
@@ -37684,13 +37684,13 @@
     1900f82190a18eca.7f1cd3b4e0e3fb3f.64cac535d3ac8be1.517f39907cb41967
     0717773553e1370d
   after
-    1900f82190a18eca.7f1cd3b4e0e3fb3f.64cac535d3ac8be1.517f39907cb41967
+    5d7468fd39d02b15.b86f3c4d882a3c04.c0ad87f53d1f454f.e72c5d2d82810394
     7a1dd78894135436.f4fbb24ee40d4303.82810394253cad66.9dd6a8785708dd47
     6f08899ba7aa8b0f.c3c63a4c237219dd.6ff14405f96786dd.f7d848cbb19a645e
     1900f82190a18eca.7f1cd3b4e0e3fb3f.64cac535d3ac8be1.517f39907cb41967
     0717773553e1370d
 
-VMOVNTPS_128(reg)
+VLDDQU_128(reg)
   before
     75ecff25d2aefbfd.55d3a1086b041793.854976f1b8ef25d5.3bd6020ed218799e
     f749cbcc96a5a1e3.fd4b013b53e0e297.3298216f461fd24a.d1e1777d10b60c3f
@@ -37703,7 +37703,7 @@
     e97cd9963a55646a.ee3593a66540ad02.e057cf9a26013f4b.03b9a06fa99300f1
     a7cf25ef5b47823f.045dd435bc3132ff.ecd07cdef521a884.ab29facfbaba10df
     a6fc00885e37f936
-VMOVNTPS_128(mem)
+VLDDQU_128(mem)
   before
     d0ff2e88b2167722.8c8fa9439409350d.1b8f3ed574be2ebb.b35024a74f0949a0
     05fe00bad16446ce.f60863fe8226b981.10964f70aaf35c61.8f23c361cf475d4b
@@ -37711,13 +37711,13 @@
     00208164e27bc518.c654665aeba32809.ff57534bff86421e.f9f2d858b2f3d101
     4086456e4d79a864
   after
-    d0ff2e88b2167722.8c8fa9439409350d.ff57534bff86421e.f9f2d858b2f3d101
-    05fe00bad16446ce.f60863fe8226b981.10964f70aaf35c61.8f23c361cf475d4b
+    d0ff2e88b2167722.8c8fa9439409350d.1b8f3ed574be2ebb.b35024a74f0949a0
+    0000000000000000.0000000000000000.0d1b8f3ed574be2e.bbb35024a74f0949
     21c5f30ad82d2167.40864d8cc02b4c46.bd4082f37adc7a1e.dd95567811672133
     00208164e27bc518.c654665aeba32809.ff57534bff86421e.f9f2d858b2f3d101
     4086456e4d79a864
 
-VMOVNTPS_128(reg)
+VLDDQU_128(reg)
   before
     0c9c9a247f85e406.7eda28b40b5ced0e.e3c0a7d29e1a8a76.b2a83e6255fd718c
     ba81d1e8e4a2be94.77c163e671db5775.f5140d62751cad39.b2ffc026994bc295
@@ -37730,7 +37730,7 @@
     a681e825165c75b9.c79fafe72d05bd78.569d95750e36cffc.db285382e67ef264
     2ce8da47b43f4322.4a4186a15de5dc44.64a73a7602f32a6e.09ef756259a1bd26
     181fa2b20dc1df07
-VMOVNTPS_128(mem)
+VLDDQU_128(mem)
   before
     e386545e1fe91332.a802a3ba57d8657a.dc7366021d876f04.797ef8d3efe0fa39
     48ee0952aa2516d4.761b40ea9eb2176e.5901caf488f833e5.f36ecbf771887d0a
@@ -37738,13 +37738,13 @@
     4df469c39d0b792b.7878e231815a1ad9.84600f40d0743eb9.82c8a244a13a876c
     4fca9d46885c8655
   after
-    e386545e1fe91332.a802a3ba57d8657a.84600f40d0743eb9.82c8a244a13a876c
-    48ee0952aa2516d4.761b40ea9eb2176e.5901caf488f833e5.f36ecbf771887d0a
+    e386545e1fe91332.a802a3ba57d8657a.dc7366021d876f04.797ef8d3efe0fa39
+    0000000000000000.0000000000000000.7adc7366021d876f.04797ef8d3efe0fa
     22243c7acb82a418.f27eab43225995a9.9db62f65ba43e413.2cc2b04e2277ed8c
     4df469c39d0b792b.7878e231815a1ad9.84600f40d0743eb9.82c8a244a13a876c
     4fca9d46885c8655
 
-VMOVNTPS_128(reg)
+VLDDQU_128(reg)
   before
     f1159dbe736928f4.a5290c173dcc5038.6456e1205740e3a7.e9c9e871e598fc04
     c2f59e1affeea7f5.0591a164c6d2e66d.1262a27d3f982cc2.aabe35e416badb1f
@@ -37757,7 +37757,7 @@
     1fb69dc4c7763f03.4bf6a5945428f7f3.dde822b2d6ed30d4.a20b72857ee69737
     65a3952a688d2ecb.5226939504da3ef9.23365e2db7cb2c89.ad7c1b403a29ec77
     a6ddad01658e950c
-VMOVNTPS_128(mem)
+VLDDQU_128(mem)
   before
     6bf9a3b51c214f22.ee0a82b67dc0aef9.f5ebe752f2f578a9.3f9751587ebe5c8e
     d69e79467aefd6e5.173561d6a39afc38.12121eb73984612f.8d56f7a1c853fb8f
@@ -37765,13 +37765,13 @@
     12aeb5b39d6a391f.b90ae17f9074f19a.26b52129432f2f70.2e214e3a53917a33
     3ac5f562cd52d02f
   after
-    6bf9a3b51c214f22.ee0a82b67dc0aef9.26b52129432f2f70.2e214e3a53917a33
-    d69e79467aefd6e5.173561d6a39afc38.12121eb73984612f.8d56f7a1c853fb8f
+    6bf9a3b51c214f22.ee0a82b67dc0aef9.f5ebe752f2f578a9.3f9751587ebe5c8e
+    0000000000000000.0000000000000000.f9f5ebe752f2f578.a93f9751587ebe5c
     c596aba29c03e57f.3c712cf575a75334.8367b2b0f594b5b8.68c04d7331154737
     12aeb5b39d6a391f.b90ae17f9074f19a.26b52129432f2f70.2e214e3a53917a33
     3ac5f562cd52d02f
 
-VMOVNTPS_256(reg)
+VLDDQU_256(reg)
   before
     e7f8415739e487d6.9bb214679a2e8eef.ea4c7be08f8c1016.d6cae60e3e648c82
     93052b8633d4d9d5.3a6e43a9ae5ea01c.2c83f6850e7bed54.6e707e4c033c881b
@@ -37784,7 +37784,7 @@
     983ab05958ad03d7.cdadbe65f5032ad1.d9fa4ed8aacec3ff.cb7463cdadc5de66
     54e1cd3d43fb4089.2e3d01878c2be93b.4efe8046ff10cfc3.caa2137e590a4b91
     45c6094c22178bc5
-VMOVNTPS_256(mem)
+VLDDQU_256(mem)
   before
     1aacc12225f95a30.21477d9f914ace96.3be889fb8fe19985.e7dc873ca8ce4d4d
     231fb7eb7dbb73fe.5db8bce9dd27e7ab.ce7bd1ad1931f5dc.00de5f2441927949
@@ -37792,13 +37792,13 @@
     44e04f0b9e117672.8eebd8eae1b9ac9c.f989917c33d1a460.2180737fb562c946
     e2b9a7c9c885669e
   after
-    44e04f0b9e117672.8eebd8eae1b9ac9c.f989917c33d1a460.2180737fb562c946
-    231fb7eb7dbb73fe.5db8bce9dd27e7ab.ce7bd1ad1931f5dc.00de5f2441927949
+    1aacc12225f95a30.21477d9f914ace96.3be889fb8fe19985.e7dc873ca8ce4d4d
+    491aacc12225f95a.3021477d9f914ace.963be889fb8fe199.85e7dc873ca8ce4d
     3ded6895476a935b.62808789c31ec774.c4c2558a4628ba6c.f551046c67eb8e63
     44e04f0b9e117672.8eebd8eae1b9ac9c.f989917c33d1a460.2180737fb562c946
     e2b9a7c9c885669e
 
-VMOVNTPS_256(reg)
+VLDDQU_256(reg)
   before
     93469cb53cdfa118.15c5e8399ebcd76f.3b44ad78d086d0d0.4a9c0171fb396fe5
     90754eb2abfdb560.8a68af0b64777380.c6d9019f2e1170bc.91c62253bb6bd626
@@ -37811,7 +37811,7 @@
     3590b929b469df21.8095206e0c4f06ce.8cf4d1cb97e4c70b.abd46f108e739650
     dde4da87f0b25b08.d317b84cb1504c88.e7e21768a68d1369.74936493915e6b8f
     c8cd7dc7df37110e
-VMOVNTPS_256(mem)
+VLDDQU_256(mem)
   before
     834e369a950a43fa.e6bcac38fe6164c1.5fbcf2926f8400d8.34efd1e2f7988e84
     81e40cf7cee3be7f.ab662ba9770437f7.004e4a2d63f9dfea.cf66faa6278f7505
@@ -37819,13 +37819,13 @@
     b67bfc003bda7e01.d85c207720542a8c.f16c450e5cd40e07.60c689b8927775f0
     0d47e8de067e07b0
   after
-    b67bfc003bda7e01.d85c207720542a8c.f16c450e5cd40e07.60c689b8927775f0
-    81e40cf7cee3be7f.ab662ba9770437f7.004e4a2d63f9dfea.cf66faa6278f7505
+    834e369a950a43fa.e6bcac38fe6164c1.5fbcf2926f8400d8.34efd1e2f7988e84
+    05834e369a950a43.fae6bcac38fe6164.c15fbcf2926f8400.d834efd1e2f7988e
     9e5a7acba7cf3dc7.872c5344f9261057.929a3c08a9baa5ec.14958e1ed100039b
     b67bfc003bda7e01.d85c207720542a8c.f16c450e5cd40e07.60c689b8927775f0
     0d47e8de067e07b0
 
-VMOVNTPS_256(reg)
+VLDDQU_256(reg)
   before
     7862a6fec7a4f589.a5140f83a60e3b57.f9408fac8719c343.f990e02d9852d56a
     fd64bf8374727a24.47f22d41057931f6.45259b51ca011527.86d289507a40b73f
@@ -37838,7 +37838,7 @@
     f8982fd9a676d330.78ded42474261b09.1a5740d186985ce5.74fdbc631dab6fb2
     c54cf26cfc3b3c57.14a77f1a0e22b6bd.d2227b98576bd629.9fdff5529e9ebbf1
     e342b10918255525
-VMOVNTPS_256(mem)
+VLDDQU_256(mem)
   before
     1cf36b74a74dfa7d.c0ca05a80f4df145.f718aa0eef78be3e.cbd14612d806bd9e
     25be9f8069216523.456063f97d392da8.fdfcd2eb3434efb7.5fb19faba5f34ef1
@@ -37846,13 +37846,13 @@
     1cd16627effe810a.5cfff08bd9cd2c77.e15106155810ba43.cc35e8eb95f95de0
     5c70d169f02853d3
   after
-    1cd16627effe810a.5cfff08bd9cd2c77.e15106155810ba43.cc35e8eb95f95de0
-    25be9f8069216523.456063f97d392da8.fdfcd2eb3434efb7.5fb19faba5f34ef1
+    1cf36b74a74dfa7d.c0ca05a80f4df145.f718aa0eef78be3e.cbd14612d806bd9e
+    f11cf36b74a74dfa.7dc0ca05a80f4df1.45f718aa0eef78be.3ecbd14612d806bd
     dc6fc91777ad5443.b05808cce28a2d29.0121729ff8630455.ec0f81d05bc0c4ce
     1cd16627effe810a.5cfff08bd9cd2c77.e15106155810ba43.cc35e8eb95f95de0
     5c70d169f02853d3
 
-VPACKSSWB_128(reg)
+VMAXPS_256(reg)
   before
     f90b36b708dbe355.c1b2f19aed1fa8a4.a7a118a4ff8d683c.78590a397047cdae
     fd541540779e4810.a6dce65e8c1c873c.ec897b81ef561b24.a205faf85a15f9c2
@@ -37860,12 +37860,12 @@
     ad1c2fb2d08084e2.a43efe861edc5819.d35fe23c9e34d810.1e788ff21aa48a92
     28d72c07287c68a8
   after
-    0000000000000000.0000000000000000.807f7f807f7f7f80.807f807f80807f80
+    ad1c2fb2779e4810.a43efe861edc5819.d35fe23c9e34d810.1e788ff25a15f9c2
     fd541540779e4810.a6dce65e8c1c873c.ec897b81ef561b24.a205faf85a15f9c2
     c595696fdcfbbfb0.a91cc15ee802d8ff.8705159045b482dc.3a20533c3585f9aa
     ad1c2fb2d08084e2.a43efe861edc5819.d35fe23c9e34d810.1e788ff21aa48a92
     28d72c07287c68a8
-VPACKSSWB_128(mem)
+VMAXPS_256(mem)
   before
     360aa665781b4e16.12336174f1b9d352.750e1ac24ab6c2b5.2ee4def095615a6b
     22de77fa288df908.4e27fd21db30e7ab.f75790fe879dd300.f3e1061ac7c8449a
@@ -37875,11 +37875,11 @@
   after
     360aa665781b4e16.12336174f1b9d352.750e1ac24ab6c2b5.2ee4def095615a6b
     22de77fa288df908.4e27fd21db30e7ab.f75790fe879dd300.f3e1061ac7c8449a
-    0000000000000000.0000000000000000.7f7f7f807f80807f.80808080807f807f
+    360aa665781b4e16.4e27fd21db30e7ab.750e1ac24ab6c2b5.2ee4def095615a6b
     0893137617178e2b.bed560ec780e51ca.7d887a27a5c0da51.2a6dc77e4b714023
     5596588fd4ccc9d5
 
-VPACKSSWB_128(reg)
+VMAXPS_256(reg)
   before
     596505c5088faa0a.ba0ed5348d47efb3.aa2820e3638c1ee8.3907e6ebbe1348af
     9427c98d82491e6f.ba58dfdad37a0570.de8738748679a2a0.16309d5f59a44c6c
@@ -37887,12 +37887,12 @@
     1bb5867fbacbb277.188dbc863e173f38.8e9c6518e7d1b98c.a4b0d90983a908b2
     0c9e57164a363993
   after
-    0000000000000000.0000000000000000.80807f7f807f8080.807f80807f807f7f
+    1bb5867f82491e6f.188dbc863e173f38.8e9c65188679a2a0.16309d5f59a44c6c
     9427c98d82491e6f.ba58dfdad37a0570.de8738748679a2a0.16309d5f59a44c6c
     6029a051df8362af.e63fae5105bb8c8d.b63fa60d7e61179d.f1cf1a70917ca3b4
     1bb5867fbacbb277.188dbc863e173f38.8e9c6518e7d1b98c.a4b0d90983a908b2
     0c9e57164a363993
-VPACKSSWB_128(mem)
+VMAXPS_256(mem)
   before
     06670e82022ff082.1f177781afad4a73.2d0f87659a98db9a.c2ea71035b54c618
     6cd57c3bc9a1e9ad.c99d70c55bb3664e.01908bdb364d1ce1.ae75c739797678ee
@@ -37902,11 +37902,11 @@
   after
     06670e82022ff082.1f177781afad4a73.2d0f87659a98db9a.c2ea71035b54c618
     6cd57c3bc9a1e9ad.c99d70c55bb3664e.01908bdb364d1ce1.ae75c739797678ee
-    0000000000000000.0000000000000000.7f808080807f7f80.7f807f7f80807f7f
+    6cd57c3b022ff082.1f1777815bb3664e.2d0f8765364d1ce1.ae75c739797678ee
     efd36a42ed1e9560.804167c047601854.57c42a389c7c7cce.1d713e351dc9bd27
     597a57d4dc12c8e1
 
-VPACKSSWB_128(reg)
+VMAXPS_256(reg)
   before
     bdf0a96eb32a6996.c5fbe3678441bf42.44f75d4fbf1f26d6.900dbdf79e0f13cb
     a51f31703f9ddcf0.77f80188980c1b0f.1f004bcf5d33a9e7.f8867afd50053f5c
@@ -37914,12 +37914,12 @@
     70d8d057e4c52644.e2a5216fa8cc5d17.853bfb537c8bf869.c5385a8b324745ed
     e20977eb9aab9745
   after
-    0000000000000000.0000000000000000.7f7f80807f808080.7f7f7f80807f7f7f
+    70d8d0573f9ddcf0.77f80188980c1b0f.1f004bcf7c8bf869.c5385a8b50053f5c
     a51f31703f9ddcf0.77f80188980c1b0f.1f004bcf5d33a9e7.f8867afd50053f5c
     6c53ea441bf75c9b.e2984292458c67f2.6ba82badbd29db35.6bfbda35cd69bcaf
     70d8d057e4c52644.e2a5216fa8cc5d17.853bfb537c8bf869.c5385a8b324745ed
     e20977eb9aab9745
-VPACKSSWB_128(mem)
+VMAXPS_256(mem)
   before
     9e39ac4122a26de1.0cf9df1635937697.53ec1b0ddcd8baab.c904b62f35e73e32
     d5967579e53885ed.9b0413ecaaeb883f.1139aa56febc39da.935159ab85c9e73a
@@ -37929,11 +37929,11 @@
   after
     9e39ac4122a26de1.0cf9df1635937697.53ec1b0ddcd8baab.c904b62f35e73e32
     d5967579e53885ed.9b0413ecaaeb883f.1139aa56febc39da.935159ab85c9e73a
-    0000000000000000.0000000000000000.7f7f808080807f7f.7f80807f807f8080
+    9e39ac4122a26de1.0cf9df1635937697.53ec1b0ddcd8baab.935159ab35e73e32
     2402b4408e6d6608.0703dc8c736ee041.e4157c9e7a3f90b8.2aa24338584b55b9
     ae3f831f14059187
 
-VPAVGB_128(reg)
+VMAXPD_128(reg)
   before
     288f9b58d5742146.f4aa22a7ab26a76f.9a90682ffeb19ff2.b13bb6740df4e0be
     f4dd854e3a2441a0.afae149f74ac19f6.92350a991daf0fa9.3b9877a6fcb2420f
@@ -37941,12 +37941,12 @@
     f1a7c42259781fd7.56f975f778558015.1cfb7c728a0df5d7.f5227acf64772f41
     dee8b59d1496327a
   after
-    0000000000000000.0000000000000000.6e3b636845d23e5d.4cc75863b19c5b73
+    0000000000000000.0000000000000000.1cfb7c728a0df5d7.3b9877a6fcb2420f
     f4dd854e3a2441a0.afae149f74ac19f6.92350a991daf0fa9.3b9877a6fcb2420f
     6e773f6ddca12c41.31d90616040d78c9.4940bc366df46d11.5df63920658573d7
     f1a7c42259781fd7.56f975f778558015.1cfb7c728a0df5d7.f5227acf64772f41
     dee8b59d1496327a
-VPAVGB_128(mem)
+VMAXPD_128(mem)
   before
     f414677792ee37ae.dbba10d74d34560b.fad8dc2eec8eec06.68b345b90f85e3a6
     12710a4af989fb08.87fc1ff953620d8c.f843b6a77ac679c7.87b5137898e8722b
@@ -37956,11 +37956,11 @@
   after
     f414677792ee37ae.dbba10d74d34560b.fad8dc2eec8eec06.68b345b90f85e3a6
     12710a4af989fb08.87fc1ff953620d8c.f843b6a77ac679c7.87b5137898e8722b
-    0000000000000000.0000000000000000.f98ec96bb3aab367.78b42c9954b7ab69
+    0000000000000000.0000000000000000.f843b6a77ac679c7.68b345b90f85e3a6
     dbf21887f3beafe0.953d77350741ea1f.77edb90f5b61e66c.b2c1af0a28a16606
     756575b5670e42b4
 
-VPAVGB_128(reg)
+VMAXPD_128(reg)
   before
     7c8130881a97b0c7.3cad7acabf6e17b6.afd3b827ec0a878a.aec4d8d6e4dc3da7
     2463ddeedec7eced.17cabfb5e4942e62.fac9ad36547595f1.b1565c90f986a563
@@ -37968,12 +37968,12 @@
     c2a4f923064dbd1b.a759de33aa6b58ef.98009f5b1b5fef61.87df81893494970c
     136d19a193109951
   after
-    0000000000000000.0000000000000000.e7997f82974172f8.86648e5cd778c097
+    0000000000000000.0000000000000000.98009f5b1b5fef61.87df81893494970c
     2463ddeedec7eced.17cabfb5e4942e62.fac9ad36547595f1.b1565c90f986a563
     c75576534e2a32cf.471561347e39b012.d46950ceda0d4eff.5a71c027b569dacb
     c2a4f923064dbd1b.a759de33aa6b58ef.98009f5b1b5fef61.87df81893494970c
     136d19a193109951
-VPAVGB_128(mem)
+VMAXPD_128(mem)
   before
     d9e7065aeeeb9cc7.719b61caa4bbca7d.1564b19e8435e328.a1da9549b3f6b4c3
     b619c3a260305c9a.3088aab4c10095a1.6b00566226a30de6.4d422e043c5ed8d0
@@ -37983,11 +37983,11 @@
   after
     d9e7065aeeeb9cc7.719b61caa4bbca7d.1564b19e8435e328.a1da9549b3f6b4c3
     b619c3a260305c9a.3088aab4c10095a1.6b00566226a30de6.4d422e043c5ed8d0
-    0000000000000000.0000000000000000.40328480556c7887.778e622778aac6ca
+    0000000000000000.0000000000000000.6b00566226a30de6.4d422e043c5ed8d0
     26d49d8cfb290105.4e70d002ee4154dc.431e08a1389d2ca8.faf03a9298d2309d
     b3cea43ca1f7dcb5
 
-VPAVGB_128(reg)
+VMAXPD_128(reg)
   before
     7f6aa2630c1cd728.71f5b3065bf55ff6.6503a53d3554c04c.7c380bf4e0419a03
     b811307477cf5ea3.42fe88be435c69f3.fcbb4b6c6c6fd92e.0f14d250c0b89794
@@ -37995,12 +37995,12 @@
     e5afe801b60dff60.eaf86499192874c3.1acafb521ceb06f6.ae4195cf9e552c0a
     742a89cbd3923d47
   after
-    0000000000000000.0000000000000000.b6d085b34e46db2e.7349d478db65bb8e
+    0000000000000000.0000000000000000.1acafb521ceb06f6.0f14d250c0b89794
     b811307477cf5ea3.42fe88be435c69f3.fcbb4b6c6c6fd92e.0f14d250c0b89794
     bc0f48da7b9badd2.76bb9aa1ce69dc28.6fe4bffa301ddd2e.d67dd6a0f611de88
     e5afe801b60dff60.eaf86499192874c3.1acafb521ceb06f6.ae4195cf9e552c0a
     742a89cbd3923d47
-VPAVGB_128(mem)
+VMAXPD_128(mem)
   before
     0205307fb2d3cc6b.913f0a55c4b091fa.7881639440a5eded.59b8fde2cd649135
     359e06d8562596a1.1a09ac4240109f4c.fd21117c5ded02d5.88fcc015de14b995
@@ -38010,11 +38010,11 @@
   after
     0205307fb2d3cc6b.913f0a55c4b091fa.7881639440a5eded.59b8fde2cd649135
     359e06d8562596a1.1a09ac4240109f4c.fd21117c5ded02d5.88fcc015de14b995
-    0000000000000000.0000000000000000.bb513a884fc978e1.71dadf7cd63ca565
+    0000000000000000.0000000000000000.7881639440a5eded.59b8fde2cd649135
     fa392b245e29cbf5.367e5e97f4391ec5.5cda6fc8ef0cf38a.25b17914924ad36a
     4cbb68b96de83d37
 
-VPAVGW_128(reg)
+VMAXPD_256(reg)
   before
     d34a08b018ee34d6.44d473f1fbf3ad6b.82c166d763190746.ee8a17039cfb47af
     15aa556630e7f6f2.a35cd911cdfebaa4.1b6fdd60b1e75c2d.e7825edcafe42741
@@ -38022,12 +38022,12 @@
     3f0be7c015e3c553.1066f0fe8105450d.a73b08fe587b39e4.7f79be187dd67d5a
     d510ce536ff66c3a
   after
-    0000000000000000.0000000000000000.3d21ce80958b5aab.8608908e7b5c3bd6
+    3f0be7c015e3c553.1066f0fe8105450d.1b6fdd60b1e75c2d.7f79be187dd67d5a
     15aa556630e7f6f2.a35cd911cdfebaa4.1b6fdd60b1e75c2d.e7825edcafe42741
     70264b48505fbc38.f39ed972f056aecb.5ed3bf9f792e5929.248dc23f46d4506b
     3f0be7c015e3c553.1066f0fe8105450d.a73b08fe587b39e4.7f79be187dd67d5a
     d510ce536ff66c3a
-VPAVGW_128(mem)
+VMAXPD_256(mem)
   before
     011f6edc3940d736.dda6233c1afd4bf0.d68098a39b193a95.52f1b5ebe958390a
     e1731ba0f6c17b7a.a841fd27fb3c8bba.21b84f4c5b9d4a90.bb42c1d1c9539449
@@ -38037,11 +38037,11 @@
   after
     011f6edc3940d736.dda6233c1afd4bf0.d68098a39b193a95.52f1b5ebe958390a
     e1731ba0f6c17b7a.a841fd27fb3c8bba.21b84f4c5b9d4a90.bb42c1d1c9539449
-    0000000000000000.0000000000000000.7c1c73f87b5b4293.871abbded95666aa
+    011f6edc3940d736.a841fd27fb3c8bba.21b84f4c5b9d4a90.52f1b5ebe958390a
     2a148985ba965c8e.31a979fac4522888.b6b1d85a3b27aa8e.37e5e638e4d24fbc
     02cef891576d2549
 
-VPAVGW_128(reg)
+VMAXPD_256(reg)
   before
     fb8358938955489d.4bfb427ffa0212b4.a70f12bae342fee3.b80aa297934472e9
     7e4e04aa1517f266.8f55f8639cd5f1d3.baa539994e867c1c.afb16a8901024566
@@ -38049,12 +38049,12 @@
     92592ec8ad57ce01.ef9647987ddc18ac.23941e657a3767d7.eb19e4378d8efb79
     e9718fcde3755566
   after
-    0000000000000000.0000000000000000.bfaf914e7898aefe.93928b5250b791cc
+    7e4e04aa1517f266.8f55f8639cd5f1d3.23941e657a3767d7.afb16a8901024566
     7e4e04aa1517f266.8f55f8639cd5f1d3.baa539994e867c1c.afb16a8901024566
     e77cf742983e604d.d2f0251cbf19b417.c4b8e903a2a9e1df.7772ac1aa06cde32
     92592ec8ad57ce01.ef9647987ddc18ac.23941e657a3767d7.eb19e4378d8efb79
     e9718fcde3755566
-VPAVGW_128(mem)
+VMAXPD_256(mem)
   before
     4c4827c7be2cab25.db31a3a6f0ec772c.c414d9c3f22ad9bc.3185d52973bd4bb0
     ef682a103bbfb8e4.1e50544aff8c987a.2c3658873b0db376.4bd709bd28c6c918
@@ -38064,11 +38064,11 @@
   after
     4c4827c7be2cab25.db31a3a6f0ec772c.c414d9c3f22ad9bc.3185d52973bd4bb0
     ef682a103bbfb8e4.1e50544aff8c987a.2c3658873b0db376.4bd709bd28c6c918
-    0000000000000000.0000000000000000.78259925969cc699.3eae6f734e428a64
+    4c4827c7be2cab25.1e50544aff8c987a.2c3658873b0db376.4bd709bd28c6c918
     6ab65f448aabe50c.01925790ea163232.2495098db7c8a093.14cdd8013892823f
     7a096b8acb6d3557
 
-VPAVGW_128(reg)
+VMAXPD_256(reg)
   before
     5cd66b928afb71ad.f87c8906931c7dce.5a4da20bff1922f3.6d6a34a822b72c4e
     1680d58512c974ec.38bb0cc8ae98bc3f.1c7f17fb4f567a88.b8143b0cd16cc062
@@ -38076,12 +38076,12 @@
     829bd4dceb53b9d7.3ad813fd88e71fdc.507874ea0eab51dd.c811cf646859f344
     45fe522f89a90a69
   after
-    0000000000000000.0000000000000000.60fa666462d77893.cdb96b5ad8b06d2f
+    1680d58512c974ec.3ad813fd88e71fdc.507874ea0eab51dd.b8143b0cd16cc062
     1680d58512c974ec.38bb0cc8ae98bc3f.1c7f17fb4f567a88.b8143b0cd16cc062
     0453a4cffe6278c1.04416676f62d5e8a.a574b4cc7658769d.e35d9ba7dff319fb
     829bd4dceb53b9d7.3ad813fd88e71fdc.507874ea0eab51dd.c811cf646859f344
     45fe522f89a90a69
-VPAVGW_128(mem)
+VMAXPD_256(mem)
   before
     34efa3f45eef1998.eda36218742675db.b44d8d477fd1bb61.78d654c2b6db48f5
     72af3b9f0238ddfa.9fb948f03569e679.506c5242f8f7ed44.7bdc4ebe07759790
@@ -38091,11 +38091,11 @@
   after
     34efa3f45eef1998.eda36218742675db.b44d8d477fd1bb61.78d654c2b6db48f5
     72af3b9f0238ddfa.9fb948f03569e679.506c5242f8f7ed44.7bdc4ebe07759790
-    0000000000000000.0000000000000000.825d6fc5bc64d453.7a5951c05f287043
+    72af3b9f0238ddfa.9fb948f03569e679.506c5242f8f7ed44.7bdc4ebe07759790
     4cd034572801730e.4b3a1120d16eda31.59d8aaf7de2805d6.7e0b85d61a152c01
     36cdb9c91433ea2f
 
-VPADDSB_128(reg)
+VMINPS_256(reg)
   before
     3966f99227eaf091.9fc88d3ce399bd17.fc3eec50e447d4a3.80bc358a834b63dc
     e1223f9cf1c779d2.b2bf1eb8dc63ac04.667f0fcca0bf745f.377bfb7d1adb49f2
@@ -38103,12 +38103,12 @@
     9431d223192007a4.83dfd921ffbe683c.d2e7225580be9564.c8b525338b6f97f9
     5ac981ce9f8b7842
   after
-    0000000000000000.0000000000000000.4a7f7fcb80226a6f.7f5a7239d8be7f34
+    e1223f9cf1c779d2.b2bf1eb8ffbe683c.d2e72255a0bf745f.c8b525338b6f97f9
     e1223f9cf1c779d2.b2bf1eb8dc63ac04.667f0fcca0bf745f.377bfb7d1adb49f2
     8b4c89530e55c29f.5f8364b5326bfc02.e44878ffa063f610.5bdf77bcbee37042
     9431d223192007a4.83dfd921ffbe683c.d2e7225580be9564.c8b525338b6f97f9
     5ac981ce9f8b7842
-VPADDSB_128(mem)
+VMINPS_256(mem)
   before
     eee707791344d04a.561e1678aeb5848c.fa9efbe75f68addf.8ca6093add5d8f04
     5eda342005a55a3c.2e5d52be6a9f7403.a08d45f26f738717.6ed2291a52cb1e9f
@@ -38118,11 +38118,11 @@
   after
     eee707791344d04a.561e1678aeb5848c.fa9efbe75f68addf.8ca6093add5d8f04
     5eda342005a55a3c.2e5d52be6a9f7403.a08d45f26f738717.6ed2291a52cb1e9f
-    0000000000000000.0000000000000000.9a8040d97f7f80f6.fa8032542f28ada3
+    eee7077905a55a3c.2e5d52beaeb5848c.fa9efbe75f68addf.8ca6093add5d8f04
     45737013d191f891.91039fcec6a3a051.ea2b428c0ce1e9f4.19a1067cf644ed70
     9bdbbad55c68a5ff
 
-VPADDSB_128(reg)
+VMINPS_256(reg)
   before
     b4b397da4c8be338.74b07837e433834b.d303a86f9dd55380.4572edf2d35ce9f1
     c2739af55f3ae2c6.f0f31507e4ae30a0.9b8598b20b8c6aee.3f18b04eb8696d33
@@ -38130,12 +38130,12 @@
     29defe2264691694.3fbb035a1c5ce3c9.2d421eca1abbb439.80b56e99526af535
     7e43625f3e76704d
   after
-    0000000000000000.0000000000000000.e08004b3b6e17f35.f303b7db917d7f19
+    c2739af55f3ae2c6.f0f31507e4ae30a0.9b8598b20b8c6aee.80b56e99b8696d33
     c2739af55f3ae2c6.f0f31507e4ae30a0.9b8598b20b8c6aee.3f18b04eb8696d33
     2068bd943300df56.9508c56eed0dbcbb.45d66c01ab552147.b4eb078dd91433e6
     29defe2264691694.3fbb035a1c5ce3c9.2d421eca1abbb439.80b56e99526af535
     7e43625f3e76704d
-VPADDSB_128(mem)
+VMINPS_256(mem)
   before
     8c615eccb9445f59.3b21590b8d02c32b.cad74bb68ca861f6.af15ad78f34b5e6d
     85dbdecbe0e07f86.b07dc8bb4a5622c8.122a1a6e5afcf16d.279b1277d38f5c92
@@ -38145,11 +38145,11 @@
   after
     8c615eccb9445f59.3b21590b8d02c32b.cad74bb68ca861f6.af15ad78f34b5e6d
     85dbdecbe0e07f86.b07dc8bb4a5622c8.122a1a6e5afcf16d.279b1277d38f5c92
-    0000000000000000.0000000000000000.dc016524e6a45263.d6b0bf7fc6da7fff
+    8c615ecce0e07f86.b07dc8bb8d02c32b.cad74bb68ca861f6.af15ad78f34b5e6d
     a8125b2ea1b542f2.37afd620f35fe4c2.48a039a37eed3aeb.69ef521816694459
     eb562592b116a554
 
-VPADDSB_128(reg)
+VMINPS_256(reg)
   before
     d39fbf0ec3a84aef.8a674f6b72045c88.001d6dad152dbf77.ef5c82f70ca26b4a
     7d171cf6e7ab6fd6.c648b8ea5f5397f0.9ed40ab13de73de2.c37e4158678f9ea3
@@ -38157,12 +38157,12 @@
     86c311bed6362735.c1ded75efb1a60e0.c54d42cf094b0c89.612313edf743fdf6
     e43e1df96321a047
   after
-    0000000000000000.0000000000000000.09f4b18042fed591.804f3408138080c6
+    86c311bee7ab6fd6.c648b8eafb1a60e0.c54d42cf094b0c89.c37e4158f743fdf6
     7d171cf6e7ab6fd6.c648b8ea5f5397f0.9ed40ab13de73de2.c37e4158678f9ea3
     450a39b8b9ac4fb4.3a81119783abaf54.6b20a799051798af.a0d1f3b0acc19023
     86c311bed6362735.c1ded75efb1a60e0.c54d42cf094b0c89.612313edf743fdf6
     e43e1df96321a047
-VPADDSB_128(mem)
+VMINPS_256(mem)
   before
     04ef8dc20c683643.9e90a076dad63306.362b842ce2ab65c1.06a6d6c1e60fd71d
     9c02df330f237b16.e8bbe24b6017aed3.773396eb556a7b23.8b795fda37ed3316
@@ -38172,11 +38172,11 @@
   after
     04ef8dc20c683643.9e90a076dad63306.362b842ce2ab65c1.06a6d6c1e60fd71d
     9c02df330f237b16.e8bbe24b6017aed3.773396eb556a7b23.8b795fda37ed3316
-    0000000000000000.0000000000000000.7f5e801737157fe4.911f359b1dfc0a33
+    9c02df330c683643.e8bbe24bdad63306.362b842ce2ab65c1.8b795fdae60fd71d
     a87d1bbd922601ef.815e70fb63ade50f.c9a8d6f04da4c918.d1b84131a72d90ea
     4bbd9147fda60a1c
 
-VPADDSW_128(reg)
+VMINPD_128(reg)
   before
     786bc734386a0564.d47efcaf4986ba4d.896eb4af191917d7.93acfd0e0a367904
     b50ede64f405be6d.e810aff8ca8b1232.320d9b31c058aa4a.979c77cdc2272a20
@@ -38184,12 +38184,12 @@
     cf62a13e5cf25875.3c1a7c4398b08d3f.dc27434a5778dee3.c16f59e396547e9a
     9eebb911e9a79950
   after
-    0000000000000000.0000000000000000.0c94bd1cb84b825f.800039e88000c2b9
+    0000000000000000.0000000000000000.dc27434a5778dee3.c16f59e396547e9a
     b50ede64f405be6d.e810aff8ca8b1232.320d9b31c058aa4a.979c77cdc2272a20
     5ef1d343cc0470e4.c200b185303fc4c9.da8721ebf7f3d815.b344c21b92829899
     cf62a13e5cf25875.3c1a7c4398b08d3f.dc27434a5778dee3.c16f59e396547e9a
     9eebb911e9a79950
-VPADDSW_128(mem)
+VMINPD_128(mem)
   before
     27825c91a78aa5e6.64ab43bf415bb2cb.332a8e1c1dea29c0.933afcbb7f72f761
     3601c050ed065d89.7919b83417ccba93.84fc62fedcf85477.5d0c48a8086e613a
@@ -38199,11 +38199,11 @@
   after
     27825c91a78aa5e6.64ab43bf415bb2cb.332a8e1c1dea29c0.933afcbb7f72f761
     3601c050ed065d89.7919b83417ccba93.84fc62fedcf85477.5d0c48a8086e613a
-    0000000000000000.0000000000000000.b826f11afae27e37.f04645637fff589b
+    0000000000000000.0000000000000000.84fc62fedcf85477.933afcbb7f72f761
     5ae7b83680fec4a5.939303a603f4c227.9f15418a75c0453a.951d89abb39912b0
     bdf477970ce1d3a4
 
-VPADDSW_128(reg)
+VMINPD_128(reg)
   before
     66b9e8b1385ad3a4.26e645370492eb76.5038d37c52c23b4c.23f4440c8993849d
     eebad864d2904f5c.e9fc812580efae03.fc3164f501c95292.6fc5f946456a41e6
@@ -38211,12 +38211,12 @@
     069b2545c165aaa1.c4a1fb7dce3afb04.9653ba80f1ab4833.d26d6a922b5628dd
     a1db1e7c8c82cae3
   after
-    0000000000000000.0000000000000000.f1fd1772af5b7fff.7fffd56a0cbc7b28
+    0000000000000000.0000000000000000.fc3164f501c95292.d26d6a922b5628dd
     eebad864d2904f5c.e9fc812580efae03.fc3164f501c95292.6fc5f946456a41e6
     af41431c76108277.7ff6eaee0f24ca79.f5ccb27dad9242a6.6054dc24c7523942
     069b2545c165aaa1.c4a1fb7dce3afb04.9653ba80f1ab4833.d26d6a922b5628dd
     a1db1e7c8c82cae3
-VPADDSW_128(mem)
+VMINPD_128(mem)
   before
     a96c73cf06e3da7f.4f147b4c4f1b0187.95c730bed83ffdcf.3b13766a6a9fa0e6
     c6eae875b68415dd.e6f7409bbbbfc4d5.cc35069d4a3e8b07.3f57e4a8b3fb856b
@@ -38226,11 +38226,11 @@
   after
     a96c73cf06e3da7f.4f147b4c4f1b0187.95c730bed83ffdcf.3b13766a6a9fa0e6
     c6eae875b68415dd.e6f7409bbbbfc4d5.cc35069d4a3e8b07.3f57e4a8b3fb856b
-    0000000000000000.0000000000000000.8000375b227d88d6.7a6a5b121e9a8000
+    0000000000000000.0000000000000000.cc35069d4a3e8b07.3b13766a6a9fa0e6
     b0e01a6f26b6fc92.6f2f08c59efe7c58.df1882e5d35c3d6c.d9a0c3cb2718e999
     253b2d8a8af1df9a
 
-VPADDSW_128(reg)
+VMINPD_128(reg)
   before
     428b384c2d62541d.33f0d1991f601f41.181c02784db2eae4.732520262392daf2
     8adcdf7dacf682cd.3c1e96c8bc7b5d62.7fa35c244b83b489.deab4eb64bf3f394
@@ -38238,12 +38238,12 @@
     0fb1f7dbb1b9fb67.4d033be2583019ab.f7b11d16a2ad4ac8.a84d4c6f91638bde
     c0011370e78b82de
   after
-    0000000000000000.0000000000000000.7fb46d587f81ca79.db1fd8357fff3913
+    0000000000000000.0000000000000000.f7b11d16a2ad4ac8.deab4eb64bf3f394
     8adcdf7dacf682cd.3c1e96c8bc7b5d62.7fa35c244b83b489.deab4eb64bf3f394
     5b7a2188a43aa557.a635e5e71c117121.0011113433fe15f0.fc74897f668a457f
     0fb1f7dbb1b9fb67.4d033be2583019ab.f7b11d16a2ad4ac8.a84d4c6f91638bde
     c0011370e78b82de
-VPADDSW_128(mem)
+VMINPD_128(mem)
   before
     1f5e5a70840de6ab.04cc5fe26effbea8.0d5213a68fe40f2c.c0d17d35331e8fbb
     a12e9d5a85f57370.9419530777992bc7.c2efe81dda3710d0.b7bc2cfd83dd1f75
@@ -38253,11 +38253,11 @@
   after
     1f5e5a70840de6ab.04cc5fe26effbea8.0d5213a68fe40f2c.c0d17d35331e8fbb
     a12e9d5a85f57370.9419530777992bc7.c2efe81dda3710d0.b7bc2cfd83dd1f75
-    0000000000000000.0000000000000000.d041fbc380001ffc.80007fffb6fbaf30
+    0000000000000000.0000000000000000.c2efe81dda3710d0.c0d17d35331e8fbb
     7d5b099c2129f694.f974d55edff6f24e.7a437fd822f0222e.9f216739ce7214f1
     4834eb840160ef0b
 
-VPHADDW_128(reg)
+VMINPD_256(reg)
   before
     8e42af2962cc079c.904f29ccf48c654b.851b596976d2c40d.369137f3566caa41
     cf96ad928e419650.36e736969b86edaa.1e235b42c931305b.575ede7310b92e27
@@ -38265,12 +38265,12 @@
     af444d65b6780bd4.aa3203a9d36c3613.e285c61315a9c44e.37a0e64e83f4161a
     afae408275fbf280
   after
-    0000000000000000.0000000000000000.f52ee780a7b7d4ee.7965f98c35d13ee0
+    cf96ad928e419650.aa3203a9d36c3613.e285c61315a9c44e.37a0e64e83f4161a
     cf96ad928e419650.36e736969b86edaa.1e235b42c931305b.575ede7310b92e27
     667ee32d214cd9d4.4aeeaae6312249df.1ed7d657759f71e1.b874ef436be3690b
     af444d65b6780bd4.aa3203a9d36c3613.e285c61315a9c44e.37a0e64e83f4161a
     afae408275fbf280
-VPHADDW_128(mem)
+VMINPD_256(mem)
   before
     fb6a77ca5c01b868.0536e5a6e95169fb.317dbcc99c717075.c77727e146da654c
     f99f0912551425fe.c69ea95c57632ff6.ba9d5134a93cb22e.27faf62fa3be9088
@@ -38280,11 +38280,11 @@
   after
     fb6a77ca5c01b868.0536e5a6e95169fb.317dbcc99c717075.c77727e146da654c
     f99f0912551425fe.c69ea95c57632ff6.ba9d5134a93cb22e.27faf62fa3be9088
-    0000000000000000.0000000000000000.ee460ce6ef58ac26.0bd15b6a1e293446
+    fb6a77ca5c01b868.c69ea95c57632ff6.ba9d5134a93cb22e.c77727e146da654c
     77a82b53eb8ee4e8.f502a2d75265e317.46870097fd55415c.cbe3caf953d17268
     c7e0c94cdd17a264
 
-VPHADDW_128(reg)
+VMINPD_256(reg)
   before
     af9f24ce04414b4e.af13b423c10eae92.1c97cf74186b4895.01e912687cbb0628
     df6ad9eb64daabd2.092887a417ca0e9b.1cd2173787db0496.2e50f033ae18c3fc
@@ -38292,12 +38292,12 @@
     87583ea73c8a7a56.8e80fb65b9278279.1b6eeadbd62775d3.525901679ee4186e
     00932ca8936b2764
   after
-    0000000000000000.0000000000000000.ca8b9407c26ae57c.34098c711e837214
+    df6ad9eb64daabd2.8e80fb65b9278279.1b6eeadbd62775d3.2e50f033ae18c3fc
     df6ad9eb64daabd2.092887a417ca0e9b.1cd2173787db0496.2e50f033ae18c3fc
     b38fe310986ffb9b.5fb320c00ccfc12f.5301778a3e4055c7.aa8617e4b0773505
     87583ea73c8a7a56.8e80fb65b9278279.1b6eeadbd62775d3.525901679ee4186e
     00932ca8936b2764
-VPHADDW_128(mem)
+VMINPD_256(mem)
   before
     91011394ab191f13.b711e61eedba63ae.735a947e3de10ea6.d2666c94ed1ba167
     e26f321503f9bca6.9f08d7e04788f150.e80f68f7b10622e1.d234fa231fa8152f
@@ -38307,11 +38307,11 @@
   after
     91011394ab191f13.b711e61eedba63ae.735a947e3de10ea6.d2666c94ed1ba167
     e26f321503f9bca6.9f08d7e04788f150.e80f68f7b10622e1.d234fa231fa8152f
-    0000000000000000.0000000000000000.07d84c873efa8e82.5106d3e7cc5734d7
+    e26f321503f9bca6.b711e61eedba63ae.e80f68f7b10622e1.d2666c94ed1ba167
     2f7a098ae181d42b.07dc86f56333ee21.f535aeb9dfc6cc34.2187267042bfc409
     27a2bd066b607773
 
-VPHADDW_128(reg)
+VMINPD_256(reg)
   before
     e8c450211ecb61c2.e4afb9569f40c774.3e513b205e28d5a7.463f18dad079dba3
     be39d92df88bbf9f.c81491680d614f51.9e342a4671eb5228.9753ac0b22c861d1
@@ -38319,12 +38319,12 @@
     1c4cc2c8903bc7b9.8e9eaa0d67fb0d7a.466ea2335111fdc5.acc8444e5c6ac118
     28c13f377bd6138a
   after
-    0000000000000000.0000000000000000.d0a1d959ac740ca8.c87ac413435e8499
+    be39d92df88bbf9f.c81491680d614f51.9e342a4671eb5228.acc8444e5c6ac118
     be39d92df88bbf9f.c81491680d614f51.9e342a4671eb5228.9753ac0b22c861d1
     064d5696952cceb8.b8750dab46f128ef.82ce4dd3380ba14e.c53ce738f2bf19e9
     1c4cc2c8903bc7b9.8e9eaa0d67fb0d7a.466ea2335111fdc5.acc8444e5c6ac118
     28c13f377bd6138a
-VPHADDW_128(mem)
+VMINPD_256(mem)
   before
     15f454e16b0ecc6a.5c8119308543e94e.275be3798b8cbb1e.455f24d3558ba33a
     4f2d0037491fa7e5.233a573811d06e22.5f7734dccfafed06.ddeccf1de204cf59
@@ -38334,11 +38334,11 @@
   after
     15f454e16b0ecc6a.5c8119308543e94e.275be3798b8cbb1e.455f24d3558ba33a
     4f2d0037491fa7e5.233a573811d06e22.5f7734dccfafed06.ddeccf1de204cf59
-    0000000000000000.0000000000000000.0ad446aa6a32f8c5.9453bcb5ad09b15d
+    15f454e16b0ecc6a.233a573811d06e22.275be3798b8cbb1e.ddeccf1de204cf59
     1ae10a963df9b65a.b1637add5cab9438.1c000e3224dcd153.440e92640625a843
     cc3aa137d5e4cd67
 
-VPHADDD_128(reg)
+VMOVHPS_128_StoreForm(reg)
   before
     5b33c9669cd268e4.63f360788bdb62ad.316c56515310acd3.590490ff6efefa11
     4f44065cf77cb466.693c3cb637c5204a.a7280916512b185e.a498197148e297c3
@@ -38346,12 +38346,12 @@
     d2e2b04edb32522d.1b9e78f717e2c514.e5e8e543d0b1dbf1.d99f36f9192220b6
     7aabc0e54995844e
   after
-    0000000000000000.0000000000000000.6169a41ca91d8e0c.f8532174ed7ab134
+    5b33c9669cd268e4.63f360788bdb62ad.316c56515310acd3.590490ff6efefa11
     4f44065cf77cb466.693c3cb637c5204a.a7280916512b185e.a498197148e297c3
     02bb5585836eee9b.08861b3d5cc3ad5e.6fe28f98f1871484.db882876cd956596
     d2e2b04edb32522d.1b9e78f717e2c514.e5e8e543d0b1dbf1.d99f36f9192220b6
     7aabc0e54995844e
-VPHADDD_128(mem)
+VMOVHPS_128_StoreForm(mem)
   before
     9a76432878fb4c8b.190716219c561cc8.8050cfd1832d2499.658406838934aa52
     14cd3aadc35f3598.3474806b62668719.12689cb8bdb08519.4b03eec4b99cbd53
@@ -38359,13 +38359,13 @@
     8b4f742e1b525ad5.575854156a76338c.2cf98959089040b8.b8da04faeb4c9ee3
     f8ca2ac726ace5cb
   after
-    9a76432878fb4c8b.190716219c561cc8.8050cfd1832d2499.658406838934aa52
+    9a76432878fb4c8b.190716219c561cc8.8050cfd1832d2499.12689cb8bdb08519
     14cd3aadc35f3598.3474806b62668719.12689cb8bdb08519.4b03eec4b99cbd53
-    0000000000000000.0000000000000000.037df46aeeb8b0d5.d01921d104a0ac17
+    c67c216046cdfba2.8076eb99c7ecd0cc.adb15c96e078a5bf.f2b19a73fb7550a0
     8b4f742e1b525ad5.575854156a76338c.2cf98959089040b8.b8da04faeb4c9ee3
     f8ca2ac726ace5cb
 
-VPHADDD_128(reg)
+VMOVHPS_128_StoreForm(reg)
   before
     0ecc074448225e02.3e12b00161f90d5c.1668b64de490eb06.6d0aa1ec5204112f
     552e97dfec394835.bd9050c631ced163.1af00dabd4c435e5.4bb1203adae1d551
@@ -38373,12 +38373,12 @@
     eb3dc11c2b7a5a3d.8bf1acd7e5347ba5.5c9c8b8e80b06f85.4df13fbc11042644
     2921d7c8f9612a6e
   after
-    0000000000000000.0000000000000000.90dea3735cecc87a.efb443902692f58b
+    0ecc074448225e02.3e12b00161f90d5c.1668b64de490eb06.6d0aa1ec5204112f
     552e97dfec394835.bd9050c631ced163.1af00dabd4c435e5.4bb1203adae1d551
     2b3ad703ae7ddd0f.e397d06aa9de6218.bd3e559dd3a04dd6.a1ba8031bb324849
     eb3dc11c2b7a5a3d.8bf1acd7e5347ba5.5c9c8b8e80b06f85.4df13fbc11042644
     2921d7c8f9612a6e
-VPHADDD_128(mem)
+VMOVHPS_128_StoreForm(mem)
   before
     1318c73f8e5711f2.f0835396febdfb6b.936b60fb00ddd936.5357aaea747ed69d
     e5a0880eedf297fd.985888ddc4d1fb44.d5d169c117e338f8.febbae1d4d98bfcb
@@ -38386,13 +38386,13 @@
     b596716577446e57.3ddecc83979e0ba9.7b9067e2a63ce8be.e0ad55b91ddf0717
     cfd3f1f94b23dd8e
   after
-    1318c73f8e5711f2.f0835396febdfb6b.936b60fb00ddd936.5357aaea747ed69d
+    1318c73f8e5711f2.f0835396febdfb6b.936b60fb00ddd936.d5d169c117e338f8
     e5a0880eedf297fd.985888ddc4d1fb44.d5d169c117e338f8.febbae1d4d98bfcb
-    0000000000000000.0000000000000000.94493a31c7d68187.edb4a2b94c546de8
+    7d869721313d77bb.3e075d5e19439774.2fef421445545417.b9139394a78a66ba
     b596716577446e57.3ddecc83979e0ba9.7b9067e2a63ce8be.e0ad55b91ddf0717
     cfd3f1f94b23dd8e
 
-VPHADDD_128(reg)
+VMOVHPS_128_StoreForm(reg)
   before
     e2d262c1cee225ca.6b9c91c5da1338fd.f327d3b9dd6e938d.9682541657a6b11a
     75f6a47b42a91a78.7964732c77b791db.ba2f6d6d84406acc.5d8f869d749e6b57
@@ -38400,12 +38400,12 @@
     8bdd8c7a6a7cffd8.10696ec4cdacdee9.efac4afb6b17f80e.5a2da64f5f69a021
     4a568c5466549407
   after
-    0000000000000000.0000000000000000.1ae2631cc2b54a01.3e6fd839d22df1f4
+    e2d262c1cee225ca.6b9c91c5da1338fd.f327d3b9dd6e938d.9682541657a6b11a
     75f6a47b42a91a78.7964732c77b791db.ba2f6d6d84406acc.5d8f869d749e6b57
     e48bb3954203fa43.bcba9388693b341b.f04296092a9fcd13.aa8478611830d1a0
     8bdd8c7a6a7cffd8.10696ec4cdacdee9.efac4afb6b17f80e.5a2da64f5f69a021
     4a568c5466549407
-VPHADDD_128(mem)
+VMOVHPS_128_StoreForm(mem)
   before
     54cba65a48fe697e.c638299657a166e3.523e7fccbe154b72.14b886aee2352668
     5557714f2272dab2.f1e78854a4fd6a0f.5c05428c598236e2.bcb4458e2c8494ce
@@ -38413,13 +38413,13 @@
     ade807b22ce983fe.87747a6cd08c3c7c.3b99cfe4fa997925.00a73c85a6e6206d
     56376d740f11b5fd
   after
-    54cba65a48fe697e.c638299657a166e3.523e7fccbe154b72.14b886aee2352668
+    54cba65a48fe697e.c638299657a166e3.523e7fccbe154b72.5c05428c598236e2
     5557714f2272dab2.f1e78854a4fd6a0f.5c05428c598236e2.bcb4458e2c8494ce
-    0000000000000000.0000000000000000.1053cb3ef6edad16.b587796ee938da5c
+    29c8681d0fbca4ce.6837a423ee1d4809.0b8a33f0b9ff5c64.41ea8307e4907eeb
     ade807b22ce983fe.87747a6cd08c3c7c.3b99cfe4fa997925.00a73c85a6e6206d
     56376d740f11b5fd
 
-VPHADDSW_128(reg)
+VMOVNTDQ_256(reg)
   before
     9de61040bb9d7a49.bb84caf994033370.a9ea049ce7d68215.c8fe9055395b4950
     320023564517abfd.30682ede64196f4d.2ce5401fce875580.8f84f42d91528712
@@ -38427,12 +38427,12 @@
     b6a4870c6402404c.bf37c532aa627dff.c199bccf7e519579.362693c6ff0c400a
     cfdac55f4ce83398
   after
-    0000000000000000.0000000000000000.7fff15947fff1020.6d04240783b18000
+    9de61040bb9d7a49.bb84caf994033370.a9ea049ce7d68215.c8fe9055395b4950
     320023564517abfd.30682ede64196f4d.2ce5401fce875580.8f84f42d91528712
     71d1a220490a84c5.e85fad4db734f4c4.6bb12962222cf368.6af876591f89f097
     b6a4870c6402404c.bf37c532aa627dff.c199bccf7e519579.362693c6ff0c400a
     cfdac55f4ce83398
-VPHADDSW_128(mem)
+VMOVNTDQ_256(mem)
   before
     11e08a102228846c.5dc6d084318c1c3e.91baf27958aec82a.8ceaf3d47e807a61
     d8045dc49ed8f0b3.c38377f64d335348.3ab6ae0fdd258f73.27f1ccdbc047dcca
@@ -38440,13 +38440,13 @@
     64d51eebf6ba0849.37fed575e009c654.8144c7d4dfc18309.3c4b51a473cb0ad0
     6e38f53d1ea04dc6
   after
-    11e08a102228846c.5dc6d084318c1c3e.91baf27958aec82a.8ceaf3d47e807a61
     d8045dc49ed8f0b3.c38377f64d335348.3ab6ae0fdd258f73.27f1ccdbc047dcca
-    0000000000000000.0000000000000000.843320d880be7fff.e8c58000f4cc9d11
+    d8045dc49ed8f0b3.c38377f64d335348.3ab6ae0fdd258f73.27f1ccdbc047dcca
+    ff11ba69db053299.42277acd53832316.96f577de56d28f03.edf84252dd31f860
     64d51eebf6ba0849.37fed575e009c654.8144c7d4dfc18309.3c4b51a473cb0ad0
     6e38f53d1ea04dc6
 
-VPHADDSW_128(reg)
+VMOVNTDQ_256(reg)
   before
     e10a2b89783cffed.e21a03340a032cf0.fe54825a8f5078ad.d66e1cdb93ff28af
     ef0ceef4202c59f2.55ade73134ed5bb9.f3747fe8fde577cd.7341f2e18e973a21
@@ -38454,12 +38454,12 @@
     50d30bd8c435fc45.8aed9af837d1c863.d64656b084264715.f20e0d97cc06941c
     8ca04b1f45f554fc
   after
-    0000000000000000.0000000000000000.3936c2b3f7586321.735c75b26622c8b8
+    e10a2b89783cffed.e21a03340a032cf0.fe54825a8f5078ad.d66e1cdb93ff28af
     ef0ceef4202c59f2.55ade73134ed5bb9.f3747fe8fde577cd.7341f2e18e973a21
     f58b3aebb0fb9a81.995a45ce8f8350d1.71abc78bc552fd61.3387c3d1ed95758c
     50d30bd8c435fc45.8aed9af837d1c863.d64656b084264715.f20e0d97cc06941c
     8ca04b1f45f554fc
-VPHADDSW_128(mem)
+VMOVNTDQ_256(mem)
   before
     dc0af955776e7159.5a305d28f967bcea.0331609949e47f9d.7d8f28c1d5ea9194
     c01893257b7ea75f.70ee2d48ea1c161e.e2f4159fe1c731a8.c2d23a2c542c168b
@@ -38467,13 +38467,13 @@
     b04f7d446f904c14.31bc34a4724087dd.3e223987102e75e7.967b0bbc4f58c490
     dc77c2ba025965f6
   after
-    dc0af955776e7159.5a305d28f967bcea.0331609949e47f9d.7d8f28c1d5ea9194
     c01893257b7ea75f.70ee2d48ea1c161e.e2f4159fe1c731a8.c2d23a2c542c168b
-    0000000000000000.0000000000000000.63ca7fff7fff8000.f893136ffcfe6ab7
+    c01893257b7ea75f.70ee2d48ea1c161e.e2f4159fe1c731a8.c2d23a2c542c168b
+    1395967b7030b139.ef5976a334e0458a.020034f51a869ab3.015d875b9e7713a6
     b04f7d446f904c14.31bc34a4724087dd.3e223987102e75e7.967b0bbc4f58c490
     dc77c2ba025965f6
 
-VPHADDSW_128(reg)
+VMOVNTDQ_256(reg)
   before
     319ea8c053093183.7510c46a97ab341b.936463b941c716c1.7426a040e0ca7f73
     f03cba3cdff165e4.3ca6e7db018c247b.719e004d3c012ee2.7ed8e60fa6667381
@@ -38481,12 +38481,12 @@
     1b0d4f44169ef4d1.447cb24a11d10ff4.12f271a228c0ed8e.8275fc9781d00cd5
     34f8c429cfb62973
   after
-    0000000000000000.0000000000000000.2e800e69c0e07fff.71eb6ae364e719e7
+    319ea8c053093183.7510c46a97ab341b.936463b941c716c1.7426a040e0ca7f73
     f03cba3cdff165e4.3ca6e7db018c247b.719e004d3c012ee2.7ed8e60fa6667381
     749df399419f3dc5.e3db6281cb40d95f.27b406cc007b0dee.3a0386dd7d0f0e3e
     1b0d4f44169ef4d1.447cb24a11d10ff4.12f271a228c0ed8e.8275fc9781d00cd5
     34f8c429cfb62973
-VPHADDSW_128(mem)
+VMOVNTDQ_256(mem)
   before
     2a595b8082cb2143.3fd7caa7f97bc7b4.3d545221ee4e8266.8ca63d3b505c0a71
     42643b86b71daf73.3e49612f87c1f21c.a831bef27fc0ede0.f21b660415dca241
@@ -38494,13 +38494,13 @@
     43a8cb5315a77f9c.3950cf5f12b93f25.4826eb322ab89e9f.f276c1d2e5b52e5a
     44f5eaaf27279bfa
   after
-    2a595b8082cb2143.3fd7caa7f97bc7b4.3d545221ee4e8266.8ca63d3b505c0a71
     42643b86b71daf73.3e49612f87c1f21c.a831bef27fc0ede0.f21b660415dca241
-    0000000000000000.0000000000000000.7fff8000c9e15acd.80006da0581fb81d
+    42643b86b71daf73.3e49612f87c1f21c.a831bef27fc0ede0.f21b660415dca241
+    56e5e22989b8902c.73ad0e495bfcb1b3.63dd72a9de350d8f.a09ce96713cbefaa
     43a8cb5315a77f9c.3950cf5f12b93f25.4826eb322ab89e9f.f276c1d2e5b52e5a
     44f5eaaf27279bfa
 
-VPMADDUBSW_128(reg)
+VMOVHPS_128_LoadForm(reg)
   before
     f265606c76ac7139.e67973f276f639ef.ed7ea0df4783d91f.34d6a4797d565b3b
     581220746dd1edc1.192354f1c9b17a51.ec837b3497e6bb4d.04ba196bf319018f
@@ -38508,12 +38508,12 @@
     bb526a14c628c65d.a335b6bfb29d81ef.3741430cf6a945f3.bb4d27fcba44f813
     5b95b97343c3c099
   after
-    0000000000000000.0000000000000000.800021fe29553272.b714f47caefbe193
+    f265606c76ac7139.e67973f276f639ef.ed7ea0df4783d91f.34d6a4797d565b3b
     581220746dd1edc1.192354f1c9b17a51.ec837b3497e6bb4d.04ba196bf319018f
     d1472432a9214b3e.b973ec3c29e5feed.90ab5ec99d6f205a.929ec6f2a9104cc9
     bb526a14c628c65d.a335b6bfb29d81ef.3741430cf6a945f3.bb4d27fcba44f813
     5b95b97343c3c099
-VPMADDUBSW_128(mem)
+VMOVHPS_128_LoadForm(mem)
   before
     4e40f74560986188.717dee855e729cca.b1352e6681e6be85.3b9229683d2066c3
     711b5d5d2bd0970c.4f15aaf2108c0731.c03fd11db2cb72d8.f9eb09490e61bf77
@@ -38523,11 +38523,11 @@
   after
     4e40f74560986188.717dee855e729cca.b1352e6681e6be85.3b9229683d2066c3
     711b5d5d2bd0970c.4f15aaf2108c0731.c03fd11db2cb72d8.f9eb09490e61bf77
-    0000000000000000.0000000000000000.d1cb311c93148000.d4691f190f762fbf
+    0000000000000000.0000000000000000.3b9229683d2066c3.f9eb09490e61bf77
     b291920f4196b181.f2bcbe6b2c5e8e9a.51a0856ca79a2e6c.14e0ab4bc16e073a
     28146543da536fa1
 
-VPMADDUBSW_128(reg)
+VMOVHPS_128_LoadForm(reg)
   before
     66800a71ed31fe9c.89c45881c33c0dca.70620e50ce2e22f5.8b8f8edca49cae03
     2a6e973f9794f1d6.ff5637e96575ed58.86a688e1f9fd3cfa.36b8b10b726a950a
@@ -38535,12 +38535,12 @@
     b40455701e1bf3b8.38cb2e4b77ce2df2.e933e6b359c9f0b0.4fe8365bf49b8612
     75879053de17096c
   after
-    0000000000000000.0000000000000000.a706ab997fff576c.f7bc48e81b1cc39a
+    66800a71ed31fe9c.89c45881c33c0dca.70620e50ce2e22f5.8b8f8edca49cae03
     2a6e973f9794f1d6.ff5637e96575ed58.86a688e1f9fd3cfa.36b8b10b726a950a
     d02b061b730984fb.f015aa33424d0f57.8fd2268949571754.2ee76be72e109eaa
     b40455701e1bf3b8.38cb2e4b77ce2df2.e933e6b359c9f0b0.4fe8365bf49b8612
     75879053de17096c
-VPMADDUBSW_128(mem)
+VMOVHPS_128_LoadForm(mem)
   before
     7c8ff5bb0b8ee3e4.32427fa9335679b9.b3453d1e1f060456.ee15c3cdc5df03ba
     40cedf7f940ecfa8.a63480344f4753aa.3d4f559656004fae.fcc4b9422a238c1d
@@ -38550,11 +38550,11 @@
   after
     7c8ff5bb0b8ee3e4.32427fa9335679b9.b3453d1e1f060456.ee15c3cdc5df03ba
     40cedf7f940ecfa8.a63480344f4753aa.3d4f559656004fae.fcc4b9422a238c1d
-    0000000000000000.0000000000000000.02f225d50a6a3bb0.fe5cc6c5f1cff9b6
+    0000000000000000.0000000000000000.ee15c3cdc5df03ba.fcc4b9422a238c1d
     6f1c36cb3057d0be.e060f8ed0a79f309.ed438e2ae36c34ec.9fb8e1ed4e6aefa0
     ec960bfb44854118
 
-VPMADDUBSW_128(reg)
+VMOVHPS_128_LoadForm(reg)
   before
     b2703e14a3fff899.91c49c2b7a385d69.5e3367f4e1d130d0.ccc4a61c71f5462b
     4b9376a5066451d0.e1d277989252ec0e.42e89dfb2f10b137.2a05b765ff71bc0d
@@ -38562,12 +38562,12 @@
     6ae4e6db4b21d90f.774f80459a5d03f9.ac2b4fbd9d6c6e93.d2f7b1aa886fc771
     d540927dbc0ad449
   after
-    0000000000000000.0000000000000000.cab02c70e731c521.fa5824949f1339c1
+    b2703e14a3fff899.91c49c2b7a385d69.5e3367f4e1d130d0.ccc4a61c71f5462b
     4b9376a5066451d0.e1d277989252ec0e.42e89dfb2f10b137.2a05b765ff71bc0d
     144baf180a418969.3a1144fc93af3ada.e8cc976f8fbfb2e9.e3d23cf0a8eb53c1
     6ae4e6db4b21d90f.774f80459a5d03f9.ac2b4fbd9d6c6e93.d2f7b1aa886fc771
     d540927dbc0ad449
-VPMADDUBSW_128(mem)
+VMOVHPS_128_LoadForm(mem)
   before
     c7795c565fc73576.a7a916586390806f.7656a65ec2680296.ea50c34ff6a222e1
     836e89218eb3a724.28e83bfdf11bb834.12f3323327daf4de.fd89ee9336ee0a7e
@@ -38577,11 +38577,11 @@
   after
     c7795c565fc73576.a7a916586390806f.7656a65ec2680296.ea50c34ff6a222e1
     836e89218eb3a724.28e83bfdf11bb834.12f3323327daf4de.fd89ee9336ee0a7e
-    0000000000000000.0000000000000000.59ee01264f1ea5fc.1512f4a7a680f212
+    0000000000000000.0000000000000000.ea50c34ff6a222e1.fd89ee9336ee0a7e
     cdba023efd44adb1.67ff556cd8b2cda0.901f6dc11a29a11e.17625aded8f56557
     d49b92bd73c850eb
 
-VPHSUBW_128(reg)
+VMOVNTDQA_128(reg)
   before
     d81772fd64e15e7f.13aa44687703b9e9.dc70420e6bd7239e.2a451452e01dd36e
     7e22f50a48cbcdbe.9386db34eb20c651.058a1487e247fab2.d232114f54a9e818
@@ -38589,12 +38589,12 @@
     1f14d53c5744b9ef.b531f56237a4d263.e3e857aeee391dca.b88cfe3eb3baaa2c
     ae92e607d657cfee
   after
-    0000000000000000.0000000000000000.88aab4f87ef40b70.0efd186b3f1d936f
+    d81772fd64e15e7f.13aa44687703b9e9.dc70420e6bd7239e.2a451452e01dd36e
     7e22f50a48cbcdbe.9386db34eb20c651.058a1487e247fab2.d232114f54a9e818
     21081850ba13d754.2b1a428e77a79015.3e99c743da8f8f87.62b0e1a490d99c49
     1f14d53c5744b9ef.b531f56237a4d263.e3e857aeee391dca.b88cfe3eb3baaa2c
     ae92e607d657cfee
-VPHSUBW_128(mem)
+VMOVNTDQA_128(mem)
   before
     228e14ed18bdc7bb.d2932a38baeaae39.0f99709c46244964.50c5c135bad3e127
     ee4c04da92f64ebe.98d212b28092f4de.131c3028c032b147.e17a0042dbe91749
@@ -38604,11 +38604,11 @@
   after
     228e14ed18bdc7bb.d2932a38baeaae39.0f99709c46244964.50c5c135bad3e127
     ee4c04da92f64ebe.98d212b28092f4de.131c3028c032b147.e17a0042dbe91749
-    0000000000000000.0000000000000000.6103034070702654.1d0cf1151ec83b60
-    023d1b7ea417f718.c9ba8ccca3155dec.8da66be66729425e.df9feda38ab6c88e
+    ef9832bc63111f24.cb1a891444c7c58b.9e87aff2c2dbc536.f2541043ed06fbdd
+    0000000000000000.0000000000000000.0f99709c46244964.50c5c135bad3e127
     04a694cd5185bb09
 
-VPHSUBW_128(reg)
+VMOVNTDQA_128(reg)
   before
     bdb7002fdc0010fa.01083a0c731692c7.ecfd15453808faac.ba45e0f1cc2be4ea
     661c2c34c7b2030c.c9c50b52ec19ab5d.912e22eba02dd678.023088fd0dea6707
@@ -38616,12 +38616,12 @@
     f716bad72fedb145.2445b3b6495c4aec.d28eb56e563b3de2.531966cc90d4fea2
     15af93670a178b79
   after
-    0000000000000000.0000000000000000.988fb8eba0c6426c.91bd364b86cd591d
+    bdb7002fdc0010fa.01083a0c731692c7.ecfd15453808faac.ba45e0f1cc2be4ea
     661c2c34c7b2030c.c9c50b52ec19ab5d.912e22eba02dd678.023088fd0dea6707
     5a231748af28cfec.36400a3c2a2dff05.159bae2a76102efb.4132e1f8447486e0
     f716bad72fedb145.2445b3b6495c4aec.d28eb56e563b3de2.531966cc90d4fea2
     15af93670a178b79
-VPHSUBW_128(mem)
+VMOVNTDQA_128(mem)
   before
     61c1e4b4d148e890.9842134ee48de5c4.70a083ad66b5483e.25543423dd3c41d9
     141bd59ffe73d314.99f31d176994a615.f41cf50b9d41b426.6b3926b5a79f748b
@@ -38631,11 +38631,11 @@
   after
     61c1e4b4d148e890.9842134ee48de5c4.70a083ad66b5483e.25543423dd3c41d9
     141bd59ffe73d314.99f31d176994a615.f41cf50b9d41b426.6b3926b5a79f748b
-    0000000000000000.0000000000000000.130de1890ecf649d.00ef16e5bb7cccec
-    1fd689ff00e83d11.2a1334535509c2da.17aaafb0c627c969.3b8f532171b859d3
+    0a88e314afa50630.5574d49f5b8f31e3.8d8685be090e4bd0.fe8987904eef13a5
+    0000000000000000.0000000000000000.70a083ad66b5483e.25543423dd3c41d9
     7e9886d2aa8683c0
 
-VPHSUBW_128(reg)
+VMOVNTDQA_128(reg)
   before
     23f11d1195e6cd18.2fcf434d0c4b36e3.731a399df38f94a8.6e54f0cff199ea1d
     86e41349cf637388.16418ee8f0d7abd1.8bd6e0ebd2ace5f7.6e50c306a56f6918
@@ -38643,12 +38643,12 @@
     f6cb0c549ee5c160.d9bbc3b9ada0fbb3.9c9d0140c2dceec9.d96d0f6c1a787390
     fb27807313c37766
   after
-    0000000000000000.0000000000000000.54156087b0d703d0.5515134b54b6c3a9
+    23f11d1195e6cd18.2fcf434d0c4b36e3.731a399df38f94a8.6e54f0cff199ea1d
     86e41349cf637388.16418ee8f0d7abd1.8bd6e0ebd2ace5f7.6e50c306a56f6918
     03be64e6f389b0bc.b0f6e4bdc79a5808.d09324a88eecef73.f36aa441ffb50385
     f6cb0c549ee5c160.d9bbc3b9ada0fbb3.9c9d0140c2dceec9.d96d0f6c1a787390
     fb27807313c37766
-VPHSUBW_128(mem)
+VMOVNTDQA_128(mem)
   before
     3762744205a2c933.bb5607ff6b02e21f.6c5ba6c7bff34eff.4d40731f0a0720a5
     68eb66c50d222622.aead5253f76c4ea5.47a409d219a10e18.3dc777b103f9bfb2
@@ -38658,11 +38658,11 @@
   after
     3762744205a2c933.bb5607ff6b02e21f.6c5ba6c7bff34eff.4d40731f0a0720a5
     68eb66c50d222622.aead5253f76c4ea5.47a409d219a10e18.3dc777b103f9bfb2
-    0000000000000000.0000000000000000.3a6c8f0c25df169e.c22ef47739eabbb9
-    19173498cd32ef19.8eeac5a6b959fbb9.425d4194123cc45e.4eb5229e77633611
+    6a8ed2e9464e4960.2b1ae8bcddb0439f.456169c8d6b6f729.ca800862493e089d
+    0000000000000000.0000000000000000.6c5ba6c7bff34eff.4d40731f0a0720a5
     26b3c1d229f487bc
 
-VPHSUBD_128(reg)
+VMASKMOVDQU_128(reg)
   before
     afc6e268fc7b3547.505109c0bddbd478.3369e57e29f4b29e.1a650c22ea4132e5
     433a7fce8b867d60.ed0acc4b3254b4aa.76e345aec60ca6fb.a845495e79d1fde8
@@ -38670,12 +38670,12 @@
     007422b64f56c9ec.c5240c3f1ee75435.45f7b2cafde330cc.5bbd02912ebe9913
     36ec765f8c35e294
   after
-    0000000000000000.0000000000000000.7b8830d8122d705f.4f29614dd18cb48a
+    afc6e268fc7b3547.505109c0bddbd478.3369e57e29f4b29e.1a650c22ea4132e5
     433a7fce8b867d60.ed0acc4b3254b4aa.76e345aec60ca6fb.a845495e79d1fde8
     3f5a966e73a19ab3.cb0cf82749a94bda.b2a4e0a42e2d117c.cac97134dcf6e193
     007422b64f56c9ec.c5240c3f1ee75435.45f7b2cafde330cc.5bbd02912ebe9913
     36ec765f8c35e294
-VPHSUBD_128(mem)
+VMASKMOVDQU_128(mem)
   before
     39234b8b11667841.e0d22011bc3346b6.b91e817fcc198ce6.8a29b78ecebb3e98
     3e2ffd02da5d1647.3cc18aeb55c44dbd.81c6d5d36f4cae1b.dd87eb5b3d40788b
@@ -38683,13 +38683,13 @@
     c2f1e47da5ce5d0d.d88297cc7d2fe735.024f076706e1a3bb.1cf2d2c067836099
     c1977c305a58850b
   after
-    39234b8b11667841.e0d22011bc3346b6.b91e817fcc198ce6.8a29b78ecebb3e98
+    39234b8b11667841.e0d22011bc3346b6.024f0767cc19a3e6.1cf2d28ecebb3e99
     3e2ffd02da5d1647.3cc18aeb55c44dbd.81c6d5d36f4cae1b.dd87eb5b3d40788b
-    0000000000000000.0000000000000000.12fb0b674491870a.ed85d8485fb88d30
+    23da06af022679d2.708d5eb0b69419af.fbe78327248a77fd.995b4b9de7ff1a52
     c2f1e47da5ce5d0d.d88297cc7d2fe735.024f076706e1a3bb.1cf2d2c067836099
     c1977c305a58850b
 
-VPHSUBD_128(reg)
+VMASKMOVDQU_128(reg)
   before
     e398455a5b0bc754.f93f125ae0607e25.d0ec31ab4321f3fe.71c8dd7f325dee7e
     e03f2aa807275f22.a2920c31cfe89745.b41629b9a6f778b4.251f815cc3091475
@@ -38697,12 +38697,12 @@
     d7b33564ceca88f7.be73557d360ca44f.b0de1f13b27ce099.cd9725118621dfaa
     79501cc1f0a6fc40
   after
-    0000000000000000.0000000000000000.61ef3aa0dbd15fe2.f2e14efb9de99319
+    e398455a5b0bc754.f93f125ae0607e25.d0ec31ab4321f3fe.71c8dd7f325dee7e
     e03f2aa807275f22.a2920c31cfe89745.b41629b9a6f778b4.251f815cc3091475
     12da2687f9388c1f.9bb44eee8d73659a.e04d7963423cb403.fb2070e8d6f1d0ca
     d7b33564ceca88f7.be73557d360ca44f.b0de1f13b27ce099.cd9725118621dfaa
     79501cc1f0a6fc40
-VPHSUBD_128(mem)
+VMASKMOVDQU_128(mem)
   before
     d917d2e62f8be4b9.891753a9216a9057.e8999bcbe7c00f91.8013163792443b1f
     cab7c16b60dd5340.85527cc48fa4e0eb.f6f39ec2bc9a638c.ac395a397f1fff44
@@ -38710,13 +38710,13 @@
     d0b53f4506f5b62b.cc7ce1292912475d.2972c95f3ff0b65b.8887bb8cee3fb515
     f047cfb4a89d1f1a
   after
-    d917d2e62f8be4b9.891753a9216a9057.e8999bcbe7c00f91.8013163792443b1f
+    d917d2e62f8be4b9.891753a9216a9057.2972c95f3ff00f5b.881316379244b51f
     cab7c16b60dd5340.85527cc48fa4e0eb.f6f39ec2bc9a638c.ac395a397f1fff44
-    0000000000000000.0000000000000000.ff2673c6123124e8.c5a6c4cad2e6a50b
+    28fd673c9ea70502.28afad20b302b35e.c24dda4fcfa65c6b.909be887149a6ab2
     d0b53f4506f5b62b.cc7ce1292912475d.2972c95f3ff0b65b.8887bb8cee3fb515
     f047cfb4a89d1f1a
 
-VPHSUBD_128(reg)
+VMASKMOVDQU_128(reg)
   before
     2429206bdf3de26d.9cabc572b3d321e6.cf03144b8f60d693.0730e9dc26852c87
     7f77aa1d2ead3bba.69ab76afc14e0360.8b9142f27e769cad.3951b4b4a0707b1c
@@ -38724,12 +38724,12 @@
     1f895b23862b9eef.76f8450a73491b3f.a1f2807f6c30c13c.04ef4122bf7a9330
     5604f9909cb0d507
   after
-    0000000000000000.0000000000000000.37706dcd311bb674.f2e559bb671ec668
+    2429206bdf3de26d.9cabc572b3d321e6.cf03144b8f60d693.0730e9dc26852c87
     7f77aa1d2ead3bba.69ab76afc14e0360.8b9142f27e769cad.3951b4b4a0707b1c
     5f7e6a36327866ab.1381cce94d7117c4.5d72688a94e2d657.99a2a8d2cabe5f46
     1f895b23862b9eef.76f8450a73491b3f.a1f2807f6c30c13c.04ef4122bf7a9330
     5604f9909cb0d507
-VPHSUBD_128(mem)
+VMASKMOVDQU_128(mem)
   before
     6bad4e087c6ddff6.1be6794ec7512030.6edd5c004de1c9fd.b45d883ea3ea9609
     1fb5bb767bbc6d2a.aedfc0259076281b.d7fc8eb5fa45de29.f0fe7b31d59e946a
@@ -38737,13 +38737,13 @@
     d416cee549400910.0dd9ba832ceeb99d.6c182f1137a32b7d.561613679723f695
     3824b082600bd2b8
   after
-    6bad4e087c6ddff6.1be6794ec7512030.6edd5c004de1c9fd.b45d883ea3ea9609
+    6bad4e087c6ddff6.1be6794ec7512030.6c182f1137e12bfd.5616883e9723f609
     1fb5bb767bbc6d2a.aedfc0259076281b.d7fc8eb5fa45de29.f0fe7b31d59e946a
-    0000000000000000.0000000000000000.df046dfdef8d0dcb.22494f74e4a01939
+    4eeabcc6b6a93dcf.36c22c127e26f25b.8d215517948215f0.b22356c69dd8f50a
     d416cee549400910.0dd9ba832ceeb99d.6c182f1137a32b7d.561613679723f695
     3824b082600bd2b8
 
-VPHSUBSW_128(reg)
+VMOVMSKPD_128(reg)
   before
     b4992882931cc71f.8d066bbd4f8e8d1a.917165e33659ba8d.50ad978f00b4dcfd
     26c177d3cde30f76.5586113ce49f8718.1dd6299e39f431d6.15ab097d0ac2e49c
@@ -38751,12 +38751,12 @@
     5c598c18c4c08aa1.816665db2e36c8a3.bb36edd599e76f25.b216fc595302e7e5
     421a751fca4c5be7
   after
-    0000000000000000.0000000000000000.f6cd7fff6ae78bad.0bc8f7e2f3d2d9da
+    b4992882931cc71f.8d066bbd4f8e8d1a.917165e33659ba8d.50ad978f00b4dcfd
     26c177d3cde30f76.5586113ce49f8718.1dd6299e39f431d6.15ab097d0ac2e49c
     eae79ae1a9ebe767.08623b4c257db137.0c530320d14a5924.97e002c772d8fe85
     5c598c18c4c08aa1.816665db2e36c8a3.bb36edd599e76f25.b216fc595302e7e5
-    421a751fca4c5be7
-VPHSUBSW_128(mem)
+    0000000000000003
+VMOVMSKPD_128(mem)
   before
     22b8e806f2c416b8.d86149e4b9ef35ce.9e5d0cd41ad68887.87c9e5292d58af82
     30bcd2f8e773d384.ba4ccdb22403249b.3a14aa230567ac10.ca5ae6882a2855ea
@@ -38766,11 +38766,11 @@
   after
     22b8e806f2c416b8.d86149e4b9ef35ce.9e5d0cd41ad68887.87c9e5292d58af82
     30bcd2f8e773d384.ba4ccdb22403249b.3a14aa230567ac10.ca5ae6882a2855ea
-    0000000000000000.0000000000000000.6e7780005d60822a.8000a6a91c2e2bc2
+    47f1ade3c6674f76.5e6614eca28993b3.3158bdb40cf7f169.e233ec5e2be39c07
     4325f7b1abab46ba.1ffb1b00cf0cbdc3.5ef3c1734a9213bf.29a1f418cd16c186
     fceff820ab4c0012
 
-VPHSUBSW_128(reg)
+VMOVMSKPD_128(reg)
   before
     b86bf6e462119458.ff222b50b14b737e.5b57dc584618e077.9fb1304cdc42ce3d
     b75fe9cf8df2ba03.59b5c5abf45493ec.6dc55562a339357a.cf60872bdd16dd11
@@ -38778,12 +38778,12 @@
     f1e39fcab135ac3b.53cd1c45a4ce9c77.820b5d3882ec6c1f.6bbddfac9e53ea65
     8f03d72696d55f3e
   after
-    0000000000000000.0000000000000000.d0f6777d7a32934d.e79d7fffb7cbfffb
+    b86bf6e462119458.ff222b50b14b737e.5b57dc584618e077.9fb1304cdc42ce3d
     b75fe9cf8df2ba03.59b5c5abf45493ec.6dc55562a339357a.cf60872bdd16dd11
     5619ce4dc97aaec0.2baa41ae91d16230.b193828983fcfb79.c9cb43fd6a17fd64
     f1e39fcab135ac3b.53cd1c45a4ce9c77.820b5d3882ec6c1f.6bbddfac9e53ea65
-    8f03d72696d55f3e
-VPHSUBSW_128(mem)
+    0000000000000002
+VMOVMSKPD_128(mem)
   before
     1369a8556da9191b.e40a5ab2e2b0ef1f.ace9d15c4858fced.3e7ae4dd3b96c519
     d1bbcd273fdcd429.8cdafa71f776b419.11ccdcdf997a3fbd.402c12e34a854213
@@ -38793,11 +38793,11 @@
   after
     1369a8556da9191b.e40a5ab2e2b0ef1f.ace9d15c4858fced.3e7ae4dd3b96c519
     d1bbcd273fdcd429.8cdafa71f776b419.11ccdcdf997a3fbd.402c12e34a854213
-    0000000000000000.0000000000000000.2473b495a6638983.cb137fffd2b7f78e
+    a7c5c1872a794c94.439e7b738d1337d4.6040b9bab4402114.e36de3b74c451eb8
     6f530361478d3c87.66a4da243f14b4fd.7312e5dab4b75d1e.858853c3dc6396b4
     80cb5f74976ae6b5
 
-VPHSUBSW_128(reg)
+VMOVMSKPD_128(reg)
   before
     3280013718e64a64.07300ca1b422612f.513611f1a9046640.270eda29b6eab006
     f5f43776fc63fd70.492959338c4677b7.60a11e4468708a48.59001695d5e6d6f8
@@ -38805,12 +38805,12 @@
     22494d1d5b93434a.3f9fb1fdf06a641a.5a32a83053e91759.a2f65170dc668aad
     739148b8fc0290c8
   after
-    0000000000000000.0000000000000000.0d5a43e031558000.bda38000bd950112
+    3280013718e64a64.07300ca1b422612f.513611f1a9046640.270eda29b6eab006
     f5f43776fc63fd70.492959338c4677b7.60a11e4468708a48.59001695d5e6d6f8
     2773fc9fde6e3c83.120a6703ec05394c.ef31fc8b17e25bc2.e3b415092eb68b22
     22494d1d5b93434a.3f9fb1fdf06a641a.5a32a83053e91759.a2f65170dc668aad
-    739148b8fc0290c8
-VPHSUBSW_128(mem)
+    0000000000000001
+VMOVMSKPD_128(mem)
   before
     305274cca997599d.44c1245b0e5c4d70.aab4b30eb381b44c.fcf01ca1b80ef8ba
     b6055398ff30a059.e7297fc7935797a2.3015ea205156e50f.33b75649e1df3b91
@@ -38820,11 +38820,11 @@
   after
     305274cca997599d.44c1245b0e5c4d70.aab4b30eb381b44c.fcf01ca1b80ef8ba
     b6055398ff30a059.e7297fc7935797a2.3015ea205156e50f.33b75649e1df3b91
-    0000000000000000.0000000000000000.085a00cb1fb140ac.ba0b93b9229259b2
+    e17661081bda2227.68cb59cc87105d8b.ad8dd021e7f6b28f.5ad251946ae71b89
     8e71180919a09b34.24f4afd68611dbd8.feeae3fc906dd8f7.cd8e09eef0b2d54f
     e8377ac30ecda58e
 
-VPABSB_128(reg)
+VMOVMSKPD_256(reg)
   before
     0719a17f61c4c7f3.97c2f685148ec7ab.75f17b512be84c35.fdf69e9c69c51373
     8580798f84217629.d934766928b161b9.b80bbbaa1221ed4d.877e7eef8d0c1e30
@@ -38832,12 +38832,12 @@
     130c2c56ac426ebb.78ae4c1a0dc3d249.84ce84a219e5ae60.ac31995b2895981d
     fff5cd4dd6ef7da4
   after
-    0000000000000000.0000000000000000.496f6a4b28460633.784e0320194d495a
+    0719a17f61c4c7f3.97c2f685148ec7ab.75f17b512be84c35.fdf69e9c69c51373
     8580798f84217629.d934766928b161b9.b80bbbaa1221ed4d.877e7eef8d0c1e30
     c0b8fe5d1372f0de.309414a27213268a.49916a4bd846facd.784efde0194db75a
     130c2c56ac426ebb.78ae4c1a0dc3d249.84ce84a219e5ae60.ac31995b2895981d
-    fff5cd4dd6ef7da4
-VPABSB_128(mem)
+    0000000000000003
+VMOVMSKPD_256(mem)
   before
     4d6415a04167241b.d9ca00e7e81e2f6f.8d4e9bbf16ca2123.c60d0519708a47b3
     724ced41820a47af.703c747b65916da3.4b407b7ca936ce43.699bea1e79bfff72
@@ -38847,11 +38847,11 @@
   after
     4d6415a04167241b.d9ca00e7e81e2f6f.8d4e9bbf16ca2123.c60d0519708a47b3
     724ced41820a47af.703c747b65916da3.4b407b7ca936ce43.699bea1e79bfff72
-    0000000000000000.0000000000000000.734e654116362123.3a0d05197076474d
+    4a77d21db7e3a28c.32af867ebf276506.8e506a3de01396d6.cac42e1cd1131248
     b1b23f1efcfef3de.7d6f315b916c5342.324ae4eeda6b3408.45d4cd7e130fbee2
     3617c3b2dc413deb
 
-VPABSB_128(reg)
+VMOVMSKPD_256(reg)
   before
     f9d90d23c734cb10.83c8b0326c68f4cf.abc7728077ed7204.13f9637bb04c6604
     ea65a53d7174a6fd.9b87a143232c628e.1a0543590e36fff7.0c2a65d081c1e6f6
@@ -38859,12 +38859,12 @@
     c60fb41d6f0d2edd.122cf411d8f37421.275e8ad2bd4c5322.bb42df837d99c270
     28c14fb8e213964e
   after
-    0000000000000000.0000000000000000.24735e500e2f3638.055765276629710c
+    f9d90d23c734cb10.83c8b0326c68f4cf.abc7728077ed7204.13f9637bb04c6604
     ea65a53d7174a6fd.9b87a143232c628e.1a0543590e36fff7.0c2a65d081c1e6f6
     6508896d758e085d.d7ba8f3f3e56f945.2473a250f2d136c8.fba965d966d7710c
     c60fb41d6f0d2edd.122cf411d8f37421.275e8ad2bd4c5322.bb42df837d99c270
-    28c14fb8e213964e
-VPABSB_128(mem)
+    0000000000000009
+VMOVMSKPD_256(mem)
   before
     1df13266b052a9d3.68c423bafc7e5428.28aa4ea50e0e904d.7d12f74b0e3391b2
     78a002770461b72b.a973d0b1b86cb5eb.f40018e7fbb309f6.83dbe6287f102d24
@@ -38874,11 +38874,11 @@
   after
     1df13266b052a9d3.68c423bafc7e5428.28aa4ea50e0e904d.7d12f74b0e3391b2
     78a002770461b72b.a973d0b1b86cb5eb.f40018e7fbb309f6.83dbe6287f102d24
-    0000000000000000.0000000000000000.28564e5b0e0e704d.7d12094b0e336f4e
+    14983dd9f94d7c81.e46ab96c3e638ed2.54facfc3bcef9b48.960551d3ac716323
     cca65e77ab20b302.75f4d9592aef1b88.2364ed266ccd016e.10dc36ba32e26e5c
     4eab9048aced8c7b
 
-VPABSB_128(reg)
+VMOVMSKPD_256(reg)
   before
     acc05ce8b720f72b.7e96e23d37e818da.b85c2ce3199d98ba.3c09f0fa2859f895
     87659408ee07eb18.05344317b8b16934.08efaf76a7f84013.7db6532d0ba03ce8
@@ -38886,12 +38886,12 @@
     1f913d76511d625c.01a991b70c73ba20.44c631670de704ec.e3592a5cb88c99c4
     c0e69531ba4a2ba5
   after
-    0000000000000000.0000000000000000.3d075c7e6f735040.40386e573253786c
+    acc05ce8b720f72b.7e96e23d37e818da.b85c2ce3199d98ba.3c09f0fa2859f895
     87659408ee07eb18.05344317b8b16934.08efaf76a7f84013.7db6532d0ba03ce8
     39e73613ed2ca5f0.3c4cfff14b86603d.c3f95c7e6f8d5040.c03892a932ad8894
     1f913d76511d625c.01a991b70c73ba20.44c631670de704ec.e3592a5cb88c99c4
-    c0e69531ba4a2ba5
-VPABSB_128(mem)
+    0000000000000001
+VMOVMSKPD_256(mem)
   before
     35aa511353f2fa63.95b1a59bb6665b0b.2e1876551584330a.e6a2299d1e9297c5
     1c73d9f09f91c129.f7926befb792cfa7.a16528b885c68626.07d9418c3d1b4674
@@ -38901,11 +38901,11 @@
   after
     35aa511353f2fa63.95b1a59bb6665b0b.2e1876551584330a.e6a2299d1e9297c5
     1c73d9f09f91c129.f7926befb792cfa7.a16528b885c68626.07d9418c3d1b4674
-    0000000000000000.0000000000000000.2e187655157c330a.1a5e29631e6e693b
+    530baab3bb313d24.a17f89def02df8dc.345d25ca764471a1.01b673a1070c4da8
     b4403e49c3e12a80.efc5fdd5fec31357.c4c9e879040aaea7.3286bd4617f4e80a
     f4951ae90a5c5249
 
-VPABSW_128(reg)
+VMOVMSKPS_128(reg)
   before
     a52f86f47bd2c80f.1cdc139cd2aa4368.3db0c23e7de15cc4.2e78edb04b25f963
     9fa0fdd507e28609.68aca499049a4508.e78cd58708120ecf.4c35b05a69a00f02
@@ -38913,12 +38913,12 @@
     e236fec6ddfcc847.1717eb42431df423.bf46d166b3dea06c.180762bc93e88c98
     7db5484bd9cc6be6
   after
-    0000000000000000.0000000000000000.49a5301b3be26623.0435519b77885350
+    a52f86f47bd2c80f.1cdc139cd2aa4368.3db0c23e7de15cc4.2e78edb04b25f963
     9fa0fdd507e28609.68aca499049a4508.e78cd58708120ecf.4c35b05a69a00f02
     3f347cf74916c7e2.727c6d2c76bcec8e.49a5301b3be26623.fbcbae657788acb0
     e236fec6ddfcc847.1717eb42431df423.bf46d166b3dea06c.180762bc93e88c98
-    7db5484bd9cc6be6
-VPABSW_128(mem)
+    000000000000000d
+VMOVMSKPS_128(mem)
   before
     07a1dcfe644104c7.e2f47fae601fc5e3.334b98c688c718f6.a4bdb3d40b91f757
     92979ac250511467.9cb8fb1b6e0cfa63.a3e2f2a360c91531.5654d2d1e088a990
@@ -38928,11 +38928,11 @@
   after
     07a1dcfe644104c7.e2f47fae601fc5e3.334b98c688c718f6.a4bdb3d40b91f757
     92979ac250511467.9cb8fb1b6e0cfa63.a3e2f2a360c91531.5654d2d1e088a990
-    0000000000000000.0000000000000000.334b673a773918f6.5b434c2c0b9108a9
+    fa63ff81ba0b56f2.6dcf6f79a24ea273.41a974c7e82ca700.30582ac9cd4ef0c2
     1bd08628be788893.af85d6349872fabe.ea6c9b1d3bfe8991.8e15b8286f6f089a
     ccd7775a61772fc4
 
-VPABSW_128(reg)
+VMOVMSKPS_128(reg)
   before
     45ea63cc40f39feb.d1ababa477a66476.bf252bb8ed023ef1.7af7e191764a790d
     579978e8a76f95bc.f8c1eae001a0a7c9.f9fd6d723d8ca9b7.cd16c40fb41d31a3
@@ -38940,12 +38940,12 @@
     b2fe0ed37f93010a.09c8a847fa2a5069.5c81a1343bbce7af.2c3f4ed9ab85ebc7
     f0e1edfe9b3365af
   after
-    0000000000000000.0000000000000000.46a96a34239c78bd.406b407d12826d7d
+    45ea63cc40f39feb.d1ababa477a66476.bf252bb8ed023ef1.7af7e191764a790d
     579978e8a76f95bc.f8c1eae001a0a7c9.f9fd6d723d8ca9b7.cd16c40fb41d31a3
     5c31b31c33754ce2.6cdcc0c779730cb5.b95795cc239c78bd.bf95bf8312826d7d
     b2fe0ed37f93010a.09c8a847fa2a5069.5c81a1343bbce7af.2c3f4ed9ab85ebc7
-    f0e1edfe9b3365af
-VPABSW_128(mem)
+    0000000000000001
+VMOVMSKPS_128(mem)
   before
     e74719dcff97975e.b44c87782754f0df.ab531e4ba1d12f0f.3cc58b15227a3238
     ed3d4d61f3bd3f03.bd671979c845550f.2e489ebf897565d3.b67051db73629405
@@ -38955,11 +38955,11 @@
   after
     e74719dcff97975e.b44c87782754f0df.ab531e4ba1d12f0f.3cc58b15227a3238
     ed3d4d61f3bd3f03.bd671979c845550f.2e489ebf897565d3.b67051db73629405
-    0000000000000000.0000000000000000.54ad1e4b5e2f2f0f.3cc574eb227a3238
+    de8f057792b217c8.2b9bc141fef16c43.6e72a48fcf21ade2.26cdeff2cbff4ac1
     9509bd0cf881dcd9.5834793c64e4702a.479eada78ee1c468.e82a5fc6c5dd9019
     58d19fc3fd88a2b9
 
-VPABSW_128(reg)
+VMOVMSKPS_128(reg)
   before
     d110aa55118dbb4c.f076f10b42364a63.a27d3fd796ab9e6d.959834f3e3c26690
     b1317ce89a77187f.caa31e608bde1c92.63c30e7c31d131bb.342cb560e9cf4f87
@@ -38967,12 +38967,12 @@
     134c66c2812b8d73.6a6e50bc8d34df8d.be76b898106b7923.d45196497a9ee491
     8e7bee9d3c7809fc
   after
-    0000000000000000.0000000000000000.07ae1d682f1e66be.00da532842ec3a79
+    d110aa55118dbb4c.f076f10b42364a63.a27d3fd796ab9e6d.959834f3e3c26690
     b1317ce89a77187f.caa31e608bde1c92.63c30e7c31d131bb.342cb560e9cf4f87
     538111e936d3f5fd.ff5dbff7f0840f91.f852e298d0e266be.ff26acd8bd143a79
     134c66c2812b8d73.6a6e50bc8d34df8d.be76b898106b7923.d45196497a9ee491
-    8e7bee9d3c7809fc
-VPABSW_128(mem)
+    000000000000000a
+VMOVMSKPS_128(mem)
   before
     086e30c220ae64e5.4ddd76e1160e1d8d.e9a24e9b7cfb48b2.0f7b8be68cf7a695
     20f7d8a3424db279.5d823db09105e1f6.57c73380dce4052b.48ad56f0e11229c1
@@ -38982,11 +38982,11 @@
   after
     086e30c220ae64e5.4ddd76e1160e1d8d.e9a24e9b7cfb48b2.0f7b8be68cf7a695
     20f7d8a3424db279.5d823db09105e1f6.57c73380dce4052b.48ad56f0e11229c1
-    0000000000000000.0000000000000000.165e4e9b7cfb48b2.0f7b741a7309596b
+    b1e2622cbd60afe4.9e85b79d8f9e145b.8fa87d58c6fbd325.c5571820aa493d52
     96fb4b49adf31751.6e33e013ac64f467.6f10a70d584d6ecb.e3c6cae484271ff5
     fc4669a70a380a56
 
-VPMOVSXBQ_128(reg)
+VMOVMSKPS_256(reg)
   before
     6d23f2d5d9093c20.ad0e0ee62f13a5ec.28d9b57e83e4bbc7.d2cc2d8daee5914a
     92a960da8c25ef00.d0e627ef5ecb16e3.27c0314ab0a9a526.93a88cc2e3cff9cd
@@ -38995,11 +38995,11 @@
     a9f490e0d7f5262b
   after
     6d23f2d5d9093c20.ad0e0ee62f13a5ec.28d9b57e83e4bbc7.d2cc2d8daee5914a
-    0000000000000000.0000000000000000.0000000000000062.ffffffffffffff82
+    92a960da8c25ef00.d0e627ef5ecb16e3.27c0314ab0a9a526.93a88cc2e3cff9cd
     c724af23bf1860a1.dd50125157282660.c93750e3d03ff032.90703e9a14186282
     68dfdc1a0f6fcab0.ae194bf63535908f.68890eb67e32d694.a3f0c1005ccb8892
-    a9f490e0d7f5262b
-VPMOVSXBQ_128(mem)
+    0000000000000022
+VMOVMSKPS_256(mem)
   before
     7f472826a2a1f979.d128e12c18b56ad9.210b4fcb15fe119d.6201682d570f94fb
     ffb603bed9dbbda8.5e49bcc675767cc7.10f299bd128f65b6.12ec59b5f6626510
@@ -39008,12 +39008,12 @@
     fc578eed9390a828
   after
     7f472826a2a1f979.d128e12c18b56ad9.210b4fcb15fe119d.6201682d570f94fb
-    0000000000000000.0000000000000000.ffffffffffffff94.fffffffffffffffb
+    ffb603bed9dbbda8.5e49bcc675767cc7.10f299bd128f65b6.12ec59b5f6626510
     070d9f9497af2de3.6b8f6852c23f3c27.589ca5b749f54805.d397ddbbf8b58782
     71187795f82a0656.5446e23e9c9be5a4.d6d4f0a4d53b75b7.024cf0a9f89634fb
     fc578eed9390a828
 
-VPMOVSXBQ_128(reg)
+VMOVMSKPS_256(reg)
   before
     1b06b4f2643021b4.1aa307ab1957042f.75ba24f59f17b4eb.6465f472d36ea9f7
     bda45d240701d94c.de7accc41543e398.2a362ce3653ee5a8.df1c2f0c5e98a0f2
@@ -39022,11 +39022,11 @@
     771dfddb68636cfb
   after
     1b06b4f2643021b4.1aa307ab1957042f.75ba24f59f17b4eb.6465f472d36ea9f7
-    0000000000000000.0000000000000000.0000000000000015.ffffffffffffffd4
+    bda45d240701d94c.de7accc41543e398.2a362ce3653ee5a8.df1c2f0c5e98a0f2
     3c7c85ef198f0d9b.9a6840ca09f95ebd.cf08f5748d9cb486.23c51c5e93c815d4
     f5db28bf3667f84e.283be1ab108532cb.c07a7b14b1bd5c32.0c2c37548d07c5c8
-    771dfddb68636cfb
-VPMOVSXBQ_128(mem)
+    000000000000008d
+VMOVMSKPS_256(mem)
   before
     3e64e8dd41e7c698.440d4200f914d811.65bd2a5247f31bee.58d9bb2f6d2e1a57
     3ecc764734a08ecc.865ed01efe22e78f.2dbb97aac950d451.f571af315d7a29a2
@@ -39035,12 +39035,12 @@
     7b86a4da82fb9b1c
   after
     3e64e8dd41e7c698.440d4200f914d811.65bd2a5247f31bee.58d9bb2f6d2e1a57
-    0000000000000000.0000000000000000.000000000000001a.0000000000000057
+    3ecc764734a08ecc.865ed01efe22e78f.2dbb97aac950d451.f571af315d7a29a2
     532222065b9981c3.151acd86e21e6175.5c01a5a1b3a81b21.f28e55861f2ec7be
     59336905d5de5ba8.4e8c35a24193846e.ce5acf232005aa89.ab7ba89b4cd52e58
     7b86a4da82fb9b1c
 
-VPMOVSXBQ_128(reg)
+VMOVMSKPS_256(reg)
   before
     c0f946b15d2c49b6.2cc9c52fbc7cd8a8.8d0205e0b50e8a27.5f94911a2d753db6
     d421888a78f576d0.a8b0b4722c7eb3ee.2ec637aadd19b04c.eb796773f50392d4
@@ -39049,11 +39049,11 @@
     09293b03cadc6b88
   after
     c0f946b15d2c49b6.2cc9c52fbc7cd8a8.8d0205e0b50e8a27.5f94911a2d753db6
-    0000000000000000.0000000000000000.0000000000000063.000000000000000e
+    d421888a78f576d0.a8b0b4722c7eb3ee.2ec637aadd19b04c.eb796773f50392d4
     154a68d370e25c19.a9b6b1b942f0a9a7.8d25c96e53423288.4ed7cd1a94bc630e
     ddc0e2f7e07d373b.0ba638f019de75ff.066bb697b3154b88.647840fc27ab6c91
-    09293b03cadc6b88
-VPMOVSXBQ_128(mem)
+    00000000000000c4
+VMOVMSKPS_256(mem)
   before
     19b63a1d985c1a20.8acff062645445e3.aa4bc603ce55d521.f5e4fa919a1d38f7
     70eab935ad363684.76c2908099f2c0bc.6272d5de7c61833a.b6db92c8a3e63582
@@ -39062,12 +39062,12 @@
     7db32414a541e281
   after
     19b63a1d985c1a20.8acff062645445e3.aa4bc603ce55d521.f5e4fa919a1d38f7
-    0000000000000000.0000000000000000.0000000000000038.fffffffffffffff7
+    70eab935ad363684.76c2908099f2c0bc.6272d5de7c61833a.b6db92c8a3e63582
     e993343626767be2.ffe7bcbd1ae4e573.0ee7e36e400c3c75.a59e79a86afc7dd5
     627b280e1f29a463.7f88728684b5efb3.8c766b9d3564bbff.1e77aa9d8dec4e9b
     7db32414a541e281
 
-VPMOVSXWQ_128(reg)
+VMOVNTPD_128(reg)
   before
     1e9ee07750877532.b66f10a8b25a6e36.54f2ae4573f11c29.b7ebea587775bd04
     5d84db342a4b455b.c13b68f0fe159585.d8716a678125a681.6b11da8c2349feaf
@@ -39076,11 +39076,11 @@
     54a8312fb8da9250
   after
     1e9ee07750877532.b66f10a8b25a6e36.54f2ae4573f11c29.b7ebea587775bd04
-    0000000000000000.0000000000000000.00000000000055ef.0000000000003a2d
+    5d84db342a4b455b.c13b68f0fe159585.d8716a678125a681.6b11da8c2349feaf
     96b112b5ce188ca8.5eabacd31d67d57c.6851a4594ddcc966.83b6b92455ef3a2d
     24708068d87b87c4.6b8b593b2b5be948.61dd578670a2c385.dda4020b28702da9
     54a8312fb8da9250
-VPMOVSXWQ_128(mem)
+VMOVNTPD_128(mem)
   before
     c38ec37b2238254d.650f21b8e5ff715c.c2a6ea1544fd8e15.1d637f598904ce8a
     082232db8296a4cd.b4d8f2109130871b.41cadb4e865a800e.f92d1840318d2720
@@ -39088,13 +39088,13 @@
     80839c8791845105.eb1b108e33ca27c0.2358ce89ee733937.81c08ef7a445b2b0
     e521639fa68c5c03
   after
-    c38ec37b2238254d.650f21b8e5ff715c.c2a6ea1544fd8e15.1d637f598904ce8a
-    0000000000000000.0000000000000000.ffffffffffff8904.ffffffffffffce8a
+    c38ec37b2238254d.650f21b8e5ff715c.2358ce89ee733937.81c08ef7a445b2b0
+    082232db8296a4cd.b4d8f2109130871b.41cadb4e865a800e.f92d1840318d2720
     fd30fc3bf301c9fc.6c18eede779b05ae.c3c1a8d00a7d7a60.51881fa607c90af3
     80839c8791845105.eb1b108e33ca27c0.2358ce89ee733937.81c08ef7a445b2b0
     e521639fa68c5c03
 
-VPMOVSXWQ_128(reg)
+VMOVNTPD_128(reg)
   before
     daf79a0aa92b4498.6be88eac792bf815.8c2c578a624c28fe.3f5bc7644e4679be
     ba8d2da548aca51a.9c2c4f94c6037958.aa99bc3f9faa4614.f195114d4504f621
@@ -39103,11 +39103,11 @@
     2a8da894cf353030
   after
     daf79a0aa92b4498.6be88eac792bf815.8c2c578a624c28fe.3f5bc7644e4679be
-    0000000000000000.0000000000000000.fffffffffffff0b9.0000000000006b8e
+    ba8d2da548aca51a.9c2c4f94c6037958.aa99bc3f9faa4614.f195114d4504f621
     e2311ada1f9dbc35.ed195a2d951792f9.a3ac3c198772baad.16d42730f0b96b8e
     ae2d5b17cb8ac596.3b7b2a610174fd24.d1b3d485b52fc376.8be385f96a70952f
     2a8da894cf353030
-VPMOVSXWQ_128(mem)
+VMOVNTPD_128(mem)
   before
     d19f0bed3c14f7be.7aceefc6e8fefce9.63203e1e27257607.92f87fedc66e9b1b
     5ae52af0cc1aa705.a160cf5511859cda.3fd30f4f2236bacc.40c839bf55ba7f47
@@ -39115,13 +39115,13 @@
     853c8ca5c8c9b26c.758667bff8fd0a43.8791dcbc09a993ad.d738cb4d5faa5ae6
     77719be21166cab1
   after
-    d19f0bed3c14f7be.7aceefc6e8fefce9.63203e1e27257607.92f87fedc66e9b1b
-    0000000000000000.0000000000000000.ffffffffffffc66e.ffffffffffff9b1b
+    d19f0bed3c14f7be.7aceefc6e8fefce9.8791dcbc09a993ad.d738cb4d5faa5ae6
+    5ae52af0cc1aa705.a160cf5511859cda.3fd30f4f2236bacc.40c839bf55ba7f47
     a22b818a9c52fc30.812ef82fe2abe314.ac5f1bdf0fb3859f.396fff66ff9faba7
     853c8ca5c8c9b26c.758667bff8fd0a43.8791dcbc09a993ad.d738cb4d5faa5ae6
     77719be21166cab1
 
-VPMOVSXWQ_128(reg)
+VMOVNTPD_128(reg)
   before
     76646a90b25f35b3.e0e6c82f6a8a84e4.d9b21773ee065014.aa35d0d12c23a022
     2e5e35c3de22d799.8df3b012a1a12fc5.090004b66153ef33.f217730b952e6729
@@ -39130,11 +39130,11 @@
     402847c789287566
   after
     76646a90b25f35b3.e0e6c82f6a8a84e4.d9b21773ee065014.aa35d0d12c23a022
-    0000000000000000.0000000000000000.00000000000060d5.ffffffffffffa5ef
+    2e5e35c3de22d799.8df3b012a1a12fc5.090004b66153ef33.f217730b952e6729
     fcabf6e8303aed0f.6930c03c861b6f3b.61ba2bf5ec6f244b.3b033f5460d5a5ef
     3d97ab694433b3c0.506974983802ff71.3c2d869a2ce62b09.61c5b299a824159f
     402847c789287566
-VPMOVSXWQ_128(mem)
+VMOVNTPD_128(mem)
   before
     b4f97ac820eb7f70.4b6e4fb3b79a6559.1e6a4912d0659d94.f8a41312bc443f19
     9a05c78a897cf0e8.837bde3325fa3f85.afffba966c4d03cf.f06dcdc939169d26
@@ -39142,13 +39142,13 @@
     26f8a1fd3e31f5d4.e16bae815fd65949.8a14606d1fe11940.0321b9a6674427e9
     d7a4e3a252b8caf7
   after
-    b4f97ac820eb7f70.4b6e4fb3b79a6559.1e6a4912d0659d94.f8a41312bc443f19
-    0000000000000000.0000000000000000.ffffffffffffbc44.0000000000003f19
+    b4f97ac820eb7f70.4b6e4fb3b79a6559.8a14606d1fe11940.0321b9a6674427e9
+    9a05c78a897cf0e8.837bde3325fa3f85.afffba966c4d03cf.f06dcdc939169d26
     cc16abf7dee483fb.410c545328df7cf1.dff4421028c8ed4f.7fd3b02c3ee781dd
     26f8a1fd3e31f5d4.e16bae815fd65949.8a14606d1fe11940.0321b9a6674427e9
     d7a4e3a252b8caf7
 
-VPACKUSDW_128(reg)
+VMOVNTPD_256(reg)
   before
     56a82a8e98cfa7b2.86792587c26f02a0.bfe5e728636a1138.8c2c8d976ea541cd
     de798ad5d716fac7.c764b38189a8668b.37c6fbb3d328e26b.c108477b301f2123
@@ -39156,12 +39156,12 @@
     75b18624ae61f0ae.5ca6de754a40216c.65eda42a614fba4b.343c4e227e66fdd8
     2a2c95bd434b7090
   after
-    0000000000000000.0000000000000000.0000ffffffff0000.ffff00000000ffff
+    56a82a8e98cfa7b2.86792587c26f02a0.bfe5e728636a1138.8c2c8d976ea541cd
     de798ad5d716fac7.c764b38189a8668b.37c6fbb3d328e26b.c108477b301f2123
     c963ffe3ab18fee2.c584c7d7aceadcc0.a55ae690489a068d.05740806815b776d
     75b18624ae61f0ae.5ca6de754a40216c.65eda42a614fba4b.343c4e227e66fdd8
     2a2c95bd434b7090
-VPACKUSDW_128(mem)
+VMOVNTPD_256(mem)
   before
     c20f57c2ea168cc0.3cb119047f7d0cd8.689673487cb7f1ba.d3ca32edb7d03951
     dab2121d92d40c95.7cadb6efb8f98e0c.c520023a605a08d7.4b3e8b46e8abc04a
@@ -39169,13 +39169,13 @@
     f76960854f562bdc.d2ccfc97d33fb23f.e131ff2fad55f92d.c91b8f654a9cd6c7
     871c3105b3cbdca3
   after
-    c20f57c2ea168cc0.3cb119047f7d0cd8.689673487cb7f1ba.d3ca32edb7d03951
+    f76960854f562bdc.d2ccfc97d33fb23f.e131ff2fad55f92d.c91b8f654a9cd6c7
     dab2121d92d40c95.7cadb6efb8f98e0c.c520023a605a08d7.4b3e8b46e8abc04a
-    0000000000000000.0000000000000000.ffffffff00000000.0000ffffffff0000
+    4de241ba5590ad3a.8ff25952f561b1f5.4e100738123521ee.2995ab9f906b8be3
     f76960854f562bdc.d2ccfc97d33fb23f.e131ff2fad55f92d.c91b8f654a9cd6c7
     871c3105b3cbdca3
 
-VPACKUSDW_128(reg)
+VMOVNTPD_256(reg)
   before
     bee48fe96683da23.b313eb6a9d3342a6.a2869d2ced21cd98.5951640a4ec54cbd
     ccbea47fff510cf2.5fae5f555a32adc5.596e377be0933daa.913ab4b41092d5cd
@@ -39183,12 +39183,12 @@
     dadce46e565cfb2f.f3e3efee93c772b1.eff446fcbf530faa.b69a032a686f7c17
     59a9facd369912aa
   after
-    0000000000000000.0000000000000000.ffffffffffffffff.ffff00000000ffff
+    bee48fe96683da23.b313eb6a9d3342a6.a2869d2ced21cd98.5951640a4ec54cbd
     ccbea47fff510cf2.5fae5f555a32adc5.596e377be0933daa.913ab4b41092d5cd
     0cf86c321bc0aebd.d6053733a3602965.54cfc6f2471f3f21.67b96b1b0fc65186
     dadce46e565cfb2f.f3e3efee93c772b1.eff446fcbf530faa.b69a032a686f7c17
     59a9facd369912aa
-VPACKUSDW_128(mem)
+VMOVNTPD_256(mem)
   before
     2eb2caf0964fce6c.91b7069f4ab230f5.94150374467543d6.862ab405e3bbe9f1
     0f80f17fa49d6d88.8fd5d031964c89ba.9367efb0da765900.76bd0a7950e208a1
@@ -39196,13 +39196,13 @@
     699f329237324380.cc094928a08295f4.1f9b41f90e9e4411.cc296452729d08ee
     eb9b5e90604a61e3
   after
-    2eb2caf0964fce6c.91b7069f4ab230f5.94150374467543d6.862ab405e3bbe9f1
+    699f329237324380.cc094928a08295f4.1f9b41f90e9e4411.cc296452729d08ee
     0f80f17fa49d6d88.8fd5d031964c89ba.9367efb0da765900.76bd0a7950e208a1
-    0000000000000000.0000000000000000.0000ffff00000000.00000000ffffffff
+    dae0eb677b8fab2b.2f823d90d4b9412b.cea5308d68d5705a.19f946c4a154a967
     699f329237324380.cc094928a08295f4.1f9b41f90e9e4411.cc296452729d08ee
     eb9b5e90604a61e3
 
-VPACKUSDW_128(reg)
+VMOVNTPD_256(reg)
   before
     d29932e807e6eff2.9a8744eef591f2b4.c4b8f1669735c1c0.64159edfe8dd9050
     dd70dbc702fdefc6.47649c65d0b874f3.71d930b4545d013c.77dec32b119f1144
@@ -39210,12 +39210,12 @@
     cfd99ccc65ce346f.89320e594f90e040.5ea46334923eabf3.7b9057a5c1daa1f9
     2311bdac816a2813
   after
-    0000000000000000.0000000000000000.ffffffffffff0000.ffffffffffffffff
+    d29932e807e6eff2.9a8744eef591f2b4.c4b8f1669735c1c0.64159edfe8dd9050
     dd70dbc702fdefc6.47649c65d0b874f3.71d930b4545d013c.77dec32b119f1144
     686d559aed1c9c0c.4d04b6e5e4b48568.31b9028074879014.35c32dc9a5ef8318
     cfd99ccc65ce346f.89320e594f90e040.5ea46334923eabf3.7b9057a5c1daa1f9
     2311bdac816a2813
-VPACKUSDW_128(mem)
+VMOVNTPD_256(mem)
   before
     0a12dbc8ffaed491.6e03acc805a0f19c.d5b921ac2a5942a7.55e64f3e4a0e8e86
     0c5f2de75aaf61a0.a13682fc6a1c103f.0e666acc931a67c8.73cbc3093a847478
@@ -39223,13 +39223,13 @@
     d20c5fda111d0c1f.32e56db9f1486294.b8628e217eb4e8ea.90ac30922b8f3c2b
     47422128663d9644
   after
-    0a12dbc8ffaed491.6e03acc805a0f19c.d5b921ac2a5942a7.55e64f3e4a0e8e86
+    d20c5fda111d0c1f.32e56db9f1486294.b8628e217eb4e8ea.90ac30922b8f3c2b
     0c5f2de75aaf61a0.a13682fc6a1c103f.0e666acc931a67c8.73cbc3093a847478
-    0000000000000000.0000000000000000.0000ffffffffffff.ffff0000ffffffff
+    06c330f3ac7b8a6b.c3bd19d330d1cc03.100565a4a6df0acf.129eba01fb2b9a76
     d20c5fda111d0c1f.32e56db9f1486294.b8628e217eb4e8ea.90ac30922b8f3c2b
     47422128663d9644
 
-VPMOVZXBQ_128(reg)
+VMOVNTPS_128(reg)
   before
     94aa8a2f47c0e36d.4d043687a6a2a3e8.49fa7b1a4c0f0ea0.e049622d37a6bd42
     d33065136aa46051.537831e686150af1.64483d63dab10cd1.65865bb5eec14506
@@ -39238,11 +39238,11 @@
     ba37066f1c796488
   after
     94aa8a2f47c0e36d.4d043687a6a2a3e8.49fa7b1a4c0f0ea0.e049622d37a6bd42
-    0000000000000000.0000000000000000.000000000000003b.0000000000000060
+    d33065136aa46051.537831e686150af1.64483d63dab10cd1.65865bb5eec14506
     6122b0406c76499d.c034cde3cd82ff67.de1bb1fe3abb97d3.23e4f7a6bf0f3b60
     98cb6623e8c1d9fc.7004846a99f53c75.15bfd25805b8ec53.f630b1eac59e5c7c
     ba37066f1c796488
-VPMOVZXBQ_128(mem)
+VMOVNTPS_128(mem)
   before
     4bc3701fe1ad0fad.d57684277b114e1b.3fb3d467037b7d48.647f9dded93447fd
     85a06de82f45181a.747004b7c1f3e2a6.090f38c62920800c.26a90cfa52bbe47c
@@ -39250,13 +39250,13 @@
     64820d72d8d23676.48811f30d39b59ae.fef92d5b18f3b615.7866cba9a01cd2ac
     be921213ae0e9cb4
   after
-    4bc3701fe1ad0fad.d57684277b114e1b.3fb3d467037b7d48.647f9dded93447fd
-    0000000000000000.0000000000000000.0000000000000047.00000000000000fd
+    4bc3701fe1ad0fad.d57684277b114e1b.fef92d5b18f3b615.7866cba9a01cd2ac
+    85a06de82f45181a.747004b7c1f3e2a6.090f38c62920800c.26a90cfa52bbe47c
     449c78b5234d3cf9.d105e44154f2d148.aae22d7327eeffec.b9871d1a0bdafe7d
     64820d72d8d23676.48811f30d39b59ae.fef92d5b18f3b615.7866cba9a01cd2ac
     be921213ae0e9cb4
 
-VPMOVZXBQ_128(reg)
+VMOVNTPS_128(reg)
   before
     e956eec4d13b9742.c11da90b6bdfc4bf.3530b2f0d778b483.e120b668183a63b2
     53005c28a42f0001.373ac66cf780a0fd.f45e97edff171e74.2f23438844d0c0f0
@@ -39265,11 +39265,11 @@
     324adc8ce5df5426
   after
     e956eec4d13b9742.c11da90b6bdfc4bf.3530b2f0d778b483.e120b668183a63b2
-    0000000000000000.0000000000000000.000000000000008a.00000000000000fb
+    53005c28a42f0001.373ac66cf780a0fd.f45e97edff171e74.2f23438844d0c0f0
     59da57abc377139e.a1a5e28299c2875f.e156cc93e404d52d.c4cd51a6b8c08afb
     5832dbb9cb9e0cc4.dd2a78376cb0340f.58664c4e24ca1359.7bec5aae8f167dfe
     324adc8ce5df5426
-VPMOVZXBQ_128(mem)
+VMOVNTPS_128(mem)
   before
     c4b4522cd726cc9e.aa52e4bf58302620.c69504788d566439.b5d8138a5bf515a5
     0df6387a80f8a193.ad876e2704ba9e5e.38b1033217c1d30a.54f91db4241117bc
@@ -39277,13 +39277,13 @@
     333245d0696951a3.315ff7d12fe3972e.263047bdd7135d50.c777eb7ede4e09fe
     546da7f706877280
   after
-    c4b4522cd726cc9e.aa52e4bf58302620.c69504788d566439.b5d8138a5bf515a5
-    0000000000000000.0000000000000000.0000000000000015.00000000000000a5
+    c4b4522cd726cc9e.aa52e4bf58302620.263047bdd7135d50.c777eb7ede4e09fe
+    0df6387a80f8a193.ad876e2704ba9e5e.38b1033217c1d30a.54f91db4241117bc
     e8dc0a62fd5f8f31.bb1c765f6ec7b029.0e4cf05026fc3dae.901567361cab544b
     333245d0696951a3.315ff7d12fe3972e.263047bdd7135d50.c777eb7ede4e09fe
     546da7f706877280
 
-VPMOVZXBQ_128(reg)
+VMOVNTPS_128(reg)
   before
     9341970c31e1cb7e.c9c364b0e122a415.6b9aedebe69b9118.5b2a84674613f11d
     df40b52bfbe84fa3.855de3ef809444b5.c61b54182c7ad795.880623398e07b241
@@ -39292,11 +39292,11 @@
     7fdd27d89615686b
   after
     9341970c31e1cb7e.c9c364b0e122a415.6b9aedebe69b9118.5b2a84674613f11d
-    0000000000000000.0000000000000000.000000000000005f.00000000000000e7
+    df40b52bfbe84fa3.855de3ef809444b5.c61b54182c7ad795.880623398e07b241
     96b6ffbffe283b9c.45ca3e7763cdecad.9c2c29c49f0ca84e.8b90a11fcbfb5fe7
     13ef7034d92ecb14.e3d7f136a5d95929.4a1a675bdbde3ef1.3e9479051afcb23b
     7fdd27d89615686b
-VPMOVZXBQ_128(mem)
+VMOVNTPS_128(mem)
   before
     283827825c533da1.b13704f626863ab8.3d50791762c34756.2c310a497b7bd72a
     1772f6f087c0ec09.cedab77281bac534.2d015106b7977260.9ebc0efa1c6faca5
@@ -39304,13 +39304,13 @@
     33adedc97e5dcb22.f15f6b43d3eb1e62.433ae1be982e6db9.a2622a56ce8e010e
     ec143ad818d1f855
   after
-    283827825c533da1.b13704f626863ab8.3d50791762c34756.2c310a497b7bd72a
-    0000000000000000.0000000000000000.00000000000000d7.000000000000002a
+    283827825c533da1.b13704f626863ab8.433ae1be982e6db9.a2622a56ce8e010e
+    1772f6f087c0ec09.cedab77281bac534.2d015106b7977260.9ebc0efa1c6faca5
     26550e0f346b33d0.c42386128758a833.91b5f5efc0619572.fc096fda5947fc0d
     33adedc97e5dcb22.f15f6b43d3eb1e62.433ae1be982e6db9.a2622a56ce8e010e
     ec143ad818d1f855
 
-VPMOVZXWQ_128(reg)
+VMOVNTPS_256(reg)
   before
     366b9bced39a1d8e.18480e0c82a4732a.afda64720200656d.205a925f5b09b660
     dcb349a29a78ab64.b2f1eec35b4be515.5ce06d09af22b7ff.05e283be26ff2b94
@@ -39319,11 +39319,11 @@
     73e1ae88ccf5f034
   after
     366b9bced39a1d8e.18480e0c82a4732a.afda64720200656d.205a925f5b09b660
-    0000000000000000.0000000000000000.000000000000151b.0000000000008981
+    dcb349a29a78ab64.b2f1eec35b4be515.5ce06d09af22b7ff.05e283be26ff2b94
     3a3841c209f4df84.dd7307da265fde0e.52bd807676dd51c5.cc9e30c7151b8981
     ac457d99bd9cf59a.769bd73dfeea1a42.efbd9b24f4be6e6a.525a156743698c52
     73e1ae88ccf5f034
-VPMOVZXWQ_128(mem)
+VMOVNTPS_256(mem)
   before
     0c017818cdcc7053.8e28fb9351fb2851.5735d9d800fb55dd.8d2bb87fc5504b9b
     f784ee0261f9c9da.3c2bb61c629db656.5d0d8997479b4a0a.8955d5f3841f2403
@@ -39331,13 +39331,13 @@
     36e6ce93b487f5d1.6bc4d48b69ddcdf8.48a7e53115bd54cd.0c08fdd63ea6b92b
     4a2a001d7075ed42
   after
-    0c017818cdcc7053.8e28fb9351fb2851.5735d9d800fb55dd.8d2bb87fc5504b9b
-    0000000000000000.0000000000000000.000000000000c550.0000000000004b9b
+    36e6ce93b487f5d1.6bc4d48b69ddcdf8.48a7e53115bd54cd.0c08fdd63ea6b92b
+    f784ee0261f9c9da.3c2bb61c629db656.5d0d8997479b4a0a.8955d5f3841f2403
     11378c31a589b7f5.119baba08b0fd954.64ef6466efd8b6f6.4085eeecceb8354f
     36e6ce93b487f5d1.6bc4d48b69ddcdf8.48a7e53115bd54cd.0c08fdd63ea6b92b
     4a2a001d7075ed42
 
-VPMOVZXWQ_128(reg)
+VMOVNTPS_256(reg)
   before
     5636f22e01b20d41.425d3113abff419a.a5f22f4a9791d0ee.e60087e5d557e2ba
     8c7acf738ce854d3.11682f9da5fe557c.1a71b747b2b91ce1.18c7c96c49b11ae9
@@ -39346,11 +39346,11 @@
     c4a8193301b91ac0
   after
     5636f22e01b20d41.425d3113abff419a.a5f22f4a9791d0ee.e60087e5d557e2ba
-    0000000000000000.0000000000000000.00000000000090d7.000000000000b987
+    8c7acf738ce854d3.11682f9da5fe557c.1a71b747b2b91ce1.18c7c96c49b11ae9
     4940935aaea3ffa5.7fd3461dbe8eeda2.288c69f055e0ee7e.bbc924b490d7b987
     e7d63b4d03704a63.6869f18013bec738.2a903faf1c938170.abd015a8c4d67ac0
     c4a8193301b91ac0
-VPMOVZXWQ_128(mem)
+VMOVNTPS_256(mem)
   before
     e21fab43648c55b1.c386c2ba25da71b8.a8f7adb0c0979d6b.7bca37f2a45d1264
     e00047c3085be7c2.399d240cb36daf51.1b49f49ae0272b67.79844c2489cadd05
@@ -39358,13 +39358,13 @@
     f12e8fc38520feef.632f6a0f7d4063fd.0a69184eea9a6369.e8aabd05d7be1101
     11af128c795ef1b3
   after
-    e21fab43648c55b1.c386c2ba25da71b8.a8f7adb0c0979d6b.7bca37f2a45d1264
-    0000000000000000.0000000000000000.000000000000a45d.0000000000001264
+    f12e8fc38520feef.632f6a0f7d4063fd.0a69184eea9a6369.e8aabd05d7be1101
+    e00047c3085be7c2.399d240cb36daf51.1b49f49ae0272b67.79844c2489cadd05
     9c166a9f0a338b1d.a5665daf46b641d9.9d2b442b907a2f58.7e0a7ab166661e00
     f12e8fc38520feef.632f6a0f7d4063fd.0a69184eea9a6369.e8aabd05d7be1101
     11af128c795ef1b3
 
-VPMOVZXWQ_128(reg)
+VMOVNTPS_256(reg)
   before
     576474b2e8d0fbc3.bb14311c962cfc63.cf434598f1985169.3ecfecee0d9584c6
     1416dfe3bfa26add.d694cf94586541a6.45edecb6404946c8.15283df913774e9c
@@ -39373,11 +39373,11 @@
     03e4f0ce91f9f7aa
   after
     576474b2e8d0fbc3.bb14311c962cfc63.cf434598f1985169.3ecfecee0d9584c6
-    0000000000000000.0000000000000000.000000000000184a.0000000000007c17
+    1416dfe3bfa26add.d694cf94586541a6.45edecb6404946c8.15283df913774e9c
     a6114f8b9a607bac.1e7ae219e7d788e4.217a5ad606df7fc7.6a42865a184a7c17
     67a1c01716946adc.6e91e795608c8e48.be368c62dee63711.1be743fd391ccb62
     03e4f0ce91f9f7aa
-VPMOVZXWQ_128(mem)
+VMOVNTPS_256(mem)
   before
     fd0509b93debbc1b.b4122ff1cecc731b.a4a75bf6df920fff.7a6d7cc865ebac53
     e7150bab5800d5e0.e9b097875f94d213.9b86b9277ff5c634.b06a287236791839
@@ -39385,13 +39385,13 @@
     f736b6504dc2f618.7ca142947a0080df.3bd224a893ffc9ca.faeaa1472762c79f
     c50567487fd48377
   after
-    fd0509b93debbc1b.b4122ff1cecc731b.a4a75bf6df920fff.7a6d7cc865ebac53
-    0000000000000000.0000000000000000.00000000000065eb.000000000000ac53
+    f736b6504dc2f618.7ca142947a0080df.3bd224a893ffc9ca.faeaa1472762c79f
+    e7150bab5800d5e0.e9b097875f94d213.9b86b9277ff5c634.b06a287236791839
     9ce2708eff44ff26.63c6f4446476c270.2efb7d135cc07014.bc7b8bceed1db86e
     f736b6504dc2f618.7ca142947a0080df.3bd224a893ffc9ca.faeaa1472762c79f
     c50567487fd48377
 
-VPMOVZXDQ_128(reg)
+VPACKSSWB_128(reg)
   before
     7b16d73f92ff26a3.d6de59db5f8675e3.918e7ee33cbe470c.9cd728d140be8d84
     776aef98fc70ecce.13a6d31d509c39b2.fed6a39d463a55a2.2fd6077a7e0a776b
@@ -39399,12 +39399,12 @@
     b00a051b4252d5d4.1bc6417241f0800f.50af9802a5a231bb.57f043fd1e76b076
     a4a599aeb8af76f2
   after
-    7b16d73f92ff26a3.d6de59db5f8675e3.918e7ee33cbe470c.9cd728d140be8d84
-    0000000000000000.0000000000000000.00000000ce9a3c90.0000000069ee44ad
+    0000000000000000.0000000000000000.7f807f80807f7f7f.80807f7f7f7f7f7f
+    776aef98fc70ecce.13a6d31d509c39b2.fed6a39d463a55a2.2fd6077a7e0a776b
     144caabd58b213a5.8c5aa2003d11feb2.1fc8ad2e3602e44e.ce9a3c9069ee44ad
     b00a051b4252d5d4.1bc6417241f0800f.50af9802a5a231bb.57f043fd1e76b076
     a4a599aeb8af76f2
-VPMOVZXDQ_128(mem)
+VPACKSSWB_128(mem)
   before
     9383b99054a4534c.a5eefa1e57db6f06.9eb62c5e78457af4.edd6608531a57796
     fe561f8d0d6203b1.5146873332d91ce8.eff5dfb0ff1da98e.538b02247697f38b
@@ -39413,12 +39413,12 @@
     c9edd6d9ae8102ba
   after
     9383b99054a4534c.a5eefa1e57db6f06.9eb62c5e78457af4.edd6608531a57796
-    0000000000000000.0000000000000000.00000000edd66085.0000000031a57796
-    c2ec479300f4424c.0e5ca7c470d91a26.eb50d754f283c909.dc1879490f04e145
+    fe561f8d0d6203b1.5146873332d91ce8.eff5dfb0ff1da98e.538b02247697f38b
+    0000000000000000.0000000000000000.807f7f7f807f7f7f.808080807f7f7f80
     bc10ad8d4866cb4a.3a7d563fac66a36b.6f938e376b849590.e4cac16298797d71
     c9edd6d9ae8102ba
 
-VPMOVZXDQ_128(reg)
+VPACKSSWB_128(reg)
   before
     e6cdb51ceca8adcd.c68dce6702c45bd6.2ff4910f820cf363.558a8243892bca4f
     97b55896ef7bba55.bd30250d491bae1d.4a0f529f8f5848bc.7a012f6566842474
@@ -39426,12 +39426,12 @@
     25d1e0dfb253e977.e318656defe28b8b.635d5bb4bd0fec3b.f29ea09cce7d369a
     fc5d5c89913566f4
   after
-    e6cdb51ceca8adcd.c68dce6702c45bd6.2ff4910f820cf363.558a8243892bca4f
-    0000000000000000.0000000000000000.00000000bbc40f8a.000000001e9b5f28
+    0000000000000000.0000000000000000.80807f80807f7f7f.7f7f807f7f7f7f7f
+    97b55896ef7bba55.bd30250d491bae1d.4a0f529f8f5848bc.7a012f6566842474
     38f3bdb352856500.7ec52e6b39767f4b.e819975d6fd5dc20.bbc40f8a1e9b5f28
     25d1e0dfb253e977.e318656defe28b8b.635d5bb4bd0fec3b.f29ea09cce7d369a
     fc5d5c89913566f4
-VPMOVZXDQ_128(mem)
+VPACKSSWB_128(mem)
   before
     b5cbc23c84d0ab62.ba9cbb86aa708369.c9f546ff876a8e0a.18289a101693b3ba
     f9b54ba1c259c012.52a04c14d7686e80.0c284e0d1c1a44f3.64c651de15ec6f49
@@ -39440,12 +39440,12 @@
     61891824106faf0a
   after
     b5cbc23c84d0ab62.ba9cbb86aa708369.c9f546ff876a8e0a.18289a101693b3ba
-    0000000000000000.0000000000000000.0000000018289a10.000000001693b3ba
-    a4e774a468dc632d.4b298df6d4c7e868.887cf884cafe6873.a1837b8856a65a93
+    f9b54ba1c259c012.52a04c14d7686e80.0c284e0d1c1a44f3.64c651de15ec6f49
+    0000000000000000.0000000000000000.807f80807f807f80.7f7f7f7f7f7f7f7f
     922dba3191664ee2.00827c963e1a2bce.19bec04eae23b7b6.2cab147b764eb045
     61891824106faf0a
 
-VPMOVZXDQ_128(reg)
+VPACKSSWB_128(reg)
   before
     9c6b83edc195918f.9f5298345a023d5b.ccf91562b0ed745e.9bbb2259e495ede7
     3a9b5244244d9380.a7248a99debceec4.0dd852c4c7cafec3.ea3d9b90865ec633
@@ -39453,12 +39453,12 @@
     0a18094873a0e654.18fa9b3a88bb8019.5a01adff51d7c9bf.5f02bf31852a4fca
     3dde62741845776e
   after
-    9c6b83edc195918f.9f5298345a023d5b.ccf91562b0ed745e.9bbb2259e495ede7
-    0000000000000000.0000000000000000.00000000e210a6de.00000000b38cfdc5
+    0000000000000000.0000000000000000.7f7f7f7f80808080.7f7f808080808080
+    3a9b5244244d9380.a7248a99debceec4.0dd852c4c7cafec3.ea3d9b90865ec633
     95668094d622f188.866d0d4d39a11b4b.1e6c312a1e3f07aa.e210a6deb38cfdc5
     0a18094873a0e654.18fa9b3a88bb8019.5a01adff51d7c9bf.5f02bf31852a4fca
     3dde62741845776e
-VPMOVZXDQ_128(mem)
+VPACKSSWB_128(mem)
   before
     586f0b9388e833dc.f5fde9ce9554af8f.3997b24ee719db5d.1fe3c2aefd1f80ad
     8c82377bf31f3d41.b2601c91dac988e6.c510cd7371c4e641.c75e6ca5bea26a21
@@ -39467,12 +39467,12 @@
     b05bc36d9207a855
   after
     586f0b9388e833dc.f5fde9ce9554af8f.3997b24ee719db5d.1fe3c2aefd1f80ad
-    0000000000000000.0000000000000000.000000001fe3c2ae.00000000fd1f80ad
-    b5e3611672f752c8.9d8f9ffdde8cac05.9830689742ca5ef1.b0bda8502fecc1c6
+    8c82377bf31f3d41.b2601c91dac988e6.c510cd7371c4e641.c75e6ca5bea26a21
+    0000000000000000.0000000000000000.7f8080807f808080.80807f80807f807f
     ae5e0551237b2d9e.12d46d7f3c275997.8ec500a57737ff9a.344e7119ec8ac249
     b05bc36d9207a855
 
-VMPSADBW_128_0x0(reg)
+VPAVGB_128(reg)
   before
     81319ab8bcefb197.55bf9f1922b78bef.6c7c82819129c949.829910892b158468
     011cf26707cf17bb.85d1ac588ab828e6.09d3da70781b38c6.5279132f7b72aa87
@@ -39480,12 +39480,12 @@
     8260179d6ea4ec57.ef3c0bf007360e78.79be45c66e0407d4.f28de8715dd8c965
     7b59b1e527f8397d
   after
-    0000000000000000.0000000000000000.0153013300a60077.00ac013901420102
+    0000000000000000.0000000000000000.277ca69583538ec1.96554e597f666c54
     011cf26707cf17bb.85d1ac588ab828e6.09d3da70781b38c6.5279132f7b72aa87
     8d68c8e40e32166c.1962a6fc7889c0af.442572b98e8be4bb.d9318883825a2d21
     8260179d6ea4ec57.ef3c0bf007360e78.79be45c66e0407d4.f28de8715dd8c965
     7b59b1e527f8397d
-VMPSADBW_128_0x0(mem)
+VPAVGB_128(mem)
   before
     4f605dccfdc63a96.3a52dbfdc2b2d327.e22c571f53ccd06b.04e94f05b413debc
     49706a10fa4f88db.12881170a7e70889.cdfe04777956bfb4.40f48ce1fd42a41f
@@ -39495,11 +39495,11 @@
   after
     4f605dccfdc63a96.3a52dbfdc2b2d327.e22c571f53ccd06b.04e94f05b413debc
     49706a10fa4f88db.12881170a7e70889.cdfe04777956bfb4.40f48ce1fd42a41f
-    0000000000000000.0000000000000000.01b00182007301cc.00fd018f01cb014f
+    0000000000000000.0000000000000000.d8952e4b6691c890.22ef6e73d92bc16e
     23d69563dbbff99b.93f3bf3e92f74bb2.ff78754fc1771bfb.40d590200636f00a
     ba444f5bff12eee8
 
-VMPSADBW_128_0x0(reg)
+VPAVGB_128(reg)
   before
     57c231e3693fcbf2.bbc5ab4af7bf956f.f3c03073d0ead1d1.feb732a81c27ff50
     729a3224e34ac5d4.e9ec113faaa96e1e.e302026a0f349531.650840d8c0fa02ac
@@ -39507,12 +39507,12 @@
     918c83827127face.7b11bd03466cc5c3.e314ba51fdffc567.df114371543e5428
     aa6030b17cc61a9f
   after
-    0000000000000000.0000000000000000.01d601ae020d0296.020b018d00a1015b
+    0000000000000000.0000000000000000.d1031a7d7d4bb458.3c202ed2c5fc7174
     729a3224e34ac5d4.e9ec113faaa96e1e.e302026a0f349531.650840d8c0fa02ac
     661a4f8b07be1539.8b16432e108a3fd7.bf043190ea62d27f.12381cccc9fedf3b
     918c83827127face.7b11bd03466cc5c3.e314ba51fdffc567.df114371543e5428
     aa6030b17cc61a9f
-VMPSADBW_128_0x0(mem)
+VPAVGB_128(mem)
   before
     4df05f7a5ea3f0ce.4d3dca77bd12ae3f.96a7fcaa685dbc11.ab7c981ae597aa94
     a58f4cb715e090de.f77920d4890a6e37.b9a57a0f9169dfeb.7389c7553db7bdb3
@@ -39522,11 +39522,11 @@
   after
     4df05f7a5ea3f0ce.4d3dca77bd12ae3f.96a7fcaa685dbc11.ab7c981ae597aa94
     a58f4cb715e090de.f77920d4890a6e37.b9a57a0f9169dfeb.7389c7553db7bdb3
-    0000000000000000.0000000000000000.0126009c007e00dc.013800f0012000fa
+    0000000000000000.0000000000000000.a8a6bb5d7d63ce7e.8f83b03891a7b4a4
     e525523d73ac2158.86c1ea7b0a52016e.820928c469ff9cf5.73c109d6b0bd5b75
     628514f302bb5f71
 
-VMPSADBW_128_0x0(reg)
+VPAVGB_128(reg)
   before
     c21d60333470810e.84b5625e53528a19.2366569cf9ba4d05.e20650eb50a2ae7d
     eed7e902e368fcf9.488320a37888ad6c.1dc5c1d6d65f93d3.b89ca881af8edc41
@@ -39534,12 +39534,12 @@
     1adca3fd2653f067.b009974903d7137a.9ce48545cb9204c7.39bed7a743777f30
     9ce4a80eb08b6bb2
   after
-    0000000000000000.0000000000000000.00db006800cd009b.00d200ac01060086
+    0000000000000000.0000000000000000.777874b68a9753ac.cd99aa79a8b0e058
     eed7e902e368fcf9.488320a37888ad6c.1dc5c1d6d65f93d3.b89ca881af8edc41
     42fdabccaa300ddd.0d5b09f8ff5b477e.d12b27953dce1285.e195ab71a1d2e36e
     1adca3fd2653f067.b009974903d7137a.9ce48545cb9204c7.39bed7a743777f30
     9ce4a80eb08b6bb2
-VMPSADBW_128_0x0(mem)
+VPAVGB_128(mem)
   before
     e6d0989405196521.d1c0cc01f25ee043.0b584883a006cf8d.d83cd5521c37a644
     f35125245d2e27a8.c5f42245aadc1a1c.fb169790f3f635e3.e27f1528cb4a34a9
@@ -39549,11 +39549,11 @@
   after
     e6d0989405196521.d1c0cc01f25ee043.0b584883a006cf8d.d83cd5521c37a644
     f35125245d2e27a8.c5f42245aadc1a1c.fb169790f3f635e3.e27f1528cb4a34a9
-    0000000000000000.0000000000000000.01b7013c01c801bb.018a0041010c0199
+    0000000000000000.0000000000000000.8337708aca7e82b8.dd5e753d74416d77
     c63e0313881af5b1.d080453951615c77.0a0a00d82947f106.d0f553e1b4e703d9
     6cc0489a268abcfd
 
-VMPSADBW_128_0x1(reg)
+VPAVGW_128(reg)
   before
     46a61dcd67ca50b8.44424c49920a798a.a06f0bc27781db51.e1d812ea44c0bf2b
     baf3cde51233fdb7.f50a223a10b0b52c.1bdfee39fa4594d8.bd45b27f85292843
@@ -39561,12 +39561,12 @@
     e0f2af7418b28d2f.601662f9d74f4979.8672fca684e5a3a0.f3288de7e7fdbafb
     0636bf92407f5bf2
   after
-    0000000000000000.0000000000000000.01610177014300c8.00ee012000fe008e
+    0000000000000000.0000000000000000.5d7eec23b7beac49.9bb18782465c885e
     baf3cde51233fdb7.f50a223a10b0b52c.1bdfee39fa4594d8.bd45b27f85292843
     24f3544ec452fda5.b56200d01e1867c2.9f1cea0c7537c3b9.7a1c5c85078fe879
     e0f2af7418b28d2f.601662f9d74f4979.8672fca684e5a3a0.f3288de7e7fdbafb
     0636bf92407f5bf2
-VMPSADBW_128_0x1(mem)
+VPAVGW_128(mem)
   before
     8e1270702f22878d.4a3bd9c3abe0e801.d2f2c4a05760187d.2e2c1e73c4da7138
     67881b6ecff1faf6.be1bcda718664bc6.e7c1a3b0bb5790f9.f1984ee0d1a3692e
@@ -39576,11 +39576,11 @@
   after
     8e1270702f22878d.4a3bd9c3abe0e801.d2f2c4a05760187d.2e2c1e73c4da7138
     67881b6ecff1faf6.be1bcda718664bc6.e7c1a3b0bb5790f9.f1984ee0d1a3692e
-    0000000000000000.0000000000000000.01e60227022f01cc.01ac01b701e601aa
+    0000000000000000.0000000000000000.dd5ab428895c54bb.8fe236aacb3f6d33
     7b71507b9444a3e3.34d109dff2b019db.696cc4c09d29690b.3cb1c545bfdec6e3
     7bf70517d969a3f9
 
-VMPSADBW_128_0x1(reg)
+VPAVGW_128(reg)
   before
     471e41372ff79a1e.6f7dd262f0e052c0.ee3d480a968bfb83.8fdfff97541b43f9
     fa7177135e14e6fb.24523e196ed8371b.2271417b85efd5cf.c776a7895d24b60f
@@ -39588,12 +39588,12 @@
     88cfbfabb52d7094.408ac4a63f0e96fe.675d57dbb3836100.e23f2a69dba85566
     7b09fe31883cfafe
   after
-    0000000000000000.0000000000000000.010700e200bc0128.0144013e014d025b
+    0000000000000000.0000000000000000.27159a0c70acdc9d.dbb96f059a3a99c5
     fa7177135e14e6fb.24523e196ed8371b.2271417b85efd5cf.c776a7895d24b60f
     f13ea216014dc43f.75bd108c2a390f21.2bb8f29d5b68e36a.effc3680d74f7d7a
     88cfbfabb52d7094.408ac4a63f0e96fe.675d57dbb3836100.e23f2a69dba85566
     7b09fe31883cfafe
-VMPSADBW_128_0x1(mem)
+VPAVGW_128(mem)
   before
     98272ec2f716276f.1c71c840154026a7.5f85d755c96387dd.31ad6aa329cc8a3f
     1365370a464299e5.0770bb40bd132123.b07ac485e545a0eb.e5f429605acd9bd1
@@ -39603,11 +39603,11 @@
   after
     98272ec2f716276f.1c71c840154026a7.5f85d755c96387dd.31ad6aa329cc8a3f
     1365370a464299e5.0770bb40bd132123.b07ac485e545a0eb.e5f429605acd9bd1
-    0000000000000000.0000000000000000.00e4017901f6017f.019a008f00ed00a8
+    0000000000000000.0000000000000000.8800cdedd7549464.8bd14a02424d9308
     9771c06cf3c23c8d.55b54c325827d908.54801c1341de3442.7a9798695b2c649f
     138a408e64a29434
 
-VMPSADBW_128_0x1(reg)
+VPAVGW_128(reg)
   before
     07a5835796019ccc.58d73a5d882ee419.7092e3fb827f0dc9.5f2b804abaac29e3
     b0325e3190d5b814.e78c7bb56d1bc159.53fc52df64c778a4.0cffadb233383463
@@ -39615,12 +39615,12 @@
     95d5c9c9460e1a63.e317464896ae09a6.e1a8ada9c356dd56.b85457c19bb37faf
     6f6ecc41c1bb36d3
   after
-    0000000000000000.0000000000000000.0190014602810167.017a00a3012c00d3
+    0000000000000000.0000000000000000.571e751580296674.216467747f6223a9
     b0325e3190d5b814.e78c7bb56d1bc159.53fc52df64c778a4.0cffadb233383463
     6c7ecc89ebab23b8.225d0060be988f79.5a40974b9b8b5444.35c92136cb8b12ee
     95d5c9c9460e1a63.e317464896ae09a6.e1a8ada9c356dd56.b85457c19bb37faf
     6f6ecc41c1bb36d3
-VMPSADBW_128_0x1(mem)
+VPAVGW_128(mem)
   before
     37e1faa159b0f486.8983525f3a8ad9c1.0784c85a116bec0c.4480906777b45185
     ec7a5fcd7e9c75f3.a2d461b665ab9b80.6a7002834cdaf4d6.df163df05331ea7e
@@ -39630,11 +39630,11 @@
   after
     37e1faa159b0f486.8983525f3a8ad9c1.0784c85a116bec0c.4480906777b45185
     ec7a5fcd7e9c75f3.a2d461b665ab9b80.6a7002834cdaf4d6.df163df05331ea7e
-    0000000000000000.0000000000000000.01c801a6019501e1.00e500ea01bb00cf
+    0000000000000000.0000000000000000.38fa656f2f23f071.91cb672c65739e02
     8e4ebc39e18faeac.b78d0657cf0f1bcb.5ef98fc670006248.2da8e213f5ba7d7d
     973cd285f3deefda
 
-VMPSADBW_128_0x2(reg)
+VPADDSB_128(reg)
   before
     aabe7b72895177b2.3221ab5156addf51.6a8f9479456851b0.a62edab892ce4048
     c178da46549f51af.334ac1e6c9f3c361.b363980c62977aa5.9d12cd71e27e335d
@@ -39642,12 +39642,12 @@
     6ac6a754f7fde9c9.bccd4f321829926f.78b3f73600a6986d.081a9ce582b64774
     34d670780956e0ce
   after
-    0000000000000000.0000000000000000.00f3013e01cb005d.0244008c0182011e
+    0000000000000000.0000000000000000.a27fa87f24bf4dfa.bc7fb24d607f290f
     c178da46549f51af.334ac1e6c9f3c361.b363980c62977aa5.9d12cd71e27e335d
     38b6ea6def54b87d.6d9479e2566e1507.ef56107cc228d355.1f72e5dc7e1df6b2
     6ac6a754f7fde9c9.bccd4f321829926f.78b3f73600a6986d.081a9ce582b64774
     34d670780956e0ce
-VMPSADBW_128_0x2(mem)
+VPADDSB_128(mem)
   before
     7f71dc8130087ded.b5f20d650725203f.fcbfbfc32b30f6c6.abc849a4b89d0498
     c5b95cec12d8dcfd.7488180ebc59998a.09374680ac90fd38.e4df023487995583
@@ -39657,11 +39657,11 @@
   after
     7f71dc8130087ded.b5f20d650725203f.fcbfbfc32b30f6c6.abc849a4b89d0498
     c5b95cec12d8dcfd.7488180ebc59998a.09374680ac90fd38.e4df023487995583
-    0000000000000000.0000000000000000.020e0105019c02ee.01e300c9012e01a9
+    0000000000000000.0000000000000000.05f60580d7c0f3fe.8fa74bd880805980
     b27b89997904ca9e.bd1d0fd482123f52.fae8852e6688e21c.d8479b66d8d29048
     4b2e72e19226f47a
 
-VMPSADBW_128_0x2(reg)
+VPADDSB_128(reg)
   before
     3449a02dd3b02b1b.118e2eb33577d387.ffb5f2caccb0e526.96ba37f6d73838e5
     efe322b636fb71d8.db7dd7de1d398c11.26e56b072b89bc7f.6f41ee9c26712279
@@ -39669,12 +39669,12 @@
     4bc30e2fd4051e55.201e261cdfd701b7.8f410b06951cf074.48a1602accac9db1
     ff1212eb5bc6a6ad
   after
-    0000000000000000.0000000000000000.01c4017c01ae01cb.018201b200ec00eb
+    0000000000000000.0000000000000000.b2e07ffe65b2bd7f.7f7f16a57f7f7c7d
     efe322b636fb71d8.db7dd7de1d398c11.26e56b072b89bc7f.6f41ee9c26712279
     d847f2e85893045d.ec1300084c55b268.8cfb74f73a29010b.614a28096e3f5a04
     4bc30e2fd4051e55.201e261cdfd701b7.8f410b06951cf074.48a1602accac9db1
     ff1212eb5bc6a6ad
-VMPSADBW_128_0x2(mem)
+VPADDSB_128(mem)
   before
     6469ba3937993224.a4a171f847dcfc6d.5268c306f2cc342b.89052ba1d9efc566
     5272d4fe7e2ffd41.3f2e18ad4ca5da50.60be55b2a03f08ef.d791d032a12ebb8e
@@ -39684,11 +39684,11 @@
   after
     6469ba3937993224.a4a171f847dcfc6d.5268c306f2cc342b.89052ba1d9efc566
     5272d4fe7e2ffd41.3f2e18ad4ca5da50.60be55b2a03f08ef.d791d032a12ebb8e
-    0000000000000000.0000000000000000.02de0216011000f9.00dd012c018101d9
+    0000000000000000.0000000000000000.7f2618b8920b3c1a.8096fbd3801d80f4
     38c850a2b6da3f1f.aa841e8f7d3a842a.7dbe46003ed08319.e0339aea2f1cfd2f
     52e2b7e92de5c000
 
-VMPSADBW_128_0x2(reg)
+VPADDSB_128(reg)
   before
     8989498e1f4896b6.e9aea958e1062f38.33e67694e21ec978.43009c7a6606a1d8
     df764d47a2d3b8fe.92766536e4264ca8.6e2601364924fe41.557dd7679aea5096
@@ -39696,12 +39696,12 @@
     5b4d97a2c990d7f3.41dcf21ae973043a.6973a1008ec426f8.c95ce94693ee50c5
     e355b9109126198e
   after
-    0000000000000000.0000000000000000.009001990152010e.009f01ec00ff00d0
+    0000000000000000.0000000000000000.25b7bd167ffb5c74.e27f49188f807f80
     df764d47a2d3b8fe.92766536e4264ca8.6e2601364924fe41.557dd7679aea5096
     b1f3bd7f51126584.11ecfe28de46559a.b791bce04ed75e33.8d0372b1f5894c82
     5b4d97a2c990d7f3.41dcf21ae973043a.6973a1008ec426f8.c95ce94693ee50c5
     e355b9109126198e
-VMPSADBW_128_0x2(mem)
+VPADDSB_128(mem)
   before
     b9ba5cfd0b3b6307.39d0d61ca5d94bf8.fd11bcf821b816b6.e218ae02a476913c
     255750f81c3bea5d.a7c776598179fd3e.2359d9aea3214738.7dccde502d79ddac
@@ -39711,11 +39711,11 @@
   after
     b9ba5cfd0b3b6307.39d0d61ca5d94bf8.fd11bcf821b816b6.e218ae02a476913c
     255750f81c3bea5d.a7c776598179fd3e.2359d9aea3214738.7dccde502d79ddac
-    0000000000000000.0000000000000000.00cc01230130019e.019401790144011c
+    0000000000000000.0000000000000000.206a95a6c4d95dee.5fe48c52d17f80e8
     336819c8752b9d4e.a345cacdacf00a40.184df853f391f5ff.8890988306a403bf
     b0381a418fe355ba
 
-VMPSADBW_128_0x3(reg)
+VPADDSW_128(reg)
   before
     6b20affbf9a37891.8d74e575f4324241.e96376dc32dedd53.a192f31af9b0e99d
     1391531fe271a6ef.ede8f2e07b5313c1.2f26735d2854de58.02183068b922edf1
@@ -39723,12 +39723,12 @@
     9e46b951a06515f2.3238bca10f152c17.2bcb516ad70658e6.c01b614ed535106d
     d42f4dbd69eda8ed
   after
-    0000000000000000.0000000000000000.01a301f102850275.01be01b401550132
+    0000000000000000.0000000000000000.0100321b54312752.1ac55b930818a919
     1391531fe271a6ef.ede8f2e07b5313c1.2f26735d2854de58.02183068b922edf1
     06da0218e6d91b80.3090bbf6259bcdfa.d1dabebe2bdd48fa.18ad2b2b4ef6bb28
     9e46b951a06515f2.3238bca10f152c17.2bcb516ad70658e6.c01b614ed535106d
     d42f4dbd69eda8ed
-VMPSADBW_128_0x3(mem)
+VPADDSW_128(mem)
   before
     31b66b6426293fd4.38207338ada3ceee.d0ab72cf55ceec45.99452accc6594ac8
     b379372f29f6904d.31b62c38a81f8323.e4b7576a11d1c8af.779344529765594b
@@ -39738,11 +39738,11 @@
   after
     31b66b6426293fd4.38207338ada3ceee.d0ab72cf55ceec45.99452accc6594ac8
     b379372f29f6904d.31b62c38a81f8323.e4b7576a11d1c8af.779344529765594b
-    0000000000000000.0000000000000000.00b3004d0101011c.00fc01740115011c
+    0000000000000000.0000000000000000.b5627fff679fb4f4.10d86f1e80007fff
     97ebcae2707052a7.ab418c34d9fdd0e3.e1c6a39c61e5c7ea.f2de2b7849d1c2e6
     4873f1ef624a9256
 
-VMPSADBW_128_0x3(reg)
+VPADDSW_128(reg)
   before
     7e0de839cdab7118.b03089a1eb353ce0.e5cf2a074879e0c6.8261010a2d0f6112
     f0f80cc3237f99d7.5ee4e6351cbbd05c.ee48b8a31561dc91.0ac38096dfb40927
@@ -39750,12 +39750,12 @@
     f7f0cc4306b0b6fe.e9c46b880e38e8cb.d82992e73aab868d.3f11ceb86b9b6dc7
     a49395267cf6a3a9
   after
-    0000000000000000.0000000000000000.0126019801fa00b9.01e801ad017c0179
+    0000000000000000.0000000000000000.0f3feb18f1a4dc80.607d800080007fff
     f0f80cc3237f99d7.5ee4e6351cbbd05c.ee48b8a31561dc91.0ac38096dfb40927
     f97f59f70252473f.7dd15d881f0ecb46.20f73275dc43ffef.55ba9b2c95de7955
     f7f0cc4306b0b6fe.e9c46b880e38e8cb.d82992e73aab868d.3f11ceb86b9b6dc7
     a49395267cf6a3a9
-VMPSADBW_128_0x3(mem)
+VPADDSW_128(mem)
   before
     600d6c62e5fcd528.44955f11ca2623be.7e898b200847e416.722bd667ca24ad17
     4f4bd059c1b8bf70.3ebb10cfeb3fca2b.18eb393c27467b54.4a47f860293ab038
@@ -39765,11 +39765,11 @@
   after
     600d6c62e5fcd528.44955f11ca2623be.7e898b200847e416.722bd667ca24ad17
     4f4bd059c1b8bf70.3ebb10cfeb3fca2b.18eb393c27467b54.4a47f860293ab038
-    0000000000000000.0000000000000000.00a700a001850123.00da011f015f00e1
+    0000000000000000.0000000000000000.7fffc45c2f8d5f6a.7fffcec7f35e8000
     36432c244383af09.a5b9bac8b18cb6bf.cbba2fb045466958.2400cc6cc26e38f1
     de34745834a436e1
 
-VMPSADBW_128_0x3(reg)
+VPADDSW_128(reg)
   before
     46b4ec6de5a70019.e6951cd122aa2cb3.cb2aaadb8fd7723d.9bbe70e07c5e3876
     b8ca2f187004d144.39da88e8e4b752d5.0c4ba88d39f65819.e1902f4448979236
@@ -39777,12 +39777,12 @@
     2aeb06db86fa7a25.3771c60382b58733.53d0bb7f64dd909a.3cce17591299d64f
     08d239e1477b38ff
   after
-    0000000000000000.0000000000000000.016f0135015e00c9.00dc016f010200dc
+    0000000000000000.0000000000000000.d1b480007ffffc18.5a8c180c1093c5fb
     b8ca2f187004d144.39da88e8e4b752d5.0c4ba88d39f65819.e1902f4448979236
     90c339c37246e60f.0ae0ed54a5b7dc9c.c569af4a4c74a3ff.78fce8c8c7fc33c5
     2aeb06db86fa7a25.3771c60382b58733.53d0bb7f64dd909a.3cce17591299d64f
     08d239e1477b38ff
-VMPSADBW_128_0x3(mem)
+VPADDSW_128(mem)
   before
     bad3c94e82ad1502.e18e93cd48abcb33.9b5a8fe196bd0fc7.10ccc9961bbe5b96
     2d9e438bde3b2883.13f8db0455e513e4.1267c5d8fedc3084.59a9d4fd10a240a1
@@ -39792,11 +39792,11 @@
   after
     bad3c94e82ad1502.e18e93cd48abcb33.9b5a8fe196bd0fc7.10ccc9961bbe5b96
     2d9e438bde3b2883.13f8db0455e513e4.1267c5d8fedc3084.59a9d4fd10a240a1
-    0000000000000000.0000000000000000.00fe0103003f00f2.01c7019a01600162
+    0000000000000000.0000000000000000.adc180009599404b.6a759e932c607fff
     c5c2e5256a9de3b1.554f8cf0bf257ae2.a81c64c4388c2b26.0035d1671ea4478e
     157cbb436fdae1c9
 
-VMPSADBW_128_0x4(reg)
+VPHADDW_128(reg)
   before
     26d5921e6e4384c1.a3b3065ad38902b6.1cd6ed7e53431287.7f5cc69242367e65
     8f8a5364b46c6e24.b19e010fcc0049ea.ce53fa01a21b917f.daf084291026597c
@@ -39804,12 +39804,12 @@
     da3a80e18b2b01d5.d19175a9e5c5398d.5f610596df263619.8844056765099ae3
     939cc0e52515788c
   after
-    0000000000000000.0000000000000000.017e014a01590099.011300fc0139011d
+    0000000000000000.0000000000000000.74f87aaeb01b3700.c854339a5f1969a2
     8f8a5364b46c6e24.b19e010fcc0049ea.ce53fa01a21b917f.daf084291026597c
     ade7f981dfe0d99b.cd4e523074107278.c613aee547383376.94a41b77bd697997
     da3a80e18b2b01d5.d19175a9e5c5398d.5f610596df263619.8844056765099ae3
     939cc0e52515788c
-VMPSADBW_128_0x4(mem)
+VPHADDW_128(mem)
   before
     9278c7dd1996cebd.73cee5f153da247c.9b31e6673b2a5c55.f78bfb800672d414
     5fa3973b5c9a59a3.d4ee221bd3787c3c.05fb2254934b95fb.e8db8d1056a74a12
@@ -39819,11 +39819,11 @@
   after
     9278c7dd1996cebd.73cee5f153da247c.9b31e6673b2a5c55.f78bfb800672d414
     5fa3973b5c9a59a3.d4ee221bd3787c3c.05fb2254934b95fb.e8db8d1056a74a12
-    0000000000000000.0000000000000000.024400b2017901da.016301f301eb0196
+    0000000000000000.0000000000000000.8198977ff30bda86.284f294675eba0b9
     d71a7ed94058fd3d.5e0519716eb2beba.2d3ce86fb7f23c93.492171cee7fcacca
     71aebdd45f3511db
 
-VMPSADBW_128_0x4(reg)
+VPHADDW_128(reg)
   before
     6292933072883e9f.39fd8ef11a2b8e48.3f94cb75c0671fd0.a24c6b75bb9021dd
     7a18f14dbb7f6fc4.db5f5620b2b044b8.58e045433a3aa6af.28b5a75b301b0db5
@@ -39831,12 +39831,12 @@
     8a3e327a618fcbdb.4ad5ff6f93020e77.a1de86f2186f1679.d8c63f77e025e9c2
     b904928552bc514e
   after
-    0000000000000000.0000000000000000.018d00fd015400e8.003c01850158004a
+    0000000000000000.0000000000000000.897d08bcb651efe6.9e23e0e9d0103dd0
     7a18f14dbb7f6fc4.db5f5620b2b044b8.58e045433a3aa6af.28b5a75b301b0db5
     138ed297d7a8dff3.970e525027f4dbb9.0434854979b98f03.9c441a0d339ebc48
     8a3e327a618fcbdb.4ad5ff6f93020e77.a1de86f2186f1679.d8c63f77e025e9c2
     b904928552bc514e
-VMPSADBW_128_0x4(mem)
+VPHADDW_128(mem)
   before
     1bcd9023a670b019.3c750d62f5be6e26.d07fd86812e69a1d.8a2844aab4e876bd
     daecb33ef74cc24e.837f5fbb30c30681.05d95926c1ad3bd7.1b5fbbdde8b1ec7b
@@ -39846,11 +39846,11 @@
   after
     1bcd9023a670b019.3c750d62f5be6e26.d07fd86812e69a1d.8a2844aab4e876bd
     daecb33ef74cc24e.837f5fbb30c30681.05d95926c1ad3bd7.1b5fbbdde8b1ec7b
-    0000000000000000.0000000000000000.01080178016e009d.01b7014301090187
+    0000000000000000.0000000000000000.a8e7ad03ced22ba5.5efffd84d73cd52c
     df5b5d9701aeeda9.433c5a700a7dff15.eccd44a61d11ab3a.a4c4c6658a610912
     5589519130602844
 
-VMPSADBW_128_0x4(reg)
+VPHADDW_128(reg)
   before
     1e6c85e9dede4da0.dd43dcadf24b7f26.7586faa5e04adaa6.57ffa63f02c6f23b
     5ab75fd73068b3d1.a8b170f05141b4be.acd402fbcd1d98f7.e010a04e868e3d00
@@ -39858,12 +39858,12 @@
     9fb8f12a33cd3665.154eccaac765f5ed.9ca736b95a02b088.be034c7fde85d387
     cc7cf778e9cc94a2
   after
-    0000000000000000.0000000000000000.0149026600d800ee.01a501ec00ec013b
+    0000000000000000.0000000000000000.b24de334138e1129.afcf6614805ec38e
     5ab75fd73068b3d1.a8b170f05141b4be.acd402fbcd1d98f7.e010a04e868e3d00
     67b7d9c9c4899884.1c71974b399b479c.45706cdd6c8076b4.64ceaec0c6744ab5
     9fb8f12a33cd3665.154eccaac765f5ed.9ca736b95a02b088.be034c7fde85d387
     cc7cf778e9cc94a2
-VMPSADBW_128_0x4(mem)
+VPHADDW_128(mem)
   before
     69052a9803554b32.6006a2661bc0c91f.6f168bf916ac79dd.0dc55bfa322c8120
     716a61ca492db262.04ede9e918ef8f5e.06935124437b9197.f416d70c918c2627
@@ -39873,11 +39873,11 @@
   after
     69052a9803554b32.6006a2661bc0c91f.6f168bf916ac79dd.0dc55bfa322c8120
     716a61ca492db262.04ede9e918ef8f5e.06935124437b9197.f416d70c918c2627
-    0000000000000000.0000000000000000.010600c0009c00e7.01980147024f0142
+    0000000000000000.0000000000000000.fb0f908969bfb34c.57b7d512cb22b7b3
     32f7cb13c8f78353.69b52574be2f9f1f.5bdfdebea5e2681b.9480c553521bdb35
     05312f60ec636493
 
-VMPSADBW_128_0x5(reg)
+VPHADDD_128(reg)
   before
     5c45e0ee7d10b011.a3b7f7033802646d.e22e1354a05861f7.d1469e0612929f3d
     f408d56aa0affb5a.ee8317b5448be6d7.ae70862c06ed4605.f39355d9cdfa59d9
@@ -39885,12 +39885,12 @@
     5ccb77d80df082ff.876f230f9e48bd4e.b37fed70d0876372.b00e94d49a244632
     01d415d4e5fdf047
   after
-    0000000000000000.0000000000000000.00ab01be0190014b.01e001ca01410131
+    0000000000000000.0000000000000000.b840045b90b9cf41.b55dcc31c18dafb2
     f408d56aa0affb5a.ee8317b5448be6d7.ae70862c06ed4605.f39355d9cdfa59d9
     2bc6083ef1cb831b.f127a715079ec5be.2ac77b668d7888f5.9f927d25f127521c
     5ccb77d80df082ff.876f230f9e48bd4e.b37fed70d0876372.b00e94d49a244632
     01d415d4e5fdf047
-VMPSADBW_128_0x5(mem)
+VPHADDD_128(mem)
   before
     70b07c10eebf0e85.e3621da390aa34b4.8b270890249489b2.a3e4d8b46ca61529
     d86e4574d075591b.1cd9f60a1586d7e3.db1ad182b68fe617.574138a0fc5fd8c5
@@ -39900,11 +39900,11 @@
   after
     70b07c10eebf0e85.e3621da390aa34b4.8b270890249489b2.a3e4d8b46ca61529
     d86e4574d075591b.1cd9f60a1586d7e3.db1ad182b68fe617.574138a0fc5fd8c5
-    0000000000000000.0000000000000000.00f400d700ca0113.01340204022c01a3
+    0000000000000000.0000000000000000.afbb9242108aeddd.91aab79953a11165
     02c0ef6490ee6dfa.1392336196d2db66.cbe5ff6d6cbe4292.7c16481d6ad5845f
     a426ef8680a8e4b4
 
-VMPSADBW_128_0x5(reg)
+VPHADDD_128(reg)
   before
     005ffc46fa47469f.7cebc7c8a6c9ad9b.8a6d8d28ca5ab510.24545c3ec80cb900
     ec0d6ac9743ee6cb.6029f10406c90c43.22570b3c71336ee6.372f8e309f38b11f
@@ -39912,12 +39912,12 @@
     e4f75bc9db61ce99.d1092cb512651656.298761fc860970c5.ff585e2c315a131f
     6b3ff40d2369f558
   after
-    0000000000000000.0000000000000000.012d013f01340192.01b60140008c013c
+    0000000000000000.0000000000000000.6084ed9eef90f64c.938a7a22d6683f4f
     ec0d6ac9743ee6cb.6029f10406c90c43.22570b3c71336ee6.372f8e309f38b11f
     c47b367b8b18ffe5.8844ea05ccf8451d.399ba90a26e94494.e14210310e4ee61b
     e4f75bc9db61ce99.d1092cb512651656.298761fc860970c5.ff585e2c315a131f
     6b3ff40d2369f558
-VMPSADBW_128_0x5(mem)
+VPHADDD_128(mem)
   before
     03c14fc0008648f2.a8cbd41dffa58f92.18443502f719381a.5065317f2c1f3126
     a1abea32e5bec718.6c449fe593717e7d.37c081d694226a94.08821400b5b5c163
@@ -39927,11 +39927,11 @@
   after
     03c14fc0008648f2.a8cbd41dffa58f92.18443502f719381a.5065317f2c1f3126
     a1abea32e5bec718.6c449fe593717e7d.37c081d694226a94.08821400b5b5c163
-    0000000000000000.0000000000000000.0146016200d900d5.010d0075015d0101
+    0000000000000000.0000000000000000.0f5d6d1c7c8462a5.cbe2ec6abe37d563
     63e7d0fe36ac3cba.6455197d7dced4d7.71afcec86c60e95d.9fa904a8de97411e
     364a08a8b6f9a8f6
 
-VMPSADBW_128_0x5(reg)
+VPHADDD_128(reg)
   before
     ce5b1055e10dd058.3ed11332d97aaa8d.5084c0260b78b49f.43b9c7bddeaeaf03
     c426171bfa5ef2f3.905287d3f493349e.ac89a8f27ad9b208.5e36f3ea7a80740f
@@ -39939,12 +39939,12 @@
     3b1e13a267e91b7f.094def1100d48f25.23402ca368f2f66f.e0b3d29c9de2e90c
     fe4d7dfa5d891155
   after
-    0000000000000000.0000000000000000.00bf00ff014b0089.01610170027701cd
+    0000000000000000.0000000000000000.382cd70cfad3c1ea.27635afad8b767f9
     c426171bfa5ef2f3.905287d3f493349e.ac89a8f27ad9b208.5e36f3ea7a80740f
     74f819669d794d71.3537a7cfa2029717.d3aecd4d647e09bf.9eefce3b5be3f3af
     3b1e13a267e91b7f.094def1100d48f25.23402ca368f2f66f.e0b3d29c9de2e90c
     fe4d7dfa5d891155
-VMPSADBW_128_0x5(mem)
+VPHADDD_128(mem)
   before
     d5884a3fb7e529b4.73e1003bf43a99c8.e85edb852914d7f3.f78bbf601fc1b5c5
     4132b559c601eb55.7990dc9edff903f9.af36e8173ace2dae.abdb84f12877816d
@@ -39954,11 +39954,11 @@
   after
     d5884a3fb7e529b4.73e1003bf43a99c8.e85edb852914d7f3.f78bbf601fc1b5c5
     4132b559c601eb55.7990dc9edff903f9.af36e8173ace2dae.abdb84f12877816d
-    0000000000000000.0000000000000000.01ec0176017301e0.00e3017c00a90168
+    0000000000000000.0000000000000000.1173b378174d7525.ea0515c5d453065e
     48fe56b874a95f10.5fde516e40ef8ac1.6070514581e1ed99.22b9913b99cb3360
     9edfd2cc3b7f9105
 
-VMPSADBW_128_0x6(reg)
+VPHADDSW_128(reg)
   before
     693a34e19d4becab.9bb983d64b4e8982.f815e3b4ee3d1fb1.0368a7b9f153d122
     e116b2e55bba81fe.f3113f7848e44ee6.ce6754726b298f38.fd580cfcb76eb147
@@ -39966,12 +39966,12 @@
     4481f86a5eb3485e.22cc52f8220f9835.a48cc30b400af4bd.6550f79bbbd55717
     8cf075cf3037951a
   after
-    0000000000000000.0000000000000000.00ec00ae00e900db.0193017e012101c9
+    0000000000000000.0000000000000000.de366a4228053a74.22d9fa610a548000
     e116b2e55bba81fe.f3113f7848e44ee6.ce6754726b298f38.fd580cfcb76eb147
     60bf4b4412598cab.2cd4068a86756a68.3e20a016523f1803.290dfef8f1404934
     4481f86a5eb3485e.22cc52f8220f9835.a48cc30b400af4bd.6550f79bbbd55717
     8cf075cf3037951a
-VMPSADBW_128_0x6(mem)
+VPHADDSW_128(mem)
   before
     7ab8f4826c74c069.e7a7b7c3da54f2c2.b0c6a1ae37be9579.5cf7b9bdd0166013
     0b73ee9f8c979431.a77f82bb22c9c684.b48e6e98e28c1d60.c2ac7f989fef97b1
@@ -39981,11 +39981,11 @@
   after
     7ab8f4826c74c069.e7a7b7c3da54f2c2.b0c6a1ae37be9579.5cf7b9bdd0166013
     0b73ee9f8c979431.a77f82bb22c9c684.b48e6e98e28c1d60.c2ac7f989fef97b1
-    0000000000000000.0000000000000000.011300bd00ea016e.017400d8004a00d2
+    0000000000000000.0000000000000000.8000cd3716b43029.2326ffec42448000
     85f648c7e6c125dc.e9703239895cdbd1.8bb872b967bbbdc4.0728687a683a5973
     9f8683589ac45cef
 
-VMPSADBW_128_0x6(reg)
+VPHADDSW_128(reg)
   before
     555e5e107a4a1a63.27559faa58e05b15.25220d96de9394b3.16b2a2c87b324d9a
     85fef40ca55bd07a.dcd862a71e142a78.ecb5e64271cd67a3.85a93fba93fa58c3
@@ -39993,12 +39993,12 @@
     c2c241854b471444.ee791ea014f18167.8fad7f39bb7b495d.84c1b5fc45abcdbc
     ca7a862316adb0e5
   after
-    0000000000000000.0000000000000000.00e700fd0116011f.008900e700710126
+    0000000000000000.0000000000000000.8000800080008000.d2f77fffc563ecbd
     85fef40ca55bd07a.dcd862a71e142a78.ecb5e64271cd67a3.85a93fba93fa58c3
     8bb141bab780bae2.7f4a0eaa536b4d2f.9b74b8aadb968f4d.b66ac77dcd1f996a
     c2c241854b471444.ee791ea014f18167.8fad7f39bb7b495d.84c1b5fc45abcdbc
     ca7a862316adb0e5
-VMPSADBW_128_0x6(mem)
+VPHADDSW_128(mem)
   before
     6661b4de5c2efd10.887ef0d9fd3b194f.042f0e737cb0824b.22aa375baa07d17e
     3242bd19343c7269.38314b216ae906ad.9c395a11a8b70b08.b1b8dd7c46c6635c
@@ -40008,11 +40008,11 @@
   after
     6661b4de5c2efd10.887ef0d9fd3b194f.042f0e737cb0824b.22aa375baa07d17e
     3242bd19343c7269.38314b216ae906ad.9c395a11a8b70b08.b1b8dd7c46c6635c
-    0000000000000000.0000000000000000.0167015300e800ed.01c001b5013d00c9
+    0000000000000000.0000000000000000.12a2fefb5a058000.f64ab3bf8f347fff
     ce214ebf082cbe59.c5acf243e3a08713.c679f75abac6a8bc.3337df6bf40f9302
     de4035113eb0aa22
 
-VMPSADBW_128_0x6(reg)
+VPHADDSW_128(reg)
   before
     f5896766a4b5baaf.56b7cd033c270f46.5b0c36f327c19374.104740ded8e7340a
     d45f73d7c2a90155.7e77177672de7612.4a92164896cc77d8.4c99d5dc297e38e2
@@ -40020,12 +40020,12 @@
     5ae306b9998f1e9f.22a4f99e52b179f6.a743979263ceb65c.0ef8d4f6d7409bda
     4b9d36ea6b837153
   after
-    0000000000000000.0000000000000000.00ed0101019e00d0.01340155004f0141
+    0000000000000000.0000000000000000.80003b397fff3c05.60da0ea422756260
     d45f73d7c2a90155.7e77177672de7612.4a92164896cc77d8.4c99d5dc297e38e2
     d70f54ce3518b9c2.232da706c55eb0e9.f08b8dafcb4d6fec.573a3240ca98716d
     5ae306b9998f1e9f.22a4f99e52b179f6.a743979263ceb65c.0ef8d4f6d7409bda
     4b9d36ea6b837153
-VMPSADBW_128_0x6(mem)
+VPHADDSW_128(mem)
   before
     ebf6d408a26cb005.b928850289996e9b.55aa892934e68c66.cd06305ff9dd89d3
     cbce2a3d9907141b.5029cd17a1c3e360.9909d4958806a664.bc2054812a0524fd
@@ -40035,11 +40035,11 @@
   after
     ebf6d408a26cb005.b928850289996e9b.55aa892934e68c66.cd06305ff9dd89d3
     cbce2a3d9907141b.5029cd17a1c3e360.9909d4958806a664.bc2054812a0524fd
-    0000000000000000.0000000000000000.0068015501850150.00ec016a00d801a1
+    0000000000000000.0000000000000000.ded3c14cfd6583b0.8000800010a14f02
     b630ef9835843a25.9693aa52bba42ef6.c50688bdf33cdebd.69882f73cbd2a01d
     de6fdd1c738efa6b
 
-VMPSADBW_128_0x7(reg)
+VPMADDUBSW_128(reg)
   before
     8ddc06ca25940c1c.7a505697127e7471.fd943650f5737c20.643be951436a746f
     d31ca7ea7e6f11dd.ed20655b1f5bc3d2.0b817cc9c792e0c3.84f9f47675b40160
@@ -40047,12 +40047,12 @@
     8f443d2b93d5e73d.51006ce737eb8f81.915122dda5eed927.b744fa1eecccefae
     8269ec7b6ab3c862
   after
-    0000000000000000.0000000000000000.017f013a019e01c2.015501bc02160183
+    0000000000000000.0000000000000000.d471595996fa8000.0e222e5cf0ace6c1
     d31ca7ea7e6f11dd.ed20655b1f5bc3d2.0b817cc9c792e0c3.84f9f47675b40160
     0a7bbae61aab4659.eb6c98d27726e273.1ea77629ce8c968c.010e2616a42641bc
     8f443d2b93d5e73d.51006ce737eb8f81.915122dda5eed927.b744fa1eecccefae
     8269ec7b6ab3c862
-VMPSADBW_128_0x7(mem)
+VPMADDUBSW_128(mem)
   before
     3f4779173ae78805.bec52b2688782f34.f9a85b867ab78427.c0cd7b4fe943e63f
     c8ab1be07672eac3.f348814193215ceb.c02fe39c5d957d92.06667ded3517f981
@@ -40062,11 +40062,11 @@
   after
     3f4779173ae78805.bec52b2688782f34.f9a85b867ab78427.c0cd7b4fe943e63f
     c8ab1be07672eac3.f348814193215ceb.c02fe39c5d957d92.06667ded3517f981
-    0000000000000000.0000000000000000.016f003300eb00dd.01460107011d01be
+    0000000000000000.0000000000000000.ea98065901d5d9b2.ea2e7fff01420675
     b03493a6a9c2883e.df88518c5cb14f48.1b0eacd870b76f66.4b1d6e59566d2031
     02d454006408acf8
 
-VMPSADBW_128_0x7(reg)
+VPMADDUBSW_128(reg)
   before
     40d8d382ea512e98.c8f2607bd69f3a54.4edcc49252b28e46.67fde4d8d914de27
     6375e74a84d6e1bd.1d65332ce1048034.33628f6acfe8a2b3.41fca5fd52b4435c
@@ -40074,12 +40074,12 @@
     c4a8bf6267c2cd49.ee9dddd2fe97b304.cf38193ecc23338d.1459b06ae1e9dad5
     c450f18a30988570
   after
-    0000000000000000.0000000000000000.014100e9014600d9.0081017b00d401c2
+    0000000000000000.0000000000000000.236e05aa3b0a03fc.b8eb78b3ba002900
     6375e74a84d6e1bd.1d65332ce1048034.33628f6acfe8a2b3.41fca5fd52b4435c
     c5f68dc7cf220215.8b5a89a5e5fd140b.ea68ac7f6edfc43c.87d76a35f6a15832
     c4a8bf6267c2cd49.ee9dddd2fe97b304.cf38193ecc23338d.1459b06ae1e9dad5
     c450f18a30988570
-VMPSADBW_128_0x7(mem)
+VPMADDUBSW_128(mem)
   before
     7386ab80feb8142f.bad87b88e7417e08.22faaba04add184c.3e20d11184412951
     fcc8593868574440.05d0bda5eb2b50fc.023d6ff9e2db000f.936ad06532c4e335
@@ -40089,11 +40089,11 @@
   after
     7386ab80feb8142f.bad87b88e7417e08.22faaba04add184c.3e20d11184412951
     fcc8593868574440.05d0bda5eb2b50fc.023d6ff9e2db000f.936ad06532c4e335
-    0000000000000000.0000000000000000.013600c001bf021b.025c015b00eb0161
+    0000000000000000.0000000000000000.fed6800023630474.30dae085198c3520
     11a0819e7e407702.054abf75f1724a35.3ba4cb006c3149b4.5f579441e32a920b
     8e9150a11d25ff55
 
-VMPSADBW_128_0x7(reg)
+VPMADDUBSW_128(reg)
   before
     125f4431beb6206f.53cef42563a2f10c.746578002be6e9d2.4a605a8695a021ee
     490b6c5f61683105.e1374a1d52b3fc17.a678a63259f69b54.7732cf487bf86d53
@@ -40101,12 +40101,12 @@
     3d3144421e601153.4dee9514c40fb4de.c6ba523a031722ba.97485c30f1914b4c
     43246c2eb7e95639
   after
-    0000000000000000.0000000000000000.00dc01840213013d.00470151016901d9
+    0000000000000000.0000000000000000.e4c843fc3396e3c3.cce7c54a5e39f978
     490b6c5f61683105.e1374a1d52b3fc17.a678a63259f69b54.7732cf487bf86d53
     8ee2c296a2c76dc3.96a90274697e544e.f8d14577182d9968.9de6a6323b44e60e
     3d3144421e601153.4dee9514c40fb4de.c6ba523a031722ba.97485c30f1914b4c
     43246c2eb7e95639
-VMPSADBW_128_0x7(mem)
+VPMADDUBSW_128(mem)
   before
     7b455218ac5ac400.b141edcf70bd5864.e4d380eb7e72d9f3.6c80c8e9b64170f5
     1d798adbeaf051ce.4861b9a9356d80a0.352440e4b4b47fb8.466fa3f0cf36c0c6
@@ -40116,11 +40116,11 @@
   after
     7b455218ac5ac400.b141edcf70bd5864.e4d380eb7e72d9f3.6c80c8e9b64170f5
     1d798adbeaf051ce.4861b9a9356d80a0.352440e4b4b47fb8.466fa3f0cf36c0c6
-    0000000000000000.0000000000000000.01ee012000bf0083.016101360112012a
+    0000000000000000.0000000000000000.f3e0cd4c7fffe34f.e608c6c8d1e04b7e
     0b45e197b2b8b72e.4bfdabf586ef5e4b.79392ceb01023d04.07f778b19cb256d8
     a5286b448a511372
 
-VMOVDDUP_YMMorMEM256_to_YMM(reg)
+VPHSUBW_128(reg)
   before
     e7b2b3df4cecc251.0f76f86a74020718.6f11c83e4ada8c12.239650d25127cde3
     29e14cec7e0e9e22.ece851c5f0a167b8.2665f985f1478bb4.f98e398c8d5ace22
@@ -40128,12 +40128,12 @@
     1c5e6211a417d148.a2c3bac2830c42cc.b9f785b956d4e63c.94824624361c1173
     131664dbdcc2ccdc
   after
-    ece851c5f0a167b8.ece851c5f0a167b8.f98e398c8d5ace22.f98e398c8d5ace22
+    0000000000000000.0000000000000000.6ef17f1e8b152b46.d3209a6d3ffe40c8
     29e14cec7e0e9e22.ece851c5f0a167b8.2665f985f1478bb4.f98e398c8d5ace22
     c70132d9bd43e590.7f69699341a0913b.ca43393416c195df.d5ee6103d0a8fbee
     1c5e6211a417d148.a2c3bac2830c42cc.b9f785b956d4e63c.94824624361c1173
     131664dbdcc2ccdc
-VMOVDDUP_YMMorMEM256_to_YMM(mem)
+VPHSUBW_128(mem)
   before
     2c763515dda6e856.8644d600d0179ff6.32c4c23dd3f03698.4dcfd87f4c0dbc79
     bc6d37bd56d5200c.60fe8c12dcce8a45.0b36fcf04d5829cb.e3162df295f75142
@@ -40143,11 +40143,11 @@
   after
     2c763515dda6e856.8644d600d0179ff6.32c4c23dd3f03698.4dcfd87f4c0dbc79
     bc6d37bd56d5200c.60fe8c12dcce8a45.0b36fcf04d5829cb.e3162df295f75142
-    9fc8e5be625a312b.06d97fb365c9d0e2.0ae6e4c70c50d690.d817827ecc1ee243
-    8644d600d0179ff6.8644d600d0179ff6.4dcfd87f4c0dbc79.4dcfd87f4c0dbc79
+    0000000000000000.0000000000000000.8f7962a88ab0706c.f1badc734adcbb4b
+    b154bb061e42d7df.d421ac4f0693aa78.099ff7af2de5fa14.861fd38f8d0fab27
     4a7a1a917555e79a
 
-VMOVDDUP_YMMorMEM256_to_YMM(reg)
+VPHSUBW_128(reg)
   before
     817455f01f7cd34a.cfdb3580a598cd53.25220d525cb857b4.e52fb092cb225082
     85597f192811abe1.d32acf181468d1b4.5728a02802c41241.7a608a5d02149607
@@ -40155,12 +40155,12 @@
     67139075c6b20d75.004f555218a8edeb.cb724afeb0c3a001.3fd9975dad44dc05
     27b8c068599b56d6
   after
-    d32acf181468d1b4.d32acf181468d1b4.7a608a5d02149607.7a608a5d02149607
+    0000000000000000.0000000000000000.9abf818960fd9709.49000f7d0ffd93f3
     85597f192811abe1.d32acf181468d1b4.5728a02802c41241.7a608a5d02149607
     b37494762c9faa0b.9a0c06ba86bf9d2d.c57f603e954416cd.a40004fdefc686cf
     67139075c6b20d75.004f555218a8edeb.cb724afeb0c3a001.3fd9975dad44dc05
     27b8c068599b56d6
-VMOVDDUP_YMMorMEM256_to_YMM(mem)
+VPHSUBW_128(mem)
   before
     3869fc0c0ed6ae6d.fd80708092d710cb.e1bd38cce52f7f1a.c44f58d6f0ceeb8c
     4eb7c634e901a1f7.d1082f052d99efb8.19232c1509610de5.0e608831f0f03417
@@ -40170,11 +40170,11 @@
   after
     3869fc0c0ed6ae6d.fd80708092d710cb.e1bd38cce52f7f1a.c44f58d6f0ceeb8c
     4eb7c634e901a1f7.d1082f052d99efb8.19232c1509610de5.0e608831f0f03417
-    45709acc0629eba0.3ff7c96f3285e5e9.844eab17a1495379.03f2d57a4cb5b751
-    fd80708092d710cb.fd80708092d710cb.c44f58d6f0ceeb8c.c44f58d6f0ceeb8c
+    0000000000000000.0000000000000000.570f99eb9487fabe.12f2048479d14327
+    f95ef5c07f594793.a3993a2a3e252f09.fd0833c0c9f30f01.01513b1fa1aab0e4
     62c8b68b8b5a5a7d
 
-VMOVDDUP_YMMorMEM256_to_YMM(reg)
+VPHSUBW_128(reg)
   before
     84a5432aa551f3c7.464e52fc729d72fd.59397fa2ec0809c5.621d3ffa9c6bfbaa
     c132dd698b1bb46f.070c2c6cfb022809.bd259243d9b7afc9.8e5b4bb336bed4a0
@@ -40182,12 +40182,12 @@
     009028722d5ba587.5a224d993d5c24b9.ff0c17b0ddae4d56.ab7e554f32233c21
     53fb4a0aca4d4304
   after
-    070c2c6cfb022809.070c2c6cfb022809.8e5b4bb336bed4a0.8e5b4bb336bed4a0
+    0000000000000000.0000000000000000.45d2bc00774aa116.d51ed612bd589de2
     c132dd698b1bb46f.070c2c6cfb022809.bd259243d9b7afc9.8e5b4bb336bed4a0
     77bc80b2da45dc20.1a6401fd359325e4.2ba77179a0c05cc0.5d8cd4d6b4f8560e
     009028722d5ba587.5a224d993d5c24b9.ff0c17b0ddae4d56.ab7e554f32233c21
     53fb4a0aca4d4304
-VMOVDDUP_YMMorMEM256_to_YMM(mem)
+VPHSUBW_128(mem)
   before
     33d02ff39b8227e4.b9f7d11621e74c50.a3128a2e2e6ae2b6.95a081552d0dbd39
     26c980f6bfcda4ec.ff40780851770d26.d0ff36a624c81b04.49afa9d22c6aea13
@@ -40197,11 +40197,11 @@
   after
     33d02ff39b8227e4.b9f7d11621e74c50.a3128a2e2e6ae2b6.95a081552d0dbd39
     26c980f6bfcda4ec.ff40780851770d26.d0ff36a624c81b04.49afa9d22c6aea13
-    07b1baff523a754a.2cb618b65a9724b6.bfb6ccef3c828ad2.76858d9575500e90
-    b9f7d11621e74c50.b9f7d11621e74c50.95a081552d0dbd39.95a081552d0dbd39
+    0000000000000000.0000000000000000.e71cb44cebb5902c.65a7f63c6023bda9
+    b45657fb70d55727.9da4ad8bd7d1ccac.4b03c8f492a5ec4a.7a6d2809a54c665d
     b0b5769956e92d26
 
-VMOVLPS_128_M64_XMM_XMM(reg)
+VPHSUBD_128(reg)
   before
     74a774b327b3a197.0882d5d437ab06b2.ae5833f265b342b3.4fb2a7a1413cfd98
     21901cc2b236fb5a.de03b078c0c73d14.bc1ca7599fc9c177.a98fe3e2655378e9
@@ -40209,12 +40209,12 @@
     ab765f6f679a598d.842e69cd8e023614.3a0646d489becee9.cb0267d07f33a043
     4b31a656ab14c3a4
   after
-    74a774b327b3a197.0882d5d437ab06b2.ae5833f265b342b3.4fb2a7a1413cfd98
+    0000000000000000.0000000000000000.0161837ae89020c6.e3ad1a1ebbc39507
     21901cc2b236fb5a.de03b078c0c73d14.bc1ca7599fc9c177.a98fe3e2655378e9
     15bc6c3293ff7a1e.14a362d12935b97c.213d042b229e87a5.3366faa31bf71b69
     ab765f6f679a598d.842e69cd8e023614.3a0646d489becee9.cb0267d07f33a043
     4b31a656ab14c3a4
-VMOVLPS_128_M64_XMM_XMM(mem)
+VPHSUBD_128(mem)
   before
     91bd341fbea442b8.3e0cf2e6c991d354.0c7240570a397009.63c569c171b5d2ef
     77738c18d1f1d7aa.2cc81f015672251e.863a635bbae72286.f8c5695c7510d162
@@ -40224,11 +40224,11 @@
   after
     91bd341fbea442b8.3e0cf2e6c991d354.0c7240570a397009.63c569c171b5d2ef
     77738c18d1f1d7aa.2cc81f015672251e.863a635bbae72286.f8c5695c7510d162
-    0000000000000000.0000000000000000.863a635bbae72286.63c569c171b5d2ef
+    0000000000000000.0000000000000000.fdc72fb20df0692e.34acbf2b7c4b6806
     978c8a4c6df136da.85e63cd75f203f6d.c4857e8123d5e1ca.d6b6f250421fab40
     d740728043ecff04
 
-VMOVLPS_128_M64_XMM_XMM(reg)
+VPHSUBD_128(reg)
   before
     b43bbf10d14c3ce6.8888285d2dbb776f.a8df236a1305804b.3fa06d7b152d65e9
     c9f3d66b88cc9f91.8add814f5f71bf94.962f9651620389db.1d6f99a0aa2c5241
@@ -40236,12 +40236,12 @@
     0ac94e32de59c7f3.32c6508387d35338.3e030cd03e7ce2c7.73589617304d574a
     a20b5f415786e654
   after
-    b43bbf10d14c3ce6.8888285d2dbb776f.a8df236a1305804b.3fa06d7b152d65e9
+    0000000000000000.0000000000000000.3e8606d1c41fe623.cbd3f38a8cbcb8a1
     c9f3d66b88cc9f91.8add814f5f71bf94.962f9651620389db.1d6f99a0aa2c5241
     72b3b1fd03f664b1.7a590f0d1e20ca73.a9218ffae7a796cb.3bbd7edaffdd64fd
     0ac94e32de59c7f3.32c6508387d35338.3e030cd03e7ce2c7.73589617304d574a
     a20b5f415786e654
-VMOVLPS_128_M64_XMM_XMM(mem)
+VPHSUBD_128(mem)
   before
     a4a153469397ce46.ef7fa976b67e0303.8ff1c09eb5971711.b21f083f040eaa7b
     55e7f111fd89cb4c.7c22bc3526f3558c.6da5d948c477d228.5fc27fb3d5ea2992
@@ -40251,11 +40251,11 @@
   after
     a4a153469397ce46.ef7fa976b67e0303.8ff1c09eb5971711.b21f083f040eaa7b
     55e7f111fd89cb4c.7c22bc3526f3558c.6da5d948c477d228.5fc27fb3d5ea2992
-    0000000000000000.0000000000000000.6da5d948c477d228.b21f083f040eaa7b
+    0000000000000000.0000000000000000.25a5567351efa23c.56d1f8e07627a9df
     35b313a8d145f347.fd5ffed440fb2abc.1ddcfbfcf8bc1cc1.d7cdd05a05ad409b
     5bcda1669dad4ee4
 
-VMOVLPS_128_M64_XMM_XMM(reg)
+VPHSUBD_128(reg)
   before
     8883dd26b0260542.1bd1914e72279594.aa91258d21a525ba.a6f7fbdf5439239c
     bb3d8008d9a49f5f.20cea769b31b3da5.6fdff6700cd026e2.20cb950201021165
@@ -40263,12 +40263,12 @@
     a3e8ecdedee16f88.f7998cb1836a8bc4.b003826969d2295e.57d189b7c0a99173
     cc9ada220aa09b10
   after
-    8883dd26b0260542.1bd1914e72279594.aa91258d21a525ba.a6f7fbdf5439239c
+    0000000000000000.0000000000000000.f26efcf4b4fe5af9.9cf03072e0367c63
     bb3d8008d9a49f5f.20cea769b31b3da5.6fdff6700cd026e2.20cb950201021165
     50458777b4b459e8.2078d1e6af2da5a6.a7966beb9a0568df.672546501c23a149
     a3e8ecdedee16f88.f7998cb1836a8bc4.b003826969d2295e.57d189b7c0a99173
     cc9ada220aa09b10
-VMOVLPS_128_M64_XMM_XMM(mem)
+VPHSUBD_128(mem)
   before
     a14eb57d15127b4b.1072adabf2b81cec.81fe52b74adda82b.e570365515c2a30a
     b4b796b4fe0def52.f32fc6498dc39dbf.9a73a1e22092bb06.a129831d39621291
@@ -40278,11 +40278,11 @@
   after
     a14eb57d15127b4b.1072adabf2b81cec.81fe52b74adda82b.e570365515c2a30a
     b4b796b4fe0def52.f32fc6498dc39dbf.9a73a1e22092bb06.a129831d39621291
-    0000000000000000.0000000000000000.9a73a1e22092bb06.e570365515c2a30a
+    0000000000000000.0000000000000000.c8df557430526cb5.861f192498388f74
     01db5c67d8cc7e6e.8b71eca8c6ab0a64.e8bcc75c6cf4aecb.22b4d9ee5adfc3da
     9e1cdacf90d57cf4
 
-VMOVLPS_128_XMM_M64(reg)
+VPHSUBSW_128(reg)
   before
     1301643cadaa1a99.f32e38ba01a811dc.f88ef2419c9f6f8f.d629978118b8070c
     dbaf739f50eadb73.92670a99783d27c4.4b0e3f5c68f896d8.c3d5de7d45ef4472
@@ -40290,12 +40290,12 @@
     d89611fb92ddb078.46ba81adbdbeccb5.13679fc4550a227b.091dc7a78ce35d5b
     1b515faedfb9b137
   after
-    1301643cadaa1a99.f32e38ba01a811dc.f88ef2419c9f6f8f.d629978118b8070c
+    0000000000000000.0000000000000000.ef26f7ac7fff1484.f44e80001aa8fe83
     dbaf739f50eadb73.92670a99783d27c4.4b0e3f5c68f896d8.c3d5de7d45ef4472
     547203651322f92f.b9524ff158957c53.e03dcf63c742beee.8a8d1a3b0da42228
     d89611fb92ddb078.46ba81adbdbeccb5.13679fc4550a227b.091dc7a78ce35d5b
     1b515faedfb9b137
-VMOVLPS_128_XMM_M64(mem)
+VPHSUBSW_128(mem)
   before
     9cf55f3a2131d9e7.c46798cc6aa73efb.146c1eb8c4c4d215.3fd8aae9addbfd2b
     67d444386f579297.74309443360ddd63.fe34a20089b14ca0.c2dbec406b428bab
@@ -40303,13 +40303,13 @@
     4f77aa3b9cdfa6ab.91dddcd81cda4195.9a364bf4ba7686e6.39cb05318cffb4ca
     e64fd5a2266dc6c1
   after
-    9cf55f3a2131d9e7.c46798cc6aa73efb.146c1eb8c4c4d215.f7be61342cca0aa7
+    9cf55f3a2131d9e7.c46798cc6aa73efb.146c1eb8c4c4d215.3fd8aae9addbfd2b
     67d444386f579297.74309443360ddd63.fe34a20089b14ca0.c2dbec406b428bab
-    5abc8995e4389875.453e01ce939aca5d.e2de87702793f382.f7be61342cca0aa7
+    0000000000000000.0000000000000000.0a4c0d5180004f50.a3cc7fff29658000
     4f77aa3b9cdfa6ab.91dddcd81cda4195.9a364bf4ba7686e6.39cb05318cffb4ca
     e64fd5a2266dc6c1
 
-VMOVLPS_128_XMM_M64(reg)
+VPHSUBSW_128(reg)
   before
     5996ccf696a17c38.24d22418b5587965.b55920cd6d5a7db6.040868785f65bff9
     edece696792711da.b399721748b0cdd0.0dfec91923a5bb6d.fa1f5ce8316c5be6
@@ -40317,12 +40317,12 @@
     ecf4746d0655cb51.739a7a2b522be768.c9f23a672dcd2c4b.fe50b73dcef3ab00
     c40116fad18bd885
   after
-    5996ccf696a17c38.24d22418b5587965.b55920cd6d5a7db6.040868785f65bff9
+    0000000000000000.0000000000000000.de105d1e8000c943.bb1b97c862c92a7a
     edece696792711da.b399721748b0cdd0.0dfec91923a5bb6d.fa1f5ce8316c5be6
     009c1fef6a89c254.da980f2473f25e18.f518d328da473765.5a49a3314d9716da
     ecf4746d0655cb51.739a7a2b522be768.c9f23a672dcd2c4b.fe50b73dcef3ab00
     c40116fad18bd885
-VMOVLPS_128_XMM_M64(mem)
+VPHSUBSW_128(mem)
   before
     86283b52716c5695.0f3ee07de816687e.5c6d2c18006625ed.e5dafb40b8c2d7cb
     2190a233cba0e45b.c3c75f89ad59d486.6fdba2d799afd4d3.a51a112118b37490
@@ -40330,13 +40330,13 @@
     5357273c1b371bbc.52c6864a4e920cda.87bbcc7bff9c736f.81d52ca7c6b6739b
     55e82a254be04d39
   after
-    86283b52716c5695.0f3ee07de816687e.5c6d2c18006625ed.65ff7874e92a3f47
+    86283b52716c5695.0f3ee07de816687e.5c6d2c18006625ed.e5dafb40b8c2d7cb
     2190a233cba0e45b.c3c75f89ad59d486.6fdba2d799afd4d3.a51a112118b37490
-    7207c788fa363c04.66dbedfff0a94c16.89b159543a12af45.65ff7874e92a3f47
+    0000000000000000.0000000000000000.cfab258715661f09.80003b246c075bdd
     5357273c1b371bbc.52c6864a4e920cda.87bbcc7bff9c736f.81d52ca7c6b6739b
     55e82a254be04d39
 
-VMOVLPS_128_XMM_M64(reg)
+VPHSUBSW_128(reg)
   before
     3d836d59153609cd.a14e3d3d49b13dae.e5d427d562a14f7d.43c577390258dc7e
     95f4f0b1bf43e302.39b68576a0af5e06.7950cb0ec86153ac.9a9bd7786253a69e
@@ -40344,12 +40344,12 @@
     0483ac7b25b3df01.b20b9c413c698b9b.18c60c37fd25885d.89d9a22da3334bc0
     dadb067bbd309f19
   after
-    3d836d59153609cd.a14e3d3d49b13dae.e5d427d562a14f7d.43c577390258dc7e
+    0000000000000000.0000000000000000.02d933b5fe1e8000.80007fff3cdd8000
     95f4f0b1bf43e302.39b68576a0af5e06.7950cb0ec86153ac.9a9bd7786253a69e
     b985b298e6931685.f55c7bd43d3e39f1.6b876e601d5e5113.6808662639988cfb
     0483ac7b25b3df01.b20b9c413c698b9b.18c60c37fd25885d.89d9a22da3334bc0
     dadb067bbd309f19
-VMOVLPS_128_XMM_M64(mem)
+VPHSUBSW_128(mem)
   before
     35d80ffba29c4334.d43adcc4192e7a23.4c9162aab83c0f30.da57a10003413236
     779d37996e82f53a.84f63ce05d912296.9fb84bfccdc383db.0e862a25cb3e8c4c
@@ -40357,13 +40357,13 @@
     20aed9df2eee6dbe.f3ac8242473c8c22.e01d7407351f2524.3df30537140d40d9
     efc750fbccf611a9
   after
-    35d80ffba29c4334.d43adcc4192e7a23.4c9162aab83c0f30.10a1a213f2a9d248
+    35d80ffba29c4334.d43adcc4192e7a23.4c9162aab83c0f30.da57a10003413236
     779d37996e82f53a.84f63ce05d912296.9fb84bfccdc383db.0e862a25cb3e8c4c
-    7cf5fc413fef6e5a.6f02cb3c8e671407.874ed221980ba1c8.10a1a213f2a9d248
+    0000000000000000.0000000000000000.161956f4c6a92ef5.7fffb6181b9fc10e
     20aed9df2eee6dbe.f3ac8242473c8c22.e01d7407351f2524.3df30537140d40d9
     efc750fbccf611a9
 
-VRCPSS_128(reg)
+VPABSB_128(reg)
   before
     836a7dcdb6f18265.3f924a60598bac92.6b3e5e60259dc692.86f2ab98bf0ccd1b
     55288a186f89ceb8.b56fcbaedcd3e904.32055c00c315fd04.5599f5c252dd53d9
@@ -40371,12 +40371,12 @@
     232531c8bcc1ebd5.163fef655791476c.2162ab7bb07a559d.de8caf8e055cec57
     507018085d227670
   after
-    0000000000000000.0000000000000000.32055c00c315fd04.5599f5c2734ec800
+    0000000000000000.0000000000000000.5a4d777043306e24.292333700b627477
     55288a186f89ceb8.b56fcbaedcd3e904.32055c00c315fd04.5599f5c252dd53d9
     c14d7247924a334f.5e0fd9b6d2d1dd3d.a64d7790bd306e24.29ddcd700b9e7489
     232531c8bcc1ebd5.163fef655791476c.2162ab7bb07a559d.de8caf8e055cec57
     507018085d227670
-VRCPSS_128(mem)
+VPABSB_128(mem)
   before
     5b5682ca2efccf00.d7fcc406887933f7.b8ca89a68820e1bb.0190f42d3880ed1c
     db0a6bc194f7b332.391d266e93ff4660.227e236481896856.a0224f12f0ce734c
@@ -40386,11 +40386,11 @@
   after
     5b5682ca2efccf00.d7fcc406887933f7.b8ca89a68820e1bb.0190f42d3880ed1c
     db0a6bc194f7b332.391d266e93ff4660.227e236481896856.a0224f12f0ce734c
-    0000000000000000.0000000000000000.227e236481896856.a0224f12467e3000
+    0000000000000000.0000000000000000.4836775a78201f45.01700c2d3880131c
     a90ca8f9927d0b2f.77714767d3a2c0ba.bb8d480c381a2c23.8fa62825616e3971
     972f9e2c52daf0be
 
-VRCPSS_128(reg)
+VPABSB_128(reg)
   before
     ce4d1615e4bc856d.b0f2f3146121f751.0a3bfed141d79f03.a280cbcd2f5ae1ac
     914c8a4eb2a23429.9bd5ad1336155dc6.bc8074155e0a3943.bfcb3ebc5da47332
@@ -40398,12 +40398,12 @@
     2c1c5b5c74a8ce7b.92c55b6c5f1e8b57.eaaa8fd712989159.1098e5d5d0881de4
     fab311d64d39ad68
   after
-    0000000000000000.0000000000000000.bc8074155e0a3943.bfcb3ebc9ff54800
+    0000000000000000.0000000000000000.18755a623b3a3526.103a1e3b2105621f
     914c8a4eb2a23429.9bd5ad1336155dc6.bc8074155e0a3943.bfcb3ebc5da47332
     3c77f8415918389f.488251e12c65fbb9.e88ba69ec5c6cb26.f03a1ec5df059ee1
     2c1c5b5c74a8ce7b.92c55b6c5f1e8b57.eaaa8fd712989159.1098e5d5d0881de4
     fab311d64d39ad68
-VRCPSS_128(mem)
+VPABSB_128(mem)
   before
     8c551db571250a98.bb85b00aa0e03268.546a479fec4bcacc.1e272b2ee20bc788
     a04c855f5957efa1.46fff1b7784ca012.6c3d9266eff97343.df4f770ed1aba85e
@@ -40413,11 +40413,11 @@
   after
     8c551db571250a98.bb85b00aa0e03268.546a479fec4bcacc.1e272b2ee20bc788
     a04c855f5957efa1.46fff1b7784ca012.6c3d9266eff97343.df4f770ed1aba85e
-    0000000000000000.0000000000000000.6c3d9266eff97343.df4f770e9cea7000
+    0000000000000000.0000000000000000.546a4761144b3634.1e272b2e1e0b3978
     c2645ac0e2be44ec.c0562cbe9eec8850.0a9c3260c404f7e9.7dd00b1979a35eb2
     10c14d1c6b13aa87
 
-VRCPSS_128(reg)
+VPABSB_128(reg)
   before
     a28d2d58ebe192b4.881dbf50bc0b2c87.67cb1df0233a7b3c.48c17f6ccf7b486f
     8d7fa83a969852e4.405b705acacf8caa.7b80ebd2c5eb6795.4c431bbbbfa2f5a9
@@ -40425,12 +40425,12 @@
     e208619cdbf249ff.fa92a78cefe9a73b.55de1051cfa61e3f.12912cd6c0304ee4
     8cf49a7a09b0723d
   after
-    0000000000000000.0000000000000000.7b80ebd2c5eb6795.4c431bbbcd751000
+    0000000000000000.0000000000000000.563d6d3220757607.1011803b4f7b483f
     8d7fa83a969852e4.405b705acacf8caa.7b80ebd2c5eb6795.4c431bbbbfa2f5a9
     2fe4bb2c07c426c4.c8e8eaca27152182.56c393ce208b8a07.f0ef803bb185b8c1
     e208619cdbf249ff.fa92a78cefe9a73b.55de1051cfa61e3f.12912cd6c0304ee4
     8cf49a7a09b0723d
-VRCPSS_128(mem)
+VPABSB_128(mem)
   before
     3be64712a710e2f9.043796f4adadf842.b323258d3f57d900.d41e5ec86ec95fe9
     fc31ad8ab65d5843.efbd57a21a816f39.d068dfb7336c74fd.2ecf799e9a7f8bb1
@@ -40440,11 +40440,11 @@
   after
     3be64712a710e2f9.043796f4adadf842.b323258d3f57d900.d41e5ec86ec95fe9
     fc31ad8ab65d5843.efbd57a21a816f39.d068dfb7336c74fd.2ecf799e9a7f8bb1
-    0000000000000000.0000000000000000.d068dfb7336c74fd.2ecf799e1022c000
+    0000000000000000.0000000000000000.4d2325733f572700.2c1e5e386e375f17
     1f0699ca9aeb4834.94fd69ad32a6a3f1.a13df83a74b9d553.e8b3081607d58e48
     ff7e7391818ddf70
 
-VRCPPS_128(reg)
+VPABSW_128(reg)
   before
     62eb9b1bf7090966.3a27166aa6443a32.0550b3e2160ed90b.0e664e6afa091202
     6d447c2005d449d5.d6d13e9a94ba236f.b029791c05c0c788.4e72d175932fa89a
@@ -40452,12 +40452,12 @@
     eaec5b4c5b87fad1.02f47c5b832bc954.25a0654f712fb95d.b8664cc9702ece34
     99e63beaec20d78e
   after
-    62eb9b1bf7090966.3a27166aa6443a32.0550b3e2160ed90b.0e664e6afa091202
-    0000000000000000.0000000000000000.8c195000e4a42000.40bb480022b2b800
+    0000000000000000.0000000000000000.0d2b4a3965b957ec.3e2e03ba5c375347
+    6d447c2005d449d5.d6d13e9a94ba236f.b029791c05c0c788.4e72d175932fa89a
     7bd6130d477adb6a.d0d28c467f58bf16.f2d5b5c79a47a814.3e2efc465c375347
     eaec5b4c5b87fad1.02f47c5b832bc954.25a0654f712fb95d.b8664cc9702ece34
     99e63beaec20d78e
-VRCPPS_128(mem)
+VPABSW_128(mem)
   before
     bd7a4795eb172780.15d4504ada88e3b5.49058ac3bd3efe55.a6d584212705360c
     00edebb689217d37.57d9ee746209d2c3.81cf326c489d1a44.d1c20ea758545ad0
@@ -40466,12 +40466,12 @@
     e7c908b1e0910e48
   after
     bd7a4795eb172780.15d4504ada88e3b5.49058ac3bd3efe55.a6d584212705360c
-    0000000000000000.0000000000000000.35f56800c1ab9800.d819780057f5f800
-    3e0da339e34993df.0e4631348f9403a6.861ff1414155d84e.02b1ff4f9ea86353
+    00edebb689217d37.57d9ee746209d2c3.81cf326c489d1a44.d1c20ea758545ad0
+    0000000000000000.0000000000000000.4905753d42c201ab.592b7bdf2705360c
     53a4eb0a159c27a3.956816f8fcb7b10b.34c1412dc471f69e.96f05483988e8a41
     e7c908b1e0910e48
 
-VRCPPS_128(reg)
+VPABSW_128(reg)
   before
     52891744123d2911.1b7f40163a25f2b0.478b982b46fd199d.6780a01eebfd2e61
     337b7da8cb1f194b.726a1d476ef0b331.82fbb33908f37709.fb2a8affd5063cc3
@@ -40479,12 +40479,12 @@
     c72a3f933fb362bc.3c9f5fcd767e0241.fff1a596651c031e.b56aeb415bbcce12
     94995a7b3182c957
   after
-    52891744123d2911.1b7f40163a25f2b0.478b982b46fd199d.6780a01eebfd2e61
-    0000000000000000.0000000000000000.def77800a0c7c800.b36e6000e357d000
+    0000000000000000.0000000000000000.5ffc648e21dc06fb.347779bc64692111
+    337b7da8cb1f194b.726a1d476ef0b331.82fbb33908f37709.fb2a8affd5063cc3
     e6ed3649a6c217a0.3331fe8bce0a2453.a004648ede2406fb.cb8979bc9b97deef
     c72a3f933fb362bc.3c9f5fcd767e0241.fff1a596651c031e.b56aeb415bbcce12
     94995a7b3182c957
-VRCPPS_128(mem)
+VPABSW_128(mem)
   before
     44e2455438f48aeb.327d93f2347c344d.6882bcf981580929.f91074bd3868aa1f
     a11125ba8d1ecefa.82332ed21eaccafc.93a492fb0ba5f434.ebabcc6ff49337aa
@@ -40493,12 +40493,12 @@
     2b62e301b3c8973b
   after
     44e2455438f48aeb.327d93f2347c344d.6882bcf981580929.f91074bd3868aa1f
-    0000000000000000.0000000000000000.167ab000fd97b000.85e2d000468cd800
-    86f277974b0d51af.15980da09bcc6078.99d25cbf31708091.320fa9193529e56a
+    a11125ba8d1ecefa.82332ed21eaccafc.93a492fb0ba5f434.ebabcc6ff49337aa
+    0000000000000000.0000000000000000.688243077ea80929.06f074bd386855e1
     d150b8d98ecccf36.46f82ac6476a316b.55d896310ec5696a.2888082595b7f10b
     2b62e301b3c8973b
 
-VRCPPS_128(reg)
+VPABSW_128(reg)
   before
     95e8381728e812a4.5df8636a736703bd.719e83b2bd117a81.a582bd3dbfb16beb
     c36802d593a4a0f2.05b6f43816ebab6e.f2d813cf994e7767.649c4bcf5f3f4141
@@ -40506,12 +40506,12 @@
     db81e6f6b51ddff0.1da4b93803db41ff.6534c94bf6b77c52.9e4f9136de725c1b
     d18040e3f52f18f7
   after
-    95e8381728e812a4.5df8636a736703bd.719e83b2bd117a81.a582bd3dbfb16beb
-    0000000000000000.0000000000000000.5a081000063f2800.1107900073823800
+    0000000000000000.0000000000000000.24f0297878ab63c9.6df1412d0b7b5768
+    c36802d593a4a0f2.05b6f43816ebab6e.f2d813cf994e7767.649c4bcf5f3f4141
     112c3ea68d877ad2.a756e82e92638075.24f0d68878ab63c9.6df1bed30b7ba898
     db81e6f6b51ddff0.1da4b93803db41ff.6534c94bf6b77c52.9e4f9136de725c1b
     d18040e3f52f18f7
-VRCPPS_128(mem)
+VPABSW_128(mem)
   before
     e45148c56bbf9958.7eb3f831a4f309f7.456ce5428660a838.10eee683aefbfcaf
     b18e23ca5d2c9b69.540e6fc3f8943594.fa79e73937fd724b.806b2b9c3c051f8c
@@ -40520,12 +40520,12 @@
     0e6abd66063bb9d7
   after
     e45148c56bbf9958.7eb3f831a4f309f7.456ce5428660a838.10eee683aefbfcaf
-    0000000000000000.0000000000000000.398a5000f891d800.6e092800d0021000
-    16034fdde685da56.badd47184d8c9f72.17993b0730be5b65.13f693023d602394
+    b18e23ca5d2c9b69.540e6fc3f8943594.fa79e73937fd724b.806b2b9c3c051f8c
+    0000000000000000.0000000000000000.456c1abe79a057c8.10ee197d51050351
     ed7b47ea22d3114d.0c6e7d9c3e68833e.79965e9990b01eb2.24dd1a224c994274
     0e6abd66063bb9d7
 
-VRCPPS_256(reg)
+VPMOVSXBQ_128(reg)
   before
     2feb773b06d2c36a.14c488dd2e24fd77.a60b0bbc67b31ca4.fd3dcbdc70de795d
     e1aa440ee9eb9ed8.65a88ca226835a03.e402efe265f9a74f.7d5afebaef552592
@@ -40534,11 +40534,11 @@
     846b143732e2742b
   after
     2feb773b06d2c36a.14c488dd2e24fd77.a60b0bbc67b31ca4.fd3dcbdc70de795d
-    fc06380034e12800.c105d8005a019000.5c508000aa246000.a731a00058cba800
+    0000000000000000.0000000000000000.ffffffffffffffe1.000000000000007f
     82f4204a4a1184ce.bdf4d12524fce31b.229d247cd4c75fec.d7b873212620e17f
     6c14075ac6d0b1f8.f974d252479c55ec.bc28a7f44fa88226.e525a6fc334b674e
     846b143732e2742b
-VRCPPS_256(mem)
+VPMOVSXBQ_128(mem)
   before
     905838be3ef2c443.fc58f6acf8b56301.f3f40b16a96e6ca1.0ef172b872294aaa
     e6b68e7d748613c2.8f0be8ab7c4bd496.8840f95b667fe467.74438333dad5f424
@@ -40547,12 +40547,12 @@
     b5652c26c454930a
   after
     905838be3ef2c443.fc58f6acf8b56301.f3f40b16a96e6ca1.0ef172b872294aaa
-    ee9790004006f800.829708008634a000.8b064800d5897000.7007b0000cc19000
+    0000000000000000.0000000000000000.000000000000004a.ffffffffffffffaa
     60529260efab1cd3.7f78d9c3ef1e4163.9423160f9bda7869.4969d5d12238bb3f
     dbf7c053cb6c9ca3.29ecc560edbbe613.f46be01d638be5d4.ebb064fee7dedca7
     b5652c26c454930a
 
-VRCPPS_256(reg)
+VPMOVSXBQ_128(reg)
   before
     03d12ab556251c12.3373954225d54e5d.eab3a9ee11adfe52.82e2d270db9fe7d4
     3043591838deb36b.44908c1a19f3f02e.1c197fd9f780c6ce.1b5568f61e213994
@@ -40561,11 +40561,11 @@
     c08dddecc5b46d10
   after
     03d12ab556251c12.3373954225d54e5d.eab3a9ee11adfe52.82e2d270db9fe7d4
-    e4f3380077ec7000.94d1d800bc1ca000.628be00042296000.e363680035cff000
+    0000000000000000.0000000000000000.ffffffffffffff99.0000000000000041
     9a06b5b9070a93c2.ea1c21c5c2d13c42.1c6a458e3cc17a30.9b901f9a491d9941
     9c653a065e35f8c3.01e1d0313c7beec4.46f1f7777cfb5527.de5e7248779fc006
     c08dddecc5b46d10
-VRCPPS_256(mem)
+VPMOVSXBQ_128(mem)
   before
     1de7dc734e685a8b.91aee569d9eb2019.65ac1649a4fdc4e1.f6fc8f0251ba945d
     d13aebc72ec545a2.d72bb05016b94571.f2496ef8156478c4.88d50a9a5a8b737e
@@ -40574,12 +40574,12 @@
     2332a9e7b9dd2621
   after
     1de7dc734e685a8b.91aee569d9eb2019.65ac1649a4fdc4e1.f6fc8f0251ba945d
-    610d5800308d0800.ed3b5800a50b5800.193e6800da012000.8801c0002d2fa000
+    0000000000000000.0000000000000000.ffffffffffffff94.000000000000005d
     b85087d682d9e782.c8299926ae2ba477.8483542cacbcc79a.58c965aa30f92e38
     aef62b8a66afff56.c2f49b573fcb79d6.f72844d0840f6d8f.c3249ba072900034
     2332a9e7b9dd2621
 
-VRCPPS_256(reg)
+VPMOVSXBQ_128(reg)
   before
     d43e89eba46bdca9.8ff753d1f554474b.20d7b34f6527ff3b.2702bad0ba6b25ce
     34963918ccc75e78.36217b954bd37c8d.3d20db7abaca7451.f0de331969dcac84
@@ -40588,11 +40588,11 @@
     787682da681f7224
   after
     d43e89eba46bdca9.8ff753d1f554474b.20d7b34f6527ff3b.2702bad0ba6b25ce
-    e076e800ae821800.fdac6000f9b1c000.08d60800a1a9b000.506ee800d08a7000
+    0000000000000000.0000000000000000.ffffffffffffffbe.ffffffffffffffdc
     9e84b4dad07be73c.813e1fc485385a47.76191144dd4111c5.2e892a95ae6cbedc
     6e55f69e4915b49e.4b1cbc49be909ca5.2810501968171542.bccc1b31a4291703
     787682da681f7224
-VRCPPS_256(mem)
+VPMOVSXBQ_128(mem)
   before
     3d52dc7a15588c6c.0055fbced521004d.7085cd1013e6ffd5.ad4f9466f7d8ba75
     e72ba4ffc7e22007.b0d0c0d8102a09f3.cb46ce059f463f01.6323da9527113d0a
@@ -40601,12 +40601,12 @@
     3a1389ae91ff51c9
   after
     3d52dc7a15588c6c.0055fbced521004d.7085cd1013e6ffd5.ad4f9466f7d8ba75
-    419b680069975800.7f800000a9cb8000.0e74f0006b0de000.d19dd80087173000
+    0000000000000000.0000000000000000.ffffffffffffffba.0000000000000075
     51ce55549bc9ec21.da123f2695bc093c.3a2b3b147fbd1855.a4d71c14934ddaac
     59086e64ad17aae4.d966762600633dd5.98ff912ace5645fe.cdb9584dd818cd08
     3a1389ae91ff51c9
 
-VPSADBW_128(reg)
+VPMOVSXWQ_128(reg)
   before
     4833aca25b8da39c.d9a2681d18da177f.0b1a6143eeace06a.c0904b31a91e8328
     5163bb95d14efe2d.af6bc16af81eee1c.cb78fae9fb232fa6.90a8e5172b1f8efe
@@ -40614,12 +40614,12 @@
     c7269228339bc337.c9b67d718956ce0e.64652b80dfc7c1c6.94a1aa2c9602f961
     8019cc34b7fbd245
   after
-    0000000000000000.0000000000000000.00000000000002dc.00000000000002ea
-    5163bb95d14efe2d.af6bc16af81eee1c.cb78fae9fb232fa6.90a8e5172b1f8efe
+    4833aca25b8da39c.d9a2681d18da177f.0b1a6143eeace06a.c0904b31a91e8328
+    0000000000000000.0000000000000000.0000000000007167.00000000000021ad
     b2f0b4f390cfa027.b62ef4376aeeede8.75cd3f83c1526636.e215dbc6716721ad
     c7269228339bc337.c9b67d718956ce0e.64652b80dfc7c1c6.94a1aa2c9602f961
     8019cc34b7fbd245
-VPSADBW_128(mem)
+VPMOVSXWQ_128(mem)
   before
     8448bfc9ef5e6886.ec5051a0563fa309.c6d1d80272624dbb.f68cba49ef0d7c01
     7afcfed95a37764f.7dbceec796457e48.874981d7401f281a.858de84b8db1d294
@@ -40628,12 +40628,12 @@
     c0ab06e0d744d211
   after
     8448bfc9ef5e6886.ec5051a0563fa309.c6d1d80272624dbb.f68cba49ef0d7c01
-    7afcfed95a37764f.7dbceec796457e48.874981d7401f281a.858de84b8db1d294
-    0000000000000000.0000000000000000.000000000000032e.0000000000000291
+    0000000000000000.0000000000000000.ffffffffffffef0d.0000000000007c01
+    40ff064f1593b9cd.d6b4630a8f3b8ea0.e9ebf5dd10981958.6fb6b2f2563e002a
     b01f51173c7ded2b.5385aed3dcad10be.c983affefddadda1.0e5112abe5404170
     c0ab06e0d744d211
 
-VPSADBW_128(reg)
+VPMOVSXWQ_128(reg)
   before
     df108affc7d5efba.a7265d1eea02cd96.507bca901926404e.01dc2b2824ef2f20
     c9cc9873517fd417.02e1a54e3b2c163a.29e2b4abe33259fb.6ec4e646a0e5cd02
@@ -40641,12 +40641,12 @@
     69784609a64fe59b.4fa2d9dd38a5d3db.df33deb08c34395f.586d050e09a3d89e
     8cc662902d82bdaf
   after
-    0000000000000000.0000000000000000.0000000000000255.00000000000002c8
-    c9cc9873517fd417.02e1a54e3b2c163a.29e2b4abe33259fb.6ec4e646a0e5cd02
+    df108affc7d5efba.a7265d1eea02cd96.507bca901926404e.01dc2b2824ef2f20
+    0000000000000000.0000000000000000.ffffffffffff8ec8.0000000000007173
     d82a2ea713cebdd3.9b1ca5944c0a8442.3a066692d55d9872.ed055a448ec87173
     69784609a64fe59b.4fa2d9dd38a5d3db.df33deb08c34395f.586d050e09a3d89e
     8cc662902d82bdaf
-VPSADBW_128(mem)
+VPMOVSXWQ_128(mem)
   before
     65ddedb61772ddd4.d900df04a88e891b.fa41be141c0bbe30.74b41771a442776d
     c07d236ce37df436.820ff204b515e4fe.79c3cf241347026e.54d60d41b7149049
@@ -40655,12 +40655,12 @@
     57fa3744f6944b66
   after
     65ddedb61772ddd4.d900df04a88e891b.fa41be141c0bbe30.74b41771a442776d
-    c07d236ce37df436.820ff204b515e4fe.79c3cf241347026e.54d60d41b7149049
-    0000000000000000.0000000000000000.0000000000000263.00000000000000fa
+    0000000000000000.0000000000000000.ffffffffffffa442.000000000000776d
+    77747e9eacb2be04.c1f17c76687234f0.a6f588fb3a665bc1.dde5bc8c6435be9e
     678c7c398e1af668.f3f27ac45d31b39f.5ea36584ac738454.6a2d21be44313d19
     57fa3744f6944b66
 
-VPSADBW_128(reg)
+VPMOVSXWQ_128(reg)
   before
     ff98fa8813eb2230.6c939827a6c3598e.725ee75b31dc9db4.7d99e3ab867a3b54
     c05266f839c1ff24.62534f5610b8a3a4.9b81bfa87f0230de.dfa37d5ce38739ec
@@ -40668,12 +40668,12 @@
     f94e2a080f1cba38.91317a2347b8db4a.5b1aa110fce83c1b.dc22f50c98e60197
     2f2fcbe4274e4301
   after
-    0000000000000000.0000000000000000.0000000000000243.00000000000001b8
-    c05266f839c1ff24.62534f5610b8a3a4.9b81bfa87f0230de.dfa37d5ce38739ec
+    ff98fa8813eb2230.6c939827a6c3598e.725ee75b31dc9db4.7d99e3ab867a3b54
+    0000000000000000.0000000000000000.ffffffffffffe0a7.0000000000003d49
     f57578fe04a31ded.25991bb1e7068fd3.caa6ff15e42ca6c7.608cae83e0a73d49
     f94e2a080f1cba38.91317a2347b8db4a.5b1aa110fce83c1b.dc22f50c98e60197
     2f2fcbe4274e4301
-VPSADBW_128(mem)
+VPMOVSXWQ_128(mem)
   before
     3580aef5aaedbcb4.2a277a81f7b810b0.82e6e79a4dda4133.aa29a30461c12e88
     cae1182d3dcf2bdb.e24c63d556045b02.d486de0114797dba.131f005cb243b7b7
@@ -40682,12 +40682,12 @@
     826212fe393a3994
   after
     3580aef5aaedbcb4.2a277a81f7b810b0.82e6e79a4dda4133.aa29a30461c12e88
-    cae1182d3dcf2bdb.e24c63d556045b02.d486de0114797dba.131f005cb243b7b7
-    0000000000000000.0000000000000000.00000000000002b1.0000000000000323
+    0000000000000000.0000000000000000.00000000000061c1.0000000000002e88
+    ca1e8776fbfe4aa3.7f0be270cb8bd9da.63dbdc44b9a04d0c.f248b48688fb1457
     100377be0088d638.5baff1bef0d9c4e3.0ab25b50575b6b55.a3f0bced82748112
     826212fe393a3994
 
-VPSIGNB_128(reg)
+VPACKUSDW_128(reg)
   before
     ebebb4234bda7a8b.7a5b62f069798bc5.d4838e2b617a59ca.a7d8d90f0bb794c1
     3ad89dc954df7da0.e3f3c6f852db2477.44d4b423bbfbd33b.1516d16ef0bf837b
@@ -40695,12 +40695,12 @@
     fa083549b94ac1db.2113e63a1128f5f8.7d1d8c6598cb6a68.d31220bdbe04a68a
     dc666f85e0595238
   after
-    0000000000000000.0000000000000000.442cb4234505d3c5.15162f6ef0bf7d85
+    0000000000000000.0000000000000000.ffff0000ffffffff.ffff0000ffff0000
     3ad89dc954df7da0.e3f3c6f852db2477.44d4b423bbfbd33b.1516d16ef0bf837b
     cb73ca5cefd68182.27971ec2d5bc5e79.08ee5f129ae870e1.303bc05a227ff5af
     fa083549b94ac1db.2113e63a1128f5f8.7d1d8c6598cb6a68.d31220bdbe04a68a
     dc666f85e0595238
-VPSIGNB_128(mem)
+VPACKUSDW_128(mem)
   before
     2604289da38ab4e4.23e5dcfb4dc77857.af339a4c1f29a51f.fdad36865432fd7e
     8cb9c7f023a48abb.a155badd47d9e2a3.acc3b7e41ecd291c.e5ea58e367a967cc
@@ -40710,11 +40710,11 @@
   after
     2604289da38ab4e4.23e5dcfb4dc77857.af339a4c1f29a51f.fdad36865432fd7e
     8cb9c7f023a48abb.a155badd47d9e2a3.acc3b7e41ecd291c.e5ea58e367a967cc
-    0000000000000000.0000000000000000.54c349e41ecdd71c.1b16581d67a999cc
+    0000000000000000.0000000000000000.0000ffff0000ffff.0000ffff0000ffff
     2192a8fccdc07c99.111c0ce6e0eec35a.62621957592ca042.5e99fafe08f3abc7
     a6a57093cde0fecb
 
-VPSIGNB_128(reg)
+VPACKUSDW_128(reg)
   before
     c68d50145b0c16b8.0650e28d2edb11f7.b90c77e4b509b11d.d309560acd000ac4
     1a9d95ed4d03303b.7953f209bc0e0931.28bf0ac362e94360.2450ebf2a1a539ca
@@ -40722,12 +40722,12 @@
     ce6a3f52cf8359b1.755c8575d1ee11e3.c79d96d4ae294114.d2ee0f16d897d615
     e7dc952972fbbbb1
   after
-    0000000000000000.0000000000000000.d841f63d9ee9bda0.2450eb0e5fa5c736
+    0000000000000000.0000000000000000.00000000ffff0000.ffffffffffff0000
     1a9d95ed4d03303b.7953f209bc0e0931.28bf0ac362e94360.2450ebf2a1a539ca
     fe233b88405188ff.5469545d94662071.b981c0ef811ab4ce.2f0355fdf129e981
     ce6a3f52cf8359b1.755c8575d1ee11e3.c79d96d4ae294114.d2ee0f16d897d615
     e7dc952972fbbbb1
-VPSIGNB_128(mem)
+VPACKUSDW_128(mem)
   before
     4c9b6322dc625582.e6bd9bb79624e0fd.b6f9ff3e90b29ab4.b06186df86a126dd
     dbf5f6ed32d760b3.a2694d2432c0598e.f40c40a2ecbe7410.ce178e7aa40e9fd6
@@ -40737,11 +40737,11 @@
   after
     4c9b6322dc625582.e6bd9bb79624e0fd.b6f9ff3e90b29ab4.b06186df86a126dd
     dbf5f6ed32d760b3.a2694d2432c0598e.f40c40a2ecbe7410.ce178e7aa40e9fd6
-    0000000000000000.0000000000000000.0cf4c0a214428cf0.321772865cf29f2a
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
     ebad58aa0f1db7e8.76fca1c2581b1031.d8c305f0ede01217.1d8cd31424f83b06
     06e309ebbd8ed796
 
-VPSIGNB_128(reg)
+VPACKUSDW_128(reg)
   before
     945d45030e48f605.23a31f73cf057c43.467b3acc19f2c69b.35ff80b1c90e4d1a
     244585c8b0b4d600.f6659abfea2ba2af.2a82198d1ff35efa.00e2b2beb4b3cb58
@@ -40749,12 +40749,12 @@
     bb93fe095dd0c349.de7c9e8ca363ff69.9e5c96e468a9234a.4bc8296c20987f34
     846365e5dbef2d2a
   after
-    0000000000000000.0000000000000000.2a82198d1f0d5e06.00e2b2be4c4dcba8
+    0000000000000000.0000000000000000.ffffffffffff0000.ffffffffffff0000
     244585c8b0b4d600.f6659abfea2ba2af.2a82198d1ff35efa.00e2b2beb4b3cb58
     13e8c4a6415eb033.40be46787d9ce458.7e5f397105ad14fc.13361603c7de48fd
     bb93fe095dd0c349.de7c9e8ca363ff69.9e5c96e468a9234a.4bc8296c20987f34
     846365e5dbef2d2a
-VPSIGNB_128(mem)
+VPACKUSDW_128(mem)
   before
     9ad5485a13ee0d0a.7990305d9f9849ee.aa691ee6798daf0e.e6c62d52e375c893
     69e94db8e4a2dd02.a92c550ea3427fcf.815242711a25af74.b1e9f827139c3f81
@@ -40764,11 +40764,11 @@
   after
     9ad5485a13ee0d0a.7990305d9f9849ee.aa691ee6798daf0e.e6c62d52e375c893
     69e94db8e4a2dd02.a92c550ea3427fcf.815242711a25af74.b1e9f827139c3f81
-    0000000000000000.0000000000000000.7f52428f1adb5174.4f17f827ed9cc17f
+    0000000000000000.0000000000000000.0000ffff00000000.0000ffff0000ffff
     a225addbc35637e3.d07068386368ebf5.c04767cf2fd09233.45891fb7002c91fd
     c49f7249f5aee5e4
 
-VPSIGNW_128(reg)
+VPMOVZXBQ_128(reg)
   before
     389debf30ebafb20.c4e60179096f3b26.7eb04e8957fe9891.e0ec607adbfbede3
     fcd08420e8de0e5e.0f7966af596c1d2f.0ebf18e67ea5e518.7bbced06c2c48803
@@ -40776,12 +40776,12 @@
     e3050cb24e9c1d8f.9044599284436e46.447a4579d2564e9a.9211b475b3617146
     c62de62ff44e37c1
   after
-    0000000000000000.0000000000000000.f141e71a7ea5e518.7bbc12fac2c48803
-    fcd08420e8de0e5e.0f7966af596c1d2f.0ebf18e67ea5e518.7bbced06c2c48803
+    389debf30ebafb20.c4e60179096f3b26.7eb04e8957fe9891.e0ec607adbfbede3
+    0000000000000000.0000000000000000.0000000000000021.00000000000000c0
     6b843b3b1fa55b4a.5fa95a68cd599a2b.dceac1bd72e90d38.6d858b60013721c0
     e3050cb24e9c1d8f.9044599284436e46.447a4579d2564e9a.9211b475b3617146
     c62de62ff44e37c1
-VPSIGNW_128(mem)
+VPMOVZXBQ_128(mem)
   before
     e5a49c7ce1082d5b.be9ff1f0114e92da.7e14dd19973454ab.a2bea0863779e2ed
     ca445347959d1043.5a9ee7610547f4d6.05e764e7253b0987.5201ce5040dd06db
@@ -40790,12 +40790,12 @@
     e6ba25543f092702
   after
     e5a49c7ce1082d5b.be9ff1f0114e92da.7e14dd19973454ab.a2bea0863779e2ed
-    ca445347959d1043.5a9ee7610547f4d6.05e764e7253b0987.5201ce5040dd06db
-    0000000000000000.0000000000000000.05e79b19dac50987.adff31b040ddf925
+    0000000000000000.0000000000000000.00000000000000e2.00000000000000ed
+    53d8857b2d199ca3.114deb72c6148030.018769e947614905.b08ecc43860ef510
     5b2bb006c5868ca8.40f9f88def407293.4ec0680b1bb4d052.18b395cba799ec39
     e6ba25543f092702
 
-VPSIGNW_128(reg)
+VPMOVZXBQ_128(reg)
   before
     76f0784be9ebe217.be0a4fd378f29d7d.44ee0b1f1c5705ac.c760dd3abd40599a
     24a18b1a42ca5823.5741dece62698b4f.77781e95eae67627.4a3244604810a108
@@ -40803,12 +40803,12 @@
     49a3def56eaf68d1.a0e7bdff4da4ed99.de7a39d9d799e1f1.da9ada468bac5d08
     a0ca00dd7a9149f2
   after
-    0000000000000000.0000000000000000.77781e95151a7627.b5ce4460b7f0a108
-    24a18b1a42ca5823.5741dece62698b4f.77781e95eae67627.4a3244604810a108
+    76f0784be9ebe217.be0a4fd378f29d7d.44ee0b1f1c5705ac.c760dd3abd40599a
+    0000000000000000.0000000000000000.0000000000000063.00000000000000c9
     4b18592fe532c6d2.049cd9e4a0f5124a.36e32f59f47801af.b2011a6bd93063c9
     49a3def56eaf68d1.a0e7bdff4da4ed99.de7a39d9d799e1f1.da9ada468bac5d08
     a0ca00dd7a9149f2
-VPSIGNW_128(mem)
+VPMOVZXBQ_128(mem)
   before
     df5b091bc3eae4b2.798c16d77ace7acc.06ed050c8682d969.c98b38802ed65398
     72196fee81c3e975.3620fd43a41a376e.147b2df8669a92e5.546028b996ba9351
@@ -40817,12 +40817,12 @@
     4e75781148ca7d9e
   after
     df5b091bc3eae4b2.798c16d77ace7acc.06ed050c8682d969.c98b38802ed65398
-    72196fee81c3e975.3620fd43a41a376e.147b2df8669a92e5.546028b996ba9351
-    0000000000000000.0000000000000000.147b2df899666d1b.aba028b996ba9351
+    0000000000000000.0000000000000000.0000000000000053.0000000000000098
+    37d2b042d1291667.deab90a48920dc64.a55eb1ad09f8d33a.db4606f2aad1ddc8
     08504701cf2725b3.cc79ca66c56ba55a.94600d198ca85993.ba89cc9606a86ca8
     4e75781148ca7d9e
 
-VPSIGNW_128(reg)
+VPMOVZXBQ_128(reg)
   before
     f15606d009c34c55.c361b11895c9d286.5bd6a7f5f387cdfb.bf4ebe270bb7e01d
     0077703de720147a.42cf6873421cdb0c.e90e23beaf0191f4.00f33fc3a1302404
@@ -40830,12 +40830,12 @@
     d2adccd5693483bd.00f5b2a7bb03ecdf.6e3deaa9433cdd9c.3896a1558491d197
     e62c7b230891b39c
   after
-    0000000000000000.0000000000000000.16f223be50ff91f4.00f33fc3a130dbfc
-    0077703de720147a.42cf6873421cdb0c.e90e23beaf0191f4.00f33fc3a1302404
+    f15606d009c34c55.c361b11895c9d286.5bd6a7f5f387cdfb.bf4ebe270bb7e01d
+    0000000000000000.0000000000000000.00000000000000e0.0000000000000073
     d726b4c57e6c13b9.6267eaffef2bfa70.d16c3b2b96632df0.341d0cd86b1fe073
     d2adccd5693483bd.00f5b2a7bb03ecdf.6e3deaa9433cdd9c.3896a1558491d197
     e62c7b230891b39c
-VPSIGNW_128(mem)
+VPMOVZXBQ_128(mem)
   before
     1ba9152f142c41ad.4d59b7d74402a033.f6453c56bfaf6c84.1ece2ca55315dca3
     b4daeb65c36d38f6.a4766e39ac65a8c6.222204fa1a3b388c.3b68fd8a617c67b2
@@ -40844,12 +40844,12 @@
     bf72a4e69a79a6c5
   after
     1ba9152f142c41ad.4d59b7d74402a033.f6453c56bfaf6c84.1ece2ca55315dca3
-    b4daeb65c36d38f6.a4766e39ac65a8c6.222204fa1a3b388c.3b68fd8a617c67b2
-    0000000000000000.0000000000000000.ddde04fae5c5388c.3b68fd8a617c984e
+    0000000000000000.0000000000000000.00000000000000dc.00000000000000a3
+    8b8b79b2326054a5.3350ee663ce6d523.5e59877ee5b30a22.225a59c309fdba75
     7d873b007d1151e3.553234ca911363f6.87b740ce3e249f73.30ef3dbee8221097
     bf72a4e69a79a6c5
 
-VPSIGND_128(reg)
+VPMOVZXWQ_128(reg)
   before
     2c318aa7ba8eb8ab.679cae3dbe8deadf.68693bd1467790ea.7906abd64199b2ab
     d476eb6de5eb82f4.23944d5314e0dcc3.c742ffe7f89e96ac.10134482091f00f5
@@ -40857,12 +40857,12 @@
     40c50fb8c9b32c60.8460ffbf6937baf5.d905aff0c1672048.9e96f177598b3d71
     4ca5fd971a8aa3fb
   after
-    0000000000000000.0000000000000000.38bd0019f89e96ac.10134482f6e0ff0b
-    d476eb6de5eb82f4.23944d5314e0dcc3.c742ffe7f89e96ac.10134482091f00f5
+    2c318aa7ba8eb8ab.679cae3dbe8deadf.68693bd1467790ea.7906abd64199b2ab
+    0000000000000000.0000000000000000.000000000000b2c1.000000000000457e
     118ec4a4b61e3f4c.8e3c94309814e3bb.ce077d784315b2e7.29a987beb2c1457e
     40c50fb8c9b32c60.8460ffbf6937baf5.d905aff0c1672048.9e96f177598b3d71
     4ca5fd971a8aa3fb
-VPSIGND_128(mem)
+VPMOVZXWQ_128(mem)
   before
     0fa1270c10c83448.bd67ca16bb3485dc.e1cc0beca0541f9a.438893bb10211b7b
     c357ebc05754ac83.e5bff028272f856c.814c32a35b78cbd9.6adb2446cccee02b
@@ -40871,12 +40871,12 @@
     deb3bf98a20142e5
   after
     0fa1270c10c83448.bd67ca16bb3485dc.e1cc0beca0541f9a.438893bb10211b7b
-    c357ebc05754ac83.e5bff028272f856c.814c32a35b78cbd9.6adb2446cccee02b
-    0000000000000000.0000000000000000.7eb3cd5da4873427.6adb2446cccee02b
+    0000000000000000.0000000000000000.0000000000001021.0000000000001b7b
+    4493c6a10c37c6d9.121b7e5caa306abb.40abf2d0b6ae7ddc.a94c5efb90faab04
     6e21339a4a7f4075.a1c56e1ddfc16d75.fab7c65fcc02efcf.5b253e48f932b8b4
     deb3bf98a20142e5
 
-VPSIGND_128(reg)
+VPMOVZXWQ_128(reg)
   before
     8c42dd5627f38643.1dccae972e38d484.ee0abed66371cd48.8b3a2b3dba81dfe0
     c31e94f02594c07b.2d62b384d36c3e32.553669f5d2c9c4dd.cf019b549b360638
@@ -40884,12 +40884,12 @@
     38ecbe65fb160428.df7b4cded27a8819.e172c112dda66a04.e08b91e1a773f074
     65e60e2f0b122aae
   after
-    0000000000000000.0000000000000000.553669f52d363b23.30fe64ac64c9f9c8
-    c31e94f02594c07b.2d62b384d36c3e32.553669f5d2c9c4dd.cf019b549b360638
+    8c42dd5627f38643.1dccae972e38d484.ee0abed66371cd48.8b3a2b3dba81dfe0
+    0000000000000000.0000000000000000.0000000000008b2d.0000000000002306
     dd93e0d138712b39.7aadbe4d56293caa.32956be5c6578fe3.a2d894928b2d2306
     38ecbe65fb160428.df7b4cded27a8819.e172c112dda66a04.e08b91e1a773f074
     65e60e2f0b122aae
-VPSIGND_128(mem)
+VPMOVZXWQ_128(mem)
   before
     0cb48867d1198de1.2e7728180a0d87f5.3a96d823646cdfaa.be1b66e8b34291ec
     b3c27a751891d439.1d7e1c5702e4f04c.66cade08270afc8a.25da56d3e3b83f48
@@ -40898,12 +40898,12 @@
     2d99c14caba9d0ca
   after
     0cb48867d1198de1.2e7728180a0d87f5.3a96d823646cdfaa.be1b66e8b34291ec
-    b3c27a751891d439.1d7e1c5702e4f04c.66cade08270afc8a.25da56d3e3b83f48
-    0000000000000000.0000000000000000.66cade08270afc8a.da25a92d1c47c0b8
+    0000000000000000.0000000000000000.000000000000b342.00000000000091ec
+    35dd6045fa89bce1.5f4e968c7e277ad8.3fe5da7a38609ce4.72fc8d400a93b1c4
     6ecfb6c3930a0106.513390241b606245.a1b24963b27b7be6.01cd0799c360230c
     2d99c14caba9d0ca
 
-VPSIGND_128(reg)
+VPMOVZXWQ_128(reg)
   before
     54acb5c35dfdf5ad.3964f8db00225fd4.5079088c741de441.67fca6b1b16655b9
     d151e16c75e5ce5f.746aa3795cdc9176.b66bf92f26ea3b75.6f906d4f522ee58c
@@ -40911,12 +40911,12 @@
     3c85cf0149a68be2.a6f520f8536764e8.2a8736d503e05b3c.b1c7292be9811adc
     a4001741162637b2
   after
-    0000000000000000.0000000000000000.499406d1d915c48b.906f92b1add11a74
-    d151e16c75e5ce5f.746aa3795cdc9176.b66bf92f26ea3b75.6f906d4f522ee58c
+    54acb5c35dfdf5ad.3964f8db00225fd4.5079088c741de441.67fca6b1b16655b9
+    0000000000000000.0000000000000000.000000000000b1dd.000000000000e889
     00d541b290ef968d.f9ac318ac4445419.e0575f78cc51a490.943b1a29b1dde889
     3c85cf0149a68be2.a6f520f8536764e8.2a8736d503e05b3c.b1c7292be9811adc
     a4001741162637b2
-VPSIGND_128(mem)
+VPMOVZXWQ_128(mem)
   before
     47b45f5755d7fa37.e3ab89c43d97e70b.5612ecb126507c10.f1487bb166239c26
     78ad7d59c1a02096.50946a6a084de6b4.e4cf0fa0580b59bc.8fe6287892a4a2f9
@@ -40925,12 +40925,12 @@
     11e58188e01eb0a4
   after
     47b45f5755d7fa37.e3ab89c43d97e70b.5612ecb126507c10.f1487bb166239c26
-    78ad7d59c1a02096.50946a6a084de6b4.e4cf0fa0580b59bc.8fe6287892a4a2f9
-    0000000000000000.0000000000000000.e4cf0fa0580b59bc.7019d78892a4a2f9
+    0000000000000000.0000000000000000.0000000000006623.0000000000009c26
+    11b9ed33778d65fc.de8b6e5c4454c688.2ef807b005a5b71a.61ad3b9622f1aa62
     f0a22bd292ab8495.ebde91079038c133.0e594fcf4a295253.c3e9b077b396f00c
     11e58188e01eb0a4
 
-VPMULHRSW_128(reg)
+VPMOVZXDQ_128(reg)
   before
     a7eeac33451525d6.ef35b4202f053a8c.d1d7d0d786861463.61bd63e843a4e595
     e1512ce67f078c4d.eb3e030b69a7430d.eec42539c2cafac2.04f2bfe70b202d0c
@@ -40938,12 +40938,12 @@
     b1501b10e00e1fbc.4be1e46426f53d60.39a5065f7e6073be.a6fa40477951cb48
     5d665d81581d9964
   after
-    0000000000000000.0000000000000000.0d57df050f0a0332.fe370faafa52f72a
-    e1512ce67f078c4d.eb3e030b69a7430d.eec42539c2cafac2.04f2bfe70b202d0c
+    a7eeac33451525d6.ef35b4202f053a8c.d1d7d0d786861463.61bd63e843a4e595
+    0000000000000000.0000000000000000.00000000d1c2e0b8.00000000beace6e4
     1b58fd0b298120b5.c189947d5d9e5b45.9cef8e97e08eb1fc.d1c2e0b8beace6e4
     b1501b10e00e1fbc.4be1e46426f53d60.39a5065f7e6073be.a6fa40477951cb48
     5d665d81581d9964
-VPMULHRSW_128(mem)
+VPMOVZXDQ_128(mem)
   before
     d3d2b350751b0c66.ff848260403ac30c.66136dabe1b9a68a.1f328afc35cc7cb4
     e40abca2ef58e078.61422f66e4924951.efecad3ea9f552ee.ace114d9a35c0a89
@@ -40952,12 +40952,12 @@
     cdb9b8314c6620ff
   after
     d3d2b350751b0c66.ff848260403ac30c.66136dabe1b9a68a.1f328afc35cc7cb4
-    e40abca2ef58e078.61422f66e4924951.efecad3ea9f552ee.ace114d9a35c0a89
-    0000000000000000.0000000000000000.f32eb918145ac60a.ebbeecf1d9100a44
+    0000000000000000.0000000000000000.000000001f328afc.0000000035cc7cb4
+    6dd9f661e0ded0c6.33d41d9068a1ec39.c0361f099bb5fdb8.3a00a264649e57ea
     480ddc7b64bc997d.d088484969f4e96d.b6be3ff8d2066216.26d92f08131da082
     cdb9b8314c6620ff
 
-VPMULHRSW_128(reg)
+VPMOVZXDQ_128(reg)
   before
     89ec374cac04150a.5270eadb98fbf7c9.96a8adfe82167c9c.ad4f8af76af23e32
     b7beaac3cf83b951.67cf9c6d97a9a5d5.e08146195093e170.81b77af380884c38
@@ -40965,12 +40965,12 @@
     d96e5979cb560043.22b0ddd76880e4df.6f8d093578cf10b8.30383e8e94dbf2b5
     c4e90a05cbb10083
   after
-    0000000000000000.0000000000000000.fd73095345daec0b.f1729257d0622c43
-    b7beaac3cf83b951.67cf9c6d97a9a5d5.e08146195093e170.81b77af380884c38
+    89ec374cac04150a.5270eadb98fbf7c9.96a8adfe82167c9c.ad4f8af76af23e32
+    0000000000000000.0000000000000000.000000000ec18dd6.000000002fd14a55
     b37b0c0350704980.63f66e1d7dd161ce.0a5e11076ef75395.0ec18dd62fd14a55
     d96e5979cb560043.22b0ddd76880e4df.6f8d093578cf10b8.30383e8e94dbf2b5
     c4e90a05cbb10083
-VPMULHRSW_128(mem)
+VPMOVZXDQ_128(mem)
   before
     a4a06b29ef6032ec.86e58d8fddc21b45.80cb648771c1ed35.6d582b0d0ca75185
     ac29dfe51cf3421b.142aa5b3213ed632.59117f19b6a036fc.5f0d71fdc30955a7
@@ -40979,12 +40979,12 @@
     8397fc8edded42c8
   after
     a4a06b29ef6032ec.86e58d8fddc21b45.80cb648771c1ed35.6d582b0d0ca75185
-    ac29dfe51cf3421b.142aa5b3213ed632.59117f19b6a036fc.5f0d71fdc30955a7
-    0000000000000000.0000000000000000.a77c63d2becbf7ed.51322657f9f9368d
+    0000000000000000.0000000000000000.000000006d582b0d.000000000ca75185
+    ba4fe1256f76ed3d.e08a9c5034586db7.8950ab79532a7d5f.a0f6d96f3b8356cb
     a9e0edd503f6ef7d.46516ed1b19c1b80.ec526294636a7b8b.8e605ed110a0919d
     8397fc8edded42c8
 
-VPMULHRSW_128(reg)
+VPMOVZXDQ_128(reg)
   before
     dde7af123ef5a4f8.55a680e1f57e0309.a2cb17a435951d39.5ee42254026cefab
     f69b74c9d044f5db.9a6f1435601ae60a.504394345bcfaf8d.bbd166a74d3d93ec
@@ -40992,12 +40992,12 @@
     d9632181f5e94e64.5f34346513c00922.1261f63cff3772b7.a5f16bb356795e80
     ebba24434bfdfc2a
   after
-    0000000000000000.0000000000000000.cb581b02d2b2f7bb.1119bb683a7ae134
-    f69b74c9d044f5db.9a6f1435601ae60a.504394345bcfaf8d.bbd166a74d3d93ec
+    dde7af123ef5a4f8.55a680e1f57e0309.a2cb17a435951d39.5ee42254026cefab
+    0000000000000000.0000000000000000.00000000dfe7aa78.0000000060e82479
     2c00461f2f676e1b.540527bd61d754af.ac07dfeec0d60d28.dfe7aa7860e82479
     d9632181f5e94e64.5f34346513c00922.1261f63cff3772b7.a5f16bb356795e80
     ebba24434bfdfc2a
-VPMULHRSW_128(mem)
+VPMOVZXDQ_128(mem)
   before
     8c0f50165c7fbba6.5a0e0159c156cf63.96cab81a92e1c08f.dd9ed48bb57d1be6
     64bc6e18a40b571e.0c4ee2142d3b2ec4.d7922dc7fb473623.6b0a76477d354361
@@ -41006,12 +41006,12 @@
     395fc5435c7b144d
   after
     8c0f50165c7fbba6.5a0e0159c156cf63.96cab81a92e1c08f.dd9ed48bb57d1be6
-    64bc6e18a40b571e.0c4ee2142d3b2ec4.d7922dc7fb473623.6b0a76477d354361
-    0000000000000000.0000000000000000.213be6490407e52b.e33fd7d8b71d0eb0
+    0000000000000000.0000000000000000.00000000dd9ed48b.00000000b57d1be6
+    4e8df73340ae8cbe.496ec11fd523a732.fd5711576afd260a.17f1d6ddf3e928d2
     284e69544b7315b3.6ebc99e4569a765a.e3e7dfb8fa0f4e6f.3d9ff2b8b42804e8
     395fc5435c7b144d
 
-VBROADCASTF128(reg)
+VMPSADBW_128_0x0(reg)
   before
     667f4bec867093ae.cdca3e67e266af29.d88266d14b2dd6e7.670c13d5c78a687f
     2249811ece92beb6.18cef4592094164b.e10e245151670486.64932a9aee793166
@@ -41019,12 +41019,12 @@
     b30ee9cd2b8f086e.149ff18603ce3946.43a365bafd01b9a9.38f6edccb9e4bf67
     c76a92119478fcd9
   after
-    667f4bec867093ae.cdca3e67e266af29.d88266d14b2dd6e7.670c13d5c78a687f
+    0000000000000000.0000000000000000.013f012d00dd0101.019b01630048011c
     2249811ece92beb6.18cef4592094164b.e10e245151670486.64932a9aee793166
     c80a6145d16ed112.e727071422080546.e6aad0d003d43be3.b5479ef38be8644f
     b30ee9cd2b8f086e.149ff18603ce3946.43a365bafd01b9a9.38f6edccb9e4bf67
     c76a92119478fcd9
-VBROADCASTF128(mem)
+VMPSADBW_128_0x0(mem)
   before
     407109ae39b1d7d2.41a1142276819f75.7d03309adff36e76.5445df7bdc79b885
     7dd5cf90c39a0e7d.cd0edfb051d0d1d3.fc1e3f3cd3826002.75db3a7f3cc87422
@@ -41034,11 +41034,11 @@
   after
     407109ae39b1d7d2.41a1142276819f75.7d03309adff36e76.5445df7bdc79b885
     7dd5cf90c39a0e7d.cd0edfb051d0d1d3.fc1e3f3cd3826002.75db3a7f3cc87422
-    5c635fa14f3f5b07.b2a344e45509db36.6fbe9a58fb88ca18.02b37233b87b2b2d
-    7d03309adff36e76.5445df7bdc79b885.7d03309adff36e76.5445df7bdc79b885
+    0000000000000000.0000000000000000.0139018c014c014d.00c2016700bb0196
+    b7e734cff8ac7b9c.4eaa412821b8f848.b0adbdda721069e2.57178401ed1d1752
     d0546b56753a753c
 
-VBROADCASTF128(reg)
+VMPSADBW_128_0x0(reg)
   before
     c9b6239fef5f8198.6b2dcd04dbee2967.fb70d1ea4e6765b5.9cb925ae5426f98c
     9e89a847f5177611.5500a32e13102395.1741f0947ba45e2a.10ac4cc0bed63543
@@ -41046,12 +41046,12 @@
     4cb20a6316720e0d.3681fa0ef425e6c9.0733cc553ef6e4db.fb7acc4f9936a487
     2bec1da341fe4f6c
   after
-    c9b6239fef5f8198.6b2dcd04dbee2967.fb70d1ea4e6765b5.9cb925ae5426f98c
+    0000000000000000.0000000000000000.012c01b401060256.00e401d200a3016c
     9e89a847f5177611.5500a32e13102395.1741f0947ba45e2a.10ac4cc0bed63543
     ab19f7b923ef9154.4f2e3438bd1f2352.fc699a9441fa1f53.e653b0fccc2dda33
     4cb20a6316720e0d.3681fa0ef425e6c9.0733cc553ef6e4db.fb7acc4f9936a487
     2bec1da341fe4f6c
-VBROADCASTF128(mem)
+VMPSADBW_128_0x0(mem)
   before
     53771ee6e190960d.dd9fdfb0692c28e7.e6c6739cd4312726.95ed81430e23e86f
     4de54a0394f83697.ba2d710cb9a91d8f.3cc91bce7a4ca396.00e1b5ca4c0d68ba
@@ -41061,11 +41061,11 @@
   after
     53771ee6e190960d.dd9fdfb0692c28e7.e6c6739cd4312726.95ed81430e23e86f
     4de54a0394f83697.ba2d710cb9a91d8f.3cc91bce7a4ca396.00e1b5ca4c0d68ba
-    f6031fe57742eb36.3ea8bde3a17627b0.12566c9002841645.a55c645694419f69
-    e6c6739cd4312726.95ed81430e23e86f.e6c6739cd4312726.95ed81430e23e86f
+    0000000000000000.0000000000000000.017f026200f8015a.01a6024c01c7011f
+    2a9d197aa57b7015.c75cbda2be1e82f7.4538e4cf87e43c5f.e1ab8b53834acb28
     0e17242db5b426a2
 
-VBROADCASTF128(reg)
+VMPSADBW_128_0x0(reg)
   before
     89ef2d51c50cec84.c57fb2ad3bae8361.b0956fb3ab2e6c10.b13dfe752579d00f
     ae7ea2294fdd5b7a.a375686a54e8dd45.559fce8305311fa6.322f3670f94e8f81
@@ -41073,12 +41073,12 @@
     66efbca9431b1f4f.98cc1833819e5d88.425584116e40d2fb.e30df111b1e97d5e
     cb916c90cec72521
   after
-    89ef2d51c50cec84.c57fb2ad3bae8361.b0956fb3ab2e6c10.b13dfe752579d00f
+    0000000000000000.0000000000000000.018400ee017700c7.009c0171014801b7
     ae7ea2294fdd5b7a.a375686a54e8dd45.559fce8305311fa6.322f3670f94e8f81
     d90f7d23f0b4ad2f.a04bb69d0c343dee.11c5d77f67b3d865.a4db08aa1e6f35e2
     66efbca9431b1f4f.98cc1833819e5d88.425584116e40d2fb.e30df111b1e97d5e
     cb916c90cec72521
-VBROADCASTF128(mem)
+VMPSADBW_128_0x0(mem)
   before
     3833f5138f15e756.b16a5929e5a0ed87.67c50a16cc33fb3e.4299d3a7b5654b12
     06be088613df7f29.17cc520e71cf5283.e90209330bfed03d.6fdebfacd8ae7d56
@@ -41088,11 +41088,11 @@
   after
     3833f5138f15e756.b16a5929e5a0ed87.67c50a16cc33fb3e.4299d3a7b5654b12
     06be088613df7f29.17cc520e71cf5283.e90209330bfed03d.6fdebfacd8ae7d56
-    11ff21d57332abc7.f261a3c484328bef.fa4f90775a0b9bb0.2470448c74a5a474
-    67c50a16cc33fb3e.4299d3a7b5654b12.67c50a16cc33fb3e.4299d3a7b5654b12
+    0000000000000000.0000000000000000.011f013301c201cd.01aa017a014a00e2
+    35c3bdecce1a255c.9f7546b7b958d476.76781bcdd46716c4.bc9a5eb325d8fe18
     94aa0a8d86d2c5ed
 
-VPEXTRW_128_0x0(reg)
+VMPSADBW_128_0x1(reg)
   before
     09ea4386332036a0.4dd457b73da1aa13.79533953adca68c4.39492620951dfea5
     75a7050ac94d8cdd.37ff6b23ded5f519.de487704fb168486.1e8d2e5eba390f7e
@@ -41100,12 +41100,12 @@
     a6c814641e75dba2.eed2f28a2572d0c1.b6a8c45617694415.c3a221489ed59aca
     3a0a05cc956c8d95
   after
-    09ea4386332036a0.4dd457b73da1aa13.79533953adca68c4.39492620951dfea5
+    0000000000000000.0000000000000000.010101a000f4012a.013e00be01db0189
     75a7050ac94d8cdd.37ff6b23ded5f519.de487704fb168486.1e8d2e5eba390f7e
     362e4c86e3e5054f.ce0f751acdc2c39a.29a1fc3640c76468.0311ad725ec8047c
     a6c814641e75dba2.eed2f28a2572d0c1.b6a8c45617694415.c3a221489ed59aca
-    000000000000fea5
-VPEXTRW_128_0x0(mem)
+    3a0a05cc956c8d95
+VMPSADBW_128_0x1(mem)
   before
     4315d6ea609a9908.22c45a1215884a83.72125c5d03f3d8bb.e1a9ccce1c895f3a
     bc910e8f1a6a7950.076d19fa65aa909e.389d3181825196b3.06f20f0cecb2f383
@@ -41113,13 +41113,13 @@
     6a08a819cd21a80e.77f5f22d7e4d8c31.f6bf0a69d4d1274f.ad8836865c51702f
     e86d129b33ded2ea
   after
-    4315d6ea609a9908.22c45a1215884a83.72125c5d03f3d8bb.e1a9ccce1c89399b
+    4315d6ea609a9908.22c45a1215884a83.72125c5d03f3d8bb.e1a9ccce1c895f3a
     bc910e8f1a6a7950.076d19fa65aa909e.389d3181825196b3.06f20f0cecb2f383
-    80492ba5e0e8ea99.af0e4d8aa968e79f.1b3dece1be97c7d6.80ce897b2371399b
+    0000000000000000.0000000000000000.0184013f01b602a3.018901ab01570086
     6a08a819cd21a80e.77f5f22d7e4d8c31.f6bf0a69d4d1274f.ad8836865c51702f
     e86d129b33ded2ea
 
-VPEXTRW_128_0x0(reg)
+VMPSADBW_128_0x1(reg)
   before
     8dc91a2545a59c79.589b01d8fe206edc.bb6c054f7fe5ba00.a7ee0605df0b724c
     f7e849902d300a88.24ceb3cd8ef2f92f.d7c0815c49bdafba.08985ba1fc5263f6
@@ -41127,12 +41127,12 @@
     8e9f0cbaf2c8c0d3.ca440e083d3b4e12.082ea4e7a55bd999.4e890689da342a07
     eb6852aed4e877c6
   after
-    8dc91a2545a59c79.589b01d8fe206edc.bb6c054f7fe5ba00.a7ee0605df0b724c
+    0000000000000000.0000000000000000.00b50168010001a3.017901530139012c
     f7e849902d300a88.24ceb3cd8ef2f92f.d7c0815c49bdafba.08985ba1fc5263f6
     84169b48880e57c2.ac6d39e39aa10532.283c62c07760a508.f788872947b1b77c
     8e9f0cbaf2c8c0d3.ca440e083d3b4e12.082ea4e7a55bd999.4e890689da342a07
-    000000000000724c
-VPEXTRW_128_0x0(mem)
+    eb6852aed4e877c6
+VMPSADBW_128_0x1(mem)
   before
     a8f1e9824ed85be3.73ce995005ec8169.5c1fb12793cc8ffa.d4e1433d70388617
     63f046f36711928b.8df03c776005d62e.3cc99b2cb95f8517.e8a03c2f7485e92e
@@ -41140,13 +41140,13 @@
     3e7f4258e08be82a.d43dba2a57482af6.5abd3899e4bb7f9e.58752993949ec1da
     6c2315dee981adc7
   after
-    a8f1e9824ed85be3.73ce995005ec8169.5c1fb12793cc8ffa.d4e1433d70383e8c
+    a8f1e9824ed85be3.73ce995005ec8169.5c1fb12793cc8ffa.d4e1433d70388617
     63f046f36711928b.8df03c776005d62e.3cc99b2cb95f8517.e8a03c2f7485e92e
-    f631e5eb389ed8e9.3a51f39c9ca0face.470f4903cb00ec94.a0b88a274cce3e8c
+    0000000000000000.0000000000000000.01a802210122006a.012401c302000171
     3e7f4258e08be82a.d43dba2a57482af6.5abd3899e4bb7f9e.58752993949ec1da
     6c2315dee981adc7
 
-VPEXTRW_128_0x0(reg)
+VMPSADBW_128_0x1(reg)
   before
     370e4b73e7033ffd.17a8da2578e47f79.b9008b8c2d89a252.4f9fe3d8209dfb61
     1781c5c028b1b328.5e76283e1eb65903.43e66430b9f09d8d.0381c6ad9cb11c08
@@ -41154,12 +41154,12 @@
     83337b2feabf3010.a134d60403f3c577.ba4a1beb655d0f52.197425cac2a13cb4
     321e99eaa494b311
   after
-    370e4b73e7033ffd.17a8da2578e47f79.b9008b8c2d89a252.4f9fe3d8209dfb61
+    0000000000000000.0000000000000000.013d0180014b01b1.01ac01dc01320111
     1781c5c028b1b328.5e76283e1eb65903.43e66430b9f09d8d.0381c6ad9cb11c08
     67ca81304b1645f5.edb6a88fee0c32f4.d03a408198085854.522f5e0573049ec0
     83337b2feabf3010.a134d60403f3c577.ba4a1beb655d0f52.197425cac2a13cb4
-    000000000000fb61
-VPEXTRW_128_0x0(mem)
+    321e99eaa494b311
+VMPSADBW_128_0x1(mem)
   before
     7af7355036eabf03.c709ad29a136b125.56bc2e8a7976cfb9.5e60f1dabc7cfe34
     cdcc76e893ad1bb5.8f98158a0d0a04df.e8192d0b6da10be5.18c9beba3af060a6
@@ -41167,13 +41167,13 @@
     0499d35e20b0b60b.1a11733271f20ef3.14860db23e200dae.3fc32ffe1a0870e8
     63edca39b3c49611
   after
-    7af7355036eabf03.c709ad29a136b125.56bc2e8a7976cfb9.5e60f1dabc7c7253
+    7af7355036eabf03.c709ad29a136b125.56bc2e8a7976cfb9.5e60f1dabc7cfe34
     cdcc76e893ad1bb5.8f98158a0d0a04df.e8192d0b6da10be5.18c9beba3af060a6
-    0769d69ed8ec8554.362cadbfc9c464ea.34194e74fb803728.45d17ff77b457253
+    0000000000000000.0000000000000000.016601c201130102.01a0018700fd0179
     0499d35e20b0b60b.1a11733271f20ef3.14860db23e200dae.3fc32ffe1a0870e8
     63edca39b3c49611
 
-VPEXTRW_128_0x1(reg)
+VMPSADBW_128_0x2(reg)
   before
     0d994d16e3051f79.a02ae81488076d07.96926351a21f3ea6.652de7af528d49a2
     9915b200455848cc.b7e691ac2bfc6474.05fc7786f8d82fae.03da565954d1a931
@@ -41181,12 +41181,12 @@
     c7a817aa116269e6.c613903393f2054f.30bc00e7811b4870.9676e8619013c0ce
     42fc02970229f035
   after
-    0d994d16e3051f79.a02ae81488076d07.96926351a21f3ea6.652de7af528d49a2
+    0000000000000000.0000000000000000.02870065026200d3.01bc00e501600180
     9915b200455848cc.b7e691ac2bfc6474.05fc7786f8d82fae.03da565954d1a931
     63abf76276484cb7.259b4a13259c597d.c59cad3f0ea81fb8.ca59d89b5ffae786
     c7a817aa116269e6.c613903393f2054f.30bc00e7811b4870.9676e8619013c0ce
-    000000000000528d
-VPEXTRW_128_0x1(mem)
+    42fc02970229f035
+VMPSADBW_128_0x2(mem)
   before
     acb8a329d24732e6.21570e43b330d905.761bdefa910a2715.a4a86ceaecbee681
     af7745031b79430e.cd06d999f741d9bf.117fb0523af179fc.7baeedb4eb1c3797
@@ -41194,13 +41194,13 @@
     f02981408a4bc271.8b90d72cd75577b5.778ad16afe59a0dc.c634204d1739dd86
     f24cc9f47c11aab5
   after
-    acb8a329d24732e6.21570e43b330d905.761bdefa910a2715.a4a86ceaecbe1bc1
+    acb8a329d24732e6.21570e43b330d905.761bdefa910a2715.a4a86ceaecbee681
     af7745031b79430e.cd06d999f741d9bf.117fb0523af179fc.7baeedb4eb1c3797
-    27036611faccdfd8.27ff72187a1ea4c0.730a8229aab2b830.131980b11bc17560
+    0000000000000000.0000000000000000.020a01f7023b021f.026301d1013100fe
     f02981408a4bc271.8b90d72cd75577b5.778ad16afe59a0dc.c634204d1739dd86
     f24cc9f47c11aab5
 
-VPEXTRW_128_0x1(reg)
+VMPSADBW_128_0x2(reg)
   before
     f1ad7713e6d51a9a.e6b4127ae802a705.55030442ab718e4a.fbc9170151f3ec2d
     20a32614ef0f67e1.e47296ad2ffe4bbf.e1a5f3c491fe252a.da94d2dac08b594e
@@ -41208,12 +41208,12 @@
     7f7e7970551b8a43.6db364aae9f3bf57.afa50bc0049dc17e.18fe950260e686b3
     30359429cac1bd4e
   after
-    f1ad7713e6d51a9a.e6b4127ae802a705.55030442ab718e4a.fbc9170151f3ec2d
+    0000000000000000.0000000000000000.02620154014301f3.01d901d001570107
     20a32614ef0f67e1.e47296ad2ffe4bbf.e1a5f3c491fe252a.da94d2dac08b594e
     dc7ad365364dce35.c82d88c37b4a69cb.8bc2a12025897702.f0b77de1672da36c
     7f7e7970551b8a43.6db364aae9f3bf57.afa50bc0049dc17e.18fe950260e686b3
-    00000000000051f3
-VPEXTRW_128_0x1(mem)
+    30359429cac1bd4e
+VMPSADBW_128_0x2(mem)
   before
     1327f843beca0569.66fa14a3e803d8b6.aecea64d9503078d.a89c2c12cac73f49
     9ca23c3a5a0e1932.ed3ba0698b93f43b.694bca989a88fe99.d4f1008112922d10
@@ -41221,13 +41221,13 @@
     145e5573f9759978.4c3c7d5e74d9852a.b99aaad6201fe8e6.31e9b365993b4740
     1b2288b41032ec02
   after
-    1327f843beca0569.66fa14a3e803d8b6.aecea64d9503078d.a89c2c12cac7788a
+    1327f843beca0569.66fa14a3e803d8b6.aecea64d9503078d.a89c2c12cac73f49
     9ca23c3a5a0e1932.ed3ba0698b93f43b.694bca989a88fe99.d4f1008112922d10
-    a970dcfcba98b7d3.718d1a2edc571a7e.78f54d77148e5fa8.8ef28479788ac67e
+    0000000000000000.0000000000000000.01e10230024c0140.01540123010e01b5
     145e5573f9759978.4c3c7d5e74d9852a.b99aaad6201fe8e6.31e9b365993b4740
     1b2288b41032ec02
 
-VPEXTRW_128_0x1(reg)
+VMPSADBW_128_0x2(reg)
   before
     a7eb02cf7afbf06f.bb38218d34b07c4e.db94c565f1a872ec.06055da1d94a537e
     308f1a2373209033.78c9be3586551b81.7ae1eeafef4d1d6f.3d01e2c45c185c9d
@@ -41235,12 +41235,12 @@
     ad9618277fb39474.a84559dfe00e81ac.5889d4bddb4e9c6b.d5df53c32ed23c1f
     ee593777b5d58ad9
   after
-    a7eb02cf7afbf06f.bb38218d34b07c4e.db94c565f1a872ec.06055da1d94a537e
+    0000000000000000.0000000000000000.00f2011001c1010e.009b01f4016e0133
     308f1a2373209033.78c9be3586551b81.7ae1eeafef4d1d6f.3d01e2c45c185c9d
     1459cd1c952f08fc.29dfa7570b70343c.856ef4a80956c160.385bb62cc497c16f
     ad9618277fb39474.a84559dfe00e81ac.5889d4bddb4e9c6b.d5df53c32ed23c1f
-    000000000000d94a
-VPEXTRW_128_0x1(mem)
+    ee593777b5d58ad9
+VMPSADBW_128_0x2(mem)
   before
     6095dd3376ad66cb.5993f6aeca396f47.d2c64eb9213abffc.4f7c895802c1e83b
     085ec2e28c658e1e.729a631f144cd622.842f04d1e901a959.c6940fe71a3ce17d
@@ -41248,13 +41248,13 @@
     65cb35ce29a7ad9e.5ff8db6b144a379f.ebe9a06c7f8d74e9.a4637f8d8a78ce05
     c3b1617d1b5038a4
   after
-    6095dd3376ad66cb.5993f6aeca396f47.d2c64eb9213abffc.4f7c895802c1be4a
+    6095dd3376ad66cb.5993f6aeca396f47.d2c64eb9213abffc.4f7c895802c1e83b
     085ec2e28c658e1e.729a631f144cd622.842f04d1e901a959.c6940fe71a3ce17d
-    c0826072140abc01.56f75ce5f97805b1.984cf614546dfcef.191d62d4be4ac5dc
+    0000000000000000.0000000000000000.012b011601dc01c4.01a80224018400aa
     65cb35ce29a7ad9e.5ff8db6b144a379f.ebe9a06c7f8d74e9.a4637f8d8a78ce05
     c3b1617d1b5038a4
 
-VPEXTRW_128_0x2(reg)
+VMPSADBW_128_0x3(reg)
   before
     d15504100c614164.d406bce2e8481c22.eae8de1f024da999.5ad17fc6856acd74
     2c9964b2fa3423f2.e7ff719a6cf9c6b8.5412606c5e0d974a.bfd20d0f8312c2bc
@@ -41262,12 +41262,12 @@
     36344cd33b556526.6c5a57a734bebbcc.3047d282d1f6d684.de4a2b1bd5f17330
     505ab2b56140a6b5
   after
-    d15504100c614164.d406bce2e8481c22.eae8de1f024da999.5ad17fc6856acd74
+    0000000000000000.0000000000000000.012b014e01d60147.0165026f0178018b
     2c9964b2fa3423f2.e7ff719a6cf9c6b8.5412606c5e0d974a.bfd20d0f8312c2bc
     2fca7dcf80571bf9.7b82d1e3d1c7678d.f7c35ebec4173d5f.f7b6c832949010ec
     36344cd33b556526.6c5a57a734bebbcc.3047d282d1f6d684.de4a2b1bd5f17330
-    0000000000007fc6
-VPEXTRW_128_0x2(mem)
+    505ab2b56140a6b5
+VMPSADBW_128_0x3(mem)
   before
     29b2daee558966a7.9d23cc2bc6bb3c24.96557ed3b1e87da2.5beaba2221369f64
     451e1eb1ccd86f32.bfe2f941be13dda1.d53dc55462536a3b.d5f8110b4f64d4ac
@@ -41275,13 +41275,13 @@
     b661ea86b5bb4bc0.a8044a5b62cf6dc2.02079b01d71ab464.2184fc69b6b77023
     ac9a89b627f550a9
   after
-    29b2daee558966a7.9d23cc2bc6bb3c24.96557ed3b1e87da2.5beaba222136d3aa
+    29b2daee558966a7.9d23cc2bc6bb3c24.96557ed3b1e87da2.5beaba2221369f64
     451e1eb1ccd86f32.bfe2f941be13dda1.d53dc55462536a3b.d5f8110b4f64d4ac
-    806afaebe33a7d81.fabfcf83beec8446.05dfa514660a3ec2.f8bcd3aaf70bb008
+    0000000000000000.0000000000000000.009d00c202170217.019d016d00ac00d3
     b661ea86b5bb4bc0.a8044a5b62cf6dc2.02079b01d71ab464.2184fc69b6b77023
     ac9a89b627f550a9
 
-VPEXTRW_128_0x2(reg)
+VMPSADBW_128_0x3(reg)
   before
     f54b75fce7508c47.c3d06a6f5e65961c.27fe6737484ad3bf.a8812406d18e8a4c
     58e3bca691555fa9.8383f793fb461ac1.d2f9218209e8f3e9.d319bb0f71727aa7
@@ -41289,12 +41289,12 @@
     dcf74bdb1589bd68.8ce5253880dbbc95.1b225c1592bf5077.28d104dd11bc9a65
     0a8bae7a4939421f
   after
-    f54b75fce7508c47.c3d06a6f5e65961c.27fe6737484ad3bf.a8812406d18e8a4c
+    0000000000000000.0000000000000000.0236028501e501d7.012b0122006b00a5
     58e3bca691555fa9.8383f793fb461ac1.d2f9218209e8f3e9.d319bb0f71727aa7
     31ae5a22c28e067b.d2460cdca86993db.044174a8433609ed.5f9adc08d2d340a1
     dcf74bdb1589bd68.8ce5253880dbbc95.1b225c1592bf5077.28d104dd11bc9a65
-    0000000000002406
-VPEXTRW_128_0x2(mem)
+    0a8bae7a4939421f
+VMPSADBW_128_0x3(mem)
   before
     e19255cb9757f4fd.b50c8c3e27d2c01c.8d2cbe919fa7521b.71e7d635900f0532
     88b378bd16216e29.183718b593f44a44.b1e653d522d9119a.64dedd74dcb364cb
@@ -41302,13 +41302,13 @@
     bb721a3018eaa51c.ec020192ebf3e69f.d1e763cbc2a1f832.8c8d82ffc8240f46
     7bde1924a10ad37f
   after
-    e19255cb9757f4fd.b50c8c3e27d2c01c.8d2cbe919fa7521b.71e7d635900f6d3e
+    e19255cb9757f4fd.b50c8c3e27d2c01c.8d2cbe919fa7521b.71e7d635900f0532
     88b378bd16216e29.183718b593f44a44.b1e653d522d9119a.64dedd74dcb364cb
-    ddb9903ae2a36acf.61c5ebadf67b988c.d3e061ef257eb43e.4e516d3e1036a9ed
+    0000000000000000.0000000000000000.00b8019100b10117.019700d80101016a
     bb721a3018eaa51c.ec020192ebf3e69f.d1e763cbc2a1f832.8c8d82ffc8240f46
     7bde1924a10ad37f
 
-VPEXTRW_128_0x2(reg)
+VMPSADBW_128_0x3(reg)
   before
     75902c1736733146.fda89389d401db3c.153a57d10ee96f2a.86c5d555184e99a3
     d7eeb94624eb6447.8129763331f4c75a.37b9e8d5fce870d9.cd46347a409253bd
@@ -41316,12 +41316,12 @@
     44e22f05793a3ca6.bb376b273fa0b443.dbbbabdba833c951.8666a5407c0d009a
     ae9bb0bbc85b6bb5
   after
-    75902c1736733146.fda89389d401db3c.153a57d10ee96f2a.86c5d555184e99a3
+    0000000000000000.0000000000000000.017f00a900c1018e.016d01c5012801b9
     d7eeb94624eb6447.8129763331f4c75a.37b9e8d5fce870d9.cd46347a409253bd
     fd46bb1c06ffa92e.22bf3f194bd026a3.b0cab009517d2557.8438fa245978e1ab
     44e22f05793a3ca6.bb376b273fa0b443.dbbbabdba833c951.8666a5407c0d009a
-    000000000000d555
-VPEXTRW_128_0x2(mem)
+    ae9bb0bbc85b6bb5
+VMPSADBW_128_0x3(mem)
   before
     daa4977f5670e029.060f0f6c1828595b.2a5c744929702d65.14d6d5b69d969a72
     e44dd77a44581921.a01959bf80563bfb.49fcd86b244d4c36.b6682b06cd32d267
@@ -41329,13 +41329,13 @@
     06af4ec1afcec950.ccf418d7189f41a6.0bd99e60be5c6f93.a92048b54c47697c
     b2df07ecd3d840f3
   after
-    daa4977f5670e029.060f0f6c1828595b.2a5c744929702d65.14d6d5b69d96a837
+    daa4977f5670e029.060f0f6c1828595b.2a5c744929702d65.14d6d5b69d969a72
     e44dd77a44581921.a01959bf80563bfb.49fcd86b244d4c36.b6682b06cd32d267
-    aa62ea97ae1ed3ca.6e4c086a4c4f1f2f.f6e212794c42cee1.1fbda837d394addc
+    0000000000000000.0000000000000000.00de00a900900124.016100c701600149
     06af4ec1afcec950.ccf418d7189f41a6.0bd99e60be5c6f93.a92048b54c47697c
     b2df07ecd3d840f3
 
-VPEXTRW_128_0x3(reg)
+VMPSADBW_128_0x4(reg)
   before
     9544e24905d26fef.d6007ee66474b9de.165c867381d3dd0a.66aef90a95a5ea77
     ad9dd4367dc1311a.f420f7f1e81d5da1.a8d24caa23762e07.e12d9e64ee2cfcba
@@ -41343,12 +41343,12 @@
     f056ed74b1b062ae.8e00b06acea6b375.1413d59b7f3ae17f.ab59b6da941dd50c
     b19d21cc19a01373
   after
-    9544e24905d26fef.d6007ee66474b9de.165c867381d3dd0a.66aef90a95a5ea77
+    0000000000000000.0000000000000000.016e0138018001f9.01ed028401400131
     ad9dd4367dc1311a.f420f7f1e81d5da1.a8d24caa23762e07.e12d9e64ee2cfcba
     5834d921d832c420.3ddc33cf57d472c5.dea068e99915714b.5a22095be4fa6188
     f056ed74b1b062ae.8e00b06acea6b375.1413d59b7f3ae17f.ab59b6da941dd50c
-    00000000000066ae
-VPEXTRW_128_0x3(mem)
+    b19d21cc19a01373
+VMPSADBW_128_0x4(mem)
   before
     49bcc71f9090d8e9.d24f0c9da5c74770.c158e9af689ddddd.a6778f2b7274bc52
     4d8022be14f7e099.5b6a33074f04b111.b3b05a8b42c8ac2b.f01793070d4c3c6e
@@ -41356,13 +41356,13 @@
     0c2aed90b460a859.cd3a864e371dffa2.458fd5b424e32823.1c3f6650ae0b1d32
     b65f2d95ea09f633
   after
-    49bcc71f9090d8e9.d24f0c9da5c74770.c158e9af689ddddd.a6778f2b72744e41
+    49bcc71f9090d8e9.d24f0c9da5c74770.c158e9af689ddddd.a6778f2b7274bc52
     4d8022be14f7e099.5b6a33074f04b111.b3b05a8b42c8ac2b.f01793070d4c3c6e
-    9ab6b195c1e4e6af.e5f55d1e4cf2da3e.41d47fe87830dc88.4e41dc9aed509e7f
+    0000000000000000.0000000000000000.0099011f00b100bb.01bd00f201a9014f
     0c2aed90b460a859.cd3a864e371dffa2.458fd5b424e32823.1c3f6650ae0b1d32
     b65f2d95ea09f633
 
-VPEXTRW_128_0x3(reg)
+VMPSADBW_128_0x4(reg)
   before
     77eb2dd540d7652d.7fa8539c0979e0c0.7086aa03ac125bea.9cafd7d965ec4d26
     bd30637c4900a6cd.d0fb60a3db3a4a13.2825c6a9485c2cc2.22fe0145545807bd
@@ -41370,12 +41370,12 @@
     45145eb0ea958dae.77545c5667e6a827.4a8cd279642018d0.2b5cbe9fb286285a
     66034965586108b8
   after
-    77eb2dd540d7652d.7fa8539c0979e0c0.7086aa03ac125bea.9cafd7d965ec4d26
+    0000000000000000.0000000000000000.017301aa01100129.010f01a501c4011d
     bd30637c4900a6cd.d0fb60a3db3a4a13.2825c6a9485c2cc2.22fe0145545807bd
     e379caf6a411f4bf.d9f18f9246b0a47c.5263d4aca787acd5.b349cfe310321116
     45145eb0ea958dae.77545c5667e6a827.4a8cd279642018d0.2b5cbe9fb286285a
-    0000000000009caf
-VPEXTRW_128_0x3(mem)
+    66034965586108b8
+VMPSADBW_128_0x4(mem)
   before
     4009ec211ecd6d5a.3e4c1b14b918aa47.86f143da59e81242.6debbb7a1bb2ab5e
     953c23bf1fd9126c.2c6cfd90ad278a35.e294c10939c3a0f6.15ce8c1d69c9a22d
@@ -41383,13 +41383,13 @@
     20543e5244fa0f93.5397227c72167ec3.f11c6f1d313113e0.674bd2f538b8ac37
     c97e4003f1a736cc
   after
-    4009ec211ecd6d5a.3e4c1b14b918aa47.86f143da59e81242.6debbb7a1bb29f7f
+    4009ec211ecd6d5a.3e4c1b14b918aa47.86f143da59e81242.6debbb7a1bb2ab5e
     953c23bf1fd9126c.2c6cfd90ad278a35.e294c10939c3a0f6.15ce8c1d69c9a22d
-    41666a2c788eb41c.69c1018f614d6725.670951d123810c72.9f7f3fcce9f239e6
+    0000000000000000.0000000000000000.014f022600e500d2.014e01cf01c90082
     20543e5244fa0f93.5397227c72167ec3.f11c6f1d313113e0.674bd2f538b8ac37
     c97e4003f1a736cc
 
-VPEXTRW_128_0x3(reg)
+VMPSADBW_128_0x4(reg)
   before
     21648662b14c1450.0ed21a1f9f29df00.443a5cc57b0e0bba.5c9897d982dc716c
     cb499e7e13328270.e7ac7a7da625df8d.9af6acd518c249b6.834a45f12f90e143
@@ -41397,12 +41397,12 @@
     853e399d2ff3fd33.caa3b6a126ba62b8.e1e87afb808ccb70.7a8125e51341ea82
     019d4e9a8156fb40
   after
-    21648662b14c1450.0ed21a1f9f29df00.443a5cc57b0e0bba.5c9897d982dc716c
+    0000000000000000.0000000000000000.0220010a01a900f6.011f011500ff00c0
     cb499e7e13328270.e7ac7a7da625df8d.9af6acd518c249b6.834a45f12f90e143
     237886c3b4e6bbd8.87adda5a74fccc66.af160c18e6be7665.44fff65157592091
     853e399d2ff3fd33.caa3b6a126ba62b8.e1e87afb808ccb70.7a8125e51341ea82
-    0000000000005c98
-VPEXTRW_128_0x3(mem)
+    019d4e9a8156fb40
+VMPSADBW_128_0x4(mem)
   before
     b51eed5abda40efa.4de7b37821e5822e.8b588b3ed8695caf.8ab6f1e883ba8786
     71d27f13e235e0da.d7bff0c125488674.a899d41da5177777.08cd6d4c8bd4e451
@@ -41410,13 +41410,13 @@
     76ff681c5956b0be.a02ca449d493ff94.62efb251019e0027.ee06652a17f874b8
     10bfd97cd31b1fac
   after
-    b51eed5abda40efa.4de7b37821e5822e.8b588b3ed8695caf.8ab6f1e883bab579
+    b51eed5abda40efa.4de7b37821e5822e.8b588b3ed8695caf.8ab6f1e883ba8786
     71d27f13e235e0da.d7bff0c125488674.a899d41da5177777.08cd6d4c8bd4e451
-    13837eaf0d172c0d.7e12ede2d7a947b2.fc320d2aa9d06f3a.b579eb9432641f7e
+    0000000000000000.0000000000000000.00b9017b00fa00e4.013d0115011d00e2
     76ff681c5956b0be.a02ca449d493ff94.62efb251019e0027.ee06652a17f874b8
     10bfd97cd31b1fac
 
-VPEXTRW_128_0x4(reg)
+VMPSADBW_128_0x5(reg)
   before
     75f242f5055a5b05.7510b945e2fd261a.98581361b893ebc5.b89c407ec88fe568
     7ae99d0046406570.ee83eb16c5184b4d.c2e436951e3446f2.d904329e1bafdb2a
@@ -41424,12 +41424,12 @@
     d45615816b32d22b.babee66007db91e5.1b478406e1893cee.eb393263d2a9e9df
     949d38e0709b792a
   after
-    75f242f5055a5b05.7510b945e2fd261a.98581361b893ebc5.b89c407ec88fe568
+    0000000000000000.0000000000000000.0211014b016701dc.024701c900d7015b
     7ae99d0046406570.ee83eb16c5184b4d.c2e436951e3446f2.d904329e1bafdb2a
     7bf1e40b345a7899.bb237c7b1db3da82.791a0753a2024dc6.a0f5049b15099d98
     d45615816b32d22b.babee66007db91e5.1b478406e1893cee.eb393263d2a9e9df
-    000000000000ebc5
-VPEXTRW_128_0x4(mem)
+    949d38e0709b792a
+VMPSADBW_128_0x5(mem)
   before
     79ed930008ec0aa7.e1642bce8656add3.c61fa8b19f9b2aa4.03b7a81a76564f15
     74f5beaeb8a7577f.ff66225f2252453c.ba113b5bffff61e9.8cb66ffbfef4c2e9
@@ -41437,13 +41437,13 @@
     205c7464cf8c19f6.d97aa4f84affa004.cedbc8658ee59db6.f590d7d555d5b542
     8d036fa55c2faf1f
   after
-    79ed930008ec0aa7.e1642bce8656add3.c61fa8b19f9b2aa4.03b7a81a7656f4e0
+    79ed930008ec0aa7.e1642bce8656add3.c61fa8b19f9b2aa4.03b7a81a76564f15
     74f5beaeb8a7577f.ff66225f2252453c.ba113b5bffff61e9.8cb66ffbfef4c2e9
-    638035d69cd81ee1.88aaf79edab1d813.73611c484614f4e0.148fd51614f0d013
+    0000000000000000.0000000000000000.01bc01d0013e025a.02050148017401a4
     205c7464cf8c19f6.d97aa4f84affa004.cedbc8658ee59db6.f590d7d555d5b542
     8d036fa55c2faf1f
 
-VPEXTRW_128_0x4(reg)
+VMPSADBW_128_0x5(reg)
   before
     36359bf3c68bf859.8853f8446dce05ed.4e2327da0fc8daba.a54bba9ff37f1997
     4e72572a2e74cd9a.78323c6293ab9df0.43f27baec599c2e2.d67d6ee191ed23ae
@@ -41451,12 +41451,12 @@
     373d6b026a1e0be3.5bd8f409e563c4cc.1c2c87e171808a36.b1560d2ceb75d530
     1495f00edea8f4f3
   after
-    36359bf3c68bf859.8853f8446dce05ed.4e2327da0fc8daba.a54bba9ff37f1997
+    0000000000000000.0000000000000000.01f2019901e00214.0225020901b501b4
     4e72572a2e74cd9a.78323c6293ab9df0.43f27baec599c2e2.d67d6ee191ed23ae
     2f069db531766a8f.cac5bcab5c2e9e2c.13309de207fd9327.3b3c6017863b7928
     373d6b026a1e0be3.5bd8f409e563c4cc.1c2c87e171808a36.b1560d2ceb75d530
-    000000000000daba
-VPEXTRW_128_0x4(mem)
+    1495f00edea8f4f3
+VMPSADBW_128_0x5(mem)
   before
     41c685a87bdf919d.c062bb7c76f7eb43.0836606a4a56cbfd.b9313717a0afe3bb
     12b548e7dd276959.27c28b8ff08d475a.abad7db8a5146eea.468aa8f02f15d961
@@ -41464,13 +41464,13 @@
     13fc49ff6117bab9.006499309f226260.4611b7d0b31f7bab.a06bbd3bdfb890c2
     248b5a85380cc7d5
   after
-    41c685a87bdf919d.c062bb7c76f7eb43.0836606a4a56cbfd.b9313717a0af6ac0
+    41c685a87bdf919d.c062bb7c76f7eb43.0836606a4a56cbfd.b9313717a0afe3bb
     12b548e7dd276959.27c28b8ff08d475a.abad7db8a5146eea.468aa8f02f15d961
-    642eb6b5208b3854.c9aad7a7746d5ad5.2107c6e115a86ac0.1f84d6d8bb3faad5
+    0000000000000000.0000000000000000.0167013400ef013b.01c40186012a0216
     13fc49ff6117bab9.006499309f226260.4611b7d0b31f7bab.a06bbd3bdfb890c2
     248b5a85380cc7d5
 
-VPEXTRW_128_0x4(reg)
+VMPSADBW_128_0x5(reg)
   before
     0930a82261c78db9.fbed7fb2bcd7aab5.293ccf970d3899a6.f697cc719e845cd6
     aaa6a37ff7761c1c.f8cbd3b84cd8c574.a0807446593c3b54.0d6582b0efe3ca6e
@@ -41478,12 +41478,12 @@
     8f349125d7de8709.a181c6717ccb6be9.e978fb30fc3bb496.e009bdb839c13d93
     54763c596957b979
   after
-    0930a82261c78db9.fbed7fb2bcd7aab5.293ccf970d3899a6.f697cc719e845cd6
+    0000000000000000.0000000000000000.0073005100880056.00a40093006800de
     aaa6a37ff7761c1c.f8cbd3b84cd8c574.a0807446593c3b54.0d6582b0efe3ca6e
     6238470695a4b1a7.e663c2ff2d26c721.c17b84aa1fb98615.67475379c549819e
     8f349125d7de8709.a181c6717ccb6be9.e978fb30fc3bb496.e009bdb839c13d93
-    00000000000099a6
-VPEXTRW_128_0x4(mem)
+    54763c596957b979
+VMPSADBW_128_0x5(mem)
   before
     9f5b4a487117b27b.8ce47b475aafdbeb.05f15dfc54d56ff7.72c4d6438b4f0283
     9d8465726c0ee4c6.b49503d7baa3e9fc.ee7f028bd24f8d78.b9ab104e6980ac87
@@ -41491,13 +41491,13 @@
     22d2ae23accfe2e5.f929dbf67e262356.bf2367652ec50982.f17a9101806a0286
     9afad180f13b27d9
   after
-    9f5b4a487117b27b.8ce47b475aafdbeb.05f15dfc54d56ff7.72c4d6438b4f8198
+    9f5b4a487117b27b.8ce47b475aafdbeb.05f15dfc54d56ff7.72c4d6438b4f0283
     9d8465726c0ee4c6.b49503d7baa3e9fc.ee7f028bd24f8d78.b9ab104e6980ac87
-    2abd07c176480b85.659324439247ede6.38f6310a11468198.1a79a5bf315aed4f
+    0000000000000000.0000000000000000.01a900b900f80153.012e00ec006f0131
     22d2ae23accfe2e5.f929dbf67e262356.bf2367652ec50982.f17a9101806a0286
     9afad180f13b27d9
 
-VPEXTRW_128_0x5(reg)
+VMPSADBW_128_0x6(reg)
   before
     71445fa8215a97f4.618fd6832ab12612.cea5225c1bccc6f7.5fd31e8844d8df63
     d2a639e5ab518f82.c3bff9cc0bfa9337.3e51f7e105c61376.f4d0d460708cbf66
@@ -41505,12 +41505,12 @@
     a1ddbf4f3ffd07a9.5fac25ce67edd61b.636d38f92de39abc.6ce32bda78049185
     0892c3568ce1faf8
   after
-    71445fa8215a97f4.618fd6832ab12612.cea5225c1bccc6f7.5fd31e8844d8df63
+    0000000000000000.0000000000000000.01f300ea01900133.014401ee019700fb
     d2a639e5ab518f82.c3bff9cc0bfa9337.3e51f7e105c61376.f4d0d460708cbf66
     186a5aa42baf4b30.233095ec6bb4e480.a77b55f2d79f457e.59e704d7cdec67b8
     a1ddbf4f3ffd07a9.5fac25ce67edd61b.636d38f92de39abc.6ce32bda78049185
-    0000000000001bcc
-VPEXTRW_128_0x5(mem)
+    0892c3568ce1faf8
+VMPSADBW_128_0x6(mem)
   before
     09be4a36258e5e3e.c84b625480c9fe9a.5200255e1ab12532.cf749d63a41f4cdc
     4a353b6560177882.e9ff411d8c9e6eaf.d8f81189a10a8df1.48db7f9dd7de9789
@@ -41518,13 +41518,13 @@
     002f4b652befc1b6.886da0b07494a3f3.0c039f5b99b1961a.ccfdaa2de316ec3d
     9050eb5cf4a76d9b
   after
-    09be4a36258e5e3e.c84b625480c9fe9a.5200255e1ab12532.cf749d63a41f1707
+    09be4a36258e5e3e.c84b625480c9fe9a.5200255e1ab12532.cf749d63a41f4cdc
     4a353b6560177882.e9ff411d8c9e6eaf.d8f81189a10a8df1.48db7f9dd7de9789
-    a9c112d1598905f1.60475718ff099093.cc5f66391707c985.28f0d91263acb970
+    0000000000000000.0000000000000000.025100d500f50255.0116017f0243011d
     002f4b652befc1b6.886da0b07494a3f3.0c039f5b99b1961a.ccfdaa2de316ec3d
     9050eb5cf4a76d9b
 
-VPEXTRW_128_0x5(reg)
+VMPSADBW_128_0x6(reg)
   before
     d033990a31eb7736.2d4a630df25668fe.bfbe195187cee17a.72ae38dc4216afdb
     e9f3b1a3366f48bb.0be0d5b5cbc8b5f5.6086bc67d54087d5.dc2dada62f41d2f5
@@ -41532,12 +41532,12 @@
     11390c460b642a33.49a9b7b62103349e.4fab75a29001fab6.28d71cca421a21e3
     c29a0efba1e0c50e
   after
-    d033990a31eb7736.2d4a630df25668fe.bfbe195187cee17a.72ae38dc4216afdb
+    0000000000000000.0000000000000000.014700c101a800cc.00f9015c012e0095
     e9f3b1a3366f48bb.0be0d5b5cbc8b5f5.6086bc67d54087d5.dc2dada62f41d2f5
     35dc2e93a1be1ad6.75bc1d49d15465c6.c611875ef978d1af.244c7aa77b3eb994
     11390c460b642a33.49a9b7b62103349e.4fab75a29001fab6.28d71cca421a21e3
-    00000000000087ce
-VPEXTRW_128_0x5(mem)
+    c29a0efba1e0c50e
+VMPSADBW_128_0x6(mem)
   before
     d061cc26b49d6343.d958482912eeb37d.617420e6d6e3dda9.56a0839f35683f93
     2cf7d237965bb5ac.e983dca652e7f260.9ae9d2c70dff1d12.363babc18538dcf5
@@ -41545,13 +41545,13 @@
     42c3a8bb381067cb.51300122ea5782a4.e00106486f1c52b0.f5963e2594440df2
     8ceea03f8b9819e6
   after
-    d061cc26b49d6343.d958482912eeb37d.617420e6d6e3dda9.56a0839f3568e163
+    d061cc26b49d6343.d958482912eeb37d.617420e6d6e3dda9.56a0839f35683f93
     2cf7d237965bb5ac.e983dca652e7f260.9ae9d2c70dff1d12.363babc18538dcf5
-    b4299d1a63287875.9d07c62b66db2389.d1d44b43e163b006.4dc9eb751bfd0d85
+    0000000000000000.0000000000000000.00d601460193023c.022d029f02150192
     42c3a8bb381067cb.51300122ea5782a4.e00106486f1c52b0.f5963e2594440df2
     8ceea03f8b9819e6
 
-VPEXTRW_128_0x5(reg)
+VMPSADBW_128_0x6(reg)
   before
     6c1d0e2e9d856d0e.b3916f06311e3fda.614a8af97be64a5d.a43b80c1d235be3d
     f26f825d65984415.e35f6ee8695ebccd.29a15b1bb415b85f.fa50339927bbb1d8
@@ -41559,12 +41559,12 @@
     61ab7130895d6e72.f12a051d07a59411.5035caef908076ef.c736391b153b1beb
     f7a0839de64d0bba
   after
-    6c1d0e2e9d856d0e.b3916f06311e3fda.614a8af97be64a5d.a43b80c1d235be3d
+    0000000000000000.0000000000000000.00f4016a00cb0195.0161018e01230155
     f26f825d65984415.e35f6ee8695ebccd.29a15b1bb415b85f.fa50339927bbb1d8
     7b2ffa3a805cdba8.aff9214bfcdc9ad1.058072f3326f0856.bc0a9dbe89b9e7ae
     61ab7130895d6e72.f12a051d07a59411.5035caef908076ef.c736391b153b1beb
-    0000000000007be6
-VPEXTRW_128_0x5(mem)
+    f7a0839de64d0bba
+VMPSADBW_128_0x6(mem)
   before
     2914f82e18fc7148.012de3ab1c283920.86c09548a5c567ba.680a5f7a6bd43dd6
     375d13bbc85409c0.b8024d18d648775e.4a854dbaf346cff8.a84c2d015ff89ab6
@@ -41572,13 +41572,13 @@
     5aa22b7a102bc321.d6d4f6732db83f38.cfcf26200da04ce1.0f4766aefede0514
     ef98c8aee3b88be9
   after
-    2914f82e18fc7148.012de3ab1c283920.86c09548a5c567ba.680a5f7a6bd40c36
+    2914f82e18fc7148.012de3ab1c283920.86c09548a5c567ba.680a5f7a6bd43dd6
     375d13bbc85409c0.b8024d18d648775e.4a854dbaf346cff8.a84c2d015ff89ab6
-    fe495031125f914f.e076aae1534965d7.1946a95e0c3687f6.6c4731ee0677c93c
+    0000000000000000.0000000000000000.0124016300790173.010c010c0118016f
     5aa22b7a102bc321.d6d4f6732db83f38.cfcf26200da04ce1.0f4766aefede0514
     ef98c8aee3b88be9
 
-VPEXTRW_128_0x6(reg)
+VMPSADBW_128_0x7(reg)
   before
     6785535850919768.27352084e1c35b61.f66a2d3b0320412c.48ec3eec1191dae4
     d25b041ae2f5643c.41ceac399f34173c.9c824ba36f0da660.60686fae3414ed2c
@@ -41586,12 +41586,12 @@
     f6f3c492e2913595.cc42755953cee671.eb6c2d087aa88b37.ddb10ac54a01903a
     fa156bf174839958
   after
-    6785535850919768.27352084e1c35b61.f66a2d3b0320412c.48ec3eec1191dae4
+    0000000000000000.0000000000000000.0129008e01510148.00ad00ee00b700f5
     d25b041ae2f5643c.41ceac399f34173c.9c824ba36f0da660.60686fae3414ed2c
     8e67d55e34713012.843949876689b1dd.246a4d190d0cab80.f3113453933540e5
     f6f3c492e2913595.cc42755953cee671.eb6c2d087aa88b37.ddb10ac54a01903a
-    0000000000002d3b
-VPEXTRW_128_0x6(mem)
+    fa156bf174839958
+VMPSADBW_128_0x7(mem)
   before
     2609d5c42dc7176a.654bcc2189dfaf73.f5b4ac9b81107224.4bd5eadb516d8432
     3d59c32992dac59d.39bdea77c5e9dc55.db5c68390d5a1021.a1f07d002fe8d01c
@@ -41599,13 +41599,13 @@
     9c3c1c58cf9aa415.7b1b5428695f3adb.4d7f643aad3775ab.9e7119ee6e2e5370
     fe6d1a8e07100231
   after
-    2609d5c42dc7176a.654bcc2189dfaf73.f5b4ac9b81107224.4bd5eadb516d271f
+    2609d5c42dc7176a.654bcc2189dfaf73.f5b4ac9b81107224.4bd5eadb516d8432
     3d59c32992dac59d.39bdea77c5e9dc55.db5c68390d5a1021.a1f07d002fe8d01c
-    1bd0b20bbfc7601d.cc941800313af6e9.5907271f12b87d95.490be3e2afa4aba2
+    0000000000000000.0000000000000000.01e601e802400258.01d001d80149015a
     9c3c1c58cf9aa415.7b1b5428695f3adb.4d7f643aad3775ab.9e7119ee6e2e5370
     fe6d1a8e07100231
 
-VPEXTRW_128_0x6(reg)
+VMPSADBW_128_0x7(reg)
   before
     c44ce22f16d8f592.9b677ffbde604cb2.a39f995c0ae3e3d7.92919b74f9e2b390
     4c5a6d3d3812683e.f61e56e00924151f.9e6ce306af522f88.040848ba12c5f56f
@@ -41613,12 +41613,12 @@
     1232be522409bc2a.2d60502021d7fa1b.8111787077239bbb.de59f51c1e656fce
     ffcbed0e483921a6
   after
-    c44ce22f16d8f592.9b677ffbde604cb2.a39f995c0ae3e3d7.92919b74f9e2b390
+    0000000000000000.0000000000000000.00b801a2016a00a2.01ff0197017e01cc
     4c5a6d3d3812683e.f61e56e00924151f.9e6ce306af522f88.040848ba12c5f56f
     f2e3b825094996e2.882d1df36bf2bb89.cace2f93f539589b.7eb2e7f915edf576
     1232be522409bc2a.2d60502021d7fa1b.8111787077239bbb.de59f51c1e656fce
-    000000000000995c
-VPEXTRW_128_0x6(mem)
+    ffcbed0e483921a6
+VMPSADBW_128_0x7(mem)
   before
     bcd24bbdaf76c528.08957b2f26de16c1.c0836c5446de8d03.2081ba08d29c3395
     f33b8c1470271880.2f56eb2aa955e054.1f61ec79f713316a.0369f1c6a1315dd4
@@ -41626,13 +41626,13 @@
     3b62a36a6f16ba65.8526d527a957b21c.ad82084a6b399b6b.06d52f690ddc5734
     ddef2d25e20b9eac
   after
-    bcd24bbdaf76c528.08957b2f26de16c1.c0836c5446de8d03.2081ba08d29c4c7c
+    bcd24bbdaf76c528.08957b2f26de16c1.c0836c5446de8d03.2081ba08d29c3395
     f33b8c1470271880.2f56eb2aa955e054.1f61ec79f713316a.0369f1c6a1315dd4
-    7fd22affa758d5db.e5c30aae4cfa558e.24c84c7c4f83a17f.87161918816d5525
+    0000000000000000.0000000000000000.01780102013700f8.01520126017601ce
     3b62a36a6f16ba65.8526d527a957b21c.ad82084a6b399b6b.06d52f690ddc5734
     ddef2d25e20b9eac
 
-VPEXTRW_128_0x6(reg)
+VMPSADBW_128_0x7(reg)
   before
     68b311b89b85673a.05b97241e46c8149.6acc47015cfa33a9.945c9cce6641d95d
     036cd68ed5d7ee89.b7a114712367e6b4.f2005ca8026e13e3.b72285f35ca8187f
@@ -41640,12 +41640,12 @@
     d9ecf5b4392f251d.4757bd886d797ece.5746600e95fbe308.1da143d5acc18805
     18f310693d8a31c1
   after
-    68b311b89b85673a.05b97241e46c8149.6acc47015cfa33a9.945c9cce6641d95d
+    0000000000000000.0000000000000000.01e100db01120131.010e024401280132
     036cd68ed5d7ee89.b7a114712367e6b4.f2005ca8026e13e3.b72285f35ca8187f
     0a6579142b8b6e46.2fe703e44711a7d1.7710108836408f73.f0a03ea76b7913fe
     d9ecf5b4392f251d.4757bd886d797ece.5746600e95fbe308.1da143d5acc18805
-    0000000000004701
-VPEXTRW_128_0x6(mem)
+    18f310693d8a31c1
+VMPSADBW_128_0x7(mem)
   before
     bf60224f3ae3cb5d.cc4b45db9c4f4cb9.dcbdbd47b0a828d4.ecf047a4ba2b4b4b
     ecb5f374bdd51106.3fcf67f6ef7622c7.cbe57f0f2dac6011.9458c1b8425d02eb
@@ -41653,13 +41653,13 @@
     4c47c826ccb9942e.15760fb4d809c7e7.22aa3a6743606ee0.89945e06e9f450ed
     8e017a1940715ea7
   after
-    bf60224f3ae3cb5d.cc4b45db9c4f4cb9.dcbdbd47b0a828d4.ecf047a4ba2b7fcb
+    bf60224f3ae3cb5d.cc4b45db9c4f4cb9.dcbdbd47b0a828d4.ecf047a4ba2b4b4b
     ecb5f374bdd51106.3fcf67f6ef7622c7.cbe57f0f2dac6011.9458c1b8425d02eb
-    7cbe01c2e56ec0e8.8ec45770cf30e1f2.ee9a7fcbff90e4b1.a9cbcab4c81b4592
+    0000000000000000.0000000000000000.010f020001870153.0186016201d30122
     4c47c826ccb9942e.15760fb4d809c7e7.22aa3a6743606ee0.89945e06e9f450ed
     8e017a1940715ea7
 
-VPEXTRW_128_0x7(reg)
+VMOVDDUP_YMMorMEM256_to_YMM(reg)
   before
     165d19596920ac6d.361bc28d8ec34905.30308d30a58e0d52.43df2bcf1429bac9
     7bf33732018d76ea.17086de148969a98.3b40cc4fd24af2de.2e06ceef8ef78698
@@ -41667,12 +41667,12 @@
     4f00e05fedcd6dbc.2e58c30512cd03a5.908d7e26be98840b.cd5a1a07f0ce899b
     3a1ebcd70ff03927
   after
-    165d19596920ac6d.361bc28d8ec34905.30308d30a58e0d52.43df2bcf1429bac9
+    17086de148969a98.17086de148969a98.2e06ceef8ef78698.2e06ceef8ef78698
     7bf33732018d76ea.17086de148969a98.3b40cc4fd24af2de.2e06ceef8ef78698
     1a10d010a442f8cb.cbd8441015414414.92f0c87dfccab038.bdeb9fb3ced48c7b
     4f00e05fedcd6dbc.2e58c30512cd03a5.908d7e26be98840b.cd5a1a07f0ce899b
-    0000000000003030
-VPEXTRW_128_0x7(mem)
+    3a1ebcd70ff03927
+VMOVDDUP_YMMorMEM256_to_YMM(mem)
   before
     e005001047475749.770f648b78ba1268.1c5566ac5a489276.9363e8b7b543aa04
     9bd9629cb5dea02e.ec895701e293237c.7198a9f10abdaeb4.f6be049a7c545dce
@@ -41680,13 +41680,13 @@
     c07b7162a1fca2ee.30ed7b77c23f778a.c128010510c77d26.4b323f0aecdd5d88
     f6e3576fcc6d22cf
   after
-    e005001047475749.770f648b78ba1268.1c5566ac5a489276.9363e8b7b54309f0
+    e005001047475749.770f648b78ba1268.1c5566ac5a489276.9363e8b7b543aa04
     9bd9629cb5dea02e.ec895701e293237c.7198a9f10abdaeb4.f6be049a7c545dce
     47675e6975c1d001.0bb9b52bc7e7dba3.09f009c03d39138b.14e9cd3caf59da16
-    c07b7162a1fca2ee.30ed7b77c23f778a.c128010510c77d26.4b323f0aecdd5d88
+    770f648b78ba1268.770f648b78ba1268.9363e8b7b543aa04.9363e8b7b543aa04
     f6e3576fcc6d22cf
 
-VPEXTRW_128_0x7(reg)
+VMOVDDUP_YMMorMEM256_to_YMM(reg)
   before
     704910d6ed946498.e2e11672589cd423.b76fa34f6f2933dd.730b0dac9e73a7b1
     17b065adebde608f.8965c987b3ad20ca.fc8c2b216b304b47.fb66aaa2034a4e59
@@ -41694,12 +41694,12 @@
     58b1d958eb0d75b5.d6f6496dcb4ef820.30c74860bec67d12.02b48326c5a603af
     383fb88e594488b5
   after
-    704910d6ed946498.e2e11672589cd423.b76fa34f6f2933dd.730b0dac9e73a7b1
+    8965c987b3ad20ca.8965c987b3ad20ca.fb66aaa2034a4e59.fb66aaa2034a4e59
     17b065adebde608f.8965c987b3ad20ca.fc8c2b216b304b47.fb66aaa2034a4e59
     4564555f61d8525f.91d2068cd139420f.5b900e5851e0fa75.370552d15c572e4a
     58b1d958eb0d75b5.d6f6496dcb4ef820.30c74860bec67d12.02b48326c5a603af
-    000000000000b76f
-VPEXTRW_128_0x7(mem)
+    383fb88e594488b5
+VMOVDDUP_YMMorMEM256_to_YMM(mem)
   before
     b5726df4343c7a88.aae2ef042609063c.349b0f16c0f8fc26.d77cd6a54d6d10cb
     55181f44739a9553.994591cfae5841a1.878ed374c9410a50.acfdb3939b61ef4c
@@ -41707,13 +41707,13 @@
     6df167528bba3483.bacc6f731222a4b3.7b8d45fb8de638ba.508e4a1ae1627f54
     d737fc8c1287a933
   after
-    b5726df4343c7a88.aae2ef042609063c.349b0f16c0f8fc26.d77cd6a54d6dab9b
+    b5726df4343c7a88.aae2ef042609063c.349b0f16c0f8fc26.d77cd6a54d6d10cb
     55181f44739a9553.994591cfae5841a1.878ed374c9410a50.acfdb3939b61ef4c
     f4ff496a316b9443.7f24bd251d87628f.ab9b11710437e0c8.0b94da96432f5540
-    6df167528bba3483.bacc6f731222a4b3.7b8d45fb8de638ba.508e4a1ae1627f54
+    aae2ef042609063c.aae2ef042609063c.d77cd6a54d6d10cb.d77cd6a54d6d10cb
     d737fc8c1287a933
 
-VPEXTRW_128_0x7(reg)
+VMOVDDUP_YMMorMEM256_to_YMM(reg)
   before
     fcdbed5672290e8a.9ebbf5e89c933140.a489a12327b344b9.d532ecfc7f58cf53
     1bc61ae69cd4eb05.62296f18810347a6.9aa751a3f8c87e4c.94548162f79b61bf
@@ -41721,12 +41721,12 @@
     b6a01604bf76fc15.122018f735d5ac1a.1b3518bf40acaecc.b0436509e6c264be
     c6a7ac2396bf4eaa
   after
-    fcdbed5672290e8a.9ebbf5e89c933140.a489a12327b344b9.d532ecfc7f58cf53
+    62296f18810347a6.62296f18810347a6.94548162f79b61bf.94548162f79b61bf
     1bc61ae69cd4eb05.62296f18810347a6.9aa751a3f8c87e4c.94548162f79b61bf
     8f437ea72c147c4f.940652ce551531e0.f8717a5d22ed8d19.93c1801710bba929
     b6a01604bf76fc15.122018f735d5ac1a.1b3518bf40acaecc.b0436509e6c264be
-    000000000000a489
-VPEXTRW_128_0x7(mem)
+    c6a7ac2396bf4eaa
+VMOVDDUP_YMMorMEM256_to_YMM(mem)
   before
     b0b9d2513bbb2318.eb27dc6bf185a902.b6413f7d3c507382.5d3d2734ef931d10
     4c44527ff2c49e35.8925ce475dcebdc3.5e36434e87914442.1bd6a428ca2e1691
@@ -41734,13 +41734,13 @@
     06f9508c052a792a.75b6230e543b0c6f.26ccce7d5796ef7b.7bebd43d75ad94fd
     d5ff81367ea99240
   after
-    b0b9d2513bbb2318.eb27dc6bf185a902.b6413f7d3c507382.5d3d2734ef93e5cb
+    b0b9d2513bbb2318.eb27dc6bf185a902.b6413f7d3c507382.5d3d2734ef931d10
     4c44527ff2c49e35.8925ce475dcebdc3.5e36434e87914442.1bd6a428ca2e1691
     7416a89ad7e57c2c.eee6e6049fdc7403.e5cb9e5431a4d986.b14c89076d07d4fc
-    06f9508c052a792a.75b6230e543b0c6f.26ccce7d5796ef7b.7bebd43d75ad94fd
+    eb27dc6bf185a902.eb27dc6bf185a902.5d3d2734ef931d10.5d3d2734ef931d10
     d5ff81367ea99240
 
-VAESENC(reg)
+VMOVLPS_128_M64_XMM_XMM(reg)
   before
     1bd38a5e23890a70.dcbac64298a0505a.79e07ed21778bfb3.fe054eb41472414d
     aab5ed2201d83739.d32587a9ad52bee9.58b2f4ba851eca7a.4a429ae584458d27
@@ -41748,12 +41748,12 @@
     0dceae2ad5f4a249.9529d736ca9b4fd3.137923aad0d5d744.aaf687e5f0fdfea5
     76071f8c23fa9ba2
   after
-    0000000000000000.0000000000000000.2f252f9c2a61b3bc.696c19a19534d67e
+    1bd38a5e23890a70.dcbac64298a0505a.79e07ed21778bfb3.fe054eb41472414d
     aab5ed2201d83739.d32587a9ad52bee9.58b2f4ba851eca7a.4a429ae584458d27
     dcefa5ecb2225648.c8060eab5f4d7f03.6c76823339b96871.e44e2efcc41a8d36
     0dceae2ad5f4a249.9529d736ca9b4fd3.137923aad0d5d744.aaf687e5f0fdfea5
     76071f8c23fa9ba2
-VAESENC(mem)
+VMOVLPS_128_M64_XMM_XMM(mem)
   before
     254a74dd791e2156.9b9e044704d959e8.18595f350c4be986.a707d38ae5ff519e
     948e02c50f744cef.e1aaa3aedb5eb5d0.2b6420943e660a47.866c8f3e15c3122c
@@ -41763,11 +41763,11 @@
   after
     254a74dd791e2156.9b9e044704d959e8.18595f350c4be986.a707d38ae5ff519e
     948e02c50f744cef.e1aaa3aedb5eb5d0.2b6420943e660a47.866c8f3e15c3122c
-    0000000000000000.0000000000000000.98dfb6d3e6cc0a75.fcbf3346cf93622b
+    0000000000000000.0000000000000000.2b6420943e660a47.a707d38ae5ff519e
     1d45b50669e88080.05aaae0ff3754e2c.74364222e812d0a6.90ea17d733455d92
     759bdc935a1d5ec2
 
-VAESENC(reg)
+VMOVLPS_128_M64_XMM_XMM(reg)
   before
     13539dd40cbd96d6.f051d238651d01cf.9b3611e06c1f03f9.62969a2997bbee9b
     c75e5406e4b3437a.f28c19af11b417b2.592eaeacfd994ebf.52001d40a700824f
@@ -41775,12 +41775,12 @@
     e29d99ee77cfe720.f4c20d21e73bf0e7.bc9582e6d92b95e9.a321904f5d8efea3
     bd70791e3af05e9a
   after
-    0000000000000000.0000000000000000.ea6739e4dc44156f.a39f1d5d654c7d2f
+    13539dd40cbd96d6.f051d238651d01cf.9b3611e06c1f03f9.62969a2997bbee9b
     c75e5406e4b3437a.f28c19af11b417b2.592eaeacfd994ebf.52001d40a700824f
     ed08ff967e8b9f59.ffc3035988ba7d57.9adf7fdf436e6b2b.1e3f455335ed48ee
     e29d99ee77cfe720.f4c20d21e73bf0e7.bc9582e6d92b95e9.a321904f5d8efea3
     bd70791e3af05e9a
-VAESENC(mem)
+VMOVLPS_128_M64_XMM_XMM(mem)
   before
     48f97daee81f2400.00691e7b6b0d567a.ab55b4f349412c91.1a9bb22b5c5a0aa4
     208816ea84250e01.a4b78aaaf5d12914.014773bccbdaed7f.0f3f0b1c678a0309
@@ -41790,11 +41790,11 @@
   after
     48f97daee81f2400.00691e7b6b0d567a.ab55b4f349412c91.1a9bb22b5c5a0aa4
     208816ea84250e01.a4b78aaaf5d12914.014773bccbdaed7f.0f3f0b1c678a0309
-    0000000000000000.0000000000000000.3480a7de397a0fac.419dfad2db5ad8f0
+    0000000000000000.0000000000000000.014773bccbdaed7f.1a9bb22b5c5a0aa4
     27e8fc15f4eb3983.ee0c099a3c18ebb7.fa7c2ade9cf3ecd8.338c2aae8716787f
     18cee728d38b6be8
 
-VAESENC(reg)
+VMOVLPS_128_M64_XMM_XMM(reg)
   before
     06ddbdfd1830d4ab.0e5040dd00c3f35b.4cab133431b35118.54561911248ba39c
     5705a899f290ee74.b2ef0b016aa3bf7e.a0fdf41f2d040b68.bec011e93ce5cf55
@@ -41802,12 +41802,12 @@
     96cfaed6d2b228c6.a0fd220ec6ac8054.9ae92c98a8f56a88.2f73093c89117453
     ee55028ff7fa66f1
   after
-    0000000000000000.0000000000000000.86186abb252cab73.833dd2aa4bb42542
+    06ddbdfd1830d4ab.0e5040dd00c3f35b.4cab133431b35118.54561911248ba39c
     5705a899f290ee74.b2ef0b016aa3bf7e.a0fdf41f2d040b68.bec011e93ce5cf55
     6991a568fc37f6ee.ee8fd76e4d975a18.464ea8c7cb965554.13868d54ff0e2b2e
     96cfaed6d2b228c6.a0fd220ec6ac8054.9ae92c98a8f56a88.2f73093c89117453
     ee55028ff7fa66f1
-VAESENC(mem)
+VMOVLPS_128_M64_XMM_XMM(mem)
   before
     2cf6f23864d6bc34.3b09c14f118cc0a8.a30567cef0edec5f.f81b7bfe5fae88af
     c4235723edb03347.b58cda405451f93f.d372239be8665c65.bc3191668c4ce976
@@ -41817,11 +41817,11 @@
   after
     2cf6f23864d6bc34.3b09c14f118cc0a8.a30567cef0edec5f.f81b7bfe5fae88af
     c4235723edb03347.b58cda405451f93f.d372239be8665c65.bc3191668c4ce976
-    0000000000000000.0000000000000000.6b2c8698e27bf3e3.6f4e786269db9a12
+    0000000000000000.0000000000000000.d372239be8665c65.f81b7bfe5fae88af
     77516e6fc18f7390.939d0a3658ce413e.29afec08af323210.e63303e8bb696692
     03b957daf4fffa40
 
-VAESENCLAST(reg)
+VMOVLPS_128_XMM_M64(reg)
   before
     f752627e13aac23d.48ea17a945acb51d.b1c21a13519dc7fe.0817f281b79c120d
     1d49203fb5f7f936.e53e25d453f7072b.12611f18be88e023.84145eb5fd6fe4b5
@@ -41829,12 +41829,12 @@
     6e84a6c8f1a5a7ca.ef4b5db18349cd78.1038f94766dfb54f.c2005903b07e50b5
     3c86e0f456d16364
   after
-    0000000000000000.0000000000000000.bd3e7c1d63b2067c.2c9c4d4755723de6
+    f752627e13aac23d.48ea17a945acb51d.b1c21a13519dc7fe.0817f281b79c120d
     1d49203fb5f7f936.e53e25d453f7072b.12611f18be88e023.84145eb5fd6fe4b5
     d1eb8e897671dcd6.291b13de0a7d25e5.13c415b03c1ac65a.7873ac929cb66533
     6e84a6c8f1a5a7ca.ef4b5db18349cd78.1038f94766dfb54f.c2005903b07e50b5
     3c86e0f456d16364
-VAESENCLAST(mem)
+VMOVLPS_128_XMM_M64(mem)
   before
     c4d3bd52a9bd586f.52606668c21e96bd.159b803bdc68b90f.6609c649d964ebad
     34b16c07c64eebff.d7cbc9d58668e45c.75d7f76731e4a6d7.6f8378223034a221
@@ -41842,13 +41842,13 @@
     4053312acc8cdf65.397d69c655a0904d.5742d1543c2972a9.0da17b09fbe685f9
     5addc5f0a8e029b6
   after
-    c4d3bd52a9bd586f.52606668c21e96bd.159b803bdc68b90f.6609c649d964ebad
+    c4d3bd52a9bd586f.52606668c21e96bd.159b803bdc68b90f.88f20b3e07db1656
     34b16c07c64eebff.d7cbc9d58668e45c.75d7f76731e4a6d7.6f8378223034a221
-    0000000000000000.0000000000000000.d277babe7470d101.6207e2da440d5750
+    6aed6a00c88fda43.5b10cc7bd810cf53.edcb3d209dcc4ffc.88f20b3e07db1656
     4053312acc8cdf65.397d69c655a0904d.5742d1543c2972a9.0da17b09fbe685f9
     5addc5f0a8e029b6
 
-VAESENCLAST(reg)
+VMOVLPS_128_XMM_M64(reg)
   before
     cbf3e45da9563f38.93af3f6fed51b792.cc5c9e2398a766f7.900a2cee2b09c90b
     bc2dd4be9ad2032c.40cd10bd48eb1df5.72fa66fc3eae8bfd.75edcbda8677104e
@@ -41856,12 +41856,12 @@
     8e3f1808bf128318.137ee7211acc870f.62a39fd721f2b5cb.ae37c759ed2e6224
     bc361bc3328fe411
   after
-    0000000000000000.0000000000000000.37f6770f7fb60f5e.a4951652289b1ab2
+    cbf3e45da9563f38.93af3f6fed51b792.cc5c9e2398a766f7.900a2cee2b09c90b
     bc2dd4be9ad2032c.40cd10bd48eb1df5.72fa66fc3eae8bfd.75edcbda8677104e
     89d8917d18e3b03d.21781efff865cfbb.85a3bdbfe2433c0a.e0b82b05687f059d
     8e3f1808bf128318.137ee7211acc870f.62a39fd721f2b5cb.ae37c759ed2e6224
     bc361bc3328fe411
-VAESENCLAST(mem)
+VMOVLPS_128_XMM_M64(mem)
   before
     e480a43052af478d.26b063ca29edb869.f3a9e50fc92b011e.664609af964532eb
     03e3dc8b6a9946c7.af75702ff5ff8adb.9bc696b5228efb14.ebd7f6b5ddcaee17
@@ -41869,13 +41869,13 @@
     96204ebaf0fc0b20.012fbe921df9f9d4.b606ffd93f915a63.ecf749f854981541
     1f1da80ebbf9f898
   after
-    e480a43052af478d.26b063ca29edb869.f3a9e50fc92b011e.664609af964532eb
+    e480a43052af478d.26b063ca29edb869.f3a9e50fc92b011e.4ea36254930d26fa
     03e3dc8b6a9946c7.af75702ff5ff8adb.9bc696b5228efb14.ebd7f6b5ddcaee17
-    0000000000000000.0000000000000000.60a7cdda205f91e4.a7f2067a825c701b
+    f52941bf95599ee9.84db3aa3bdd4371a.e8a176ff40012f1c.4ea36254930d26fa
     96204ebaf0fc0b20.012fbe921df9f9d4.b606ffd93f915a63.ecf749f854981541
     1f1da80ebbf9f898
 
-VAESENCLAST(reg)
+VMOVLPS_128_XMM_M64(reg)
   before
     4462790064bc0caa.c2928067968c4897.82bbf668b2f90cb3.e1c0af2f3c493814
     b711ba3bec6b8a24.564b51b2a418127b.62cbe0921761ae63.459d01ee5336845c
@@ -41883,12 +41883,12 @@
     f8e17a3d07c3bbfe.21c7c5d2664d3d38.b4abb88ec2968ae9.28eb7b533cdc5960
     5ff59cd247ae5974
   after
-    0000000000000000.0000000000000000.0ff3283586b9f86a.53789528348c872d
+    4462790064bc0caa.c2928067968c4897.82bbf668b2f90cb3.e1c0af2f3c493814
     b711ba3bec6b8a24.564b51b2a418127b.62cbe0921761ae63.459d01ee5336845c
     d578672cef94b1b1.2c193f8735a925f7.ffad777ae8bc1991.be6771009e63fb67
     f8e17a3d07c3bbfe.21c7c5d2664d3d38.b4abb88ec2968ae9.28eb7b533cdc5960
     5ff59cd247ae5974
-VAESENCLAST(mem)
+VMOVLPS_128_XMM_M64(mem)
   before
     3f514e69dbe4b9ce.7d99f1dcd382e5b7.11205f7f520f156a.dc139d38417c3c16
     a4cb0f03158a339b.c0edc674ed606a87.d8f1897b15fc6ab8.d52f24e600f96cc5
@@ -41896,13 +41896,13 @@
     6d48acf5e958673d.f093803e7ca2791e.5a2b7f0c93847b5a.a6b605fbb0e83658
     36b8573ad8734894
   after
-    3f514e69dbe4b9ce.7d99f1dcd382e5b7.11205f7f520f156a.dc139d38417c3c16
+    3f514e69dbe4b9ce.7d99f1dcd382e5b7.11205f7f520f156a.f94c48039c9956a2
     a4cb0f03158a339b.c0edc674ed606a87.d8f1897b15fc6ab8.d52f24e600f96cc5
-    0000000000000000.0000000000000000.48350f5e5196b206.bfb29fb620cc0ab0
+    6a2e5b8e10ad8307.1d26f770f1e6881b.5106c0b0cd1ff84e.f94c48039c9956a2
     6d48acf5e958673d.f093803e7ca2791e.5a2b7f0c93847b5a.a6b605fbb0e83658
     36b8573ad8734894
 
-VAESDEC(reg)
+VRCPSS_128(reg)
   before
     07a03b2cb1c6c701.89e38025bb97996a.957f5b49291f7a3d.ce2c42798538ae06
     73b8ac3dd66bf04c.9acc5208a377d5b9.683586fe94e9c624.89d585e5be464e7e
@@ -41910,12 +41910,12 @@
     90ac256c77e02e2a.0ab7e09b22475f70.0833b911179632f8.444e7c6778a1c485
     fbb628552f06126c
   after
-    0000000000000000.0000000000000000.6ebe828bd19ac710.9b703716e0fd1c57
+    0000000000000000.0000000000000000.683586fe94e9c624.89d585e523301800
     73b8ac3dd66bf04c.9acc5208a377d5b9.683586fe94e9c624.89d585e5be464e7e
     d84ea6d9e4f0fe20.7ccf9e8bbc03d957.c503fcc75b8d9a7e.67f1c53b5bba17ef
     90ac256c77e02e2a.0ab7e09b22475f70.0833b911179632f8.444e7c6778a1c485
     fbb628552f06126c
-VAESDEC(mem)
+VRCPSS_128(mem)
   before
     6af644f19ff5bdcf.f81f256329c8bd16.22529522f250242f.8d12b9486691ca3d
     6cda4d27e27b80da.6df2a3289933e48f.9f6a370e4829e4c0.afecf9d9e4089dfa
@@ -41925,11 +41925,11 @@
   after
     6af644f19ff5bdcf.f81f256329c8bd16.22529522f250242f.8d12b9486691ca3d
     6cda4d27e27b80da.6df2a3289933e48f.9f6a370e4829e4c0.afecf9d9e4089dfa
-    0000000000000000.0000000000000000.bc02a38e8a080e82.7577d8a8c930353d
+    0000000000000000.0000000000000000.9f6a370e4829e4c0.afecf9d91860c800
     98bd1212527a429b.e9ec06d11dc3f1da.374537c1f37c430c.3fc026b5daa0e78b
     64520bd98bd8d6b7
 
-VAESDEC(reg)
+VRCPSS_128(reg)
   before
     960f1f06dbbdf00a.7b54c79eb70ab7a8.aaabe38c69004e04.0b9f8d61810e5b1d
     33435fa865dc7231.60bf58755f61360e.e6fa2ec5e3f1346c.b3a7c01505a05eb1
@@ -41937,12 +41937,12 @@
     1a4050fb98f59da9.a441ffb0eb933d94.427bfb67ca1b8fa4.f3f0b26a5cf61311
     43c969e268d23e35
   after
-    0000000000000000.0000000000000000.aab897c17374763c.1b904584e1270560
+    0000000000000000.0000000000000000.e6fa2ec5e3f1346c.b3a7c015e4ab8800
     33435fa865dc7231.60bf58755f61360e.e6fa2ec5e3f1346c.b3a7c01505a05eb1
     963ac62bc5c098d7.25ca4281678b79f9.fa26e2ea2420e1bd.0d284eca9a3f07f4
     1a4050fb98f59da9.a441ffb0eb933d94.427bfb67ca1b8fa4.f3f0b26a5cf61311
     43c969e268d23e35
-VAESDEC(mem)
+VRCPSS_128(mem)
   before
     d780ed1ed9dd438c.1da1f9847907be53.bbf00ded06853d0b.1a4475a6716e7bcd
     8de1bc0bcc25df41.f9a8be3305833780.44a3e724d56d378c.decf4c14b4a3e0e3
@@ -41952,11 +41952,11 @@
   after
     d780ed1ed9dd438c.1da1f9847907be53.bbf00ded06853d0b.1a4475a6716e7bcd
     8de1bc0bcc25df41.f9a8be3305833780.44a3e724d56d378c.decf4c14b4a3e0e3
-    0000000000000000.0000000000000000.ffc63c23918fc534.e1657e88fc4e65ac
+    0000000000000000.0000000000000000.44a3e724d56d378c.decf4c140d896800
     cad128a4a69bcc77.b0dc88af8ce72016.2043f030fc510356.9a56032e7fe90887
     4aebdab24011436e
 
-VAESDEC(reg)
+VRCPSS_128(reg)
   before
     5671fe140d4ce7f2.0bf7bd29c5e0944f.439f8754bfe708d6.2aca17dd8d654ff8
     1a346cc2822631c0.dcf88d0ed691e337.1f3a90cf0d8038ca.1784fa35419e8353
@@ -41964,12 +41964,12 @@
     3aa012afd6e9a7e9.a1b6cba83b6905e2.2624b4f467af5efc.0bc3e59285b596e2
     c9e1e46f4baaec6e
   after
-    0000000000000000.0000000000000000.0380a9c4b649b304.4611acfccd6d4368
+    0000000000000000.0000000000000000.1f3a90cf0d8038ca.1784fa3549eb2800
     1a346cc2822631c0.dcf88d0ed691e337.1f3a90cf0d8038ca.1784fa35419e8353
     f2801e273c2c5d84.1a9e133ff4bb7559.a2f8a18b113feb9d.c43d1522350b5c92
     3aa012afd6e9a7e9.a1b6cba83b6905e2.2624b4f467af5efc.0bc3e59285b596e2
     c9e1e46f4baaec6e
-VAESDEC(mem)
+VRCPSS_128(mem)
   before
     da6290a7a6f51b63.4de144c6edea4a9c.4e0c3135c8a851fd.080cc876ac5ccd92
     1a136425afa3dfed.898faed81cba8348.fb6cc1d2b78313d7.a5fad67d7cd3740c
@@ -41979,11 +41979,11 @@
   after
     da6290a7a6f51b63.4de144c6edea4a9c.4e0c3135c8a851fd.080cc876ac5ccd92
     1a136425afa3dfed.898faed81cba8348.fb6cc1d2b78313d7.a5fad67d7cd3740c
-    0000000000000000.0000000000000000.606c57f55aa1eb51.b47a1c29bc6f4109
+    0000000000000000.0000000000000000.fb6cc1d2b78313d7.a5fad67dd2946800
     983575a24155146e.e9621e9d34f7a63e.c87951ed283eea76.7b1bd4ca2a4c585b
     6de6bce941670e88
 
-VAESDECLAST(reg)
+VRCPPS_128(reg)
   before
     89e78f3c537beb48.8d3eaa7b0171febd.c41f1c29557d08df.a0be4842e3367994
     2c6c4a31fa152d48.21a6f749e1206d51.3878445ffe02f02a.e93d595870fa6d20
@@ -41991,12 +41991,12 @@
     722d64ad7e07cab7.96c7c9776f65c8f7.5732fe7e5a3b416c.3e19bb746d177b34
     020e035116890c14
   after
-    0000000000000000.0000000000000000.70308729bd078c5f.7303b24402fc0313
-    2c6c4a31fa152d48.21a6f749e1206d51.3878445ffe02f02a.e93d595870fa6d20
+    89e78f3c537beb48.8d3eaa7b0171febd.c41f1c29557d08df.a0be4842e3367994
+    0000000000000000.0000000000000000.de2eb000b3de0000.7fc2011a9559b000
     b0bfe732d5bf0e34.303bd8f9fc6e1c56.a0bb90adcb1399ca.7fc2011ae9968547
     722d64ad7e07cab7.96c7c9776f65c8f7.5732fe7e5a3b416c.3e19bb746d177b34
     020e035116890c14
-VAESDECLAST(mem)
+VRCPPS_128(mem)
   before
     a76c559f00f6f413.ce02bc0d91799f7e.2f1747b055132d61.bb2a893e440622bb
     09012d4a476cee5c.208aebbeaba0c734.d6f7cd8eca8307bf.26ef2d5827017864
@@ -42005,12 +42005,12 @@
     31028904bb859731
   after
     a76c559f00f6f413.ce02bc0d91799f7e.2f1747b055132d61.bb2a893e440622bb
-    09012d4a476cee5c.208aebbeaba0c734.d6f7cd8eca8307bf.26ef2d5827017864
-    0000000000000000.0000000000000000.12767f561f1ad795.ab0c48606747a237
+    0000000000000000.0000000000000000.4fd8980029deb000.c3c028003af44000
+    0497083c09f7b71b.c410ee2c67087e86.6933d7ffebc2113e.f6cce63a9fb78113
     73fb61625fa10b7e.16e2bfc3613d0220.c396e1eed4db080a.850fb14f46b47773
     31028904bb859731
 
-VAESDECLAST(reg)
+VRCPPS_128(reg)
   before
     54f26ac398b51cf9.34f9b4a86778a5af.724a5cef37cc8dad.c0ee67469fdaa84e
     4b2b50f979d04476.225c7dfb3d8843da.3495c01c82405cda.3c05e6f56bccac36
@@ -42018,12 +42018,12 @@
     26a81c7bb9f96741.f4856374c17f75d1.5904ce2aed08b5c2.20a3bc0570b7d3a6
     41c20c3fe2c76d84
   after
-    0000000000000000.0000000000000000.b2394f73c8015e28.030573913fceced4
-    4b2b50f979d04476.225c7dfb3d8843da.3495c01c82405cda.3c05e6f56bccac36
+    54f26ac398b51cf9.34f9b4a86778a5af.724a5cef37cc8dad.c0ee67469fdaa84e
+    0000000000000000.0000000000000000.c7e3b8009ec4a000.6c4210002c2d8800
     73f93713fb634954.19f23945fcdb9f2c.b70fe8b7e026ab52.12a8d9e652bcd1f0
     26a81c7bb9f96741.f4856374c17f75d1.5904ce2aed08b5c2.20a3bc0570b7d3a6
     41c20c3fe2c76d84
-VAESDECLAST(mem)
+VRCPPS_128(mem)
   before
     50d1437ec3fa5db7.c184fa9f501edce6.91e37773a78083f4.75c070e34475b7d6
     2b9bdfaf305c5d6b.a1d8cdea5b5fe2f2.cbd6f12ecae883c2.678ec94d81f6ed39
@@ -42032,12 +42032,12 @@
     d863f7e8b9731df8
   after
     50d1437ec3fa5db7.c184fa9f501edce6.91e37773a78083f4.75c070e34475b7d6
-    2b9bdfaf305c5d6b.a1d8cdea5b5fe2f2.cbd6f12ecae883c2.678ec94d81f6ed39
-    0000000000000000.0000000000000000.000536b0fe56915c.658a23864ebd9c8d
+    0000000000000000.0000000000000000.ed101000d77ef000.092a40003a855800
+    adee5bbf44f729cb.20f191c77747b60f.7d2b4d9047c53267.8abbd5d341199397
     b19433981cd97f04.9b1c43a43f6294ea.85ae08883a234b0e.3c9491e32069e49e
     d863f7e8b9731df8
 
-VAESDECLAST(reg)
+VRCPPS_128(reg)
   before
     b975054ea8c27a51.155ae428d30e1942.6ea3deec503db72e.bd2a9dffbd0d8ce4
     3d15b6818ae23656.b30ce85a85a1b4b0.f5d25e0b45635c88.036d88e2ef8faf14
@@ -42045,12 +42045,12 @@
     9a33f2ff95c6be13.1163de544d11dcce.8f5dfd7f4cc11b2c.2573509dca8c8d34
     b9cf264cac1fc07c
   after
-    0000000000000000.0000000000000000.ed4418f0cd132834.593e5e263fb5ed50
-    3d15b6818ae23656.b30ce85a85a1b4b0.f5d25e0b45635c88.036d88e2ef8faf14
+    b975054ea8c27a51.155ae428d30e1942.6ea3deec503db72e.bd2a9dffbd0d8ce4
+    0000000000000000.0000000000000000.f2044800c491d000.4da9880094349000
     bf9107eefa5f8eb3.6976bd1a4f9e0b7b.8cf7bf6eba60bfa3.3141451deab570cb
     9a33f2ff95c6be13.1163de544d11dcce.8f5dfd7f4cc11b2c.2573509dca8c8d34
     b9cf264cac1fc07c
-VAESDECLAST(mem)
+VRCPPS_128(mem)
   before
     cb214218ab7bc6cf.2c497521f6a30223.88a1c8f49a07e1d6.5a4f15ab9711aecf
     353520ebe4aa5a58.cf1d8bc1ba80958f.abfaf5e6528bd6be.491a025f36dcb137
@@ -42059,12 +42059,12 @@
     8689a0dc259bc0c9
   after
     cb214218ab7bc6cf.2c497521f6a30223.88a1c8f49a07e1d6.5a4f15ab9711aecf
-    353520ebe4aa5a58.cf1d8bc1ba80958f.abfaf5e6528bd6be.491a025f36dcb137
-    0000000000000000.0000000000000000.ace2820194948b8c.125b432f33dfd97d
+    0000000000000000.0000000000000000.f64a8800e4f11800.249e3800e7e0f800
+    d4d63db372bb3a44.e1fc304a7cebb402.543be31692aa79b3.b80ac005c5af6311
     84d2135b71b720bf.bc326127d86f9b28.60300d70766f84e1.036b4b0be115fe08
     8689a0dc259bc0c9
 
-VAESIMC(reg)
+VRCPPS_256(reg)
   before
     9dafbae42ecce2ff.22f320cffeacc8f4.bd0a18c66c9985af.aca5efe118e6b473
     a42b948f9834a358.8806dffb35a5f00f.41d25392d1f4af41.12660653971bc596
@@ -42072,12 +42072,12 @@
     f2507e7efcdaed1d.1f32642b0fd5abaa.3d5d4261846eb337.9ffabfee96f1783d
     7e675aef4faa931a
   after
-    0000000000000000.0000000000000000.0234ae14fd80e1ea.02f8f320830dde41
-    a42b948f9834a358.8806dffb35a5f00f.41d25392d1f4af41.12660653971bc596
+    9dafbae42ecce2ff.22f320cffeacc8f4.bd0a18c66c9985af.aca5efe118e6b473
+    87a488008192d000.eb17d8004d3ae000.dc1a8800d9e97800.0fabc00071d2c800
     f7472d49fd5f3d7d.93d7cccb31af523e.a2d40df7a50c558a.6f3eccb40d1b7275
     f2507e7efcdaed1d.1f32642b0fd5abaa.3d5d4261846eb337.9ffabfee96f1783d
     7e675aef4faa931a
-VAESIMC(mem)
+VRCPPS_256(mem)
   before
     e94f19a253517e37.f092859a2e30efe2.08e22108e923b782.6fb9ef3c09a504f4
     ba7e79f3bef2f6c1.4f593c0932ee7e78.2bb5814cdea531f0.92340ff5d03d856c
@@ -42086,12 +42086,12 @@
     3f56f984cdc67ef2
   after
     e94f19a253517e37.f092859a2e30efe2.08e22108e923b782.6fb9ef3c09a504f4
-    ba7e79f3bef2f6c1.4f593c0932ee7e78.2bb5814cdea531f0.92340ff5d03d856c
-    0000000000000000.0000000000000000.2d29995e1a58a11c.d201588e5633e3da
+    959e38002b9c7000.8e5fa00050b93800.7610e80095c82800.0f30400075469000
+    cec2f5ceae9ab7e3.6af1a238a19fd78c.627500e50868d620.031a9ef676c3724c
     01e6091f3c537dca.9ca5b09119cf36ca.8aef18bd83776240.1eb698ac96c2063f
     3f56f984cdc67ef2
 
-VAESIMC(reg)
+VRCPPS_256(reg)
   before
     c244bee9b75c1611.2fb531d3862c03a2.43c26382360ad7dd.7fef46c26cdf9079
     04cde246ee0f0a47.34fce9d4a82e0696.ba94b87693ddf572.1d4107dfdeab1efa
@@ -42099,12 +42099,12 @@
     30e0379db9fdf4aa.3222fb71e1e37384.878735167f799bd1.c30a2f11cfa0447e
     841a8ffe86e156da
   after
-    0000000000000000.0000000000000000.8dece9c18ee757df.aabe7241e607a77f
-    04cde246ee0f0a47.34fce9d4a82e0696.ba94b87693ddf572.1d4107dfdeab1efa
+    c244bee9b75c1611.2fb531d3862c03a2.43c26382360ad7dd.7fef46c26cdf9079
+    1fad00006d8a8000.926fc800c18db000.228d7000b11a0000.3e384000880d6000
     5f3d6109116c9541.ec88ae0fbd6742d3.5c67aad8cdd4cd35.40b1d600f6e7c5ed
     30e0379db9fdf4aa.3222fb71e1e37384.878735167f799bd1.c30a2f11cfa0447e
     841a8ffe86e156da
-VAESIMC(mem)
+VRCPPS_256(mem)
   before
     5eab70b336b6b62d.d301606e8551632f.e4994ce431ac54d6.9540559b455a9af3
     2d8a501cfc2c20a3.a4eed9e80ef11e7c.ddb81d56c9d0a2f5.e4de07d3bc020746
@@ -42113,12 +42113,12 @@
     e70b5be65c1f3921
   after
     5eab70b336b6b62d.d301606e8551632f.e4994ce431ac54d6.9540559b455a9af3
-    2d8a501cfc2c20a3.a4eed9e80ef11e7c.ddb81d56c9d0a2f5.e4de07d3bc020746
-    0000000000000000.0000000000000000.55ab4c678c99d7dd.6773919e881dbb58
+    203f180048335800.abfd3800f99c7800.9a55c8004d3e2000.e9aa60003995e800
+    cd83aa25f34e5266.fef19d77f26b603c.f94aeab2c45b190c.ceac462a7ffe1e77
     1961fbbb382806a5.3f57a888cd4a661c.141d30e43e577448.b0f70e0d2bd91b31
     e70b5be65c1f3921
 
-VAESIMC(reg)
+VRCPPS_256(reg)
   before
     cd342a23ac5db5f3.eff2bdc8e6c7f98a.c26cf6853a1a6cc7.09fb6ad854d270d4
     bfbe752eba1ecb52.2a006e3a1936e742.e37c84dcd668adea.b6b1147a21d8c9dd
@@ -42126,12 +42126,12 @@
     382474627a5ab369.3ec78afa81b5a2d9.6fbc4d4408acd347.a5d4a97852b18115
     9eda8cadee9e589b
   after
-    0000000000000000.0000000000000000.555ad34b7b8292bf.b58030e4bafe4809
-    bfbe752eba1ecb52.2a006e3a1936e742.e37c84dcd668adea.b6b1147a21d8c9dd
+    cd342a23ac5db5f3.eff2bdc8e6c7f98a.c26cf6853a1a6cc7.09fb6ad854d270d4
+    6405a0005f094800.d896a000907cf800.80000000422b3000.88eaa000bc86b800
     1af53a751feeb6eb.a65989fcee818bf8.fed34df73cbf6631.f60baab6c2733a8e
     382474627a5ab369.3ec78afa81b5a2d9.6fbc4d4408acd347.a5d4a97852b18115
     9eda8cadee9e589b
-VAESIMC(mem)
+VRCPPS_256(mem)
   before
     bfe7cf3fb1457b4f.7698206364edfe79.d017ee20eddde811.9185802ed7ba2fd8
     e2c8ee1cb8b2a85a.309d38e37b33d3c7.36152f5a4e0619cb.c278e2214575b892
@@ -42140,12 +42140,12 @@
     404bfd685c2faf63
   after
     bfe7cf3fb1457b4f.7698206364edfe79.d017ee20eddde811.9185802ed7ba2fd8
-    e2c8ee1cb8b2a85a.309d38e37b33d3c7.36152f5a4e0619cb.c278e2214575b892
-    0000000000000000.0000000000000000.921fbe3ac17b4d3e.ad2ad3ee22d5f598
+    bf0d6000cda5f000.085758001a09b000.aed7b8009113a800.ed756800a7300800
+    e54a662f1ef199eb.c27fba4e5bb96dfe.4e8ccb94c13af033.5de27089ec6aa81f
     a236b163ff0f0b2c.898aa1109f0a09cb.f24a3dba61872a77.bd0f25d26b233b2b
     404bfd685c2faf63
 
-VAESKEYGENASSIST_0x00(reg)
+VPSADBW_128(reg)
   before
     40e1f4b75b173e73.f75b4da67817b94a.df0ae995e4b3e3d9.001901b84bf983c1
     1b1f072b05692506.be84b5e3a5156170.214a8e4ac53e37d5.52c6947b9b9bb63d
@@ -42153,12 +42153,12 @@
     cebe6e33c879ea68.1610dafb88258986.d93ee1f0cc303b46.36ea14fcda9f9d7e
     7ff9f992011ac99a
   after
-    0000000000000000.0000000000000000.ee62465d62465dee.55b4a4a3b4a4a355
+    0000000000000000.0000000000000000.00000000000001b9.000000000000025f
     1b1f072b05692506.be84b5e3a5156170.214a8e4ac53e37d5.52c6947b9b9bb63d
     2b4f3131f5b09fc9.d57c6606a116bdcb.ab988d99de39406b.c61d71ed6b798018
     cebe6e33c879ea68.1610dafb88258986.d93ee1f0cc303b46.36ea14fcda9f9d7e
     7ff9f992011ac99a
-VAESKEYGENASSIST_0x00(mem)
+VPSADBW_128(mem)
   before
     7e159c9dfef5bf99.5eb8ba9f194f408e.5e0d8fae774f83ce.078986b92bae6313
     0d0c7a08ed3d3ca6.398911e084bedde7.8a3d000c8a9f65cf.91c57862963ff67d
@@ -42168,11 +42168,11 @@
   after
     7e159c9dfef5bf99.5eb8ba9f194f408e.5e0d8fae774f83ce.078986b92bae6313
     0d0c7a08ed3d3ca6.398911e084bedde7.8a3d000c8a9f65cf.91c57862963ff67d
-    0000000000000000.0000000000000000.e458d77358d773e4.56c5a744c5a74456
+    0000000000000000.0000000000000000.000000000000020f.0000000000000302
     4eb6d3ae0f41ba9d.3cdfd2901b99e0e6.f968067589e1d4aa.283f350001cb48db
     ee16f7ce39de7f26
 
-VAESKEYGENASSIST_0x00(reg)
+VPSADBW_128(reg)
   before
     800df62bee3510bf.b90248c17a1534de.1cfc33d87e1cbde2.f5fc9458aeecd8dd
     3a712e84bb5a3751.2458e6e4468624de.b6208fa56c69d1c2.44f3ce96664db578
@@ -42180,12 +42180,12 @@
     95b03bd50f443613.6d51920b746d57c9.89ad297f568e92dd.4c3d36d00143e997
     bc285da41cefb874
   after
-    0000000000000000.0000000000000000.4333461133461143.a22ea2042ea204a2
+    0000000000000000.0000000000000000.00000000000002d6.00000000000003d3
     3a712e84bb5a3751.2458e6e4468624de.b6208fa56c69d1c2.44f3ce96664db578
     788e9c433ddc3089.6c832b04909f46c8.6698e364800b5a32.c31a301ace1127a7
     95b03bd50f443613.6d51920b746d57c9.89ad297f568e92dd.4c3d36d00143e997
     bc285da41cefb874
-VAESKEYGENASSIST_0x00(mem)
+VPSADBW_128(mem)
   before
     efa720823a22506a.ef2207a7ce20879a.038c97e70dfb140d.79ae5f638b7fb570
     c185fa5677e76da4.e132fc2315fb5cca.0a01b682775536bf.93e6807dba690196
@@ -42195,11 +42195,11 @@
   after
     efa720823a22506a.ef2207a7ce20879a.038c97e70dfb140d.79ae5f638b7fb570
     c185fa5677e76da4.e132fc2315fb5cca.0a01b682775536bf.93e6807dba690196
-    0000000000000000.0000000000000000.947b64887b648894.fbb6e4cfb6e4cffb
+    0000000000000000.0000000000000000.00000000000002fa.00000000000001ac
     b292e990c1582495.fc5752cdace089d9.dbc934aa309fa01f.b52974ff7959ff4e
     75cd3f403f772a37
 
-VAESKEYGENASSIST_0x00(reg)
+VPSADBW_128(reg)
   before
     cfd8e56571bf6c64.8958f5cf051b37a5.dd05abd33501580e.5db48a0eb7a65f25
     1f9662dca8bb0280.6fae08b3d9a2bfa9.c7801d34b6529d9d.c008eae27faa754a
@@ -42207,12 +42207,12 @@
     115ad36e9b051938.d739391f9e251c40.220c3db711b17778.991fb98a44d6949f
     c779203679171627
   after
-    0000000000000000.0000000000000000.4afafa06fafa064a.c9e1dc70e1dc70c9
+    0000000000000000.0000000000000000.0000000000000265.000000000000025e
     1f9662dca8bb0280.6fae08b3d9a2bfa9.c7801d34b6529d9d.c008eae27faa754a
     c153b31083f92838.3f60a02a58f677ce.1414a55ccb5e9332.e093d012a5b69db9
     115ad36e9b051938.d739391f9e251c40.220c3db711b17778.991fb98a44d6949f
     c779203679171627
-VAESKEYGENASSIST_0x00(mem)
+VPSADBW_128(mem)
   before
     456d81035f84de7e.6bf8be608e6a132b.12074d7ec83b6a2a.4bb6e3b124d7851c
     f1c758db1229aad0.2b7a7053f8b450be.cc945a32f1421cb9.ed5c92b79f5df9ca
@@ -42222,11 +42222,11 @@
   after
     456d81035f84de7e.6bf8be608e6a132b.12074d7ec83b6a2a.4bb6e3b124d7851c
     f1c758db1229aad0.2b7a7053f8b450be.cc945a32f1421cb9.ed5c92b79f5df9ca
-    0000000000000000.0000000000000000.f3c9c5e3c9c5e3f3.c8b34e11b34e11c8
+    0000000000000000.0000000000000000.00000000000002ad.000000000000036a
     3fdc5960524d3813.4d541aed9f288572.2c1e4c4fb2599f74.07cffc923eb701f1
     3934ae419aa30ec4
 
-VAESKEYGENASSIST_0x31(reg)
+VPSIGNB_128(reg)
   before
     52c55aabcf1f704f.9a2f7be516e3745c.6746096c146af5ec.8bb3298e8280e7f9
     afd0fb3b78b56541.9218042618e2a250.564bb09b6fc299b5.d938efd3c1c985d2
@@ -42234,12 +42234,12 @@
     a67f0d829865f204.c8dc378c4348c6e7.28bc14be49e16be6.b1412320fef2ad32
     f35d89ff34eab111
   after
-    0000000000000000.0000000000000000.9bbce41abce42b9b.67a1bce5a1bcd467
+    0000000000000000.0000000000000000.56b5b0656f3e67b5.2738efd33fc985d2
     afd0fb3b78b56541.9218042618e2a250.564bb09b6fc299b5.d938efd3c1c985d2
     ac9f8e5f32f32744.02636e0f72557f1a.78ae0be84dbbac79.f178190a8c40332b
     a67f0d829865f204.c8dc378c4348c6e7.28bc14be49e16be6.b1412320fef2ad32
     f35d89ff34eab111
-VAESKEYGENASSIST_0x31(mem)
+VPSIGNB_128(mem)
   before
     9599c7954934f9f4.f7bc76104695032f.be4ed989a5c835e3.c1c1c98900c012a6
     71c15acd5add4208.fca2c475da12976f.c287d2f2b4e08639.a10925b50ee5dd65
@@ -42249,11 +42249,11 @@
   after
     9599c7954934f9f4.f7bc76104695032f.be4ed989a5c835e3.c1c1c98900c012a6
     71c15acd5add4208.fca2c475da12976f.c287d2f2b4e08639.a10925b50ee5dd65
-    0000000000000000.0000000000000000.a7ae2f04ae2f35a7.a77878ec7878dda7
+    0000000000000000.0000000000000000.3e872e0e4c2086c7.5ff7db4b001bdd9b
     4b046cd3dd7ac672.929800751d1c32df.6079b7b94b09c0a6.a292c2e09c2fce93
     7c6afcb8556c6b59
 
-VAESKEYGENASSIST_0x31(reg)
+VPSIGNB_128(reg)
   before
     0bb5cca0d41e1dcf.01b8e37988857920.db40e5e706c2b268.b2cb9bee0b322114
     adbf3006b6d21ea1.61879f719f201caf.48c2a0e043e3a4b6.8213c540e824558c
@@ -42261,12 +42261,12 @@
     9640a2f8106d0006.93a9d3077e2f261d.fe7f85192ac8cd53.07b4dbe76b90254e
     76a6c015492239ee
   after
-    0000000000000000.0000000000000000.bd964540964571bd.eeaca4f9aca4c8ee
+    0000000000000000.0000000000000000.48c2a02043e3a4b6.7e133bc018dc558c
     adbf3006b6d21ea1.61879f719f201caf.48c2a0e043e3a4b6.8213c540e824558c
     bcd423549613ab7a.483e1ba73d546d4a.35682ccd700c4475.aa1db199ffea173c
     9640a2f8106d0006.93a9d3077e2f261d.fe7f85192ac8cd53.07b4dbe76b90254e
     76a6c015492239ee
-VAESKEYGENASSIST_0x31(mem)
+VPSIGNB_128(mem)
   before
     d1bddb0fb4ad0f49.954fa75dc16d58f3.1c94437e7fbc0455.ff52a82f0ca47cfa
     f5c6a8c1c83c658b.164c30ef459ef1eb.c0cbe7f65b08c31e.942f907db32a8d16
@@ -42276,11 +42276,11 @@
   after
     d1bddb0fb4ad0f49.954fa75dc16d58f3.1c94437e7fbc0455.ff52a82f0ca47cfa
     f5c6a8c1c83c658b.164c30ef459ef1eb.c0cbe7f65b08c31e.942f907db32a8d16
-    0000000000000000.0000000000000000.f39c222b9c221af3.151600f31600c215
+    0000000000000000.0000000000000000.c035e7f65bf8c31e.6c2f707db3d68dea
     08de49fd5e987c72.0f44bc4a34c4d0ad.c94bbd9e160ad212.e9339f6ebe6ac460
     62f2bee95b3b62e6
 
-VAESKEYGENASSIST_0x31(reg)
+VPSIGNB_128(reg)
   before
     dfea934c2be75191.b0841460177cb66f.3ed6b6ebd7d18fd0.e72ee6a42dd89b94
     bc661901ccfbcf0d.904d822ae9955e03.5f872469bc3f7eae.8f8c335d8f953458
@@ -42288,12 +42288,12 @@
     051f2815f088632b.6b7335a74b93eb9f.e87549adbe70dc4d.f0eb2a95a60ac950
     6185ccec93da3ddd
   after
-    0000000000000000.0000000000000000.c78a3a4d8a3a7cc7.8d0b23cc0b23fd8d
+    0000000000000000.0000000000000000.a179246944c18252.718c33a38f9534a8
     bc661901ccfbcf0d.904d822ae9955e03.5f872469bc3f7eae.8f8c335d8f953458
     54b44c75da011607.85030e49f1ee315a.cfa20131809bd9f4.9e3221b4594c5a87
     051f2815f088632b.6b7335a74b93eb9f.e87549adbe70dc4d.f0eb2a95a60ac950
     6185ccec93da3ddd
-VAESKEYGENASSIST_0x31(mem)
+VPSIGNB_128(mem)
   before
     cdca82a63bc8715a.2af2aa4cab19f124.1e697132119047ff.074af84b134ac266
     1087c9adbae122f5.1e7acc85a642fd9f.7ab140d562f203a5.886f0b751bb6c8eb
@@ -42303,11 +42303,11 @@
   after
     cdca82a63bc8715a.2af2aa4cab19f124.1e697132119047ff.074af84b134ac266
     1087c9adbae122f5.1e7acc85a642fd9f.7ab140d562f203a5.886f0b751bb6c8eb
-    0000000000000000.0000000000000000.2372f99272f9a323.b3c5d670c5d641b3
+    0000000000000000.0000000000000000.7ab140d5620e035b.886ff5751bb638eb
     8b99f656b0c1eb2f.e7d9e5b2cd8a7fca.9d6684130f138576.20d44a22b17223e7
     efac6e7c77d9f0b6
 
-VAESKEYGENASSIST_0xB2(reg)
+VPSIGNW_128(reg)
   before
     9004e6136102cda1.7a86d5d05ea17a27.7448d47d32c16dd1.1b6cf286a4eac5f8
     5f26ac530879f554.b11b354753db76eb.409b53fb47bfc80b.b3f3e1c132565371
@@ -42315,12 +42315,12 @@
     f7fc177e037e19c0.646c64e1848ea48a.0921f6c0f242b7c2.9eb73740ab194bf6
     a98c955bcd8a2d5a
   after
-    0000000000000000.0000000000000000.46d3c062d3c0d046.e709e83809e88ae7
+    0000000000000000.0000000000000000.bf6553fbb84137f5.b3f31e3fcdaaac8f
     5f26ac530879f554.b11b354753db76eb.409b53fb47bfc80b.b3f3e1c132565371
     b860bea80ac9a57a.0b2390a9ac7b9ba8.a91f6098a811cd22.40c8cfb0d561eb0c
     f7fc177e037e19c0.646c64e1848ea48a.0921f6c0f242b7c2.9eb73740ab194bf6
     a98c955bcd8a2d5a
-VAESKEYGENASSIST_0xB2(mem)
+VPSIGNW_128(mem)
   before
     3c1266ef59be4e66.7847b4428e248dd1.98c02cdbf81f4ebc.bdeb11e0c0dec398
     351725e66bc36a43.978d8f5e48483c5a.82ec6483243a556b.22caae62af722d50
@@ -42330,11 +42330,11 @@
   after
     3c1266ef59be4e66.7847b4428e248dd1.98c02cdbf81f4ebc.bdeb11e0c0dec398
     351725e66bc36a43.978d8f5e48483c5a.82ec6483243a556b.22caae62af722d50
-    0000000000000000.0000000000000000.b946bac346ba71b9.e17ae9307ae982e1
+    0000000000000000.0000000000000000.7d146483dbc6556b.dd36ae62508ed2b0
     c5c95db28e6e8127.1e39f453b6383e83.edfb158e114069ef.6af65a405eaf0b14
     07dc62745671f678
 
-VAESKEYGENASSIST_0xB2(reg)
+VPSIGNW_128(reg)
   before
     c306dcbbdf5a2f6e.150fce5ed82cf584.3f377502a31c097a.247786c80a42ee1c
     fbc1c28194f6f1a2.39031e1e18eb5464.6e6126bb2eadff9a.83fa57612bffbf75
@@ -42342,12 +42342,12 @@
     4f1ac73af4790472.7124488ae799c15c.656304f891075fff.2549095c54d7395d
     20abe396940b5944
   after
-    0000000000000000.0000000000000000.1e6f7cce6f7c7c1e.1a6900406900f21a
+    0000000000000000.0000000000000000.6e6126bbd153ff9a.7c065761d401408b
     fbc1c28194f6f1a2.39031e1e18eb5464.6e6126bb2eadff9a.83fa57612bffbf75
     0b59123212d27abf.0f70c8de68b659f3.060101e9f4775d8d.e452044390829a27
     4f1ac73af4790472.7124488ae799c15c.656304f891075fff.2549095c54d7395d
     20abe396940b5944
-VAESKEYGENASSIST_0xB2(mem)
+VPSIGNW_128(mem)
   before
     b3460ddf6b29b508.234fdd05d777cc66.3de91a0eafa048cc.e5d52a549fe8409d
     b8e50322f53e0bd4.e34651ff56590d48.4d8cbb57dcd8a96e.e4a2706abda73d13
@@ -42357,11 +42357,11 @@
   after
     b3460ddf6b29b508.234fdd05d777cc66.3de91a0eafa048cc.e5d52a549fe8409d
     b8e50322f53e0bd4.e34651ff56590d48.4d8cbb57dcd8a96e.e4a2706abda73d13
-    0000000000000000.0000000000000000.ab271e10271ea2ab.20d90357d903e520
+    0000000000000000.0000000000000000.4d8cbb572328a96e.1b5e706a42593d13
     8c5e4446957a8f37.97a53f3199f7ed85.ad9c56e4d709ecfb.cb7c486f93ec7b35
     6c21d338838b333a
 
-VAESKEYGENASSIST_0xB2(reg)
+VPSIGNW_128(reg)
   before
     fa516d6af337f7c6.12d08700e2b93725.43a6b24195ca0438.b5a14901dd19463d
     d25712707c7c0385.7c768663521fc7cb.4b9873309eb28488.71b3fb91b88b6a62
@@ -42369,12 +42369,12 @@
     d11a6fad4f03e14f.678da8d80d8e92f3.df7fcb5a46eab2b2.783288bf5ebe0304
     7c365c346298efd8
   after
-    0000000000000000.0000000000000000.f92bc6a22bc610f9.13aee03caee08e13
+    0000000000000000.0000000000000000.4b9873309eb27b78.8e4d046f47756a62
     d25712707c7c0385.7c768663521fc7cb.4b9873309eb28488.71b3fb91b88b6a62
     5181bfb8bce79225.a41bbd5c02b7fc57.0bc77c695038aa22.bea0e68284681596
     d11a6fad4f03e14f.678da8d80d8e92f3.df7fcb5a46eab2b2.783288bf5ebe0304
     7c365c346298efd8
-VAESKEYGENASSIST_0xB2(mem)
+VPSIGNW_128(mem)
   before
     a478decdab039740.af6d1ebbd05c2cb2.a197c4c190af44cb.230b5b6e1c53d8e3
     cdc48b775609b465.48c7c84edc7faff8.2e048c05a626cf0c.33b828116fff5762
@@ -42384,11 +42384,11 @@
   after
     a478decdab039740.af6d1ebbd05c2cb2.a197c4c190af44cb.230b5b6e1c53d8e3
     cdc48b775609b465.48c7c84edc7faff8.2e048c05a626cf0c.33b828116fff5762
-    0000000000000000.0000000000000000.783288ae32881c78.9f262b8b262b399f
+    0000000000000000.0000000000000000.d1fc73fb59dacf0c.33b828116fffa89e
     92a952a93f1c449d.16c0ffb402504bdf.b23a104bfd475f78.26a56ab5fa5252f8
     c27dd78d6a114768
 
-VAESKEYGENASSIST_0xFF(reg)
+VPSIGND_128(reg)
   before
     9aa671a4c74385d5.e6da660bb6402f06.04f7825e5517ddd8.609bc5257609dcfb
     096b3467ac7449eb.ab45932cfe307fdf.1d64f23da2d79664.d1901509f2522296
@@ -42396,12 +42396,12 @@
     20fd269d7f0552c6.f8f92c6073a6458b.3b14824c9c7371e8.6c657b9f65a6f8c7
     4edd892a93ca00b4
   after
-    0000000000000000.0000000000000000.aeeafcadeafc52ae.11f8690cf869f311
+    0000000000000000.0000000000000000.e29b0dc35d28699c.2e6feaf70daddd6a
     096b3467ac7449eb.ab45932cfe307fdf.1d64f23da2d79664.d1901509f2522296
     6d1a1d40b531ce58.bdb657fa34f9f351.bb5548be861cb430.e1e47ee38e2ded76
     20fd269d7f0552c6.f8f92c6073a6458b.3b14824c9c7371e8.6c657b9f65a6f8c7
     4edd892a93ca00b4
-VAESKEYGENASSIST_0xFF(mem)
+VPSIGND_128(mem)
   before
     6319226e35a4c16a.80614de9a67c0fe1.38da904ad84332b7.f9ee9a5281670937
     87e5c4596740f714.e7928d90c5224156.5924fea47edd7601.512f8e3ed084baca
@@ -42411,11 +42411,11 @@
   after
     6319226e35a4c16a.80614de9a67c0fe1.38da904ad84332b7.f9ee9a5281670937
     87e5c4596740f714.e7928d90c5224156.5924fea47edd7601.512f8e3ed084baca
-    0000000000000000.0000000000000000.d607579f075760d6.009928479928b800
+    0000000000000000.0000000000000000.5924fea4812289ff.aed071c22f7b4536
     6b5c10d0e8f0b0f6.3e8a499f5c2ef8fd.ae27ea58ff35f1a2.3f15f8751e6b516a
     8d536698554db1d0
 
-VAESKEYGENASSIST_0xFF(reg)
+VPSIGND_128(reg)
   before
     e5279f5066881829.e4a0b335701bac87.e6e9bddf0daaf487.9a775e8a120ca151
     a3de9f0aeea8c322.dca34ef0f8390cbb.05453a2a2586551b.d661ceddd60f97ce
@@ -42423,12 +42423,12 @@
     c025e530d0c8d4a2.b8195c18757bebc3.1c244092018c3a0e.b3328a92e3ca49e3
     0bb2d0cc639a7bd4
   after
-    0000000000000000.0000000000000000.5599e99a99e96555.e209c89209c86de2
+    0000000000000000.0000000000000000.fabac5d62586551b.d661ceddd60f97ce
     a3de9f0aeea8c322.dca34ef0f8390cbb.05453a2a2586551b.d661ceddd60f97ce
     23c462308839ee66.2f325ded9a558dc1.f9ebbced434d5964.40b1b33b684a9145
     c025e530d0c8d4a2.b8195c18757bebc3.1c244092018c3a0e.b3328a92e3ca49e3
     0bb2d0cc639a7bd4
-VAESKEYGENASSIST_0xFF(mem)
+VPSIGND_128(mem)
   before
     23fb00d705c6e543.d84d237463e0b281.5524c75da2b8e1ed.cb3fc187fbce34c6
     d9da969ee55b415d.c687186add0ec4b1.e11f1ba840172d6c.63873a36ce9f8538
@@ -42438,11 +42438,11 @@
   after
     23fb00d705c6e543.d84d237463e0b281.5524c75da2b8e1ed.cb3fc187fbce34c6
     d9da969ee55b415d.c687186add0ec4b1.e11f1ba840172d6c.63873a36ce9f8538
-    0000000000000000.0000000000000000.4cfc3639fc36c64c.171f75871f757817
+    0000000000000000.0000000000000000.e11f1ba8bfe8d294.9c78c5ca31607ac8
     8b8ae510cceec141.93651719f3d973ae.35146a01396cb118.b9cd0a776d2017f9
     306357e071e8d19f
 
-VAESKEYGENASSIST_0xFF(reg)
+VPSIGND_128(reg)
   before
     ff568eb4bd6ed0b0.40f296930c035e63.2ba01aaac88e88d4.b5a65fe7cc7a639d
     82f2aa5fee4051d5.01219d82f9b1dddf.091ec49cf489c1f9.95582b823fdb5927
@@ -42450,12 +42450,12 @@
     155482ea6ef6c812.1bff9e554d077397.0612fd53be7f8df3.e14c3d8c34c203f7
     05257ad2ee623097
   after
-    0000000000000000.0000000000000000.39c4e57dc4e58239.ba7942d6794229ba
+    0000000000000000.0000000000000000.f6e13b64f489c1f9.6aa7d47ec024a6d9
     82f2aa5fee4051d5.01219d82f9b1dddf.091ec49cf489c1f9.95582b823fdb5927
     1682a74da0ea90bd.ace176c9b004fae2.882a115b115559ca.aff64cc0ae9950e1
     155482ea6ef6c812.1bff9e554d077397.0612fd53be7f8df3.e14c3d8c34c203f7
     05257ad2ee623097
-VAESKEYGENASSIST_0xFF(mem)
+VPSIGND_128(mem)
   before
     f94f7f7ef68491ea.dcb235a3f5f33680.2b479010eac6022b.dd2185f09492991f
     9794c97c6b34e21f.c7e9bee2cf6a16b5.b985c8e8a64d64ca.6ba2a49f321ab8fb
@@ -42465,11 +42465,11 @@
   after
     f94f7f7ef68491ea.dcb235a3f5f33680.2b479010eac6022b.dd2185f09492991f
     9794c97c6b34e21f.c7e9bee2cf6a16b5.b985c8e8a64d64ca.6ba2a49f321ab8fb
-    0000000000000000.0000000000000000.caf1a09ff1a060ca.8cc1fd68c1fd978c
+    0000000000000000.0000000000000000.b985c8e859b29b36.945d5b61cde54705
     45a2181f066f48da.791240a6f3fb1b1e.ba12fa9be4e590d7.182d97df30bb2372
     efcf6349c8ebe664
 
-VPCLMULQDQ_0x00(reg)
+VPMULHRSW_128(reg)
   before
     ed13b77397c1acb7.0c03179b6512d4b8.f79c3003732cb9ab.e7faed4fa00ed29d
     6c478ecb39c8b214.eeb049199f744127.0a2ee697b809b7ad.000716cfe92fd61e
@@ -42477,12 +42477,12 @@
     61aab5b2639a6ea3.741c3bcd17a2ac66.5c9e9114fff5cac3.69c3fae394891800
     720aad502ddbcdb9
   after
-    0000000000000000.0000000000000000.0002a230c0eb7516.943236fa9ee95744
+    0000000000000000.0000000000000000.010aed61cba6d013.fffefd55065ce261
     6c478ecb39c8b214.eeb049199f744127.0a2ee697b809b7ad.000716cfe92fd61e
     c9b5e4bc498c342a.c7742c86d1a04a52.0d165dce5d1d54d1.e206f107dc545a86
     61aab5b2639a6ea3.741c3bcd17a2ac66.5c9e9114fff5cac3.69c3fae394891800
     720aad502ddbcdb9
-VPCLMULQDQ_0x00(mem)
+VPMULHRSW_128(mem)
   before
     d7a68738c45535dd.8e72fd1a247d9b2c.cf75f2da8b86238f.53137fd5391c562f
     7565038875040b97.ad59b95e28c1f870.b549cd984c596af8.4dc1217da81e34bf
@@ -42492,11 +42492,11 @@
   after
     d7a68738c45535dd.8e72fd1a247d9b2c.cf75f2da8b86238f.53137fd5391c562f
     7565038875040b97.ad59b95e28c1f870.b549cd984c596af8.4dc1217da81e34bf
-    0000000000000000.0000000000000000.177e0ed14be7928d.e8b41c8a5a460f25
+    0000000000000000.0000000000000000.1c56052eba871db7.32772172d8ca2384
     cc77d112922ef47e.31b37a2e669e31db.9294e0dc1efa5b3c.bff8763393e4d402
     ee18201947c00f0c
 
-VPCLMULQDQ_0x00(reg)
+VPMULHRSW_128(reg)
   before
     90a17095a0a88ceb.3d631c2237c27e04.4fbf7891d94e855a.41a4103a69e07d6f
     03e060153927864c.57a1f94b65ba68d1.ce19d882fe90f945.eb5f54f96fe45f93
@@ -42504,12 +42504,12 @@
     c8aa16ce9c1be443.f6425995ce0746ed.62eab3bad0f7300d.a00a094e1e78565c
     639172bbfe1fe359
   after
-    0000000000000000.0000000000000000.233185339c8490b3.cb5c84a4412b16c5
+    0000000000000000.0000000000000000.fbb11ff5feb602e1.ee801b3c4360cf56
     03e060153927864c.57a1f94b65ba68d1.ce19d882fe90f945.eb5f54f96fe45f93
     a11fee04aec93adb.f6fde47839226b10.0b0e986c72efc947.6c9329064d13bed3
     c8aa16ce9c1be443.f6425995ce0746ed.62eab3bad0f7300d.a00a094e1e78565c
     639172bbfe1fe359
-VPCLMULQDQ_0x00(mem)
+VPMULHRSW_128(mem)
   before
     91f3df3b0a1520f7.d2cfd2df9fa8bf30.333ed48e4174b395.2ff925dab5356b42
     05feccb95d65ca62.1dd91fa352fc0850.88bbd24fad757034.ce87eb37bc34b693
@@ -42519,11 +42519,11 @@
   after
     91f3df3b0a1520f7.d2cfd2df9fa8bf30.333ed48e4174b395.2ff925dab5356b42
     05feccb95d65ca62.1dd91fa352fc0850.88bbd24fad757034.ce87eb37bc34b693
-    0000000000000000.0000000000000000.1d8a2fe10a9dc879.cd186d45eed244e6
+    0000000000000000.0000000000000000.d0410f82d5cbbd03.ed75f9da279dc279
     343b185e4b44544d.e2ca5ef4392bd4d3.ef6b44dae264c405.f24e5f59a2a66b38
     2f2007f5b9324de4
 
-VPCLMULQDQ_0x00(reg)
+VPMULHRSW_128(reg)
   before
     ada1f17e62ae2e5b.a6056d5e1debac25.144a4859a51dce8f.b836b07be26bd490
     ca1d1a6139a84c4a.cea7340ca61c617a.f6dfb2223207262d.09b28f954d3623c1
@@ -42531,12 +42531,12 @@
     4e351be1e4442a3f.b5a201234f4ed149.3b78fb8c1df0dfbd.b8f192e0cd486dc7
     cc4bb0ea1ca8e0f4
   after
-    0000000000000000.0000000000000000.06b06b7541ce43cd.7d8fe9448f5c1105
+    0000000000000000.0000000000000000.01de3d9c30400743.fb34b00424af1ea9
     ca1d1a6139a84c4a.cea7340ca61c617a.f6dfb2223207262d.09b28f954d3623c1
     e1e07f09dbabe15c.8aede65503e42e77.e5d59ab97b741858.c0ad5b123cd16dc5
     4e351be1e4442a3f.b5a201234f4ed149.3b78fb8c1df0dfbd.b8f192e0cd486dc7
     cc4bb0ea1ca8e0f4
-VPCLMULQDQ_0x00(mem)
+VPMULHRSW_128(mem)
   before
     da872f1c43fc8277.6c6aea57effd629c.2a94ff63a766041c.5513d106b308b807
     bd718d6261500f7e.99c9e9d69865c722.c78d5e022639831b.8ff31893da47dfe3
@@ -42546,11 +42546,11 @@
   after
     da872f1c43fc8277.6c6aea57effd629c.2a94ff63a766041c.5513d106b308b807
     bd718d6261500f7e.99c9e9d69865c722.c78d5e022639831b.8ff31893da47dfe3
-    0000000000000000.0000000000000000.29bacb8540b51050.cc5d5e015ac3d7a9
+    0000000000000000.0000000000000000.ed39ff8de58bfbfe.b587f6fb16af120f
     717ed3daec2ad8c2.8c38639f376b0253.e5c82d090b3e5950.d4b2ea96496b0600
     96296de4c9687e99
 
-VPCLMULQDQ_0x01(reg)
+VBROADCASTF128(reg)
   before
     e81552f549bc3473.fa39b3e592c78d57.0be0d8c163225257.1ea1954aa88727dd
     26c1933566f4643b.c9d261b39d951c20.08e26b9c9fb7bd33.efb14d98ddbc3147
@@ -42558,12 +42558,12 @@
     d68d1df3e63d2044.a4ce194c54f2bbf9.eb28df2eb1a8d621.c5aa9d107e13ed60
     822b2e12214e1567
   after
-    0000000000000000.0000000000000000.0185d23703961cf9.63470bbe46ee177b
+    e81552f549bc3473.fa39b3e592c78d57.0be0d8c163225257.1ea1954aa88727dd
     26c1933566f4643b.c9d261b39d951c20.08e26b9c9fb7bd33.efb14d98ddbc3147
     ac7b2e10bc9b499d.b8155a312a9f4247.de8c199d84b58092.32c6d1e1c6e635b9
     d68d1df3e63d2044.a4ce194c54f2bbf9.eb28df2eb1a8d621.c5aa9d107e13ed60
     822b2e12214e1567
-VPCLMULQDQ_0x01(mem)
+VBROADCASTF128(mem)
   before
     4613fed1cca36bfb.00445f49806724dd.6ac91aef38994361.8903b8bdbf1dfd8c
     ee2f8b3a9a1fa948.86eced7d27a49313.e4d1da05f1a095ac.1669a0b44c9f2f7e
@@ -42573,11 +42573,11 @@
   after
     4613fed1cca36bfb.00445f49806724dd.6ac91aef38994361.8903b8bdbf1dfd8c
     ee2f8b3a9a1fa948.86eced7d27a49313.e4d1da05f1a095ac.1669a0b44c9f2f7e
-    0000000000000000.0000000000000000.75abf887726e7bc5.f6f70383994c11d0
-    5532cabb12bad0bb.163ee1340a899d09.673c833f54ff8a99.68068e8f52fba6a9
+    544a503aa8cd8c79.c4d1c4fd7781a793.efb4d37c9c136e05.eca69481f4baa8a3
+    6ac91aef38994361.8903b8bdbf1dfd8c.6ac91aef38994361.8903b8bdbf1dfd8c
     e7d48c4a03ec6339
 
-VPCLMULQDQ_0x01(reg)
+VBROADCASTF128(reg)
   before
     c35d891ea21c1c02.cdb274abf2f13039.d7813f8e7f48b020.2936653a356fa494
     59ee8277cb140cae.9995c9f4677e6920.65e4da77704a1d85.0f6ef5595c707a21
@@ -42585,12 +42585,12 @@
     245254682e928561.98b76a467acb55d8.553db8a63749f5e7.bac710b4eb5244a3
     378193c78a4cb1f0
   after
-    0000000000000000.0000000000000000.200dff083980ac52.cbb9a5c2b5870759
+    c35d891ea21c1c02.cdb274abf2f13039.d7813f8e7f48b020.2936653a356fa494
     59ee8277cb140cae.9995c9f4677e6920.65e4da77704a1d85.0f6ef5595c707a21
     06d171c11b6371ea.93a847848a6e379c.1bb4af5b791c20e3.f6b0b089e50dc56d
     245254682e928561.98b76a467acb55d8.553db8a63749f5e7.bac710b4eb5244a3
     378193c78a4cb1f0
-VPCLMULQDQ_0x01(mem)
+VBROADCASTF128(mem)
   before
     49a8b4afdf05ca80.10bf26d99f2f84c0.848eac2650a48001.6ecbf3c4455ed73c
     cc09f057068c487e.2663e37e0ac5acb2.33f98b102b027442.c4a95b223fe60390
@@ -42600,11 +42600,11 @@
   after
     49a8b4afdf05ca80.10bf26d99f2f84c0.848eac2650a48001.6ecbf3c4455ed73c
     cc09f057068c487e.2663e37e0ac5acb2.33f98b102b027442.c4a95b223fe60390
-    0000000000000000.0000000000000000.0ba253a6a2e37ce0.f8f8487fae77d178
-    95a9a596372d6a76.407e0f18400d6202.4aba0db25983a6bf.9389a34a6a7f29df
+    9c70c1aa19eaea17.c28987c50ce037e4.81c382f024f3edc8.b225ec2ac26db58c
+    848eac2650a48001.6ecbf3c4455ed73c.848eac2650a48001.6ecbf3c4455ed73c
     c5227bedd2a99a33
 
-VPCLMULQDQ_0x01(reg)
+VBROADCASTF128(reg)
   before
     a33c707f97774534.938017067a6185c8.fd8e76e543d769b7.6aa8a843e6bc5c52
     88237e6b5473668f.72c093e6fe90f739.5305b897b0ca87b0.bd5ad08de6accbae
@@ -42612,12 +42612,12 @@
     db87d606272af802.43af9aa63b14ce26.3d58bd5a3a5dfb1c.6c3ab400b0dfc36f
     7fff6801b33ac42d
   after
-    0000000000000000.0000000000000000.063e08c23df67efb.7f2539a79f540520
+    a33c707f97774534.938017067a6185c8.fd8e76e543d769b7.6aa8a843e6bc5c52
     88237e6b5473668f.72c093e6fe90f739.5305b897b0ca87b0.bd5ad08de6accbae
     d223a11fa52b38f0.0e379622e0c87bf4.9f2fd19a2473f998.1f9c007e755eaffe
     db87d606272af802.43af9aa63b14ce26.3d58bd5a3a5dfb1c.6c3ab400b0dfc36f
     7fff6801b33ac42d
-VPCLMULQDQ_0x01(mem)
+VBROADCASTF128(mem)
   before
     36b9996c997b6e63.009d178d75fde272.edf51d5f2b81acfa.89cb79438f15c8e8
     6c32c12d7eaf7c3e.9eaf621e2c2f32eb.e8d59a37ce1ad09d.ded600c1be259ea7
@@ -42627,11 +42627,11 @@
   after
     36b9996c997b6e63.009d178d75fde272.edf51d5f2b81acfa.89cb79438f15c8e8
     6c32c12d7eaf7c3e.9eaf621e2c2f32eb.e8d59a37ce1ad09d.ded600c1be259ea7
-    0000000000000000.0000000000000000.738cba1e0fc11715.b90d556a1284d688
-    c494eb61b71db791.b1fa041243e1f2ab.409273f89601deff.18df5f2d1c834fb0
+    fd375e307fe1abe9.0f0ab326e84c231b.0f1b8e1b3debf83b.9ac34e40641bb706
+    edf51d5f2b81acfa.89cb79438f15c8e8.edf51d5f2b81acfa.89cb79438f15c8e8
     b47630f282e8a452
 
-VPCLMULQDQ_0x10(reg)
+VPEXTRW_128_0x0(reg)
   before
     cad3bcfd33d6f097.9f15e5ac43705b62.decb534cdc79db49.5608c7b9f5673e15
     b644ffb9cbd9702d.6986c6fd3ee55587.f3c89b424da019a1.2c470549752ad6ab
@@ -42639,12 +42639,12 @@
     7f8d9bf31d51faf6.39673262f366357f.467a060e27cd872e.8d532f8b49f39901
     ceb81414d6133c1a
   after
-    0000000000000000.0000000000000000.0ac4108c80e3997e.dc4f9dd6aa757a79
+    cad3bcfd33d6f097.9f15e5ac43705b62.decb534cdc79db49.5608c7b9f5673e15
     b644ffb9cbd9702d.6986c6fd3ee55587.f3c89b424da019a1.2c470549752ad6ab
     d313f591e57e5fbd.fdb20c41c5895f2c.4c3fd85f32e3ea5f.a01ca996325460eb
     7f8d9bf31d51faf6.39673262f366357f.467a060e27cd872e.8d532f8b49f39901
-    ceb81414d6133c1a
-VPCLMULQDQ_0x10(mem)
+    0000000000003e15
+VPEXTRW_128_0x0(mem)
   before
     4116d31df3bf0762.15feeb4a10dc7d82.f86fb44ee58a95aa.3bc622bdcaea2fba
     c03be892bf03b404.f0b2e30259ad240d.15970fefb60139d9.886f26d7b4c71cb1
@@ -42652,13 +42652,13 @@
     56050571ce84a609.e913b846604fcdd3.dd773c0566153ff6.9a08dcfdd3efb88a
     178f84e03f51dfc5
   after
-    4116d31df3bf0762.15feeb4a10dc7d82.f86fb44ee58a95aa.3bc622bdcaea2fba
+    4116d31df3bf0762.15feeb4a10dc7d82.f86fb44ee58a95aa.3bc622bdcaea8bbc
     c03be892bf03b404.f0b2e30259ad240d.15970fefb60139d9.886f26d7b4c71cb1
-    0000000000000000.0000000000000000.7bd086be8bfcf985.deebc9ac014cf74a
+    29f1cf6054ebff2d.6ef57e87954f2a44.6eabbe3382d6de39.89c110c883ef8bbc
     56050571ce84a609.e913b846604fcdd3.dd773c0566153ff6.9a08dcfdd3efb88a
     178f84e03f51dfc5
 
-VPCLMULQDQ_0x10(reg)
+VPEXTRW_128_0x0(reg)
   before
     5ca406de63a33b19.244304b34ad963c3.bf578ea954384665.3fc608517eca1a3b
     c5915d64dc710934.70774a10e3f6f387.4b0efb1d1096d4a7.71669b03e5022935
@@ -42666,12 +42666,12 @@
     73267ab43caeea69.eef099d0deba7be0.f3058aea49e21aea.b0c40a491129d5f6
     771bdeb60f2fea16
   after
-    0000000000000000.0000000000000000.297454e49a6a492a.22557f56d80aac94
+    5ca406de63a33b19.244304b34ad963c3.bf578ea954384665.3fc608517eca1a3b
     c5915d64dc710934.70774a10e3f6f387.4b0efb1d1096d4a7.71669b03e5022935
     aea385dc464685bf.146d5276b6e81183.e884fb0f2df6b144.4d217207b7c8280f
     73267ab43caeea69.eef099d0deba7be0.f3058aea49e21aea.b0c40a491129d5f6
-    771bdeb60f2fea16
-VPCLMULQDQ_0x10(mem)
+    0000000000001a3b
+VPEXTRW_128_0x0(mem)
   before
     7cf26a38cce9249a.706538575a3575dc.d8ce99097779ebcd.c9dda41900e94b42
     9c152bbd64603faf.01aebc313d6862c4.afd1d00f9e301d74.c458460aed947ffb
@@ -42679,13 +42679,13 @@
     9e6e387c97ba063b.4f8a033ac00051a6.9479d13005b7bba2.9d660fdfdb0ce33a
     32912e9b13ef8b19
   after
-    7cf26a38cce9249a.706538575a3575dc.d8ce99097779ebcd.c9dda41900e94b42
+    7cf26a38cce9249a.706538575a3575dc.d8ce99097779ebcd.c9dda41900e9f4be
     9c152bbd64603faf.01aebc313d6862c4.afd1d00f9e301d74.c458460aed947ffb
-    0000000000000000.0000000000000000.590a9d7feb91ff49.eed917bea7f6898f
+    b34f9b2ff4a2f681.824b01ae80d2ecce.4fc6b9cd6febcf02.42c16b28ad71f4be
     9e6e387c97ba063b.4f8a033ac00051a6.9479d13005b7bba2.9d660fdfdb0ce33a
     32912e9b13ef8b19
 
-VPCLMULQDQ_0x10(reg)
+VPEXTRW_128_0x0(reg)
   before
     5d8fc5c8f2a82608.373c7d8f6ab52b09.c3b5bf41987ccbf7.5bb692227d9e9e81
     7bacced314c3f1b2.5b86e754889e2018.3c192f2fa5d5966e.7e487a90f2af34ca
@@ -42693,12 +42693,12 @@
     fb722b2e8e4c07e9.b4bd16a4176a6da9.a9bb2071cc47137d.4b9fac914478674d
     adfbeefc59497dde
   after
-    0000000000000000.0000000000000000.06630ab678334520.e4dafca0d9c85e96
+    5d8fc5c8f2a82608.373c7d8f6ab52b09.c3b5bf41987ccbf7.5bb692227d9e9e81
     7bacced314c3f1b2.5b86e754889e2018.3c192f2fa5d5966e.7e487a90f2af34ca
     e633472614ca28c4.e618f0b70e81a294.150251708294f0b7.dafd046780f338aa
     fb722b2e8e4c07e9.b4bd16a4176a6da9.a9bb2071cc47137d.4b9fac914478674d
-    adfbeefc59497dde
-VPCLMULQDQ_0x10(mem)
+    0000000000009e81
+VPEXTRW_128_0x0(mem)
   before
     dcdd4792dc73358a.16b377581fd2c9ce.a143d407bf663d82.5692999c1e793c6d
     b4113141e8014d7c.9344250f62eaab1f.8974a6cc2381cd4b.77d1b65f15b7a632
@@ -42706,13 +42706,13 @@
     cf9eae970e7a87e5.23819cd370fdbeb3.ba0b772d8e402060.84bad1595f8430ee
     28fcc669eb2cc83c
   after
-    dcdd4792dc73358a.16b377581fd2c9ce.a143d407bf663d82.5692999c1e793c6d
+    dcdd4792dc73358a.16b377581fd2c9ce.a143d407bf663d82.5692999c1e798e79
     b4113141e8014d7c.9344250f62eaab1f.8974a6cc2381cd4b.77d1b65f15b7a632
-    0000000000000000.0000000000000000.357870f2e6e8784a.c7a3d1fa5a7a5f64
+    11632af49aff7ee1.ce6f33bef41fe887.481e08df5fc5da31.67c575254c8c8e79
     cf9eae970e7a87e5.23819cd370fdbeb3.ba0b772d8e402060.84bad1595f8430ee
     28fcc669eb2cc83c
 
-VPCLMULQDQ_0x11(reg)
+VPEXTRW_128_0x1(reg)
   before
     b1d750c08c0f920f.ca9037165e7d22b3.eec55db97311674e.bb086ea0ccfe5b04
     79966ccadcb9c915.dd03435da8140d77.8b8970dc98e62005.27e0692636094647
@@ -42720,12 +42720,12 @@
     3af447a800937064.c09fd1f49930bd95.abbd8189ba04b076.af555c18fd3b1f61
     848a4b5b917a848f
   after
-    0000000000000000.0000000000000000.296f7696938d06f3.fb5091f9c0203694
+    b1d750c08c0f920f.ca9037165e7d22b3.eec55db97311674e.bb086ea0ccfe5b04
     79966ccadcb9c915.dd03435da8140d77.8b8970dc98e62005.27e0692636094647
     de8715f37ab6aaf7.e6c44d59084c015f.5618d3a87c082484.da61e4aae86f9e58
     3af447a800937064.c09fd1f49930bd95.abbd8189ba04b076.af555c18fd3b1f61
-    848a4b5b917a848f
-VPCLMULQDQ_0x11(mem)
+    000000000000ccfe
+VPEXTRW_128_0x1(mem)
   before
     34ca2f61c1378a0d.eb2afe530adc5806.47604b1b78ccfb45.e6c576ecef650087
     9be28316a87fed08.4b753662351b9e8a.57d237bbc02d789c.637cae3bb6b85065
@@ -42733,13 +42733,13 @@
     fdc96c380ddcb924.8b791b585cb134e6.81fd5712fc6b1eee.9327d8516b61de32
     fdb2c2f092cf957a
   after
-    34ca2f61c1378a0d.eb2afe530adc5806.47604b1b78ccfb45.e6c576ecef650087
+    34ca2f61c1378a0d.eb2afe530adc5806.47604b1b78ccfb45.e6c576ecef65ab88
     9be28316a87fed08.4b753662351b9e8a.57d237bbc02d789c.637cae3bb6b85065
-    0000000000000000.0000000000000000.144caa1683fc5801.b340103ea2e8b9ec
+    949ec464635c68ac.b721ec3f1cde7e9b.cbc312bf8d5ef0c6.7e2e26e4ab88dbba
     fdc96c380ddcb924.8b791b585cb134e6.81fd5712fc6b1eee.9327d8516b61de32
     fdb2c2f092cf957a
 
-VPCLMULQDQ_0x11(reg)
+VPEXTRW_128_0x1(reg)
   before
     1a1ce02cbb5f3c3e.b031f97ec30b9a9d.24cbbf17901efb16.544d82a22961bf41
     45b22c71829c0e2a.8ba0e623a0f3c742.dc61d4ea55b310d8.1f7f105a2f4b8feb
@@ -42747,12 +42747,12 @@
     348d43c65c4f2627.25c7d1364124f9c2.1c8c4379008313c1.11b841f2372cabf2
     f058ddaa713b6fa7
   after
-    0000000000000000.0000000000000000.0daef672d74c75a3.878d7f48c256c140
+    1a1ce02cbb5f3c3e.b031f97ec30b9a9d.24cbbf17901efb16.544d82a22961bf41
     45b22c71829c0e2a.8ba0e623a0f3c742.dc61d4ea55b310d8.1f7f105a2f4b8feb
     d9bea42b841348e8.69e4af11c1a3fe40.1088573c46fcaed8.c05f7b262a354a17
     348d43c65c4f2627.25c7d1364124f9c2.1c8c4379008313c1.11b841f2372cabf2
-    f058ddaa713b6fa7
-VPCLMULQDQ_0x11(mem)
+    0000000000002961
+VPEXTRW_128_0x1(mem)
   before
     3709cc3bf56f5263.b16a05aea7dce391.9d16c67d3c8475f5.5cb9940d1ed77940
     c498888fdfd30f51.aba3e64f0047bcd3.ab9c0cd2d0ce2d05.2c5a46643c811d00
@@ -42760,13 +42760,13 @@
     1b805c34525b0a76.8a55f66d4ee4b28d.fd8179562c51456a.ed2cbe0ceb0c0df6
     95f57c35b304d283
   after
-    3709cc3bf56f5263.b16a05aea7dce391.9d16c67d3c8475f5.5cb9940d1ed77940
+    3709cc3bf56f5263.b16a05aea7dce391.9d16c67d3c8475f5.5cb9940d1ed7f70f
     c498888fdfd30f51.aba3e64f0047bcd3.ab9c0cd2d0ce2d05.2c5a46643c811d00
-    0000000000000000.0000000000000000.5827f6978ceb13a1.654f3b8c72708b21
+    71d18f944973639e.8082e315041bed98.2c271e21160edf1d.e9bd55ebf70f3aae
     1b805c34525b0a76.8a55f66d4ee4b28d.fd8179562c51456a.ed2cbe0ceb0c0df6
     95f57c35b304d283
 
-VPCLMULQDQ_0x11(reg)
+VPEXTRW_128_0x1(reg)
   before
     3d628bd0eb84c502.9f716b5d1398c004.27661dc17b2e465d.f878975d2da21b18
     40bfe74b3017211e.d77038faaa354075.b102547f2686e6b6.fbd6f622360e1f52
@@ -42774,12 +42774,12 @@
     cc7e778d4fa707e0.d7c6fe3fc9c091af.000adee5688e39ac.84fa6497cf649c1c
     c3576c1e96668e03
   after
-    0000000000000000.0000000000000000.5b14c2db04728ff1.05805508613bcf36
+    3d628bd0eb84c502.9f716b5d1398c004.27661dc17b2e465d.f878975d2da21b18
     40bfe74b3017211e.d77038faaa354075.b102547f2686e6b6.fbd6f622360e1f52
     fc5a8d111d4a2384.a04840f7333f47f5.86749512ec78ce41.e068119163a00b44
     cc7e778d4fa707e0.d7c6fe3fc9c091af.000adee5688e39ac.84fa6497cf649c1c
-    c3576c1e96668e03
-VPCLMULQDQ_0x11(mem)
+    0000000000002da2
+VPEXTRW_128_0x1(mem)
   before
     7a4da314d5b39c28.0c76a32d62bd09dd.56b6eec189c7d9cf.7c0f2966375664a3
     83a68764a75683b5.188f0c5cf0156428.fae48c668e5ddd82.57ce7400f45c8bd2
@@ -42787,13 +42787,13 @@
     feb443c176d0cbb9.03548618f3c01756.212ac3ccd86b0351.95adf830a94ebc85
     b165299dda543e63
   after
-    7a4da314d5b39c28.0c76a32d62bd09dd.56b6eec189c7d9cf.7c0f2966375664a3
+    7a4da314d5b39c28.0c76a32d62bd09dd.56b6eec189c7d9cf.7c0f296637563b2a
     83a68764a75683b5.188f0c5cf0156428.fae48c668e5ddd82.57ce7400f45c8bd2
-    0000000000000000.0000000000000000.3366f72f0c8d519e.7062ddbbb4a06f1e
+    bb2f93f9295cffd6.4c16af87983d556c.9f1c541bf49056f4.eb94bb1f3b2aeae4
     feb443c176d0cbb9.03548618f3c01756.212ac3ccd86b0351.95adf830a94ebc85
     b165299dda543e63
 
-VPCLMULQDQ_0xFF(reg)
+VPEXTRW_128_0x2(reg)
   before
     9c0849d369c6ac28.280114a7abbea487.9b988f7ca02be891.5cd9546656fb9ec4
     b0e1543ff2324180.15e28197e333466f.6f2dc520380802cb.2cf683d3894be479
@@ -42801,12 +42801,12 @@
     c6691c656427d49c.a88f1f46cedfd437.3a79a9d49f4e03e6.fbaaacda7f5c615c
     b2d99e4c7a350fe2
   after
-    0000000000000000.0000000000000000.29175424f4cbf1ad.d50dbc366fca555f
+    9c0849d369c6ac28.280114a7abbea487.9b988f7ca02be891.5cd9546656fb9ec4
     b0e1543ff2324180.15e28197e333466f.6f2dc520380802cb.2cf683d3894be479
     4a3e464b12243b18.a122067d3a3a6d9b.da5e256e59e6a2ad.6d4dcc018d67919e
     c6691c656427d49c.a88f1f46cedfd437.3a79a9d49f4e03e6.fbaaacda7f5c615c
-    b2d99e4c7a350fe2
-VPCLMULQDQ_0xFF(mem)
+    0000000000005466
+VPEXTRW_128_0x2(mem)
   before
     6ea61e429bfe585a.80afd1f885c748b7.06f348dcb82e3871.eac84fbca5ce631f
     0bdca8a8fdc3f8f0.d45c616f1090d516.971bfe2c16345572.4598129408f1fc07
@@ -42814,13 +42814,13 @@
     58b7cb74f6742b29.ba1a03bed6cf244e.c2e7feac9d93a980.70eadfc15252cb8f
     f805e2ee72a77987
   after
-    6ea61e429bfe585a.80afd1f885c748b7.06f348dcb82e3871.eac84fbca5ce631f
+    6ea61e429bfe585a.80afd1f885c748b7.06f348dcb82e3871.eac84fbca5ceeec7
     0bdca8a8fdc3f8f0.d45c616f1090d516.971bfe2c16345572.4598129408f1fc07
-    0000000000000000.0000000000000000.030619f7fa8a745c.a17e69fc59400092
+    6549b86abd91aad1.1ebcc838a20fb564.37d3bc2304fde769.a935eec763440a48
     58b7cb74f6742b29.ba1a03bed6cf244e.c2e7feac9d93a980.70eadfc15252cb8f
     f805e2ee72a77987
 
-VPCLMULQDQ_0xFF(reg)
+VPEXTRW_128_0x2(reg)
   before
     9bd0f2ba5ed051dd.c0f35cb3c5763723.04c40c6e495c6080.142340b2fd0458e3
     b7990b92b3588e3c.79c9e71145a589ec.5804e1b29643a3a5.0852fe23415cb0bf
@@ -42828,12 +42828,12 @@
     c550481106b62bc8.4d72dcdecab8f39a.8e79dda9304d317a.4bbce0f3e3ed4991
     518ffb2a794003df
   after
-    0000000000000000.0000000000000000.053ad4161e5a81e5.f36dba9297bfe16d
+    9bd0f2ba5ed051dd.c0f35cb3c5763723.04c40c6e495c6080.142340b2fd0458e3
     b7990b92b3588e3c.79c9e71145a589ec.5804e1b29643a3a5.0852fe23415cb0bf
     a6aa29e00dcb6e51.5e05e87c930ddfb0.12277df75a0f2a69.7c41b5ea84a56c40
     c550481106b62bc8.4d72dcdecab8f39a.8e79dda9304d317a.4bbce0f3e3ed4991
-    518ffb2a794003df
-VPCLMULQDQ_0xFF(mem)
+    00000000000040b2
+VPEXTRW_128_0x2(mem)
   before
     6986837b63a85556.71d665923da4014c.21de3e2506b581d7.2846fb35b488f382
     716df2d3bc33fd21.048a7bce4b212e8a.b5138a3b640d4792.3bdad506834cad2d
@@ -42841,13 +42841,13 @@
     bd3a7a432de13965.52a8822662fa78e3.920bd089f5036635.4186aa2671a0f91f
     eb369e4ec74802be
   after
-    6986837b63a85556.71d665923da4014c.21de3e2506b581d7.2846fb35b488f382
+    6986837b63a85556.71d665923da4014c.21de3e2506b581d7.2846fb35b4886687
     716df2d3bc33fd21.048a7bce4b212e8a.b5138a3b640d4792.3bdad506834cad2d
-    0000000000000000.0000000000000000.166df3d67626cf7b.e6fe24f3a030105e
+    4310c61ca1edb56d.dbb68630cfbaec2e.e7de3c0e00cefff8.2580668739259b28
     bd3a7a432de13965.52a8822662fa78e3.920bd089f5036635.4186aa2671a0f91f
     eb369e4ec74802be
 
-VPCLMULQDQ_0xFF(reg)
+VPEXTRW_128_0x2(reg)
   before
     7edd3c6bd8aaf3af.bab88a357d1b4736.c5aa6c1ba26d0e55.9166c3985fb83774
     58c782e93f5107a1.155673ddaca7990b.91093f7b2ba0e931.c2ba90275bfa30e1
@@ -42855,12 +42855,12 @@
     4d93f4b8819f8c33.5922bcfe19e7fb74.9f0d902c867361d7.2681a876775284f9
     118beb0dcf8159fa
   after
-    0000000000000000.0000000000000000.0919663ff39f31c7.86de85a244f8fb73
+    7edd3c6bd8aaf3af.bab88a357d1b4736.c5aa6c1ba26d0e55.9166c3985fb83774
     58c782e93f5107a1.155673ddaca7990b.91093f7b2ba0e931.c2ba90275bfa30e1
     d3406b3499c97c3e.ace0af26d792ec12.1011f7b2981e4623.ffd5b32304d40baa
     4d93f4b8819f8c33.5922bcfe19e7fb74.9f0d902c867361d7.2681a876775284f9
-    118beb0dcf8159fa
-VPCLMULQDQ_0xFF(mem)
+    000000000000c398
+VPEXTRW_128_0x2(mem)
   before
     9ebff9d5296c44da.210e17e2945d742b.fae715508eb2845f.9a4b0656902c75f8
     a7e94db8a02002c5.aafbd21c6d926fd3.69fd3708530041ff.5d15569a52d4bf32
@@ -42868,13 +42868,13 @@
     a14fb8845710e66a.4f5efd74e38a92e1.2547c25b3c53490d.ab8071247122e5a4
     eeb9344205e13834
   after
-    9ebff9d5296c44da.210e17e2945d742b.fae715508eb2845f.9a4b0656902c75f8
+    9ebff9d5296c44da.210e17e2945d742b.fae715508eb2845f.9a4b0656902c7b65
     a7e94db8a02002c5.aafbd21c6d926fd3.69fd3708530041ff.5d15569a52d4bf32
-    0000000000000000.0000000000000000.269f14cfcedf7d76.2588414ed681d635
+    09d563a451a84ee6.46a720d4a9c7bbd6.832e9c1284dcee80.44b87b6569f87b32
     a14fb8845710e66a.4f5efd74e38a92e1.2547c25b3c53490d.ab8071247122e5a4
     eeb9344205e13834
 
-VCMPSS_128_0x9(reg)
+VPEXTRW_128_0x3(reg)
   before
     69afc12ac1beb18d.4922c644cf64847c.226c666ab86730a0.291424cd97700cd3
     78ae124a42478c5b.de1b0bd0d4b1e449.1c1c5521c3e8d3be.6c613e55b23ff4fd
@@ -42882,12 +42882,12 @@
     c1f5f6df018a5709.40af27fcf664dec3.f196ba82ed0c13ca.20aa8b589624222f
     483fb6ab9752e08f
   after
-    0000000000000000.0000000000000000.1c1c5521c3e8d3be.6c613e55ffffffff
+    69afc12ac1beb18d.4922c644cf64847c.226c666ab86730a0.291424cd97700cd3
     78ae124a42478c5b.de1b0bd0d4b1e449.1c1c5521c3e8d3be.6c613e55b23ff4fd
     7601250d2307054b.3c0602148202c4fd.97bcc805a19bb5e8.cafa8ce0a8ccbdb8
     c1f5f6df018a5709.40af27fcf664dec3.f196ba82ed0c13ca.20aa8b589624222f
-    483fb6ab9752e08f
-VCMPSS_128_0x9(mem)
+    0000000000002914
+VPEXTRW_128_0x3(mem)
   before
     1f8389c4c863b304.b4d67f2c775dbf40.c4e2f7744ce2efc8.84f7270443c5290f
     8143808f446256b9.abf0be61220b799d.a56bec689f88b337.ad2b0cf740543263
@@ -42895,13 +42895,13 @@
     5666cceb8f5bff95.14ff4a2e852ad178.eead3a75ad7d4206.313c2be19e2210eb
     45b15daf36795c77
   after
-    1f8389c4c863b304.b4d67f2c775dbf40.c4e2f7744ce2efc8.84f7270443c5290f
+    1f8389c4c863b304.b4d67f2c775dbf40.c4e2f7744ce2efc8.84f7270443c5c87e
     8143808f446256b9.abf0be61220b799d.a56bec689f88b337.ad2b0cf740543263
-    0000000000000000.0000000000000000.a56bec689f88b337.ad2b0cf7ffffffff
+    4a4b18f8285b86db.018fade89d21c0cc.bf1584c50b63e53d.c87e64c780456b74
     5666cceb8f5bff95.14ff4a2e852ad178.eead3a75ad7d4206.313c2be19e2210eb
     45b15daf36795c77
 
-VCMPSS_128_0x9(reg)
+VPEXTRW_128_0x3(reg)
   before
     5e28f69fe5d68cc2.81621854966d7d14.3f8b91a075b2e84e.0eff8b66a1e586bd
     d9eef31b46c3dc79.a709781f589dbb84.dd807ca9094641f9.fbd7f18302a46c8f
@@ -42909,12 +42909,12 @@
     6597066c9083cbd9.548c658c7e896ae5.e6d6332f90bfa780.ac49f1f07c5d1132
     287a8219cd6d485c
   after
-    0000000000000000.0000000000000000.dd807ca9094641f9.fbd7f18300000000
+    5e28f69fe5d68cc2.81621854966d7d14.3f8b91a075b2e84e.0eff8b66a1e586bd
     d9eef31b46c3dc79.a709781f589dbb84.dd807ca9094641f9.fbd7f18302a46c8f
     124f4f91f6ce8847.a4296839f1f87610.4c2b09b4de711726.9101eab7ecc8b1a7
     6597066c9083cbd9.548c658c7e896ae5.e6d6332f90bfa780.ac49f1f07c5d1132
-    287a8219cd6d485c
-VCMPSS_128_0x9(mem)
+    0000000000000eff
+VPEXTRW_128_0x3(mem)
   before
     e1621a1efc061150.2e121418b16de2da.93ffea061b5c532e.09cef685babc2db5
     b3cb33ec24332a3b.c90c7501f41809f7.3d4d7391e37dec18.105e4e22f8f5e46e
@@ -42922,13 +42922,13 @@
     1153dd8ed17b36a4.e5ab223a52e27634.41af818f65dc217e.387aafe12349d822
     139dafdb477c8d75
   after
-    e1621a1efc061150.2e121418b16de2da.93ffea061b5c532e.09cef685babc2db5
+    e1621a1efc061150.2e121418b16de2da.93ffea061b5c532e.09cef685babc56d4
     b3cb33ec24332a3b.c90c7501f41809f7.3d4d7391e37dec18.105e4e22f8f5e46e
-    0000000000000000.0000000000000000.3d4d7391e37dec18.105e4e22ffffffff
+    79824b6d61014c48.92d02693f6107cdb.2e447c1bf2f9f2ce.56d43872e7f60959
     1153dd8ed17b36a4.e5ab223a52e27634.41af818f65dc217e.387aafe12349d822
     139dafdb477c8d75
 
-VCMPSS_128_0x9(reg)
+VPEXTRW_128_0x3(reg)
   before
     418934cdef1a63fd.560a663c8dada27b.1eea6562a41934ab.5459ffd957303451
     208a3a21b8b09767.24726061b3a44df8.99d7eb788a42f1ef.420f71e5e503e876
@@ -42936,12 +42936,12 @@
     5cfbbba31bf1088f.ca899cc5ac0f4f96.c4edb21a7b975c88.1ecf21f343552260
     c57158cd4ceb217e
   after
-    0000000000000000.0000000000000000.99d7eb788a42f1ef.420f71e5ffffffff
+    418934cdef1a63fd.560a663c8dada27b.1eea6562a41934ab.5459ffd957303451
     208a3a21b8b09767.24726061b3a44df8.99d7eb788a42f1ef.420f71e5e503e876
     0aecbe453dc9655e.565949eb5f6bf348.b1beb1e69de7ebaa.e79d539f2b61f917
     5cfbbba31bf1088f.ca899cc5ac0f4f96.c4edb21a7b975c88.1ecf21f343552260
-    c57158cd4ceb217e
-VCMPSS_128_0x9(mem)
+    0000000000005459
+VPEXTRW_128_0x3(mem)
   before
     b74e731a5f2fb09d.72022da9edb5bda5.5bcfd5dab69a1e0f.2dafea7fc0db8136
     cf33eec49a2e8be8.a94e10c250a0c04d.e4f771189a1a1cde.484f558007419560
@@ -42949,13 +42949,13 @@
     e546f4e3f78a19b5.e5e61bdd361c9f02.521cbebc5f279431.035cb50b0ca17ed6
     5c61a26c02b3c97b
   after
-    b74e731a5f2fb09d.72022da9edb5bda5.5bcfd5dab69a1e0f.2dafea7fc0db8136
+    b74e731a5f2fb09d.72022da9edb5bda5.5bcfd5dab69a1e0f.2dafea7fc0db701a
     cf33eec49a2e8be8.a94e10c250a0c04d.e4f771189a1a1cde.484f558007419560
-    0000000000000000.0000000000000000.e4f771189a1a1cde.484f558000000000
+    ebed45b919f3708c.5b2c615adf3f4d33.43cdea6a749b0530.701aef8bec54d6b1
     e546f4e3f78a19b5.e5e61bdd361c9f02.521cbebc5f279431.035cb50b0ca17ed6
     5c61a26c02b3c97b
 
-VMASKMOVPS_128_LoadForm(reg)
+VPEXTRW_128_0x4(reg)
   before
     d675b21a6b16f54b.9b0b78305100438e.a3c83ab7f3c5f367.efb268fb77cd860c
     cfe3e182e2563cf3.e7074c8b4260a943.f120ba54afc6850d.f4596411d99697ee
@@ -42967,8 +42967,8 @@
     cfe3e182e2563cf3.e7074c8b4260a943.f120ba54afc6850d.f4596411d99697ee
     a1f92c0e0400db1e.a708ece0e6b70902.2b39972008a990a1.3fde2feba0908203
     aa018e2b6ca00d79.b5d8d41b5a0f1df5.ad5ece889afd52cf.aa0d4476e9c60476
-    13b21e9ccf44d973
-VMASKMOVPS_128_LoadForm(mem)
+    000000000000f367
+VPEXTRW_128_0x4(mem)
   before
     54993c4b6f17bd28.44480346b7c00faf.ee458128ba77a148.d3dc5af6004b0542
     4a8e176ee44a6bbf.cd1a87ca80ee1d6d.2f196ef321f85328.f9ff37d8d621e5a7
@@ -42976,13 +42976,13 @@
     c6d0f8c0bf021844.188fadbcfea24d30.3429f874757a2c3e.b564d5a4449220f5
     033d8e671446f237
   after
-    54993c4b6f17bd28.44480346b7c00faf.ee458128ba77a148.d3dc5af6004b0542
+    54993c4b6f17bd28.44480346b7c00faf.ee458128ba77a148.d3dc5af6004bedc1
     4a8e176ee44a6bbf.cd1a87ca80ee1d6d.2f196ef321f85328.f9ff37d8d621e5a7
-    0000000000000000.0000000000000000.0000000000000000.d3dc5af6004b0542
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    d15c2df14aeaa064.9fc3162264b5735f.52211768aba0edc1.7b136199b90a30a9
+    c6d0f8c0bf021844.188fadbcfea24d30.3429f874757a2c3e.b564d5a4449220f5
     033d8e671446f237
 
-VMASKMOVPS_128_LoadForm(reg)
+VPEXTRW_128_0x4(reg)
   before
     c1ec884dc4b1e11a.03b6f6c75c9e8e8b.92c94703eb40e68d.b1fc8d019a93cccc
     4abbbfc2f1602a4b.65daa3f23fcac064.6abfe063c61b7b22.a66853fd37f58896
@@ -42994,8 +42994,8 @@
     4abbbfc2f1602a4b.65daa3f23fcac064.6abfe063c61b7b22.a66853fd37f58896
     fcf72f3237de0975.c808792d849367fc.fdbb74482bc0479a.ed37c55367af1dc9
     32ecd50a30b7ba45.080cf6644605427e.a50a001eb7ba88a1.63365fee47ca4791
-    e4319dbcf254c119
-VMASKMOVPS_128_LoadForm(mem)
+    000000000000e68d
+VPEXTRW_128_0x4(mem)
   before
     4cf4fca88558488e.48e6acb47a777866.01b19584a12a0b17.bff87e52069578e5
     774bf69e1be3981b.9930b09db1ab8085.90c4d277b2107ff3.a7d0ec4eb2de530f
@@ -43003,13 +43003,13 @@
     86e4b159c2bb8230.61e82fdd549d5e6c.db64178b644d5822.5272865298e8becc
     ccd3a93208c0c5b5
   after
-    4cf4fca88558488e.48e6acb47a777866.01b19584a12a0b17.bff87e52069578e5
+    4cf4fca88558488e.48e6acb47a777866.01b19584a12a0b17.bff87e5206955a3d
     774bf69e1be3981b.9930b09db1ab8085.90c4d277b2107ff3.a7d0ec4eb2de530f
-    0000000000000000.0000000000000000.01b19584a12a0b17.bff87e52069578e5
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    4101098bd1006ded.8318dd3270de0e4e.8f11292b94c25a3d.b9e0457f5a2057ce
+    86e4b159c2bb8230.61e82fdd549d5e6c.db64178b644d5822.5272865298e8becc
     ccd3a93208c0c5b5
 
-VMASKMOVPS_128_LoadForm(reg)
+VPEXTRW_128_0x4(reg)
   before
     8450ac8a4736a837.22be68f50a21940f.8eeda30cf873ab8c.508916823ebc34cd
     d6338ac8f0d6a2fb.f15cac4cc63d5fb7.6873342af8ec325a.ca4ca4fe3c1bab6b
@@ -43021,8 +43021,8 @@
     d6338ac8f0d6a2fb.f15cac4cc63d5fb7.6873342af8ec325a.ca4ca4fe3c1bab6b
     1ec83f57a02bf0b0.cf8af748121b9f53.49c6dea3f1952f81.24783dea7d777928
     b85dc8a3f2c1ce00.9814c7d709c80f10.8f329de37ff9ddae.3cdb5b321adb592f
-    ed3f7cc3315308ad
-VMASKMOVPS_128_LoadForm(mem)
+    000000000000ab8c
+VPEXTRW_128_0x4(mem)
   before
     13711b87deec42cd.003c201883247797.28c698e3c74f6c1a.94036e563da4798c
     8a3db46b3cb1c2bc.52b34222eee12923.5a6be45a69bc729c.b6844c68c7233fc8
@@ -43030,13 +43030,13 @@
     dad2c5447df088b6.8394daa6c39792c4.19c2e236c77a67ba.bcc91f1ab1ca3808
     5a250d91490be365
   after
-    13711b87deec42cd.003c201883247797.28c698e3c74f6c1a.94036e563da4798c
+    13711b87deec42cd.003c201883247797.28c698e3c74f6c1a.94036e563da4dcc3
     8a3db46b3cb1c2bc.52b34222eee12923.5a6be45a69bc729c.b6844c68c7233fc8
-    0000000000000000.0000000000000000.0000000000000000.94036e563da4798c
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    2d6fc35c68ae46a5.0a0c2d2ecf831e4d.0cd029270b1cdcc3.4f023385ba016b0d
+    dad2c5447df088b6.8394daa6c39792c4.19c2e236c77a67ba.bcc91f1ab1ca3808
     5a250d91490be365
 
-VMASKMOVPS_256_LoadForm(reg)
+VPEXTRW_128_0x5(reg)
   before
     8362f7581d4fa8cf.6c34341197824418.1b9747f866a7c332.5d0b8b73bce2cfae
     94cbdbd9ca22c2f3.bf5f8eaed37038fa.2d606e8e5342eb43.b377a0ca0461cfca
@@ -43048,8 +43048,8 @@
     94cbdbd9ca22c2f3.bf5f8eaed37038fa.2d606e8e5342eb43.b377a0ca0461cfca
     eaaeb482eb116f7d.ae204e064dc71e85.153d4dd627f147a4.f9d49e28bb02253b
     df557fbe1da7e818.1743f1072092b3e8.2f78e03b7c421201.0aed0077fdd18b2d
-    c18d42a5e8dbbdcb
-VMASKMOVPS_256_LoadForm(mem)
+    00000000000066a7
+VPEXTRW_128_0x5(mem)
   before
     fc81e09c952b7942.d00d36f9fb706c70.d494f19c68ddb24d.d65e2129f1c08905
     9595564a22cd79be.1922d79f22f93532.c3deccb142b5d9e1.683b0e0c20f8e85d
@@ -43057,13 +43057,13 @@
     554dbc774b393773.2393c4dcb97889a4.a391010c1a3a8944.b90ad9611dc34db8
     3194afab236ecc13
   after
-    fc81e09c952b7942.d00d36f9fb706c70.d494f19c68ddb24d.d65e2129f1c08905
+    fc81e09c952b7942.d00d36f9fb706c70.d494f19c68ddb24d.d65e2129f1c0ca25
     9595564a22cd79be.1922d79f22f93532.c3deccb142b5d9e1.683b0e0c20f8e85d
-    fc81e09c00000000.0000000000000000.d494f19c00000000.0000000000000000
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    6a95219aabce7a6a.16e05d1c2dcd800a.beeffd33ca25e2cf.405ba250a5756bb5
+    554dbc774b393773.2393c4dcb97889a4.a391010c1a3a8944.b90ad9611dc34db8
     3194afab236ecc13
 
-VMASKMOVPS_256_LoadForm(reg)
+VPEXTRW_128_0x5(reg)
   before
     0244209a54032171.3488a3cf1f1b6e04.9c86094b61878cab.4c91522951fe8c6b
     8a67299b4b0e8b7f.e114528d427fd94a.dd0726d6c185c4cb.97bb6e778880a572
@@ -43075,8 +43075,8 @@
     8a67299b4b0e8b7f.e114528d427fd94a.dd0726d6c185c4cb.97bb6e778880a572
     234ac518a51944e8.39bb469ed0713470.426019e776fe6eb1.5edbd0e0dec99182
     2b36f07ffdb28959.194afaece6fd3da3.27deddec1b7fc609.7ebdf4526ce70bc9
-    d42d56b850e5d173
-VMASKMOVPS_256_LoadForm(mem)
+    0000000000006187
+VPEXTRW_128_0x5(mem)
   before
     3af673fea6d09dac.fc7aa73bf064967e.5b8dea649f30ae0f.e8cd6e4f4d93077f
     8de5c61089b22b9f.f361e4b719bca602.dc5092f2181544df.e179c97ea8c76ebe
@@ -43084,13 +43084,13 @@
     6b65fe4868918165.c447e5a47f8bc2da.0c85fb02b827ce5d.eb37caed46bc9d48
     b4e16805c295deec
   after
-    3af673fea6d09dac.fc7aa73bf064967e.5b8dea649f30ae0f.e8cd6e4f4d93077f
+    3af673fea6d09dac.fc7aa73bf064967e.5b8dea649f30ae0f.e8cd6e4f4d936db9
     8de5c61089b22b9f.f361e4b719bca602.dc5092f2181544df.e179c97ea8c76ebe
-    3af673fea6d09dac.fc7aa73b00000000.5b8dea6400000000.e8cd6e4f4d93077f
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    a9c6cbda169a3978.6d36a5611445f792.795f6e836db9bb40.6e2de9e4c7a63772
+    6b65fe4868918165.c447e5a47f8bc2da.0c85fb02b827ce5d.eb37caed46bc9d48
     b4e16805c295deec
 
-VMASKMOVPS_256_LoadForm(reg)
+VPEXTRW_128_0x5(reg)
   before
     2578bf98d6be3409.ad8edb469ba5c08f.55dea1ecf31b4685.7290b45a186b3a63
     9948cc121fc2db4c.4c0ddfc0cce1b225.7d48d3a60e80bd3f.874a1579a691bb7e
@@ -43102,8 +43102,8 @@
     9948cc121fc2db4c.4c0ddfc0cce1b225.7d48d3a60e80bd3f.874a1579a691bb7e
     6e9d8ae0382e1161.24ad85a317521251.96d1793c6b4664b6.27809a4a81a60cd9
     ffc2f56cbe8d10f3.113b49d997039d3f.fdc58e1ba7fa7793.2efec0b9c2b5eaa1
-    788f01b287cb1101
-VMASKMOVPS_256_LoadForm(mem)
+    000000000000f31b
+VPEXTRW_128_0x5(mem)
   before
     e101db21ecf33d26.a70509244c6b15af.ef83a85068000f1d.0e6f0eb05e273285
     451ec9f20c39293c.c4b0c2727e545b40.9a511cf3a7562314.251df5652b59d036
@@ -43111,13 +43111,13 @@
     6e8dd26bef5134e9.c9711585417a9d93.c7af386cdd3a2404.d6b0eae478fea787
     272eef853089597e
   after
-    e101db21ecf33d26.a70509244c6b15af.ef83a85068000f1d.0e6f0eb05e273285
+    e101db21ecf33d26.a70509244c6b15af.ef83a85068000f1d.0e6f0eb05e276f10
     451ec9f20c39293c.c4b0c2727e545b40.9a511cf3a7562314.251df5652b59d036
-    0000000000000000.a705092400000000.ef83a85068000f1d.0000000000000000
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    80b4481204aa926e.b1101dc4f1d51f53.ee7123ae6f109653.9f1940a8aa1d8e52
+    6e8dd26bef5134e9.c9711585417a9d93.c7af386cdd3a2404.d6b0eae478fea787
     272eef853089597e
 
-VMASKMOVPD_128_LoadForm(reg)
+VPEXTRW_128_0x6(reg)
   before
     eedf4bf66f48dee6.eb76e5ebe93acbd8.6a1fa62109cd11ad.01d6d71b0ce08953
     870efaa5d0ca7369.d33afc7c0f721268.ee66cd04e55cb64d.78b47ca6190f806e
@@ -43129,8 +43129,8 @@
     870efaa5d0ca7369.d33afc7c0f721268.ee66cd04e55cb64d.78b47ca6190f806e
     4e09f9fef09853b3.02a7940c7d04c6c5.b391849a72b2ca1e.0813a4fa1fd3c77e
     9e1a436b6a40bb72.548827864dfca31a.13eec94f4c5c87cd.8dc0ca013b3617b2
-    e2876aa888462f34
-VMASKMOVPD_128_LoadForm(mem)
+    000000000000a621
+VPEXTRW_128_0x6(mem)
   before
     e53400dc230fc930.d58ed459da4de74f.a4a833d69e676494.6bc7978f0de52906
     71920987279ba2d3.4eb1a935dd4b13f9.d0d433e88a50c65e.1869eac654d9ed74
@@ -43138,13 +43138,13 @@
     939561f7db3200bd.76340b630b4c595e.2880ff02a4cd5c95.dc3810cade34cba1
     adfcdb6f5ab25db8
   after
-    e53400dc230fc930.d58ed459da4de74f.a4a833d69e676494.6bc7978f0de52906
+    e53400dc230fc930.d58ed459da4de74f.a4a833d69e676494.6bc7978f0de5a3a8
     71920987279ba2d3.4eb1a935dd4b13f9.d0d433e88a50c65e.1869eac654d9ed74
-    0000000000000000.0000000000000000.a4a833d69e676494.0000000000000000
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    616f0097b0f87649.65cfbc690fc77a1a.b3d8a3a82dc385a5.7420bf61bbc50fc3
+    939561f7db3200bd.76340b630b4c595e.2880ff02a4cd5c95.dc3810cade34cba1
     adfcdb6f5ab25db8
 
-VMASKMOVPD_128_LoadForm(reg)
+VPEXTRW_128_0x6(reg)
   before
     41ba1bbbcacc00b4.e2d1a893c454fd5c.dd2b918d6d67ec72.0d98c4e20a790959
     f5bccd1acb0df142.29ef5156866a2952.f5014a55d2a36f02.3deb6d357cd3461d
@@ -43156,8 +43156,8 @@
     f5bccd1acb0df142.29ef5156866a2952.f5014a55d2a36f02.3deb6d357cd3461d
     254febf8f8016b0e.46bbd92e3d8040ca.1c033326d68c1db9.934676e515e8cf0f
     2dbf73c1ed35acc3.1300bb0706a3fdf1.ad7b466c14af3344.ed765be0f1c36259
-    254598102e71b927
-VMASKMOVPD_128_LoadForm(mem)
+    000000000000918d
+VPEXTRW_128_0x6(mem)
   before
     1980aa63e5fc91a6.6a5860e14734ee0e.6e8c73cbfcde1df2.03b681932896ed4f
     a3f20cc43472a502.3666aec4a28b6d9a.31297d673c3d5cfa.7cffdf07afd08685
@@ -43165,13 +43165,13 @@
     edafb060094e75ff.ee0f5e84c96d1628.63c978d8089925cd.43eff58784664824
     4a2ea56a0adbe9e5
   after
-    1980aa63e5fc91a6.6a5860e14734ee0e.6e8c73cbfcde1df2.03b681932896ed4f
+    1980aa63e5fc91a6.6a5860e14734ee0e.6e8c73cbfcde1df2.03b68193289656c7
     a3f20cc43472a502.3666aec4a28b6d9a.31297d673c3d5cfa.7cffdf07afd08685
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    a1693a1f37dfb366.ee345ad699c46714.3aa456c7e1cd7534.72a45d3444e63b93
+    edafb060094e75ff.ee0f5e84c96d1628.63c978d8089925cd.43eff58784664824
     4a2ea56a0adbe9e5
 
-VMASKMOVPD_128_LoadForm(reg)
+VPEXTRW_128_0x6(reg)
   before
     e2ab684b73d25981.6492eb73c6cba7f8.9244b838cc12b781.8a646185ccae28f1
     68b33a945ad6d5a5.e3dc65448b62077e.361d6360413e86cc.89418cb94a173acb
@@ -43183,8 +43183,8 @@
     68b33a945ad6d5a5.e3dc65448b62077e.361d6360413e86cc.89418cb94a173acb
     399217b35c7399fd.445a9cc074204fbd.36e75c66c27dbeb4.3d2c76629de01688
     af93fc131436e034.64d80cd19b103ce0.eeed9db8eb5b9ce6.83f0996be2157953
-    355a73c034c31f59
-VMASKMOVPD_128_LoadForm(mem)
+    000000000000b838
+VPEXTRW_128_0x6(mem)
   before
     30367f4daff5c3c6.2804e4201eaae7f7.20212f651f3f8a14.b97d24c159655c0e
     505039fe70b823c5.fe2fcb46175beaf2.520383661ab8f485.f5e1eceda7263ad7
@@ -43192,13 +43192,13 @@
     706ea97d331e012c.34e6878d45a6d33d.8bbdab64e6b80fcb.2d592f5e55fe3efe
     e104a37bed2edcb4
   after
-    30367f4daff5c3c6.2804e4201eaae7f7.20212f651f3f8a14.b97d24c159655c0e
+    30367f4daff5c3c6.2804e4201eaae7f7.20212f651f3f8a14.b97d24c1596583c2
     505039fe70b823c5.fe2fcb46175beaf2.520383661ab8f485.f5e1eceda7263ad7
-    0000000000000000.0000000000000000.0000000000000000.b97d24c159655c0e
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    71741ebf9317f883.8e61adf19bd625d0.d74883c2a887375e.fd67f1a8722b71ed
+    706ea97d331e012c.34e6878d45a6d33d.8bbdab64e6b80fcb.2d592f5e55fe3efe
     e104a37bed2edcb4
 
-VMASKMOVPD_256_LoadForm(reg)
+VPEXTRW_128_0x7(reg)
   before
     74b3486cd54489bb.270955226cd9f8eb.4d0a5386b15731e7.4a2e7738ef5837f9
     44b41a9baace7fc0.7312a19c5b559aec.33190f497c767b77.f0676329df736c14
@@ -43210,8 +43210,8 @@
     44b41a9baace7fc0.7312a19c5b559aec.33190f497c767b77.f0676329df736c14
     ac5115750757fb6f.305606d51c9ea35c.435eb740428eec9c.5934ec26d4136a48
     07d83667896c3873.3a9e01bbcabecf67.d92745d99e2bc200.61618d18e746edc0
-    e4b9c2ec3617b0a8
-VMASKMOVPD_256_LoadForm(mem)
+    0000000000004d0a
+VPEXTRW_128_0x7(mem)
   before
     be09088edd93702d.b39377dccb987479.6db90f3981c3d939.51beb77e2cda374f
     cb1dd9ebf7c5e97b.0acfd6406967e92d.a572ab3b5eb87efd.0770079d89268737
@@ -43219,13 +43219,13 @@
     eec11182f57cf521.2dfadc842c20704d.93ed7e7bf8a4880c.9d5537f61ec6ac7c
     351f0d088e32f732
   after
-    be09088edd93702d.b39377dccb987479.6db90f3981c3d939.51beb77e2cda374f
+    be09088edd93702d.b39377dccb987479.6db90f3981c3d939.51beb77e2cdabe95
     cb1dd9ebf7c5e97b.0acfd6406967e92d.a572ab3b5eb87efd.0770079d89268737
-    be09088edd93702d.0000000000000000.6db90f3981c3d939.0000000000000000
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    e7c1b3eda0b9d7be.6ad84efe0066d33a.be9551ad7caa7adf.578933a1509cef61
+    eec11182f57cf521.2dfadc842c20704d.93ed7e7bf8a4880c.9d5537f61ec6ac7c
     351f0d088e32f732
 
-VMASKMOVPD_256_LoadForm(reg)
+VPEXTRW_128_0x7(reg)
   before
     7b35b3433d6c0f2f.bce96f95121900d0.b1807a3d8821fa11.0247ad91edb265b0
     cbe12413c6ff2e21.2d044a11129cb4f8.50b72696b0f5ae33.e66f59db77e1cdf6
@@ -43237,8 +43237,8 @@
     cbe12413c6ff2e21.2d044a11129cb4f8.50b72696b0f5ae33.e66f59db77e1cdf6
     81705ce4c57791b1.1cdf1de41112ccc5.68ecdbf94129c75e.1b310045b43c7b0b
     f92e5723d760748e.674764f92c860562.536995d3d649833f.7d591ebcbdcf2d1b
-    e7b22d2ab0a79d51
-VMASKMOVPD_256_LoadForm(mem)
+    000000000000b180
+VPEXTRW_128_0x7(mem)
   before
     370aab7da9cf87da.8f67123a98471262.e9069b3c7e041bfc.6e7b51910cdf1c82
     482b13a0c353a9e1.9f678897a3b7a8d9.7de83e9a2499c9bf.166d099d7e79ced2
@@ -43246,13 +43246,13 @@
     1cfb9206cba1801b.9ceb95cf0864ac63.504ab952da35e16e.7825635488e7714b
     eb83fbd558d3d9cc
   after
-    370aab7da9cf87da.8f67123a98471262.e9069b3c7e041bfc.6e7b51910cdf1c82
+    370aab7da9cf87da.8f67123a98471262.e9069b3c7e041bfc.6e7b51910cdf01bb
     482b13a0c353a9e1.9f678897a3b7a8d9.7de83e9a2499c9bf.166d099d7e79ced2
-    0000000000000000.8f67123a98471262.0000000000000000.0000000000000000
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    f5e2e17f1a40bd93.8479b5a5943d72a0.01bbcafd3950cdd6.a58dbb65c9a3d7dc
+    1cfb9206cba1801b.9ceb95cf0864ac63.504ab952da35e16e.7825635488e7714b
     eb83fbd558d3d9cc
 
-VMASKMOVPD_256_LoadForm(reg)
+VPEXTRW_128_0x7(reg)
   before
     5bf18056d4f34b0b.9742a021f283ada7.420724839bb891cd.456089862255c1b2
     22bcef4299d102b3.448389bcaaf00160.d11a5f2ce8c55e8b.becab6832ebb2bcf
@@ -43264,8 +43264,8 @@
     22bcef4299d102b3.448389bcaaf00160.d11a5f2ce8c55e8b.becab6832ebb2bcf
     9d30430542fc3b71.fd89c8c30ff73875.a77041368b184e49.9554ba371974d9f0
     2898780c6bfd32f1.a021d9223ea10e0f.1f55c60d213d9fb2.a8ca138dff8a8842
-    d1f83c71fd0cf3f1
-VMASKMOVPD_256_LoadForm(mem)
+    0000000000004207
+VPEXTRW_128_0x7(mem)
   before
     eeaab1cf2f03d828.1f428bc1b16222de.071839c652fc3f5d.9414ea1e45be8b73
     d9abee93b07df114.de787691b0b648e4.1038639968138689.64fbaad394294f37
@@ -43273,13 +43273,13 @@
     8dcdb1fd1027b1ba.24bbc933465c26ee.7425058008a6482d.816ceadd21eb4e7a
     868f640a975a0151
   after
-    eeaab1cf2f03d828.1f428bc1b16222de.071839c652fc3f5d.9414ea1e45be8b73
+    eeaab1cf2f03d828.1f428bc1b16222de.071839c652fc3f5d.9414ea1e45be954d
     d9abee93b07df114.de787691b0b648e4.1038639968138689.64fbaad394294f37
-    eeaab1cf2f03d828.1f428bc1b16222de.0000000000000000.0000000000000000
-    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    6fc870a99c85fae1.c18737e90385e0b0.954dd3899bf2a0c0.e9540099a90926ab
+    8dcdb1fd1027b1ba.24bbc933465c26ee.7425058008a6482d.816ceadd21eb4e7a
     868f640a975a0151
 
-VMASKMOVPS_128_StoreForm(reg)
+VAESENC(reg)
   before
     5609688ba8e27bdc.0d862f7b2870d0cb.636029dd16c65549.878b756cca3a3cfd
     4b25f4ceef10fac6.ccbf6610ff6b1442.dac251520f50aa6e.ab4aa038fdbb365b
@@ -43287,12 +43287,12 @@
     18779147908bf26a.78e0eb2b5ba9fa0c.e0ecee4de9f1b6c5.9706132029b12e74
     169b5514593ea486
   after
-    5609688ba8e27bdc.0d862f7b2870d0cb.636029dd16c65549.878b756cca3a3cfd
+    0000000000000000.0000000000000000.da0522518ea300cc.94327f40e9b2b239
     4b25f4ceef10fac6.ccbf6610ff6b1442.dac251520f50aa6e.ab4aa038fdbb365b
     c231023e086fb8bc.a744d0a6b1253948.e52d3ffecb846109.bc2f00d0bf34f274
     18779147908bf26a.78e0eb2b5ba9fa0c.e0ecee4de9f1b6c5.9706132029b12e74
     169b5514593ea486
-VMASKMOVPS_128_StoreForm(mem)
+VAESENC(mem)
   before
     16ba40986be811d7.a7459a5523f1e47b.1c613189180314b8.264c5aab0320e44f
     732f52997abb3192.cce51ad45c2cc99b.6f9121ae05404378.15997f84b59f2852
@@ -43300,13 +43300,13 @@
     b449d8be000878f9.49cd71d631525fbb.9231e7fadd90cee8.5b2ae65753bbe176
     69061f2a766fceee
   after
-    16ba40986be811d7.a7459a5523f1e47b.1c613189180314b8.264c5aabb59f2852
+    16ba40986be811d7.a7459a5523f1e47b.1c613189180314b8.264c5aab0320e44f
     732f52997abb3192.cce51ad45c2cc99b.6f9121ae05404378.15997f84b59f2852
-    09c50601a2c1bfe4.e4a30e31d7c8de78.4d3d34853d6b427a.081f5a449cf9be7b
+    0000000000000000.0000000000000000.27cbff8353046645.ed747c6f9303e883
     b449d8be000878f9.49cd71d631525fbb.9231e7fadd90cee8.5b2ae65753bbe176
     69061f2a766fceee
 
-VMASKMOVPS_128_StoreForm(reg)
+VAESENC(reg)
   before
     90fe0127a2a4c190.508844baaf9b18fc.58ae3f3006558713.1a38b7f900bba3ee
     2b6089bc73e3f607.b94cc7e3cc875a1a.6d9175acf05d932a.c1201f6ec2f97db9
@@ -43314,12 +43314,12 @@
     2c8d775a72b41426.6295ff69be97b755.199005b67aae4747.dcbfa86b96dc2e4d
     080ec0cadf997e6d
   after
-    90fe0127a2a4c190.508844baaf9b18fc.58ae3f3006558713.1a38b7f900bba3ee
+    0000000000000000.0000000000000000.075737ad4e2eb320.ce861ab84e1c32f3
     2b6089bc73e3f607.b94cc7e3cc875a1a.6d9175acf05d932a.c1201f6ec2f97db9
     9576b15484baa800.cb61dc2473d7fb7e.e4c30db58ef7bfac.63b39b4640561774
     2c8d775a72b41426.6295ff69be97b755.199005b67aae4747.dcbfa86b96dc2e4d
     080ec0cadf997e6d
-VMASKMOVPS_128_StoreForm(mem)
+VAESENC(mem)
   before
     c36d61503898c303.4af1d63cd85e7626.5ab3ac9eccd44acb.6844581d500f66a4
     e9a806e7bbe6b839.4dedcb65524309ac.8f865fafb6996f0b.2d2b0255ada45972
@@ -43327,13 +43327,13 @@
     e6e14dfdb69ca536.6ee1633cf4efb5f8.207ec91594ec629b.89c14ce869a0ab0b
     d808e41b021e812f
   after
-    c36d61503898c303.4af1d63cd85e7626.8f865fafb6996f0b.2d2b0255500f66a4
+    c36d61503898c303.4af1d63cd85e7626.5ab3ac9eccd44acb.6844581d500f66a4
     e9a806e7bbe6b839.4dedcb65524309ac.8f865fafb6996f0b.2d2b0255ada45972
-    568a2b7d878e1a3b.8fcf50417def0a63.dddb95889bf2e442.c49100ca2cfb5c5b
+    0000000000000000.0000000000000000.772a1e959cd1e746.aa3cb6ccef6a9220
     e6e14dfdb69ca536.6ee1633cf4efb5f8.207ec91594ec629b.89c14ce869a0ab0b
     d808e41b021e812f
 
-VMASKMOVPS_128_StoreForm(reg)
+VAESENC(reg)
   before
     0db3c3d090011b73.7477e653641d1456.4470ffc354ce4617.333b7742bf92a843
     840ce671b1d5b483.de19746bae1c24c7.6ec920403918f86b.f4de1bfc38f07066
@@ -43341,12 +43341,12 @@
     a7fae42b1b82d7b4.b3b15d9184c51649.2f03e3d0ff1fb264.ed0536c3820679ca
     dc21a5a98bd53165
   after
-    0db3c3d090011b73.7477e653641d1456.4470ffc354ce4617.333b7742bf92a843
+    0000000000000000.0000000000000000.3a615dcfe14b32af.676b7b4f68747291
     840ce671b1d5b483.de19746bae1c24c7.6ec920403918f86b.f4de1bfc38f07066
     995f476c01278a0a.ff937331afa591b3.4935c3213e5a08a0.3e32322d1a13772f
     a7fae42b1b82d7b4.b3b15d9184c51649.2f03e3d0ff1fb264.ed0536c3820679ca
     dc21a5a98bd53165
-VMASKMOVPS_128_StoreForm(mem)
+VAESENC(mem)
   before
     e953fbcb518d5c2a.0c28b81c9b73d82e.d53faf78488771b3.7d7e7cbb19f33160
     ee67b215f139b645.2334bfaa1e85c824.4308e6d018f85c1e.90f18a4c2763c243
@@ -43354,13 +43354,13 @@
     556537d12d9ee630.d619574d9c3c6932.6f7ff0874a13d4a5.70f3f61591440a69
     f6194b2424ce3804
   after
-    e953fbcb518d5c2a.0c28b81c9b73d82e.4308e6d0488771b3.90f18a4c2763c243
+    e953fbcb518d5c2a.0c28b81c9b73d82e.d53faf78488771b3.7d7e7cbb19f33160
     ee67b215f139b645.2334bfaa1e85c824.4308e6d018f85c1e.90f18a4c2763c243
-    c929487386e5fbe3.486bf6414044e541.d7da7d860f2293b5.c2aa09f1c5faa1b7
+    0000000000000000.0000000000000000.80dfc0fb6b367245.ff325dcb3c3b0e8d
     556537d12d9ee630.d619574d9c3c6932.6f7ff0874a13d4a5.70f3f61591440a69
     f6194b2424ce3804
 
-VMASKMOVPS_256_StoreForm(reg)
+VAESENCLAST(reg)
   before
     b067068a1c236835.6de6fd1b026f3457.2b8ae03acefa90a3.e5c4bcbee4d7d919
     fa2b22b315cfd6a7.ef79163d1f65a185.a20a8c747309983f.17755c16fa795f3f
@@ -43368,12 +43368,12 @@
     ae416fff775e5b01.9c062dbaa7edc6a5.65663e7f844c36aa.1b4a08de0787dd4b
     a5060c25370c4d89
   after
-    b067068a1c236835.6de6fd1b026f3457.2b8ae03acefa90a3.e5c4bcbee4d7d919
+    0000000000000000.0000000000000000.197897f5d640dfc6.f23a0d3a9d046b35
     fa2b22b315cfd6a7.ef79163d1f65a185.a20a8c747309983f.17755c16fa795f3f
     30b09c0caa5fbd07.b5ebfc24a38ae8e6.96e5586726f6bbb3.df5d4b7da7052140
     ae416fff775e5b01.9c062dbaa7edc6a5.65663e7f844c36aa.1b4a08de0787dd4b
     a5060c25370c4d89
-VMASKMOVPS_256_StoreForm(mem)
+VAESENCLAST(mem)
   before
     5b5fd43e539f2d29.d02b96fa1959ea40.819624ed4a97f7ee.69da3c29289744d1
     171fdd16764d3b55.f2ba0f672cdaa671.3e695da7a59637ef.008d4dcfaf6422d3
@@ -43381,13 +43381,13 @@
     14079fae4227cc03.a6f7e54c12a49957.b4048665f9c1d2c3.52e099c4d4b13e1b
     c718cbe9aa4af4b8
   after
-    171fdd16764d3b55.d02b96fa1959ea40.3e695da7a59637ef.008d4dcfaf6422d3
+    5b5fd43e539f2d29.d02b96fa1959ea40.819624ed4a97f7ee.69da3c29289744d1
     171fdd16764d3b55.f2ba0f672cdaa671.3e695da7a59637ef.008d4dcfaf6422d3
-    b613a297bc20313a.703ad6b44b6fcd3f.b04a54d6d7f541d1.84cb6ddfb43e0c5d
+    0000000000000000.0000000000000000.87cbb7b129d4bb31.1023a6a39a07a7b7
     14079fae4227cc03.a6f7e54c12a49957.b4048665f9c1d2c3.52e099c4d4b13e1b
     c718cbe9aa4af4b8
 
-VMASKMOVPS_256_StoreForm(reg)
+VAESENCLAST(reg)
   before
     3dbe01bcd29469e1.0ec65148236bc8dd.f03c3a9b1e044764.24646e402904a6ef
     122036a8e91bda42.7e1e324f7cfae0f3.aa57d00c0a1b1214.dd36885383cd7882
@@ -43395,12 +43395,12 @@
     44438e7c53129f59.33c4765904275786.dd3ab00af49ff207.9a6043d1221a098b
     5750db15a0b74059
   after
-    3dbe01bcd29469e1.0ec65148236bc8dd.f03c3a9b1e044764.24646e402904a6ef
+    0000000000000000.0000000000000000.57971ff3b2c847ea.571d99678e8ac2b4
     122036a8e91bda42.7e1e324f7cfae0f3.aa57d00c0a1b1214.dd36885383cd7882
     a08866198b6c8286.41d9c0b168dfd172.3092a30d73753710.bb46508a222506a7
     44438e7c53129f59.33c4765904275786.dd3ab00af49ff207.9a6043d1221a098b
     5750db15a0b74059
-VMASKMOVPS_256_StoreForm(mem)
+VAESENCLAST(mem)
   before
     cce19640b809653e.5a9da93bdd996b68.30abd1336bdd2d5a.0f9bf16d2a247fa3
     d6e0ef40851b3566.3fe1b3c3c68e225f.145a4b2bba0d101b.210164a3b0911990
@@ -43408,13 +43408,13 @@
     19596c6bafb0c62d.e15b84df23ef45b4.014091257e0ced12.540bcd391e506710
     2e47bc713ebb93fa
   after
-    cce19640b809653e.5a9da93bc68e225f.145a4b2b6bdd2d5a.0f9bf16d2a247fa3
+    cce19640b809653e.5a9da93bdd996b68.30abd1336bdd2d5a.0f9bf16d2a247fa3
     d6e0ef40851b3566.3fe1b3c3c68e225f.145a4b2bba0d101b.210164a3b0911990
-    511a63ff23f96cfc.4d5da881aa7c02ea.bb9d622d0cc3bcf4.6fb804192371fd7b
+    0000000000000000.0000000000000000.c4d705c2965c9ef5.e8253b67d0f33cc3
     19596c6bafb0c62d.e15b84df23ef45b4.014091257e0ced12.540bcd391e506710
     2e47bc713ebb93fa
 
-VMASKMOVPS_256_StoreForm(reg)
+VAESENCLAST(reg)
   before
     57b9cc2b1e3dbce6.0a69886f444afe24.5729444bd0742869.c20e54ff2bf45ea1
     2dabf8d55a621f80.001832f7ffd6d10e.0b11e3304b96e7b7.dad427a72f85cccc
@@ -43422,12 +43422,12 @@
     4c419aa659c6826c.6b7f214355ed376a.9d61ae141ce2e7c8.7f78ef12afd88fa8
     c4eedbad62b05bb1
   after
-    57b9cc2b1e3dbce6.0a69886f444afe24.5729444bd0742869.c20e54ff2bf45ea1
+    0000000000000000.0000000000000000.ea2816fe6776acee.30dc13568c5d3f8b
     2dabf8d55a621f80.001832f7ffd6d10e.0b11e3304b96e7b7.dad427a72f85cccc
     0b693fda8fb6f873.d731e6effb5dfb16.59605dfa30e1bd47.255e870aa7cdf3c0
     4c419aa659c6826c.6b7f214355ed376a.9d61ae141ce2e7c8.7f78ef12afd88fa8
     c4eedbad62b05bb1
-VMASKMOVPS_256_StoreForm(mem)
+VAESENCLAST(mem)
   before
     d08cc7c6dc631407.4e7e07a5531efa16.97cf5ddf28924233.3362d2ecaa24a1e4
     7f1d30493afd76d5.6b6b804319489c1e.39ed18af9156d8a0.77adc6ee76342647
@@ -43435,13 +43435,13 @@
     354c653d1012238b.6a888c0d7b474df6.4cc3f99c93719410.79550b1b3beb8595
     ef4954206baad5d8
   after
-    7f1d30493afd76d5.4e7e07a5531efa16.97cf5ddf9156d8a0.77adc6eeaa24a1e4
+    d08cc7c6dc631407.4e7e07a5531efa16.97cf5ddf28924233.3362d2ecaa24a1e4
     7f1d30493afd76d5.6b6b804319489c1e.39ed18af9156d8a0.77adc6ee76342647
-    ac6e902297883c47.005503ed48d2a42f.2ca5cda0ab47b4db.c59085841e9db49e
+    0000000000000000.0000000000000000.165aaaa6dd8aefd3.0b37b3c4b8951544
     354c653d1012238b.6a888c0d7b474df6.4cc3f99c93719410.79550b1b3beb8595
     ef4954206baad5d8
 
-VMASKMOVPD_128_StoreForm(reg)
+VAESDEC(reg)
   before
     82b85dfd4a67e212.f5812a86c0a7e7cb.035015104f34d41f.7412169164de326c
     90ed212073ade6ef.c8d95ce9c4514333.28f99c635f247555.8260a2693a9c4a1b
@@ -43449,12 +43449,12 @@
     8addcae41405c545.1627f3ad361ab72e.871d91a5a53ef49a.bc24f477683adc20
     a133b284f731cdcf
   after
-    82b85dfd4a67e212.f5812a86c0a7e7cb.035015104f34d41f.7412169164de326c
+    0000000000000000.0000000000000000.ec28411c7084ad99.9316a8546b170bcf
     90ed212073ade6ef.c8d95ce9c4514333.28f99c635f247555.8260a2693a9c4a1b
     74369cf382091d1c.89227552381ef5f0.36cf1c7148a36b45.5177181232b79a48
     8addcae41405c545.1627f3ad361ab72e.871d91a5a53ef49a.bc24f477683adc20
     a133b284f731cdcf
-VMASKMOVPD_128_StoreForm(mem)
+VAESDEC(mem)
   before
     db70cf25fba82880.2d30a75ec5301815.49b351e7dc4f4518.7830f76d13804901
     45a7c64691acaa60.bb7930cd30135339.00930beb46cc5ddb.65544b342df6a926
@@ -43462,13 +43462,13 @@
     1d3132b8e188135b.041f333aa536702c.667f8400d4c7169b.a4ffa96fd7aa7558
     ad1eadbb9e025abd
   after
-    db70cf25fba82880.2d30a75ec5301815.49b351e7dc4f4518.65544b342df6a926
+    db70cf25fba82880.2d30a75ec5301815.49b351e7dc4f4518.7830f76d13804901
     45a7c64691acaa60.bb7930cd30135339.00930beb46cc5ddb.65544b342df6a926
-    bda313d3d4480f9a.8f04609df13cb25d.15939ea48f9ab9a3.aad58766902a4eb4
+    0000000000000000.0000000000000000.92188afa7480c62b.3143db5e0f973b5e
     1d3132b8e188135b.041f333aa536702c.667f8400d4c7169b.a4ffa96fd7aa7558
     ad1eadbb9e025abd
 
-VMASKMOVPD_128_StoreForm(reg)
+VAESDEC(reg)
   before
     227d8db782bc3990.431ea0e2d37972ce.7815a510e78eca53.cd233bea305e2fef
     5f6a47cd1f674d7d.0934d73bc726e720.4531b38c54cffc7d.284b3e4ebf6bc2cd
@@ -43476,12 +43476,12 @@
     a11936fbf1b90653.e90d952e23e50510.5e0f90221d3dd78c.26551934e91940d1
     81d0e98ebbd2a550
   after
-    227d8db782bc3990.431ea0e2d37972ce.7815a510e78eca53.cd233bea305e2fef
+    0000000000000000.0000000000000000.9e948f506ba25223.8af8053b890bcf84
     5f6a47cd1f674d7d.0934d73bc726e720.4531b38c54cffc7d.284b3e4ebf6bc2cd
     c02fd66a108cd32f.4c3f55b1d89c2f7d.c9c1581887854257.51c20a189efb895f
     a11936fbf1b90653.e90d952e23e50510.5e0f90221d3dd78c.26551934e91940d1
     81d0e98ebbd2a550
-VMASKMOVPD_128_StoreForm(mem)
+VAESDEC(mem)
   before
     3ffff51230317208.5e7463eb5f792494.ba6914a0c3102706.62685714b182f8c9
     3caeb9ad65426424.528c59a5f558679f.9c1e4cf2d5264f8b.2f17a95ce0e0e1ba
@@ -43491,11 +43491,11 @@
   after
     3ffff51230317208.5e7463eb5f792494.ba6914a0c3102706.62685714b182f8c9
     3caeb9ad65426424.528c59a5f558679f.9c1e4cf2d5264f8b.2f17a95ce0e0e1ba
-    55a9b249751136d1.dbac159750e30c20.6bf9bb10743539ca.236a836545e4cd0a
+    0000000000000000.0000000000000000.cfd42ae74dc7932e.7fd929dd85eb24b8
     64bb5ad47daba63a.5422922c0ca54ec2.04c6dce6bc48a3ef.98ace09b7c19fa66
     eb28bc6a220ba17a
 
-VMASKMOVPD_128_StoreForm(reg)
+VAESDEC(reg)
   before
     792b133ed34701f1.46b22f39981b6e8c.1938ccd0c32b6b32.41512b60cb6c4727
     9c01e2832a585477.d758ac63e36e4bf3.863bc0ef14009c1b.ff66256abaace29e
@@ -43503,12 +43503,12 @@
     1456d4113b2ac663.76e48fbb77ea32ae.c738c24feec7320b.6e5d07dfadb0ecf8
     d7d7e722e98dd332
   after
-    792b133ed34701f1.46b22f39981b6e8c.1938ccd0c32b6b32.41512b60cb6c4727
+    0000000000000000.0000000000000000.004f9fa026527bdd.e42d6265c0ccf010
     9c01e2832a585477.d758ac63e36e4bf3.863bc0ef14009c1b.ff66256abaace29e
     b1f623a5c3cad7b9.f37a4e4079aff89a.f77768f698b0202a.1ad145f1a7143080
     1456d4113b2ac663.76e48fbb77ea32ae.c738c24feec7320b.6e5d07dfadb0ecf8
     d7d7e722e98dd332
-VMASKMOVPD_128_StoreForm(mem)
+VAESDEC(mem)
   before
     310c61a477b7a15b.216cf0312d035d21.3c62edc0f82cb55a.54c9c967afd20d69
     58c6f2537238119f.3586747336e1d79e.21bfe33b19803dcb.f97879ab795ceef0
@@ -43518,11 +43518,11 @@
   after
     310c61a477b7a15b.216cf0312d035d21.3c62edc0f82cb55a.54c9c967afd20d69
     58c6f2537238119f.3586747336e1d79e.21bfe33b19803dcb.f97879ab795ceef0
-    28d1141af61ee02a.aaee5a41f2517186.01c8ed19f5f2852d.118fcf86e8f2104e
+    0000000000000000.0000000000000000.6fd2d9bbdb9c1640.59c8125debbb7f3f
     7dfb45e52074ca27.ddf1a009fbde6686.b84a8744a88e4aab.fa5bc663971fb02d
     0e285ab0236f0a39
 
-VMASKMOVPD_256_StoreForm(reg)
+VAESDECLAST(reg)
   before
     ab4287d8276f5a1f.330f01a00b478bc2.2adb4136f014f44a.220f2eaa4f614872
     2bf549473faadb8b.26d8c237d4a2de28.edf839346a80557e.1be45d3506773bad
@@ -43530,12 +43530,12 @@
     48557daa1d0263a3.33bc47a96e212d04.45fa2053632882e3.2aed436e1198ee32
     f8baf3f49ebd26d3
   after
-    ab4287d8276f5a1f.330f01a00b478bc2.2adb4136f014f44a.220f2eaa4f614872
+    0000000000000000.0000000000000000.273d68475baf4b47.2774d90aace08591
     2bf549473faadb8b.26d8c237d4a2de28.edf839346a80557e.1be45d3506773bad
     ec8c9d6908accb28.3223069696918185.8293856f08adc6cd.7f9590d3e8dade89
     48557daa1d0263a3.33bc47a96e212d04.45fa2053632882e3.2aed436e1198ee32
     f8baf3f49ebd26d3
-VMASKMOVPD_256_StoreForm(mem)
+VAESDECLAST(mem)
   before
     c5c61a50ab534499.9d9ae7761b37e2a8.056f045d775da1d2.9277064c197bc66d
     6cde366e526802af.45a8d73a9ed782e2.8308b69ccd51971b.c55733c6c635ce17
@@ -43543,13 +43543,13 @@
     bd623ba0e43d507d.024f3556a08a18a7.f81bed6fd393fccc.4c7053ee73071979
     59413d74ab38d48a
   after
-    6cde366e526802af.45a8d73a9ed782e2.8308b69ccd51971b.9277064c197bc66d
+    c5c61a50ab534499.9d9ae7761b37e2a8.056f045d775da1d2.9277064c197bc66d
     6cde366e526802af.45a8d73a9ed782e2.8308b69ccd51971b.c55733c6c635ce17
-    cbcec23ab2081d42.9dcb4760406f80fd.8b52da548d0acc0a.39e6a32e05dfd68d
+    0000000000000000.0000000000000000.c2b581413684c796.12c8ea8b1e0bbfea
     bd623ba0e43d507d.024f3556a08a18a7.f81bed6fd393fccc.4c7053ee73071979
     59413d74ab38d48a
 
-VMASKMOVPD_256_StoreForm(reg)
+VAESDECLAST(reg)
   before
     bca45f2b49ff436a.1d661b8d0716598e.ce7f9c8657b48689.a52d6adbbaf8e28c
     d1e7b57eeae6a2c6.c9a5e0eb349cf29e.5ea9785e047a0552.7055cd835e463b77
@@ -43557,12 +43557,12 @@
     8038e9ada34a1ea0.710806ae22e4c671.3b1680b3a9072843.cc17363750cb367d
     1649341bd5194fef
   after
-    bca45f2b49ff436a.1d661b8d0716598e.ce7f9c8657b48689.a52d6adbbaf8e28c
+    0000000000000000.0000000000000000.93faf3d4ddff52e4.04e8da120c3502bb
     d1e7b57eeae6a2c6.c9a5e0eb349cf29e.5ea9785e047a0552.7055cd835e463b77
     f35439db2a7c2c49.9bed05a88addd7dc.0e17c5494067d2ac.345f9353dc88c3b9
     8038e9ada34a1ea0.710806ae22e4c671.3b1680b3a9072843.cc17363750cb367d
     1649341bd5194fef
-VMASKMOVPD_256_StoreForm(mem)
+VAESDECLAST(mem)
   before
     ecc008eb8780cb3d.d3dfc060f4deb477.26c360eb1abd798c.3ff2a408dbe745c5
     2c492f93830c6691.4794ba60b7c32979.95ea8d4a8e75ad57.77f72cb4719263dc
@@ -43570,13 +43570,13 @@
     55c2621cc7c0e7fc.065d08f804b2a3b0.15ab551d57af87af.f3ab5ec13b7a947a
     eff3fffba6cf1f5a
   after
-    2c492f93830c6691.d3dfc060f4deb477.95ea8d4a8e75ad57.3ff2a408dbe745c5
+    ecc008eb8780cb3d.d3dfc060f4deb477.26c360eb1abd798c.3ff2a408dbe745c5
     2c492f93830c6691.4794ba60b7c32979.95ea8d4a8e75ad57.77f72cb4719263dc
-    b0b12300e4c8db17.3aa5d31a8886ba52.9b490bb699171dff.3f7117230894be34
+    0000000000000000.0000000000000000.0ae578b7b7c93b56.d949a4ced9d8f156
     55c2621cc7c0e7fc.065d08f804b2a3b0.15ab551d57af87af.f3ab5ec13b7a947a
     eff3fffba6cf1f5a
 
-VMASKMOVPD_256_StoreForm(reg)
+VAESDECLAST(reg)
   before
     8f93f53be61f9c7f.f84867d54700466c.09075367c6d3203d.dddee86ae54aa594
     2fd83cef97f74795.7311ae168195b492.9df0b2d46b766ca5.d1ac3e895ff333d9
@@ -43584,12 +43584,12 @@
     df80ae5fb96d1548.6598f3df91ecabb2.ecaf9a54cb6f64b9.a84c28ee84a19336
     45b6b30b68bddca5
   after
-    8f93f53be61f9c7f.f84867d54700466c.09075367c6d3203d.dddee86ae54aa594
+    0000000000000000.0000000000000000.a4ce98b3fb5815bc.cef5b395b1b8d14e
     2fd83cef97f74795.7311ae168195b492.9df0b2d46b766ca5.d1ac3e895ff333d9
     2b0ed08254e25b4a.a4e8b3ca908aec9b.206420aa8e26c495.cbe2d567e0b7efab
     df80ae5fb96d1548.6598f3df91ecabb2.ecaf9a54cb6f64b9.a84c28ee84a19336
     45b6b30b68bddca5
-VMASKMOVPD_256_StoreForm(mem)
+VAESDECLAST(mem)
   before
     7cebf3aba7178525.a77cd0f46323b13b.93eee9409fc6ad04.5e1c1b40c0dd87bc
     2ab962b95ebc4ce1.de4c34aced906bd1.0ab611d9d624adbd.d3f99ed906fd6a4b
@@ -43597,9 +43597,1548 @@
     5b4bc2cea2151fc0.0e9cb03513c02790.44cce764329d9a12.312ea0c2fb8160bc
     d41f15eae1fdeaf5
   after
-    7cebf3aba7178525.de4c34aced906bd1.0ab611d9d624adbd.d3f99ed906fd6a4b
+    7cebf3aba7178525.a77cd0f46323b13b.93eee9409fc6ad04.5e1c1b40c0dd87bc
     2ab962b95ebc4ce1.de4c34aced906bd1.0ab611d9d624adbd.d3f99ed906fd6a4b
-    2bea7e20a9b8eb07.e23ed5f3f4407eb3.a6bce79653126808.a590218b3b5b4911
+    0000000000000000.0000000000000000.3687f1a53ce772c9.146543a5697b6470
     5b4bc2cea2151fc0.0e9cb03513c02790.44cce764329d9a12.312ea0c2fb8160bc
     d41f15eae1fdeaf5
 
+VAESIMC(reg)
+  before
+    e8af7e70895b246a.96a8aaae67e1a33a.beb3bfdfe79ba112.beb28e2d8ed0ff06
+    ca2ad6be90264ac7.b8cdb3ac142734a1.4ece005b0b5e2ae5.f13957de83b85211
+    d6db194191ea97b8.9e8658b4c4f48e21.193b6e161c94fcb6.b92ebe642e60505f
+    68104366293349e8.229f15b294536de5.7d45067db5c95431.f25e3fa9aad4b51b
+    7893579b14213d72
+  after
+    0000000000000000.0000000000000000.7c77bfee769f0922.173b8aeb507facc2
+    ca2ad6be90264ac7.b8cdb3ac142734a1.4ece005b0b5e2ae5.f13957de83b85211
+    d6db194191ea97b8.9e8658b4c4f48e21.193b6e161c94fcb6.b92ebe642e60505f
+    68104366293349e8.229f15b294536de5.7d45067db5c95431.f25e3fa9aad4b51b
+    7893579b14213d72
+VAESIMC(mem)
+  before
+    279981258852a38f.dd135198f48e9903.21e366929f508c19.d437c2fa72896d01
+    db3e39332073a49f.8f313e428c86c6b6.761fc74102f8a8ea.7c5ea0fbf06185d3
+    704dfbb1fb91fcce.dbb606d290a70aad.ff1fb5a9d8567d84.d0069bebcbddd653
+    c291438b32b76647.1deea5b3997ea394.97afabb83d76c712.2b7baf369e879c2c
+    eb09d84805ed150a
+  after
+    279981258852a38f.dd135198f48e9903.21e366929f508c19.d437c2fa72896d01
+    db3e39332073a49f.8f313e428c86c6b6.761fc74102f8a8ea.7c5ea0fbf06185d3
+    0000000000000000.0000000000000000.c63eed237856dfab.89aa32caab31818c
+    c291438b32b76647.1deea5b3997ea394.97afabb83d76c712.2b7baf369e879c2c
+    eb09d84805ed150a
+
+VAESIMC(reg)
+  before
+    6afb138d9d9a7b9b.acd78eade4f19f37.b12518514696ca16.1a9b25584e6541c1
+    069f5b71021b0b89.0ceb57032a4c63c9.f3a65918307cbedf.64af9f77262da8bd
+    193fac60cffb0080.bd991a7a22d36d2a.3ebe6674f5bab99c.51b69500e2ddb731
+    002802c7a0c6982d.9bad53fce8927b86.f0b93ad231def8f9.bd7d84df9e7f2c4a
+    83d1e700751fc133
+  after
+    0000000000000000.0000000000000000.bfced83b1bab8359.0142211016382abd
+    069f5b71021b0b89.0ceb57032a4c63c9.f3a65918307cbedf.64af9f77262da8bd
+    193fac60cffb0080.bd991a7a22d36d2a.3ebe6674f5bab99c.51b69500e2ddb731
+    002802c7a0c6982d.9bad53fce8927b86.f0b93ad231def8f9.bd7d84df9e7f2c4a
+    83d1e700751fc133
+VAESIMC(mem)
+  before
+    817c3a4f83c93319.18a6591012090d3c.82f27f7797964708.64e3d29c7f74b7a1
+    924af9b8e58a3d28.bb05aea9c04f9b58.4d3619d54cea8ddd.f68828407c073141
+    9109a127b66d9d8b.4690fcfc4724802e.da439c04229a0b30.02f43a28c323a385
+    5c84ad89137e0d6e.15953f774215f669.04e687ef35b37b2e.e47203c2f0544918
+    f7507f79a0275ea7
+  after
+    817c3a4f83c93319.18a6591012090d3c.82f27f7797964708.64e3d29c7f74b7a1
+    924af9b8e58a3d28.bb05aea9c04f9b58.4d3619d54cea8ddd.f68828407c073141
+    0000000000000000.0000000000000000.3fa532d0d7d29bd0.baca853c20eed201
+    5c84ad89137e0d6e.15953f774215f669.04e687ef35b37b2e.e47203c2f0544918
+    f7507f79a0275ea7
+
+VAESIMC(reg)
+  before
+    99d8abb96e2720dd.ce8699c817ca49ff.855e73854ead3ab6.a6eb5382a2409a02
+    255781eef7e1c967.c2dce1d2de5c0f68.f0389592067888c1.9e1e7ea9844d23d9
+    f619ff84d7e095f1.16520291864019d5.b36fa00a06031b35.c64b8350f8e7d3df
+    6a6a20e7a9b0c226.a4b476f328832473.2a4f9059ecd930bf.fc3dde631a19663f
+    1ac10bcf04f09826
+  after
+    0000000000000000.0000000000000000.7da882217cb937d9.66be9f1991b29cac
+    255781eef7e1c967.c2dce1d2de5c0f68.f0389592067888c1.9e1e7ea9844d23d9
+    f619ff84d7e095f1.16520291864019d5.b36fa00a06031b35.c64b8350f8e7d3df
+    6a6a20e7a9b0c226.a4b476f328832473.2a4f9059ecd930bf.fc3dde631a19663f
+    1ac10bcf04f09826
+VAESIMC(mem)
+  before
+    fea4867ed57625c0.dc95e18309de8ab2.4acebbe3e230eb6e.b12361eb5187030a
+    82b0cc5da6b9c838.a7e83cc494f52a43.e26c4c4dd0542cf1.a4390f2cd397cfc3
+    83b1585996c53eba.29ad2f17e581dd83.4959a61d0df9a129.5fdb97890e97d196
+    de75a65dbea54274.bc31b5e6990fe11e.5c62433fb52e0641.3e57f46c9d13452e
+    9df722431c966738
+  after
+    fea4867ed57625c0.dc95e18309de8ab2.4acebbe3e230eb6e.b12361eb5187030a
+    82b0cc5da6b9c838.a7e83cc494f52a43.e26c4c4dd0542cf1.a4390f2cd397cfc3
+    0000000000000000.0000000000000000.8c0fde811c35bbc5.b0c95031c94f3e67
+    de75a65dbea54274.bc31b5e6990fe11e.5c62433fb52e0641.3e57f46c9d13452e
+    9df722431c966738
+
+VAESKEYGENASSIST_0x00(reg)
+  before
+    d8071d7828ac725f.6dc733543d659290.bdc0ca9f4b2970c1.f553a19fe5fc1967
+    4bd5e2795ce1a350.0d72792c2c11e83a.89a66aad975ec618.f1f83b2ab87194c4
+    52ac6bb155c236b7.9b43f6d0a9b6009f.7a2f927b1a3721ce.2d1d8dca4b983486
+    49d7b68cafda673f.f106252cd05f98eb.eea63d777042bb90.838e136cba7eb4d9
+    d0164afd1f2dd2e9
+  after
+    0000000000000000.0000000000000000.21da154fda154f21.74d8a45dd8a45d74
+    4bd5e2795ce1a350.0d72792c2c11e83a.89a66aad975ec618.f1f83b2ab87194c4
+    52ac6bb155c236b7.9b43f6d0a9b6009f.7a2f927b1a3721ce.2d1d8dca4b983486
+    49d7b68cafda673f.f106252cd05f98eb.eea63d777042bb90.838e136cba7eb4d9
+    d0164afd1f2dd2e9
+VAESKEYGENASSIST_0x00(mem)
+  before
+    f083ad6899b448e1.8ca3bf7604b67195.ec87822cbc196a49.3f58670c340bd109
+    bf9fb899411cd3ed.765d80dbf3e09164.68928abd89ef33e6.ca920ca6031c9fe6
+    1937e77b36732e3b.654ef72715e70359.41f3b7c954edafed.ec9e29b2780360d3
+    db17b7fc91c416f4.b4c51ec708540220.5375873d3920998b.ffc8b99a2f4c517b
+    605eb7cbc581ae8b
+  after
+    f083ad6899b448e1.8ca3bf7604b67195.ec87822cbc196a49.3f58670c340bd109
+    bf9fb899411cd3ed.765d80dbf3e09164.68928abd89ef33e6.ca920ca6031c9fe6
+    0000000000000000.0000000000000000.71ce1713ce171371.fe756a85756a85fe
+    db17b7fc91c416f4.b4c51ec708540220.5375873d3920998b.ffc8b99a2f4c517b
+    605eb7cbc581ae8b
+
+VAESKEYGENASSIST_0x00(reg)
+  before
+    6bab22b2d530b2af.df0ba307701c4747.bf0df32568b5cb64.7ae575065393aeec
+    7cfaf3b9fce59a92.02de2689ef867d5e.e17172afd0959ad1.9210fe0fbe52aa3b
+    ef98284ed62ba2e0.205ebf6c290e7365.783f95cfdd81ab15.77c09c43976948a5
+    20d1bbdcfd8e0646.1555e79d3bc1e689.dec15af32a0439da.05c1cd90f9e54555
+    18e10ce101d25d78
+  after
+    0000000000000000.0000000000000000.8abc752abc752a8a.1af5badef5bade1a
+    7cfaf3b9fce59a92.02de2689ef867d5e.e17172afd0959ad1.9210fe0fbe52aa3b
+    ef98284ed62ba2e0.205ebf6c290e7365.783f95cfdd81ab15.77c09c43976948a5
+    20d1bbdcfd8e0646.1555e79d3bc1e689.dec15af32a0439da.05c1cd90f9e54555
+    18e10ce101d25d78
+VAESKEYGENASSIST_0x00(mem)
+  before
+    8cebd522ca3a4c3a.6bf1aacf109a0170.bc901c0940aa92f6.7144bc8653aa81cc
+    3daaa53f712bcdc6.2c44f192a8dcd00a.f3dbd89a54d533d8.8b14b7f4f500bf98
+    07ebf62411b19d49.bf168a9364dfafbf.9502993e944f845a.8a7c47a9ac902eea
+    c67a46bdc7d678ee.80b2733edd2fda3b.7ed0dbe01c2342a8.c8ca691113e90b6d
+    a3481898c69492ce
+  after
+    8cebd522ca3a4c3a.6bf1aacf109a0170.bc901c0940aa92f6.7144bc8653aa81cc
+    3daaa53f712bcdc6.2c44f192a8dcd00a.f3dbd89a54d533d8.8b14b7f4f500bf98
+    0000000000000000.0000000000000000.0165609c65609c01.44a31b65a31b6544
+    c67a46bdc7d678ee.80b2733edd2fda3b.7ed0dbe01c2342a8.c8ca691113e90b6d
+    a3481898c69492ce
+
+VAESKEYGENASSIST_0x00(reg)
+  before
+    754450aa621fffb9.562310f7aea81ae2.cb66a7fdb1598c2b.8a13186b075d28ef
+    9c080db382168dd9.92b2d1bce3333e50.fc7c223d7ce8023b.9595cecd710af45b
+    72e14b20c30379da.58f203fa8181a166.6f41e06bd9697716.7a2378f177356017
+    541a075bc174ff69.83b1249ba4a0ff4d.8001def165672969.178992c334ea2950
+    47939830c5360a32
+  after
+    0000000000000000.0000000000000000.7fa883e1a883e17f.a1da26bcda26bca1
+    9c080db382168dd9.92b2d1bce3333e50.fc7c223d7ce8023b.9595cecd710af45b
+    72e14b20c30379da.58f203fa8181a166.6f41e06bd9697716.7a2378f177356017
+    541a075bc174ff69.83b1249ba4a0ff4d.8001def165672969.178992c334ea2950
+    47939830c5360a32
+VAESKEYGENASSIST_0x00(mem)
+  before
+    e50d07224524c1e8.9f013cd216f55a32.eeb9af8d699c1334.8b07173dbb6e52e0
+    cfc25a86d1c0089f.ade0e6f06010c7e1.77d720bbec7f9a44.eba187b9770a2f26
+    e0800d4984179b82.db0501213b538221.f9d7f311485850ac.fe192ad336c8fbe8
+    f3119c557b3438be.85ba8ad1424ac79e.4f85a57b9930f196.1fbcfcf69333f3d1
+    aad6fa8e2bd8538e
+  after
+    e50d07224524c1e8.9f013cd216f55a32.eeb9af8d699c1334.8b07173dbb6e52e0
+    cfc25a86d1c0089f.ade0e6f06010c7e1.77d720bbec7f9a44.eba187b9770a2f26
+    0000000000000000.0000000000000000.5d2856792856795d.273dc5f03dc5f027
+    f3119c557b3438be.85ba8ad1424ac79e.4f85a57b9930f196.1fbcfcf69333f3d1
+    aad6fa8e2bd8538e
+
+VAESKEYGENASSIST_0x31(reg)
+  before
+    fab31f079a4257cb.e6428398d123997e.074c7c6c127fd106.57adb1e5fc15382f
+    6d9f67cd7afd3b33.93df3ffda2f17bef.bd07d35e4681dd02.eb1a933b8c12e2a2
+    5de6ce4c6a963a72.d8b44b700ba9993d.04368b137bd92741.e999c76a6633ab1c
+    28d351f104989136.8f8c23dc2858b193.3627a0f74c15ea6d.2bf7ca5ca5854ec8
+    8ffe16fe661388d3
+  after
+    0000000000000000.0000000000000000.7df2050cf2053d7d.021eeef71eeec602
+    6d9f67cd7afd3b33.93df3ffda2f17bef.bd07d35e4681dd02.eb1a933b8c12e2a2
+    5de6ce4c6a963a72.d8b44b700ba9993d.04368b137bd92741.e999c76a6633ab1c
+    28d351f104989136.8f8c23dc2858b193.3627a0f74c15ea6d.2bf7ca5ca5854ec8
+    8ffe16fe661388d3
+VAESKEYGENASSIST_0x31(mem)
+  before
+    ef7a293dc4ea1569.28b3eb26e48f7b29.9535433014097d1e.b0240f7755c06432
+    28397f04dc14b1b5.bbd29859a60735f7.c7792855ebc8b90a.ce7ad3fd3366cf3e
+    1706923ec9a017e4.3b7c54f4e88dfb4d.ff254d38caa12382.ec75e8f78294673a
+    96acdfd9a8970422.06fd1b6543ad09d7.1a052ec5cda175b2.65614acfdcd56ad5
+    978af6f3e0b612b9
+  after
+    ef7a293dc4ea1569.28b3eb26e48f7b29.9535433014097d1e.b0240f7755c06432
+    28397f04dc14b1b5.bbd29859a60735f7.c7792855ebc8b90a.ce7ad3fd3366cf3e
+    0000000000000000.0000000000000000.042a962b2a961a04.f5e73647e73676f5
+    96acdfd9a8970422.06fd1b6543ad09d7.1a052ec5cda175b2.65614acfdcd56ad5
+    978af6f3e0b612b9
+
+VAESKEYGENASSIST_0x31(reg)
+  before
+    dd3ce7ce28c19b92.82f8e3c09407349a.76a1ea1755f19b40.f5e547e90ed36cc8
+    93c218cc5085430d.b7b619dfaafb6278.e8b3bc76bae7ec35.6a90148eac44c3ed
+    15698859f58b44d6.12b2fe2305804bea.b9818dee0d1b3961.56d412a2c1ff3850
+    bf7d30e1b261db99.6db80c76c1a1ab19.435559ebeb17bd71.957bbc0f6910851b
+    03528ec3c183677b
+  after
+    0000000000000000.0000000000000000.28560c6c560c5d28.3ab148f8b148c93a
+    93c218cc5085430d.b7b619dfaafb6278.e8b3bc76bae7ec35.6a90148eac44c3ed
+    15698859f58b44d6.12b2fe2305804bea.b9818dee0d1b3961.56d412a2c1ff3850
+    bf7d30e1b261db99.6db80c76c1a1ab19.435559ebeb17bd71.957bbc0f6910851b
+    03528ec3c183677b
+VAESKEYGENASSIST_0x31(mem)
+  before
+    7d2604a9e465999b.ec4a0ed024924400.a594c1c5fb6a3e34.e37c1cd9ef69b611
+    ddc09badefc2d8a8.fa1c1c93e6abbaba.961198fdcee7bf65.f642d324b59d5eec
+    00efcdbbfda4e0cd.443f599495367a71.1cfd0d085725ebd8.d6f27939da3df1af
+    c27e18bf2a196d37.25febe40ccc2c0d2.13229cd4b2307ebb.e0da0a82f9d7ad06
+    7044836daff7cc9c
+  after
+    7d2604a9e465999b.ec4a0ed024924400.a594c1c5fb6a3e34.e37c1cd9ef69b611
+    ddc09badefc2d8a8.fa1c1c93e6abbaba.961198fdcee7bf65.f642d324b59d5eec
+    0000000000000000.0000000000000000.a6062249062278a6.351110ad11109c35
+    c27e18bf2a196d37.25febe40ccc2c0d2.13229cd4b2307ebb.e0da0a82f9d7ad06
+    7044836daff7cc9c
+
+VAESKEYGENASSIST_0x31(reg)
+  before
+    e27ede6497288b1d.ff38f8a5932c3a12.fba6480427d8c888.574dc24bfa123437
+    92d219d54ef62636.93eae75a54ea0489.2184f44b4306cd40.c449f95b4bd9c87b
+    dc8d2f2b70edd893.5a6062c8885e87c8.f2e2bd81bcd70ca6.36e4bfefc290f7b1
+    1cfa1cd2979adee0.2f66e6dd4b947ffd.cc0c9f112dd8c165.89e990f37a447d05
+    9923e653900015a5
+  after
+    0000000000000000.0000000000000000.0c89984b89987a0c.df056939056908df
+    92d219d54ef62636.93eae75a54ea0489.2184f44b4306cd40.c449f95b4bd9c87b
+    dc8d2f2b70edd893.5a6062c8885e87c8.f2e2bd81bcd70ca6.36e4bfefc290f7b1
+    1cfa1cd2979adee0.2f66e6dd4b947ffd.cc0c9f112dd8c165.89e990f37a447d05
+    9923e653900015a5
+VAESKEYGENASSIST_0x31(mem)
+  before
+    425f3ffb1fd07cba.ae67dd36618874c8.f0c8ee83ba99a752.0950966932942729
+    5f6916d844c16e73.ee1f6dc36a43d5f7.7852f7a8f178bcf3.07f99ff468977ba0
+    ce0de7d41adea6fa.386dc7e54d583f1a.a3cf7b370b3d790e.2052b51f6b6ef974
+    6a172edcbd33e27b.e89eea08a752ebdd.4d0df81c24f59ccc.b2a8d454d5a4dd51
+    1747f80045c562e4
+  after
+    425f3ffb1fd07cba.ae67dd36618874c8.f0c8ee83ba99a752.0950966932942729
+    5f6916d844c16e73.ee1f6dc36a43d5f7.7852f7a8f178bcf3.07f99ff468977ba0
+    0000000000000000.0000000000000000.ec8ce8198ce828ec.f90153a1015390f9
+    6a172edcbd33e27b.e89eea08a752ebdd.4d0df81c24f59ccc.b2a8d454d5a4dd51
+    1747f80045c562e4
+
+VAESKEYGENASSIST_0xB2(reg)
+  before
+    ac7b1e90555ec5d9.0f5268dd4acddc23.5afecf9913be18eb.51d6e94359abdf5c
+    ce90406ea1fa42db.988c0fc2ddb7501e.ead973022d2701f1.8df7ca98c56bffe8
+    d7d25c08c6251497.e38fa17691fdfc97.f37bd3b19219e19b.dc3c17078542b79c
+    248c6dc95f6c78b8.cb2899e782ac9abb.d32fea11de20f494.19704d7cb43bc5a5
+    2261e7e46f62e32f
+  after
+    0000000000000000.0000000000000000.c80d21d40d2166c8.c586eb4286ebf0c5
+    ce90406ea1fa42db.988c0fc2ddb7501e.ead973022d2701f1.8df7ca98c56bffe8
+    d7d25c08c6251497.e38fa17691fdfc97.f37bd3b19219e19b.dc3c17078542b79c
+    248c6dc95f6c78b8.cb2899e782ac9abb.d32fea11de20f494.19704d7cb43bc5a5
+    2261e7e46f62e32f
+VAESKEYGENASSIST_0xB2(mem)
+  before
+    d2d96129d1c4cd65.110b701c095aaaeb.2b237400cdcfe7b6.e542b48dacc97889
+    04a53739f76c4174.fa9c5f6f5f7be6dc.e14cacad8e739eb3.85012e93989fa725
+    9691e5fffc67f988.3c89382dfd5c6736.c76fbfdae0a27cde.0eb6538e3f2fbe15
+    6269e866fcbfb2cc.311ef6c280886aa6.bb572873df6a3d65.deae1eea3d04f905
+    50348e132caa93a0
+  after
+    d2d96129d1c4cd65.110b701c095aaaeb.2b237400cdcfe7b6.e542b48dacc97889
+    04a53739f76c4174.fa9c5f6f5f7be6dc.e14cacad8e739eb3.85012e93989fa725
+    0000000000000000.0000000000000000.63f12620f1269263.5dd92c3fd92c8d5d
+    6269e866fcbfb2cc.311ef6c280886aa6.bb572873df6a3d65.deae1eea3d04f905
+    50348e132caa93a0
+
+VAESKEYGENASSIST_0xB2(reg)
+  before
+    bf969c76abaec992.46f9bb5c1582276c.36a9959b848b2bd7.97d16465a8d79d72
+    891e457d539ad789.1c0ddacc60bc1696.a7751122a4f2e676.39aaed9a56f45831
+    081a8695c3fdf92f.c170c1a2fb783973.e0cd67c47d48d62f.7bac410006cd29cf
+    9ad45a2b94606a30.12efedca01c24c32.3dfe92eeaa1a38ad.3ba4db81d36ecd78
+    535d370bdae4ff57
+  after
+    0000000000000000.0000000000000000.1ce1bd37e1bd851c.6321913121918363
+    891e457d539ad789.1c0ddacc60bc1696.a7751122a4f2e676.39aaed9a56f45831
+    081a8695c3fdf92f.c170c1a2fb783973.e0cd67c47d48d62f.7bac410006cd29cf
+    9ad45a2b94606a30.12efedca01c24c32.3dfe92eeaa1a38ad.3ba4db81d36ecd78
+    535d370bdae4ff57
+VAESKEYGENASSIST_0xB2(mem)
+  before
+    a0a5d189363a7d99.9999bdaa65516739.e957d9308fa60dfd.1a548e0ac7f2479d
+    fe4626e6047d0169.63b4ac7dcf5c2cf6.237101c1c1313601.d31b5786715e41aa
+    4a0db1105fb847f4.52732112700bf412.9d0ce167b26e8469.c49feacd43ea6081
+    5ec6eef263f70d66.c3211ad4e4ecfd3a.31f3f5107e6ab262.492b424bda21e1ce
+    bd0d5b6cd18fff3c
+  after
+    a0a5d189363a7d99.9999bdaa65516739.e957d9308fa60dfd.1a548e0ac7f2479d
+    fe4626e6047d0169.63b4ac7dcf5c2cf6.237101c1c1313601.d31b5786715e41aa
+    0000000000000000.0000000000000000.041e5b871e5b3504.67a220aba2201967
+    5ec6eef263f70d66.c3211ad4e4ecfd3a.31f3f5107e6ab262.492b424bda21e1ce
+    bd0d5b6cd18fff3c
+
+VAESKEYGENASSIST_0xB2(reg)
+  before
+    7e8f319cc5c0f778.173d59792d460dea.1309922fc68b8019.bcf1baa642307e17
+    e7fec0475141052d.513e6e8fd9b204ad.9c78868fb272bc5c.1ad4ab1719cca2b5
+    54a605d9129d6508.e895aa218246aedb.bbbaf060452febaf.2766444e204bdb68
+    20d3fbbea36153b4.b80d881c440fc69f.cc1bce0f1b4e4abd.c074013772b7e45b
+    bfca5fbe2c1f7abb
+  after
+    0000000000000000.0000000000000000.d0eaf43eeaf48cd0.2fcc33a9cc331b2f
+    e7fec0475141052d.513e6e8fd9b204ad.9c78868fb272bc5c.1ad4ab1719cca2b5
+    54a605d9129d6508.e895aa218246aedb.bbbaf060452febaf.2766444e204bdb68
+    20d3fbbea36153b4.b80d881c440fc69f.cc1bce0f1b4e4abd.c074013772b7e45b
+    bfca5fbe2c1f7abb
+VAESKEYGENASSIST_0xB2(mem)
+  before
+    0134d8cf698c59b3.a9d09e63a1180adf.9e74846a3c180925.2ce71b06cf591533
+    627dea56450c3d70.4aebea32a74ec632.74941af9856d339a.3569d3b2fdde88bd
+    be73103fdeaae11e.5e6edb995290c55c.173ac7b33c1bff2a.44eff2804269de06
+    f1e0c7764d7302e8.43a66e033d694107.633106867d2d2a01.b5c375db398454ba
+    e432572e7fbd2586
+  after
+    0134d8cf698c59b3.a9d09e63a1180adf.9e74846a3c180925.2ce71b06cf591533
+    627dea56450c3d70.4aebea32a74ec632.74941af9856d339a.3569d3b2fdde88bd
+    0000000000000000.0000000000000000.020b92ed0b925f02.6f71941d7194af6f
+    f1e0c7764d7302e8.43a66e033d694107.633106867d2d2a01.b5c375db398454ba
+    e432572e7fbd2586
+
+VAESKEYGENASSIST_0xFF(reg)
+  before
+    2d8894e7afa08f16.d79189e8b0725cfb.54df9edb046577df.3447535d62af7049
+    ec11287166b8cc16.4b52d47f23b3ab82.ec65678f4410a391.65472a240aae8d31
+    7d180f383f911931.2bef2329c143aaaa.6984c68a99f700c9.d4fc07c78e353ce3
+    3ceb46a8d7b7b113.5233f2d1a62d169f.2587b5389ea6cc32.5c3367320d503a8c
+    d9b8c552a00c4357
+  after
+    0000000000000000.0000000000000000.7ef95f4bf95fb47e.c648b03a48b0c5c6
+    ec11287166b8cc16.4b52d47f23b3ab82.ec65678f4410a391.65472a240aae8d31
+    7d180f383f911931.2bef2329c143aaaa.6984c68a99f700c9.d4fc07c78e353ce3
+    3ceb46a8d7b7b113.5233f2d1a62d169f.2587b5389ea6cc32.5c3367320d503a8c
+    d9b8c552a00c4357
+VAESKEYGENASSIST_0xFF(mem)
+  before
+    27579d1165741371.85d4c82dc9b7d169.9cecbe63ef7daa8c.7dbc3205efa74079
+    21dc6b5c78946506.b4209134b21cb5df.e5e402cab740249d.ce6d385e29889b49
+    a512ac20f479f641.251b9e272d739920.08e83af41b813e00.72e7c3ade7d4174f
+    8ec7db48f62e824f.3311e974d646b8d9.e3c4e2cd364cb5df.c776d060c618f137
+    276659e161df65ac
+  after
+    27579d1165741371.85d4c82dc9b7d169.9cecbe63ef7daa8c.7dbc3205efa74079
+    21dc6b5c78946506.b4209134b21cb5df.e5e402cab740249d.ce6d385e29889b49
+    0000000000000000.0000000000000000.fbdece51deceaefb.6bff65dcff65236b
+    8ec7db48f62e824f.3311e974d646b8d9.e3c4e2cd364cb5df.c776d060c618f137
+    276659e161df65ac
+
+VAESKEYGENASSIST_0xFF(reg)
+  before
+    ef025c9e55b5af5b.b8c574bf99bfc45b.3c4e70854a244fb6.5144763f25ae4466
+    7b98d4013d270af0.fed9f373f9397992.9b1d2ec825969a62.2d34733703b2a9c2
+    2872be78b6c0b316.3ecfd44f33a75d1f.accc1fa8022ad58a.555f53a1ed649e1f
+    50dd146e5b0de579.5273943f62152c2f.caa540917d6b3bd9.a493946afed1dfa8
+    f59ab27c53042a8a
+  after
+    0000000000000000.0000000000000000.c2914b3f914bc0c2.32fccf12fccfed32
+    7b98d4013d270af0.fed9f373f9397992.9b1d2ec825969a62.2d34733703b2a9c2
+    2872be78b6c0b316.3ecfd44f33a75d1f.accc1fa8022ad58a.555f53a1ed649e1f
+    50dd146e5b0de579.5273943f62152c2f.caa540917d6b3bd9.a493946afed1dfa8
+    f59ab27c53042a8a
+VAESKEYGENASSIST_0xFF(mem)
+  before
+    264127c5070a39f1.5025d44fc998dec7.1891ae2fa390a1ee.53f58bef33e609fc
+    1154713037eec908.8496f9879befd8a9.6af49e0b12237987.a208fe2ec0267b9f
+    949f0ba9febc95fc.487c7f836d9e0fce.2669e0c0c9db7027.122a94babeb7cc6d
+    89ed711c78805bf8.f82263addc2fc1e0.26bdf038e7c241fa.01a649ffcc253912
+    c9ca1a6983fdfe3c
+  after
+    264127c5070a39f1.5025d44fc998dec7.1891ae2fa390a1ee.53f58bef33e609fc
+    1154713037eec908.8496f9879befd8a9.6af49e0b12237987.a208fe2ec0267b9f
+    0000000000000000.0000000000000000.15ad811bad81e415.dfede6c2ede63ddf
+    89ed711c78805bf8.f82263addc2fc1e0.26bdf038e7c241fa.01a649ffcc253912
+    c9ca1a6983fdfe3c
+
+VAESKEYGENASSIST_0xFF(reg)
+  before
+    c8e0026582cb5795.ce0c1f75c247d529.f0d69f728431288b.48ba4b6186e6a92b
+    5835fd5d62197fc9.3dc692a0f81cbfba.8ce2313f002d817d.662d6c25c25364e7
+    d71507bfc275b385.b3e84489350cd7d8.2893147eecb1085f.5de1cf72b7142e59
+    9fcc1cf63b6a2f75.0c3eb31c9521d7af.2035449de548f8e0.0aa4f1338335c2ae
+    47404c543fc2dd11
+  after
+    0000000000000000.0000000000000000.f334dc0534dcfaf3.404cf8754cf88a40
+    5835fd5d62197fc9.3dc692a0f81cbfba.8ce2313f002d817d.662d6c25c25364e7
+    d71507bfc275b385.b3e84489350cd7d8.2893147eecb1085f.5de1cf72b7142e59
+    9fcc1cf63b6a2f75.0c3eb31c9521d7af.2035449de548f8e0.0aa4f1338335c2ae
+    47404c543fc2dd11
+VAESKEYGENASSIST_0xFF(mem)
+  before
+    f1825ec009c83baf.0ea5396d6b852e44.25945b46356a7c6a.d013be07877e8eaa
+    e437a266fd5297b4.7eee5992ee51ed9f.d8b5b6f130f08136.947b7d286ce00669
+    fd28942f366dae4b.4cf178d05f5aa831.026f420ba3c1a43e.c8b77d6b33f99bca
+    1624b108d0243ca1.d5fb92935a2d9ba7.7f8c7a7fa9e89faf.c815ba3f76568b79
+    efdf300dd1821021
+  after
+    f1825ec009c83baf.0ea5396d6b852e44.25945b46356a7c6a.d013be07877e8eaa
+    e437a266fd5297b4.7eee5992ee51ed9f.d8b5b6f130f08136.947b7d286ce00669
+    0000000000000000.0000000000000000.5a3f22c63f22395a.c5707d51707daec5
+    1624b108d0243ca1.d5fb92935a2d9ba7.7f8c7a7fa9e89faf.c815ba3f76568b79
+    efdf300dd1821021
+
+VPCLMULQDQ_0x00(reg)
+  before
+    9b62dc42e109666f.0cf673dde883fde1.7358a4487c5501ad.2cdada385f722fb5
+    27eab94a4177cb0f.bb69589b9a97ac38.8354a859615e17ee.e323de24e06a0f7b
+    eec2c3928d5979ac.ff4bdb2c016b06d2.613b9c33a4d51917.8133022e49dcfc2e
+    4e38f684633aadf3.b466797e390bc7da.6a597b43e14542d3.e2d8c342b5d4b2f9
+    e2dd9c4c415fed09
+  after
+    0000000000000000.0000000000000000.7161be315f0a95dd.5afc8c13639413a2
+    27eab94a4177cb0f.bb69589b9a97ac38.8354a859615e17ee.e323de24e06a0f7b
+    eec2c3928d5979ac.ff4bdb2c016b06d2.613b9c33a4d51917.8133022e49dcfc2e
+    4e38f684633aadf3.b466797e390bc7da.6a597b43e14542d3.e2d8c342b5d4b2f9
+    e2dd9c4c415fed09
+VPCLMULQDQ_0x00(mem)
+  before
+    5d0d09390889688a.a2964f8e5ca7a28f.b687ac7c5f83ab7d.f8f942f3b53bd0cf
+    2f3587f3265ce0a7.4529c81a162b962d.e17af2118ee06de6.6868ebb1bb41fcb7
+    34219067b8e6118d.953d5f962d52c378.110ac62be32eca42.16f274e890e50536
+    489da282da32b767.ec1e0f6d3ca9651e.2205a4b579777dbd.5ee3d804cfb325f9
+    9c871470153699ab
+  after
+    5d0d09390889688a.a2964f8e5ca7a28f.b687ac7c5f83ab7d.f8f942f3b53bd0cf
+    2f3587f3265ce0a7.4529c81a162b962d.e17af2118ee06de6.6868ebb1bb41fcb7
+    0000000000000000.0000000000000000.26c00fb895f5de73.58ac8002d20754fd
+    489da282da32b767.ec1e0f6d3ca9651e.2205a4b579777dbd.5ee3d804cfb325f9
+    9c871470153699ab
+
+VPCLMULQDQ_0x00(reg)
+  before
+    2c2a229afdfa9df9.4675382fa74d8d62.a818d50bdfbbbac8.f035099b6dc94482
+    6a1700ee248b6d8f.0c75ce593b4250aa.2376abdcb314fc25.57676fc9da30d9be
+    b29ba9d625764418.7568e1eeb31dbb6a.bb868f4c534168de.3267542cddb6f99c
+    600319bf9d465f41.5d1cecd92aeb8ccf.ca927cc85ccd39a2.5f0133ae91695f49
+    b901893d1355c9f1
+  after
+    0000000000000000.0000000000000000.0f2ad52333137dbf.a078642a888801e8
+    6a1700ee248b6d8f.0c75ce593b4250aa.2376abdcb314fc25.57676fc9da30d9be
+    b29ba9d625764418.7568e1eeb31dbb6a.bb868f4c534168de.3267542cddb6f99c
+    600319bf9d465f41.5d1cecd92aeb8ccf.ca927cc85ccd39a2.5f0133ae91695f49
+    b901893d1355c9f1
+VPCLMULQDQ_0x00(mem)
+  before
+    1c33d0c37e84f1bf.cf994c162788fab5.a05b6a06bdb77d04.aee76eba6a44ad1b
+    6362862eee0493df.5da93f455fc65021.19f2da61888d4b36.c1d1628f1833fef6
+    6c5b266880e16d7f.6581ecbae28f9e31.a6adb5d6a57ab190.609c52b4022568de
+    12ea2c5f502539c9.436c51df4c6c2090.2257795233896d40.e7933c94c5a62980
+    b3041b9afc437b87
+  after
+    1c33d0c37e84f1bf.cf994c162788fab5.a05b6a06bdb77d04.aee76eba6a44ad1b
+    6362862eee0493df.5da93f455fc65021.19f2da61888d4b36.c1d1628f1833fef6
+    0000000000000000.0000000000000000.7c123e09d8712ffc.c752af1bd3fb45ca
+    12ea2c5f502539c9.436c51df4c6c2090.2257795233896d40.e7933c94c5a62980
+    b3041b9afc437b87
+
+VPCLMULQDQ_0x00(reg)
+  before
+    1e39ec3443879ba0.30db15fe79deb4e9.53b56a2238eb11eb.68bea0bf4bc7396f
+    857fa9cd38fec477.a4fa5b311718990c.f0a931ee4297afed.56aca80a0b3ed14c
+    442250d1743534b7.48137ce447dea55e.7894a4af07fd3443.c6ee0d208ffcf300
+    b76edcac95b7250d.faf1f304243c940a.46c2bed122a8dc98.965049ecf20d59ba
+    a09eda59517cc0a4
+  after
+    0000000000000000.0000000000000000.3f3dfc218b6d9709.9c1b9ae52bab9400
+    857fa9cd38fec477.a4fa5b311718990c.f0a931ee4297afed.56aca80a0b3ed14c
+    442250d1743534b7.48137ce447dea55e.7894a4af07fd3443.c6ee0d208ffcf300
+    b76edcac95b7250d.faf1f304243c940a.46c2bed122a8dc98.965049ecf20d59ba
+    a09eda59517cc0a4
+VPCLMULQDQ_0x00(mem)
+  before
+    c2a43b55c755e3eb.3aaf49ca3710d424.94623c7bcb3e223d.b57f7bc03024e59a
+    d62ee8cb70a480ba.29309498f5cd7ca9.f430d43657f10b23.2316d7e8cdfd89f2
+    ba075da76976513e.e13eb7806b795a48.f4283622e5600ae7.ead5cfb693c0054f
+    48fc17d5ced612a2.bc26b0f036a0aaac.7216dd299098dcb5.68065d9421f9945a
+    f7f67ff0103274c2
+  after
+    c2a43b55c755e3eb.3aaf49ca3710d424.94623c7bcb3e223d.b57f7bc03024e59a
+    d62ee8cb70a480ba.29309498f5cd7ca9.f430d43657f10b23.2316d7e8cdfd89f2
+    0000000000000000.0000000000000000.1778f9d99e292401.8f3c9fdfb096c054
+    48fc17d5ced612a2.bc26b0f036a0aaac.7216dd299098dcb5.68065d9421f9945a
+    f7f67ff0103274c2
+
+VPCLMULQDQ_0x01(reg)
+  before
+    f5f13134fef9df31.5dda9042bad18113.16327a52f2cfa882.48c5483975a33cbb
+    bc436dce87d91154.d66b46d8497158bd.4daf12143a918f75.5303f03daf90e822
+    aa383129465f48d6.8d7bb48498c554cb.bce872a1aa739c32.709a53215b689a19
+    191b77b1d816be64.5fd85733c2d6306a.bf2b9864df000b65.7957ebd194390eca
+    4b073639770e0261
+  after
+    0000000000000000.0000000000000000.1e243bd67c4504c4.1a8efd7d5865918d
+    bc436dce87d91154.d66b46d8497158bd.4daf12143a918f75.5303f03daf90e822
+    aa383129465f48d6.8d7bb48498c554cb.bce872a1aa739c32.709a53215b689a19
+    191b77b1d816be64.5fd85733c2d6306a.bf2b9864df000b65.7957ebd194390eca
+    4b073639770e0261
+VPCLMULQDQ_0x01(mem)
+  before
+    c273b0451ff4300c.663a3ed2d88ab0a9.284daacfe4b2aac6.b2c27fcb74c418b9
+    ba6ad3e1a8f555f5.eddf7ff8e2485952.c4a5284619647c0a.f1fa2341064bfedb
+    10b71df92f202c48.0b57378f93dbf70b.10ad4f837ef96362.d82080323022fa76
+    9e25097ad07e7332.1aee630387cfc47f.e6319b722e7c1afb.c27e930b8fd44837
+    0d605736beee23c9
+  after
+    c273b0451ff4300c.663a3ed2d88ab0a9.284daacfe4b2aac6.b2c27fcb74c418b9
+    ba6ad3e1a8f555f5.eddf7ff8e2485952.c4a5284619647c0a.f1fa2341064bfedb
+    0000000000000000.0000000000000000.7757fab29a97632a.70d03948013928ba
+    9e25097ad07e7332.1aee630387cfc47f.e6319b722e7c1afb.c27e930b8fd44837
+    0d605736beee23c9
+
+VPCLMULQDQ_0x01(reg)
+  before
+    1414c8205afbc8da.4182134ea51de4df.77effec159b1fd5b.23fd86ff46f95e01
+    32e4e236fe877313.d598b763cd083c7a.7ea80433a50cdd4a.a3dd8e16e17deba0
+    c51ea2e3471e6023.363472a4624c3630.8b6371c7086ca1f9.429c2ea31c127d03
+    280c0292d04dcab3.4022bffc80f48f2c.fb6d42e71d5e8514.dc08e29212c7cf56
+    4deb26d0dfa59ec6
+  after
+    0000000000000000.0000000000000000.1f6ded715215f5fd.8d018efe614c35de
+    32e4e236fe877313.d598b763cd083c7a.7ea80433a50cdd4a.a3dd8e16e17deba0
+    c51ea2e3471e6023.363472a4624c3630.8b6371c7086ca1f9.429c2ea31c127d03
+    280c0292d04dcab3.4022bffc80f48f2c.fb6d42e71d5e8514.dc08e29212c7cf56
+    4deb26d0dfa59ec6
+VPCLMULQDQ_0x01(mem)
+  before
+    71127747a0baa67f.b6fb00b135a0ee72.cf2d1a59440c039b.28137201816dc546
+    244950e57112a3ac.cd3797ab13a1070a.bf23ffa6c9a14ea8.6f9ffd80cf269c3c
+    415c2d946db7507a.c70bc4ec06de5328.ebceeacf2cbe2b81.2c5ddfd0a41347a1
+    a6168a42b0b76a15.02c581e0a9e20c77.31fb58c1886f574f.bb9b155d9bc30222
+    78a3999351bf096b
+  after
+    71127747a0baa67f.b6fb00b135a0ee72.cf2d1a59440c039b.28137201816dc546
+    244950e57112a3ac.cd3797ab13a1070a.bf23ffa6c9a14ea8.6f9ffd80cf269c3c
+    0000000000000000.0000000000000000.121761f20dd46e8d.59a465d5db5605f0
+    a6168a42b0b76a15.02c581e0a9e20c77.31fb58c1886f574f.bb9b155d9bc30222
+    78a3999351bf096b
+
+VPCLMULQDQ_0x01(reg)
+  before
+    bfc369de61959727.2e45e4da571eaca8.d8afccf3983a6fa4.6c76c466fac18e41
+    eb4580aa68d0e903.b5b3b5487ef6d460.a617a0917071b85a.780baaab9dbf8c81
+    5a76db6401fc3aaa.172d7b783f4d9c68.c947f927cc132246.3186867d8d750c3b
+    67a27476c8a6c8c9.2f7fb156b92fc1ed.9b8cd41f49adea14.72b3d5c6e7f0cb9c
+    195d1174c73b85d0
+  after
+    0000000000000000.0000000000000000.1e5516f5fe8fb91f.b82ead8272423cde
+    eb4580aa68d0e903.b5b3b5487ef6d460.a617a0917071b85a.780baaab9dbf8c81
+    5a76db6401fc3aaa.172d7b783f4d9c68.c947f927cc132246.3186867d8d750c3b
+    67a27476c8a6c8c9.2f7fb156b92fc1ed.9b8cd41f49adea14.72b3d5c6e7f0cb9c
+    195d1174c73b85d0
+VPCLMULQDQ_0x01(mem)
+  before
+    0151b8724862f502.6e14494e5a59cd0c.db75d4ce06a6fe1b.79312ce782ca4c6f
+    055b46ab8672d85f.cb1a555753a2861e.f6db5ecc42c0111d.c084fce914f68304
+    0347350d9e76ea13.d9fe94fc4e0c2eac.5b7ccd3d8989b41f.cacf43939abecc7f
+    d5e10383ac7be749.f60d03abe7230261.e8269c0bf90ca34f.f460fa50b1ad638b
+    9a811e8cf44f84d4
+  after
+    0151b8724862f502.6e14494e5a59cd0c.db75d4ce06a6fe1b.79312ce782ca4c6f
+    055b46ab8672d85f.cb1a555753a2861e.f6db5ecc42c0111d.c084fce914f68304
+    0000000000000000.0000000000000000.2b5152c7ff971e84.fcba2d21efdf475b
+    d5e10383ac7be749.f60d03abe7230261.e8269c0bf90ca34f.f460fa50b1ad638b
+    9a811e8cf44f84d4
+
+VPCLMULQDQ_0x10(reg)
+  before
+    197facb300316a07.59f52af9cb8b8a2e.7d939ccfbb743eea.77a34724ab559cd7
+    cba69f3170de52d0.694e285c17b490ed.c9dc5dd465891ef2.e6c04b72bd7059e3
+    0d41f372e0e378db.e3ba7996ad02b5b3.3834412682f1de27.0f4923e34b6a97a0
+    3b9ea5e2edca17d3.a1039794a880b4ab.25e74532ae35b932.d00a4a62704e113a
+    03ce3fdb492885dc
+  after
+    0000000000000000.0000000000000000.159319c633ce6e2c.5e90d97134a593c9
+    cba69f3170de52d0.694e285c17b490ed.c9dc5dd465891ef2.e6c04b72bd7059e3
+    0d41f372e0e378db.e3ba7996ad02b5b3.3834412682f1de27.0f4923e34b6a97a0
+    3b9ea5e2edca17d3.a1039794a880b4ab.25e74532ae35b932.d00a4a62704e113a
+    03ce3fdb492885dc
+VPCLMULQDQ_0x10(mem)
+  before
+    86637b3af105adb3.b107afee33216d64.81f60043253a4a02.eb40636283e3ecc2
+    33937b6b84f045eb.cbc90f004d74b43b.5d5f2f8d3f3c33e4.e88c99239f86b280
+    e72bbc5a1ff60baf.e530c086d74e2804.1309a06013932b7c.7618e2e29eab481b
+    7ff7b9f4dd22b92b.5b88bfeb6e3b076b.7dc2cfa7bc4aedf7.f32e3a0a1bddea3d
+    b91a9e06b3a8d493
+  after
+    86637b3af105adb3.b107afee33216d64.81f60043253a4a02.eb40636283e3ecc2
+    33937b6b84f045eb.cbc90f004d74b43b.5d5f2f8d3f3c33e4.e88c99239f86b280
+    0000000000000000.0000000000000000.74f14f28d10a4a67.ef8d7848a25c6500
+    7ff7b9f4dd22b92b.5b88bfeb6e3b076b.7dc2cfa7bc4aedf7.f32e3a0a1bddea3d
+    b91a9e06b3a8d493
+
+VPCLMULQDQ_0x10(reg)
+  before
+    252a0844019942c8.d5c3ee23db800c8c.891d069aaec78b1b.7854394e576e3681
+    94a8762fa23b6f89.c65bd8d4351cbffe.ca3b9301317ff0c0.e08c5941ff0ac245
+    60e2e333311a9881.2e8af1f4050390ad.7c2d618b96ee7407.9237ab6cd02a4c6f
+    e6224bbc4ac3f85d.e91db76e6a4039c4.fa406ca476a1519c.681eabbbe7da912c
+    3f10d61a60274da8
+  after
+    0000000000000000.0000000000000000.2ea458b387067984.e885aae7b816ebdb
+    94a8762fa23b6f89.c65bd8d4351cbffe.ca3b9301317ff0c0.e08c5941ff0ac245
+    60e2e333311a9881.2e8af1f4050390ad.7c2d618b96ee7407.9237ab6cd02a4c6f
+    e6224bbc4ac3f85d.e91db76e6a4039c4.fa406ca476a1519c.681eabbbe7da912c
+    3f10d61a60274da8
+VPCLMULQDQ_0x10(mem)
+  before
+    f3d8a675561c3c0f.83b5ab368ac1cdc9.d4e1a52d7de0776f.a0c0b1b87022c42a
+    604199b9e5c6198c.91e7fe0e8da05170.c9a0381f5dee05dc.caf92a341d00095e
+    62192ad02a30a14b.6d0440aeeeedc0ff.a526ea2f2376a034.d337d5821cc45be4
+    d52ad6a841669079.73576d8349335821.44413949ed8504a6.19c6ad0f06fcf767
+    f7f1ae4879331994
+  after
+    f3d8a675561c3c0f.83b5ab368ac1cdc9.d4e1a52d7de0776f.a0c0b1b87022c42a
+    604199b9e5c6198c.91e7fe0e8da05170.c9a0381f5dee05dc.caf92a341d00095e
+    0000000000000000.0000000000000000.5808814105431695.667bcd55fd94322a
+    d52ad6a841669079.73576d8349335821.44413949ed8504a6.19c6ad0f06fcf767
+    f7f1ae4879331994
+
+VPCLMULQDQ_0x10(reg)
+  before
+    c806d59711f6fd16.9541172c4475a242.ff2e81fa3bfe5383.82bca05ad726ed5c
+    ea4f1c6a69d0de9a.7e2a6b47526892d2.6dd3797e5fdbeed1.3b629b4cfc651682
+    b719812c1e4df9cb.6cb04de7844b1d54.1993507a525565b6.4b00a60c794e3c46
+    8db00049cbfa8a57.3ba139f7f92bfef4.5fba025caff9f3df.8e633e8769ee1bd1
+    e054dea7e8516f52
+  after
+    0000000000000000.0000000000000000.0248185376c205bc.e9a6d2e84730c46c
+    ea4f1c6a69d0de9a.7e2a6b47526892d2.6dd3797e5fdbeed1.3b629b4cfc651682
+    b719812c1e4df9cb.6cb04de7844b1d54.1993507a525565b6.4b00a60c794e3c46
+    8db00049cbfa8a57.3ba139f7f92bfef4.5fba025caff9f3df.8e633e8769ee1bd1
+    e054dea7e8516f52
+VPCLMULQDQ_0x10(mem)
+  before
+    1da2025a1381f3f3.c65f932d0c61cce7.c7c7ac63ca13f3df.9b948b8f1351d5f7
+    2018268a068c64e0.c07437447e11fc29.ecef2018160fb641.296ce77f19eb47ab
+    c781c725db7e7d46.d539e9fabc9356c9.86e51300f62c0445.659013985e5384a7
+    edab5f16b161fc51.63fba4bb63751673.7075000888759818.ab4a0a467d14c996
+    57e7c8f613ba5225
+  after
+    1da2025a1381f3f3.c65f932d0c61cce7.c7c7ac63ca13f3df.9b948b8f1351d5f7
+    2018268a068c64e0.c07437447e11fc29.ecef2018160fb641.296ce77f19eb47ab
+    0000000000000000.0000000000000000.1e2d6fe2cae55211.f8a1c861fc39c3f9
+    edab5f16b161fc51.63fba4bb63751673.7075000888759818.ab4a0a467d14c996
+    57e7c8f613ba5225
+
+VPCLMULQDQ_0x11(reg)
+  before
+    c5b34912bbd15bff.6e606c49a2439b2c.c40665f40f4377d2.886b631de8f630e6
+    51fa8a0811e61fd1.256d69aaca301704.55a6260f5a87b693.a993b92931bc86da
+    57088642b284dc47.f09ed32646322b05.7327e57ae3cf0f61.afb87d1a80d25621
+    3228392e3a38cb0c.aabe24a73158955a.78d59d9f43a7bde9.75a72bdbf0445ee6
+    d92c3f579d1f5856
+  after
+    0000000000000000.0000000000000000.1a72edeb3e14c966.9bc1f034cd08a133
+    51fa8a0811e61fd1.256d69aaca301704.55a6260f5a87b693.a993b92931bc86da
+    57088642b284dc47.f09ed32646322b05.7327e57ae3cf0f61.afb87d1a80d25621
+    3228392e3a38cb0c.aabe24a73158955a.78d59d9f43a7bde9.75a72bdbf0445ee6
+    d92c3f579d1f5856
+VPCLMULQDQ_0x11(mem)
+  before
+    b513357ca46e019d.40a79f37448d2bcd.2e9bda1aa8ab0f30.c1fb4aec1999fdd6
+    e7288a35203d14e6.dcd2b4c96c0f3635.5aff706cc63955b2.abe6e8ccfe330bd5
+    4a37b96f2e994e5d.62f375504f4a29f1.08b76287a70d250d.90e374ab90012392
+    b90b3e14ea8d6b30.2d57dd3888cb40ac.16902d596933396c.cd3ce8f56b8d80b8
+    be3d42162a665ff4
+  after
+    b513357ca46e019d.40a79f37448d2bcd.2e9bda1aa8ab0f30.c1fb4aec1999fdd6
+    e7288a35203d14e6.dcd2b4c96c0f3635.5aff706cc63955b2.abe6e8ccfe330bd5
+    0000000000000000.0000000000000000.087cc210c877812e.e3aa88202cbc6360
+    b90b3e14ea8d6b30.2d57dd3888cb40ac.16902d596933396c.cd3ce8f56b8d80b8
+    be3d42162a665ff4
+
+VPCLMULQDQ_0x11(reg)
+  before
+    bf347e7a6a15fcf1.127295116f252788.9b49e8edb41eb613.5e534bcd25b84efc
+    2c6c968dc628935c.2f363b52d96e3e94.061792db6ecdc8d2.becf3acef9a71fe9
+    613088bcda2a5fe1.ed24aac445736b7e.cc0bd86e5366b294.10cf754a010d6a5e
+    bacd4e7143a79d2b.29086051ce416b73.4773b513fe74b006.321e792c58f4e988
+    fe89c0611a6a5893
+  after
+    0000000000000000.0000000000000000.02a6f75c71faeb15.8528cfd9614c0368
+    2c6c968dc628935c.2f363b52d96e3e94.061792db6ecdc8d2.becf3acef9a71fe9
+    613088bcda2a5fe1.ed24aac445736b7e.cc0bd86e5366b294.10cf754a010d6a5e
+    bacd4e7143a79d2b.29086051ce416b73.4773b513fe74b006.321e792c58f4e988
+    fe89c0611a6a5893
+VPCLMULQDQ_0x11(mem)
+  before
+    51ddc8d3647b75aa.938fe71a9d2c88e7.bdadd8e790e3f99e.d59925340c84fdd4
+    08e40c6f5232faf9.48c24c2183445ec0.86e18f71a965d32c.d0ca243f1821d6a9
+    fd6a0822fe9ba4ae.35b27af4917c5963.616effdb32d3b348.9652ae9fbfd77732
+    0d3d39d687c22ef3.b6aa6efe645eb67c.2821a611493a551f.817cc0bf9c331b1a
+    ee96550d4cc0ff0e
+  after
+    51ddc8d3647b75aa.938fe71a9d2c88e7.bdadd8e790e3f99e.d59925340c84fdd4
+    08e40c6f5232faf9.48c24c2183445ec0.86e18f71a965d32c.d0ca243f1821d6a9
+    0000000000000000.0000000000000000.5d3ded1521203ade.b4b653bc2472db48
+    0d3d39d687c22ef3.b6aa6efe645eb67c.2821a611493a551f.817cc0bf9c331b1a
+    ee96550d4cc0ff0e
+
+VPCLMULQDQ_0x11(reg)
+  before
+    3aea69f46a0a5fb9.1428197907b456f4.27f823ab9779b0b6.b8c7ffff0aa577dd
+    bfc5f8e0929e77c8.eff626f59a7dd6de.e3e69567c75684be.ed2986919021d3ad
+    da73ff3e610782e7.7874db385d276bdd.48c1c19e8f836e3f.a316b8b3f7b926bc
+    e840787873d1bdc1.8c6eb42d6bc0d01c.b1d5a1bc8c8baae6.b75910525c792b35
+    03bd0958db6ea045
+  after
+    0000000000000000.0000000000000000.3faf31685792d1a1.42327dd3dbe952ea
+    bfc5f8e0929e77c8.eff626f59a7dd6de.e3e69567c75684be.ed2986919021d3ad
+    da73ff3e610782e7.7874db385d276bdd.48c1c19e8f836e3f.a316b8b3f7b926bc
+    e840787873d1bdc1.8c6eb42d6bc0d01c.b1d5a1bc8c8baae6.b75910525c792b35
+    03bd0958db6ea045
+VPCLMULQDQ_0x11(mem)
+  before
+    641022b28fa23f18.437861fb63896403.07b02ec0e053c2c8.7a6e332e59fb735e
+    b61cd44d9424c5d9.4866b534cdbab358.c506c4dddaedfd0c.fed8725e935d0754
+    d5ae9c1407fdedb5.5358718d4ef0e56d.a23bf27072993d15.9b5e5abad5409f74
+    9d92f7f3033b74d7.c0988f7481b837ee.7a1d3465c6633d0f.ac4de8acbb2d7a69
+    8cf117a2e2b2d2e0
+  after
+    641022b28fa23f18.437861fb63896403.07b02ec0e053c2c8.7a6e332e59fb735e
+    b61cd44d9424c5d9.4866b534cdbab358.c506c4dddaedfd0c.fed8725e935d0754
+    0000000000000000.0000000000000000.022d7fcdd825c3ab.81ee16ff54053560
+    9d92f7f3033b74d7.c0988f7481b837ee.7a1d3465c6633d0f.ac4de8acbb2d7a69
+    8cf117a2e2b2d2e0
+
+VPCLMULQDQ_0xFF(reg)
+  before
+    9996e307e65ae485.ea9360d5a5ea166c.eb730d54039de486.297606a9f258ba25
+    2d88484762b2ec03.987f53a808148fa0.3035e6996f2b2ae2.8b13e52611837084
+    a61342cef2452507.83204d5849c79a9e.eb2a16ae62ef43ad.7cc04cca3ff01b57
+    5e83ce08339fcd3c.8643c9cf830ef493.789d9a0177746c94.d849b77f99ac76cb
+    7a79a2333bc23e0b
+  after
+    0000000000000000.0000000000000000.13c723e25ebcc3ab.392df8c97f975d3a
+    2d88484762b2ec03.987f53a808148fa0.3035e6996f2b2ae2.8b13e52611837084
+    a61342cef2452507.83204d5849c79a9e.eb2a16ae62ef43ad.7cc04cca3ff01b57
+    5e83ce08339fcd3c.8643c9cf830ef493.789d9a0177746c94.d849b77f99ac76cb
+    7a79a2333bc23e0b
+VPCLMULQDQ_0xFF(mem)
+  before
+    401e89d1403e2e45.b323e661c14d1d4f.7fb442fad3f659aa.33dc6dfe4b47e043
+    0502e945c42d04a2.ff40884537da54eb.493f37c5548a8510.78318b0f79f3dc65
+    a5f23d7be49a7a51.9f26b02031d2acbd.c0b0211d23d733f1.a3e9f0a19e049ca7
+    fbba015fbb914d7c.f021585f4cc26271.bfd37dec5be72078.1050982155065cb4
+    1bb280f93a865739
+  after
+    401e89d1403e2e45.b323e661c14d1d4f.7fb442fad3f659aa.33dc6dfe4b47e043
+    0502e945c42d04a2.ff40884537da54eb.493f37c5548a8510.78318b0f79f3dc65
+    0000000000000000.0000000000000000.1c6581da5d48cdba.c1e788ac1f8b98a0
+    fbba015fbb914d7c.f021585f4cc26271.bfd37dec5be72078.1050982155065cb4
+    1bb280f93a865739
+
+VPCLMULQDQ_0xFF(reg)
+  before
+    1f5ba297ea0fcae2.e526b2dd661f384f.4c7d7e6c2335b2b2.2473c82018c808d2
+    7a96fc65012ef15a.3e02cae1004ff9f7.10861db553b7d82d.ca5d7da47786a62a
+    87b18ad11a6e084e.e119c758a62d4aa0.998731a577d50f8e.8c5d1864942bb7ad
+    a2f64646d15b4a69.ac39242c73c6e775.41cdb6a82c1a9480.483f164b8ac5f786
+    d9cff147756022e2
+  after
+    0000000000000000.0000000000000000.09d7ea6f4be93bc2.2a264ba9c2a2ac06
+    7a96fc65012ef15a.3e02cae1004ff9f7.10861db553b7d82d.ca5d7da47786a62a
+    87b18ad11a6e084e.e119c758a62d4aa0.998731a577d50f8e.8c5d1864942bb7ad
+    a2f64646d15b4a69.ac39242c73c6e775.41cdb6a82c1a9480.483f164b8ac5f786
+    d9cff147756022e2
+VPCLMULQDQ_0xFF(mem)
+  before
+    1ad927447207f3ed.26b22e30c381f458.792c5d4b84258ea3.65a4a92a0d12a2af
+    e928332c9cc627d2.71313dfb8b6d42c6.26bfef9ff456f956.61580497b74a77c8
+    208a91ec10a97abe.debf6f13c6aa6f60.8dbe5416df66e5b9.9135c55bc54d4d77
+    9cc9be71e9bda7dd.c8a7c0e40fc5b8d2.8cf50a9b62600df8.5187e8e2d3a76068
+    fd9967987ee5ee46
+  after
+    1ad927447207f3ed.26b22e30c381f458.792c5d4b84258ea3.65a4a92a0d12a2af
+    e928332c9cc627d2.71313dfb8b6d42c6.26bfef9ff456f956.61580497b74a77c8
+    0000000000000000.0000000000000000.0e05cac6f5c4d1f9.4f300b42eee0ce3a
+    9cc9be71e9bda7dd.c8a7c0e40fc5b8d2.8cf50a9b62600df8.5187e8e2d3a76068
+    fd9967987ee5ee46
+
+VPCLMULQDQ_0xFF(reg)
+  before
+    f1b940ea629231bd.3ab235a5440d6b5a.8d372cdb034959c7.fd2f8c1a99512f41
+    89316e421a3b667a.d41172763ca68261.87b9b0623dc28eec.be3a577f9f4305be
+    214eed0e426ac929.48b1f1ceee92a820.147a47e75abd92ed.a9e0e5b690454b9b
+    155cb9b877ad9576.70602e9b75df98c1.8ec6edd4f5c5a275.9beeb4ab8960bf05
+    71303f4ba6a21b28
+  after
+    0000000000000000.0000000000000000.0a590fb16548c161.05eca9b21890cabc
+    89316e421a3b667a.d41172763ca68261.87b9b0623dc28eec.be3a577f9f4305be
+    214eed0e426ac929.48b1f1ceee92a820.147a47e75abd92ed.a9e0e5b690454b9b
+    155cb9b877ad9576.70602e9b75df98c1.8ec6edd4f5c5a275.9beeb4ab8960bf05
+    71303f4ba6a21b28
+VPCLMULQDQ_0xFF(mem)
+  before
+    0572028002161c2f.c1a7ceae5490070c.29e8a6c8ee990f70.53e99f97ab66fa31
+    34807938b9c97d47.817a295b769e5b97.4f17d44174cbc95a.bd2f579b172dd5cc
+    da25215de8c6fc9b.b123c52b7963ccc4.bfb734f2248181ab.29e3134cd6a570f3
+    d42e75ddaa195358.adec9e8af76b983f.539542c719c8f48e.f452ce16835a0751
+    78c98565bad9d693
+  after
+    0572028002161c2f.c1a7ceae5490070c.29e8a6c8ee990f70.53e99f97ab66fa31
+    34807938b9c97d47.817a295b769e5b97.4f17d44174cbc95a.bd2f579b172dd5cc
+    0000000000000000.0000000000000000.0beaa858162e60e5.dc214e3cbd29be60
+    d42e75ddaa195358.adec9e8af76b983f.539542c719c8f48e.f452ce16835a0751
+    78c98565bad9d693
+
+VCMPSS_128_0x9(reg)
+  before
+    129232a518ad1865.fc68f1a31cce3faa.d122b1e48f43f9b3.e87c7aac6faade30
+    1ef9d34239620a72.2f9d119b59f27bbc.7811f8a5da762bcd.5a3a598e4336fbbc
+    f94c63a9b785e867.499a52b17e90c4bb.0005713a76916c39.85995a57b175065f
+    fdd6de4431a1edef.262a2fd1a6b5d6d2.c449170dff1ff6a2.4567f9f5d375bc45
+    766eb252c841d999
+  after
+    0000000000000000.0000000000000000.7811f8a5da762bcd.5a3a598e00000000
+    1ef9d34239620a72.2f9d119b59f27bbc.7811f8a5da762bcd.5a3a598e4336fbbc
+    f94c63a9b785e867.499a52b17e90c4bb.0005713a76916c39.85995a57b175065f
+    fdd6de4431a1edef.262a2fd1a6b5d6d2.c449170dff1ff6a2.4567f9f5d375bc45
+    766eb252c841d999
+VCMPSS_128_0x9(mem)
+  before
+    f47b025caae61988.87e24081414256b7.a21b24e7ed6c6d2e.1f2be78b10ac06b5
+    9b5a64fe956f373d.f3bd86ca83f55f6b.9937addf70c144fb.6ff5db2146c5d71d
+    47d65424a6e8f0e5.9db3ab8d944544b6.e74b46a54bc11864.0ff4f13a3cf5a787
+    d4bd4ebaf85effac.e110ab350fbe4045.68246c269977a596.5a7424428ec8b09e
+    aec170a4d9ca2e0f
+  after
+    f47b025caae61988.87e24081414256b7.a21b24e7ed6c6d2e.1f2be78b10ac06b5
+    9b5a64fe956f373d.f3bd86ca83f55f6b.9937addf70c144fb.6ff5db2146c5d71d
+    0000000000000000.0000000000000000.9937addf70c144fb.6ff5db2100000000
+    d4bd4ebaf85effac.e110ab350fbe4045.68246c269977a596.5a7424428ec8b09e
+    aec170a4d9ca2e0f
+
+VCMPSS_128_0x9(reg)
+  before
+    6527d1ceb9885f86.1ed9ceaca8dc22bd.1b20822e91ed90c3.f88b9a4c77efa7bc
+    ddf1442cc98e7dae.01f751e6d16e1345.a72f2de4b55d70dd.734f4c05ff36d903
+    706dc428a566c534.59e3525490218f6f.e188a6c3189b1c3f.b43bfe3c5057f897
+    7be54d2fea9e72c4.02694de200005168.2578eb375531cf94.991a2cdc845ebfa3
+    fdba53d3b758ec54
+  after
+    0000000000000000.0000000000000000.a72f2de4b55d70dd.734f4c05ffffffff
+    ddf1442cc98e7dae.01f751e6d16e1345.a72f2de4b55d70dd.734f4c05ff36d903
+    706dc428a566c534.59e3525490218f6f.e188a6c3189b1c3f.b43bfe3c5057f897
+    7be54d2fea9e72c4.02694de200005168.2578eb375531cf94.991a2cdc845ebfa3
+    fdba53d3b758ec54
+VCMPSS_128_0x9(mem)
+  before
+    bce5ee0c065039d5.5ba6dbad33c1c209.d755be7d3d17175b.cf4cf7ac08aec689
+    b16879738c526353.6afc6a0f1d5cefaf.b673220f64739a75.3b4ec78fcf9b3dc9
+    ba0f70f5666b25f9.0533f7bf44fa3564.7a8ef386911f99e2.c4ca554a43866f01
+    b2a5507cafa63df4.89967d2b4227d2d2.fe73afcddf27cfce.c80e9f4b02fa99dd
+    a265a0fda884f708
+  after
+    bce5ee0c065039d5.5ba6dbad33c1c209.d755be7d3d17175b.cf4cf7ac08aec689
+    b16879738c526353.6afc6a0f1d5cefaf.b673220f64739a75.3b4ec78fcf9b3dc9
+    0000000000000000.0000000000000000.b673220f64739a75.3b4ec78fffffffff
+    b2a5507cafa63df4.89967d2b4227d2d2.fe73afcddf27cfce.c80e9f4b02fa99dd
+    a265a0fda884f708
+
+VCMPSS_128_0x9(reg)
+  before
+    ae1a54cbd0aec42f.74f894f5840f6570.5073f8beb57000a5.20eed2d06a98f763
+    477ab82316073efd.ded2b84d00b35998.b71464e33960fc8a.bbcbd67b4f7dced0
+    cbd1c67017189f1f.cb00386e409dd799.1ac6be086984012d.aad639baaae20f3f
+    956b7c1e6e6f2340.164f90465fd9999f.d5d50198e2664d39.cbdb757996d477dd
+    f8a509a42f5ec2d5
+  after
+    0000000000000000.0000000000000000.b71464e33960fc8a.bbcbd67b00000000
+    477ab82316073efd.ded2b84d00b35998.b71464e33960fc8a.bbcbd67b4f7dced0
+    cbd1c67017189f1f.cb00386e409dd799.1ac6be086984012d.aad639baaae20f3f
+    956b7c1e6e6f2340.164f90465fd9999f.d5d50198e2664d39.cbdb757996d477dd
+    f8a509a42f5ec2d5
+VCMPSS_128_0x9(mem)
+  before
+    0f026e27928dac54.0094d599b897080d.9d883dc07a745cd5.458d29ff3f941a5b
+    eabc21efda6cf185.6a98ce4e901d8832.3a7abac8ac79db68.c43a32aa1d9aa53e
+    66a09fe624074c95.2dc261a7938ce05a.caf0834a11f5d483.af2718031702298f
+    607a63fa8b6a7ab0.a75f8c115c704b32.2ab51432c6f30153.62a2d877c95be3fa
+    39f56d73d02e0f2a
+  after
+    0f026e27928dac54.0094d599b897080d.9d883dc07a745cd5.458d29ff3f941a5b
+    eabc21efda6cf185.6a98ce4e901d8832.3a7abac8ac79db68.c43a32aa1d9aa53e
+    0000000000000000.0000000000000000.3a7abac8ac79db68.c43a32aaffffffff
+    607a63fa8b6a7ab0.a75f8c115c704b32.2ab51432c6f30153.62a2d877c95be3fa
+    39f56d73d02e0f2a
+
+VMASKMOVPS_128_LoadForm(reg)
+  before
+    906dd361c809e9cc.b215e9152ca23601.32bb4af988560766.3497ea6ce77f1e03
+    c35606af4b77ac8b.393fad2522ba3db5.2c2297cab2c94ea1.c56080e48ea5e9c0
+    2efb03c8f8049514.d2c22c158abf4cf8.efe06fef77555c90.badd5286da721cb6
+    2caac418693de013.576ce1d17fbb1cf5.d941cfd672876fde.edd9dc3fe5f17410
+    3b229af9cb2facfb
+  after
+    906dd361c809e9cc.b215e9152ca23601.32bb4af988560766.3497ea6ce77f1e03
+    c35606af4b77ac8b.393fad2522ba3db5.2c2297cab2c94ea1.c56080e48ea5e9c0
+    2efb03c8f8049514.d2c22c158abf4cf8.efe06fef77555c90.badd5286da721cb6
+    2caac418693de013.576ce1d17fbb1cf5.d941cfd672876fde.edd9dc3fe5f17410
+    3b229af9cb2facfb
+VMASKMOVPS_128_LoadForm(mem)
+  before
+    808309a2a93782a2.1bad470b3aadc933.a50748451dbd6cd8.4490b2ea3feac138
+    99c7a4249a15b032.5652870d08e18b20.9860dd5d81cef6cf.8d1b14977c0a8f49
+    60bbe76dbbd5f3d7.39e3818a6e646388.0d421d05c7fc7703.112cf149c27414be
+    b22b4e68278406bc.20ad2fee09c28d15.de7b822a0a52aaa3.2a10466cafb38e43
+    35130d6dde533783
+  after
+    808309a2a93782a2.1bad470b3aadc933.a50748451dbd6cd8.4490b2ea3feac138
+    99c7a4249a15b032.5652870d08e18b20.9860dd5d81cef6cf.8d1b14977c0a8f49
+    0000000000000000.0000000000000000.a50748451dbd6cd8.4490b2ea00000000
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    35130d6dde533783
+
+VMASKMOVPS_128_LoadForm(reg)
+  before
+    8e8044b6ece14c2b.6be35601fb2ea60e.66fb8fa574874473.e8d58ab666dd4dd9
+    92a5e7b475e808e6.67af792452dd8ff8.691b9c1c4c40c54f.071eb097f8a81ad1
+    9bccf0d414f4a861.825a35bd499f7da7.845853bd2c784c55.172071b7dcbfceb9
+    06435d8165926848.98b206b9fb7f2b47.12fdaef6b0bc1430.f4a847042c2f24ba
+    7a82b0690703d903
+  after
+    8e8044b6ece14c2b.6be35601fb2ea60e.66fb8fa574874473.e8d58ab666dd4dd9
+    92a5e7b475e808e6.67af792452dd8ff8.691b9c1c4c40c54f.071eb097f8a81ad1
+    9bccf0d414f4a861.825a35bd499f7da7.845853bd2c784c55.172071b7dcbfceb9
+    06435d8165926848.98b206b9fb7f2b47.12fdaef6b0bc1430.f4a847042c2f24ba
+    7a82b0690703d903
+VMASKMOVPS_128_LoadForm(mem)
+  before
+    857927d28647a9be.2f542826054d8446.85816602848a5603.7157ab3275975b8d
+    f15b282bc8085017.724c4f318fb13708.2594d38501cbba08.fbb245dc17955b18
+    9af23060e650893b.2b76ce0da04bbe39.54b7c72f8e4e1381.0e5a78623143507c
+    5b0bb95dff2e1156.b6209f26d3a65586.eeb6c0eb46201c9b.049b402f5f2c7866
+    3bc09aaf3edc0d81
+  after
+    857927d28647a9be.2f542826054d8446.85816602848a5603.7157ab3275975b8d
+    f15b282bc8085017.724c4f318fb13708.2594d38501cbba08.fbb245dc17955b18
+    0000000000000000.0000000000000000.0000000000000000.7157ab3200000000
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    3bc09aaf3edc0d81
+
+VMASKMOVPS_128_LoadForm(reg)
+  before
+    0d17814f6ae04c7a.1272410e2caba494.6f94c0e8c54f379b.ce5c3aa4454c9282
+    d8eaf1797ec370fc.9af343608bd5fe20.b2202cc011d0a223.d277af48a8de3061
+    f686e69a1611b7b4.cf5a3c3d38b8da26.db0edf1853b8d0cb.d5d19dc28ae3b465
+    c4375c1fcf575b4e.8d73a6934e5ff5d3.45abd55d2890fd3e.b3377ffe0866d8b9
+    4875d1e83d73598a
+  after
+    0d17814f6ae04c7a.1272410e2caba494.6f94c0e8c54f379b.ce5c3aa4454c9282
+    d8eaf1797ec370fc.9af343608bd5fe20.b2202cc011d0a223.d277af48a8de3061
+    f686e69a1611b7b4.cf5a3c3d38b8da26.db0edf1853b8d0cb.d5d19dc28ae3b465
+    c4375c1fcf575b4e.8d73a6934e5ff5d3.45abd55d2890fd3e.b3377ffe0866d8b9
+    4875d1e83d73598a
+VMASKMOVPS_128_LoadForm(mem)
+  before
+    6f570f6c4617f204.9f48507244209975.af09ff4cead60b53.4e430bfc2ce66729
+    06a9b6773e5d6152.e107bd0112f8acd6.13e9c2562729d7d1.51217c5ffa454838
+    e73641f3425160a0.e7bf9f36d46cd11c.94df6b9c2165167a.aa9324f42e3add16
+    f0cc2ccd6d00ab1c.0dbbf27f270744f4.0db7760af595847a.b5e3ff26654f6170
+    cd5f09613b1311f1
+  after
+    6f570f6c4617f204.9f48507244209975.af09ff4cead60b53.4e430bfc2ce66729
+    06a9b6773e5d6152.e107bd0112f8acd6.13e9c2562729d7d1.51217c5ffa454838
+    0000000000000000.0000000000000000.0000000000000000.000000002ce66729
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    cd5f09613b1311f1
+
+VMASKMOVPS_256_LoadForm(reg)
+  before
+    50513f114b0f2946.fc35f3f2dc7500f0.b048b347a655410a.5c3d608cbfc5ddfc
+    99059ca231d1e51a.e63e124daabd1948.2ab2ddfaede30309.5b3da40e9902dc2c
+    03c91c808ae4811a.8cb306c9f4e2b351.d8456c04993cc79e.e882be7ca2573e38
+    ece8bb17f1d538f2.c8604a54d5f38937.164c5cd246ecc975.ddda2ac2f4d0bf4a
+    180f65cdab7a1a8e
+  after
+    50513f114b0f2946.fc35f3f2dc7500f0.b048b347a655410a.5c3d608cbfc5ddfc
+    99059ca231d1e51a.e63e124daabd1948.2ab2ddfaede30309.5b3da40e9902dc2c
+    03c91c808ae4811a.8cb306c9f4e2b351.d8456c04993cc79e.e882be7ca2573e38
+    ece8bb17f1d538f2.c8604a54d5f38937.164c5cd246ecc975.ddda2ac2f4d0bf4a
+    180f65cdab7a1a8e
+VMASKMOVPS_256_LoadForm(mem)
+  before
+    73eee987e4600c31.aead76d3032f474d.77105ad969f95925.4015a9ce8f804439
+    cb4334deba8f515f.a76647215b7ee9d8.7691b244cd02dd48.b2ea506511837696
+    fdd9c1bc4a12a543.315d2c6b964f5b3f.9fadcf811d19d1cb.c8184c0467819939
+    e37e0d0faff5c30a.aadf211f4f2dd92d.d0312c7d744af3db.deec99152d07e9ce
+    50af330600a0a400
+  after
+    73eee987e4600c31.aead76d3032f474d.77105ad969f95925.4015a9ce8f804439
+    cb4334deba8f515f.a76647215b7ee9d8.7691b244cd02dd48.b2ea506511837696
+    73eee987e4600c31.aead76d300000000.0000000069f95925.4015a9ce00000000
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    50af330600a0a400
+
+VMASKMOVPS_256_LoadForm(reg)
+  before
+    7ab017427bd9047c.5afc92c2054468df.6c3720a823a49f4e.e3e94522eea2fda4
+    b83a3f353b3d45ee.3f21cec1690c50ef.d5b32771ad40e950.b5a1965da82cac51
+    6698a94adb58a501.6cb73cf8f7583666.3f9e31e8898ef2dd.22259b1bbdf5bb0f
+    df1751f0f8b65e62.be8b5953ca35d76f.07433a78541af7a1.0740d1464a08e80a
+    3ebfb3cc6a71ed6d
+  after
+    7ab017427bd9047c.5afc92c2054468df.6c3720a823a49f4e.e3e94522eea2fda4
+    b83a3f353b3d45ee.3f21cec1690c50ef.d5b32771ad40e950.b5a1965da82cac51
+    6698a94adb58a501.6cb73cf8f7583666.3f9e31e8898ef2dd.22259b1bbdf5bb0f
+    df1751f0f8b65e62.be8b5953ca35d76f.07433a78541af7a1.0740d1464a08e80a
+    3ebfb3cc6a71ed6d
+VMASKMOVPS_256_LoadForm(mem)
+  before
+    a46fbd983a3d8764.810331902de4adbc.11689fbeffaeef37.89ef3e8daa6e3349
+    151a6b96d576711c.a7a84797176dcebc.411c8c26b0cf3aea.22ee39942618e481
+    6d8d3ab2582b68c1.ad528d7151defc0e.2a719b75fca573b3.2c8c28f764a444f4
+    8893a4d8de65287f.ee4d018b78c2745d.a8354899fd3a57be.04150623019d8f4f
+    06d4cf85998f033d
+  after
+    a46fbd983a3d8764.810331902de4adbc.11689fbeffaeef37.89ef3e8daa6e3349
+    151a6b96d576711c.a7a84797176dcebc.411c8c26b0cf3aea.22ee39942618e481
+    000000003a3d8764.8103319000000000.00000000ffaeef37.0000000000000000
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    06d4cf85998f033d
+
+VMASKMOVPS_256_LoadForm(reg)
+  before
+    8e178087c706da6b.42fa27f484326d81.c8e49f4f27a57256.97320f7ccf9da238
+    f9281397278f5185.778c3ef2659df2f3.9665612bfb1332a4.d3356d0c8fd7104d
+    a154862056b5a436.031766bf9db37402.b31a45898f99eff4.380adc3458f65c28
+    e3e7d48eef040e2b.c2651945497fafda.7d5046d77fc3e6f1.a27cdae0470643f6
+    ed59e3fc771180e3
+  after
+    8e178087c706da6b.42fa27f484326d81.c8e49f4f27a57256.97320f7ccf9da238
+    f9281397278f5185.778c3ef2659df2f3.9665612bfb1332a4.d3356d0c8fd7104d
+    a154862056b5a436.031766bf9db37402.b31a45898f99eff4.380adc3458f65c28
+    e3e7d48eef040e2b.c2651945497fafda.7d5046d77fc3e6f1.a27cdae0470643f6
+    ed59e3fc771180e3
+VMASKMOVPS_256_LoadForm(mem)
+  before
+    f56b71740525d11a.1b2df94c8f09cc0f.9043d571850d5fa7.4e536080681b5348
+    967f02340c4df0c8.a571f2c9d14f1a8f.497c15306c6a3f93.846e8ff0e62f71a5
+    ac611128a9969a18.dd01b96e52633357.c9de566d1aa10ccd.79efd093948a7db3
+    13dd1a3df70b8a37.1f274ca8adcf5412.eb331214acbe817f.8b201ed50eb9b31f
+    144f7523f1474f95
+  after
+    f56b71740525d11a.1b2df94c8f09cc0f.9043d571850d5fa7.4e536080681b5348
+    967f02340c4df0c8.a571f2c9d14f1a8f.497c15306c6a3f93.846e8ff0e62f71a5
+    f56b717400000000.1b2df94c8f09cc0f.0000000000000000.4e536080681b5348
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    144f7523f1474f95
+
+VMASKMOVPD_128_LoadForm(reg)
+  before
+    71c6d1e7d8c08cc0.a6bf995d13b87e51.c630a6e37e21b96d.8d49c7113ece5cd6
+    ffd12e8e60b1a74c.43d30a7618aa2f91.3068c48c62e59e13.8aeaf050eadc57fd
+    18be898524a5dce7.c5e4ea7222ec5c24.b81ba00df5a63eb1.bee309bdcff42f21
+    19d8dd37c128663a.07bfb43f4e8bc035.ba9538d4d2f0d7f3.04008e4406239f6e
+    3a0cfcd1ae74650f
+  after
+    71c6d1e7d8c08cc0.a6bf995d13b87e51.c630a6e37e21b96d.8d49c7113ece5cd6
+    ffd12e8e60b1a74c.43d30a7618aa2f91.3068c48c62e59e13.8aeaf050eadc57fd
+    18be898524a5dce7.c5e4ea7222ec5c24.b81ba00df5a63eb1.bee309bdcff42f21
+    19d8dd37c128663a.07bfb43f4e8bc035.ba9538d4d2f0d7f3.04008e4406239f6e
+    3a0cfcd1ae74650f
+VMASKMOVPD_128_LoadForm(mem)
+  before
+    3ad5ce51e0f43b31.5f6a260fd2c782f4.e730e4c8b89116f1.9221874b954fa284
+    e22580aebbadddff.44c2607bf40d6cbf.4003f7f97b0c1b83.9b0d89e0db50de10
+    0dca8ed658ad09a6.252a88e6c2866048.ed0467beb3088a18.33a33bfe407ec545
+    968e74b3d5007951.5eef99bcd9bf993a.ccffb2037d9020dc.b53098115f6694cd
+    7c009b85d4938754
+  after
+    3ad5ce51e0f43b31.5f6a260fd2c782f4.e730e4c8b89116f1.9221874b954fa284
+    e22580aebbadddff.44c2607bf40d6cbf.4003f7f97b0c1b83.9b0d89e0db50de10
+    0000000000000000.0000000000000000.0000000000000000.9221874b954fa284
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    7c009b85d4938754
+
+VMASKMOVPD_128_LoadForm(reg)
+  before
+    e65e42c63c91d987.5b3eaf334eb1ea2d.4b5d8f69d4435442.b7bf53b4f4b099fa
+    4e98894032edc712.36a5ba41decc1766.48bf66594f9fcd0b.8c12c7bd3574b19f
+    0ff96a6053328da0.049111c9a15dbe27.b1631af9e75d4042.25c2880b5ce924f7
+    87cce3903aec67de.a2cc30b7b471999d.e293a8b3380be893.609c1488831aad2d
+    176ce622c813096e
+  after
+    e65e42c63c91d987.5b3eaf334eb1ea2d.4b5d8f69d4435442.b7bf53b4f4b099fa
+    4e98894032edc712.36a5ba41decc1766.48bf66594f9fcd0b.8c12c7bd3574b19f
+    0ff96a6053328da0.049111c9a15dbe27.b1631af9e75d4042.25c2880b5ce924f7
+    87cce3903aec67de.a2cc30b7b471999d.e293a8b3380be893.609c1488831aad2d
+    176ce622c813096e
+VMASKMOVPD_128_LoadForm(mem)
+  before
+    27fd7ac447e1f3e5.105eef3e84a89078.ea2494f7331364f4.379c0bf5dd3502a9
+    6d1d4c591b8f28bf.08fb8ad4ccf04519.ba63b7753950dd57.0cca3f297266c931
+    c396d9cf612a6527.c9efb1c0af53c26d.ec56171de232bef2.bd6940bd942a7bd6
+    06369c1134bd634a.b0855e6dc85a4222.5dc830dc4bc8c4f3.a6c50b1cdf0d5245
+    23299bb1ed9c8b29
+  after
+    27fd7ac447e1f3e5.105eef3e84a89078.ea2494f7331364f4.379c0bf5dd3502a9
+    6d1d4c591b8f28bf.08fb8ad4ccf04519.ba63b7753950dd57.0cca3f297266c931
+    0000000000000000.0000000000000000.ea2494f7331364f4.0000000000000000
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    23299bb1ed9c8b29
+
+VMASKMOVPD_128_LoadForm(reg)
+  before
+    90e3ecea5d626130.12c7110bb154e154.1a0b8f47b39302e2.e9877c9c8f1baa83
+    493dfa32c9ec1103.c416b4a9f3fc9970.61cb3fba0d8a3e59.6d5e794bcb392ed1
+    a984c1f6cdc4d751.f6ee01d816bf48cb.e2126a3272c93234.c318a2d41b2d0a07
+    0e043ea00679efc4.851d758237aca990.fa2c0d1b7dde191f.c88273229904fb51
+    5868682363c9bcdd
+  after
+    90e3ecea5d626130.12c7110bb154e154.1a0b8f47b39302e2.e9877c9c8f1baa83
+    493dfa32c9ec1103.c416b4a9f3fc9970.61cb3fba0d8a3e59.6d5e794bcb392ed1
+    a984c1f6cdc4d751.f6ee01d816bf48cb.e2126a3272c93234.c318a2d41b2d0a07
+    0e043ea00679efc4.851d758237aca990.fa2c0d1b7dde191f.c88273229904fb51
+    5868682363c9bcdd
+VMASKMOVPD_128_LoadForm(mem)
+  before
+    4f96fdc295880ad4.d3096c9d0f949408.4d6d8b9472cc7aec.036523e1ca5530c5
+    89d8afeb4a4da165.54df475984a304ca.2aacbffbe22d750b.5a09a8f1f6b8b3d3
+    e2f9f98a9f253dba.ecd1cb41033178b6.f8a48da1a3da5718.5b6398b59d95def4
+    36c7578caf1c99ff.f92cf4c025cb2f77.93227274d2e0db40.62c1ef9b5978ecd5
+    cb6daa0dc9ec1a22
+  after
+    4f96fdc295880ad4.d3096c9d0f949408.4d6d8b9472cc7aec.036523e1ca5530c5
+    89d8afeb4a4da165.54df475984a304ca.2aacbffbe22d750b.5a09a8f1f6b8b3d3
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    cb6daa0dc9ec1a22
+
+VMASKMOVPD_256_LoadForm(reg)
+  before
+    f2b4c479877da386.610c46db973c7262.d53dbf4188fc63ba.d7f2e95f8a4abeae
+    33e2394a2fb7c5ae.3f9540657293840c.de4e2732c850512b.a0df6e4ee824bc8f
+    eb4305ec5e27ba45.ac2ec3145c2c8b2c.6fab28fe80543575.cab77d2d077b910f
+    732324cbaf58bef8.84a34ad6721442ec.e3a2be114c924a45.314492e8045af859
+    b1532a6bfacdae9a
+  after
+    f2b4c479877da386.610c46db973c7262.d53dbf4188fc63ba.d7f2e95f8a4abeae
+    33e2394a2fb7c5ae.3f9540657293840c.de4e2732c850512b.a0df6e4ee824bc8f
+    eb4305ec5e27ba45.ac2ec3145c2c8b2c.6fab28fe80543575.cab77d2d077b910f
+    732324cbaf58bef8.84a34ad6721442ec.e3a2be114c924a45.314492e8045af859
+    b1532a6bfacdae9a
+VMASKMOVPD_256_LoadForm(mem)
+  before
+    25b0c0a206e16ffd.2acd9353bed60f73.a3bf5195cf566678.977ee6d7c999ce46
+    6b27d07a43a1f7af.6b8e4df0292ee761.e450553f90feb2fd.e88a9bbc92f2fa25
+    5e84d6ddcd1901db.92b24e0e89eb836f.2520d1bfd119e4a7.3013d92c442b0d8d
+    da934fb9c1564aaf.fb85921a7c9a1f48.41fc4101adb2b6a1.cd659c947bd0412b
+    19cce15ed26bd3ab
+  after
+    25b0c0a206e16ffd.2acd9353bed60f73.a3bf5195cf566678.977ee6d7c999ce46
+    6b27d07a43a1f7af.6b8e4df0292ee761.e450553f90feb2fd.e88a9bbc92f2fa25
+    0000000000000000.0000000000000000.a3bf5195cf566678.977ee6d7c999ce46
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    19cce15ed26bd3ab
+
+VMASKMOVPD_256_LoadForm(reg)
+  before
+    7194a2f8e58affb8.ba1fb6f83b638e54.0253167e9ec6f699.14b021f140d6e518
+    3209ddcc51b900ff.dcf58788564c88f9.0368d5a88afb450e.7908ed7ba78f2c38
+    b6768d48b182142b.1be13e542f1ef5c8.590fcb03dcc54852.4ed0228cfdeb492c
+    5a28afd7a17375e9.52af5748e0e491ed.6296f4fa31b13b11.6ed33a0e5ff6f621
+    b4dfb3efe8baef42
+  after
+    7194a2f8e58affb8.ba1fb6f83b638e54.0253167e9ec6f699.14b021f140d6e518
+    3209ddcc51b900ff.dcf58788564c88f9.0368d5a88afb450e.7908ed7ba78f2c38
+    b6768d48b182142b.1be13e542f1ef5c8.590fcb03dcc54852.4ed0228cfdeb492c
+    5a28afd7a17375e9.52af5748e0e491ed.6296f4fa31b13b11.6ed33a0e5ff6f621
+    b4dfb3efe8baef42
+VMASKMOVPD_256_LoadForm(mem)
+  before
+    febe0919b445f2bc.7a6b3de5bf185fe5.5f2b4f5088aa1895.79474cfb254a59f9
+    263db67ae0a3b9ba.728b35dea4fb10ca.1c21a158417d45ec.fa6fd071531ddfb4
+    0a2838fd88df016a.9ed4922eeeabc245.675cc94c2768d51d.405a7bc857b509ee
+    844b0a8dc70585f5.5b92504139b1b101.1aaa431857788455.a954496cce9e1254
+    8fa836ca53653792
+  after
+    febe0919b445f2bc.7a6b3de5bf185fe5.5f2b4f5088aa1895.79474cfb254a59f9
+    263db67ae0a3b9ba.728b35dea4fb10ca.1c21a158417d45ec.fa6fd071531ddfb4
+    0000000000000000.0000000000000000.0000000000000000.79474cfb254a59f9
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    8fa836ca53653792
+
+VMASKMOVPD_256_LoadForm(reg)
+  before
+    50a43f4c8395b453.7271a818ba210389.03106c83209b1bab.13d58ba9ecb70dc0
+    46925f5ff9bac544.ae688e897c403552.f39ce0613ff43aef.2caa1ee903342d89
+    cfbf92705260a511.15fa39cc296dd77c.8780aa4533484b78.42f577c6b7f8a0dc
+    4577d4ea29149165.84f423cedeb5a732.1b09c59d98248af3.3281122b251122e7
+    d61c6c03688a6ed3
+  after
+    50a43f4c8395b453.7271a818ba210389.03106c83209b1bab.13d58ba9ecb70dc0
+    46925f5ff9bac544.ae688e897c403552.f39ce0613ff43aef.2caa1ee903342d89
+    cfbf92705260a511.15fa39cc296dd77c.8780aa4533484b78.42f577c6b7f8a0dc
+    4577d4ea29149165.84f423cedeb5a732.1b09c59d98248af3.3281122b251122e7
+    d61c6c03688a6ed3
+VMASKMOVPD_256_LoadForm(mem)
+  before
+    0b90ff3c9d7041cf.060621381b62c5ec.d522ca79b6235fa1.0b832dd40913320b
+    aeab49c1dfcd5705.6cb876c8c3d47c54.e550aabacec3bcf4.b23adf5522a2806d
+    9937c57e4ab06ba1.d4d8ce05bdf8f347.904a3d7e42a17958.6e79d68e805bb0c5
+    a901ef5ffb223ad1.9bb3255ba65a6671.b3db01b02cca54f8.9a8e0eeabecdfdbe
+    92c383d57981a505
+  after
+    0b90ff3c9d7041cf.060621381b62c5ec.d522ca79b6235fa1.0b832dd40913320b
+    aeab49c1dfcd5705.6cb876c8c3d47c54.e550aabacec3bcf4.b23adf5522a2806d
+    0b90ff3c9d7041cf.0000000000000000.d522ca79b6235fa1.0b832dd40913320b
+    0000000000000000.0000000000000000.0000000000000000.0000000000000000
+    92c383d57981a505
+
+VMASKMOVPS_128_StoreForm(reg)
+  before
+    b26531bb4c05e245.bad444510e3180bf.1b9677361a84117f.28d1703bab490701
+    55c01509d4e4f02b.a87e3e3e9ee8f997.b1cbc102b4042f1d.ccf6090dd82b4f9f
+    d9202a29acab0d63.4fc95b13c7546086.ba9ffd2c1066fdf6.7b174511d27be7fd
+    99d06c8871e47398.8c8316bda68072b8.905d291ecb34b7b7.1100a133b2458c48
+    6a7c9a5f9696faab
+  after
+    b26531bb4c05e245.bad444510e3180bf.1b9677361a84117f.28d1703bab490701
+    55c01509d4e4f02b.a87e3e3e9ee8f997.b1cbc102b4042f1d.ccf6090dd82b4f9f
+    d9202a29acab0d63.4fc95b13c7546086.ba9ffd2c1066fdf6.7b174511d27be7fd
+    99d06c8871e47398.8c8316bda68072b8.905d291ecb34b7b7.1100a133b2458c48
+    6a7c9a5f9696faab
+VMASKMOVPS_128_StoreForm(mem)
+  before
+    6259ab819a79ed53.f11ed793be1e5f76.3976ec265778eb58.9053404581fc980b
+    d5615085d9fa206c.3c5467b430e20cab.336f573cf4498793.16cb3f0ecc4add9f
+    9f62065870255021.d8bf195962beb7e1.563ad5ea9cfe0194.7e1220e44ba8c21f
+    9c2647e47a07399f.1fabe8edf03d9cc4.7da2e11c69a31688.2474e13298a58336
+    643d7d664fca5b91
+  after
+    6259ab819a79ed53.f11ed793be1e5f76.3976ec26f4498793.9053404581fc980b
+    d5615085d9fa206c.3c5467b430e20cab.336f573cf4498793.16cb3f0ecc4add9f
+    9f62065870255021.d8bf195962beb7e1.563ad5ea9cfe0194.7e1220e44ba8c21f
+    9c2647e47a07399f.1fabe8edf03d9cc4.7da2e11c69a31688.2474e13298a58336
+    643d7d664fca5b91
+
+VMASKMOVPS_128_StoreForm(reg)
+  before
+    9ab9f1eb0da587db.a87a911713ac9711.6f64d0dc77ecf701.8675f7be7744819a
+    2234372d6dc143c1.9f295fdb581e25a4.2236ce9293560444.4c7d94bce3ee00f8
+    58f94d980baacbef.5d012d1e656ba083.966cdc7bdf07fe38.ab873202c8ad4dcb
+    98562e9985ed5a10.bdcc78cb559fc3dc.2554f803f78c228a.7f5f4f7c428b2542
+    a4d166176f964387
+  after
+    9ab9f1eb0da587db.a87a911713ac9711.6f64d0dc77ecf701.8675f7be7744819a
+    2234372d6dc143c1.9f295fdb581e25a4.2236ce9293560444.4c7d94bce3ee00f8
+    58f94d980baacbef.5d012d1e656ba083.966cdc7bdf07fe38.ab873202c8ad4dcb
+    98562e9985ed5a10.bdcc78cb559fc3dc.2554f803f78c228a.7f5f4f7c428b2542
+    a4d166176f964387
+VMASKMOVPS_128_StoreForm(mem)
+  before
+    f5a9f4bd68da64c6.3e95d69a74152dd1.9d58bace44c44cd8.2d381d967870abe6
+    50b3735c4b61442c.a603410876af80dd.d86f71134fe8f5a6.086547a1fd3fd7f7
+    90ba61de34399fe5.2cec6c5027468ee1.4ade198691177b70.1327738e2386e069
+    918b39313e6e311c.2c9b51dc22669489.ce712c13275b9962.abca9bcb85d002ea
+    2a99bdc2c0a97b23
+  after
+    f5a9f4bd68da64c6.3e95d69a74152dd1.9d58bace4fe8f5a6.2d381d967870abe6
+    50b3735c4b61442c.a603410876af80dd.d86f71134fe8f5a6.086547a1fd3fd7f7
+    90ba61de34399fe5.2cec6c5027468ee1.4ade198691177b70.1327738e2386e069
+    918b39313e6e311c.2c9b51dc22669489.ce712c13275b9962.abca9bcb85d002ea
+    2a99bdc2c0a97b23
+
+VMASKMOVPS_128_StoreForm(reg)
+  before
+    ede2d4e16f9e85c3.2ef37740850bb5fe.015eee1a039bce80.42f327a62cc20da9
+    50efdd932f3a5d74.45bb97f7261ce8b7.097f3f7567727772.8132872cbd589171
+    b00dd2449b093ee2.b0b216423dad8572.9f4b3e59ea76cd0d.66f8c78ff528e1e5
+    6788b160509866bb.4da36f0de4cb495c.1e0ee93227340afb.cf1363bdf13ebb32
+    964dd8a0cca6d984
+  after
+    ede2d4e16f9e85c3.2ef37740850bb5fe.015eee1a039bce80.42f327a62cc20da9
+    50efdd932f3a5d74.45bb97f7261ce8b7.097f3f7567727772.8132872cbd589171
+    b00dd2449b093ee2.b0b216423dad8572.9f4b3e59ea76cd0d.66f8c78ff528e1e5
+    6788b160509866bb.4da36f0de4cb495c.1e0ee93227340afb.cf1363bdf13ebb32
+    964dd8a0cca6d984
+VMASKMOVPS_128_StoreForm(mem)
+  before
+    9973a126a26df806.d2ac7553e9720fa9.f6591e443a81f0a0.e4143b6cba376ae8
+    b250393a909ed3e4.4dc51a8902237658.89a29fd459db366b.4ca93073400b2b81
+    bfb21fc8b245284c.341e9d6e3838d675.e0486fa75de6d7e8.b119c4b3543d8772
+    9a63ccbc236fb168.e305f86f273c6cac.d91808aa63ad8e44.71aff4989357bb66
+    e6b8ba8f98e8020a
+  after
+    9973a126a26df806.d2ac7553e9720fa9.89a29fd43a81f0a0.4ca93073ba376ae8
+    b250393a909ed3e4.4dc51a8902237658.89a29fd459db366b.4ca93073400b2b81
+    bfb21fc8b245284c.341e9d6e3838d675.e0486fa75de6d7e8.b119c4b3543d8772
+    9a63ccbc236fb168.e305f86f273c6cac.d91808aa63ad8e44.71aff4989357bb66
+    e6b8ba8f98e8020a
+
+VMASKMOVPS_256_StoreForm(reg)
+  before
+    6e80140200799a0a.2031bd02ff272a64.b6c429f66abc74a8.4edee8ca863d18ab
+    6353fd5f6698bd11.2ee66f86637a516d.09a82b719d422a15.1c658bf2e3a13048
+    237d721167d1a7cb.9e4f5d356b73e0af.38fdfb4a5d5cc9a1.207b6b0d95e59348
+    084a6e839eae96e6.4d3803f9311e9455.9f0e93ef46968ef6.34ea0609b815fdd7
+    3580d6d1693e2a20
+  after
+    6e80140200799a0a.2031bd02ff272a64.b6c429f66abc74a8.4edee8ca863d18ab
+    6353fd5f6698bd11.2ee66f86637a516d.09a82b719d422a15.1c658bf2e3a13048
+    237d721167d1a7cb.9e4f5d356b73e0af.38fdfb4a5d5cc9a1.207b6b0d95e59348
+    084a6e839eae96e6.4d3803f9311e9455.9f0e93ef46968ef6.34ea0609b815fdd7
+    3580d6d1693e2a20
+VMASKMOVPS_256_StoreForm(mem)
+  before
+    ff075951c46bd64f.6f05ec23a7bdc40c.176cdec0d487288c.9a29f1cbf27bb5c0
+    6f4c0b75e4a9bc91.b5fcea5c1f896ee9.d9b968746ebb5a7f.8498104a00977aad
+    5f1a662ae6039912.3479649aa29fcf2a.6de91f031bc5e45b.bba9ecd809761866
+    ac3fe85ae58528fe.49c9544acb8a257b.b0c97e58f8b2834c.9aa681e1aca5cc9a
+    7ddcccd182afd2f3
+  after
+    ff075951e4a9bc91.6f05ec231f896ee9.176cdec0d487288c.8498104af27bb5c0
+    6f4c0b75e4a9bc91.b5fcea5c1f896ee9.d9b968746ebb5a7f.8498104a00977aad
+    5f1a662ae6039912.3479649aa29fcf2a.6de91f031bc5e45b.bba9ecd809761866
+    ac3fe85ae58528fe.49c9544acb8a257b.b0c97e58f8b2834c.9aa681e1aca5cc9a
+    7ddcccd182afd2f3
+
+VMASKMOVPS_256_StoreForm(reg)
+  before
+    bf97c8152a21651d.32850cf2fd3b2780.5038b8d636d7aa87.7e25025e208df27d
+    be2271173d86c2c5.cdba4edf4b3250c4.a6118bab80109bfb.b3c92503af62ee1b
+    d5cbc345596a2597.59a82a0cea7660f7.a5a2c93644c33382.2b816533c33e3351
+    5fdcbb091a5ac93e.b21c1d64f7111245.aa356ee11f7cafc9.c2183dd8752c7d4c
+    545c29dfe3388738
+  after
+    bf97c8152a21651d.32850cf2fd3b2780.5038b8d636d7aa87.7e25025e208df27d
+    be2271173d86c2c5.cdba4edf4b3250c4.a6118bab80109bfb.b3c92503af62ee1b
+    d5cbc345596a2597.59a82a0cea7660f7.a5a2c93644c33382.2b816533c33e3351
+    5fdcbb091a5ac93e.b21c1d64f7111245.aa356ee11f7cafc9.c2183dd8752c7d4c
+    545c29dfe3388738
+VMASKMOVPS_256_StoreForm(mem)
+  before
+    bd17a534296f0e40.baa253d11be1ec67.b4e2a1d58d1123da.1118771aadc54b7c
+    d9162ec462dbce91.41698908f98bc8be.3bc5344ac9814fe1.3695df4c882c4346
+    84253f79aa8b8356.4f7d581a4fe499ee.239352afc66e5286.75f9a2e34f3dd2d4
+    9a1054411e88e8bc.422abd73b9799da3.481675f0a1e3e7f6.2a8fbc4a9b8335d1
+    b1a52af00b8aa8ea
+  after
+    d9162ec462dbce91.baa253d11be1ec67.b4e2a1d5c9814fe1.1118771aadc54b7c
+    d9162ec462dbce91.41698908f98bc8be.3bc5344ac9814fe1.3695df4c882c4346
+    84253f79aa8b8356.4f7d581a4fe499ee.239352afc66e5286.75f9a2e34f3dd2d4
+    9a1054411e88e8bc.422abd73b9799da3.481675f0a1e3e7f6.2a8fbc4a9b8335d1
+    b1a52af00b8aa8ea
+
+VMASKMOVPS_256_StoreForm(reg)
+  before
+    6686e63e38de66cb.f7a3e907dae0baef.74bbb27fd4d60e8b.861b1bf975eccb5d
+    a57deea1c00cad1f.77a97bb6f99fb41a.437e35aa3b852950.b86fbfb65f96bae6
+    cad73d853f9fb793.f5ef843c97cf946a.09bd41608b14299e.bcdbdd147aec70be
+    31e0d0575024c0d2.4f418284d17e140a.23c5d20d600e4c22.6d2ef1fde3faa811
+    a733785fb5cd1f0a
+  after
+    6686e63e38de66cb.f7a3e907dae0baef.74bbb27fd4d60e8b.861b1bf975eccb5d
+    a57deea1c00cad1f.77a97bb6f99fb41a.437e35aa3b852950.b86fbfb65f96bae6
+    cad73d853f9fb793.f5ef843c97cf946a.09bd41608b14299e.bcdbdd147aec70be
+    31e0d0575024c0d2.4f418284d17e140a.23c5d20d600e4c22.6d2ef1fde3faa811
+    a733785fb5cd1f0a
+VMASKMOVPS_256_StoreForm(mem)
+  before
+    45b5ec240c7091d6.36e4a18190250689.606bf07ac2b8f127.eee2e51e5400cc88
+    2581cb3a05f0b9a0.342fae719a31c363.03394b0b8788e6ec.c46074fd0675e67b
+    2264908cbc575495.890cf2910ad1340e.16770d213bfab186.028a7d180ff9d5a8
+    1727b8064cb31ee1.90c8694f7d939433.74f1b4a9fb1a0c21.04aefbda0e19d6ba
+    2716ebaf9c60255e
+  after
+    45b5ec2405f0b9a0.342fae7190250689.606bf07ac2b8f127.eee2e51e5400cc88
+    2581cb3a05f0b9a0.342fae719a31c363.03394b0b8788e6ec.c46074fd0675e67b
+    2264908cbc575495.890cf2910ad1340e.16770d213bfab186.028a7d180ff9d5a8
+    1727b8064cb31ee1.90c8694f7d939433.74f1b4a9fb1a0c21.04aefbda0e19d6ba
+    2716ebaf9c60255e
+
+VMASKMOVPD_128_StoreForm(reg)
+  before
+    c50f4703575bfe40.e299bd94d110d3af.a4b010168f022081.f872bb90e2f5b3e8
+    3be50d42db949c0b.5d851d2268782e2b.230ee152daab14a2.80c79ec00d966408
+    e5e438d8c3993c6c.66b6539c2cfaec83.682fda6ffd19ac42.e6bcda279709d9ad
+    1f58c431acf61a0e.d7fadcef3a9fc9e0.ce5ef6d992d8230e.081de9b09c5bcf02
+    c0b6494739970134
+  after
+    c50f4703575bfe40.e299bd94d110d3af.a4b010168f022081.f872bb90e2f5b3e8
+    3be50d42db949c0b.5d851d2268782e2b.230ee152daab14a2.80c79ec00d966408
+    e5e438d8c3993c6c.66b6539c2cfaec83.682fda6ffd19ac42.e6bcda279709d9ad
+    1f58c431acf61a0e.d7fadcef3a9fc9e0.ce5ef6d992d8230e.081de9b09c5bcf02
+    c0b6494739970134
+VMASKMOVPD_128_StoreForm(mem)
+  before
+    ec5275d88aca2d6e.458caeb93135719e.8e1b3205ae758071.b3e932fc3574b7b2
+    66bfea4faafe0ddd.b3cdf0ddeee57fc8.65e6d3cca287ce60.721a8845837aa1d9
+    0bc72298b5425dac.c5688807808f7d37.3a273a2e35e16fda.663ff61e17762030
+    b8379b9fc89fdb08.d7a771a583c1aa98.e7a9e31980901f0a.eca277f58ef26e63
+    61900734837cc81d
+  after
+    ec5275d88aca2d6e.458caeb93135719e.8e1b3205ae758071.b3e932fc3574b7b2
+    66bfea4faafe0ddd.b3cdf0ddeee57fc8.65e6d3cca287ce60.721a8845837aa1d9
+    0bc72298b5425dac.c5688807808f7d37.3a273a2e35e16fda.663ff61e17762030
+    b8379b9fc89fdb08.d7a771a583c1aa98.e7a9e31980901f0a.eca277f58ef26e63
+    61900734837cc81d
+
+VMASKMOVPD_128_StoreForm(reg)
+  before
+    1f54a349929f6a0a.47dbd050ff23411d.45d6a82192064096.493a4a78a19f991d
+    843c459f59e890d8.957f3d9875d94c16.6b4327e949ea7dde.3da4ec36b41b9a3e
+    ea93eba271e27530.7fef5f6146ceb720.a539ec6845fa9a1c.9db54441d40fde9a
+    aea490be781956c1.dff6b0998f0c4066.4f03f20a21c1d6fb.4637ce841e87205d
+    14f706ecad8f1db2
+  after
+    1f54a349929f6a0a.47dbd050ff23411d.45d6a82192064096.493a4a78a19f991d
+    843c459f59e890d8.957f3d9875d94c16.6b4327e949ea7dde.3da4ec36b41b9a3e
+    ea93eba271e27530.7fef5f6146ceb720.a539ec6845fa9a1c.9db54441d40fde9a
+    aea490be781956c1.dff6b0998f0c4066.4f03f20a21c1d6fb.4637ce841e87205d
+    14f706ecad8f1db2
+VMASKMOVPD_128_StoreForm(mem)
+  before
+    e3c068639d3491c6.2dbc305f0a1a6e35.9262ae2a6ba2a115.c5ee353b7acc6b28
+    8f6071d60b8238c4.c127c8f1c270fa39.74fdd402f7999759.6247b167eba6964e
+    f5a19c321383cdd9.c73153e03ca73778.61949f0c4effdd5d.845863fa11db931a
+    ef516561d0450d31.9b26cd99154c5e9f.35f389348ddf304e.866d466187f79d38
+    c3d45606ea87f153
+  after
+    e3c068639d3491c6.2dbc305f0a1a6e35.9262ae2a6ba2a115.6247b167eba6964e
+    8f6071d60b8238c4.c127c8f1c270fa39.74fdd402f7999759.6247b167eba6964e
+    f5a19c321383cdd9.c73153e03ca73778.61949f0c4effdd5d.845863fa11db931a
+    ef516561d0450d31.9b26cd99154c5e9f.35f389348ddf304e.866d466187f79d38
+    c3d45606ea87f153
+
+VMASKMOVPD_128_StoreForm(reg)
+  before
+    99d78f56d516cb17.5a3a48515ed3b4f7.9a513286e8eaae59.cce51066cf464c57
+    63c4eebee4316732.1229c2ecda3a7e58.1e007e15520e6153.0238af8e303feda5
+    7ce56da9b463004e.f3ea4e205f85267f.847daeb0ef42b439.b3b6e299ced6ce64
+    42870a83e138d317.d94868d80ac06999.2815bcc55914e2b6.bb2d2571c218acbf
+    f667f5032a1043e3
+  after
+    99d78f56d516cb17.5a3a48515ed3b4f7.9a513286e8eaae59.cce51066cf464c57
+    63c4eebee4316732.1229c2ecda3a7e58.1e007e15520e6153.0238af8e303feda5
+    7ce56da9b463004e.f3ea4e205f85267f.847daeb0ef42b439.b3b6e299ced6ce64
+    42870a83e138d317.d94868d80ac06999.2815bcc55914e2b6.bb2d2571c218acbf
+    f667f5032a1043e3
+VMASKMOVPD_128_StoreForm(mem)
+  before
+    4031cd3c22ca4ffb.0ff6c0b7063d1c3a.a0118c00f6f802d2.6614a6bf2f102977
+    75562906c5538b34.417d8cb3bffd1663.230f36844038af55.9ac6680a0ac1c327
+    71a4854f2fb6b4ba.326a68e3a904fe3d.400fe350038c2a4f.2076fc1289b3ed73
+    10e65e027dff85b8.400752b160df1075.d2de0e515c0130eb.547260434572e207
+    92048f09dc8bdf8e
+  after
+    4031cd3c22ca4ffb.0ff6c0b7063d1c3a.a0118c00f6f802d2.6614a6bf2f102977
+    75562906c5538b34.417d8cb3bffd1663.230f36844038af55.9ac6680a0ac1c327
+    71a4854f2fb6b4ba.326a68e3a904fe3d.400fe350038c2a4f.2076fc1289b3ed73
+    10e65e027dff85b8.400752b160df1075.d2de0e515c0130eb.547260434572e207
+    92048f09dc8bdf8e
+
+VMASKMOVPD_256_StoreForm(reg)
+  before
+    367985d0ea8920b5.2de72e0bca3bbc5b.c5a2458a7f1988b7.b545337166a27c56
+    9b1d3e050af9e127.a6747356337513ce.1f853ddaa23ea1ae.c513ce9d3d7bcbbc
+    1f3cb712d9655d91.5659a8cfd3b9473e.a8fd370e66db9806.dd135cc2ff99d948
+    1d22eb65f25cd29e.18624a62c71413d7.bd552e90667aa96c.db1058cbc5076226
+    9ad73ea3add12284
+  after
+    367985d0ea8920b5.2de72e0bca3bbc5b.c5a2458a7f1988b7.b545337166a27c56
+    9b1d3e050af9e127.a6747356337513ce.1f853ddaa23ea1ae.c513ce9d3d7bcbbc
+    1f3cb712d9655d91.5659a8cfd3b9473e.a8fd370e66db9806.dd135cc2ff99d948
+    1d22eb65f25cd29e.18624a62c71413d7.bd552e90667aa96c.db1058cbc5076226
+    9ad73ea3add12284
+VMASKMOVPD_256_StoreForm(mem)
+  before
+    f5358a38d304d48c.f11ad669f16779fc.ca5bd3fb2a9135c4.badb1ece3faa0f8c
+    caf4b87551ab356a.f772748973149154.470fc187193c6631.fcd903338cf50712
+    f3e0454646d2004b.8a74c13314ee5455.6a4b8ff0af22654c.dd9dd92aeae7cda9
+    4ec7ac97cc86f25b.086dbad26e82ffa9.11dcb924094eed3f.ba719c21f40c9dfd
+    efa2498347f1b2bc
+  after
+    caf4b87551ab356a.f772748973149154.ca5bd3fb2a9135c4.fcd903338cf50712
+    caf4b87551ab356a.f772748973149154.470fc187193c6631.fcd903338cf50712
+    f3e0454646d2004b.8a74c13314ee5455.6a4b8ff0af22654c.dd9dd92aeae7cda9
+    4ec7ac97cc86f25b.086dbad26e82ffa9.11dcb924094eed3f.ba719c21f40c9dfd
+    efa2498347f1b2bc
+
+VMASKMOVPD_256_StoreForm(reg)
+  before
+    d87cdbbd7e21498f.b5736954ffd2c7c5.cca95ad2205bcefc.168cbc0e42ccb936
+    d14a4e3935289e25.06b2f86afcc33bb6.31749d9fc405fcfb.5728129977a9865e
+    375a9f640993ed28.1b4ed6c3de630a5a.95197fa6f60cc652.ae7b39b3c3f00fe3
+    64f6c9aa96ed7144.d2147d4dc2c1efdc.52e6fd5153fd68ac.f953ac4742ae11f0
+    127ae84111ee49b2
+  after
+    d87cdbbd7e21498f.b5736954ffd2c7c5.cca95ad2205bcefc.168cbc0e42ccb936
+    d14a4e3935289e25.06b2f86afcc33bb6.31749d9fc405fcfb.5728129977a9865e
+    375a9f640993ed28.1b4ed6c3de630a5a.95197fa6f60cc652.ae7b39b3c3f00fe3
+    64f6c9aa96ed7144.d2147d4dc2c1efdc.52e6fd5153fd68ac.f953ac4742ae11f0
+    127ae84111ee49b2
+VMASKMOVPD_256_StoreForm(mem)
+  before
+    d6be678d4cbc7054.b56bc77877c26727.05d06bf2c3e6a768.c625120d76631eb6
+    22e9a7170e244503.86059738489f0a7a.924e1ba0fee0ed2c.4b23ba47fccb231c
+    d0c823cc733382eb.32103558a60f98ec.53590a428eba7e51.3f2cf16a80c0b489
+    bd27579698f4e437.17d89b432c9f4b27.25beb2c390811606.fc8cb3e19ece0da9
+    e08efd1af382692a
+  after
+    22e9a7170e244503.b56bc77877c26727.05d06bf2c3e6a768.c625120d76631eb6
+    22e9a7170e244503.86059738489f0a7a.924e1ba0fee0ed2c.4b23ba47fccb231c
+    d0c823cc733382eb.32103558a60f98ec.53590a428eba7e51.3f2cf16a80c0b489
+    bd27579698f4e437.17d89b432c9f4b27.25beb2c390811606.fc8cb3e19ece0da9
+    e08efd1af382692a
+
+VMASKMOVPD_256_StoreForm(reg)
+  before
+    4580ca801b6705b5.c6d1c06398742614.90a9c76577da60d7.e44a91111f3f7175
+    88ac167fb1091df9.c594d81d90be06ae.f9ceb42a234c12a9.6dc7221757034bcb
+    065fdd8352f5eda0.973a1db29bde3e30.ae945efeca819e49.9a02e1c255d65f33
+    19e51bf899b6b057.18900a0dd6e08bc6.0b47c24d0b064063.48c64bfc35c66ada
+    53e1dab212de27eb
+  after
+    4580ca801b6705b5.c6d1c06398742614.90a9c76577da60d7.e44a91111f3f7175
+    88ac167fb1091df9.c594d81d90be06ae.f9ceb42a234c12a9.6dc7221757034bcb
+    065fdd8352f5eda0.973a1db29bde3e30.ae945efeca819e49.9a02e1c255d65f33
+    19e51bf899b6b057.18900a0dd6e08bc6.0b47c24d0b064063.48c64bfc35c66ada
+    53e1dab212de27eb
+VMASKMOVPD_256_StoreForm(mem)
+  before
+    971e0cd1082b5493.1e8acd4b22d8a3c9.24621b1a5cd1a89d.6b33da837f6634a1
+    f0485d4334b8abfe.719aeee68ae802a3.977ccdc54abc52e1.2ca4a40cc42eb5b2
+    3a2c47f6b291e957.6e617a366c710890.4daa9bfabbae45be.a9e61b5576e90140
+    519647d49cc3c9cb.712a6ea865fff33d.22b701a5ccb23d5f.3d443bc8302351f8
+    460c01d38f68e485
+  after
+    971e0cd1082b5493.1e8acd4b22d8a3c9.24621b1a5cd1a89d.2ca4a40cc42eb5b2
+    f0485d4334b8abfe.719aeee68ae802a3.977ccdc54abc52e1.2ca4a40cc42eb5b2
+    3a2c47f6b291e957.6e617a366c710890.4daa9bfabbae45be.a9e61b5576e90140
+    519647d49cc3c9cb.712a6ea865fff33d.22b701a5ccb23d5f.3d443bc8302351f8
+    460c01d38f68e485
+
diff --git a/none/tests/amd64/avx-1.vgtest b/none/tests/amd64/avx-1.vgtest
index 0f650d1..ddd472e 100644
--- a/none/tests/amd64/avx-1.vgtest
+++ b/none/tests/amd64/avx-1.vgtest
@@ -1,3 +1,3 @@
 prog: avx-1
-prereq: ../../../tests/x86_amd64_features amd64-avx
+prereq: test -x avx-1 && ../../../tests/x86_amd64_features amd64-avx
 vgopts: -q
diff --git a/none/tests/amd64/avx2-1.c b/none/tests/amd64/avx2-1.c
index c9509d6..aa4e367 100644
--- a/none/tests/amd64/avx2-1.c
+++ b/none/tests/amd64/avx2-1.c
@@ -2,14 +2,18 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
-#include <malloc.h>
+#include "tests/malloc.h"
 
 typedef  unsigned char           UChar;
 typedef  unsigned int            UInt;
 typedef  unsigned long int       UWord;
 typedef  unsigned long long int  ULong;
 
+#if defined(VGO_darwin)
 UChar randArray[1027] __attribute__((used));
+#else
+UChar _randArray[1027] __attribute__((used));
+#endif
 
 #define IS_32_ALIGNED(_ptr) (0 == (0x1F & (UWord)(_ptr)))
 
@@ -65,7 +69,7 @@
     \
     __attribute__ ((noinline)) static void test_##_name ( void )   \
     { \
-       Block* b = memalign(32, sizeof(Block)); \
+       Block* b = memalign32(sizeof(Block)); \
        randBlock(b); \
        printf("%s(reg)\n", #_name); \
        showBlock("before", b); \
@@ -975,7 +979,7 @@
                "vpslld $25, %%xmm7, %%xmm8;"
                "vpsrld $25, %%xmm8, %%xmm8;"
                "vblendvps %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vgatherdps %%xmm6, 3(%%r14,%%xmm8,4), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -983,7 +987,7 @@
                "vpslld $25, %%ymm7, %%ymm8;"
                "vpsrld $25, %%ymm8, %%ymm8;"
                "vblendvps %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vgatherdps %%ymm6, 3(%%r14,%%ymm8,4), %%ymm9;"
                "xorl %%r14d, %%r14d")
 
@@ -993,7 +997,7 @@
                "vpmovsxdq %%xmm6, %%xmm9;"
                "vblendvpd %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vgatherqps %%xmm6, 3(%%r14,%%xmm8,4), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1003,7 +1007,7 @@
                "vpmovsxdq %%xmm6, %%ymm9;"
                "vblendvpd %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vgatherqps %%xmm6, 3(%%r14,%%ymm8,4), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1013,7 +1017,7 @@
                "vpmovsxdq %%xmm6, %%xmm9;"
                "vblendvpd %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vmovq %%r14, %%xmm7;"
                "vpsllq $2, %%xmm8, %%xmm8;"
                "vpbroadcastq %%xmm7, %%xmm7;"
@@ -1029,7 +1033,7 @@
                "vpmovsxdq %%xmm6, %%ymm9;"
                "vblendvpd %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vmovq %%r14, %%xmm7;"
                "vpsllq $2, %%ymm8, %%ymm8;"
                "vpbroadcastq %%xmm7, %%ymm7;"
@@ -1045,7 +1049,7 @@
                "vshufps $13, %%xmm6, %%xmm6, %%xmm9;"
                "vblendvps %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vgatherdpd %%xmm6, 3(%%r14,%%xmm8,8), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1056,7 +1060,7 @@
                "vshufps $221, %%ymm9, %%ymm6, %%ymm9;"
                "vblendvps %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vgatherdpd %%ymm6, 3(%%r14,%%xmm8,8), %%ymm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1064,7 +1068,7 @@
                "vpsllq $58, %%xmm7, %%xmm8;"
                "vpsrlq $58, %%xmm8, %%xmm8;"
                "vblendvpd %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vgatherqpd %%xmm6, 3(%%r14,%%xmm8,8), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1072,7 +1076,7 @@
                "vpsllq $58, %%ymm7, %%ymm8;"
                "vpsrlq $58, %%ymm8, %%ymm8;"
                "vblendvpd %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vgatherqpd %%ymm6, 3(%%r14,%%ymm8,8), %%ymm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1080,7 +1084,7 @@
                "vpsllq $58, %%xmm7, %%xmm8;"
                "vpsrlq $58, %%xmm8, %%xmm8;"
                "vblendvpd %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vmovq %%r14, %%xmm7;"
                "vpsllq $2, %%xmm8, %%xmm8;"
                "vpbroadcastq %%xmm7, %%xmm7;"
@@ -1094,7 +1098,7 @@
                "vpsllq $58, %%ymm7, %%ymm8;"
                "vpsrlq $58, %%ymm8, %%ymm8;"
                "vblendvpd %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vmovq %%r14, %%xmm7;"
                "vpsllq $2, %%ymm8, %%ymm8;"
                "vpbroadcastq %%xmm7, %%ymm7;"
@@ -1108,7 +1112,7 @@
                "vpslld $25, %%xmm7, %%xmm8;"
                "vpsrld $25, %%xmm8, %%xmm8;"
                "vblendvps %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vpgatherdd %%xmm6, 3(%%r14,%%xmm8,4), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1116,7 +1120,7 @@
                "vpslld $25, %%ymm7, %%ymm8;"
                "vpsrld $25, %%ymm8, %%ymm8;"
                "vblendvps %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vpgatherdd %%ymm6, 3(%%r14,%%ymm8,4), %%ymm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1126,7 +1130,7 @@
                "vpmovsxdq %%xmm6, %%xmm9;"
                "vblendvpd %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vpgatherqd %%xmm6, 3(%%r14,%%xmm8,4), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1136,7 +1140,7 @@
                "vpmovsxdq %%xmm6, %%ymm9;"
                "vblendvpd %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vpgatherqd %%xmm6, 3(%%r14,%%ymm8,4), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1146,7 +1150,7 @@
                "vpmovsxdq %%xmm6, %%xmm9;"
                "vblendvpd %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vmovq %%r14, %%xmm7;"
                "vpsllq $2, %%xmm8, %%xmm8;"
                "vpbroadcastq %%xmm7, %%xmm7;"
@@ -1162,7 +1166,7 @@
                "vpmovsxdq %%xmm6, %%ymm9;"
                "vblendvpd %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vmovq %%r14, %%xmm7;"
                "vpsllq $2, %%ymm8, %%ymm8;"
                "vpbroadcastq %%xmm7, %%ymm7;"
@@ -1178,7 +1182,7 @@
                "vshufps $13, %%xmm6, %%xmm6, %%xmm9;"
                "vblendvps %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vpgatherdq %%xmm6, 3(%%r14,%%xmm8,8), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1189,7 +1193,7 @@
                "vshufps $221, %%ymm9, %%ymm6, %%ymm9;"
                "vblendvps %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
                "vmovdqa 96(%0), %%ymm9;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vpgatherdq %%ymm6, 3(%%r14,%%xmm8,8), %%ymm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1197,7 +1201,7 @@
                "vpsllq $58, %%xmm7, %%xmm8;"
                "vpsrlq $58, %%xmm8, %%xmm8;"
                "vblendvpd %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vpgatherqq %%xmm6, 3(%%r14,%%xmm8,8), %%xmm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1205,7 +1209,7 @@
                "vpsllq $58, %%ymm7, %%ymm8;"
                "vpsrlq $58, %%ymm8, %%ymm8;"
                "vblendvpd %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vpgatherqq %%ymm6, 3(%%r14,%%ymm8,8), %%ymm9;"
                "xorl %%r14d, %%r14d")
 
@@ -1213,7 +1217,7 @@
                "vpsllq $58, %%xmm7, %%xmm8;"
                "vpsrlq $58, %%xmm8, %%xmm8;"
                "vblendvpd %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vmovq %%r14, %%xmm7;"
                "vpsllq $2, %%xmm8, %%xmm8;"
                "vpbroadcastq %%xmm7, %%xmm7;"
@@ -1227,7 +1231,7 @@
                "vpsllq $58, %%ymm7, %%ymm8;"
                "vpsrlq $58, %%ymm8, %%ymm8;"
                "vblendvpd %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
-               "leaq randArray(%%rip), %%r14;"
+               "leaq _randArray(%%rip), %%r14;"
                "vmovq %%r14, %%xmm7;"
                "vpsllq $2, %%ymm8, %%ymm8;"
                "vpbroadcastq %%xmm7, %%ymm7;"
@@ -1466,7 +1470,11 @@
    DO_D( VPMASKMOVD_256_StoreForm );
    DO_D( VPMASKMOVQ_128_StoreForm );
    DO_D( VPMASKMOVQ_256_StoreForm );
+#if defined(VGO_darwin)
    { int i; for (i = 0; i < sizeof(randArray); i++) randArray[i] = randUChar(); }
+#else
+   { int i; for (i = 0; i < sizeof(_randArray); i++) _randArray[i] = randUChar(); }
+#endif
    DO_D( VGATHERDPS_128 );
    DO_D( VGATHERDPS_256 );
    DO_D( VGATHERQPS_128_1 );
diff --git a/none/tests/amd64/bug132918.vgtest b/none/tests/amd64/bug132918.vgtest
index 7bfbf95..8c94907 100644
--- a/none/tests/amd64/bug132918.vgtest
+++ b/none/tests/amd64/bug132918.vgtest
@@ -1 +1,2 @@
 prog: bug132918
+stdout_filter: filter_inf_nan
diff --git a/none/tests/amd64/bug156404-amd64.c b/none/tests/amd64/bug156404-amd64.c
index d0c4ea0..3af8b60 100644
--- a/none/tests/amd64/bug156404-amd64.c
+++ b/none/tests/amd64/bug156404-amd64.c
@@ -14,6 +14,7 @@
 #define VG_STRINGIFZ(__str)  #__str
 #define VG_STRINGIFY(__str)  VG_STRINGIFZ(__str)
 
+#if defined(VGO_linux) || defined(VGO_darwin)
 #define __NR_READLINK        VG_STRINGIFY(__NR_readlink)
 
 extern long my_readlink ( const char* path );
@@ -32,6 +33,30 @@
 ".previous\n"
 );
 
+#elif defined(VGO_solaris)
+#define __NR_READLINKAT      VG_STRINGIFY(SYS_readlinkat)
+
+extern long my_readlink ( const char* path );
+asm(
+".text\n"
+".globl my_readlink\n"
+"my_readlink:\n"
+"\tsubq    $0x1008,%rsp\n"
+"\tmovq    %rdi,%rsi\n"
+"\txorq    %rdi,%rdi\n"
+"\tmovq    %rsp,%rdx\n"
+"\tmovq    $0x1000,%r10\n"
+"\tmovl    $"__NR_READLINKAT",%eax\n"
+"\tsyscall\n"
+"\taddq    $0x1008,%rsp\n"
+"\tret\n"
+".previous\n"
+);
+
+#else
+#error "Unknown OS"
+#endif
+
 long recurse ( const char* path, long count )
 {
    if (count <= 0) {
diff --git a/none/tests/amd64/filter_inf_nan b/none/tests/amd64/filter_inf_nan
new file mode 100755
index 0000000..ce40f21
--- /dev/null
+++ b/none/tests/amd64/filter_inf_nan
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+# Solaris libc prints 'Inf' or 'Infinity' instead of 'inf'
+# and 'NaN' instead of 'nan'. Filter these differences here.
+sed "s/-Infinity/     -inf/g" |
+sed "s/Infinity/     inf/g"   |
+sed "s/Inf/inf/g"             |
+sed "s/NaN/nan/g"
+
+exit 0
+
diff --git a/none/tests/amd64/fxtract.vgtest b/none/tests/amd64/fxtract.vgtest
index b265384..8e9e84d 100644
--- a/none/tests/amd64/fxtract.vgtest
+++ b/none/tests/amd64/fxtract.vgtest
@@ -1,2 +1,3 @@
 prereq: test -e fxtract
 prog: fxtract
+stdout_filter: filter_inf_nan
diff --git a/none/tests/amd64/getseg.c b/none/tests/amd64/getseg.c
new file mode 100644
index 0000000..ac09af6
--- /dev/null
+++ b/none/tests/amd64/getseg.c
@@ -0,0 +1,25 @@
+/* Test segment register getting. */
+
+#include <stdio.h>
+
+int main(void)
+{
+   unsigned short csw = -1;
+   unsigned int csl = -1;
+   unsigned long csq = -1;
+   unsigned short csw_mem = -1;
+
+   __asm__ __volatile__ (
+       "movw %%cs, %0\n" /* mov segReg, r16 */
+       "movl %%cs, %1\n" /* mov segReg, r32 */
+       "movq %%cs, %2\n" /* mov segReg, r64 */
+       "movw %%cs, %3\n" /* mov segReg, mem16 */
+       : "=r" (csw), "=r" (csl), "=r" (csq), "=m" (csw_mem));
+
+   printf("cs(w)=%u\n", csw);
+   printf("cs(l)=%u\n", csl);
+   printf("cs(q)=%lu\n", csq);
+   printf("cs(w_mem)=%u\n", csw_mem);
+
+   return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/amd64/getseg.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/amd64/getseg.stderr.exp
diff --git a/none/tests/amd64/getseg.stdout.exp b/none/tests/amd64/getseg.stdout.exp
new file mode 100644
index 0000000..558358d
--- /dev/null
+++ b/none/tests/amd64/getseg.stdout.exp
@@ -0,0 +1,4 @@
+cs(w)=0
+cs(l)=0
+cs(q)=0
+cs(w_mem)=0
diff --git a/none/tests/amd64/getseg.vgtest b/none/tests/amd64/getseg.vgtest
new file mode 100644
index 0000000..9d91132
--- /dev/null
+++ b/none/tests/amd64/getseg.vgtest
@@ -0,0 +1,2 @@
+prog: getseg
+vgopts: -q
diff --git a/none/tests/amd64/movbe.c b/none/tests/amd64/movbe.c
index 4b23696..603e140 100644
--- a/none/tests/amd64/movbe.c
+++ b/none/tests/amd64/movbe.c
@@ -2,7 +2,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
-#include <malloc.h>
+#include "tests/malloc.h"
 
 typedef  unsigned char           UChar;
 typedef  unsigned int            UInt;
@@ -43,7 +43,7 @@
     \
     __attribute__ ((noinline)) static void test_##_name ( void )   \
     { \
-       Block* b = memalign(32, sizeof(Block)); \
+       Block* b = memalign32(sizeof(Block)); \
        randBlock(b); \
        printf("%s\n", #_name); \
        showBlock("before", b); \
diff --git a/none/tests/amd64/pcmpstr64.c b/none/tests/amd64/pcmpstr64.c
index 5b273eb..0694012 100644
--- a/none/tests/amd64/pcmpstr64.c
+++ b/none/tests/amd64/pcmpstr64.c
@@ -204,9 +204,9 @@
       unvalidated cases in the code base. */
    switch (imm8) {
       case 0x00: case 0x02: case 0x08: case 0x0A: case 0x0C: case 0x0E:
-      case 0x12: case 0x14: case 0x1A:
+      case 0x12: case 0x14: case 0x18: case 0x1A:
       case 0x30: case 0x34: case 0x38: case 0x3A:
-      case 0x40: case 0x44: case 0x46: case 0x4A:
+      case 0x40: case 0x42: case 0x44: case 0x46: case 0x4A:
          break;
       default:
          return False;
@@ -785,6 +785,99 @@
 
 //////////////////////////////////////////////////////////
 //                                                      //
+//                       ISTRI_18                       //
+//                                                      //
+//////////////////////////////////////////////////////////
+
+UInt h_pcmpistri_18 ( V128* argL, V128* argR )
+{
+   V128 block[2];
+   memcpy(&block[0], argL, sizeof(V128));
+   memcpy(&block[1], argR, sizeof(V128));
+   ULong res, flags;
+   __asm__ __volatile__(
+      "subq      $1024,  %%rsp"             "\n\t"
+      "movdqu    0(%2),  %%xmm2"            "\n\t"
+      "movdqu    16(%2), %%xmm11"           "\n\t"
+      "pcmpistri $0x18,  %%xmm2, %%xmm11"   "\n\t"
+      "pushfq"                              "\n\t"
+      "popq      %%rdx"                     "\n\t"
+      "movq      %%rcx,  %0"                "\n\t"
+      "movq      %%rdx,  %1"                "\n\t"
+      "addq      $1024,  %%rsp"             "\n\t"
+      : /*out*/ "=r"(res), "=r"(flags) : "r"/*in*/(&block[0])
+      : "rcx","rdx","xmm0","xmm2","xmm11","cc","memory"
+   );
+   return ((flags & 0x8D5) << 16) | (res & 0xFFFF);
+}
+
+UInt s_pcmpistri_18 ( V128* argLU, V128* argRU )
+{
+   V128 resV;
+   UInt resOSZACP, resECX;
+   Bool ok
+      = pcmpXstrX_WRK( &resV, &resOSZACP, argLU, argRU,
+                       zmask_from_V128(argLU),
+                       zmask_from_V128(argRU),
+                       0x18, False/*!isSTRM*/
+        );
+   assert(ok);
+   resECX = resV.uInt[0];
+   return (resOSZACP << 16) | resECX;
+}
+
+void istri_18 ( void )
+{
+   char* wot = "18";
+   UInt(*h)(V128*,V128*) = h_pcmpistri_18;
+   UInt(*s)(V128*,V128*) = s_pcmpistri_18;
+
+   try_istri(wot,h,s, "0000000000000000", "0000000000000000"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaa2aaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaa2aaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaa2aa", "aaaaaaaaaaaaaaaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaa2aaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaa2aaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaa2a"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "baaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "b9aaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+
+   try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaaaaaa7aaa"); 
+   try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaa2aaa4aaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaa0aaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaa0aaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaa0aaa", "aaaaaaaaaaaa0aaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaa0aaaaaaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaa0aaa"); 
+   try_istri(wot,h,s, "aaaaaaaa0aaaaaaa", "aaaaaaaaaaaa0aaa"); 
+
+   try_istri(wot,h,s, "aaaaaaaaaaaa0aaa", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaa0aaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaa0aaa", "aaaaaaaa0aaaaaaa"); 
+
+   try_istri(wot,h,s, "0000000000000000", "aaaaaaaa0aaaaaaa"); 
+   try_istri(wot,h,s, "8000000000000000", "aaaaaaaa0aaaaaaa"); 
+   try_istri(wot,h,s, "0000000000000001", "aaaaaaaa0aaaaaaa"); 
+
+   try_istri(wot,h,s, "0000000000000000", "aaaaaaaaaaaaaaaa"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "0000000000000000"); 
+}
+
+
+
+//////////////////////////////////////////////////////////
+//                                                      //
 //                       ISTRI_1A                       //
 //                                                      //
 //////////////////////////////////////////////////////////
@@ -1546,6 +1639,86 @@
 
 //////////////////////////////////////////////////////////
 //                                                      //
+//                       ISTRI_42                       //
+//                                                      //
+//////////////////////////////////////////////////////////
+
+UInt h_pcmpistri_42 ( V128* argL, V128* argR )
+{
+   V128 block[2];
+   memcpy(&block[0], argL, sizeof(V128));
+   memcpy(&block[1], argR, sizeof(V128));
+   ULong res, flags;
+   __asm__ __volatile__(
+      "subq      $1024,  %%rsp"             "\n\t"
+      "movdqu    0(%2),  %%xmm2"            "\n\t"
+      "movdqu    16(%2), %%xmm11"           "\n\t"
+      "pcmpistri $0x42,  %%xmm2, %%xmm11"   "\n\t"
+      "pushfq"                              "\n\t"
+      "popq      %%rdx"                     "\n\t"
+      "movq      %%rcx,  %0"                "\n\t"
+      "movq      %%rdx,  %1"                "\n\t"
+      "addq      $1024,  %%rsp"             "\n\t"
+      : /*out*/ "=r"(res), "=r"(flags) : "r"/*in*/(&block[0])
+      : "rcx","rdx","xmm0","xmm2","xmm11","cc","memory"
+   );
+   return ((flags & 0x8D5) << 16) | (res & 0xFFFF);
+}
+
+UInt s_pcmpistri_42 ( V128* argLU, V128* argRU )
+{
+   V128 resV;
+   UInt resOSZACP, resECX;
+   Bool ok
+      = pcmpXstrX_WRK( &resV, &resOSZACP, argLU, argRU,
+                       zmask_from_V128(argLU),
+                       zmask_from_V128(argRU),
+                       0x42, False/*!isSTRM*/
+        );
+   assert(ok);
+   resECX = resV.uInt[0];
+   return (resOSZACP << 16) | resECX;
+}
+
+void istri_42 ( void )
+{
+   char* wot = "42";
+   UInt(*h)(V128*,V128*) = h_pcmpistri_42;
+   UInt(*s)(V128*,V128*) = s_pcmpistri_42;
+
+   try_istri(wot,h,s, "abcdacbdabcdabcd", "000000000000000a"); 
+   try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000000b"); 
+   try_istri(wot,h,s, "abcdabcdabcdabcd", "00000000000000ab"); 
+   try_istri(wot,h,s, "abcdabc0abcdabcd", "000000000000abcd"); 
+
+   try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000abcd"); 
+   try_istri(wot,h,s, "0bcdabcdabcdabcd", "000000000000abcd"); 
+   try_istri(wot,h,s, "abcdabcdabcda0cd", "000000000000abcd"); 
+   try_istri(wot,h,s, "abcdabcdabcdab0d", "000000000000abcd"); 
+   try_istri(wot,h,s, "abcdabcdabcdabc0", "000000000000abcd"); 
+
+   try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000abcd"); 
+   try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000a0cd"); 
+   try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000ab0d"); 
+   try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000abc0"); 
+
+   try_istri(wot,h,s, "0000000000000000", "0000000000000000"); 
+   try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); 
+
+   try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000abcd"); 
+   try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000dcba"); 
+   try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000bbbb"); 
+   try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000baba"); 
+
+   try_istri(wot,h,s, "0000abcdabcdabcd", "00000000000baba0"); 
+
+   try_istri(wot,h,s, "0ddc0ffeebadf00d", "00000000cafebabe"); 
+   try_istri(wot,h,s, "0ddc0ffeebadfeed", "00000000cafebabe"); 
+}
+
+
+//////////////////////////////////////////////////////////
+//                                                      //
 //                       ISTRI_0E                       //
 //                                                      //
 //////////////////////////////////////////////////////////
@@ -1807,6 +1980,7 @@
    istri_4A();
    istri_3A();
    istri_08();
+   istri_18();
    istri_1A();
    istri_02();
    istri_0C();
@@ -1817,6 +1991,7 @@
    istri_46();
    istri_30();
    istri_40();
+   istri_42();
    istri_0E();
    istri_14();
    istri_34();
diff --git a/none/tests/amd64/pcmpstr64.stdout.exp b/none/tests/amd64/pcmpstr64.stdout.exp
index 594f620..4921586 100644
--- a/none/tests/amd64/pcmpstr64.stdout.exp
+++ b/none/tests/amd64/pcmpstr64.stdout.exp
@@ -88,6 +88,36 @@
 istri 08  0000000000000001 aaaaaaaa0aaaaaaa -> 00c10007 00c10007 
 istri 08  0000000000000000 aaaaaaaaaaaaaaaa -> 00400010 00400010 
 istri 08  aaaaaaaaaaaaaaaa 0000000000000000 -> 00800010 00800010 
+istri 18  0000000000000000 0000000000000000 -> 00c00010 00c00010 
+istri 18  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000010 00000010 
+istri 18  aaaa2aaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000b 0001000b 
+istri 18  aaaaaaaaa2aaaaaa aaaaaaaaaaaaaaaa -> 00010006 00010006 
+istri 18  aaaaaaaaaaaaa2aa aaaaaaaaaaaaaaaa -> 00010002 00010002 
+istri 18  aaaaaaaaaaaaaaaa aaaa2aaaaaaaaaaa -> 0001000b 0001000b 
+istri 18  aaaaaaaaaaaaaaaa aaaaaaaaa2aaaaaa -> 00010006 00010006 
+istri 18  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaa2a -> 00010001 00010001 
+istri 18  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000010 00000010 
+istri 18  baaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000f 0001000f 
+istri 18  b9aaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000e 0001000e 
+istri 18  b9baaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000d 0001000d 
+istri 18  b9baaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000d 0001000d 
+istri 18  b9baaaaaaaaaaaaa aaaaaaaaaaaa7aaa -> 00010003 00010003 
+istri 18  b9baaaaaaaaaaaaa aaaaaaaa2aaa4aaa -> 00010003 00010003 
+istri 18  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000010 00000010 
+istri 18  aaaaaaaaaaaa0aaa aaaaaaaaaaaaaaaa -> 00410003 00410003 
+istri 18  aaaaaaaaaaaaaaaa aaaaaaaaaaaa0aaa -> 00810003 00810003 
+istri 18  aaaaaaaaaaaa0aaa aaaaaaaaaaaa0aaa -> 00c00010 00c00010 
+istri 18  aaaaaaaa0aaaaaaa aaaaaaaaaaaaaaaa -> 00410007 00410007 
+istri 18  aaaaaaaaaaaaaaaa aaaaaaaaaaaa0aaa -> 00810003 00810003 
+istri 18  aaaaaaaa0aaaaaaa aaaaaaaaaaaa0aaa -> 00c10003 00c10003 
+istri 18  aaaaaaaaaaaa0aaa aaaaaaaaaaaaaaaa -> 00410003 00410003 
+istri 18  aaaaaaaaaaaaaaaa aaaaaaaa0aaaaaaa -> 00810007 00810007 
+istri 18  aaaaaaaaaaaa0aaa aaaaaaaa0aaaaaaa -> 00c10003 00c10003 
+istri 18  0000000000000000 aaaaaaaa0aaaaaaa -> 08c10000 08c10000 
+istri 18  8000000000000000 aaaaaaaa0aaaaaaa -> 08c10000 08c10000 
+istri 18  0000000000000001 aaaaaaaa0aaaaaaa -> 08c10000 08c10000 
+istri 18  0000000000000000 aaaaaaaaaaaaaaaa -> 08410000 08410000 
+istri 18  aaaaaaaaaaaaaaaa 0000000000000000 -> 08810000 08810000 
 istri 1A  0000000000000000 0000000000000000 -> 00c00010 00c00010 
 istri 1A  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000010 00000010 
 istri 1A  aaaa2aaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0001000b 0001000b 
@@ -332,6 +362,28 @@
 istri 40  0000abcdabcdabcd 00000000000baba0 -> 00c00010 00c00010 
 istri 40  0ddc0ffeebadf00d 00000000cafebabe -> 00c00010 00c00010 
 istri 40  0ddc0ffeebadfeed 00000000cafebabe -> 00c1000a 00c1000a 
+istri 42  abcdacbdabcdabcd 000000000000000a -> 0081000f 0081000f 
+istri 42  abcdabcdabcdabcd 000000000000000b -> 0081000e 0081000e 
+istri 42  abcdabcdabcdabcd 00000000000000ab -> 0081000f 0081000f 
+istri 42  abcdabc0abcdabcd 000000000000abcd -> 08c10007 08c10007 
+istri 42  abcdabcdabcdabcd 000000000000abcd -> 0881000f 0881000f 
+istri 42  0bcdabcdabcdabcd 000000000000abcd -> 08c1000e 08c1000e 
+istri 42  abcdabcdabcda0cd 000000000000abcd -> 08c10001 08c10001 
+istri 42  abcdabcdabcdab0d 000000000000abcd -> 08c10000 08c10000 
+istri 42  abcdabcdabcdabc0 000000000000abcd -> 00c00010 00c00010 
+istri 42  abcdabcdabcdabcd 000000000000abcd -> 0881000f 0881000f 
+istri 42  abcdabcdabcdabcd 000000000000a0cd -> 0881000d 0881000d 
+istri 42  abcdabcdabcdabcd 000000000000ab0d -> 0881000c 0881000c 
+istri 42  abcdabcdabcdabcd 000000000000abc0 -> 00800010 00800010 
+istri 42  0000000000000000 0000000000000000 -> 00c00010 00c00010 
+istri 42  aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 0801000f 0801000f 
+istri 42  0000abcdabcdabcd 000000000000abcd -> 08c1000b 08c1000b 
+istri 42  0000abcdabcdabcd 000000000000dcba -> 08c1000b 08c1000b 
+istri 42  0000abcdabcdabcd 000000000000bbbb -> 00c1000a 00c1000a 
+istri 42  0000abcdabcdabcd 000000000000baba -> 00c1000b 00c1000b 
+istri 42  0000abcdabcdabcd 00000000000baba0 -> 00c00010 00c00010 
+istri 42  0ddc0ffeebadf00d 00000000cafebabe -> 00c00010 00c00010 
+istri 42  0ddc0ffeebadfeed 00000000cafebabe -> 00c1000a 00c1000a 
 istri 0E  111111111abcde11 00000000000abcde -> 00810002 00810002 
 istri 0E  111111111abcde11 0000abcde00abcde -> 00810002 00810002 
 istri 0E  1111111111abcde1 00000000000abcde -> 00810001 00810001 
diff --git a/none/tests/amd64/redundantRexW.c b/none/tests/amd64/redundantRexW.c
index e189267..0a50c3b 100644
--- a/none/tests/amd64/redundantRexW.c
+++ b/none/tests/amd64/redundantRexW.c
@@ -596,6 +596,23 @@
      after_test( "rex.WB subsd  -0x8(%r13),%xmm1", regs, mem );
    }
 
+   /* cvtps2pd mem, reg   48 0f 5a 07     rex.W cvtps2pd  (%rdi),%xmm0 */
+   {
+     before_test( regs, mem );
+     __asm__ __volatile__(
+         "movq %0, %%r14\n"
+       "\tmovq %1, %%r15\n"
+       LOAD_XMMREGS_from_r14
+       "\tmovq %%r15, %%rdi\n"
+       "\t.byte 0x48,0x0f,0x5a,0x07\n"
+       SAVE_XMMREGS_to_r14
+          : /*out*/ : /*in*/ "r"(regs), "r"( -0 + (char*)&mem->dqw[2] )
+                    : /*trash*/ "r14","r15","memory", XMMREGS,
+                                "rdi"
+     );
+     after_test( "rex.W cvtps2pd  (%rdi),%xmm0", regs, mem );
+   }
+
    free(regs);
    free(mem);
    return 0;
diff --git a/none/tests/amd64/redundantRexW.stdout.exp b/none/tests/amd64/redundantRexW.stdout.exp
index dd1697a..94b255a 100644
--- a/none/tests/amd64/redundantRexW.stdout.exp
+++ b/none/tests/amd64/redundantRexW.stdout.exp
@@ -648,3 +648,29 @@
   %xmm15 ................................
 }
 
+after "rex.W cvtps2pd  (%rdi),%xmm0" (dqws in order [15 .. 0]) {
+  [0]    ................................
+  [1]    ................................
+  [2]    ................................
+  [3]    ................................
+  [4]    ................................
+}
+after "rex.W cvtps2pd  (%rdi),%xmm0" (xmms in order [15..0]) {
+  %xmm 0 113a1c7d5554535213bd9cffd4535251
+  %xmm 1 ................................
+  %xmm 2 ................................
+  %xmm 3 ................................
+  %xmm 4 ................................
+  %xmm 5 ................................
+  %xmm 6 ................................
+  %xmm 7 ................................
+  %xmm 8 ................................
+  %xmm 9 ................................
+  %xmm10 ................................
+  %xmm11 ................................
+  %xmm12 ................................
+  %xmm13 ................................
+  %xmm14 ................................
+  %xmm15 ................................
+}
+
diff --git a/none/tests/amd64/sse4-64.c b/none/tests/amd64/sse4-64.c
index 46e0cdc..662dd52 100644
--- a/none/tests/amd64/sse4-64.c
+++ b/none/tests/amd64/sse4-64.c
@@ -12,35 +12,10 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
-//#include "tests/malloc.h" // reenable when reintegrated
+#include "tests/malloc.h"
 #include <string.h>
 
 
-
-// rmme when reintegrated
-// Allocates a 16-aligned block.  Asserts if the allocation fails.
-#ifdef VGO_darwin
-#include <stdlib.h>
-#else
-#include <malloc.h>
-#endif
-__attribute__((unused))
-static void* memalign16(size_t szB)
-{
-   void* x;
-#if defined(VGO_darwin)
-   // Darwin lacks memalign, but its malloc is always 16-aligned anyway.
-   x = malloc(szB);
-#else
-   x = memalign(16, szB);
-#endif
-   assert(x);
-   assert(0 == ((16-1) & (unsigned long)x));
-   return x;
-}
-
-
-
 typedef  unsigned char           V128[16];
 typedef  unsigned int            UInt;
 typedef  signed int              Int;
diff --git a/none/tests/amd64/sse4-64.vgtest b/none/tests/amd64/sse4-64.vgtest
index a5e7f19..872dcea 100644
--- a/none/tests/amd64/sse4-64.vgtest
+++ b/none/tests/amd64/sse4-64.vgtest
@@ -1,3 +1,4 @@
 prog: sse4-64
 prereq: ../../../tests/x86_amd64_features amd64-sse42
 vgopts: -q
+stdout_filter: filter_inf_nan
diff --git a/none/tests/amd64/xacq_xrel.c b/none/tests/amd64/xacq_xrel.c
index c3abe01..5f9fac0 100644
--- a/none/tests/amd64/xacq_xrel.c
+++ b/none/tests/amd64/xacq_xrel.c
@@ -165,7 +165,7 @@
       "xorq     %%rax, %%rax"     "\n\t"
       "xorq     %%rdx, %%rdx"     "\n\t"
       "movabsq $0x1122334455667788, %%rcx"   "\n\t"
-      "movabsq $0xffeeddccbbaa9988, %%rdx"   "\n\t"
+      "movabsq $0xffeeddccbbaa9988, %%rbx"   "\n\t"
       "xacquire lock cmpxchg8b (%0)"     "\n\t"
       "xrelease lock cmpxchg8b (%0)"     "\n\t"
       : : "r"(&n) : "cc", "memory", "rax", "rdx", "rcx", "rdx"
diff --git a/none/tests/amd64/xacq_xrel.stdout.exp b/none/tests/amd64/xacq_xrel.stdout.exp
index f4ecb43..0932b22 100644
--- a/none/tests/amd64/xacq_xrel.stdout.exp
+++ b/none/tests/amd64/xacq_xrel.stdout.exp
@@ -13,7 +13,7 @@
 result for 'btr' is 5555555555554515
 result for 'bts' is 57d555555f555d55
 result for 'cmpxchg' is 271831415927d459
-result for 'cmpxchg8b' is 5566778800000000
+result for 'cmpxchg8b' is 55667788bbaa9988
 result for 'xadd' is d1c2dbecb622f897
 result for 'xchg' is 5555555555555555
 result for 'xchg-no-lock' is 5555555555555555
diff --git a/none/tests/ansi.c b/none/tests/ansi.c
index e5b67d4..08c7010 100644
--- a/none/tests/ansi.c
+++ b/none/tests/ansi.c
@@ -7,6 +7,7 @@
 #include "valgrind.h"
 #include "../../memcheck/memcheck.h"
 #include "../../helgrind/helgrind.h"
+#include "../../callgrind/callgrind.h"
 #include "../../drd/drd.h"
 
 int main(void)
diff --git a/none/tests/ansi.vgtest b/none/tests/ansi.vgtest
index 11f4247..8383af6 100644
--- a/none/tests/ansi.vgtest
+++ b/none/tests/ansi.vgtest
@@ -1 +1,2 @@
 prog: ansi
+prereq: test -x ansi
diff --git a/none/tests/arm/vcvt_fixed_float_VFP.c b/none/tests/arm/vcvt_fixed_float_VFP.c
index 5d98864..17a6ece 100644
--- a/none/tests/arm/vcvt_fixed_float_VFP.c
+++ b/none/tests/arm/vcvt_fixed_float_VFP.c
@@ -3,6 +3,7 @@
 #include <string.h>
 
 typedef  unsigned long long int  ULong;
+typedef  unsigned int            UInt;
 
 __attribute__((noinline)) float s32_to_f32_imm1(int x)
 {
@@ -212,6 +213,86 @@
 
 
 
+__attribute__((noinline)) UInt f32_to_s32_imm1 ( float f )
+{
+  float block[5];
+  memset(block, 0x55, sizeof(block));
+  block[1] = f;
+  __asm__ __volatile__(
+    "mov r8, %0"               "\n\t"
+    "vldr s14, [r8, #4]"       "\n\t"
+    "vcvt.s32.f32 s14,s14,#1"  "\n\t"
+    "vstr s14, [r8,#12]"       "\n\t"
+    : : /*IN*/"r"(&block[0]) : /*TRASH*/"s14","r8","memory"
+  );
+  return *(UInt*)(&block[3]);
+}
+
+__attribute__((noinline)) UInt f32_to_s32_imm32 ( float f )
+{
+  float block[5];
+  memset(block, 0x55, sizeof(block));
+  block[1] = f;
+  __asm__ __volatile__(
+    "mov r8, %0"               "\n\t"
+    "vldr s14, [r8, #4]"       "\n\t"
+    "vcvt.s32.f32 s14,s14,#32" "\n\t"
+    "vstr s14, [r8,#12]"       "\n\t"
+    : : /*IN*/"r"(&block[0]) : /*TRASH*/"s14","r8","memory"
+  );
+  return *(UInt*)(&block[3]);
+}
+
+void try_f32_to_s32 ( float f )
+{
+  UInt res = f32_to_s32_imm32(f);
+  printf("f32_to_s32_imm32:  %18.14e  ->  0x%08x\n", (double)f, res);
+  res = f32_to_s32_imm1(f);
+  printf("f32_to_s32_imm1:   %18.14e  ->  0x%08x\n", (double)f, res);
+}
+
+
+
+__attribute__((noinline)) UInt f32_to_u32_imm1 ( float f )
+{
+  float block[5];
+  memset(block, 0x55, sizeof(block));
+  block[1] = f;
+  __asm__ __volatile__(
+    "mov r8, %0"               "\n\t"
+    "vldr s14, [r8, #4]"       "\n\t"
+    "vcvt.u32.f32 s14,s14,#1"  "\n\t"
+    "vstr s14, [r8,#12]"       "\n\t"
+    : : /*IN*/"r"(&block[0]) : /*TRASH*/"s14","r8","memory"
+  );
+  return *(UInt*)(&block[3]);
+}
+
+__attribute__((noinline)) UInt f32_to_u32_imm32 ( float f )
+{
+  float block[5];
+  memset(block, 0x55, sizeof(block));
+  block[1] = f;
+  __asm__ __volatile__(
+    "mov r8, %0"               "\n\t"
+    "vldr s14, [r8, #4]"       "\n\t"
+    "vcvt.u32.f32 s14,s14,#32" "\n\t"
+    "vstr s14, [r8,#12]"       "\n\t"
+    : : /*IN*/"r"(&block[0]) : /*TRASH*/"s14","r8","memory"
+  );
+  return *(UInt*)(&block[3]);
+}
+
+void try_f32_to_u32 ( float f )
+{
+  UInt res = f32_to_u32_imm32(f);
+  printf("f32_to_u32_imm32:  %18.14e  ->  0x%08x\n", (double)f, res);
+  res = f32_to_u32_imm1(f);
+  printf("f32_to_u32_imm1:   %18.14e  ->  0x%08x\n", (double)f, res);
+}
+
+
+
 int main ( void  )
 {
   int i;
@@ -289,5 +370,23 @@
      try_f64_to_u32(d);
   }
 
+  printf("\n");
+  try_f32_to_s32(0.0);
+  try_f32_to_s32(1.0);
+  try_f32_to_s32(-1.0);
+  try_f32_to_s32(0.0 / 0.0);
+  for (d = -100000.01; d < 100000.0; d += 10000.0) {
+     try_f32_to_s32((float)d);
+  }
+
+  printf("\n");
+  try_f32_to_u32(0.0);
+  try_f32_to_u32(1.0);
+  try_f32_to_u32(-1.0);
+  try_f32_to_u32(0.0 / 0.0);
+  for (d = -100000.01; d < 100000.0; d += 10000.0) {
+     try_f32_to_u32((float)d);
+  }
+
   return 0;
 }
diff --git a/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp b/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp
index 64e62af..bfc0032 100644
--- a/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp
+++ b/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp
@@ -967,3 +967,105 @@
 f64_to_u32_imm1:   8.99999900000000e+04  ->  0x000000000002bf1f
 f64_to_u32_imm32:  9.99999900000000e+04  ->  0x00000000ffffffff
 f64_to_u32_imm1:   9.99999900000000e+04  ->  0x0000000000030d3f
+
+f32_to_s32_imm32:  0.00000000000000e+00  ->  0x00000000
+f32_to_s32_imm1:   0.00000000000000e+00  ->  0x00000000
+f32_to_s32_imm32:  1.00000000000000e+00  ->  0x7fffffff
+f32_to_s32_imm1:   1.00000000000000e+00  ->  0x00000002
+f32_to_s32_imm32:  -1.00000000000000e+00  ->  0x80000000
+f32_to_s32_imm1:   -1.00000000000000e+00  ->  0xfffffffe
+f32_to_s32_imm32:                 nan  ->  0x00000000
+f32_to_s32_imm1:                  nan  ->  0x00000000
+f32_to_s32_imm32:  -1.00000007812500e+05  ->  0x80000000
+f32_to_s32_imm1:   -1.00000007812500e+05  ->  0xfffcf2c0
+f32_to_s32_imm32:  -9.00000078125000e+04  ->  0x80000000
+f32_to_s32_imm1:   -9.00000078125000e+04  ->  0xfffd40e0
+f32_to_s32_imm32:  -8.00000078125000e+04  ->  0x80000000
+f32_to_s32_imm1:   -8.00000078125000e+04  ->  0xfffd8f00
+f32_to_s32_imm32:  -7.00000078125000e+04  ->  0x80000000
+f32_to_s32_imm1:   -7.00000078125000e+04  ->  0xfffddd20
+f32_to_s32_imm32:  -6.00000117187500e+04  ->  0x80000000
+f32_to_s32_imm1:   -6.00000117187500e+04  ->  0xfffe2b40
+f32_to_s32_imm32:  -5.00000117187500e+04  ->  0x80000000
+f32_to_s32_imm1:   -5.00000117187500e+04  ->  0xfffe7960
+f32_to_s32_imm32:  -4.00000117187500e+04  ->  0x80000000
+f32_to_s32_imm1:   -4.00000117187500e+04  ->  0xfffec780
+f32_to_s32_imm32:  -3.00000097656250e+04  ->  0x80000000
+f32_to_s32_imm1:   -3.00000097656250e+04  ->  0xffff15a0
+f32_to_s32_imm32:  -2.00000097656250e+04  ->  0x80000000
+f32_to_s32_imm1:   -2.00000097656250e+04  ->  0xffff63c0
+f32_to_s32_imm32:  -1.00000097656250e+04  ->  0x80000000
+f32_to_s32_imm1:   -1.00000097656250e+04  ->  0xffffb1e0
+f32_to_s32_imm32:  -9.99999977648258e-03  ->  0xfd70a3d8
+f32_to_s32_imm1:   -9.99999977648258e-03  ->  0x00000000
+f32_to_s32_imm32:  9.99999023437500e+03  ->  0x7fffffff
+f32_to_s32_imm1:   9.99999023437500e+03  ->  0x00004e1f
+f32_to_s32_imm32:  1.99999902343750e+04  ->  0x7fffffff
+f32_to_s32_imm1:   1.99999902343750e+04  ->  0x00009c3f
+f32_to_s32_imm32:  2.99999902343750e+04  ->  0x7fffffff
+f32_to_s32_imm1:   2.99999902343750e+04  ->  0x0000ea5f
+f32_to_s32_imm32:  3.99999882812500e+04  ->  0x7fffffff
+f32_to_s32_imm1:   3.99999882812500e+04  ->  0x0001387f
+f32_to_s32_imm32:  4.99999882812500e+04  ->  0x7fffffff
+f32_to_s32_imm1:   4.99999882812500e+04  ->  0x0001869f
+f32_to_s32_imm32:  5.99999882812500e+04  ->  0x7fffffff
+f32_to_s32_imm1:   5.99999882812500e+04  ->  0x0001d4bf
+f32_to_s32_imm32:  6.99999921875000e+04  ->  0x7fffffff
+f32_to_s32_imm1:   6.99999921875000e+04  ->  0x000222df
+f32_to_s32_imm32:  7.99999921875000e+04  ->  0x7fffffff
+f32_to_s32_imm1:   7.99999921875000e+04  ->  0x000270ff
+f32_to_s32_imm32:  8.99999921875000e+04  ->  0x7fffffff
+f32_to_s32_imm1:   8.99999921875000e+04  ->  0x0002bf1f
+f32_to_s32_imm32:  9.99999921875000e+04  ->  0x7fffffff
+f32_to_s32_imm1:   9.99999921875000e+04  ->  0x00030d3f
+
+f32_to_u32_imm32:  0.00000000000000e+00  ->  0x00000000
+f32_to_u32_imm1:   0.00000000000000e+00  ->  0x00000000
+f32_to_u32_imm32:  1.00000000000000e+00  ->  0xffffffff
+f32_to_u32_imm1:   1.00000000000000e+00  ->  0x00000002
+f32_to_u32_imm32:  -1.00000000000000e+00  ->  0x00000000
+f32_to_u32_imm1:   -1.00000000000000e+00  ->  0x00000000
+f32_to_u32_imm32:                 nan  ->  0x00000000
+f32_to_u32_imm1:                  nan  ->  0x00000000
+f32_to_u32_imm32:  -1.00000007812500e+05  ->  0x00000000
+f32_to_u32_imm1:   -1.00000007812500e+05  ->  0x00000000
+f32_to_u32_imm32:  -9.00000078125000e+04  ->  0x00000000
+f32_to_u32_imm1:   -9.00000078125000e+04  ->  0x00000000
+f32_to_u32_imm32:  -8.00000078125000e+04  ->  0x00000000
+f32_to_u32_imm1:   -8.00000078125000e+04  ->  0x00000000
+f32_to_u32_imm32:  -7.00000078125000e+04  ->  0x00000000
+f32_to_u32_imm1:   -7.00000078125000e+04  ->  0x00000000
+f32_to_u32_imm32:  -6.00000117187500e+04  ->  0x00000000
+f32_to_u32_imm1:   -6.00000117187500e+04  ->  0x00000000
+f32_to_u32_imm32:  -5.00000117187500e+04  ->  0x00000000
+f32_to_u32_imm1:   -5.00000117187500e+04  ->  0x00000000
+f32_to_u32_imm32:  -4.00000117187500e+04  ->  0x00000000
+f32_to_u32_imm1:   -4.00000117187500e+04  ->  0x00000000
+f32_to_u32_imm32:  -3.00000097656250e+04  ->  0x00000000
+f32_to_u32_imm1:   -3.00000097656250e+04  ->  0x00000000
+f32_to_u32_imm32:  -2.00000097656250e+04  ->  0x00000000
+f32_to_u32_imm1:   -2.00000097656250e+04  ->  0x00000000
+f32_to_u32_imm32:  -1.00000097656250e+04  ->  0x00000000
+f32_to_u32_imm1:   -1.00000097656250e+04  ->  0x00000000
+f32_to_u32_imm32:  -9.99999977648258e-03  ->  0x00000000
+f32_to_u32_imm1:   -9.99999977648258e-03  ->  0x00000000
+f32_to_u32_imm32:  9.99999023437500e+03  ->  0xffffffff
+f32_to_u32_imm1:   9.99999023437500e+03  ->  0x00004e1f
+f32_to_u32_imm32:  1.99999902343750e+04  ->  0xffffffff
+f32_to_u32_imm1:   1.99999902343750e+04  ->  0x00009c3f
+f32_to_u32_imm32:  2.99999902343750e+04  ->  0xffffffff
+f32_to_u32_imm1:   2.99999902343750e+04  ->  0x0000ea5f
+f32_to_u32_imm32:  3.99999882812500e+04  ->  0xffffffff
+f32_to_u32_imm1:   3.99999882812500e+04  ->  0x0001387f
+f32_to_u32_imm32:  4.99999882812500e+04  ->  0xffffffff
+f32_to_u32_imm1:   4.99999882812500e+04  ->  0x0001869f
+f32_to_u32_imm32:  5.99999882812500e+04  ->  0xffffffff
+f32_to_u32_imm1:   5.99999882812500e+04  ->  0x0001d4bf
+f32_to_u32_imm32:  6.99999921875000e+04  ->  0xffffffff
+f32_to_u32_imm1:   6.99999921875000e+04  ->  0x000222df
+f32_to_u32_imm32:  7.99999921875000e+04  ->  0xffffffff
+f32_to_u32_imm1:   7.99999921875000e+04  ->  0x000270ff
+f32_to_u32_imm32:  8.99999921875000e+04  ->  0xffffffff
+f32_to_u32_imm1:   8.99999921875000e+04  ->  0x0002bf1f
+f32_to_u32_imm32:  9.99999921875000e+04  ->  0xffffffff
+f32_to_u32_imm1:   9.99999921875000e+04  ->  0x00030d3f
diff --git a/none/tests/arm64/Makefile.am b/none/tests/arm64/Makefile.am
index 135d64f..f06e30b 100644
--- a/none/tests/arm64/Makefile.am
+++ b/none/tests/arm64/Makefile.am
@@ -22,6 +22,7 @@
 
 allexec_CFLAGS     = $(AM_CFLAGS) @FLAG_W_NO_NONNULL@
 
+fp_and_simd_CFLAGS = $(AM_CFLAGS) -march=armv8-a+crypto
 integer_CFLAGS     = $(AM_CFLAGS) -g -O0 -DTEST_BFM=0
 
 fp_and_simd_LDADD  = -lm
diff --git a/none/tests/arm64/fp_and_simd.c b/none/tests/arm64/fp_and_simd.c
index fb0c7e6..0aba2c8 100644
--- a/none/tests/arm64/fp_and_simd.c
+++ b/none/tests/arm64/fp_and_simd.c
@@ -3,6 +3,7 @@
 #include <assert.h>
 #include <malloc.h>  // memalign
 #include <string.h>  // memset
+#include "tests/malloc.h"
 #include <math.h>    // isnormal
 
 typedef  unsigned char           UChar;
@@ -92,16 +93,6 @@
    }
 }
 
-__attribute__((unused))
-static void* memalign16(size_t szB)
-{
-   void* x;
-   x = memalign(16, szB);
-   assert(x);
-   assert(0 == ((16-1) & (unsigned long)x));
-   return x;
-}
-
 static ULong dup4x16 ( UInt x )
 {
    ULong r = x & 0xF;
@@ -4536,23 +4527,23 @@
 // GNU assembler (GNU Binutils) 2.24.0.20140311 Linaro 2014.03
 // cannot be persuaded to accept those instructions (AFAICT).
 
-//GEN_TWOVEC_TEST(aesd_16b_16b,    "aesd v6.16b,  v27.16b",  6, 27)
-//GEN_TWOVEC_TEST(aese_16b_16b,    "aese v6.16b,  v27.16b",  6, 27)
-//GEN_TWOVEC_TEST(aesimc_16b_16b,  "aesimc v6.16b,  v27.16b",  6, 27)
-//GEN_TWOVEC_TEST(aesmc_16b_16b,   "aesmc v6.16b,  v27.16b",  6, 27)
-//
-//GEN_THREEVEC_TEST(sha1c_q_s_4s,     "sha1c q29, s28, v27.4s", 29,28,27)
-//GEN_TWOVEC_TEST(sha1h_s_s,          "sha1h s6,  s27",  6, 27)
-//GEN_THREEVEC_TEST(sha1m_q_s_4s,     "sha1m q29, s28, v27.4s", 29,28,27)
-//GEN_THREEVEC_TEST(sha1p_q_s_4s,     "sha1p q29, s28, v27.4s", 29,28,27)
-//GEN_THREEVEC_TEST(sha1su0_4s_4s_4s, "sha1su0 v29.4s, v28.4s, v27.4s", 29,28,27)
-//GEN_TWOVEC_TEST(sha1su1_4s_4s,      "sha1su1 v6.4s,  v27.4s",  6, 27)
-//
-//GEN_THREEVEC_TEST(sha256h2_q_q_4s,  "sha256h2 q29, q28, v27.4s", 29,28,27)
-//GEN_THREEVEC_TEST(sha256h_q_q_4s,   "sha256h q29, q28, v27.4s", 29,28,27)
-//GEN_TWOVEC_TEST(sha256su0_4s_4s,    "sha256su0 v6.4s,  v27.4s",  6, 27)
-//GEN_THREEVEC_TEST(sha256su1_4s_4s_4s, "sha256su1 v29.4s, v28.4s, v27.4s", 
-//                                      29,28,27)
+GEN_TWOVEC_TEST(aesd_16b_16b,    "aesd v6.16b,  v27.16b",  6, 27)
+GEN_TWOVEC_TEST(aese_16b_16b,    "aese v6.16b,  v27.16b",  6, 27)
+GEN_TWOVEC_TEST(aesimc_16b_16b,  "aesimc v6.16b,  v27.16b",  6, 27)
+GEN_TWOVEC_TEST(aesmc_16b_16b,   "aesmc v6.16b,  v27.16b",  6, 27)
+
+GEN_THREEVEC_TEST(sha1c_q_s_4s,     "sha1c q29, s28, v27.4s", 29,28,27)
+GEN_TWOVEC_TEST(sha1h_s_s,          "sha1h s6,  s27",  6, 27)
+GEN_THREEVEC_TEST(sha1m_q_s_4s,     "sha1m q29, s28, v27.4s", 29,28,27)
+GEN_THREEVEC_TEST(sha1p_q_s_4s,     "sha1p q29, s28, v27.4s", 29,28,27)
+GEN_THREEVEC_TEST(sha1su0_4s_4s_4s, "sha1su0 v29.4s, v28.4s, v27.4s", 29,28,27)
+GEN_TWOVEC_TEST(sha1su1_4s_4s,      "sha1su1 v6.4s,  v27.4s",  6, 27)
+
+GEN_THREEVEC_TEST(sha256h2_q_q_4s,  "sha256h2 q29, q28, v27.4s", 29,28,27)
+GEN_THREEVEC_TEST(sha256h_q_q_4s,   "sha256h q29, q28, v27.4s", 29,28,27)
+GEN_TWOVEC_TEST(sha256su0_4s_4s,    "sha256su0 v6.4s,  v27.4s",  6, 27)
+GEN_THREEVEC_TEST(sha256su1_4s_4s_4s, "sha256su1 v29.4s, v28.4s, v27.4s", 
+                                      29,28,27)
 
 
 /* ---------------------------------------------------------------- */
@@ -7394,18 +7385,14 @@
 
    // ======================== CRYPTO ========================
 
-   // These tests are believed to be correct but are disabled because
-   // GNU assembler (GNU Binutils) 2.24.0.20140311 Linaro 2014.03
-   // cannot be persuaded to accept those instructions (AFAICT).
-
    // aesd       16b (aes single round decryption)
    // aese       16b (aes single round encryption)
    // aesimc     16b (aes inverse mix columns)
    // aesmc      16b (aes mix columns)
-   //if (0) test_aesd_16b_16b(TyNONE);
-   //if (0) test_aese_16b_16b(TyNONE);
-   //if (0) test_aesimc_16b_16b(TyNONE);
-   //if (0) test_aesmc_16b_16b(TyNONE);
+   if (0) test_aesd_16b_16b(TyNONE);
+   if (0) test_aese_16b_16b(TyNONE);
+   if (0) test_aesimc_16b_16b(TyNONE);
+   if (0) test_aesmc_16b_16b(TyNONE);
 
    // sha1c      q_s_4s
    // sha1h      s_s
@@ -7413,21 +7400,21 @@
    // sha1p      q_s_4s
    // sha1su0    4s_4s_4s
    // sha1su1    4s_4s
-   //if (0) test_sha1c_q_s_4s(TyNONE);
-   //if (0) test_sha1h_s_s(TyNONE);
-   //if (0) test_sha1m_q_s_4s(TyNONE);
-   //if (0) test_sha1p_q_s_4s(TyNONE);
-   //if (0) test_sha1su0_4s_4s_4s(TyNONE);
-   //if (0) test_sha1su1_4s_4s(TyNONE);
+   if (0) test_sha1c_q_s_4s(TyNONE);
+   if (0) test_sha1h_s_s(TyNONE);
+   if (0) test_sha1m_q_s_4s(TyNONE);
+   if (0) test_sha1p_q_s_4s(TyNONE);
+   if (0) test_sha1su0_4s_4s_4s(TyNONE);
+   if (0) test_sha1su1_4s_4s(TyNONE);
 
    // sha256h2   q_q_4s
    // sha256h    q_q_4s
    // sha256su0  4s_4s
    // sha256su1  4s_4s_4s
-   //if (0) test_sha256h2_q_q_4s(TyNONE);
-   //if (0) test_sha256h_q_q_4s(TyNONE);
-   //if (0) test_sha256su0_4s_4s(TyNONE);
-   //if (0) test_sha256su1_4s_4s_4s(TyNONE);
+   if (0) test_sha256h2_q_q_4s(TyNONE);
+   if (0) test_sha256h_q_q_4s(TyNONE);
+   if (0) test_sha256su0_4s_4s(TyNONE);
+   if (0) test_sha256su1_4s_4s_4s(TyNONE);
 
    return 0;
 }
diff --git a/none/tests/arm64/memory.c b/none/tests/arm64/memory.c
index 1b3eb40..6034807 100644
--- a/none/tests/arm64/memory.c
+++ b/none/tests/arm64/memory.c
@@ -6,6 +6,7 @@
 #include <stdio.h>
 #include <malloc.h>  // memalign
 #include <string.h>  // memset
+#include "tests/malloc.h"
 #include <assert.h>
 
 typedef  unsigned char           UChar;
@@ -20,16 +21,6 @@
 #define False ((Bool)0)
 #define True  ((Bool)1)
 
-__attribute__((noinline))
-static void* memalign16(size_t szB)
-{
-   void* x;
-   x = memalign(16, szB);
-   assert(x);
-   assert(0 == ((16-1) & (unsigned long)x));
-   return x;
-}
-
 static inline UChar randUChar ( void )
 {
    static UInt seed = 80021;
@@ -1600,6 +1591,23 @@
 MEM_TEST("prfm pldl1keep, [x5, #40]",  12, -4);
 MEM_TEST("prfm pstl3strm, [x5, #56]",  12, -4);
 
+////////////////////////////////////////////////////////////////
+printf("PRFM (register)\n");
+
+MEM_TEST("prfm pldl1keep, [x5,x6]",  12, -4);
+MEM_TEST("prfm pldl1strm, [x5,x6, lsl #3]",  12, -4);
+MEM_TEST("prfm pldl2keep, [x5,w6,uxtw #0]", 12, 4);
+MEM_TEST("prfm pldl2strm, [x5,w6,uxtw #3]", 12, 4);
+MEM_TEST("prfm pldl3keep, [x5,w6,sxtw #0]", 12, 4);
+MEM_TEST("prfm pldl3strm, [x5,w6,sxtw #3]",  12, -4);
+
+MEM_TEST("prfm pstl1keep, [x5,x6]",  12, -4);
+MEM_TEST("prfm pstl1strm, [x5,x6, lsl #3]",  12, -4);
+MEM_TEST("prfm pstl2keep, [x5,w6,uxtw #0]", 12, 4);
+MEM_TEST("prfm pstl2strm, [x5,w6,uxtw #3]", 12, 4);
+MEM_TEST("prfm pstl3keep, [x5,w6,sxtw #0]", 12, 4);
+MEM_TEST("prfm pstl3strm, [x5,w6,sxtw #3]",  12, -4);
+
 } /* end of test_memory2() */
 
 ////////////////////////////////////////////////////////////////
diff --git a/none/tests/arm64/memory.stdout.exp b/none/tests/arm64/memory.stdout.exp
index 77e2efa..397ce08 100644
--- a/none/tests/arm64/memory.stdout.exp
+++ b/none/tests/arm64/memory.stdout.exp
@@ -25897,3 +25897,364 @@
                  0  x5       (sub, base reg)
                  0  x6       (sub, index reg)
 
+PRFM (register)
+prfm pldl1keep, [x5,x6]  with  x5 = middle_of_block+12,  x6=-4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pldl1strm, [x5,x6, lsl #3]  with  x5 = middle_of_block+12,  x6=-4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pldl2keep, [x5,w6,uxtw #0]  with  x5 = middle_of_block+12,  x6=4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pldl2strm, [x5,w6,uxtw #3]  with  x5 = middle_of_block+12,  x6=4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pldl3keep, [x5,w6,sxtw #0]  with  x5 = middle_of_block+12,  x6=4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pldl3strm, [x5,w6,sxtw #3]  with  x5 = middle_of_block+12,  x6=-4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pstl1keep, [x5,x6]  with  x5 = middle_of_block+12,  x6=-4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pstl1strm, [x5,x6, lsl #3]  with  x5 = middle_of_block+12,  x6=-4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pstl2keep, [x5,w6,uxtw #0]  with  x5 = middle_of_block+12,  x6=4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pstl2strm, [x5,w6,uxtw #3]  with  x5 = middle_of_block+12,  x6=4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pstl3keep, [x5,w6,sxtw #0]  with  x5 = middle_of_block+12,  x6=4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
+prfm pstl3strm, [x5,w6,sxtw #3]  with  x5 = middle_of_block+12,  x6=-4
+  [  0]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 16]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 32]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 48]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 64]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 80]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [ 96]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [112]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [128]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [144]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [160]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [176]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [192]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [208]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [224]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  [240]  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
+  0000000000000000  x13      (xor, xfer intreg #1)
+  0000000000000000  x23      (xor, xfer intreg #2)
+  0000000000000000  v17.d[0] (xor, xfer vecreg #1)
+  0000000000000000  v17.d[1] (xor, xfer vecreg #1)
+  0000000000000000  v18.d[0] (xor, xfer vecreg #2)
+  0000000000000000  v18.d[1] (xor, xfer vecreg #2)
+  0000000000000000  v19.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v19.d[1] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[0] (xor, xfer vecreg #3)
+  0000000000000000  v20.d[1] (xor, xfer vecreg #3)
+                 0  x5       (sub, base reg)
+                 0  x6       (sub, index reg)
+
diff --git a/none/tests/async-sigs.c b/none/tests/async-sigs.c
index 25b730b..f05eb6e 100644
--- a/none/tests/async-sigs.c
+++ b/none/tests/async-sigs.c
@@ -22,6 +22,15 @@
 {
 }
 
+static void install_handler(int sig, void (*sig_handler)(int))
+{
+   struct sigaction sa;
+   sa.sa_handler = sig_handler;
+   sigemptyset(&sa.sa_mask);
+   sa.sa_flags = 0;
+   sigaction(sig, &sa, 0);
+}
+
 /* Kill our child, but use a separate kill command.  This is so that
    it's running independently of Valgrind, and so is async with
    respect to thread scheduling. */
@@ -43,7 +52,7 @@
       char pidbuf[20];
       sprintf(sigbuf, "-%d", sig);
       sprintf(pidbuf, "%d", pid);
-      execl("/bin/kill", "kill", sigbuf, pidbuf, NULL);
+      execl("/bin/kill", "kill", sigbuf, pidbuf, (char *) NULL);
       perror("exec failed");
       exit(1);
    }
@@ -87,7 +96,7 @@
    // - otherwise, wait in client code (by spinning).
    // The alarm() calls is so that if something breaks, we don't get stuck.
    if (pid == 0) {
-      signal(caughtsig, handler);
+      install_handler(caughtsig, handler);
       alarm(10);
 
       for (;;)
@@ -126,6 +135,9 @@
 
 int main()
 {
+   /* Restore default behaviour of SIGHUP when forked from cron. */
+   install_handler(SIGHUP, SIG_DFL);
+
    test(/*non-blocked*/0, /* sync*/SIGSEGV, /* sync*/SIGBUS);
    test(/*non-blocked*/0, /* sync*/SIGSEGV, /*async*/SIGHUP);
    test(/*non-blocked*/0, /*async*/SIGUSR1, /* sync*/SIGBUS);
diff --git a/none/tests/async-sigs.vgtest b/none/tests/async-sigs.vgtest
index ec51f03..3d4d862 100644
--- a/none/tests/async-sigs.vgtest
+++ b/none/tests/async-sigs.vgtest
@@ -1,2 +1,3 @@
 prog: async-sigs
 vgopts: -q
+cleanup: rm -f vgcore.*
diff --git a/none/tests/cmdline1.stdout.exp b/none/tests/cmdline1.stdout.exp
index 564a2e0..cc25a16 100644
--- a/none/tests/cmdline1.stdout.exp
+++ b/none/tests/cmdline1.stdout.exp
@@ -47,11 +47,8 @@
                               load default suppressions [yes]
     --suppressions=<filename> suppress errors described in <filename>
     --gen-suppressions=no|yes|all    print suppressions for errors? [no]
-    --db-attach=no|yes        start debugger when errors detected? [no]
-                              Note: deprecated feature
-    --db-command=<command>    command to start debugger [... -nw %f %p]
     --input-fd=<number>       file descriptor for input [0=stdin]
-    --dsymutil=no|yes         run dsymutil on Mac OS X when helpful? [no]
+    --dsymutil=no|yes         run dsymutil on Mac OS X when helpful? [yes]
     --max-stackframe=<number> assume stack switch for SP changes larger
                               than <number> bytes [2000000]
     --main-stacksize=<number> set size of main thread's stack (in bytes)
@@ -77,13 +74,13 @@
     --allow-mismatched-debuginfo=no|yes  [no]
                               for the above two flags only, accept debuginfo
                               objects that don't "match" the main object
-    --smc-check=none|stack|all|all-non-file [stack]
+    --smc-check=none|stack|all|all-non-file [all-non-file]
                               checks for self-modifying code: none, only for
                               code found in stacks, for all code, or for all
                               code except that from file-backed mappings
     --read-inline-info=yes|no read debug info about inlined function calls
                               and use it to do better stack traces.  [yes]
-                              on Linux/Android for Memcheck/Helgrind/DRD
+                              on Linux/Android/Solaris for Memcheck/Helgrind/DRD
                               only.  [no] for all other tools and platforms.
     --read-var-info=yes|no    read debug info on stack and global variables
                               and use it to print better error messages in
@@ -95,7 +92,7 @@
     --run-libc-freeres=no|yes free up glibc memory at exit on Linux? [yes]
     --sim-hints=hint1,hint2,...  activate unusual sim behaviours [none] 
          where hint is one of:
-           lax-ioctls fuse-compatible enable-outer
+           lax-ioctls lax-doors fuse-compatible enable-outer
            no-inner-prefix no-nptl-pthread-stackcache none
     --fair-sched=no|yes|try   schedule threads fairly on multicore systems [no]
     --kernel-variant=variant1,variant2,...
@@ -137,9 +134,9 @@
 
   Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc
 
-  Nulgrind is Copyright (C) 2002-2013, and GNU GPL'd, by Nicholas Nethercote.
-  Valgrind is Copyright (C) 2000-2013, and GNU GPL'd, by Julian Seward et al.
-  LibVEX is Copyright (C) 2004-2013, and GNU GPL'd, by OpenWorks LLP et al.
+  Nulgrind is Copyright (C) 2002-2015, and GNU GPL'd, by Nicholas Nethercote.
+  Valgrind is Copyright (C) 2000-2015, and GNU GPL'd, by Julian Seward et al.
+  LibVEX is Copyright (C) 2004-2015, and GNU GPL'd, by OpenWorks LLP et al.
 
   Bug reports, feedback, admiration, abuse, etc, to: www.valgrind.org.
 
diff --git a/none/tests/cmdline2.stdout.exp b/none/tests/cmdline2.stdout.exp
index 4efc423..580fa19 100644
--- a/none/tests/cmdline2.stdout.exp
+++ b/none/tests/cmdline2.stdout.exp
@@ -47,11 +47,8 @@
                               load default suppressions [yes]
     --suppressions=<filename> suppress errors described in <filename>
     --gen-suppressions=no|yes|all    print suppressions for errors? [no]
-    --db-attach=no|yes        start debugger when errors detected? [no]
-                              Note: deprecated feature
-    --db-command=<command>    command to start debugger [... -nw %f %p]
     --input-fd=<number>       file descriptor for input [0=stdin]
-    --dsymutil=no|yes         run dsymutil on Mac OS X when helpful? [no]
+    --dsymutil=no|yes         run dsymutil on Mac OS X when helpful? [yes]
     --max-stackframe=<number> assume stack switch for SP changes larger
                               than <number> bytes [2000000]
     --main-stacksize=<number> set size of main thread's stack (in bytes)
@@ -77,13 +74,13 @@
     --allow-mismatched-debuginfo=no|yes  [no]
                               for the above two flags only, accept debuginfo
                               objects that don't "match" the main object
-    --smc-check=none|stack|all|all-non-file [stack]
+    --smc-check=none|stack|all|all-non-file [all-non-file]
                               checks for self-modifying code: none, only for
                               code found in stacks, for all code, or for all
                               code except that from file-backed mappings
     --read-inline-info=yes|no read debug info about inlined function calls
                               and use it to do better stack traces.  [yes]
-                              on Linux/Android for Memcheck/Helgrind/DRD
+                              on Linux/Android/Solaris for Memcheck/Helgrind/DRD
                               only.  [no] for all other tools and platforms.
     --read-var-info=yes|no    read debug info on stack and global variables
                               and use it to print better error messages in
@@ -95,7 +92,7 @@
     --run-libc-freeres=no|yes free up glibc memory at exit on Linux? [yes]
     --sim-hints=hint1,hint2,...  activate unusual sim behaviours [none] 
          where hint is one of:
-           lax-ioctls fuse-compatible enable-outer
+           lax-ioctls lax-doors fuse-compatible enable-outer
            no-inner-prefix no-nptl-pthread-stackcache none
     --fair-sched=no|yes|try   schedule threads fairly on multicore systems [no]
     --kernel-variant=variant1,variant2,...
@@ -206,9 +203,9 @@
 
   Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc
 
-  Nulgrind is Copyright (C) 2002-2013, and GNU GPL'd, by Nicholas Nethercote.
-  Valgrind is Copyright (C) 2000-2013, and GNU GPL'd, by Julian Seward et al.
-  LibVEX is Copyright (C) 2004-2013, and GNU GPL'd, by OpenWorks LLP et al.
+  Nulgrind is Copyright (C) 2002-2015, and GNU GPL'd, by Nicholas Nethercote.
+  Valgrind is Copyright (C) 2000-2015, and GNU GPL'd, by Julian Seward et al.
+  LibVEX is Copyright (C) 2004-2015, and GNU GPL'd, by OpenWorks LLP et al.
 
   Bug reports, feedback, admiration, abuse, etc, to: www.valgrind.org.
 
diff --git a/none/tests/coolo_sigaction.vgtest b/none/tests/coolo_sigaction.vgtest
index 4ee1d82..c24fb77 100644
--- a/none/tests/coolo_sigaction.vgtest
+++ b/none/tests/coolo_sigaction.vgtest
@@ -1 +1,3 @@
+# Disabled on Solaris because parent process never gets SIGCHLD.
+prereq: (! ../../tests/os_test solaris)
 prog: coolo_sigaction
diff --git a/none/tests/darwin/Makefile.am b/none/tests/darwin/Makefile.am
index 5cce00c..1473e80 100644
--- a/none/tests/darwin/Makefile.am
+++ b/none/tests/darwin/Makefile.am
@@ -6,12 +6,14 @@
 EXTRA_DIST = \
 	access_extended.stderr.exp access_extended.vgtest \
 	apple-main-arg.stderr.exp apple-main-arg.vgtest \
+	bug228343.stderr.exp bug228343.stdout.exp bug228343.vgtest \
 	bug254164.stderr.exp bug254164.vgtest \
 	rlimit.stderr.exp rlimit.vgtest
 
 check_PROGRAMS = \
 	access_extended \
 	apple-main-arg \
+	bug228343 \
 	bug254164 \
 	rlimit
 
diff --git a/none/tests/darwin/bug228343.c b/none/tests/darwin/bug228343.c
new file mode 100644
index 0000000..d7a0ab2
--- /dev/null
+++ b/none/tests/darwin/bug228343.c
@@ -0,0 +1,59 @@
+// https://bugs.kde.org/show_bug.cgi?id=228343
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include <signal.h>
+#include <libkern/OSAtomic.h>
+#include <pthread.h>
+
+OSSpinLock sl = OS_SPINLOCK_INIT;
+typedef void *(*worker_t)(void*);
+typedef void (*Sigaction)(int, siginfo_t *, void *);
+
+int GLOB=0;
+
+static void EnableSigprof(Sigaction SignalHandler) {
+ struct sigaction sa;
+ sa.sa_sigaction = SignalHandler;
+ sa.sa_flags = SA_RESTART | SA_SIGINFO;
+ sigemptyset(&sa.sa_mask);
+ if (sigaction(SIGPROF, &sa, NULL) != 0) {
+   perror("sigaction");
+   abort();
+ }
+ struct itimerval timer;
+ timer.it_interval.tv_sec = 0;
+ timer.it_interval.tv_usec = 1000000 / 10000;
+ timer.it_value = timer.it_interval;
+ if (setitimer(ITIMER_PROF, &timer, 0) != 0) {
+   perror("setitimer");
+   abort();
+ }
+}
+
+void *Worker() {
+ long int i;
+ for (i = 0; i < 100000000; i++) {
+   void *x = malloc((i % 64) + 1);
+   free (x);
+ }
+}
+
+void SignalHandlerWithSpinlock(int sig, siginfo_t *siginfo, void *context) {
+ OSSpinLockLock(&sl);
+ GLOB++;
+ OSSpinLockUnlock(&sl);
+}
+
+int main() {
+ EnableSigprof(SignalHandlerWithSpinlock);
+ pthread_t w_1;
+ pthread_t w_2;
+ pthread_create(&w_1, NULL, Worker, NULL);
+ pthread_create(&w_2, NULL, Worker, NULL);
+ pthread_join(w_1, NULL);
+ pthread_join(w_2, NULL);
+ printf("\tGLOB=%d\n", GLOB);
+ return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp3.stderr.exp b/none/tests/darwin/bug228343.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp3.stderr.exp
copy to none/tests/darwin/bug228343.stderr.exp
diff --git a/none/tests/darwin/bug228343.stdout.exp b/none/tests/darwin/bug228343.stdout.exp
new file mode 100644
index 0000000..f2b5cc1
--- /dev/null
+++ b/none/tests/darwin/bug228343.stdout.exp
@@ -0,0 +1 @@
+	GLOB=0
diff --git a/none/tests/darwin/bug228343.vgtest b/none/tests/darwin/bug228343.vgtest
new file mode 100644
index 0000000..1d4c0d3
--- /dev/null
+++ b/none/tests/darwin/bug228343.vgtest
@@ -0,0 +1,2 @@
+prog: bug228343
+vgopts: -q --tool=none
diff --git a/none/tests/exec-sigmask.c b/none/tests/exec-sigmask.c
index 11a24c5..2ab8fed 100644
--- a/none/tests/exec-sigmask.c
+++ b/none/tests/exec-sigmask.c
@@ -19,7 +19,7 @@
 	}
 	if (pid == 0) {
 		sigprocmask(SIG_SETMASK, mask, NULL);
-		execl(path, path, arg, NULL);
+		execl(path, path, arg, (char *) NULL);
 			
 		fprintf(stderr, "FAILED: execl failed with %s\n",
 			strerror(errno));
diff --git a/none/tests/exec-sigmask.stdout.exp-solaris b/none/tests/exec-sigmask.stdout.exp-solaris
new file mode 100644
index 0000000..1979811
--- /dev/null
+++ b/none/tests/exec-sigmask.stdout.exp-solaris
@@ -0,0 +1 @@
+full: signal 36 missing from mask
diff --git a/none/tests/execve.c b/none/tests/execve.c
index e6a3044..db2be29 100644
--- a/none/tests/execve.c
+++ b/none/tests/execve.c
@@ -8,11 +8,16 @@
    {
       // This tests the case where argv and envp are NULL, which is easy to
       // get wrong because it's an unusual case.
-#  if !defined(VGO_darwin)
-      if (execve("/bin/true", NULL, NULL) < 0)
-#  else
+
+#if defined(VGO_solaris)
+      // Solaris requires non-NULL argv parameter
+      char *const argv_exe[] = {"true", NULL};
+      if (execve("/bin/true", argv_exe, NULL) < 0)
+#elif defined(VGO_darwin)
       if (execve("/usr/bin/true", NULL, NULL) < 0)          
-#  endif
+#else
+      if (execve("/bin/true", NULL, NULL) < 0)
+#endif
       {
          perror("execve");
          exit(1);
diff --git a/none/tests/faultstatus.c b/none/tests/faultstatus.c
index cbee7e4..81e6908 100644
--- a/none/tests/faultstatus.c
+++ b/none/tests/faultstatus.c
@@ -29,6 +29,17 @@
 #  define DIVISION_BY_ZERO_SI_CODE      FPE_INTDIV
 #endif
 
+/* Accessing non-mapped virtual address results in SIGBUS
+ * with si_code equal to BUS_ADRERR on Linux, whereas in SIGBUS
+ * with si_code equal to BUS_OBJERR on Solaris. On Solaris,
+ * BUS_ADRERR is used for bus time out while BUS_OBJERR is translated
+ * from underlying codes FC_OBJERR (x86) or ASYNC_BERR (sparc).
+ */
+#if defined(VGO_solaris)
+#  define BUS_ERROR_SI_CODE  BUS_OBJERR
+#else
+#  define BUS_ERROR_SI_CODE  BUS_ADRERR
+#endif
 
 struct test {
 	void (*test)(void);
@@ -155,7 +166,7 @@
 #define T(n, sig, code, addr) { test##n, sig, code, addr }
 			T(1, SIGSEGV,	SEGV_MAPERR,	BADADDR),
 			T(2, SIGSEGV,	SEGV_ACCERR,	mapping),
-			T(3, SIGBUS,	BUS_ADRERR,	&mapping[FILESIZE+10]),
+			T(3, SIGBUS,	BUS_ERROR_SI_CODE, &mapping[FILESIZE+10]),
 			T(4, SIGFPE,    DIVISION_BY_ZERO_SI_CODE, 0),
 #undef T
 		};
diff --git a/none/tests/fdleak_creat.c b/none/tests/fdleak_creat.c
index 994692a..3c7c401 100644
--- a/none/tests/fdleak_creat.c
+++ b/none/tests/fdleak_creat.c
@@ -9,7 +9,7 @@
 
    CLOSE_INHERITED_FDS;
 
-   sprintf(filename, "/tmp/file.%d", getpid());
+   sprintf(filename, "/tmp/file.%ld", (long) getpid());
    (void) DO( creat(filename, 0) );
    (void) DO( unlink(filename) );
    return 0;
diff --git a/none/tests/filter_fdleak b/none/tests/filter_fdleak
index bb1ef42..9315207 100755
--- a/none/tests/filter_fdleak
+++ b/none/tests/filter_fdleak
@@ -6,6 +6,8 @@
 
 perl -p -e 's/^Open AF_UNIX socket [0-9]*: <unknown>/Open AF_UNIX socket ...: <unknown>/' |
 perl -p -e 's/^Open (AF_UNIX socket|file descriptor) [0-9]*: \/dev\/null/Open $1 ...: \/dev\/null/' |
+# Solaris-specific, translate /devices/pseudo/mm@0:null to /dev/null
+perl -p -e 's/^Open (AF_UNIX socket|file descriptor) [0-9]*: \/devices\/pseudo\/mm\@0:null/Open $1 ...: \/dev\/null/' |
 # Nb: on Darwin, /tmp is a symlink to /private/tmp, so sometimes it's
 # necessary to filter out the "/private" part.
 perl -p -e 's/^Open (AF_UNIX socket|file descriptor) [0-9]*: (\/private)?\/tmp\/(sock|data1|data2|file)\.[0-9]*/Open $1 ...: \/tmp\/$3/' |
diff --git a/none/tests/ioctl_moans.c b/none/tests/ioctl_moans.c
index ed05e7b..378ff44 100644
--- a/none/tests/ioctl_moans.c
+++ b/none/tests/ioctl_moans.c
@@ -8,7 +8,7 @@
    The choice of values here needs to match the logic in
    ML_(PRE_unknown_ioctl) and take into account that _IOC_NONE
    is not == 0 everywhere. */
-# if !defined(VGO_darwin)
+# if defined(VGO_linux)
 #define IOCTL_REQUEST_BASE (0x12345670 | _IOC(_IOC_NONE,0,0,0))
 # else
 #define IOCTL_REQUEST_BASE  0x12345670
diff --git a/none/tests/libvex_test.c b/none/tests/libvex_test.c
index e297921..57184c0 100644
--- a/none/tests/libvex_test.c
+++ b/none/tests/libvex_test.c
@@ -1,8 +1,8 @@
 #include <stdio.h>
 #include <stdlib.h>
-# if !defined(VGO_darwin)
+# if defined(VGO_linux)
 #include <endian.h>
-# else
+# elif defined(VGO_darwin)
 #include <machine/endian.h>
 # endif
 #include "../../VEX/pub/libvex.h"
@@ -221,6 +221,10 @@
    // Use some values that makes AMD64 happy.
    vta.abiinfo_both.guest_stack_redzone_size = 128;
 
+   // Use some values that makes ARM64 happy.
+   vta.archinfo_guest.arm64_dMinLine_lg2_szB = 6;
+   vta.archinfo_guest.arm64_iMinLine_lg2_szB = 6;
+
    // Prepare first for a translation where guest == host
    // We will translate the get_guest_arch function
    vta.arch_guest                 = guest_arch;
diff --git a/none/tests/linux/Makefile.am b/none/tests/linux/Makefile.am
index 44b5ace..f407cb4 100644
--- a/none/tests/linux/Makefile.am
+++ b/none/tests/linux/Makefile.am
@@ -36,3 +36,6 @@
 
 # Special needs
 pthread_stack_LDADD = -lpthread
+
+stack_overflow_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ \
+			@FLAG_W_NO_INFINITE_RECURSION@
diff --git a/none/tests/linux/blockfault.vgtest b/none/tests/linux/blockfault.vgtest
index 88e3255..8d10f1a 100644
--- a/none/tests/linux/blockfault.vgtest
+++ b/none/tests/linux/blockfault.vgtest
@@ -1 +1,2 @@
 prog: blockfault
+cleanup: rm -f vgcore.*
diff --git a/none/tests/linux/stack-overflow.vgtest b/none/tests/linux/stack-overflow.vgtest
index 3b9ffd4..e7b4f29 100644
--- a/none/tests/linux/stack-overflow.vgtest
+++ b/none/tests/linux/stack-overflow.vgtest
@@ -1 +1,2 @@
 prog: stack-overflow
+cleanup: rm -f vgcore.*
diff --git a/none/tests/map_unmap.c b/none/tests/map_unmap.c
index bfc2503..212d7e3 100644
--- a/none/tests/map_unmap.c
+++ b/none/tests/map_unmap.c
@@ -77,7 +77,7 @@
 static void prmaps()
 {
 	char buf[100];
-	sprintf(buf, "/bin/cat /proc/%d/maps", getpid());
+	sprintf(buf, "/bin/cat /proc/%ld/maps", (long) getpid());
 	system(buf);
 	exit(1);
 }
diff --git a/none/tests/mips64/load_indexed_instructions.c b/none/tests/mips64/load_indexed_instructions.c
index a36d222..c521798 100644
--- a/none/tests/mips64/load_indexed_instructions.c
+++ b/none/tests/mips64/load_indexed_instructions.c
@@ -67,16 +67,16 @@
 };
 
 /*
-Test 1 macro is used for ldx instructions. After executing each instructions
-the macro performs following operations:
+TEST1 macro is used for load-indexed instructions. For each instruction,
+the macro will perform the following operations:
 
-1: Move arguments to registers.
-2: Execute instruction.
-3: Move result from register. */
+1: Move input arguments into registers.
+2: Execute the instruction.
+3: Move the result from a register to the out variable. */
 
 #define TEST1(instruction, offset, mem)        \
 {                                              \
-    unsigned long out = 0;                     \
+   unsigned long out = 0;                      \
    __asm__ volatile(                           \
      "move        $t0, %1"       "\n\t"        \
      "move        $t1, %2"       "\n\t"        \
@@ -84,7 +84,7 @@
      "move        %0,  $t2"      "\n\t"        \
      : "=&r" (out)                             \
      : "r" (mem) , "r" (offset)                \
-     : "t0", "t1", "t2", "cc", "memory"        \
+     : "t0", "t1", "t2", "memory"              \
    );                                          \
    printf("%s :: offset: 0x%x, out: 0x%lx\n",  \
           instruction, offset, out);           \
@@ -100,6 +100,8 @@
       TEST1("lbux",  i, reg_val);
    for(i = 8; i <= 255; i += 8)
       TEST1("lwx",  i, reg_val);
+   for(i = 8; i <= 255; i += 8)
+      TEST1("lhx",  i, reg_val);
 #endif
    return 0;
 }
diff --git a/none/tests/mips64/load_indexed_instructions.stdout.exp-BE b/none/tests/mips64/load_indexed_instructions.stdout.exp-BE
index 5f8f272..7e8c534 100644
--- a/none/tests/mips64/load_indexed_instructions.stdout.exp-BE
+++ b/none/tests/mips64/load_indexed_instructions.stdout.exp-BE
@@ -91,3 +91,34 @@
 lwx :: offset: 0xe8, out: 0xfffffffffbb8bb46
 lwx :: offset: 0xf0, out: 0xffffffffe13ef6f4
 lwx :: offset: 0xf8, out: 0xffffffffe8bccd9a
+lhx :: offset: 0x8, out: 0x982
+lhx :: offset: 0x10, out: 0x1304
+lhx :: offset: 0x18, out: 0x1a86
+lhx :: offset: 0x20, out: 0x2608
+lhx :: offset: 0x28, out: 0x2f8a
+lhx :: offset: 0x30, out: 0x350c
+lhx :: offset: 0x38, out: 0x3c8e
+lhx :: offset: 0x40, out: 0x4c11
+lhx :: offset: 0x48, out: 0x4593
+lhx :: offset: 0x50, out: 0x5f15
+lhx :: offset: 0x58, out: 0x5697
+lhx :: offset: 0x60, out: 0x6a19
+lhx :: offset: 0x68, out: 0x639b
+lhx :: offset: 0x70, out: 0x791d
+lhx :: offset: 0x78, out: 0x709f
+lhx :: offset: 0x80, out: 0xffffffffffff9823
+lhx :: offset: 0x88, out: 0xffffffffffff91a1
+lhx :: offset: 0x90, out: 0xffffffffffff8b27
+lhx :: offset: 0x98, out: 0xffffffffffff82a5
+lhx :: offset: 0xa0, out: 0xffffffffffffbe2b
+lhx :: offset: 0xa8, out: 0xffffffffffffb7a9
+lhx :: offset: 0xb0, out: 0xffffffffffffad2f
+lhx :: offset: 0xb8, out: 0xffffffffffffa4ad
+lhx :: offset: 0xc0, out: 0xffffffffffffd432
+lhx :: offset: 0xc8, out: 0xffffffffffffddb0
+lhx :: offset: 0xd0, out: 0xffffffffffffc736
+lhx :: offset: 0xd8, out: 0xffffffffffffceb4
+lhx :: offset: 0xe0, out: 0xfffffffffffff23a
+lhx :: offset: 0xe8, out: 0xfffffffffffffbb8
+lhx :: offset: 0xf0, out: 0xffffffffffffe13e
+lhx :: offset: 0xf8, out: 0xffffffffffffe8bc
diff --git a/none/tests/mips64/load_indexed_instructions.stdout.exp-LE b/none/tests/mips64/load_indexed_instructions.stdout.exp-LE
index 072a6f5..af44580 100644
--- a/none/tests/mips64/load_indexed_instructions.stdout.exp-LE
+++ b/none/tests/mips64/load_indexed_instructions.stdout.exp-LE
@@ -91,3 +91,34 @@
 lwx :: offset: 0xe8, out: 0xfffffffffbb8bb46
 lwx :: offset: 0xf0, out: 0xffffffffe13ef6f4
 lwx :: offset: 0xf8, out: 0xffffffffe8bccd9a
+lhx :: offset: 0x8, out: 0x3b6e
+lhx :: offset: 0x10, out: 0x76dc
+lhx :: offset: 0x18, out: 0x4db2
+lhx :: offset: 0x20, out: 0xffffffffffffedb8
+lhx :: offset: 0x28, out: 0xffffffffffffd6d6
+lhx :: offset: 0x30, out: 0xffffffffffff9b64
+lhx :: offset: 0x38, out: 0xffffffffffffa00a
+lhx :: offset: 0x40, out: 0xffffffffffffdb70
+lhx :: offset: 0x48, out: 0xffffffffffffe01e
+lhx :: offset: 0x50, out: 0xffffffffffffadac
+lhx :: offset: 0x58, out: 0xffffffffffff96c2
+lhx :: offset: 0x60, out: 0x36c8
+lhx :: offset: 0x68, out: 0xda6
+lhx :: offset: 0x70, out: 0x4014
+lhx :: offset: 0x78, out: 0x7b7a
+lhx :: offset: 0x80, out: 0xffffffffffffb6e0
+lhx :: offset: 0x88, out: 0xffffffffffff8d8e
+lhx :: offset: 0x90, out: 0xffffffffffffc03c
+lhx :: offset: 0x98, out: 0xfffffffffffffb52
+lhx :: offset: 0xa0, out: 0x5b58
+lhx :: offset: 0xa8, out: 0x6036
+lhx :: offset: 0xb0, out: 0x2d84
+lhx :: offset: 0xb8, out: 0x16ea
+lhx :: offset: 0xc0, out: 0x6d90
+lhx :: offset: 0xc8, out: 0x56fe
+lhx :: offset: 0xd0, out: 0x1b4c
+lhx :: offset: 0xd8, out: 0x2022
+lhx :: offset: 0xe0, out: 0xffffffffffff8028
+lhx :: offset: 0xe8, out: 0xffffffffffffbb46
+lhx :: offset: 0xf0, out: 0xfffffffffffff6f4
+lhx :: offset: 0xf8, out: 0xffffffffffffcd9a
diff --git a/none/tests/mmap_fcntl_bug.c b/none/tests/mmap_fcntl_bug.c
index f49639a..8bfae64 100644
--- a/none/tests/mmap_fcntl_bug.c
+++ b/none/tests/mmap_fcntl_bug.c
@@ -40,7 +40,7 @@
 	fl.l_start = 0;
 	fl.l_len = 1;
 
-	/* I'm assuming noone else tries to lock this! */
+	/* I'm assuming no one else tries to lock this! */
 	if (fcntl(fd, F_SETLK, &fl) != 0)
 		err(1, "Locking %s", file);
 
diff --git a/none/tests/mq.c b/none/tests/mq.c
index b2ab7bc..8105a8d 100644
--- a/none/tests/mq.c
+++ b/none/tests/mq.c
@@ -64,11 +64,8 @@
       exit(1);
     }
 
-  if (len != 4 || memcmp(buffer, "PING", 4) != 0)
-    {
-      fprintf(stderr, "Message corrupt!");
-    }
-
+#if !defined(VGO_solaris)
+  /* On Solaris, there is no existing notification registration. */
   if (mq_notify(mqdr, NULL) < 0)
     {
       perror("mq_notify");
@@ -76,6 +73,12 @@
       mq_close(mqdw);
       exit(1);
     }
+#endif /* !VGO_solaris */
+
+  if (len != 4 || memcmp(buffer, "PING", 4) != 0)
+    {
+      fprintf(stderr, "Message corrupt!");
+    }
 
   if (mq_getattr(mqdr, &mqa) < 0)
     {
diff --git a/none/tests/ppc32/Makefile.am b/none/tests/ppc32/Makefile.am
index e66992c..196239e 100644
--- a/none/tests/ppc32/Makefile.am
+++ b/none/tests/ppc32/Makefile.am
@@ -9,12 +9,12 @@
 	bug139050-ppc32.stdout.exp bug139050-ppc32.stderr.exp \
 	bug139050-ppc32.vgtest \
 	ldstrev.stderr.exp ldstrev.stdout.exp ldstrev.vgtest \
-	lsw.stderr.exp lsw.stdout.exp lsw.vgtest \
 	jm-int.stderr.exp jm-int.stdout.exp jm-int.vgtest \
 	jm-fp.stderr.exp jm-fp.stdout.exp jm-fp.vgtest jm-fp.stdout.exp-BE2 \
 	jm-vmx.stderr.exp jm-vmx.stdout.exp jm-vmx.stdout.exp_Minus_nan \
 	jm-vmx.vgtest \
 	jm-misc.stderr.exp jm-misc.stdout.exp jm-misc.vgtest \
+	lsw.stderr.exp lsw.stdout.exp lsw.vgtest \
 	mftocrf.stderr.exp mftocrf.stdout.exp mftocrf.vgtest \
 	mcrfs.stderr.exp mcrfs.stdout.exp mcrfs.vgtest \
 	round.stderr.exp round.stdout.exp round.vgtest \
@@ -40,31 +40,25 @@
 	test_dfp5.stderr.exp test_dfp5.stdout.exp test_dfp5.vgtest \
 	jm_vec_isa_2_07.stderr.exp jm_vec_isa_2_07.stdout.exp jm_vec_isa_2_07.vgtest \
 	jm_fp_isa_2_07.stderr.exp jm_fp_isa_2_07.stdout.exp jm_fp_isa_2_07.vgtest \
-	jm_int_isa_2_07.stdout.exp \
 	jm_int_isa_2_07.stderr.exp jm_int_isa_2_07.vgtest \
+	jm_int_isa_2_07.stdout.exp \
 	test_isa_2_07_part2.stderr.exp test_isa_2_07_part2.stdout.exp test_isa_2_07_part2.vgtest \
 	test_tm.stderr.exp test_tm.stdout.exp test_tm.vgtest \
 	test_touch_tm.stderr.exp test_touch_tm.stdout.exp test_touch_tm.vgtest \
 	ldst_multiple.stderr.exp ldst_multiple.stdout.exp ldst_multiple.vgtest \
 	data-cache-instructions.stderr.exp data-cache-instructions.stdout.exp data-cache-instructions.vgtest
 
-
 check_PROGRAMS = \
 	allexec \
-	bug129390-ppc32 \
-	bug139050-ppc32 \
-	ldstrev lsw jm-insns mftocrf mcrfs round test_fx test_gx \
-	testVMX twi tw xlc_dbl_u32 power5+_round power6_bcmp \
-	test_isa_2_06_part1 \
-	test_isa_2_06_part2 \
-	test_isa_2_06_part3 \
+	lsw jm-insns round \
+	test_isa_2_06_part1 test_isa_2_06_part2 test_isa_2_06_part3 \
 	test_dfp1 test_dfp2 test_dfp3 test_dfp4 test_dfp5 \
-	test_isa_2_07_part1 \
-	test_isa_2_07_part2 \
-	test_tm \
-	test_touch_tm \
-	ldst_multiple \
-	data-cache-instructions
+	test_isa_2_07_part1 test_isa_2_07_part2 \
+	test_tm test_touch_tm ldst_multiple data-cache-instructions \
+	test_fx test_gx \
+	testVMX twi tw xlc_dbl_u32 power5+_round power6_bcmp \
+	bug129390-ppc32 bug139050-ppc32 \
+	ldstrev mftocrf mcrfs
 
 AM_CFLAGS    += @FLAG_M32@
 AM_CXXFLAGS  += @FLAG_M32@
@@ -99,13 +93,17 @@
 endif
 
 if HAS_ISA_2_07
-BUILD_FLAGS_ISA_2_07 = -mhtm  -mcpu=power8
+BUILD_FLAGS_ISA_2_07 = -mcpu=power8
 ISA_2_07_FLAG = -DHAS_ISA_2_07
 else
 BUILD_FLAGS_ISA_2_07 =
 ISA_2_07_FLAG =
 endif
 
+if SUPPORTS_HTM
+HTM_FLAG = -mhtm -DSUPPORTS_HTM
+endif
+
 jm_insns_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames \
 			@FLAG_M32@ $(ALTIVEC_FLAG) $(BUILD_FLAG_ALTIVEC)
 
@@ -128,22 +126,19 @@
 			@FLAG_M32@ $(BUILD_FLAGS_DFP)
 test_dfp3_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(DFP_FLAG) \
 			@FLAG_M32@ $(BUILD_FLAGS_DFP)
-
 test_dfp4_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(DFP_FLAG) \
 			@FLAG_M32@ $(BUILD_FLAGS_DFP)
-
 test_dfp5_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(DFP_FLAG) \
 			@FLAG_M32@ $(BUILD_FLAGS_DFP)
 
 test_isa_2_07_part1_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(ISA_2_07_FLAG) \
-                        @FLAG_M32@ $(BUILD_FLAGS_ISA_2_07)
-
+			@FLAG_M32@ $(BUILD_FLAGS_ISA_2_07)
 test_isa_2_07_part2_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(ISA_2_07_FLAG) \
 			@FLAG_M32@ $(BUILD_FLAGS_ISA_2_07)
 
-test_tm_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(ISA_2_07_FLAG) \
+test_tm_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(HTM_FLAG) $(ISA_2_07_FLAG) \
 			@FLAG_M32@ $(BUILD_FLAGS_ISA_2_07)
-test_touch_tm_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(ISA_2_07_FLAG) \
+test_touch_tm_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(HTM_FLAG) $(ISA_2_07_FLAG) \
 			@FLAG_M32@ $(BUILD_FLAGS_ISA_2_07)
 
 test_isa_2_06_part3_LDADD = -lm
diff --git a/none/tests/ppc32/bug129390-ppc32.vgtest b/none/tests/ppc32/bug129390-ppc32.vgtest
index d7d05b3..13165fc 100644
--- a/none/tests/ppc32/bug129390-ppc32.vgtest
+++ b/none/tests/ppc32/bug129390-ppc32.vgtest
@@ -1,3 +1,3 @@
-prereq: ../../../tests/check_vmx_cap
+prereq: ../../../tests/check_ppc64_auxv_cap altivec
 prog: bug129390-ppc32
 vgopts: -q
diff --git a/none/tests/ppc32/jm-vmx.vgtest b/none/tests/ppc32/jm-vmx.vgtest
index 183536b..d29d397 100644
--- a/none/tests/ppc32/jm-vmx.vgtest
+++ b/none/tests/ppc32/jm-vmx.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_vmx_cap
+prereq: ../../../tests/check_ppc64_auxv_cap altivec
 prog: jm-insns -a
diff --git a/none/tests/ppc32/jm_fp_isa_2_07.vgtest b/none/tests/ppc32/jm_fp_isa_2_07.vgtest
index a61616c..dd846e0 100644
--- a/none/tests/ppc32/jm_fp_isa_2_07.vgtest
+++ b/none/tests/ppc32/jm_fp_isa_2_07.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: test_isa_2_07_part1 -f
diff --git a/none/tests/ppc32/jm_int_isa_2_07.vgtest b/none/tests/ppc32/jm_int_isa_2_07.vgtest
index f1f6c48..0bf9d8b 100644
--- a/none/tests/ppc32/jm_int_isa_2_07.vgtest
+++ b/none/tests/ppc32/jm_int_isa_2_07.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: test_isa_2_07_part1 -i
diff --git a/none/tests/ppc32/jm_vec_isa_2_07.vgtest b/none/tests/ppc32/jm_vec_isa_2_07.vgtest
index f69c126..dc95220 100644
--- a/none/tests/ppc32/jm_vec_isa_2_07.vgtest
+++ b/none/tests/ppc32/jm_vec_isa_2_07.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap && ! ../../../tests/check_ppc64le_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: test_isa_2_07_part1 -a
diff --git a/none/tests/ppc32/testVMX.vgtest b/none/tests/ppc32/testVMX.vgtest
index 81c59f2..b36dbcb 100644
--- a/none/tests/ppc32/testVMX.vgtest
+++ b/none/tests/ppc32/testVMX.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_vmx_cap
+prereq: ../../../tests/check_ppc64_auxv_cap altivec
 prog: testVMX
diff --git a/none/tests/ppc32/test_dfp1.vgtest b/none/tests/ppc32/test_dfp1.vgtest
index 0efe5df..71af5fa 100644
--- a/none/tests/ppc32/test_dfp1.vgtest
+++ b/none/tests/ppc32/test_dfp1.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp1
diff --git a/none/tests/ppc32/test_dfp2.vgtest b/none/tests/ppc32/test_dfp2.vgtest
index 7fe6c16..23a1f00 100644
--- a/none/tests/ppc32/test_dfp2.vgtest
+++ b/none/tests/ppc32/test_dfp2.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp2
diff --git a/none/tests/ppc32/test_dfp3.vgtest b/none/tests/ppc32/test_dfp3.vgtest
index 39168a3..e806e85 100644
--- a/none/tests/ppc32/test_dfp3.vgtest
+++ b/none/tests/ppc32/test_dfp3.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp3
diff --git a/none/tests/ppc32/test_dfp4.vgtest b/none/tests/ppc32/test_dfp4.vgtest
index dac3356..7688eb8 100644
--- a/none/tests/ppc32/test_dfp4.vgtest
+++ b/none/tests/ppc32/test_dfp4.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp4
diff --git a/none/tests/ppc32/test_dfp5.vgtest b/none/tests/ppc32/test_dfp5.vgtest
index 9777d05..0c905d8 100644
--- a/none/tests/ppc32/test_dfp5.vgtest
+++ b/none/tests/ppc32/test_dfp5.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp5
diff --git a/none/tests/ppc32/test_isa_2_06_part1.vgtest b/none/tests/ppc32/test_isa_2_06_part1.vgtest
index 512a218..29e9d06 100644
--- a/none/tests/ppc32/test_isa_2_06_part1.vgtest
+++ b/none/tests/ppc32/test_isa_2_06_part1.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_06_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_06
 prog: test_isa_2_06_part1
diff --git a/none/tests/ppc32/test_isa_2_06_part2.vgtest b/none/tests/ppc32/test_isa_2_06_part2.vgtest
index 7ae01be..7783c5e 100644
--- a/none/tests/ppc32/test_isa_2_06_part2.vgtest
+++ b/none/tests/ppc32/test_isa_2_06_part2.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_06_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_06
 prog: test_isa_2_06_part2
diff --git a/none/tests/ppc32/test_isa_2_06_part3.vgtest b/none/tests/ppc32/test_isa_2_06_part3.vgtest
index 3519c8a..e4ccfee 100644
--- a/none/tests/ppc32/test_isa_2_06_part3.vgtest
+++ b/none/tests/ppc32/test_isa_2_06_part3.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_06_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_06
 prog: test_isa_2_06_part3
diff --git a/none/tests/ppc32/test_isa_2_07_part2.vgtest b/none/tests/ppc32/test_isa_2_07_part2.vgtest
index a4649be..8108796 100644
--- a/none/tests/ppc32/test_isa_2_07_part2.vgtest
+++ b/none/tests/ppc32/test_isa_2_07_part2.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: test_isa_2_07_part2
diff --git a/none/tests/ppc32/test_tm.vgtest b/none/tests/ppc32/test_tm.vgtest
index 977c326..f258077 100644
--- a/none/tests/ppc32/test_tm.vgtest
+++ b/none/tests/ppc32/test_tm.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap htm
 prog: test_tm
diff --git a/none/tests/ppc32/test_touch_tm.vgtest b/none/tests/ppc32/test_touch_tm.vgtest
index 4806ccf..50409b7 100644
--- a/none/tests/ppc32/test_touch_tm.vgtest
+++ b/none/tests/ppc32/test_touch_tm.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap htm
 prog: test_touch_tm
diff --git a/none/tests/ppc64/Makefile.am b/none/tests/ppc64/Makefile.am
index d1faca6..a4f71e2 100644
--- a/none/tests/ppc64/Makefile.am
+++ b/none/tests/ppc64/Makefile.am
@@ -17,7 +17,8 @@
 	opcodes.h \
 	power6_bcmp.stderr.exp power6_bcmp.stdout.exp power6_bcmp.vgtest \
 	power6_mf_gpr.stderr.exp power6_mf_gpr.stdout.exp power6_mf_gpr.vgtest \
-	test_isa_2_06_part1.stderr.exp  test_isa_2_06_part1.stdout.exp  test_isa_2_06_part1.vgtest test_isa_2_06_part1.stdout.exp-LE \
+	test_isa_2_06_part1.stderr.exp  test_isa_2_06_part1.stdout.exp  test_isa_2_06_part1.vgtest \
+	test_isa_2_06_part1.stdout.exp-LE \
 	test_isa_2_06_part2.stderr.exp  test_isa_2_06_part2.stdout.exp  test_isa_2_06_part2.vgtest \
 	test_isa_2_06_part3.stderr.exp  test_isa_2_06_part3.stdout.exp  test_isa_2_06_part3.vgtest \
 	test_dfp1.stderr.exp test_dfp1.stdout.exp test_dfp1.vgtest \
@@ -38,11 +39,14 @@
 
 check_PROGRAMS = \
 	allexec \
-	jm-insns lsw round std_reg_imm twi_tdi tw_td power6_bcmp \
-	power6_mf_gpr test_isa_2_06_part1 test_isa_2_06_part2 \
-	test_isa_2_06_part3 test_dfp1 test_dfp2 test_dfp3 test_dfp4 \
-	test_dfp5 test_isa_2_07_part1 test_isa_2_07_part2 \
-	test_tm test_touch_tm ldst_multiple data-cache-instructions
+	lsw jm-insns round \
+	test_isa_2_06_part1 test_isa_2_06_part2 test_isa_2_06_part3 \
+	test_dfp1 test_dfp2 test_dfp3 test_dfp4 test_dfp5 \
+	test_isa_2_07_part1 test_isa_2_07_part2 \
+	test_tm test_touch_tm ldst_multiple data-cache-instructions \
+	power6_mf_gpr std_reg_imm \
+	twi_tdi tw_td power6_bcmp
+
 
 AM_CFLAGS    += @FLAG_M64@
 AM_CXXFLAGS  += @FLAG_M64@
@@ -75,13 +79,20 @@
 endif
 
 if HAS_ISA_2_07
-BUILD_FLAGS_ISA_2_07 =  -mhtm -mcpu=power8
+BUILD_FLAGS_ISA_2_07 = -mcpu=power8
 ISA_2_07_FLAG = -DHAS_ISA_2_07
 else
 BUILD_FLAGS_ISA_2_07 =
 ISA_2_07_FLAG =
 endif
 
+if SUPPORTS_HTM
+HTM_FLAG = -mhtm -DSUPPORTS_HTM
+endif
+
+jm_insns_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames \
+			@FLAG_M64@ $(ALTIVEC_FLAG) $(BUILD_FLAG_ALTIVEC)
+
 test_isa_2_06_part1_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_FLAG) \
 			@FLAG_M64@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX)
 
@@ -91,32 +102,25 @@
 test_isa_2_06_part3_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_FLAG) \
 			@FLAG_M64@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX)
 
-jm_insns_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames \
-			@FLAG_M64@ $(ALTIVEC_FLAG) $(BUILD_FLAG_ALTIVEC)
-
 test_dfp1_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(DFP_FLAG) \
 			@FLAG_M64@ $(BUILD_FLAGS_DFP)
-
 test_dfp2_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(DFP_FLAG) \
 			@FLAG_M64@ $(BUILD_FLAGS_DFP)
 test_dfp3_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(DFP_FLAG) \
 			@FLAG_M64@ $(BUILD_FLAGS_DFP)
-
 test_dfp4_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(DFP_FLAG) \
 			@FLAG_M64@ $(BUILD_FLAGS_DFP)
-
 test_dfp5_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(DFP_FLAG) \
 			@FLAG_M64@ $(BUILD_FLAGS_DFP)
 
 test_isa_2_07_part1_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(ISA_2_07_FLAG) \
 			@FLAG_M64@ $(BUILD_FLAGS_ISA_2_07)
-
 test_isa_2_07_part2_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(ISA_2_07_FLAG) \
 			@FLAG_M64@ $(BUILD_FLAGS_ISA_2_07)
 
-test_tm_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(ISA_2_07_FLAG) \
+test_tm_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(HTM_FLAG) $(ISA_2_07_FLAG) \
 			@FLAG_M64@ $(BUILD_FLAGS_ISA_2_07)
-test_touch_tm_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(ISA_2_07_FLAG) \
+test_touch_tm_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(HTM_FLAG) $(ISA_2_07_FLAG) \
 			@FLAG_M64@ $(BUILD_FLAGS_ISA_2_07)
 
 test_isa_2_06_part3_LDADD = -lm
diff --git a/none/tests/ppc64/jm-vmx.vgtest b/none/tests/ppc64/jm-vmx.vgtest
index 183536b..d29d397 100644
--- a/none/tests/ppc64/jm-vmx.vgtest
+++ b/none/tests/ppc64/jm-vmx.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_vmx_cap
+prereq: ../../../tests/check_ppc64_auxv_cap altivec
 prog: jm-insns -a
diff --git a/none/tests/ppc64/jm_fp_isa_2_07.vgtest b/none/tests/ppc64/jm_fp_isa_2_07.vgtest
index a61616c..dd846e0 100644
--- a/none/tests/ppc64/jm_fp_isa_2_07.vgtest
+++ b/none/tests/ppc64/jm_fp_isa_2_07.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: test_isa_2_07_part1 -f
diff --git a/none/tests/ppc64/jm_int_isa_2_07.vgtest b/none/tests/ppc64/jm_int_isa_2_07.vgtest
index f1f6c48..0bf9d8b 100644
--- a/none/tests/ppc64/jm_int_isa_2_07.vgtest
+++ b/none/tests/ppc64/jm_int_isa_2_07.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: test_isa_2_07_part1 -i
diff --git a/none/tests/ppc64/jm_vec_isa_2_07.vgtest b/none/tests/ppc64/jm_vec_isa_2_07.vgtest
index a93060a..dc95220 100644
--- a/none/tests/ppc64/jm_vec_isa_2_07.vgtest
+++ b/none/tests/ppc64/jm_vec_isa_2_07.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: test_isa_2_07_part1 -a
diff --git a/none/tests/ppc64/test_dfp1.vgtest b/none/tests/ppc64/test_dfp1.vgtest
index 0efe5df..71af5fa 100644
--- a/none/tests/ppc64/test_dfp1.vgtest
+++ b/none/tests/ppc64/test_dfp1.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp1
diff --git a/none/tests/ppc64/test_dfp2.vgtest b/none/tests/ppc64/test_dfp2.vgtest
index 7fe6c16..23a1f00 100644
--- a/none/tests/ppc64/test_dfp2.vgtest
+++ b/none/tests/ppc64/test_dfp2.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp2
diff --git a/none/tests/ppc64/test_dfp3.vgtest b/none/tests/ppc64/test_dfp3.vgtest
index 39168a3..e806e85 100644
--- a/none/tests/ppc64/test_dfp3.vgtest
+++ b/none/tests/ppc64/test_dfp3.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp3
diff --git a/none/tests/ppc64/test_dfp4.vgtest b/none/tests/ppc64/test_dfp4.vgtest
index dac3356..7688eb8 100644
--- a/none/tests/ppc64/test_dfp4.vgtest
+++ b/none/tests/ppc64/test_dfp4.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp4
diff --git a/none/tests/ppc64/test_dfp5.vgtest b/none/tests/ppc64/test_dfp5.vgtest
index 9777d05..0c905d8 100644
--- a/none/tests/ppc64/test_dfp5.vgtest
+++ b/none/tests/ppc64/test_dfp5.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_dfp_cap
+prereq: ../../../tests/check_ppc64_auxv_cap dfp
 prog: test_dfp5
diff --git a/none/tests/ppc64/test_isa_2_06_part1.vgtest b/none/tests/ppc64/test_isa_2_06_part1.vgtest
index 512a218..29e9d06 100644
--- a/none/tests/ppc64/test_isa_2_06_part1.vgtest
+++ b/none/tests/ppc64/test_isa_2_06_part1.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_06_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_06
 prog: test_isa_2_06_part1
diff --git a/none/tests/ppc64/test_isa_2_06_part2.vgtest b/none/tests/ppc64/test_isa_2_06_part2.vgtest
index 7ae01be..7783c5e 100644
--- a/none/tests/ppc64/test_isa_2_06_part2.vgtest
+++ b/none/tests/ppc64/test_isa_2_06_part2.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_06_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_06
 prog: test_isa_2_06_part2
diff --git a/none/tests/ppc64/test_isa_2_06_part3.vgtest b/none/tests/ppc64/test_isa_2_06_part3.vgtest
index 3519c8a..e4ccfee 100644
--- a/none/tests/ppc64/test_isa_2_06_part3.vgtest
+++ b/none/tests/ppc64/test_isa_2_06_part3.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_06_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_06
 prog: test_isa_2_06_part3
diff --git a/none/tests/ppc64/test_isa_2_07_part2.vgtest b/none/tests/ppc64/test_isa_2_07_part2.vgtest
index a4649be..8108796 100644
--- a/none/tests/ppc64/test_isa_2_07_part2.vgtest
+++ b/none/tests/ppc64/test_isa_2_07_part2.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap arch_2_07
 prog: test_isa_2_07_part2
diff --git a/none/tests/ppc64/test_tm.c b/none/tests/ppc64/test_tm.c
index 29eb5eb..c829384 100644
--- a/none/tests/ppc64/test_tm.c
+++ b/none/tests/ppc64/test_tm.c
@@ -1,5 +1,5 @@
 #include <stdio.h>
-#ifdef HAS_ISA_2_07
+#ifdef SUPPORTS_HTM
 int __attribute__ ((noinline)) htm_begin (int r3, int r4)
 {
    int ret;
@@ -14,10 +14,12 @@
 #endif
 
 int main (void) {
-#ifdef HAS_ISA_2_07
+#ifdef SUPPORTS_HTM
    int ret;
    ret = htm_begin (10, 20);
    printf ("ret = %d, expected = 10\n", ret);
+#else
+   printf ("No HTM support.");
 #endif
    return 0;
 }
diff --git a/none/tests/ppc64/test_tm.vgtest b/none/tests/ppc64/test_tm.vgtest
index 977c326..f258077 100644
--- a/none/tests/ppc64/test_tm.vgtest
+++ b/none/tests/ppc64/test_tm.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap htm
 prog: test_tm
diff --git a/none/tests/ppc64/test_touch_tm.c b/none/tests/ppc64/test_touch_tm.c
index 9e40083..57f89bb 100644
--- a/none/tests/ppc64/test_touch_tm.c
+++ b/none/tests/ppc64/test_touch_tm.c
@@ -1,15 +1,17 @@
 #include <stdio.h>
 
 int main (void) {
-#ifdef HAS_ISA_2_07
+#ifdef SUPPORTS_HTM
    /* Just get the compiler to generate each of the TM instructions
     * so we can verify that valgrind recognizes them.
     * For now, only the tbegin instruction does anything in valgrind.
     * The rest are just treated as NOPS.
     */
    __builtin_tabort (0);
+#ifdef __PPC64__
    __builtin_tabortdc (0,0,0);
    __builtin_tabortdci (0,0,0);
+#endif
    __builtin_tabortwc (0,0,0);
    __builtin_tabortwci (0,0,0);
    __builtin_tbegin (0);
@@ -18,6 +20,8 @@
    __builtin_trechkpt ();  // not recognized by early HW
    __builtin_treclaim (0); // not recognized by early HW
    __builtin_tsr (0);
+#else
+   printf ("No HTM support.");
 #endif
    return 0;
 }
diff --git a/none/tests/ppc64/test_touch_tm.vgtest b/none/tests/ppc64/test_touch_tm.vgtest
index 4806ccf..50409b7 100644
--- a/none/tests/ppc64/test_touch_tm.vgtest
+++ b/none/tests/ppc64/test_touch_tm.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../../tests/check_isa-2_07_cap
+prereq: ../../../tests/check_ppc64_auxv_cap htm
 prog: test_touch_tm
diff --git a/none/tests/procfs-cmdline-exe.c b/none/tests/procfs-cmdline-exe.c
index 9f550e5..cfb78d6 100644
--- a/none/tests/procfs-cmdline-exe.c
+++ b/none/tests/procfs-cmdline-exe.c
@@ -98,12 +98,12 @@
     perror("getcwd");
   strcat(cwd, "/");
 
-  snprintf(path, sizeof(path), "/proc/%d/cmdline", getpid());
+  snprintf(path, sizeof(path), "/proc/%ld/cmdline", (long) getpid());
 
   test_cmdline(cwd, "/proc/self/cmdline", "/proc/self/cmdline");
   test_cmdline(cwd, "/proc/<pid>/cmdline", path);
 
-  snprintf(path, sizeof(path), "/proc/%d/exe", getpid());
+  snprintf(path, sizeof(path), "/proc/%ld/exe", (long) getpid());
 
   test_readlink(cwd, "/proc/self/exe", "/proc/self/exe");
   test_readlink(cwd, "/proc/<pid>/exe", path);
diff --git a/none/tests/procfs-non-linux.vgtest b/none/tests/procfs-non-linux.vgtest
index 61bf349..8250b27 100644
--- a/none/tests/procfs-non-linux.vgtest
+++ b/none/tests/procfs-non-linux.vgtest
@@ -1,3 +1,6 @@
-prereq: [ $(uname) != Linux ]
+# For Linux, there is 'procfs-linux'.
+# For Solaris, there is Solaris-specific 'solaris/proc-cmdline-exe'.
+#
+prereq: ! ../../tests/os_test linux && ! ../../tests/os_test solaris
 prog: procfs-cmdline-exe
 stderr_filter: filter_stderr
diff --git a/none/tests/pth_atfork1.c b/none/tests/pth_atfork1.c
index 99a087f..34201ef 100644
--- a/none/tests/pth_atfork1.c
+++ b/none/tests/pth_atfork1.c
@@ -18,7 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <errno.h>
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__sun)
 # include <error.h>
 #endif
 #include <stdlib.h>
@@ -27,7 +27,7 @@
 #include <sys/wait.h>
 #include <stdio.h>
 
-#if defined(__APPLE__)
+#if defined(__APPLE__) || defined(__sun)
 #include <string.h>  /* strerror */
 static void error (int status, int errnum, char* msg)
 {
diff --git a/none/tests/require-text-symbol-2.stderr.exp-libcso1 b/none/tests/require-text-symbol-2.stderr.exp-libcso1
new file mode 100644
index 0000000..8c0c3ea
--- /dev/null
+++ b/none/tests/require-text-symbol-2.stderr.exp-libcso1
@@ -0,0 +1,9 @@
+
+valgrind:  Fatal error at when loading library with soname
+valgrind:     libc.so.1
+valgrind:  Cannot find any text symbol with a name that matches the pattern
+valgrind:     doesntexist
+valgrind:  as required by a --require-text-symbol= specification.
+
+valgrind:  Cannot continue -- exiting now.
+
diff --git a/none/tests/res_search.vgtest b/none/tests/res_search.vgtest
index 745a5ff..24a35fc 100644
--- a/none/tests/res_search.vgtest
+++ b/none/tests/res_search.vgtest
@@ -1,4 +1,4 @@
-prereq: which host >/dev/null 2>/dev/null && host www.yahoo.com > /dev/null
+prereq: which host >/dev/null 2>/dev/null && host www.yahoo.com > /dev/null && ! ../../tests/os_test darwin
 prog: res_search
 args: www.yahoo.com
 vgopts: -q
diff --git a/none/tests/resolv.vgtest b/none/tests/resolv.vgtest
index e8c1e29..879a174 100644
--- a/none/tests/resolv.vgtest
+++ b/none/tests/resolv.vgtest
@@ -1 +1,4 @@
+# Disabled on Solaris because different approach needs to be taken.
+# There is none/tests/solaris/resolv for that purpose.
+prereq: ! ../../tests/os_test solaris && ! ../../tests/os_test darwin
 prog: resolv
diff --git a/none/tests/rlimit64_nofile.vgtest b/none/tests/rlimit64_nofile.vgtest
index 49934f8..e061f39 100644
--- a/none/tests/rlimit64_nofile.vgtest
+++ b/none/tests/rlimit64_nofile.vgtest
@@ -1,2 +1,2 @@
-prereq: ../../tests/os_test linux
+prereq: ../../tests/os_test linux || ../../tests/os_test solaris
 prog: rlimit64_nofile
diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am
index 4100088..6545117 100644
--- a/none/tests/s390x/Makefile.am
+++ b/none/tests/s390x/Makefile.am
@@ -8,7 +8,7 @@
              op_exception fgx stck stckf stcke stfle cksm mvcl clcl troo \
              trto trot trtt tr tre cij cgij clij clgij crj cgrj clrj clgrj \
              cs csg cds cdsg cu21 cu21_1 cu24 cu24_1 cu42 cu12 cu12_1 \
-             ex_sig ex_clone cu14 cu14_1 cu41 fpconv ecag fpext fpext_warn \
+             ex_sig ex_clone cu14 cu14_1 cu41 fpconv ecag fpext_warn \
              rounding-1 rounding-2 rounding-3 rounding-4 rounding-5 bfp-1 \
              bfp-2 bfp-3 bfp-4 srnm srnmb comp-1 comp-2 exrl tmll tm stmg \
 	     ex clst mvc test_fork test_sig rounding-6 rxsbg\
@@ -21,6 +21,9 @@
 if BUILD_DFP_TESTS
   INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt pfpo
 endif
+if HAS_MLONG_DOUBLE_128
+  INSN_TESTS += fpext fixbr
+endif
 
 check_PROGRAMS = $(INSN_TESTS) \
 		 allexec \
@@ -33,6 +36,8 @@
 	ecag.stdout.exp-z10ec ecag.stdout.exp-z196 ecag.stdout.exp-zec12 \
 	ecag.stdout.exp-z13 \
 	op00.stderr.exp1 op00.stderr.exp2 op00.vgtest \
+	fixbr.vgtest fixbr.stderr.exp fixbr.stdout.exp \
+	fpext.vgtest fpext.stderr.exp fpext.stdout.exp \
 	fpext_fail.vgtest fpext_fail.stderr.exp fpext_fail.stdout.exp \
 	test.h opcodes.h add.h  and.h  div.h  insert.h dfp_utils.h \
 	mul.h  or.h  sub.h  xor.h table.h svc.h rounding.h \
@@ -56,5 +61,6 @@
 cu14_1_CFLAGS    = $(AM_CFLAGS) -DM3=1
 cu21_1_CFLAGS    = $(AM_CFLAGS) -DM3=1
 cu24_1_CFLAGS    = $(AM_CFLAGS) -DM3=1
-
+fixbr_CFLAGS     = $(AM_CFLAGS) @FLAG_MLONG_DOUBLE_128@
+fpext_CFLAGS     = $(AM_CFLAGS) @FLAG_MLONG_DOUBLE_128@
 ex_clone_LDFLAGS = -lpthread
diff --git a/none/tests/s390x/fixbr.c b/none/tests/s390x/fixbr.c
new file mode 100644
index 0000000..ba99210
--- /dev/null
+++ b/none/tests/s390x/fixbr.c
@@ -0,0 +1,73 @@
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include "opcodes.h"
+#include "rounding.h"
+
+/* Test "fixbr"  with rounding mode given in insn (m3 field)
+   Covers all generally available rounding modes that can be mapped to
+   IRRoundingMode. As a consequence m3=1 which is "round to nearest with
+   ties away from 0" is not tested here.
+*/
+
+const char *
+rtext(unsigned m3_round)
+{
+   switch (m3_round) {
+   case 0: return "[-> per fpc]";
+   case 1: return "[-> nearest away]";
+   case 3: return "[-> prepare short]";   // floating point extension fac needed
+   case 4: return "[-> nearest even]";
+   case 5: return "[-> 0]";
+   case 6: return "[-> +inf]";
+   case 7: return "[-> -inf]";
+   }
+   assert(0);
+}
+
+#define round_to_int(value,round)                             \
+do {                                                          \
+   long double src = value;                                   \
+   long double dst;                                           \
+                                                              \
+   __asm__ volatile ("fixbr %[dst]," #round ",%[src]\n\t"     \
+                     : [dst] "=f"(dst)                        \
+                     : [src] "f"(src));                       \
+                                                              \
+   printf("fixbr %.5Lf\t-> %Lg  %s\n",                        \
+          src, dst, rtext(round));                            \
+} while (0)
+
+#define fixbr(value,round) round_to_int(value,round)
+
+void
+set_rounding_mode(unsigned mode)
+{
+   register unsigned r asm("1") = mode;
+   __asm__ volatile ( SFPC(1) : : "d"(r) );
+}
+
+
+int main(void)
+{
+   int j;
+   static const long double dval[] = {
+      1.25, 1.5, 2.5, 1.75, -1.25, -1.5, -2.5, -1.75, 0.0,
+   };
+
+   assert(sizeof(long double) == 16);
+   
+   /* f128 -> f128, round to int */
+   for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
+      set_rounding_mode(FPC_BFP_ROUND_ZERO);
+      fixbr(dval[j], M3_BFP_ROUND_NEAREST_EVEN);
+      set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
+      fixbr(dval[j], M3_BFP_ROUND_ZERO);
+      fixbr(dval[j], M3_BFP_ROUND_POSINF);
+      fixbr(dval[j], M3_BFP_ROUND_NEGINF);
+   }
+
+   return 0;
+}
diff --git a/none/tests/s390x/fixbr.stderr.exp b/none/tests/s390x/fixbr.stderr.exp
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/none/tests/s390x/fixbr.stderr.exp
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/s390x/fixbr.stdout.exp b/none/tests/s390x/fixbr.stdout.exp
new file mode 100644
index 0000000..787c0d8
--- /dev/null
+++ b/none/tests/s390x/fixbr.stdout.exp
@@ -0,0 +1,36 @@
+fixbr 1.25000	-> 1  [-> nearest even]
+fixbr 1.25000	-> 1  [-> 0]
+fixbr 1.25000	-> 2  [-> +inf]
+fixbr 1.25000	-> 1  [-> -inf]
+fixbr 1.50000	-> 2  [-> nearest even]
+fixbr 1.50000	-> 1  [-> 0]
+fixbr 1.50000	-> 2  [-> +inf]
+fixbr 1.50000	-> 1  [-> -inf]
+fixbr 2.50000	-> 2  [-> nearest even]
+fixbr 2.50000	-> 2  [-> 0]
+fixbr 2.50000	-> 3  [-> +inf]
+fixbr 2.50000	-> 2  [-> -inf]
+fixbr 1.75000	-> 2  [-> nearest even]
+fixbr 1.75000	-> 1  [-> 0]
+fixbr 1.75000	-> 2  [-> +inf]
+fixbr 1.75000	-> 1  [-> -inf]
+fixbr -1.25000	-> -1  [-> nearest even]
+fixbr -1.25000	-> -1  [-> 0]
+fixbr -1.25000	-> -1  [-> +inf]
+fixbr -1.25000	-> -2  [-> -inf]
+fixbr -1.50000	-> -2  [-> nearest even]
+fixbr -1.50000	-> -1  [-> 0]
+fixbr -1.50000	-> -1  [-> +inf]
+fixbr -1.50000	-> -2  [-> -inf]
+fixbr -2.50000	-> -2  [-> nearest even]
+fixbr -2.50000	-> -2  [-> 0]
+fixbr -2.50000	-> -2  [-> +inf]
+fixbr -2.50000	-> -3  [-> -inf]
+fixbr -1.75000	-> -2  [-> nearest even]
+fixbr -1.75000	-> -1  [-> 0]
+fixbr -1.75000	-> -1  [-> +inf]
+fixbr -1.75000	-> -2  [-> -inf]
+fixbr 0.00000	-> 0  [-> nearest even]
+fixbr 0.00000	-> 0  [-> 0]
+fixbr 0.00000	-> 0  [-> +inf]
+fixbr 0.00000	-> 0  [-> -inf]
diff --git a/none/tests/s390x/fixbr.vgtest b/none/tests/s390x/fixbr.vgtest
new file mode 100644
index 0000000..22eb7af
--- /dev/null
+++ b/none/tests/s390x/fixbr.vgtest
@@ -0,0 +1,2 @@
+prog: fixbr
+prereq: test -e fixbr && ../../../tests/s390x_features s390x-fpext
diff --git a/none/tests/s390x/fold_And16.c b/none/tests/s390x/fold_And16.c
index dfa0c8a..58a94b0 100644
--- a/none/tests/s390x/fold_And16.c
+++ b/none/tests/s390x/fold_And16.c
@@ -2,7 +2,7 @@
 
 int main()
 {
-   unsigned long p;
+   unsigned long p = 0;
    register unsigned long *msg = &p;
 
    /* Load "hi\n\0" into P; then convert the 'i' into an 'h' */
diff --git a/none/tests/s390x/fpext.c b/none/tests/s390x/fpext.c
index 64e7a47..62b6bb7 100644
--- a/none/tests/s390x/fpext.c
+++ b/none/tests/s390x/fpext.c
@@ -1,5 +1,6 @@
 #include <float.h>
 #include <stdio.h>
+#include <assert.h>
 #include "opcodes.h"
 
 
@@ -131,6 +132,7 @@
 
 int main()
 {
+   assert(sizeof(long double) == 16);
    DO_L2F(4);
    DO_F2L(4);
 
diff --git a/none/tests/s390x/fpext.vgtest b/none/tests/s390x/fpext.vgtest
index 4740430..948bad9 100644
--- a/none/tests/s390x/fpext.vgtest
+++ b/none/tests/s390x/fpext.vgtest
@@ -1,2 +1,2 @@
 prog: fpext
-prereq: ../../../tests/s390x_features s390x-fpext
+prereq: test -e fpext && ../../../tests/s390x_features s390x-fpext
diff --git a/none/tests/s390x/fpext_fail.stderr.exp b/none/tests/s390x/fpext_fail.stderr.exp
index d64bb23..ec1a3be 100644
--- a/none/tests/s390x/fpext_fail.stderr.exp
+++ b/none/tests/s390x/fpext_fail.stderr.exp
@@ -2,7 +2,7 @@
 Emulation fatal error -- Valgrind cannot continue:
   Encountered an instruction that requires the floating point extension facility.
   That facility is not available on this host
-   at 0x........: main (fpext.c:134)
+   at 0x........: main (fpext.c:136)
 
 Valgrind has to exit now.  Sorry.
 
diff --git a/none/tests/s390x/fpext_fail.vgtest b/none/tests/s390x/fpext_fail.vgtest
index 64ed5ee..970cbed 100644
--- a/none/tests/s390x/fpext_fail.vgtest
+++ b/none/tests/s390x/fpext_fail.vgtest
@@ -1,2 +1,2 @@
 prog: fpext
-prereq: ../../../tests/s390x_features '!s390x-fpext'
+prereq: test -e fpext && ../../../tests/s390x_features '!s390x-fpext'
diff --git a/none/tests/s390x/op00.vgtest b/none/tests/s390x/op00.vgtest
index 948fb85..e570976 100644
--- a/none/tests/s390x/op00.vgtest
+++ b/none/tests/s390x/op00.vgtest
@@ -1 +1,2 @@
 prog: op00
+cleanup: rm -f vgcore.*
diff --git a/none/tests/s390x/rounding-6.c b/none/tests/s390x/rounding-6.c
index 999aacd..e880876 100644
--- a/none/tests/s390x/rounding-6.c
+++ b/none/tests/s390x/rounding-6.c
@@ -44,6 +44,19 @@
           opcode, src, dst, cc, rtext(round));        \
 } while (0)
 
+#define round_to_int(opcode,type,round,value)                   \
+do {                                                            \
+   type src = value;                                            \
+   type dst;                                                    \
+                                                                \
+   __asm__ volatile (opcode " %[dst]," #round ",%[src]\n\t"     \
+                     : [dst] "=f"(dst)                          \
+                     : [src] "f"(src));                         \
+                                                                \
+   printf("%s %.5f\t-> %g  %s\n",                               \
+          opcode, src, dst, rtext(round));                      \
+} while (0)
+
 
 #define cfebr(value, round) \
         convert_to_int("cfebr",float,int32_t,PRId32,round,value)
@@ -54,6 +67,11 @@
 #define cgdbr(value, round) \
         convert_to_int("cgdbr",double,int64_t,PRId64,round,value)
 
+#define fiebr(value, round) \
+        round_to_int("fiebr",float,round,value)
+#define fidbr(value, round) \
+        round_to_int("fidbr",double,round,value)
+
 void
 set_rounding_mode(unsigned mode)
 {
@@ -117,5 +135,25 @@
       cgdbr(dval[j], M3_BFP_ROUND_NEGINF);
    }
 
+   /* f32 -> f32, round to int */
+   for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
+      set_rounding_mode(FPC_BFP_ROUND_ZERO);
+      fiebr(dval[j], M3_BFP_ROUND_NEAREST_EVEN);
+      set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
+      fiebr(dval[j], M3_BFP_ROUND_ZERO);
+      fiebr(dval[j], M3_BFP_ROUND_POSINF);
+      fiebr(dval[j], M3_BFP_ROUND_NEGINF);
+   }
+
+   /* f64 -> f64, round to int */
+   for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
+      set_rounding_mode(FPC_BFP_ROUND_ZERO);
+      fidbr(dval[j], M3_BFP_ROUND_NEAREST_EVEN);
+      set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
+      fidbr(dval[j], M3_BFP_ROUND_ZERO);
+      fidbr(dval[j], M3_BFP_ROUND_POSINF);
+      fidbr(dval[j], M3_BFP_ROUND_NEGINF);
+   }
+
    return 0;
 }
diff --git a/none/tests/s390x/rounding-6.stdout.exp b/none/tests/s390x/rounding-6.stdout.exp
index f83455c..f01a229 100644
--- a/none/tests/s390x/rounding-6.stdout.exp
+++ b/none/tests/s390x/rounding-6.stdout.exp
@@ -142,3 +142,75 @@
 cgdbr 0.000000	-> 0	cc = 0  [-> 0]
 cgdbr 0.000000	-> 0	cc = 0  [-> +inf]
 cgdbr 0.000000	-> 0	cc = 0  [-> -inf]
+fiebr 1.25000	-> 1  [-> nearest even]
+fiebr 1.25000	-> 1  [-> 0]
+fiebr 1.25000	-> 2  [-> +inf]
+fiebr 1.25000	-> 1  [-> -inf]
+fiebr 1.50000	-> 2  [-> nearest even]
+fiebr 1.50000	-> 1  [-> 0]
+fiebr 1.50000	-> 2  [-> +inf]
+fiebr 1.50000	-> 1  [-> -inf]
+fiebr 2.50000	-> 2  [-> nearest even]
+fiebr 2.50000	-> 2  [-> 0]
+fiebr 2.50000	-> 3  [-> +inf]
+fiebr 2.50000	-> 2  [-> -inf]
+fiebr 1.75000	-> 2  [-> nearest even]
+fiebr 1.75000	-> 1  [-> 0]
+fiebr 1.75000	-> 2  [-> +inf]
+fiebr 1.75000	-> 1  [-> -inf]
+fiebr -1.25000	-> -1  [-> nearest even]
+fiebr -1.25000	-> -1  [-> 0]
+fiebr -1.25000	-> -1  [-> +inf]
+fiebr -1.25000	-> -2  [-> -inf]
+fiebr -1.50000	-> -2  [-> nearest even]
+fiebr -1.50000	-> -1  [-> 0]
+fiebr -1.50000	-> -1  [-> +inf]
+fiebr -1.50000	-> -2  [-> -inf]
+fiebr -2.50000	-> -2  [-> nearest even]
+fiebr -2.50000	-> -2  [-> 0]
+fiebr -2.50000	-> -2  [-> +inf]
+fiebr -2.50000	-> -3  [-> -inf]
+fiebr -1.75000	-> -2  [-> nearest even]
+fiebr -1.75000	-> -1  [-> 0]
+fiebr -1.75000	-> -1  [-> +inf]
+fiebr -1.75000	-> -2  [-> -inf]
+fiebr 0.00000	-> 0  [-> nearest even]
+fiebr 0.00000	-> 0  [-> 0]
+fiebr 0.00000	-> 0  [-> +inf]
+fiebr 0.00000	-> 0  [-> -inf]
+fidbr 1.25000	-> 1  [-> nearest even]
+fidbr 1.25000	-> 1  [-> 0]
+fidbr 1.25000	-> 2  [-> +inf]
+fidbr 1.25000	-> 1  [-> -inf]
+fidbr 1.50000	-> 2  [-> nearest even]
+fidbr 1.50000	-> 1  [-> 0]
+fidbr 1.50000	-> 2  [-> +inf]
+fidbr 1.50000	-> 1  [-> -inf]
+fidbr 2.50000	-> 2  [-> nearest even]
+fidbr 2.50000	-> 2  [-> 0]
+fidbr 2.50000	-> 3  [-> +inf]
+fidbr 2.50000	-> 2  [-> -inf]
+fidbr 1.75000	-> 2  [-> nearest even]
+fidbr 1.75000	-> 1  [-> 0]
+fidbr 1.75000	-> 2  [-> +inf]
+fidbr 1.75000	-> 1  [-> -inf]
+fidbr -1.25000	-> -1  [-> nearest even]
+fidbr -1.25000	-> -1  [-> 0]
+fidbr -1.25000	-> -1  [-> +inf]
+fidbr -1.25000	-> -2  [-> -inf]
+fidbr -1.50000	-> -2  [-> nearest even]
+fidbr -1.50000	-> -1  [-> 0]
+fidbr -1.50000	-> -1  [-> +inf]
+fidbr -1.50000	-> -2  [-> -inf]
+fidbr -2.50000	-> -2  [-> nearest even]
+fidbr -2.50000	-> -2  [-> 0]
+fidbr -2.50000	-> -2  [-> +inf]
+fidbr -2.50000	-> -3  [-> -inf]
+fidbr -1.75000	-> -2  [-> nearest even]
+fidbr -1.75000	-> -1  [-> 0]
+fidbr -1.75000	-> -1  [-> +inf]
+fidbr -1.75000	-> -2  [-> -inf]
+fidbr 0.00000	-> 0  [-> nearest even]
+fidbr 0.00000	-> 0  [-> 0]
+fidbr 0.00000	-> 0  [-> +inf]
+fidbr 0.00000	-> 0  [-> -inf]
diff --git a/none/tests/scripts/Makefile.am b/none/tests/scripts/Makefile.am
index 9fe986b..07b4c8e 100644
--- a/none/tests/scripts/Makefile.am
+++ b/none/tests/scripts/Makefile.am
@@ -7,20 +7,24 @@
 	filter_stderr
 
 EXTRA_DIST = \
+	say-hello.helper \
 	bug231357.vgtest bug231357.stderr.exp bug231357.stdout.exp \
+	bug338606 bug338606.vgtest bug338606.stderr.exp \
 	shell shell.vgtest shell.stderr.exp shell.stderr.exp-dash \
-	shell.stdout.exp shell.stderr.exp-dash2 \
+	shell.stdout.exp shell.stderr.exp-dash2 shell.stderr.exp-illumos \
+	shell.stderr.exp-solaris shell.stderr.exp-solaris-spawn \
 	shell_badinterp shell_badinterp.vgtest shell_badinterp.stderr.exp \
 	shell_binaryfile shell_binaryfile.vgtest shell_binaryfile.stderr.exp \
 	shell_dir.vgtest shell_dir.stderr.exp \
-	shell_nointerp1 shell_nointerp1.vgtest shell_nointerp1.stderr.exp \
-	shell_nointerp1.stdout.exp \
-	shell_nointerp2 shell_nointerp2.vgtest shell_nointerp2.stderr.exp \
-	shell_nointerp2.stdout.exp \
-	shell_nointerp3 shell_nointerp3.vgtest shell_nointerp3.stderr.exp \
-	shell_nointerp3.stdout.exp \
+	nointerp1 nointerp1.vgtest nointerp1.stderr.exp nointerp1.stdout.exp \
+	nointerp2 nointerp2.vgtest nointerp2.stderr.exp nointerp2.stdout.exp \
+	nointerp3 nointerp3.vgtest nointerp3.stderr.exp nointerp3.stdout.exp \
+	nointerp4 nointerp4.vgtest nointerp4.stderr.exp \
+	nointerp5 nointerp5.vgtest nointerp5.stderr.exp \
 	shell_nonexec.vgtest shell_nonexec.stderr.exp \
 	shell_nosuchfile.vgtest shell_nosuchfile.stderr.exp \
+	relative1 relative1.vgtest relative1.stderr.exp relative1.stdout.exp \
+	relative2 relative2.vgtest relative2.stderr.exp relative2.stdout.exp \
 	shell_valid1 shell_valid1.vgtest shell_valid1.stderr.exp \
 	shell_valid4 shell_valid4.vgtest shell_valid4.stderr.exp \
 	shell_valid4.stdout.exp \
diff --git a/none/tests/scripts/bug338606 b/none/tests/scripts/bug338606
new file mode 100755
index 0000000..4b38739
--- /dev/null
+++ b/none/tests/scripts/bug338606
@@ -0,0 +1,4 @@
+#!usr/bin/perl
+
+print "hello\n";
+exit 0;
diff --git a/none/tests/scripts/bug338606.stderr.exp b/none/tests/scripts/bug338606.stderr.exp
new file mode 100644
index 0000000..3f15067
--- /dev/null
+++ b/none/tests/scripts/bug338606.stderr.exp
@@ -0,0 +1 @@
+valgrind: ./bug338606: bad interpreter: No such file or directory
diff --git a/none/tests/scripts/bug338606.vgtest b/none/tests/scripts/bug338606.vgtest
new file mode 100644
index 0000000..99e1f45
--- /dev/null
+++ b/none/tests/scripts/bug338606.vgtest
@@ -0,0 +1,7 @@
+# This test used to produce a most bizarre message:
+#
+#   Warning: unknown mime-type for "hello\n" -- using "application/octet-stream"
+#   Error: no such file "hello\n"
+#
+prog: bug338606
+vgopts: -q
diff --git a/none/tests/scripts/shell_nointerp1 b/none/tests/scripts/nointerp1
similarity index 100%
rename from none/tests/scripts/shell_nointerp1
rename to none/tests/scripts/nointerp1
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/scripts/nointerp1.stderr.exp
similarity index 100%
rename from none/tests/scripts/shell_nointerp1.stderr.exp
rename to none/tests/scripts/nointerp1.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stdout.exp b/none/tests/scripts/nointerp1.stdout.exp
similarity index 100%
rename from none/tests/scripts/shell_nointerp1.stdout.exp
rename to none/tests/scripts/nointerp1.stdout.exp
diff --git a/none/tests/scripts/nointerp1.vgtest b/none/tests/scripts/nointerp1.vgtest
new file mode 100644
index 0000000..fdfbfa0
--- /dev/null
+++ b/none/tests/scripts/nointerp1.vgtest
@@ -0,0 +1,2 @@
+prog: nointerp1
+vgopts: -q
diff --git a/none/tests/scripts/shell_nointerp2 b/none/tests/scripts/nointerp2
similarity index 100%
rename from none/tests/scripts/shell_nointerp2
rename to none/tests/scripts/nointerp2
diff --git a/none/tests/scripts/shell_nointerp2.stderr.exp b/none/tests/scripts/nointerp2.stderr.exp
similarity index 100%
rename from none/tests/scripts/shell_nointerp2.stderr.exp
rename to none/tests/scripts/nointerp2.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp2.stdout.exp b/none/tests/scripts/nointerp2.stdout.exp
similarity index 100%
rename from none/tests/scripts/shell_nointerp2.stdout.exp
rename to none/tests/scripts/nointerp2.stdout.exp
diff --git a/none/tests/scripts/nointerp2.vgtest b/none/tests/scripts/nointerp2.vgtest
new file mode 100644
index 0000000..104b182
--- /dev/null
+++ b/none/tests/scripts/nointerp2.vgtest
@@ -0,0 +1,2 @@
+prog: nointerp2
+vgopts: -q
diff --git a/none/tests/scripts/shell_nointerp3 b/none/tests/scripts/nointerp3
similarity index 100%
rename from none/tests/scripts/shell_nointerp3
rename to none/tests/scripts/nointerp3
diff --git a/none/tests/scripts/shell_nointerp3.stderr.exp b/none/tests/scripts/nointerp3.stderr.exp
similarity index 100%
rename from none/tests/scripts/shell_nointerp3.stderr.exp
rename to none/tests/scripts/nointerp3.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp3.stdout.exp b/none/tests/scripts/nointerp3.stdout.exp
similarity index 100%
rename from none/tests/scripts/shell_nointerp3.stdout.exp
rename to none/tests/scripts/nointerp3.stdout.exp
diff --git a/none/tests/scripts/nointerp3.vgtest b/none/tests/scripts/nointerp3.vgtest
new file mode 100644
index 0000000..3a0cd3e
--- /dev/null
+++ b/none/tests/scripts/nointerp3.vgtest
@@ -0,0 +1,2 @@
+prog: nointerp3
+vgopts: -q
diff --git a/none/tests/scripts/nointerp4 b/none/tests/scripts/nointerp4
new file mode 100755
index 0000000..792d600
--- /dev/null
+++ b/none/tests/scripts/nointerp4
@@ -0,0 +1 @@
+#
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/scripts/nointerp4.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/scripts/nointerp4.stderr.exp
diff --git a/none/tests/scripts/nointerp4.vgtest b/none/tests/scripts/nointerp4.vgtest
new file mode 100755
index 0000000..9cb1be1
--- /dev/null
+++ b/none/tests/scripts/nointerp4.vgtest
@@ -0,0 +1,2 @@
+prog: nointerp4
+vgopts: -q
diff --git a/none/tests/scripts/nointerp5 b/none/tests/scripts/nointerp5
new file mode 100755
index 0000000..b1d2015
--- /dev/null
+++ b/none/tests/scripts/nointerp5
@@ -0,0 +1 @@
+#  
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/scripts/nointerp5.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/scripts/nointerp5.stderr.exp
diff --git a/none/tests/scripts/nointerp5.vgtest b/none/tests/scripts/nointerp5.vgtest
new file mode 100755
index 0000000..63819ac
--- /dev/null
+++ b/none/tests/scripts/nointerp5.vgtest
@@ -0,0 +1,2 @@
+prog: nointerp5
+vgopts: -q
diff --git a/none/tests/scripts/relative1 b/none/tests/scripts/relative1
new file mode 100755
index 0000000..e08a422
--- /dev/null
+++ b/none/tests/scripts/relative1
@@ -0,0 +1 @@
+#!./say-hello.helper
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/scripts/relative1.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/scripts/relative1.stderr.exp
diff --git a/none/tests/scripts/relative1.stdout.exp b/none/tests/scripts/relative1.stdout.exp
new file mode 100644
index 0000000..ce01362
--- /dev/null
+++ b/none/tests/scripts/relative1.stdout.exp
@@ -0,0 +1 @@
+hello
diff --git a/none/tests/scripts/relative1.vgtest b/none/tests/scripts/relative1.vgtest
new file mode 100644
index 0000000..0cb93f1
--- /dev/null
+++ b/none/tests/scripts/relative1.vgtest
@@ -0,0 +1,2 @@
+prog: relative1
+vgopts: -q
diff --git a/none/tests/scripts/relative2 b/none/tests/scripts/relative2
new file mode 100755
index 0000000..ad27326
--- /dev/null
+++ b/none/tests/scripts/relative2
@@ -0,0 +1 @@
+#!   ../scripts/./say-hello.helper  
diff --git a/none/tests/scripts/shell_nointerp2.stderr.exp b/none/tests/scripts/relative2.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp2.stderr.exp
copy to none/tests/scripts/relative2.stderr.exp
diff --git a/none/tests/scripts/relative2.stdout.exp b/none/tests/scripts/relative2.stdout.exp
new file mode 100644
index 0000000..ce01362
--- /dev/null
+++ b/none/tests/scripts/relative2.stdout.exp
@@ -0,0 +1 @@
+hello
diff --git a/none/tests/scripts/relative2.vgtest b/none/tests/scripts/relative2.vgtest
new file mode 100644
index 0000000..6b0bc76
--- /dev/null
+++ b/none/tests/scripts/relative2.vgtest
@@ -0,0 +1,2 @@
+prog: relative2
+vgopts: -q
diff --git a/none/tests/scripts/say-hello.helper b/none/tests/scripts/say-hello.helper
new file mode 100755
index 0000000..21ba682
--- /dev/null
+++ b/none/tests/scripts/say-hello.helper
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo hello
diff --git a/none/tests/scripts/shell b/none/tests/scripts/shell
index dc0b8b1..5df2ca2 100755
--- a/none/tests/scripts/shell
+++ b/none/tests/scripts/shell
@@ -31,10 +31,10 @@
 ./shell_valid1
 
 echo "Execute a valid script without a #! line"
-./shell_nointerp1
+./nointerp1
 
 echo "Execute a valid script with #! but no interpname"
-./shell_nointerp2
+./nointerp2
 
 echo "Execute a zero-length file"
 ./shell_zerolength
diff --git a/none/tests/scripts/shell.stderr.exp-illumos b/none/tests/scripts/shell.stderr.exp-illumos
new file mode 100644
index 0000000..9866b2e
--- /dev/null
+++ b/none/tests/scripts/shell.stderr.exp-illumos
@@ -0,0 +1,8 @@
+./shell[10]: ./x86/: cannot execute [is a directory]
+./shell[13]: ./shell.vgtest: cannot execute [Permission denied]
+execve(0x........(./shell_badinterp), 0x........, 0x........) failed, errno 2
+EXEC FAILED: I can't recover from execve() failing, so I'm dying.
+Add more stringent tests in PRE(sys_execve), or work out how to recover.
+./shell_binaryfile: ./shell_binaryfile: cannot execute [Exec format error]
+./shell[22]: ./shell_nosuchfile: not found [No such file or directory]
+./shell[25]: shell_nosuchfile: not found [No such file or directory]
diff --git a/none/tests/scripts/shell.stderr.exp-solaris b/none/tests/scripts/shell.stderr.exp-solaris
new file mode 100644
index 0000000..5a8229f
--- /dev/null
+++ b/none/tests/scripts/shell.stderr.exp-solaris
@@ -0,0 +1,8 @@
+./shell[10]: ./x86/: cannot execute [is a directory]
+./shell[13]: ./shell.vgtest: cannot execute [Permission denied]
+execve(0x........(./shell_badinterp), 0x........, 0x........, 0) failed, errno 2
+EXEC FAILED: I can't recover from execve() failing, so I'm dying.
+Add more stringent tests in PRE(sys_execve), or work out how to recover.
+./shell_binaryfile: ./shell_binaryfile: cannot execute [Exec format error]
+./shell[22]: ./shell_nosuchfile: not found [No such file or directory]
+./shell[25]: shell_nosuchfile: not found [No such file or directory]
diff --git a/none/tests/scripts/shell.stderr.exp-solaris-spawn b/none/tests/scripts/shell.stderr.exp-solaris-spawn
new file mode 100644
index 0000000..e40fd97
--- /dev/null
+++ b/none/tests/scripts/shell.stderr.exp-solaris-spawn
@@ -0,0 +1,6 @@
+./shell[10]: ./x86/: cannot execute [is a directory]
+./shell[13]: ./shell.vgtest: cannot execute [Permission denied]
+./shell[16]: ./shell_badinterp: not found [No such file or directory]
+./shell_binaryfile: ./shell_binaryfile: cannot execute [Exec format error]
+./shell[22]: ./shell_nosuchfile: not found [No such file or directory]
+./shell[25]: shell_nosuchfile: not found [No such file or directory]
diff --git a/none/tests/scripts/shell_nointerp1.vgtest b/none/tests/scripts/shell_nointerp1.vgtest
deleted file mode 100644
index 5a5c5c5..0000000
--- a/none/tests/scripts/shell_nointerp1.vgtest
+++ /dev/null
@@ -1,2 +0,0 @@
-prog: shell_nointerp1
-vgopts: -q
diff --git a/none/tests/scripts/shell_nointerp2.vgtest b/none/tests/scripts/shell_nointerp2.vgtest
deleted file mode 100644
index 346e347..0000000
--- a/none/tests/scripts/shell_nointerp2.vgtest
+++ /dev/null
@@ -1,2 +0,0 @@
-prog: shell_nointerp2
-vgopts: -q
diff --git a/none/tests/scripts/shell_nointerp3.vgtest b/none/tests/scripts/shell_nointerp3.vgtest
deleted file mode 100644
index 7ef940b..0000000
--- a/none/tests/scripts/shell_nointerp3.vgtest
+++ /dev/null
@@ -1,2 +0,0 @@
-prog: shell_nointerp3
-vgopts: -q
diff --git a/none/tests/solaris/Makefile.am b/none/tests/solaris/Makefile.am
new file mode 100644
index 0000000..1860bf8
--- /dev/null
+++ b/none/tests/solaris/Makefile.am
@@ -0,0 +1,72 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = \
+	filter_coredump_many_threads_post \
+	filter_coredump_many_threads_stderr \
+	filter_stderr
+
+EXTRA_DIST = \
+	block_all_signals.stderr.exp block_all_signals.stdout.exp block_all_signals.vgtest \
+	blockfault.stderr.exp blockfault.vgtest \
+	context_link.stderr.exp context_link.stdout.exp context_link.vgtest \
+	context_link2.stderr.exp context_link2.stdout.exp context_link2.vgtest \
+	context_null.stderr.exp context_null.stdout.exp context_null.vgtest \
+	context_stack.stderr.exp context_stack.stdout.exp context_stack.vgtest \
+	coredump_many_threads.post.exp coredump_many_threads.stderr.exp coredump_many_threads.vgtest \
+	mmap_noreserve.stderr.exp mmap_noreserve.stdout.exp mmap_noreserve.vgtest \
+	proc_aout.stderr.exp proc_aout.stdout.exp proc_aout.vgtest \
+	proc_auxv.stderr.exp proc_auxv.stdout.exp proc_auxv.vgtest \
+	proc_auxv_multiple.stderr.exp proc_auxv_multiple.stdout.exp proc_auxv_multiple.vgtest \
+	proc-cmdline-exe.stderr.exp-with-cmdline proc-cmdline-exe.stderr.exp-without-cmdline \
+	    proc-cmdline-exe.vgtest \
+	proc_psinfo.stderr.exp proc_psinfo.stdout.exp proc_psinfo.vgtest \
+	posix_spawn.stderr.exp posix_spawn.stdout.exp posix_spawn.vgtest \
+	pthread-stack.stderr.exp pthread-stack.vgtest \
+	reserve_sysstat_addr.map reserve_sysstat_addr.stderr.exp reserve_sysstat_addr.vgtest \
+	reserve_sysstat_zone_addr.map reserve_sysstat_zone_addr.stderr.exp reserve_sysstat_zone_addr.vgtest \
+	resolv.stdout.exp resolv.stderr.exp resolv.vgtest \
+	sigresend.stderr.exp sigresend.stdout.exp sigresend.vgtest \
+	stack-overflow.stderr.exp stack-overflow.vgtest \
+	stack_prot.stderr.exp stack_prot.stdout.exp stack_prot.vgtest \
+	threads_exitall.stderr.exp threads_exitall.stdout.exp threads_exitall.vgtest
+
+check_PROGRAMS = \
+	block_all_signals \
+	blockfault \
+	context_link \
+	context_link2 \
+	context_null \
+	context_stack \
+	coredump_many_segments \
+	coredump_many_threads \
+	mmap_noreserve \
+	proc_aout \
+	proc_auxv \
+	proc_auxv_multiple \
+	proc_psinfo \
+	posix_spawn \
+	pthread-stack \
+	resolv \
+	sigresend \
+	stack-overflow \
+	stack_prot \
+	threads_exitall
+
+AM_CFLAGS   += $(AM_FLAG_M3264_PRI)
+AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
+
+pthread_stack_LDADD = -lpthread
+resolv_LDADD = -lresolv
+stack_prot_LDFLAGS = -Wl,-M,/usr/lib/ld/map.noexstk
+threads_exitall_LDADD = -lpthread
+
+if SOLARIS_RESERVE_SYSSTAT_ADDR
+check_PROGRAMS += reserve_sysstat_addr
+reserve_sysstat_addr_LDFLAGS = -Wl,-M,reserve_sysstat_addr.map
+endif
+
+if SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR
+check_PROGRAMS += reserve_sysstat_zone_addr
+reserve_sysstat_zone_addr_LDFLAGS = -Wl,-M,reserve_sysstat_zone_addr.map
+endif
diff --git a/none/tests/solaris/block_all_signals.c b/none/tests/solaris/block_all_signals.c
new file mode 100644
index 0000000..b0d23c2
--- /dev/null
+++ b/none/tests/solaris/block_all_signals.c
@@ -0,0 +1,64 @@
+/* Tests that Valgrind retains control over blocked signals.
+   If synchronous signals (SIGSEGV) would be blocked, kernel would
+   simply kill the process. When operating properly, Valgrind involves
+   its synchronous signal handler and reports on the signal delivery.
+
+   Valgrind and libc all retain their sigmasks and lie to us politely
+   about what the actual sigmask is. One of reliable tests is to fork
+   another process (because libc thinks it blocks all signals before fork
+   and the forked process inherits the sigmask) and try to SIGSEGV it.
+ */
+
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+int main(void)
+{
+   pid_t pid = fork();
+   if (pid < 0) {
+      perror("fork");
+      exit(1);
+   } else if (pid == 0) {
+      /* Causes SIGSEGV. */
+      char *s = NULL;
+      s[0] = 1;
+   } else {
+      pid_t ret;
+      int status;
+      
+      while ((ret = waitpid(pid, &status, 0)) != pid) {
+         if (errno != EINTR) {
+            perror("waitpid");
+            exit(1);
+         }
+      }
+
+      if (WIFSIGNALED(status)) {
+         assert(WTERMSIG(status) != 0);
+
+         if (WTERMSIG(status) == SIGSEGV) {
+            printf("PASS\n");
+         } else {
+            fprintf(stderr, "Child process died with unexpected signal %d.\n",
+                    WTERMSIG(status));
+         }
+      } else if (WIFEXITED(status)) {
+         if (WEXITSTATUS(status) == 0) {
+            fprintf(stderr, "Child process exited without expected SIGSEGV "
+                    "signal.\n");
+         } else {
+            fprintf(stderr, "Child process exited with unexpected status %d.\n",
+                    WEXITSTATUS(status));
+         }
+      } else {
+         fprintf(stderr, "Unrecognized status of child proces %x?\n", status);
+      }
+   }
+
+   return 0;
+}
+
diff --git a/none/tests/solaris/block_all_signals.stderr.exp b/none/tests/solaris/block_all_signals.stderr.exp
new file mode 100644
index 0000000..8e49f7b
--- /dev/null
+++ b/none/tests/solaris/block_all_signals.stderr.exp
@@ -0,0 +1,12 @@
+
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Access not within mapped region at address 0x........
+   at 0x........: main (block_all_signals.c:28)
+ If you believe this happened as a result of a stack
+ overflow in your program's main thread (unlikely but
+ possible), you can try to increase the size of the
+ main thread stack using the --main-stacksize= flag.
+ The main thread stack size used in this run was ....
+
+
diff --git a/none/tests/solaris/block_all_signals.stdout.exp b/none/tests/solaris/block_all_signals.stdout.exp
new file mode 100644
index 0000000..7ef22e9
--- /dev/null
+++ b/none/tests/solaris/block_all_signals.stdout.exp
@@ -0,0 +1 @@
+PASS
diff --git a/none/tests/solaris/block_all_signals.vgtest b/none/tests/solaris/block_all_signals.vgtest
new file mode 100644
index 0000000..73bbe5a
--- /dev/null
+++ b/none/tests/solaris/block_all_signals.vgtest
@@ -0,0 +1,4 @@
+prog: block_all_signals
+vgopts: --trace-children=yes
+stderr_filter: filter_stderr
+cleanup: rm -f vgcore.*
diff --git a/none/tests/solaris/blockfault.c b/none/tests/solaris/blockfault.c
new file mode 100644
index 0000000..c11c7c5
--- /dev/null
+++ b/none/tests/solaris/blockfault.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include "tests/sys_mman.h"
+
+static void handler(int sig, siginfo_t *info, void *v)
+{
+	printf("info: sig=%d code=%d addr=%p\n",
+	       info->si_signo, info->si_code, info->si_addr);
+	exit(0);
+}
+
+/* Blocking a fault (for example SIGSEGV) won't work,
+   and is the same as having the default handler. */
+int main()
+{
+	int* unmapped_page = get_unmapped_page();
+	struct sigaction sa;
+	sigset_t mask;
+
+	sa.sa_sigaction = handler;
+	sigemptyset(&sa.sa_mask);
+	sa.sa_flags = SA_SIGINFO;
+	
+	sigaction(SIGSEGV, &sa, NULL);
+
+	sigfillset(&mask);
+	sigprocmask(SIG_BLOCK, &mask, NULL);
+
+	*(volatile int *)unmapped_page = 213;
+
+	return 0;
+}
diff --git a/none/tests/solaris/blockfault.stderr.exp b/none/tests/solaris/blockfault.stderr.exp
new file mode 100644
index 0000000..b57c037
--- /dev/null
+++ b/none/tests/solaris/blockfault.stderr.exp
@@ -0,0 +1,11 @@
+
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Access not within mapped region at address 0x........
+   at 0x........: main (blockfault.c:30)
+ If you believe this happened as a result of a stack
+ overflow in your program's main thread (unlikely but
+ possible), you can try to increase the size of the
+ main thread stack using the --main-stacksize= flag.
+ The main thread stack size used in this run was ....
+
diff --git a/none/tests/solaris/blockfault.vgtest b/none/tests/solaris/blockfault.vgtest
new file mode 100644
index 0000000..084f579
--- /dev/null
+++ b/none/tests/solaris/blockfault.vgtest
@@ -0,0 +1,2 @@
+prog: blockfault
+post: rm -f vgcore.*
diff --git a/none/tests/solaris/context_link.c b/none/tests/solaris/context_link.c
new file mode 100644
index 0000000..6d2f457
--- /dev/null
+++ b/none/tests/solaris/context_link.c
@@ -0,0 +1,38 @@
+/* Test of correct simulation for uc->uc_link. */
+
+#include <assert.h>
+#include <stdio.h>
+#include <ucontext.h>
+
+static void print_value(int value)
+{
+   printf("Value is %d.\n", value);
+}
+
+int main(void)
+{
+   ucontext_t uc;
+   char stack[8096];
+   volatile int done = 0;
+
+   /* Get current context. */
+   getcontext(&uc);
+   if (done) {
+      /* Execution resumes here when print_value() returns. */
+      return 0;
+   }
+   done = 1;
+
+   /* Setup the stack. */
+   uc.uc_stack.ss_sp = stack;
+   uc.uc_stack.ss_size = sizeof(stack);
+
+   /* Call print_value(). */
+   makecontext(&uc, print_value, 1, 42);
+   setcontext(&uc);
+
+   /* This code should not be reached. */
+   assert(0);
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/context_link.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/context_link.stderr.exp
diff --git a/none/tests/solaris/context_link.stdout.exp b/none/tests/solaris/context_link.stdout.exp
new file mode 100644
index 0000000..835e408
--- /dev/null
+++ b/none/tests/solaris/context_link.stdout.exp
@@ -0,0 +1 @@
+Value is 42.
diff --git a/none/tests/solaris/context_link.vgtest b/none/tests/solaris/context_link.vgtest
new file mode 100644
index 0000000..bdcecfd
--- /dev/null
+++ b/none/tests/solaris/context_link.vgtest
@@ -0,0 +1,2 @@
+prog: context_link
+vgopts: -q
diff --git a/none/tests/solaris/context_link2.c b/none/tests/solaris/context_link2.c
new file mode 100644
index 0000000..9d64b6b
--- /dev/null
+++ b/none/tests/solaris/context_link2.c
@@ -0,0 +1,48 @@
+/* Test of correct simulation for uc->uc_link in a signal handler. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <ucontext.h>
+
+static void sighandler(int sig, siginfo_t *sip, ucontext_t *ucp)
+{
+   ucontext_t uc2;
+
+   /* Current uc_link value has to be equal to ucp. */
+   getcontext(&uc2);
+   assert(uc2.uc_link == ucp);
+}
+
+int main(void)
+{
+   ucontext_t uc;
+   struct sigaction sa;
+
+   /* Current uc_link value has to be NULL. */
+   if (getcontext(&uc)) {
+      perror("getcontext");
+      return 1;
+   }
+   assert(!uc.uc_link);
+
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   raise(SIGUSR1);
+
+   /* Current uc_link value has to be NULL. */
+   getcontext(&uc);
+   assert(!uc.uc_link);
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp2.stderr.exp b/none/tests/solaris/context_link2.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp2.stderr.exp
copy to none/tests/solaris/context_link2.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/context_link2.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/context_link2.stdout.exp
diff --git a/none/tests/solaris/context_link2.vgtest b/none/tests/solaris/context_link2.vgtest
new file mode 100644
index 0000000..a0a7416
--- /dev/null
+++ b/none/tests/solaris/context_link2.vgtest
@@ -0,0 +1,2 @@
+prog: context_link2
+vgopts: -q
diff --git a/none/tests/solaris/context_null.c b/none/tests/solaris/context_null.c
new file mode 100644
index 0000000..4d206c7
--- /dev/null
+++ b/none/tests/solaris/context_null.c
@@ -0,0 +1,15 @@
+/* Test that setting NULL context causes the thread to exit. */
+
+#include <assert.h>
+#include <sys/syscall.h>
+#include <ucontext.h>
+
+int main(void)
+{
+   syscall(SYS_context, SETCONTEXT, NULL);
+
+   /* This code should not be reached. */
+   assert(0);
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/context_null.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/context_null.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/context_null.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/context_null.stdout.exp
diff --git a/none/tests/solaris/context_null.vgtest b/none/tests/solaris/context_null.vgtest
new file mode 100644
index 0000000..8811696
--- /dev/null
+++ b/none/tests/solaris/context_null.vgtest
@@ -0,0 +1,2 @@
+prog: context_null
+vgopts: -q
diff --git a/none/tests/solaris/context_stack.c b/none/tests/solaris/context_stack.c
new file mode 100644
index 0000000..ff3ade6
--- /dev/null
+++ b/none/tests/solaris/context_stack.c
@@ -0,0 +1,72 @@
+/* Test of correct simulation for active stack. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <ucontext.h>
+
+static char altstack_map[8096];
+static volatile stack_t *sp;
+
+static void sighandler(int sig)
+{
+   /* Check that the alternate stack is active. */
+   assert(sp->ss_sp == altstack_map);
+   assert(sp->ss_size == sizeof(altstack_map));
+   assert(sp->ss_flags == SS_ONSTACK);
+}
+
+int main(void)
+{
+   stack_t mainstack;
+   stack_t altstack;
+   struct sigaction sa;
+   /* Obtain an address inside the stack using a dirty trick. */
+   void *local = &sa;
+
+   /* Get an address for stack definition. */
+   if (getustack((stack_t**)&sp)) {
+      perror("getustack");
+      return 1;
+   }
+
+   /* Check the current stack. */
+   assert(sp->ss_sp <= local);
+   assert(local < (void*)((char*)sp->ss_sp + sp->ss_size));
+   assert(sp->ss_flags == 0);
+
+   /* Backup the current stack. */
+   mainstack = *sp;
+
+   /* Setup a signal handler. */
+   sa.sa_handler = sighandler;
+   sa.sa_flags = SA_ONSTACK;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGUSR1, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   /* Setup an alternate stack. */
+   altstack.ss_sp = altstack_map;
+   altstack.ss_size = sizeof(altstack_map);
+   altstack.ss_flags = 0;
+   if (sigaltstack(&altstack, NULL)) {
+      perror("sigaltstack");
+      return 1;
+   }
+
+   /* Raise a signal. */
+   raise(SIGUSR1);
+
+   /* Check the current stack. */
+   assert(mainstack.ss_sp == sp->ss_sp);
+   assert(mainstack.ss_size == sp->ss_size);
+   assert(mainstack.ss_flags == sp->ss_flags);
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/context_stack.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/context_stack.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/context_stack.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/context_stack.stdout.exp
diff --git a/none/tests/solaris/context_stack.vgtest b/none/tests/solaris/context_stack.vgtest
new file mode 100644
index 0000000..4876b1b
--- /dev/null
+++ b/none/tests/solaris/context_stack.vgtest
@@ -0,0 +1,2 @@
+prog: context_stack
+vgopts: -q
diff --git a/none/tests/solaris/coredump_many_segments.c b/none/tests/solaris/coredump_many_segments.c
new file mode 100644
index 0000000..e5868e5
--- /dev/null
+++ b/none/tests/solaris/coredump_many_segments.c
@@ -0,0 +1,234 @@
+/* Tests that Valgrind coredump support works correctly even when
+   number of segments exceeds 0xffff.
+   For this to work, large number of pages is mmap()'ed into the
+   process (virtual) address space. These pages must not be adjacent
+   to each other otherwise the memory manager will coalesce them
+   into a single one. So they are one page apart.
+
+   NOTE: Valgrind's internal limit VG_N_SEGMENTS must be at least
+   140000 otherwise you get a fatal error similar to this one:
+       "FATAL: VG_N_SEGMENTS is too low."
+
+   Test case passes successfully if the number of segments is
+   correctly displayed in elfdump output:
+
+   $ elfdump -e vgcore.*
+ELF Header
+  ...
+  e_phoff: 0x34  e_phentsize: 32  e_phnum: PN_XNUM (see shdr[0].sh_info)
+                                  ^^^^^^^^^^^^^^^^
+Section Header[0]:  (ELF Ehdr extensions)
+  ...
+    sh_link: 0 (e_shstrndx)  sh_info: 65554 (e_phnum)
+                             ^^^^^^^^^^^^^^^^^^^^^^^^
+*/ 
+
+#include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/ipc.h>
+#include <sys/mman.h>
+#include <sys/procfs.h>
+#include <sys/stat.h>
+
+#define SEGMENTS (0xffff + 2)
+
+#if 0
+#define DEBUG(format, ...) printf(format, ## __VA_ARGS__)
+#else
+#define DEBUG(format, ...)
+#endif
+
+#define PRINT(format, ...) printf(format, ## __VA_ARGS__)
+
+/* Represents a free range of a virtual address space. */
+typedef struct range {
+   uintptr_t     start;
+   uintptr_t     end;
+   size_t        size;
+   struct range *next;
+} range_t;
+
+/* Processes a single prmap_t entry and builds the free ranges. */
+static int process_map(const prmap_t *map, range_t **ranges_head,
+                       range_t **ranges_tail, size_t page_size)
+{
+   assert(map != NULL);
+   assert(ranges_head != NULL);
+   assert(ranges_tail != NULL);
+
+   range_t *head = *ranges_head;
+   range_t *tail = *ranges_tail;
+
+   DEBUG("processing map with addr=%p and size=%zu\n",
+         map->pr_vaddr, map->pr_size);
+
+   if (head == NULL) {
+      head = calloc(1, sizeof(range_t));
+      if (head == NULL) {
+         fprintf(stderr, "calloc failed\n");
+         return -1;
+      }
+      head->start = (uintptr_t) page_size; // do not start at address '0'
+
+      tail = head;
+      *ranges_head = head;
+      *ranges_tail = tail;
+   }
+
+   if ((map->pr_vaddr < tail->start) ||
+       (map->pr_vaddr - tail->start < 3 * page_size)) {
+      DEBUG("last range at %p is too small, skipping it\n",
+            tail->start);
+      tail->start = map->pr_vaddr + map->pr_size + page_size;
+      return 0;
+   }
+
+   tail->end = map->pr_vaddr - page_size;
+   tail->size = tail->end - tail->start;
+
+   range_t *new_one = calloc(1, sizeof(range_t));
+   if (new_one == NULL) {
+      fprintf(stderr, "calloc failed\n");
+      return -1;
+   }
+
+   new_one->start = map->pr_vaddr + map->pr_size + page_size;
+   tail->next = new_one;
+   *ranges_tail = new_one;
+   return 0;
+}
+
+/* Reads /proc/self/map and builds free ranges. */
+static range_t *read_proc_map(size_t page_size)
+{
+   int fd = open("/proc/self/map", O_RDONLY);
+   if (fd == -1) {
+      int error = errno;
+      fprintf(stderr, "open failed: %s (%d)\n", strerror(error), error);
+      return NULL;
+   }
+
+   prmap_t map;
+   range_t *ranges_head = NULL;
+   range_t *ranges_tail = NULL;
+
+   ssize_t bytes = read(fd, &map, sizeof(map));
+   while (bytes == sizeof(map)) {
+      if (map.pr_size != 0) {
+         if (process_map(&map, &ranges_head, &ranges_tail,
+                         page_size) != 0) {
+            return NULL;
+         }
+      }
+      bytes = read(fd, &map, sizeof(map));
+   }
+
+   if (ranges_tail != NULL) {
+      ranges_tail->end = (uintptr_t) ~0;
+      ranges_tail->size = ranges_tail->end - ranges_tail->start;
+   }
+
+   close(fd);
+   return ranges_head;
+}
+
+static void print_ranges(const range_t *head)
+{
+   while (head != NULL) {
+      DEBUG("free range [%8p - %8p] of size %7zuK\n",
+            head->start, head->end, head->size / 1024);
+      head = head->next;
+   }
+}
+
+static size_t sum_ranges(const range_t *head)
+{
+   size_t sum = 0;
+
+   while (head != NULL) {
+      sum += head->size;
+      head = head->next;
+   }
+
+   return sum;
+}
+
+static void *map_segment(void *fixed_addr)
+{
+   int flags = MAP_NORESERVE | MAP_ANON | MAP_PRIVATE | MAP_FIXED;
+   void *addr = mmap(fixed_addr, 1, PROT_READ | PROT_WRITE,
+                     flags, -1, 0);
+   if (addr == MAP_FAILED) {
+      int error = errno;
+      fprintf(stderr, "mmap failed: %s (%d)\n", strerror(error), error);
+      return NULL;
+   }
+   assert(addr == fixed_addr);
+
+   *((char *) addr) = 1; // make the mmap'ed page dirty
+   // DEBUG("mmap(%8p) = %8p\n", fixed_addr, addr);
+   return addr;
+}
+
+int main(int argc, const char *argv[])
+{
+   long page_size = sysconf(_SC_PAGESIZE);
+   if (page_size == -1) {
+      perror("sysconf");
+      return 1;
+   }
+
+   PRINT("Page size determined as %ld bytes.\n", page_size);
+
+   range_t *ranges = read_proc_map(page_size);
+   print_ranges(ranges);
+
+   size_t sum = sum_ranges(ranges);
+   if (sum < SEGMENTS * page_size) {
+      fprintf(stderr, "Free (virtual) address space cannot accomodate "
+              "%u pages.\n", SEGMENTS);
+      return 1;
+   }
+
+   PRINT("mmap()'ing %u segments:", SEGMENTS);
+   fflush(stdout);
+
+   unsigned int segment = 0;
+   while ((ranges != NULL) && (segment < SEGMENTS)) {
+      unsigned int page;
+      for (page = 0; page < ranges->size / (2 * page_size); page++) {
+         uintptr_t start = ranges->start + 2 * page * page_size;
+         void *addr = map_segment((void *) start);
+         if (addr == NULL) {
+            fprintf(stderr, "Mapping failed for segment %u at address "
+                    "%" PRIxPTR ".\n", segment, start);
+            return 1;
+         }
+
+         segment += 1;
+         if (segment >= SEGMENTS) {
+            break;
+         }
+
+         if (segment % (SEGMENTS / 10) == 0) {
+            PRINT(" %u0%%", segment / (SEGMENTS / 10));
+            fflush(stdout);
+         }
+      }
+      ranges = ranges->next;
+   }
+   assert(segment == SEGMENTS);
+
+   PRINT(".\nDumping core...\n");
+   char *nihil = NULL;
+   *nihil = 0; // SEGV here
+   fprintf(stderr, "Should not reach here.\n");
+
+   return 0;
+}
diff --git a/none/tests/solaris/coredump_many_threads.c b/none/tests/solaris/coredump_many_threads.c
new file mode 100644
index 0000000..1b45a17
--- /dev/null
+++ b/none/tests/solaris/coredump_many_threads.c
@@ -0,0 +1,100 @@
+/*
+ * Creates 8 threads. The fifth one (counting the main thread as well)
+ * causes a core dump.
+ */
+
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define NEVERENDING_SLEEP 10000
+
+static pthread_barrier_t barrier;
+
+static void *thread_func2(void *arg) {
+   pthread_barrier_wait(&barrier);
+   sleep(NEVERENDING_SLEEP);
+   return NULL;
+}
+
+static void *thread_func3(void *arg) {
+   pthread_barrier_wait(&barrier);
+   sleep(NEVERENDING_SLEEP);
+   return NULL;
+}
+
+static void *thread_func4(void *arg) {
+   pthread_barrier_wait(&barrier);
+   sleep(NEVERENDING_SLEEP);
+   return NULL;
+}
+
+static void *thread_func5(void *arg) {
+   pthread_barrier_wait(&barrier);
+   sleep(2);
+
+   char *x = (char *) 0x1;
+   *x = 2;
+   return NULL;
+}
+
+static void *thread_func6(void *arg) {
+   pthread_barrier_wait(&barrier);
+   sleep(NEVERENDING_SLEEP);
+   return NULL;
+}
+
+static void *thread_func7(void *arg) {
+   pthread_barrier_wait(&barrier);
+   sleep(NEVERENDING_SLEEP);
+   return NULL;
+}
+
+static void *thread_func8(void *arg) {
+   pthread_barrier_wait(&barrier);
+   sleep(NEVERENDING_SLEEP);
+   return NULL;
+}
+
+static void *thread_func9(void *arg) {
+   pthread_barrier_wait(&barrier);
+   sleep(NEVERENDING_SLEEP);
+   return NULL;
+}
+
+static void create_thread(void *(*thread_func)(void *))
+{
+   pthread_t thread;
+
+   int ret = pthread_create(&thread, NULL, thread_func, NULL);
+   if (ret != 0) {
+      fprintf(stderr, "pthread_create: %s (%d)\n", strerror(ret), ret);
+      exit(1);
+   }
+}
+
+int main(int argc, const char *argv[])
+{
+   int ret = pthread_barrier_init(&barrier, NULL, 9);
+   if (ret != 0) {
+      fprintf(stderr, "pthread_barrier_init: %s (%d)\n",
+              strerror(ret), ret);
+      exit(1);
+   }
+
+   create_thread(thread_func2);
+   create_thread(thread_func3);
+   create_thread(thread_func4);
+   create_thread(thread_func5);
+   create_thread(thread_func6);
+   create_thread(thread_func7);
+   create_thread(thread_func8);
+   create_thread(thread_func9);
+   pthread_barrier_wait(&barrier);
+
+   sleep(NEVERENDING_SLEEP);
+   return 0;
+}
diff --git a/none/tests/solaris/coredump_many_threads.post.exp b/none/tests/solaris/coredump_many_threads.post.exp
new file mode 100644
index 0000000..5c94dc2
--- /dev/null
+++ b/none/tests/solaris/coredump_many_threads.post.exp
@@ -0,0 +1,59 @@
+---Status---
+debugging core file of coredump_many_t from ...
+initial argv: ./coredump_many_threads
+threading model: native threads
+status: process terminated by SIGSEGV (Segmentation Fault), addr=........
+
+---Stacks---
+THREAD STATE SOBJ COUNT
+5 UNPARKED <NONE> 1
+libc.so.1`_thrp_setup
+libc.so.1`_lwp_start
+
+1 UNPARKED <NONE> 1
+libc.so.1`sleep
+coredump_many_threads`main
+coredump_many_threads`_start
+
+2 UNPARKED <NONE> 1
+libc.so.1`sleep
+coredump_many_threads`thread_func2
+libc.so.1`_thrp_setup
+libc.so.1`_lwp_start
+
+3 UNPARKED <NONE> 1
+libc.so.1`sleep
+coredump_many_threads`thread_func3
+libc.so.1`_thrp_setup
+libc.so.1`_lwp_start
+
+4 UNPARKED <NONE> 1
+libc.so.1`sleep
+coredump_many_threads`thread_func4
+libc.so.1`_thrp_setup
+libc.so.1`_lwp_start
+
+6 UNPARKED <NONE> 1
+libc.so.1`sleep
+coredump_many_threads`thread_func6
+libc.so.1`_thrp_setup
+libc.so.1`_lwp_start
+
+7 UNPARKED <NONE> 1
+libc.so.1`sleep
+coredump_many_threads`thread_func7
+libc.so.1`_thrp_setup
+libc.so.1`_lwp_start
+
+8 UNPARKED <NONE> 1
+libc.so.1`sleep
+coredump_many_threads`thread_func8
+libc.so.1`_thrp_setup
+libc.so.1`_lwp_start
+
+9 UNPARKED <NONE> 1
+libc.so.1`sleep
+coredump_many_threads`thread_func9
+libc.so.1`_thrp_setup
+libc.so.1`_lwp_start
+
diff --git a/none/tests/solaris/coredump_many_threads.stderr.exp b/none/tests/solaris/coredump_many_threads.stderr.exp
new file mode 100644
index 0000000..3ffdf6d
--- /dev/null
+++ b/none/tests/solaris/coredump_many_threads.stderr.exp
@@ -0,0 +1,11 @@
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Access not within mapped region at address 0x........
+   at 0x........: thread_func5 (coredump_many_threads.c:40)
+   by 0x........: _thrp_setup (in /...libc...)
+   by 0x........: ??? (in /...libc...)
+ If you believe this happened as a result of a stack
+ overflow in your program's main thread (unlikely but
+ possible), you can try to increase the size of the
+ main thread stack using the --main-stacksize= flag.
+ The main thread stack size used in this run was ....
diff --git a/none/tests/solaris/coredump_many_threads.vgtest b/none/tests/solaris/coredump_many_threads.vgtest
new file mode 100644
index 0000000..807751b
--- /dev/null
+++ b/none/tests/solaris/coredump_many_threads.vgtest
@@ -0,0 +1,6 @@
+prereq: rm -f vgcore.*
+prog: coredump_many_threads
+vgopts: -q
+stderr_filter: ./filter_coredump_many_threads_stderr
+post: ./filter_coredump_many_threads_post
+cleanup: rm -f vgcore.*
diff --git a/none/tests/solaris/filter_coredump_many_threads_post b/none/tests/solaris/filter_coredump_many_threads_post
new file mode 100755
index 0000000..5a893a2
--- /dev/null
+++ b/none/tests/solaris/filter_coredump_many_threads_post
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Filters are not run for post-test check commands.
+# Filter everything here.
+
+echo "---Status---"
+echo "::status" | /usr/bin/mdb vgcore.* | \
+perl -p -e 's/\(.*\) from \S*$/from .../' | \
+perl -0 -p -e 's/^file: .+?^(initial argv:)/$1/ms' | \
+perl -p -e 's/addr=[0-9A-Fa-f]+/addr=......../g'
+
+echo "\n---Stacks---"
+echo "::stacks ! perl -p -e 's/^(\S+)\+.*/\$1/g'" | /usr/bin/mdb vgcore.* | \
+perl -p -e 's/^(THREAD)\s+(STATE)\s+(SOBJ)\s+(COUNT)\s*$/$1 $2 $3 $4\n/' | \
+perl -p -e 's/^(\d+)\s+(UNPARKED)\s+(\S+)\s+(\d+)/$1 $2 $3 $4/g' | \
+perl -p -e 's/^\s*libc.*.so.1/libc.so.1/g' | \
+perl -p -e 's/^\s*(coredump_many_threads)/$1/g' | \
+perl -p -e 's/\+0x[0-9A-Fa-f]+//g'
diff --git a/none/tests/solaris/filter_coredump_many_threads_stderr b/none/tests/solaris/filter_coredump_many_threads_stderr
new file mode 100755
index 0000000..449556d
--- /dev/null
+++ b/none/tests/solaris/filter_coredump_many_threads_stderr
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+# Sometimes valgrind on amd64 prints smt_pause() instead of ???
+# for the top-most stack frame. Filter it here.
+
+./filter_stderr | \
+sed -e 's/smt_pause/???/'
diff --git a/none/tests/solaris/filter_stderr b/none/tests/solaris/filter_stderr
new file mode 100755
index 0000000..0ae9313
--- /dev/null
+++ b/none/tests/solaris/filter_stderr
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr
diff --git a/none/tests/solaris/mmap_noreserve.c b/none/tests/solaris/mmap_noreserve.c
new file mode 100644
index 0000000..975e951
--- /dev/null
+++ b/none/tests/solaris/mmap_noreserve.c
@@ -0,0 +1,90 @@
+/* Maps several pages with or without MAP_NORESEVE.
+   Mappings with MAP_NORESEVE do not show in /proc/self/xmap
+   (only in /proc/self/rmap) until they actually materialize.
+   Very nice from Solaris kernel :-(
+ */
+
+#include <dlfcn.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <wait.h>
+#include <sys/mman.h>
+#include <sys/param.h>
+
+static void *do_map(int flags)
+{
+   flags |= MAP_PRIVATE | MAP_ANON;
+   void *addr = mmap(0, PAGESIZE, PROT_READ | PROT_WRITE, flags, -1, 0);
+   if (addr == NULL) {
+      perror("mmap");
+      exit(1);
+   } else {
+      return addr;
+   }
+}
+
+static void *do_dlopen(const char *pathname)
+{
+   int mode = RTLD_LAZY | RTLD_LOCAL;
+   void *handle = dlopen(pathname, mode);
+   if (handle == NULL) {
+      fprintf(stderr, "dlopen failed for %s: %s",
+              pathname, dlerror());
+      exit(1);
+   } else {
+      return handle;
+   }
+}
+
+int main(int argc, const char *argv[])
+{
+   do_map(MAP_NORESERVE);
+   do_dlopen("libm.so");
+   do_map(0);
+   do_map(0);
+   do_map(MAP_NORESERVE);
+   do_dlopen("liby.so");
+   do_map(MAP_NORESERVE);
+   do_map(0);
+   do_map(0);
+   do_map(MAP_NORESERVE);
+   do_map(MAP_NORESERVE);
+   do_dlopen("libz.so");
+   do_map(MAP_NORESERVE);
+   do_map(MAP_NORESERVE);
+   do_map(0);
+
+   pid_t pid = fork();
+   if (pid == -1) {
+      perror("fork");
+      exit(1);
+   }
+
+   if (pid == 0) {
+      do_map(MAP_NORESERVE);
+      do_map(0);
+      do_map(0);
+      do_dlopen("libw.so");
+      do_map(0);
+      do_map(MAP_NORESERVE);
+      do_map(MAP_NORESERVE);
+      do_map(0);
+      printf("CHILD: PASSED\n");
+      fflush(stdout);
+      return 0;
+   }
+
+   int status;
+   if (waitpid(pid, &status, 0) != pid) {
+      perror("waitpid");
+   } else if ((WIFEXITED(status) != 0) && (WEXITSTATUS(status) == 0)) {
+      printf("PASSED\n");
+   } else {
+      fprintf(stderr, "FAILED: child exited with unexpected status %s %d\n",
+              WIFEXITED(status) ? "exit" : "signal", 
+              WIFEXITED(status) ? WEXITSTATUS(status) : WTERMSIG(status));
+   }
+
+   return 0;
+}
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/mmap_noreserve.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/mmap_noreserve.stderr.exp
diff --git a/none/tests/solaris/mmap_noreserve.stdout.exp b/none/tests/solaris/mmap_noreserve.stdout.exp
new file mode 100644
index 0000000..44ea7f1
--- /dev/null
+++ b/none/tests/solaris/mmap_noreserve.stdout.exp
@@ -0,0 +1,2 @@
+CHILD: PASSED
+PASSED
diff --git a/none/tests/solaris/mmap_noreserve.vgtest b/none/tests/solaris/mmap_noreserve.vgtest
new file mode 100644
index 0000000..915c260
--- /dev/null
+++ b/none/tests/solaris/mmap_noreserve.vgtest
@@ -0,0 +1,3 @@
+prog: mmap_noreserve
+vgopts: -q --sanity-level=3
+stderr_filter: filter_stderr
diff --git a/none/tests/solaris/posix_spawn.c b/none/tests/solaris/posix_spawn.c
new file mode 100644
index 0000000..d37ecd1
--- /dev/null
+++ b/none/tests/solaris/posix_spawn.c
@@ -0,0 +1,54 @@
+/* Test that an error from posix_spawn() is correctly propagated to the
+   parent. */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <spawn.h>
+
+int main(void)
+{
+   int res = 1;
+   int err;
+   posix_spawn_file_actions_t file_actions;
+   char *argv_exe[] = {"true", NULL};
+   char *envv_exe[] = {NULL};
+
+   err = posix_spawn_file_actions_init(&file_actions);
+   if (err != 0) {
+      errno = err;
+      perror("posix_spawn_file_actions_init");
+      return 1;
+   }
+
+   err = posix_spawn_file_actions_adddup2(&file_actions, 3, 4);
+   if (err != 0) {
+      errno = err;
+      perror("posix_spawn_file_actions_adddup2");
+      goto out;
+   }
+
+   /* The following call to posix_spawn() should fail because the requested
+      dup2 action cannot be performed. */
+   err = posix_spawn(NULL, "/bin/true", &file_actions, NULL, argv_exe,
+                     envv_exe);
+   if (err != 0) {
+      errno = err;
+      perror("posix_spawn");
+      goto out;
+   }
+
+   res = 0;
+
+out:
+   err = posix_spawn_file_actions_destroy(&file_actions);
+   if (err != 0) {
+      errno = err;
+      perror("posix_spawn_file_actions_destroy");
+      res = 1;
+   }
+
+   return res;
+}
+
diff --git a/none/tests/solaris/posix_spawn.stderr.exp b/none/tests/solaris/posix_spawn.stderr.exp
new file mode 100644
index 0000000..017e9cf
--- /dev/null
+++ b/none/tests/solaris/posix_spawn.stderr.exp
@@ -0,0 +1 @@
+posix_spawn: Bad file number
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/posix_spawn.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/posix_spawn.stdout.exp
diff --git a/none/tests/solaris/posix_spawn.vgtest b/none/tests/solaris/posix_spawn.vgtest
new file mode 100644
index 0000000..38f7fdd
--- /dev/null
+++ b/none/tests/solaris/posix_spawn.vgtest
@@ -0,0 +1,2 @@
+prog: posix_spawn
+vgopts: -q
diff --git a/none/tests/solaris/proc-cmdline-exe.stderr.exp-with-cmdline b/none/tests/solaris/proc-cmdline-exe.stderr.exp-with-cmdline
new file mode 100644
index 0000000..6fd6f13
--- /dev/null
+++ b/none/tests/solaris/proc-cmdline-exe.stderr.exp-with-cmdline
@@ -0,0 +1,10 @@
+
+/proc/self/cmdline:
+./../procfs-cmdline-exe\0arg1\0arg 2\0arg3\0
+/proc/<pid>/cmdline:
+./../procfs-cmdline-exe\0arg1\0arg 2\0arg3\0
+readlink: No such file or directory
+readlink: No such file or directory
+readlinkat: No such file or directory
+readlinkat: No such file or directory
+
diff --git a/none/tests/solaris/proc-cmdline-exe.stderr.exp-without-cmdline b/none/tests/solaris/proc-cmdline-exe.stderr.exp-without-cmdline
new file mode 100644
index 0000000..9d656f7
--- /dev/null
+++ b/none/tests/solaris/proc-cmdline-exe.stderr.exp-without-cmdline
@@ -0,0 +1,10 @@
+
+/proc/self/cmdline:
+open(): No such file or directory
+/proc/<pid>/cmdline:
+open(): No such file or directory
+readlink: No such file or directory
+readlink: No such file or directory
+readlinkat: No such file or directory
+readlinkat: No such file or directory
+
diff --git a/none/tests/solaris/proc-cmdline-exe.vgtest b/none/tests/solaris/proc-cmdline-exe.vgtest
new file mode 100644
index 0000000..117dd9f
--- /dev/null
+++ b/none/tests/solaris/proc-cmdline-exe.vgtest
@@ -0,0 +1,3 @@
+prog: ../procfs-cmdline-exe
+args: arg1 "arg 2" arg3
+stderr_filter: filter_stderr
diff --git a/none/tests/solaris/proc_aout.c b/none/tests/solaris/proc_aout.c
new file mode 100644
index 0000000..872426e
--- /dev/null
+++ b/none/tests/solaris/proc_aout.c
@@ -0,0 +1,71 @@
+/* Test whether /proc/{self,$PID}/path/a.out is correctly simulated. */
+
+#include <limits.h>
+#include <stdio.h>
+#include <strings.h>
+#include <unistd.h>
+#include <sys/fcntl.h>
+
+static void test_readlink(const char *cwd, const char *label,
+      const char *path)
+{
+   char buf[PATH_MAX];
+   int n;
+
+   if ((n = readlink(path, buf, sizeof(buf) - 1)) >= 0) {
+      const char *p;
+      size_t len = strlen(cwd);
+
+      buf[n] = '\0';
+
+      p = buf;
+      if (!strncmp(buf, cwd, len))
+         p += len;
+      printf("Result of readlink(\"%s\"): %s\n", label, p);
+   }
+   else
+      perror("readlink");
+}
+
+static void test_readlinkat(const char *cwd, const char *label,
+      const char *path)
+{
+   char buf[PATH_MAX];
+   int n;
+
+   if ((n = readlinkat(AT_FDCWD, path, buf, sizeof(buf) - 1)) >= 0) {
+      const char *p;
+      size_t len = strlen(cwd);
+
+      buf[n] = '\0';
+
+      p = buf;
+      if (!strncmp(buf, cwd, len))
+         p += len;
+      printf("Result of readlinkat(\"%s\"): %s\n", label, p);
+   }
+   else
+      perror("readlinkat");
+}
+
+int main(void)
+{
+   char cwd[PATH_MAX];
+   char path[PATH_MAX];
+
+   cwd[0] = '\0';
+   if (!getcwd(cwd, sizeof(cwd) - 1)) /* '-1' to make room for '/' */
+      perror("getcwd");
+   strcat(cwd, "/");
+
+   snprintf(path, sizeof(path), "/proc/%ld/path/a.out", (long)getpid());
+
+   test_readlink(cwd, "/proc/self/path/a.out", "/proc/self/path/a.out");
+   test_readlink(cwd, "/proc/<pid>/path/a.out", path);
+
+   test_readlinkat(cwd, "/proc/self/path/a.out", "/proc/self/path/a.out");
+   test_readlinkat(cwd, "/proc/<pid>/path/a.out", path);
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/proc_aout.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/proc_aout.stderr.exp
diff --git a/none/tests/solaris/proc_aout.stdout.exp b/none/tests/solaris/proc_aout.stdout.exp
new file mode 100644
index 0000000..49f3e01
--- /dev/null
+++ b/none/tests/solaris/proc_aout.stdout.exp
@@ -0,0 +1,4 @@
+Result of readlink("/proc/self/path/a.out"): proc_aout
+Result of readlink("/proc/<pid>/path/a.out"): proc_aout
+Result of readlinkat("/proc/self/path/a.out"): proc_aout
+Result of readlinkat("/proc/<pid>/path/a.out"): proc_aout
diff --git a/none/tests/solaris/proc_aout.vgtest b/none/tests/solaris/proc_aout.vgtest
new file mode 100644
index 0000000..960e758
--- /dev/null
+++ b/none/tests/solaris/proc_aout.vgtest
@@ -0,0 +1,2 @@
+prog: proc_aout
+vgopts: -q
diff --git a/none/tests/solaris/proc_auxv.c b/none/tests/solaris/proc_auxv.c
new file mode 100644
index 0000000..4af8f57
--- /dev/null
+++ b/none/tests/solaris/proc_auxv.c
@@ -0,0 +1,91 @@
+/* Test if /proc/{self,$PID}/auxv is correctly simulated and that the aux
+   vector contains plausible values. */
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/auxv.h>
+#include <sys/fcntl.h>
+
+static int check_file(const char *path, auxv_t *auxv)
+{
+   auxv_t rauxv;
+   int res = 1;
+   FILE *fi;
+
+   if (!(fi = fopen(path, "r"))) {
+      perror("fopen");
+      return 1;
+   }
+   while (1) {
+      if (fread(&rauxv, sizeof(rauxv), 1, fi) != 1) {
+         if (ferror(fi)) {
+            perror("fread");
+            goto out;
+         }
+         fprintf(stderr, "unexpected EOF\n");
+         goto out;
+      }
+      if (memcmp(auxv, &rauxv, sizeof(rauxv))) {
+         fprintf(stderr, "incorrect auxv in %s\n", path);
+         fprintf(stderr, "expected: type=%d, val=%ld\n", auxv->a_type,
+                 auxv->a_un.a_val);
+         fprintf(stderr, "got: type=%d, val=%ld\n", rauxv.a_type,
+                 rauxv.a_un.a_val);
+         goto out;
+      }
+
+      if (auxv->a_type == AT_NULL)
+         break;
+
+      auxv++;
+   }
+
+   res = 0;
+
+out:
+   fclose(fi);
+   return res;
+}
+
+int main(int argc, char *argv[], char *envp[])
+{
+   auxv_t *auxv;
+   char buf[128];
+
+   /* Find aux vector. */
+   while (*envp)
+      envp++;
+   auxv = (auxv_t*)(envp + 1);
+
+   /* /proc/self/auxv check */
+   if (check_file("/proc/self/auxv", auxv))
+      return 1;
+
+   /* /proc/$PID/auxv check */
+   snprintf(buf, sizeof(buf), "/proc/%ld/auxv", (long)getpid());
+   if (check_file(buf, auxv))
+      return 1;
+
+   /* AT_SUN_EXECNAME check */
+   while (auxv->a_type != AT_NULL) {
+      if (auxv->a_type == AT_SUN_EXECNAME) {
+         const char *execname = auxv->a_un.a_ptr;
+         if (!execname) {
+            fprintf(stderr, "AT_SUN_EXECNAME is null\n");
+            return 1;
+         }
+         if (access(execname, R_OK | X_OK)) {
+            fprintf(stderr, "AT_SUN_EXECNAME (%s) is invalid: %s\n",
+                    execname, strerror(errno));
+            return 1;
+         }
+         break;
+      }
+      auxv++;
+   }
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/proc_auxv.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/proc_auxv.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/proc_auxv.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/proc_auxv.stdout.exp
diff --git a/none/tests/solaris/proc_auxv.vgtest b/none/tests/solaris/proc_auxv.vgtest
new file mode 100644
index 0000000..df3a009
--- /dev/null
+++ b/none/tests/solaris/proc_auxv.vgtest
@@ -0,0 +1,2 @@
+prog: proc_auxv
+vgopts: -q
diff --git a/none/tests/solaris/proc_auxv_multiple.c b/none/tests/solaris/proc_auxv_multiple.c
new file mode 100644
index 0000000..a03dbb4
--- /dev/null
+++ b/none/tests/solaris/proc_auxv_multiple.c
@@ -0,0 +1,91 @@
+/* Test that /proc/{self,$PID}/auxv can be opened and read simultaneously
+   using two different file descriptors. */
+
+#include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/auxv.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+/* Reads one auxv_t entry from the input file. */
+int read_entry(int fi, auxv_t *out)
+{
+   size_t toread = sizeof(*out);
+   char *ptr = (char*)out;
+
+   while (toread) {
+      ssize_t r;
+
+      r = read(fi, ptr, toread);
+      if (r == 0) {
+         fprintf(stderr, "unexpected EOF\n");
+         return 1;
+      }
+      if (r == -1) {
+         perror("read");
+         return 1;
+      }
+
+      ptr += r;
+      toread -= r;
+
+      assert(toread >= 0);
+   }
+
+   return 0;
+}
+
+int main(void)
+{
+   auxv_t vector[2][4];
+   int fi[2] = {-1, -1};
+   size_t i;
+   int res = 1;
+
+   /* Open the first input file. */
+   if ((fi[0] = open("/proc/self/auxv", O_RDONLY)) == -1) {
+      perror("open");
+      goto out;
+   }
+
+   /* Read the first two entries from the first file. */
+   for (i = 0; i < 2; i++)
+      if (read_entry(fi[0], &vector[0][i]))
+         goto out;
+
+   /* Open the second input file. */
+   if ((fi[1] = open("/proc/self/auxv", O_RDONLY)) == -1) {
+      perror("open");
+      goto out;
+   }
+
+   /* Read the first two entries from the first file. */
+   for (i = 2; i < 4; i++)
+      if (read_entry(fi[0], &vector[0][i]))
+         goto out;
+
+   /* Read the first four entries from the second file. */
+   for (i = 0; i < 4; i++)
+      if (read_entry(fi[1], &vector[1][i]))
+         goto out;
+
+   /* Compare read vectors. */
+   if (memcmp(vector[0], vector[1], 4 * sizeof(vector[0][0]))) {
+      fprintf(stderr, "vectors differ\n");
+      goto out;
+   }
+
+   res = 0;
+
+out:
+   for (i = 0; i < 2; i++)
+      if (fi[i] >= 0)
+         close(fi[i]);
+
+   return res;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/proc_auxv_multiple.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/proc_auxv_multiple.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/proc_auxv_multiple.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/proc_auxv_multiple.stdout.exp
diff --git a/none/tests/solaris/proc_auxv_multiple.vgtest b/none/tests/solaris/proc_auxv_multiple.vgtest
new file mode 100644
index 0000000..d8dbdb7
--- /dev/null
+++ b/none/tests/solaris/proc_auxv_multiple.vgtest
@@ -0,0 +1,2 @@
+prog: proc_auxv_multiple
+vgopts: -q
diff --git a/none/tests/solaris/proc_psinfo.c b/none/tests/solaris/proc_psinfo.c
new file mode 100644
index 0000000..da4109f
--- /dev/null
+++ b/none/tests/solaris/proc_psinfo.c
@@ -0,0 +1,69 @@
+/*
+ * Reads /proc/self/psinfo such that it can be tested whether Valgrind
+ * intercepts the system calls that access this pseudo-file.
+ */
+
+#include <fcntl.h>
+#include <limits.h>
+#include <procfs.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static void test_psinfo(int op, const char *label,
+                        const char *path)
+{
+   int fd;
+   if (op == 0) {
+      printf("open for %s:\n", label);
+
+      fd = open(path, O_RDONLY); 
+      if (fd < 0) {
+         perror("open");
+         return;
+      }
+   } else {
+      printf("openat for %s:\n", label);
+
+      fd = openat(AT_FDCWD, path, O_RDONLY);
+      if (fd < 0) {
+         perror("openat");
+         return;
+      }
+   }
+
+   psinfo_t psinfo;
+   ssize_t bytes = read(fd, &psinfo, sizeof(psinfo));
+   if (bytes != sizeof(psinfo)) {
+      perror("read");
+      return;
+   }
+
+   printf("fname: %s\n", psinfo.pr_fname);
+   printf("psargs: %s\n", psinfo.pr_psargs);
+
+   printf("argc: %d\n", psinfo.pr_argc);
+   unsigned int i;
+   char **argv = (char **) psinfo.pr_argv;
+   for (i = 0; i < psinfo.pr_argc; i++) {
+      printf("argv[%u]: %s\n", i, argv[i]);
+   }
+
+   close(fd);
+}
+
+int main(int argc, const char *argv[])
+{
+   char path[PATH_MAX];
+   snprintf(path, sizeof(path), "/proc/%ld/psinfo", (long int) getpid());
+
+   test_psinfo(0, "/proc/self/psinfo", "/proc/self/psinfo");
+   printf("\n");
+   test_psinfo(0, "/proc/<pid>/psinfo", path);
+   printf("\n");
+
+   test_psinfo(1, "/proc/self/psinfo", "/proc/self/psinfo");
+   printf("\n");
+   test_psinfo(1, "/proc/<pid>/psinfo", path);
+
+   return 0;
+}
diff --git a/none/tests/solaris/proc_psinfo.stderr.exp b/none/tests/solaris/proc_psinfo.stderr.exp
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/none/tests/solaris/proc_psinfo.stderr.exp
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/solaris/proc_psinfo.stdout.exp b/none/tests/solaris/proc_psinfo.stdout.exp
new file mode 100644
index 0000000..734f6c6
--- /dev/null
+++ b/none/tests/solaris/proc_psinfo.stdout.exp
@@ -0,0 +1,35 @@
+open for /proc/self/psinfo:
+fname: proc_psinfo
+psargs: ./proc_psinfo arg1 arg 2 arg3
+argc: 4
+argv[0]: ./proc_psinfo
+argv[1]: arg1
+argv[2]: arg 2
+argv[3]: arg3
+
+open for /proc/<pid>/psinfo:
+fname: proc_psinfo
+psargs: ./proc_psinfo arg1 arg 2 arg3
+argc: 4
+argv[0]: ./proc_psinfo
+argv[1]: arg1
+argv[2]: arg 2
+argv[3]: arg3
+
+openat for /proc/self/psinfo:
+fname: proc_psinfo
+psargs: ./proc_psinfo arg1 arg 2 arg3
+argc: 4
+argv[0]: ./proc_psinfo
+argv[1]: arg1
+argv[2]: arg 2
+argv[3]: arg3
+
+openat for /proc/<pid>/psinfo:
+fname: proc_psinfo
+psargs: ./proc_psinfo arg1 arg 2 arg3
+argc: 4
+argv[0]: ./proc_psinfo
+argv[1]: arg1
+argv[2]: arg 2
+argv[3]: arg3
diff --git a/none/tests/solaris/proc_psinfo.vgtest b/none/tests/solaris/proc_psinfo.vgtest
new file mode 100644
index 0000000..88fdc8c
--- /dev/null
+++ b/none/tests/solaris/proc_psinfo.vgtest
@@ -0,0 +1,2 @@
+prog: proc_psinfo
+args: arg1 "arg 2" arg3
diff --git a/none/tests/solaris/pthread-stack.c b/none/tests/solaris/pthread-stack.c
new file mode 100644
index 0000000..af589c4
--- /dev/null
+++ b/none/tests/solaris/pthread-stack.c
@@ -0,0 +1,104 @@
+/* This test causes an error in 3.10.1 and earlier versions like so:
+
+==8336== Can't extend stack to 0x4033f98 during signal delivery for thread 2:
+==8336==   no stack segment
+
+  The reason was that only AnonC segments were considered as stack
+  segments. */
+
+#include <assert.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+
+static volatile char *lowest_j;
+static jmp_buf goback;
+
+static void sigsegv_handler(int signr)
+{
+   longjmp(goback, 1);
+}
+
+static void bad_things_till_guard_page(void)
+{
+   fprintf(stderr, "... doing bad things till guard page\n");
+   char j = 0;
+   char *p = &j;
+
+   for (;;) {
+      j = j + *p;
+      p = p - 400;
+      lowest_j = p;
+   }
+}
+
+static void say_something(void)
+{
+  fprintf(stderr, "plugh\n");
+}
+
+static void *child_func(void *arg)
+{
+   if (setjmp(goback))
+      say_something();
+   else
+      bad_things_till_guard_page();
+
+   return NULL;
+}
+
+int main(int argc, const char *argv[])
+{
+   /* We will discover the thread guard page using SEGV.
+      So, prepare a handler. */
+   struct sigaction sa;
+   sa.sa_handler = sigsegv_handler;
+   sigemptyset(&sa.sa_mask);
+   sa.sa_flags = 0;
+   if (sigaction(SIGSEGV, &sa, NULL) != 0)
+      perror("sigaction");
+
+   /* Create a file that will be used as stack for a pthread.  */
+   size_t file_size = 1024 * 1024;
+   const char file_name[] = "FILE";
+   int fd = open(file_name, O_CREAT|O_WRONLY,
+                 S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
+   assert(fd >= 0);
+   void *p = calloc(file_size, 1);
+   assert(p != 0);
+   int written = write(fd, p, file_size);
+   assert(written == file_size);
+   close(fd);
+
+   /* Create a file-based stack for the child. */
+   fd = open(file_name, O_CREAT|O_RDWR,
+             S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
+   assert(fd >= 0);
+   const size_t stack_size = 256 * 1024;
+   assert(stack_size < file_size);
+   void *stack = mmap(NULL, stack_size, PROT_READ|PROT_WRITE,
+                      MAP_PRIVATE, fd, 0);
+   assert(stack != (void *)-1);
+   pthread_attr_t attr;
+   pthread_attr_init(&attr);
+   int r = pthread_attr_setstack(&attr, stack, stack_size);
+   assert(r == 0);
+
+   /* Create child run. */
+   pthread_t child;
+   r = pthread_create(&child, &attr, child_func, NULL);
+   assert(r == 0);
+   r = pthread_join(child, NULL);
+   assert(r == 0);
+
+   /* Remove file */
+   unlink(file_name);
+   return 0;
+}
+
diff --git a/none/tests/solaris/pthread-stack.stderr.exp b/none/tests/solaris/pthread-stack.stderr.exp
new file mode 100644
index 0000000..391e60c
--- /dev/null
+++ b/none/tests/solaris/pthread-stack.stderr.exp
@@ -0,0 +1,2 @@
+... doing bad things till guard page
+plugh
diff --git a/none/tests/solaris/pthread-stack.vgtest b/none/tests/solaris/pthread-stack.vgtest
new file mode 100644
index 0000000..50cafcb
--- /dev/null
+++ b/none/tests/solaris/pthread-stack.vgtest
@@ -0,0 +1,2 @@
+prog: pthread-stack
+vgopts: -q
diff --git a/none/tests/solaris/reserve_sysstat_addr.c b/none/tests/solaris/reserve_sysstat_addr.c
new file mode 100644
index 0000000..9b6bdc2
--- /dev/null
+++ b/none/tests/solaris/reserve_sysstat_addr.c
@@ -0,0 +1,3 @@
+int main(void) {
+    return 0;
+}
diff --git a/none/tests/solaris/reserve_sysstat_addr.map b/none/tests/solaris/reserve_sysstat_addr.map
new file mode 100644
index 0000000..bde3ea3
--- /dev/null
+++ b/none/tests/solaris/reserve_sysstat_addr.map
@@ -0,0 +1,7 @@
+$mapfile_version 2
+
+RESERVE_SEGMENT reserve_sysstat {
+	TYPE  = SYSSTAT;
+	SIZE  = 4096;
+	VADDR = 0x9002000;
+};
diff --git a/none/tests/solaris/reserve_sysstat_addr.stderr.exp b/none/tests/solaris/reserve_sysstat_addr.stderr.exp
new file mode 100644
index 0000000..05d2cc6
--- /dev/null
+++ b/none/tests/solaris/reserve_sysstat_addr.stderr.exp
@@ -0,0 +1,14 @@
+
+Valgrind detected that your program requires
+the following unimplemented functionality:
+   Support for program header PT_SUNW_SYSSTAT.
+This may be because the functionality is hard to implement,
+or because no reasonable program would behave this way,
+or because nobody has yet needed it.  In any case, let us know at
+www.valgrind.org and/or try to work around the problem, if you can.
+
+Valgrind has to exit now.  Sorry.  Bye!
+
+
+sched status:
+  running_tid=0
diff --git a/none/tests/solaris/reserve_sysstat_addr.vgtest b/none/tests/solaris/reserve_sysstat_addr.vgtest
new file mode 100644
index 0000000..c3e8d14
--- /dev/null
+++ b/none/tests/solaris/reserve_sysstat_addr.vgtest
@@ -0,0 +1,3 @@
+prereq: test -e reserve_sysstat_addr
+prog: reserve_sysstat_addr
+vgopts: -q
diff --git a/none/tests/solaris/reserve_sysstat_zone_addr.c b/none/tests/solaris/reserve_sysstat_zone_addr.c
new file mode 100644
index 0000000..9b6bdc2
--- /dev/null
+++ b/none/tests/solaris/reserve_sysstat_zone_addr.c
@@ -0,0 +1,3 @@
+int main(void) {
+    return 0;
+}
diff --git a/none/tests/solaris/reserve_sysstat_zone_addr.map b/none/tests/solaris/reserve_sysstat_zone_addr.map
new file mode 100644
index 0000000..0f20af1
--- /dev/null
+++ b/none/tests/solaris/reserve_sysstat_zone_addr.map
@@ -0,0 +1,7 @@
+$mapfile_version 2
+
+RESERVE_SEGMENT reserve_sysstat_zone {
+	TYPE  = SYSSTAT_ZONE;
+	SIZE  = 4096;
+	VADDR = 0x9004000;
+};
diff --git a/none/tests/solaris/reserve_sysstat_zone_addr.stderr.exp b/none/tests/solaris/reserve_sysstat_zone_addr.stderr.exp
new file mode 100644
index 0000000..e907920
--- /dev/null
+++ b/none/tests/solaris/reserve_sysstat_zone_addr.stderr.exp
@@ -0,0 +1,14 @@
+
+Valgrind detected that your program requires
+the following unimplemented functionality:
+   Support for program header PT_SUNW_SYSSTAT_ZONE.
+This may be because the functionality is hard to implement,
+or because no reasonable program would behave this way,
+or because nobody has yet needed it.  In any case, let us know at
+www.valgrind.org and/or try to work around the problem, if you can.
+
+Valgrind has to exit now.  Sorry.  Bye!
+
+
+sched status:
+  running_tid=0
diff --git a/none/tests/solaris/reserve_sysstat_zone_addr.vgtest b/none/tests/solaris/reserve_sysstat_zone_addr.vgtest
new file mode 100644
index 0000000..e48b278
--- /dev/null
+++ b/none/tests/solaris/reserve_sysstat_zone_addr.vgtest
@@ -0,0 +1,3 @@
+prereq: test -e reserve_sysstat_zone_addr
+prog: reserve_sysstat_zone_addr
+vgopts: -q
diff --git a/none/tests/solaris/resolv.c b/none/tests/solaris/resolv.c
new file mode 100644
index 0000000..078e142
--- /dev/null
+++ b/none/tests/solaris/resolv.c
@@ -0,0 +1,20 @@
+/* Tests initialization of the resolver library.
+ * Adapted from none/tests/resolv for Solaris.
+ */
+
+#include <resolv.h>
+#include <stdio.h>
+#include <strings.h>
+
+int main(int argc, char *argv[])
+{
+   struct __res_state stats;
+   bzero(&stats, sizeof(stats));
+
+   printf("PRE stats->nscount = %d\n", stats.nscount );
+   fflush(stdout);
+   res_ninit(&stats);
+   printf("POST stats->nscount = %d\n", ( int ) stats.nscount > 0 );
+   fflush(stdout);
+   return 0;
+}
diff --git a/none/tests/solaris/resolv.stderr.exp b/none/tests/solaris/resolv.stderr.exp
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/none/tests/solaris/resolv.stderr.exp
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/solaris/resolv.stdout.exp b/none/tests/solaris/resolv.stdout.exp
new file mode 100644
index 0000000..e843305
--- /dev/null
+++ b/none/tests/solaris/resolv.stdout.exp
@@ -0,0 +1,2 @@
+PRE stats->nscount = 0
+POST stats->nscount = 1
diff --git a/none/tests/solaris/resolv.vgtest b/none/tests/solaris/resolv.vgtest
new file mode 100644
index 0000000..e8c1e29
--- /dev/null
+++ b/none/tests/solaris/resolv.vgtest
@@ -0,0 +1 @@
+prog: resolv
diff --git a/none/tests/solaris/sigresend.c b/none/tests/solaris/sigresend.c
new file mode 100644
index 0000000..9ed4aeb
--- /dev/null
+++ b/none/tests/solaris/sigresend.c
@@ -0,0 +1,73 @@
+/* Test to check that the mask parameter of the sigresend syscall is handled
+   correctly. */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+static void signal_handler(int signo, siginfo_t *info, void *uc)
+{
+   ssize_t written;
+   const char str[] = "Signal caught.\n";
+   size_t len = sizeof(str) - 1;
+   sigset_t current;
+
+   written = write(STDOUT_FILENO, str, len);
+   assert(written == len);
+
+   /* Check that SIGUSR1 is already blocked in the signal handler. */
+   assert(!sigprocmask(SIG_BLOCK, NULL, &current));
+   assert(sigismember(&current, SIGUSR1));
+}
+
+int main(void)
+{
+   sigset_t block, current;
+   struct sigaction sa;
+
+   /* Check that SIGUSR1 is unblocked. */
+   if (sigprocmask(0, NULL, &current)) {
+      perror("sigprocmask");
+      return 1;
+   }
+   assert(!sigismember(&current, SIGUSR1));
+
+   /* Establish a SIGINT handler. */
+   sa.sa_sigaction = signal_handler;
+   sa.sa_flags = SA_RESTART | SA_SIGINFO;
+   if (sigfillset(&sa.sa_mask)) {
+      perror("sigfillset");
+      return 1;
+   }
+   if (sigaction(SIGINT, &sa, NULL)) {
+      perror("sigaction");
+      return 1;
+   }
+
+   /* Send us a signal to handle and install a new sigmask. */
+   if (sigemptyset(&block)) {
+      perror("sigemptyset");
+      return 1;
+   }
+   if (sigaddset(&block, SIGUSR1)) {
+      perror("sigaddset");
+      return 1;
+   }
+   if (syscall(SYS_sigresend, SIGINT, NULL, &block)) {
+      fprintf(stderr, "Sigresend failed.\n");
+      return 1;
+   }
+
+   /* Check that SIGUSR1 is now blocked. */
+   if (sigprocmask(SIG_BLOCK, NULL, &current)) {
+      perror("sigprocmask");
+      return 1;
+   }
+   assert(sigismember(&current, SIGUSR1));
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/sigresend.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/sigresend.stderr.exp
diff --git a/none/tests/solaris/sigresend.stdout.exp b/none/tests/solaris/sigresend.stdout.exp
new file mode 100644
index 0000000..a49633f
--- /dev/null
+++ b/none/tests/solaris/sigresend.stdout.exp
@@ -0,0 +1 @@
+Signal caught.
diff --git a/none/tests/solaris/sigresend.vgtest b/none/tests/solaris/sigresend.vgtest
new file mode 100644
index 0000000..6df0094
--- /dev/null
+++ b/none/tests/solaris/sigresend.vgtest
@@ -0,0 +1,2 @@
+prog: sigresend
+vgopts: -q
diff --git a/none/tests/solaris/stack-overflow.c b/none/tests/solaris/stack-overflow.c
new file mode 100644
index 0000000..0ebbfbb
--- /dev/null
+++ b/none/tests/solaris/stack-overflow.c
@@ -0,0 +1,5 @@
+/* There should be a user message about the overflow.
+   Written in a single line so there is no confusion on what line
+   the overflow occurs. */
+
+int main(int argc, char *argv[]) { volatile int arr[1000]; return main(arr[argc%2], 0); }
diff --git a/none/tests/solaris/stack-overflow.stderr.exp b/none/tests/solaris/stack-overflow.stderr.exp
new file mode 100644
index 0000000..dd5e595
--- /dev/null
+++ b/none/tests/solaris/stack-overflow.stderr.exp
@@ -0,0 +1,13 @@
+
+Stack overflow in thread #1: can't grow stack to 0x........
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Access not within mapped region at address 0x........
+Stack overflow in thread #1: can't grow stack to 0x........
+   at 0x........: main (stack-overflow.c:5)
+ If you believe this happened as a result of a stack
+ overflow in your program's main thread (unlikely but
+ possible), you can try to increase the size of the
+ main thread stack using the --main-stacksize= flag.
+ The main thread stack size used in this run was ....
+
diff --git a/none/tests/solaris/stack-overflow.vgtest b/none/tests/solaris/stack-overflow.vgtest
new file mode 100644
index 0000000..3b9ffd4
--- /dev/null
+++ b/none/tests/solaris/stack-overflow.vgtest
@@ -0,0 +1 @@
+prog: stack-overflow
diff --git a/none/tests/solaris/stack_prot.c b/none/tests/solaris/stack_prot.c
new file mode 100644
index 0000000..8376245
--- /dev/null
+++ b/none/tests/solaris/stack_prot.c
@@ -0,0 +1,65 @@
+#include <procfs.h>
+#include <stdio.h>
+
+#define ARRAY_LENGTH(array) (sizeof((array)) / sizeof(0[(array)]))
+
+int main(void)
+{
+   int res = 1;
+   FILE *fi = NULL;
+   prxmap_t map[32];
+   int found = 0;
+   int done = 0;
+   /* Obtain an address inside the stack using a dirty trick. */
+   uintptr_t local = (uintptr_t)&fi;
+
+   /* Open /proc/self/xmap for reading. */
+   fi = fopen("/proc/self/xmap", "r");
+   if (!fi) {
+      perror("fopen");
+      goto out;
+   }
+
+   /* Read the file until EOF or the stack is found. */
+   while (!done && !found) {
+      size_t i, items;
+
+      items = fread(map, sizeof(map[0]), ARRAY_LENGTH(map), fi);
+      if (items != ARRAY_LENGTH(map)) {
+         if (ferror(fi)) {
+            perror("fread");
+            goto out;
+         }
+         done = 1;
+      }
+
+      /* Scan the read mappings. */
+      for (i = 0; i < items; i++)
+         if (map[i].pr_vaddr <= local
+             && local < map[i].pr_vaddr + map[i].pr_size) {
+            /* Stack was found, validate it. */
+            found = 1;
+            if ((map[i].pr_mflags & (MA_READ | MA_WRITE | MA_EXEC))
+                != (MA_READ | MA_WRITE)) {
+               fprintf(stderr, "Incorrect stack mapping detected.\n");
+               goto out;
+            }
+         }
+   }
+
+   /* Check if the stack was indeed found. */
+   if (!found) {
+      fprintf(stderr, "Stack not found.\n");
+      goto out;
+   }
+
+   res = 0;
+
+out:
+   /* Cleanup. */
+   if (fi)
+      fclose(fi);
+
+   return res;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/stack_prot.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/stack_prot.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/stack_prot.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/stack_prot.stdout.exp
diff --git a/none/tests/solaris/stack_prot.vgtest b/none/tests/solaris/stack_prot.vgtest
new file mode 100644
index 0000000..3a3a920
--- /dev/null
+++ b/none/tests/solaris/stack_prot.vgtest
@@ -0,0 +1,2 @@
+prog: stack_prot
+vgopts: -q
diff --git a/none/tests/solaris/threads_exitall.c b/none/tests/solaris/threads_exitall.c
new file mode 100644
index 0000000..4899a1c
--- /dev/null
+++ b/none/tests/solaris/threads_exitall.c
@@ -0,0 +1,39 @@
+/* Test that all threads are killed when exit() is called. */
+
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+void *thread_proc(void *arg)
+{
+   /* Wait for main thread to block. */
+   sleep(2);
+
+   /* Exit the program. */
+   exit(0);
+
+   return NULL;
+}
+
+int main(void)
+{
+   pthread_t thread;
+   void *status;
+
+   if (pthread_create(&thread, NULL, thread_proc, NULL)) {
+      perror("pthread_create");
+      return 1;
+   }
+
+   if (pthread_join(thread, &status)) {
+      perror("pthread_join");
+      return 1;
+   }
+
+   /* This code should not be reached. */
+   fprintf(stderr, "Thread joined\n");
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/threads_exitall.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/threads_exitall.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/solaris/threads_exitall.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/solaris/threads_exitall.stdout.exp
diff --git a/none/tests/solaris/threads_exitall.vgtest b/none/tests/solaris/threads_exitall.vgtest
new file mode 100644
index 0000000..a733071
--- /dev/null
+++ b/none/tests/solaris/threads_exitall.vgtest
@@ -0,0 +1,2 @@
+prog: threads_exitall
+vgopts: -q
diff --git a/none/tests/threadederrno.c b/none/tests/threadederrno.c
index 9d9b0ff..ffc735e 100644
--- a/none/tests/threadederrno.c
+++ b/none/tests/threadederrno.c
@@ -1,3 +1,5 @@
+/* Make sure we use the POSIX version of strerror_r() on Linux. */
+#define _XOPEN_SOURCE 600
 
 #include <pthread.h>
 #include <stdio.h>
@@ -7,27 +9,33 @@
 
 void* thr2 ( void* v )
 {
+  char errstr[128];
   FILE* f = fopen("bogus2", "r");
-  printf("f  = %ld, errno  = %d (%s)\n", (long)f, errno, strerror(errno));
+  strerror_r(errno, errstr, sizeof(errstr));
+  printf("f  = %ld, errno  = %d (%s)\n", (long)f, errno, errstr);
   return NULL;
 }
 
 void* thr3 ( void* v )
 {
+  char errstr[128];
   FILE* f = fopen("bogus3", "r");
-  printf("f  = %ld, errno  = %d (%s)\n", (long)f, errno, strerror(errno));
+  strerror_r(errno, errstr, sizeof(errstr));
+  printf("f  = %ld, errno  = %d (%s)\n", (long)f, errno, errstr);
   return NULL;
 }
 
 
 int main ( void )
 {
+  char errstr[128];
   FILE* f;
   pthread_t tid2, tid3;
   pthread_create(&tid2, NULL, &thr2, NULL);
   pthread_create(&tid3, NULL, &thr3, NULL);
   f = fopen("bogus", "r");
-  printf("f  = %ld, errno  = %d (%s)\n", (long)f, errno, strerror(errno));
+  strerror_r(errno, errstr, sizeof(errstr));
+  printf("f  = %ld, errno  = %d (%s)\n", (long)f, errno, errstr);
   pthread_join(tid2, NULL);
   pthread_join(tid3, NULL);
   return 0;
diff --git a/none/tests/tilegx/Makefile.am b/none/tests/tilegx/Makefile.am
index 086ff43..e779ce6 100644
--- a/none/tests/tilegx/Makefile.am
+++ b/none/tests/tilegx/Makefile.am
@@ -1,13 +1,1617 @@
 
 include $(top_srcdir)/Makefile.tool-tests.am
 
-EXTRA_DIST =
+dist_noinst_SCRIPTS = \
+	filter_stderr
+
+EXTRA_DIST = gen_test.sh
+
+if VGCONF_ARCHS_INCLUDE_TILEGX
+EXTRA_DIST += \
+	insn_test_move_X0.stdout.exp insn_test_move_X0.stderr.exp \
+	 insn_test_move_X0.vgtest \
+	insn_test_move_X1.stdout.exp insn_test_move_X1.stderr.exp \
+	 insn_test_move_X1.vgtest \
+	insn_test_move_Y0.stdout.exp insn_test_move_Y0.stderr.exp \
+	 insn_test_move_Y0.vgtest \
+	insn_test_move_Y1.stdout.exp insn_test_move_Y1.stderr.exp \
+	 insn_test_move_Y1.vgtest \
+	insn_test_movei_X0.stdout.exp insn_test_movei_X0.stderr.exp \
+	 insn_test_movei_X0.vgtest \
+	insn_test_movei_X1.stdout.exp insn_test_movei_X1.stderr.exp \
+	 insn_test_movei_X1.vgtest \
+	insn_test_movei_Y0.stdout.exp insn_test_movei_Y0.stderr.exp \
+	 insn_test_movei_Y0.vgtest \
+	insn_test_movei_Y1.stdout.exp insn_test_movei_Y1.stderr.exp \
+	 insn_test_movei_Y1.vgtest \
+	insn_test_moveli_X0.stdout.exp insn_test_moveli_X0.stderr.exp \
+	 insn_test_moveli_X0.vgtest \
+	insn_test_moveli_X1.stdout.exp insn_test_moveli_X1.stderr.exp \
+	 insn_test_moveli_X1.vgtest \
+	insn_test_prefetch_X1.stdout.exp insn_test_prefetch_X1.stderr.exp \
+	 insn_test_prefetch_X1.vgtest \
+	insn_test_prefetch_Y2.stdout.exp insn_test_prefetch_Y2.stderr.exp \
+	 insn_test_prefetch_Y2.vgtest \
+	insn_test_prefetch_l1_X1.stdout.exp \
+	 insn_test_prefetch_l1_X1.stderr.exp \
+	 insn_test_prefetch_l1_X1.vgtest \
+	insn_test_prefetch_l1_Y2.stdout.exp \
+	 insn_test_prefetch_l1_Y2.stderr.exp \
+	 insn_test_prefetch_l1_Y2.vgtest \
+	insn_test_prefetch_l2_X1.stdout.exp \
+	 insn_test_prefetch_l2_X1.stderr.exp \
+	 insn_test_prefetch_l2_X1.vgtest \
+	insn_test_prefetch_l2_Y2.stdout.exp \
+	 insn_test_prefetch_l2_Y2.stderr.exp \
+	 insn_test_prefetch_l2_Y2.vgtest \
+	insn_test_prefetch_l3_X1.stdout.exp \
+	 insn_test_prefetch_l3_X1.stderr.exp \
+	 insn_test_prefetch_l3_X1.vgtest \
+	insn_test_prefetch_l3_Y2.stdout.exp \
+	 insn_test_prefetch_l3_Y2.stderr.exp \
+	 insn_test_prefetch_l3_Y2.vgtest \
+	insn_test_add_X0.stdout.exp insn_test_add_X0.stderr.exp \
+	 insn_test_add_X0.vgtest \
+	insn_test_add_X1.stdout.exp insn_test_add_X1.stderr.exp \
+	 insn_test_add_X1.vgtest \
+	insn_test_add_Y0.stdout.exp insn_test_add_Y0.stderr.exp \
+	 insn_test_add_Y0.vgtest \
+	insn_test_add_Y1.stdout.exp insn_test_add_Y1.stderr.exp \
+	 insn_test_add_Y1.vgtest \
+	insn_test_addi_X0.stdout.exp insn_test_addi_X0.stderr.exp \
+	 insn_test_addi_X0.vgtest \
+	insn_test_addi_X1.stdout.exp insn_test_addi_X1.stderr.exp \
+	 insn_test_addi_X1.vgtest \
+	insn_test_addi_Y0.stdout.exp insn_test_addi_Y0.stderr.exp \
+	 insn_test_addi_Y0.vgtest \
+	insn_test_addi_Y1.stdout.exp insn_test_addi_Y1.stderr.exp \
+	 insn_test_addi_Y1.vgtest \
+	insn_test_addli_X0.stdout.exp insn_test_addli_X0.stderr.exp \
+	 insn_test_addli_X0.vgtest \
+	insn_test_addli_X1.stdout.exp insn_test_addli_X1.stderr.exp \
+	 insn_test_addli_X1.vgtest \
+	insn_test_addx_X0.stdout.exp insn_test_addx_X0.stderr.exp \
+	 insn_test_addx_X0.vgtest \
+	insn_test_addx_X1.stdout.exp insn_test_addx_X1.stderr.exp \
+	 insn_test_addx_X1.vgtest \
+	insn_test_addx_Y0.stdout.exp insn_test_addx_Y0.stderr.exp \
+	 insn_test_addx_Y0.vgtest \
+	insn_test_addx_Y1.stdout.exp insn_test_addx_Y1.stderr.exp \
+	 insn_test_addx_Y1.vgtest \
+	insn_test_addxi_X0.stdout.exp insn_test_addxi_X0.stderr.exp \
+	 insn_test_addxi_X0.vgtest \
+	insn_test_addxi_X1.stdout.exp insn_test_addxi_X1.stderr.exp \
+	 insn_test_addxi_X1.vgtest \
+	insn_test_addxi_Y0.stdout.exp insn_test_addxi_Y0.stderr.exp \
+	 insn_test_addxi_Y0.vgtest \
+	insn_test_addxi_Y1.stdout.exp insn_test_addxi_Y1.stderr.exp \
+	 insn_test_addxi_Y1.vgtest \
+	insn_test_addxli_X0.stdout.exp insn_test_addxli_X0.stderr.exp \
+	 insn_test_addxli_X0.vgtest \
+	insn_test_addxli_X1.stdout.exp insn_test_addxli_X1.stderr.exp \
+	 insn_test_addxli_X1.vgtest \
+	insn_test_addxsc_X0.stdout.exp insn_test_addxsc_X0.stderr.exp \
+	 insn_test_addxsc_X0.vgtest \
+	insn_test_addxsc_X1.stdout.exp insn_test_addxsc_X1.stderr.exp \
+	 insn_test_addxsc_X1.vgtest \
+	insn_test_and_X0.stdout.exp insn_test_and_X0.stderr.exp \
+	 insn_test_and_X0.vgtest \
+	insn_test_and_X1.stdout.exp insn_test_and_X1.stderr.exp \
+	 insn_test_and_X1.vgtest \
+	insn_test_and_Y0.stdout.exp insn_test_and_Y0.stderr.exp \
+	 insn_test_and_Y0.vgtest \
+	insn_test_and_Y1.stdout.exp insn_test_and_Y1.stderr.exp \
+	 insn_test_and_Y1.vgtest \
+	insn_test_andi_X0.stdout.exp insn_test_andi_X0.stderr.exp \
+	 insn_test_andi_X0.vgtest \
+	insn_test_andi_X1.stdout.exp insn_test_andi_X1.stderr.exp \
+	 insn_test_andi_X1.vgtest \
+	insn_test_andi_Y0.stdout.exp insn_test_andi_Y0.stderr.exp \
+	 insn_test_andi_Y0.vgtest \
+	insn_test_andi_Y1.stdout.exp insn_test_andi_Y1.stderr.exp \
+	 insn_test_andi_Y1.vgtest \
+	insn_test_beqz_X1.stdout.exp insn_test_beqz_X1.stderr.exp \
+	 insn_test_beqz_X1.vgtest \
+	insn_test_beqzt_X1.stdout.exp insn_test_beqzt_X1.stderr.exp \
+	 insn_test_beqzt_X1.vgtest \
+	insn_test_bfexts_X0.stdout.exp insn_test_bfexts_X0.stderr.exp \
+	 insn_test_bfexts_X0.vgtest \
+	insn_test_bfextu_X0.stdout.exp insn_test_bfextu_X0.stderr.exp \
+	 insn_test_bfextu_X0.vgtest \
+	insn_test_bfins_X0.stdout.exp insn_test_bfins_X0.stderr.exp \
+	 insn_test_bfins_X0.vgtest \
+	insn_test_bgez_X1.stdout.exp insn_test_bgez_X1.stderr.exp \
+	 insn_test_bgez_X1.vgtest \
+	insn_test_bgezt_X1.stdout.exp insn_test_bgezt_X1.stderr.exp \
+	 insn_test_bgezt_X1.vgtest \
+	insn_test_bgtz_X1.stdout.exp insn_test_bgtz_X1.stderr.exp \
+	 insn_test_bgtz_X1.vgtest \
+	insn_test_bgtzt_X1.stdout.exp insn_test_bgtzt_X1.stderr.exp \
+	 insn_test_bgtzt_X1.vgtest \
+	insn_test_blbc_X1.stdout.exp insn_test_blbc_X1.stderr.exp \
+	 insn_test_blbc_X1.vgtest \
+	insn_test_blbct_X1.stdout.exp insn_test_blbct_X1.stderr.exp \
+	 insn_test_blbct_X1.vgtest \
+	insn_test_blbs_X1.stdout.exp insn_test_blbs_X1.stderr.exp \
+	 insn_test_blbs_X1.vgtest \
+	insn_test_blbst_X1.stdout.exp insn_test_blbst_X1.stderr.exp \
+	 insn_test_blbst_X1.vgtest \
+	insn_test_blez_X1.stdout.exp insn_test_blez_X1.stderr.exp \
+	 insn_test_blez_X1.vgtest \
+	insn_test_blezt_X1.stdout.exp insn_test_blezt_X1.stderr.exp \
+	 insn_test_blezt_X1.vgtest \
+	insn_test_bltz_X1.stdout.exp insn_test_bltz_X1.stderr.exp \
+	 insn_test_bltz_X1.vgtest \
+	insn_test_bltzt_X1.stdout.exp insn_test_bltzt_X1.stderr.exp \
+	 insn_test_bltzt_X1.vgtest \
+	insn_test_bnez_X1.stdout.exp insn_test_bnez_X1.stderr.exp \
+	 insn_test_bnez_X1.vgtest \
+	insn_test_bnezt_X1.stdout.exp insn_test_bnezt_X1.stderr.exp \
+	 insn_test_bnezt_X1.vgtest \
+	insn_test_clz_X0.stdout.exp insn_test_clz_X0.stderr.exp \
+	 insn_test_clz_X0.vgtest \
+	insn_test_clz_Y0.stdout.exp insn_test_clz_Y0.stderr.exp \
+	 insn_test_clz_Y0.vgtest \
+	insn_test_cmoveqz_X0.stdout.exp insn_test_cmoveqz_X0.stderr.exp \
+	 insn_test_cmoveqz_X0.vgtest \
+	insn_test_cmoveqz_Y0.stdout.exp insn_test_cmoveqz_Y0.stderr.exp \
+	 insn_test_cmoveqz_Y0.vgtest \
+	insn_test_cmovnez_X0.stdout.exp insn_test_cmovnez_X0.stderr.exp \
+	 insn_test_cmovnez_X0.vgtest \
+	insn_test_cmovnez_Y0.stdout.exp insn_test_cmovnez_Y0.stderr.exp \
+	 insn_test_cmovnez_Y0.vgtest \
+	insn_test_cmpeq_X0.stdout.exp insn_test_cmpeq_X0.stderr.exp \
+	 insn_test_cmpeq_X0.vgtest \
+	insn_test_cmpeq_X1.stdout.exp insn_test_cmpeq_X1.stderr.exp \
+	 insn_test_cmpeq_X1.vgtest \
+	insn_test_cmpeq_Y0.stdout.exp insn_test_cmpeq_Y0.stderr.exp \
+	 insn_test_cmpeq_Y0.vgtest \
+	insn_test_cmpeq_Y1.stdout.exp insn_test_cmpeq_Y1.stderr.exp \
+	 insn_test_cmpeq_Y1.vgtest \
+	insn_test_cmpeqi_X0.stdout.exp insn_test_cmpeqi_X0.stderr.exp \
+	 insn_test_cmpeqi_X0.vgtest \
+	insn_test_cmpeqi_X1.stdout.exp insn_test_cmpeqi_X1.stderr.exp \
+	 insn_test_cmpeqi_X1.vgtest \
+	insn_test_cmpeqi_Y0.stdout.exp insn_test_cmpeqi_Y0.stderr.exp \
+	 insn_test_cmpeqi_Y0.vgtest \
+	insn_test_cmpeqi_Y1.stdout.exp insn_test_cmpeqi_Y1.stderr.exp \
+	 insn_test_cmpeqi_Y1.vgtest \
+	insn_test_cmples_X0.stdout.exp insn_test_cmples_X0.stderr.exp \
+	 insn_test_cmples_X0.vgtest \
+	insn_test_cmples_X1.stdout.exp insn_test_cmples_X1.stderr.exp \
+	 insn_test_cmples_X1.vgtest \
+	insn_test_cmples_Y0.stdout.exp insn_test_cmples_Y0.stderr.exp \
+	 insn_test_cmples_Y0.vgtest \
+	insn_test_cmples_Y1.stdout.exp insn_test_cmples_Y1.stderr.exp \
+	 insn_test_cmples_Y1.vgtest \
+	insn_test_cmpleu_X0.stdout.exp insn_test_cmpleu_X0.stderr.exp \
+	 insn_test_cmpleu_X0.vgtest \
+	insn_test_cmpleu_X1.stdout.exp insn_test_cmpleu_X1.stderr.exp \
+	 insn_test_cmpleu_X1.vgtest \
+	insn_test_cmpleu_Y0.stdout.exp insn_test_cmpleu_Y0.stderr.exp \
+	 insn_test_cmpleu_Y0.vgtest \
+	insn_test_cmpleu_Y1.stdout.exp insn_test_cmpleu_Y1.stderr.exp \
+	 insn_test_cmpleu_Y1.vgtest \
+	insn_test_cmplts_X0.stdout.exp insn_test_cmplts_X0.stderr.exp \
+	 insn_test_cmplts_X0.vgtest \
+	insn_test_cmplts_X1.stdout.exp insn_test_cmplts_X1.stderr.exp \
+	 insn_test_cmplts_X1.vgtest \
+	insn_test_cmplts_Y0.stdout.exp insn_test_cmplts_Y0.stderr.exp \
+	 insn_test_cmplts_Y0.vgtest \
+	insn_test_cmplts_Y1.stdout.exp insn_test_cmplts_Y1.stderr.exp \
+	 insn_test_cmplts_Y1.vgtest \
+	insn_test_cmpltsi_X0.stdout.exp insn_test_cmpltsi_X0.stderr.exp \
+	 insn_test_cmpltsi_X0.vgtest \
+	insn_test_cmpltsi_X1.stdout.exp insn_test_cmpltsi_X1.stderr.exp \
+	 insn_test_cmpltsi_X1.vgtest \
+	insn_test_cmpltsi_Y0.stdout.exp insn_test_cmpltsi_Y0.stderr.exp \
+	 insn_test_cmpltsi_Y0.vgtest \
+	insn_test_cmpltsi_Y1.stdout.exp insn_test_cmpltsi_Y1.stderr.exp \
+	 insn_test_cmpltsi_Y1.vgtest \
+	insn_test_cmpltu_X0.stdout.exp insn_test_cmpltu_X0.stderr.exp \
+	 insn_test_cmpltu_X0.vgtest \
+	insn_test_cmpltu_X1.stdout.exp insn_test_cmpltu_X1.stderr.exp \
+	 insn_test_cmpltu_X1.vgtest \
+	insn_test_cmpltu_Y0.stdout.exp insn_test_cmpltu_Y0.stderr.exp \
+	 insn_test_cmpltu_Y0.vgtest \
+	insn_test_cmpltu_Y1.stdout.exp insn_test_cmpltu_Y1.stderr.exp \
+	 insn_test_cmpltu_Y1.vgtest \
+	insn_test_cmpltui_X0.stdout.exp insn_test_cmpltui_X0.stderr.exp \
+	 insn_test_cmpltui_X0.vgtest \
+	insn_test_cmpltui_X1.stdout.exp insn_test_cmpltui_X1.stderr.exp \
+	 insn_test_cmpltui_X1.vgtest \
+	insn_test_cmpne_X0.stdout.exp insn_test_cmpne_X0.stderr.exp \
+	 insn_test_cmpne_X0.vgtest \
+	insn_test_cmpne_X1.stdout.exp insn_test_cmpne_X1.stderr.exp \
+	 insn_test_cmpne_X1.vgtest \
+	insn_test_cmpne_Y0.stdout.exp insn_test_cmpne_Y0.stderr.exp \
+	 insn_test_cmpne_Y0.vgtest \
+	insn_test_cmpne_Y1.stdout.exp insn_test_cmpne_Y1.stderr.exp \
+	 insn_test_cmpne_Y1.vgtest \
+	insn_test_cmul_X0.stdout.exp insn_test_cmul_X0.stderr.exp \
+	 insn_test_cmul_X0.vgtest \
+	insn_test_cmula_X0.stdout.exp insn_test_cmula_X0.stderr.exp \
+	 insn_test_cmula_X0.vgtest \
+	insn_test_cmulaf_X0.stdout.exp insn_test_cmulaf_X0.stderr.exp \
+	 insn_test_cmulaf_X0.vgtest \
+	insn_test_cmulf_X0.stdout.exp insn_test_cmulf_X0.stderr.exp \
+	 insn_test_cmulf_X0.vgtest \
+	insn_test_cmulfr_X0.stdout.exp insn_test_cmulfr_X0.stderr.exp \
+	 insn_test_cmulfr_X0.vgtest \
+	insn_test_cmulh_X0.stdout.exp insn_test_cmulh_X0.stderr.exp \
+	 insn_test_cmulh_X0.vgtest \
+	insn_test_cmulhr_X0.stdout.exp insn_test_cmulhr_X0.stderr.exp \
+	 insn_test_cmulhr_X0.vgtest \
+	insn_test_crc32_32_X0.stdout.exp insn_test_crc32_32_X0.stderr.exp \
+	 insn_test_crc32_32_X0.vgtest \
+	insn_test_crc32_8_X0.stdout.exp insn_test_crc32_8_X0.stderr.exp \
+	 insn_test_crc32_8_X0.vgtest \
+	insn_test_ctz_X0.stdout.exp insn_test_ctz_X0.stderr.exp \
+	 insn_test_ctz_X0.vgtest \
+	insn_test_ctz_Y0.stdout.exp insn_test_ctz_Y0.stderr.exp \
+	 insn_test_ctz_Y0.vgtest \
+	insn_test_dblalign_X0.stdout.exp insn_test_dblalign_X0.stderr.exp \
+	 insn_test_dblalign_X0.vgtest \
+	insn_test_dblalign2_X0.stdout.exp insn_test_dblalign2_X0.stderr.exp \
+	 insn_test_dblalign2_X0.vgtest \
+	insn_test_dblalign2_X1.stdout.exp insn_test_dblalign2_X1.stderr.exp \
+	 insn_test_dblalign2_X1.vgtest \
+	insn_test_dblalign4_X0.stdout.exp insn_test_dblalign4_X0.stderr.exp \
+	 insn_test_dblalign4_X0.vgtest \
+	insn_test_dblalign4_X1.stdout.exp insn_test_dblalign4_X1.stderr.exp \
+	 insn_test_dblalign4_X1.vgtest \
+	insn_test_dblalign6_X0.stdout.exp insn_test_dblalign6_X0.stderr.exp \
+	 insn_test_dblalign6_X0.vgtest \
+	insn_test_dblalign6_X1.stdout.exp insn_test_dblalign6_X1.stderr.exp \
+	 insn_test_dblalign6_X1.vgtest \
+	insn_test_dtlbpr_X1.stdout.exp insn_test_dtlbpr_X1.stderr.exp \
+	 insn_test_dtlbpr_X1.vgtest \
+	insn_test_fdouble_add_flags_X0.stdout.exp \
+	 insn_test_fdouble_add_flags_X0.stderr.exp \
+	 insn_test_fdouble_add_flags_X0.vgtest \
+	insn_test_fdouble_addsub_X0.stdout.exp \
+	 insn_test_fdouble_addsub_X0.stderr.exp \
+	 insn_test_fdouble_addsub_X0.vgtest \
+	insn_test_fdouble_mul_flags_X0.stdout.exp \
+	 insn_test_fdouble_mul_flags_X0.stderr.exp \
+	 insn_test_fdouble_mul_flags_X0.vgtest \
+	insn_test_fdouble_pack1_X0.stdout.exp \
+	 insn_test_fdouble_pack1_X0.stderr.exp \
+	 insn_test_fdouble_pack1_X0.vgtest \
+	insn_test_fdouble_pack2_X0.stdout.exp \
+	 insn_test_fdouble_pack2_X0.stderr.exp \
+	 insn_test_fdouble_pack2_X0.vgtest \
+	insn_test_fdouble_sub_flags_X0.stdout.exp \
+	 insn_test_fdouble_sub_flags_X0.stderr.exp \
+	 insn_test_fdouble_sub_flags_X0.vgtest \
+	insn_test_fdouble_unpack_max_X0.stdout.exp \
+	 insn_test_fdouble_unpack_max_X0.stderr.exp \
+	 insn_test_fdouble_unpack_max_X0.vgtest \
+	insn_test_fdouble_unpack_min_X0.stdout.exp \
+	 insn_test_fdouble_unpack_min_X0.stderr.exp \
+	 insn_test_fdouble_unpack_min_X0.vgtest \
+	insn_test_flushwb_X1.stdout.exp insn_test_flushwb_X1.stderr.exp \
+	 insn_test_flushwb_X1.vgtest \
+	insn_test_fnop_X0.stdout.exp insn_test_fnop_X0.stderr.exp \
+	 insn_test_fnop_X0.vgtest \
+	insn_test_fnop_X1.stdout.exp insn_test_fnop_X1.stderr.exp \
+	 insn_test_fnop_X1.vgtest \
+	insn_test_fnop_Y0.stdout.exp insn_test_fnop_Y0.stderr.exp \
+	 insn_test_fnop_Y0.vgtest \
+	insn_test_fnop_Y1.stdout.exp insn_test_fnop_Y1.stderr.exp \
+	 insn_test_fnop_Y1.vgtest \
+	insn_test_fsingle_add1_X0.stdout.exp \
+	 insn_test_fsingle_add1_X0.stderr.exp \
+	 insn_test_fsingle_add1_X0.vgtest \
+	insn_test_fsingle_addsub2_X0.stdout.exp \
+	 insn_test_fsingle_addsub2_X0.stderr.exp \
+	 insn_test_fsingle_addsub2_X0.vgtest \
+	insn_test_fsingle_mul1_X0.stdout.exp \
+	 insn_test_fsingle_mul1_X0.stderr.exp \
+	 insn_test_fsingle_mul1_X0.vgtest \
+	insn_test_fsingle_mul2_X0.stdout.exp \
+	 insn_test_fsingle_mul2_X0.stderr.exp \
+	 insn_test_fsingle_mul2_X0.vgtest \
+	insn_test_fsingle_pack1_X0.stdout.exp \
+	 insn_test_fsingle_pack1_X0.stderr.exp \
+	 insn_test_fsingle_pack1_X0.vgtest \
+	insn_test_fsingle_pack1_Y0.stdout.exp \
+	 insn_test_fsingle_pack1_Y0.stderr.exp \
+	 insn_test_fsingle_pack1_Y0.vgtest \
+	insn_test_fsingle_pack2_X0.stdout.exp \
+	 insn_test_fsingle_pack2_X0.stderr.exp \
+	 insn_test_fsingle_pack2_X0.vgtest \
+	insn_test_fsingle_sub1_X0.stdout.exp \
+	 insn_test_fsingle_sub1_X0.stderr.exp \
+	 insn_test_fsingle_sub1_X0.vgtest \
+	insn_test_icoh_X1.stdout.exp insn_test_icoh_X1.stderr.exp \
+	 insn_test_icoh_X1.vgtest \
+	insn_test_j_X1.stdout.exp insn_test_j_X1.stderr.exp \
+	 insn_test_j_X1.vgtest \
+	insn_test_jal_X1.stdout.exp insn_test_jal_X1.stderr.exp \
+	 insn_test_jal_X1.vgtest \
+	insn_test_jalr_X1.stdout.exp insn_test_jalr_X1.stderr.exp \
+	 insn_test_jalr_X1.vgtest \
+	insn_test_jalr_Y1.stdout.exp insn_test_jalr_Y1.stderr.exp \
+	 insn_test_jalr_Y1.vgtest \
+	insn_test_jalrp_X1.stdout.exp insn_test_jalrp_X1.stderr.exp \
+	 insn_test_jalrp_X1.vgtest \
+	insn_test_jalrp_Y1.stdout.exp insn_test_jalrp_Y1.stderr.exp \
+	 insn_test_jalrp_Y1.vgtest \
+	insn_test_jr_X1.stdout.exp insn_test_jr_X1.stderr.exp \
+	 insn_test_jr_X1.vgtest \
+	insn_test_jr_Y1.stdout.exp insn_test_jr_Y1.stderr.exp \
+	 insn_test_jr_Y1.vgtest \
+	insn_test_jrp_X1.stdout.exp insn_test_jrp_X1.stderr.exp \
+	 insn_test_jrp_X1.vgtest \
+	insn_test_jrp_Y1.stdout.exp insn_test_jrp_Y1.stderr.exp \
+	 insn_test_jrp_Y1.vgtest \
+	insn_test_ld_X1.stdout.exp insn_test_ld_X1.stderr.exp \
+	 insn_test_ld_X1.vgtest \
+	insn_test_ld_Y2.stdout.exp insn_test_ld_Y2.stderr.exp \
+	 insn_test_ld_Y2.vgtest \
+	insn_test_ld1s_X1.stdout.exp insn_test_ld1s_X1.stderr.exp \
+	 insn_test_ld1s_X1.vgtest \
+	insn_test_ld1s_Y2.stdout.exp insn_test_ld1s_Y2.stderr.exp \
+	 insn_test_ld1s_Y2.vgtest \
+	insn_test_ld1s_add_X1.stdout.exp insn_test_ld1s_add_X1.stderr.exp \
+	 insn_test_ld1s_add_X1.vgtest \
+	insn_test_ld1u_X1.stdout.exp insn_test_ld1u_X1.stderr.exp \
+	 insn_test_ld1u_X1.vgtest \
+	insn_test_ld1u_Y2.stdout.exp insn_test_ld1u_Y2.stderr.exp \
+	 insn_test_ld1u_Y2.vgtest \
+	insn_test_ld1u_add_X1.stdout.exp insn_test_ld1u_add_X1.stderr.exp \
+	 insn_test_ld1u_add_X1.vgtest \
+	insn_test_ld2s_X1.stdout.exp insn_test_ld2s_X1.stderr.exp \
+	 insn_test_ld2s_X1.vgtest \
+	insn_test_ld2s_Y2.stdout.exp insn_test_ld2s_Y2.stderr.exp \
+	 insn_test_ld2s_Y2.vgtest \
+	insn_test_ld2u_X1.stdout.exp insn_test_ld2u_X1.stderr.exp \
+	 insn_test_ld2u_X1.vgtest \
+	insn_test_ld2u_Y2.stdout.exp insn_test_ld2u_Y2.stderr.exp \
+	 insn_test_ld2u_Y2.vgtest \
+	insn_test_ld4s_X1.stdout.exp insn_test_ld4s_X1.stderr.exp \
+	 insn_test_ld4s_X1.vgtest \
+	insn_test_ld4s_add_X1.stdout.exp insn_test_ld4s_add_X1.stderr.exp \
+	 insn_test_ld4s_add_X1.vgtest \
+	insn_test_ld4u_X1.stdout.exp insn_test_ld4u_X1.stderr.exp \
+	 insn_test_ld4u_X1.vgtest \
+	insn_test_ld4u_Y2.stdout.exp insn_test_ld4u_Y2.stderr.exp \
+	 insn_test_ld4u_Y2.vgtest \
+	insn_test_ld4u_add_X1.stdout.exp insn_test_ld4u_add_X1.stderr.exp \
+	 insn_test_ld4u_add_X1.vgtest \
+	insn_test_ld_add_X1.stdout.exp insn_test_ld_add_X1.stderr.exp \
+	 insn_test_ld_add_X1.vgtest \
+	insn_test_ldna_X1.stdout.exp insn_test_ldna_X1.stderr.exp \
+	 insn_test_ldna_X1.vgtest \
+	insn_test_ldna_add_X1.stdout.exp insn_test_ldna_add_X1.stderr.exp \
+	 insn_test_ldna_add_X1.vgtest \
+	insn_test_ldnt_X1.stdout.exp insn_test_ldnt_X1.stderr.exp \
+	 insn_test_ldnt_X1.vgtest \
+	insn_test_ldnt1s_X1.stdout.exp insn_test_ldnt1s_X1.stderr.exp \
+	 insn_test_ldnt1s_X1.vgtest \
+	insn_test_ldnt1s_add_X1.stdout.exp insn_test_ldnt1s_add_X1.stderr.exp \
+	 insn_test_ldnt1s_add_X1.vgtest \
+	insn_test_ldnt1u_X1.stdout.exp insn_test_ldnt1u_X1.stderr.exp \
+	 insn_test_ldnt1u_X1.vgtest \
+	insn_test_ldnt1u_add_X1.stdout.exp insn_test_ldnt1u_add_X1.stderr.exp \
+	 insn_test_ldnt1u_add_X1.vgtest \
+	insn_test_ldnt2s_X1.stdout.exp insn_test_ldnt2s_X1.stderr.exp \
+	 insn_test_ldnt2s_X1.vgtest \
+	insn_test_ldnt2s_add_X1.stdout.exp insn_test_ldnt2s_add_X1.stderr.exp \
+	 insn_test_ldnt2s_add_X1.vgtest \
+	insn_test_ldnt2u_add_X1.stdout.exp insn_test_ldnt2u_add_X1.stderr.exp \
+	 insn_test_ldnt2u_add_X1.vgtest \
+	insn_test_ldnt4s_X1.stdout.exp insn_test_ldnt4s_X1.stderr.exp \
+	 insn_test_ldnt4s_X1.vgtest \
+	insn_test_ldnt4s_add_X1.stdout.exp insn_test_ldnt4s_add_X1.stderr.exp \
+	 insn_test_ldnt4s_add_X1.vgtest \
+	insn_test_ldnt4u_X1.stdout.exp insn_test_ldnt4u_X1.stderr.exp \
+	 insn_test_ldnt4u_X1.vgtest \
+	insn_test_ldnt4u_add_X1.stdout.exp insn_test_ldnt4u_add_X1.stderr.exp \
+	 insn_test_ldnt4u_add_X1.vgtest \
+	insn_test_ldnt_add_X1.stdout.exp insn_test_ldnt_add_X1.stderr.exp \
+	 insn_test_ldnt_add_X1.vgtest \
+	insn_test_lnk_X1.stdout.exp insn_test_lnk_X1.stderr.exp \
+	 insn_test_lnk_X1.vgtest \
+	insn_test_lnk_Y1.stdout.exp insn_test_lnk_Y1.stderr.exp \
+	 insn_test_lnk_Y1.vgtest \
+	insn_test_mf_X1.stdout.exp insn_test_mf_X1.stderr.exp \
+	 insn_test_mf_X1.vgtest \
+	insn_test_mm_X0.stdout.exp insn_test_mm_X0.stderr.exp \
+	 insn_test_mm_X0.vgtest \
+	insn_test_mnz_X0.stdout.exp insn_test_mnz_X0.stderr.exp \
+	 insn_test_mnz_X0.vgtest \
+	insn_test_mnz_X1.stdout.exp insn_test_mnz_X1.stderr.exp \
+	 insn_test_mnz_X1.vgtest \
+	insn_test_mnz_Y0.stdout.exp insn_test_mnz_Y0.stderr.exp \
+	 insn_test_mnz_Y0.vgtest \
+	insn_test_mnz_Y1.stdout.exp insn_test_mnz_Y1.stderr.exp \
+	 insn_test_mnz_Y1.vgtest \
+	insn_test_mul_hs_hs_X0.stdout.exp insn_test_mul_hs_hs_X0.stderr.exp \
+	 insn_test_mul_hs_hs_X0.vgtest \
+	insn_test_mul_hs_hs_Y0.stdout.exp insn_test_mul_hs_hs_Y0.stderr.exp \
+	 insn_test_mul_hs_hs_Y0.vgtest \
+	insn_test_mul_hs_hu_X0.stdout.exp insn_test_mul_hs_hu_X0.stderr.exp \
+	 insn_test_mul_hs_hu_X0.vgtest \
+	insn_test_mul_hs_ls_X0.stdout.exp insn_test_mul_hs_ls_X0.stderr.exp \
+	 insn_test_mul_hs_ls_X0.vgtest \
+	insn_test_mul_hs_lu_X0.stdout.exp insn_test_mul_hs_lu_X0.stderr.exp \
+	 insn_test_mul_hs_lu_X0.vgtest \
+	insn_test_mul_hu_hu_X0.stdout.exp insn_test_mul_hu_hu_X0.stderr.exp \
+	 insn_test_mul_hu_hu_X0.vgtest \
+	insn_test_mul_hu_hu_Y0.stdout.exp insn_test_mul_hu_hu_Y0.stderr.exp \
+	 insn_test_mul_hu_hu_Y0.vgtest \
+	insn_test_mul_hu_lu_X0.stdout.exp insn_test_mul_hu_lu_X0.stderr.exp \
+	 insn_test_mul_hu_lu_X0.vgtest \
+	insn_test_mul_ls_ls_X0.stdout.exp insn_test_mul_ls_ls_X0.stderr.exp \
+	 insn_test_mul_ls_ls_X0.vgtest \
+	insn_test_mul_ls_ls_Y0.stdout.exp insn_test_mul_ls_ls_Y0.stderr.exp \
+	 insn_test_mul_ls_ls_Y0.vgtest \
+	insn_test_mul_ls_lu_X0.stdout.exp insn_test_mul_ls_lu_X0.stderr.exp \
+	 insn_test_mul_ls_lu_X0.vgtest \
+	insn_test_mul_lu_lu_X0.stdout.exp insn_test_mul_lu_lu_X0.stderr.exp \
+	 insn_test_mul_lu_lu_X0.vgtest \
+	insn_test_mul_lu_lu_Y0.stdout.exp insn_test_mul_lu_lu_Y0.stderr.exp \
+	 insn_test_mul_lu_lu_Y0.vgtest \
+	insn_test_mula_hs_hs_X0.stdout.exp insn_test_mula_hs_hs_X0.stderr.exp \
+	 insn_test_mula_hs_hs_X0.vgtest \
+	insn_test_mula_hs_hs_Y0.stdout.exp insn_test_mula_hs_hs_Y0.stderr.exp \
+	 insn_test_mula_hs_hs_Y0.vgtest \
+	insn_test_mula_hs_hu_X0.stdout.exp insn_test_mula_hs_hu_X0.stderr.exp \
+	 insn_test_mula_hs_hu_X0.vgtest \
+	insn_test_mula_hs_ls_X0.stdout.exp insn_test_mula_hs_ls_X0.stderr.exp \
+	 insn_test_mula_hs_ls_X0.vgtest \
+	insn_test_mula_hs_lu_X0.stdout.exp insn_test_mula_hs_lu_X0.stderr.exp \
+	 insn_test_mula_hs_lu_X0.vgtest \
+	insn_test_mula_hu_hu_X0.stdout.exp insn_test_mula_hu_hu_X0.stderr.exp \
+	 insn_test_mula_hu_hu_X0.vgtest \
+	insn_test_mula_hu_hu_Y0.stdout.exp insn_test_mula_hu_hu_Y0.stderr.exp \
+	 insn_test_mula_hu_hu_Y0.vgtest \
+	insn_test_mula_hu_ls_X0.stdout.exp insn_test_mula_hu_ls_X0.stderr.exp \
+	 insn_test_mula_hu_ls_X0.vgtest \
+	insn_test_mula_hu_lu_X0.stdout.exp insn_test_mula_hu_lu_X0.stderr.exp \
+	 insn_test_mula_hu_lu_X0.vgtest \
+	insn_test_mula_ls_ls_X0.stdout.exp insn_test_mula_ls_ls_X0.stderr.exp \
+	 insn_test_mula_ls_ls_X0.vgtest \
+	insn_test_mula_ls_ls_Y0.stdout.exp insn_test_mula_ls_ls_Y0.stderr.exp \
+	 insn_test_mula_ls_ls_Y0.vgtest \
+	insn_test_mula_ls_lu_X0.stdout.exp insn_test_mula_ls_lu_X0.stderr.exp \
+	 insn_test_mula_ls_lu_X0.vgtest \
+	insn_test_mula_lu_lu_X0.stdout.exp insn_test_mula_lu_lu_X0.stderr.exp \
+	 insn_test_mula_lu_lu_X0.vgtest \
+	insn_test_mula_lu_lu_Y0.stdout.exp insn_test_mula_lu_lu_Y0.stderr.exp \
+	 insn_test_mula_lu_lu_Y0.vgtest \
+	insn_test_mulax_X0.stdout.exp insn_test_mulax_X0.stderr.exp \
+	 insn_test_mulax_X0.vgtest \
+	insn_test_mulax_Y0.stdout.exp insn_test_mulax_Y0.stderr.exp \
+	 insn_test_mulax_Y0.vgtest \
+	insn_test_mulx_X0.stdout.exp insn_test_mulx_X0.stderr.exp \
+	 insn_test_mulx_X0.vgtest \
+	insn_test_mulx_Y0.stdout.exp insn_test_mulx_Y0.stderr.exp \
+	 insn_test_mulx_Y0.vgtest \
+	insn_test_mz_X0.stdout.exp insn_test_mz_X0.stderr.exp \
+	 insn_test_mz_X0.vgtest \
+	insn_test_mz_X1.stdout.exp insn_test_mz_X1.stderr.exp \
+	 insn_test_mz_X1.vgtest \
+	insn_test_mz_Y0.stdout.exp insn_test_mz_Y0.stderr.exp \
+	 insn_test_mz_Y0.vgtest \
+	insn_test_mz_Y1.stdout.exp insn_test_mz_Y1.stderr.exp \
+	 insn_test_mz_Y1.vgtest \
+	insn_test_nop_X0.stdout.exp insn_test_nop_X0.stderr.exp \
+	 insn_test_nop_X0.vgtest \
+	insn_test_nop_X1.stdout.exp insn_test_nop_X1.stderr.exp \
+	 insn_test_nop_X1.vgtest \
+	insn_test_nop_Y0.stdout.exp insn_test_nop_Y0.stderr.exp \
+	 insn_test_nop_Y0.vgtest \
+	insn_test_nop_Y1.stdout.exp insn_test_nop_Y1.stderr.exp \
+	 insn_test_nop_Y1.vgtest \
+	insn_test_nor_X0.stdout.exp insn_test_nor_X0.stderr.exp \
+	 insn_test_nor_X0.vgtest \
+	insn_test_nor_X1.stdout.exp insn_test_nor_X1.stderr.exp \
+	 insn_test_nor_X1.vgtest \
+	insn_test_nor_Y0.stdout.exp insn_test_nor_Y0.stderr.exp \
+	 insn_test_nor_Y0.vgtest \
+	insn_test_nor_Y1.stdout.exp insn_test_nor_Y1.stderr.exp \
+	 insn_test_nor_Y1.vgtest \
+	insn_test_or_X0.stdout.exp insn_test_or_X0.stderr.exp \
+	 insn_test_or_X0.vgtest \
+	insn_test_or_X1.stdout.exp insn_test_or_X1.stderr.exp \
+	 insn_test_or_X1.vgtest \
+	insn_test_or_Y0.stdout.exp insn_test_or_Y0.stderr.exp \
+	 insn_test_or_Y0.vgtest \
+	insn_test_or_Y1.stdout.exp insn_test_or_Y1.stderr.exp \
+	 insn_test_or_Y1.vgtest \
+	insn_test_ori_X0.stdout.exp insn_test_ori_X0.stderr.exp \
+	 insn_test_ori_X0.vgtest \
+	insn_test_ori_X1.stdout.exp insn_test_ori_X1.stderr.exp \
+	 insn_test_ori_X1.vgtest \
+	insn_test_pcnt_X0.stdout.exp insn_test_pcnt_X0.stderr.exp \
+	 insn_test_pcnt_X0.vgtest \
+	insn_test_pcnt_Y0.stdout.exp insn_test_pcnt_Y0.stderr.exp \
+	 insn_test_pcnt_Y0.vgtest \
+	insn_test_revbits_X0.stdout.exp insn_test_revbits_X0.stderr.exp \
+	 insn_test_revbits_X0.vgtest \
+	insn_test_revbits_Y0.stdout.exp insn_test_revbits_Y0.stderr.exp \
+	 insn_test_revbits_Y0.vgtest \
+	insn_test_revbytes_X0.stdout.exp insn_test_revbytes_X0.stderr.exp \
+	 insn_test_revbytes_X0.vgtest \
+	insn_test_revbytes_Y0.stdout.exp insn_test_revbytes_Y0.stderr.exp \
+	 insn_test_revbytes_Y0.vgtest \
+	insn_test_rotl_X0.stdout.exp insn_test_rotl_X0.stderr.exp \
+	 insn_test_rotl_X0.vgtest \
+	insn_test_rotl_X1.stdout.exp insn_test_rotl_X1.stderr.exp \
+	 insn_test_rotl_X1.vgtest \
+	insn_test_rotl_Y0.stdout.exp insn_test_rotl_Y0.stderr.exp \
+	 insn_test_rotl_Y0.vgtest \
+	insn_test_rotl_Y1.stdout.exp insn_test_rotl_Y1.stderr.exp \
+	 insn_test_rotl_Y1.vgtest \
+	insn_test_rotli_X0.stdout.exp insn_test_rotli_X0.stderr.exp \
+	 insn_test_rotli_X0.vgtest \
+	insn_test_rotli_X1.stdout.exp insn_test_rotli_X1.stderr.exp \
+	 insn_test_rotli_X1.vgtest \
+	insn_test_rotli_Y0.stdout.exp insn_test_rotli_Y0.stderr.exp \
+	 insn_test_rotli_Y0.vgtest \
+	insn_test_rotli_Y1.stdout.exp insn_test_rotli_Y1.stderr.exp \
+	 insn_test_rotli_Y1.vgtest \
+	insn_test_shl_X0.stdout.exp insn_test_shl_X0.stderr.exp \
+	 insn_test_shl_X0.vgtest \
+	insn_test_shl_X1.stdout.exp insn_test_shl_X1.stderr.exp \
+	 insn_test_shl_X1.vgtest \
+	insn_test_shl_Y0.stdout.exp insn_test_shl_Y0.stderr.exp \
+	 insn_test_shl_Y0.vgtest \
+	insn_test_shl_Y1.stdout.exp insn_test_shl_Y1.stderr.exp \
+	 insn_test_shl_Y1.vgtest \
+	insn_test_shl16insli_X0.stdout.exp insn_test_shl16insli_X0.stderr.exp \
+	 insn_test_shl16insli_X0.vgtest \
+	insn_test_shl16insli_X1.stdout.exp insn_test_shl16insli_X1.stderr.exp \
+	 insn_test_shl16insli_X1.vgtest \
+	insn_test_shl1add_X0.stdout.exp insn_test_shl1add_X0.stderr.exp \
+	 insn_test_shl1add_X0.vgtest \
+	insn_test_shl1add_X1.stdout.exp insn_test_shl1add_X1.stderr.exp \
+	 insn_test_shl1add_X1.vgtest \
+	insn_test_shl1add_Y0.stdout.exp insn_test_shl1add_Y0.stderr.exp \
+	 insn_test_shl1add_Y0.vgtest \
+	insn_test_shl1add_Y1.stdout.exp insn_test_shl1add_Y1.stderr.exp \
+	 insn_test_shl1add_Y1.vgtest \
+	insn_test_shl1addx_X0.stdout.exp insn_test_shl1addx_X0.stderr.exp \
+	 insn_test_shl1addx_X0.vgtest \
+	insn_test_shl1addx_X1.stdout.exp insn_test_shl1addx_X1.stderr.exp \
+	 insn_test_shl1addx_X1.vgtest \
+	insn_test_shl1addx_Y0.stdout.exp insn_test_shl1addx_Y0.stderr.exp \
+	 insn_test_shl1addx_Y0.vgtest \
+	insn_test_shl1addx_Y1.stdout.exp insn_test_shl1addx_Y1.stderr.exp \
+	 insn_test_shl1addx_Y1.vgtest \
+	insn_test_shl2add_X0.stdout.exp insn_test_shl2add_X0.stderr.exp \
+	 insn_test_shl2add_X0.vgtest \
+	insn_test_shl2add_X1.stdout.exp insn_test_shl2add_X1.stderr.exp \
+	 insn_test_shl2add_X1.vgtest \
+	insn_test_shl2add_Y0.stdout.exp insn_test_shl2add_Y0.stderr.exp \
+	 insn_test_shl2add_Y0.vgtest \
+	insn_test_shl2add_Y1.stdout.exp insn_test_shl2add_Y1.stderr.exp \
+	 insn_test_shl2add_Y1.vgtest \
+	insn_test_shl2addx_X0.stdout.exp insn_test_shl2addx_X0.stderr.exp \
+	 insn_test_shl2addx_X0.vgtest \
+	insn_test_shl2addx_X1.stdout.exp insn_test_shl2addx_X1.stderr.exp \
+	 insn_test_shl2addx_X1.vgtest \
+	insn_test_shl2addx_Y0.stdout.exp insn_test_shl2addx_Y0.stderr.exp \
+	 insn_test_shl2addx_Y0.vgtest \
+	insn_test_shl2addx_Y1.stdout.exp insn_test_shl2addx_Y1.stderr.exp \
+	 insn_test_shl2addx_Y1.vgtest \
+	insn_test_shl3add_X0.stdout.exp insn_test_shl3add_X0.stderr.exp \
+	 insn_test_shl3add_X0.vgtest \
+	insn_test_shl3add_X1.stdout.exp insn_test_shl3add_X1.stderr.exp \
+	 insn_test_shl3add_X1.vgtest \
+	insn_test_shl3add_Y0.stdout.exp insn_test_shl3add_Y0.stderr.exp \
+	 insn_test_shl3add_Y0.vgtest \
+	insn_test_shl3add_Y1.stdout.exp insn_test_shl3add_Y1.stderr.exp \
+	 insn_test_shl3add_Y1.vgtest \
+	insn_test_shl3addx_X0.stdout.exp insn_test_shl3addx_X0.stderr.exp \
+	 insn_test_shl3addx_X0.vgtest \
+	insn_test_shl3addx_X1.stdout.exp insn_test_shl3addx_X1.stderr.exp \
+	 insn_test_shl3addx_X1.vgtest \
+	insn_test_shl3addx_Y0.stdout.exp insn_test_shl3addx_Y0.stderr.exp \
+	 insn_test_shl3addx_Y0.vgtest \
+	insn_test_shl3addx_Y1.stdout.exp insn_test_shl3addx_Y1.stderr.exp \
+	 insn_test_shl3addx_Y1.vgtest \
+	insn_test_shli_X0.stdout.exp insn_test_shli_X0.stderr.exp \
+	 insn_test_shli_X0.vgtest \
+	insn_test_shli_X1.stdout.exp insn_test_shli_X1.stderr.exp \
+	 insn_test_shli_X1.vgtest \
+	insn_test_shli_Y0.stdout.exp insn_test_shli_Y0.stderr.exp \
+	 insn_test_shli_Y0.vgtest \
+	insn_test_shli_Y1.stdout.exp insn_test_shli_Y1.stderr.exp \
+	 insn_test_shli_Y1.vgtest \
+	insn_test_shlx_X0.stdout.exp insn_test_shlx_X0.stderr.exp \
+	 insn_test_shlx_X0.vgtest \
+	insn_test_shlx_X1.stdout.exp insn_test_shlx_X1.stderr.exp \
+	 insn_test_shlx_X1.vgtest \
+	insn_test_shlxi_X0.stdout.exp insn_test_shlxi_X0.stderr.exp \
+	 insn_test_shlxi_X0.vgtest \
+	insn_test_shlxi_X1.stdout.exp insn_test_shlxi_X1.stderr.exp \
+	 insn_test_shlxi_X1.vgtest \
+	insn_test_shrs_X0.stdout.exp insn_test_shrs_X0.stderr.exp \
+	 insn_test_shrs_X0.vgtest \
+	insn_test_shrs_X1.stdout.exp insn_test_shrs_X1.stderr.exp \
+	 insn_test_shrs_X1.vgtest \
+	insn_test_shrs_Y0.stdout.exp insn_test_shrs_Y0.stderr.exp \
+	 insn_test_shrs_Y0.vgtest \
+	insn_test_shrs_Y1.stdout.exp insn_test_shrs_Y1.stderr.exp \
+	 insn_test_shrs_Y1.vgtest \
+	insn_test_shrsi_X0.stdout.exp insn_test_shrsi_X0.stderr.exp \
+	 insn_test_shrsi_X0.vgtest \
+	insn_test_shrsi_X1.stdout.exp insn_test_shrsi_X1.stderr.exp \
+	 insn_test_shrsi_X1.vgtest \
+	insn_test_shrsi_Y0.stdout.exp insn_test_shrsi_Y0.stderr.exp \
+	 insn_test_shrsi_Y0.vgtest \
+	insn_test_shrsi_Y1.stdout.exp insn_test_shrsi_Y1.stderr.exp \
+	 insn_test_shrsi_Y1.vgtest \
+	insn_test_shru_X0.stdout.exp insn_test_shru_X0.stderr.exp \
+	 insn_test_shru_X0.vgtest \
+	insn_test_shru_X1.stdout.exp insn_test_shru_X1.stderr.exp \
+	 insn_test_shru_X1.vgtest \
+	insn_test_shru_Y0.stdout.exp insn_test_shru_Y0.stderr.exp \
+	 insn_test_shru_Y0.vgtest \
+	insn_test_shru_Y1.stdout.exp insn_test_shru_Y1.stderr.exp \
+	 insn_test_shru_Y1.vgtest \
+	insn_test_shrui_X0.stdout.exp insn_test_shrui_X0.stderr.exp \
+	 insn_test_shrui_X0.vgtest \
+	insn_test_shrui_X1.stdout.exp insn_test_shrui_X1.stderr.exp \
+	 insn_test_shrui_X1.vgtest \
+	insn_test_shrui_Y0.stdout.exp insn_test_shrui_Y0.stderr.exp \
+	 insn_test_shrui_Y0.vgtest \
+	insn_test_shrui_Y1.stdout.exp insn_test_shrui_Y1.stderr.exp \
+	 insn_test_shrui_Y1.vgtest \
+	insn_test_shrux_X0.stdout.exp insn_test_shrux_X0.stderr.exp \
+	 insn_test_shrux_X0.vgtest \
+	insn_test_shrux_X1.stdout.exp insn_test_shrux_X1.stderr.exp \
+	 insn_test_shrux_X1.vgtest \
+	insn_test_shufflebytes_X0.stdout.exp \
+	 insn_test_shufflebytes_X0.stderr.exp \
+	 insn_test_shufflebytes_X0.vgtest \
+	insn_test_st_X1.stdout.exp insn_test_st_X1.stderr.exp \
+	 insn_test_st_X1.vgtest \
+	insn_test_st_Y2.stdout.exp insn_test_st_Y2.stderr.exp \
+	 insn_test_st_Y2.vgtest \
+	insn_test_st1_X1.stdout.exp insn_test_st1_X1.stderr.exp \
+	 insn_test_st1_X1.vgtest \
+	insn_test_st1_Y2.stdout.exp insn_test_st1_Y2.stderr.exp \
+	 insn_test_st1_Y2.vgtest \
+	insn_test_st1_add_X1.stdout.exp insn_test_st1_add_X1.stderr.exp \
+	 insn_test_st1_add_X1.vgtest \
+	insn_test_st2_X1.stdout.exp insn_test_st2_X1.stderr.exp \
+	 insn_test_st2_X1.vgtest \
+	insn_test_st2_Y2.stdout.exp insn_test_st2_Y2.stderr.exp \
+	 insn_test_st2_Y2.vgtest \
+	insn_test_st2_add_X1.stdout.exp insn_test_st2_add_X1.stderr.exp \
+	 insn_test_st2_add_X1.vgtest \
+	insn_test_st4_X1.stdout.exp insn_test_st4_X1.stderr.exp \
+	 insn_test_st4_X1.vgtest \
+	insn_test_st4_Y2.stdout.exp insn_test_st4_Y2.stderr.exp \
+	 insn_test_st4_Y2.vgtest \
+	insn_test_st4_add_X1.stdout.exp insn_test_st4_add_X1.stderr.exp \
+	 insn_test_st4_add_X1.vgtest \
+	insn_test_st_add_X1.stdout.exp insn_test_st_add_X1.stderr.exp \
+	 insn_test_st_add_X1.vgtest \
+	insn_test_stnt_X1.stdout.exp insn_test_stnt_X1.stderr.exp \
+	 insn_test_stnt_X1.vgtest \
+	insn_test_stnt1_X1.stdout.exp insn_test_stnt1_X1.stderr.exp \
+	 insn_test_stnt1_X1.vgtest \
+	insn_test_stnt2_X1.stdout.exp insn_test_stnt2_X1.stderr.exp \
+	 insn_test_stnt2_X1.vgtest \
+	insn_test_stnt2_add_X1.stdout.exp insn_test_stnt2_add_X1.stderr.exp \
+	 insn_test_stnt2_add_X1.vgtest \
+	insn_test_stnt4_X1.stdout.exp insn_test_stnt4_X1.stderr.exp \
+	 insn_test_stnt4_X1.vgtest \
+	insn_test_stnt4_add_X1.stdout.exp insn_test_stnt4_add_X1.stderr.exp \
+	 insn_test_stnt4_add_X1.vgtest \
+	insn_test_stnt_add_X1.stdout.exp insn_test_stnt_add_X1.stderr.exp \
+	 insn_test_stnt_add_X1.vgtest \
+	insn_test_sub_X0.stdout.exp insn_test_sub_X0.stderr.exp \
+	 insn_test_sub_X0.vgtest \
+	insn_test_sub_X1.stdout.exp insn_test_sub_X1.stderr.exp \
+	 insn_test_sub_X1.vgtest \
+	insn_test_sub_Y0.stdout.exp insn_test_sub_Y0.stderr.exp \
+	 insn_test_sub_Y0.vgtest \
+	insn_test_sub_Y1.stdout.exp insn_test_sub_Y1.stderr.exp \
+	 insn_test_sub_Y1.vgtest \
+	insn_test_subx_X0.stdout.exp insn_test_subx_X0.stderr.exp \
+	 insn_test_subx_X0.vgtest \
+	insn_test_subx_X1.stdout.exp insn_test_subx_X1.stderr.exp \
+	 insn_test_subx_X1.vgtest \
+	insn_test_subx_Y0.stdout.exp insn_test_subx_Y0.stderr.exp \
+	 insn_test_subx_Y0.vgtest \
+	insn_test_subx_Y1.stdout.exp insn_test_subx_Y1.stderr.exp \
+	 insn_test_subx_Y1.vgtest \
+	insn_test_tblidxb0_X0.stdout.exp insn_test_tblidxb0_X0.stderr.exp \
+	 insn_test_tblidxb0_X0.vgtest \
+	insn_test_tblidxb0_Y0.stdout.exp insn_test_tblidxb0_Y0.stderr.exp \
+	 insn_test_tblidxb0_Y0.vgtest \
+	insn_test_tblidxb1_X0.stdout.exp insn_test_tblidxb1_X0.stderr.exp \
+	 insn_test_tblidxb1_X0.vgtest \
+	insn_test_tblidxb1_Y0.stdout.exp insn_test_tblidxb1_Y0.stderr.exp \
+	 insn_test_tblidxb1_Y0.vgtest \
+	insn_test_tblidxb2_X0.stdout.exp insn_test_tblidxb2_X0.stderr.exp \
+	 insn_test_tblidxb2_X0.vgtest \
+	insn_test_tblidxb2_Y0.stdout.exp insn_test_tblidxb2_Y0.stderr.exp \
+	 insn_test_tblidxb2_Y0.vgtest \
+	insn_test_tblidxb3_X0.stdout.exp insn_test_tblidxb3_X0.stderr.exp \
+	 insn_test_tblidxb3_X0.vgtest \
+	insn_test_tblidxb3_Y0.stdout.exp insn_test_tblidxb3_Y0.stderr.exp \
+	 insn_test_tblidxb3_Y0.vgtest \
+	insn_test_v1add_X0.stdout.exp insn_test_v1add_X0.stderr.exp \
+	 insn_test_v1add_X0.vgtest \
+	insn_test_v1add_X1.stdout.exp insn_test_v1add_X1.stderr.exp \
+	 insn_test_v1add_X1.vgtest \
+	insn_test_v1adduc_X0.stdout.exp insn_test_v1adduc_X0.stderr.exp \
+	 insn_test_v1adduc_X0.vgtest \
+	insn_test_v1adduc_X1.stdout.exp insn_test_v1adduc_X1.stderr.exp \
+	 insn_test_v1adduc_X1.vgtest \
+	insn_test_v1adiffu_X0.stdout.exp insn_test_v1adiffu_X0.stderr.exp \
+	 insn_test_v1adiffu_X0.vgtest \
+	insn_test_v1avgu_X0.stdout.exp insn_test_v1avgu_X0.stderr.exp \
+	 insn_test_v1avgu_X0.vgtest \
+	insn_test_v1cmpeq_X0.stdout.exp insn_test_v1cmpeq_X0.stderr.exp \
+	 insn_test_v1cmpeq_X0.vgtest \
+	insn_test_v1cmpeq_X1.stdout.exp insn_test_v1cmpeq_X1.stderr.exp \
+	 insn_test_v1cmpeq_X1.vgtest \
+	insn_test_v1cmpeqi_X0.stdout.exp insn_test_v1cmpeqi_X0.stderr.exp \
+	 insn_test_v1cmpeqi_X0.vgtest \
+	insn_test_v1cmpeqi_X1.stdout.exp insn_test_v1cmpeqi_X1.stderr.exp \
+	 insn_test_v1cmpeqi_X1.vgtest \
+	insn_test_v1cmples_X0.stdout.exp insn_test_v1cmples_X0.stderr.exp \
+	 insn_test_v1cmples_X0.vgtest \
+	insn_test_v1cmples_X1.stdout.exp insn_test_v1cmples_X1.stderr.exp \
+	 insn_test_v1cmples_X1.vgtest \
+	insn_test_v1cmpleu_X0.stdout.exp insn_test_v1cmpleu_X0.stderr.exp \
+	 insn_test_v1cmpleu_X0.vgtest \
+	insn_test_v1cmpleu_X1.stdout.exp insn_test_v1cmpleu_X1.stderr.exp \
+	 insn_test_v1cmpleu_X1.vgtest \
+	insn_test_v1cmplts_X0.stdout.exp insn_test_v1cmplts_X0.stderr.exp \
+	 insn_test_v1cmplts_X0.vgtest \
+	insn_test_v1cmplts_X1.stdout.exp insn_test_v1cmplts_X1.stderr.exp \
+	 insn_test_v1cmplts_X1.vgtest \
+	insn_test_v1cmpltu_X0.stdout.exp insn_test_v1cmpltu_X0.stderr.exp \
+	 insn_test_v1cmpltu_X0.vgtest \
+	insn_test_v1cmpltu_X1.stdout.exp insn_test_v1cmpltu_X1.stderr.exp \
+	 insn_test_v1cmpltu_X1.vgtest \
+	insn_test_v1cmpne_X0.stdout.exp insn_test_v1cmpne_X0.stderr.exp \
+	 insn_test_v1cmpne_X0.vgtest \
+	insn_test_v1cmpne_X1.stdout.exp insn_test_v1cmpne_X1.stderr.exp \
+	 insn_test_v1cmpne_X1.vgtest \
+	insn_test_v1ddotpu_X0.stdout.exp insn_test_v1ddotpu_X0.stderr.exp \
+	 insn_test_v1ddotpu_X0.vgtest \
+	insn_test_v1ddotpua_X0.stdout.exp insn_test_v1ddotpua_X0.stderr.exp \
+	 insn_test_v1ddotpua_X0.vgtest \
+	insn_test_v1ddotpus_X0.stdout.exp insn_test_v1ddotpus_X0.stderr.exp \
+	 insn_test_v1ddotpus_X0.vgtest \
+	insn_test_v1ddotpusa_X0.stdout.exp insn_test_v1ddotpusa_X0.stderr.exp \
+	 insn_test_v1ddotpusa_X0.vgtest \
+	insn_test_v1dotp_X0.stdout.exp insn_test_v1dotp_X0.stderr.exp \
+	 insn_test_v1dotp_X0.vgtest \
+	insn_test_v1dotpa_X0.stdout.exp insn_test_v1dotpa_X0.stderr.exp \
+	 insn_test_v1dotpa_X0.vgtest \
+	insn_test_v1dotpu_X0.stdout.exp insn_test_v1dotpu_X0.stderr.exp \
+	 insn_test_v1dotpu_X0.vgtest \
+	insn_test_v1dotpua_X0.stdout.exp insn_test_v1dotpua_X0.stderr.exp \
+	 insn_test_v1dotpua_X0.vgtest \
+	insn_test_v1dotpus_X0.stdout.exp insn_test_v1dotpus_X0.stderr.exp \
+	 insn_test_v1dotpus_X0.vgtest \
+	insn_test_v1dotpusa_X0.stdout.exp insn_test_v1dotpusa_X0.stderr.exp \
+	 insn_test_v1dotpusa_X0.vgtest \
+	insn_test_v1int_h_X0.stdout.exp insn_test_v1int_h_X0.stderr.exp \
+	 insn_test_v1int_h_X0.vgtest \
+	insn_test_v1int_h_X1.stdout.exp insn_test_v1int_h_X1.stderr.exp \
+	 insn_test_v1int_h_X1.vgtest \
+	insn_test_v1int_l_X0.stdout.exp insn_test_v1int_l_X0.stderr.exp \
+	 insn_test_v1int_l_X0.vgtest \
+	insn_test_v1int_l_X1.stdout.exp insn_test_v1int_l_X1.stderr.exp \
+	 insn_test_v1int_l_X1.vgtest \
+	insn_test_v1maxu_X0.stdout.exp insn_test_v1maxu_X0.stderr.exp \
+	 insn_test_v1maxu_X0.vgtest \
+	insn_test_v1maxu_X1.stdout.exp insn_test_v1maxu_X1.stderr.exp \
+	 insn_test_v1maxu_X1.vgtest \
+	insn_test_v1minu_X0.stdout.exp insn_test_v1minu_X0.stderr.exp \
+	 insn_test_v1minu_X0.vgtest \
+	insn_test_v1minu_X1.stdout.exp insn_test_v1minu_X1.stderr.exp \
+	 insn_test_v1minu_X1.vgtest \
+	insn_test_v1mnz_X0.stdout.exp insn_test_v1mnz_X0.stderr.exp \
+	 insn_test_v1mnz_X0.vgtest \
+	insn_test_v1mnz_X1.stdout.exp insn_test_v1mnz_X1.stderr.exp \
+	 insn_test_v1mnz_X1.vgtest \
+	insn_test_v1multu_X0.stdout.exp insn_test_v1multu_X0.stderr.exp \
+	 insn_test_v1multu_X0.vgtest \
+	insn_test_v1mulu_X0.stdout.exp insn_test_v1mulu_X0.stderr.exp \
+	 insn_test_v1mulu_X0.vgtest \
+	insn_test_v1mulus_X0.stdout.exp insn_test_v1mulus_X0.stderr.exp \
+	 insn_test_v1mulus_X0.vgtest \
+	insn_test_v1mz_X0.stdout.exp insn_test_v1mz_X0.stderr.exp \
+	 insn_test_v1mz_X0.vgtest \
+	insn_test_v1mz_X1.stdout.exp insn_test_v1mz_X1.stderr.exp \
+	 insn_test_v1mz_X1.vgtest \
+	insn_test_v1sadau_X0.stdout.exp insn_test_v1sadau_X0.stderr.exp \
+	 insn_test_v1sadau_X0.vgtest \
+	insn_test_v1sadu_X0.stdout.exp insn_test_v1sadu_X0.stderr.exp \
+	 insn_test_v1sadu_X0.vgtest \
+	insn_test_v1shl_X0.stdout.exp insn_test_v1shl_X0.stderr.exp \
+	 insn_test_v1shl_X0.vgtest \
+	insn_test_v1shl_X1.stdout.exp insn_test_v1shl_X1.stderr.exp \
+	 insn_test_v1shl_X1.vgtest \
+	insn_test_v1shli_X0.stdout.exp insn_test_v1shli_X0.stderr.exp \
+	 insn_test_v1shli_X0.vgtest \
+	insn_test_v1shli_X1.stdout.exp insn_test_v1shli_X1.stderr.exp \
+	 insn_test_v1shli_X1.vgtest \
+	insn_test_v1shrs_X0.stdout.exp insn_test_v1shrs_X0.stderr.exp \
+	 insn_test_v1shrs_X0.vgtest \
+	insn_test_v1shrs_X1.stdout.exp insn_test_v1shrs_X1.stderr.exp \
+	 insn_test_v1shrs_X1.vgtest \
+	insn_test_v1shrsi_X0.stdout.exp insn_test_v1shrsi_X0.stderr.exp \
+	 insn_test_v1shrsi_X0.vgtest \
+	insn_test_v1shrsi_X1.stdout.exp insn_test_v1shrsi_X1.stderr.exp \
+	 insn_test_v1shrsi_X1.vgtest \
+	insn_test_v1shru_X0.stdout.exp insn_test_v1shru_X0.stderr.exp \
+	 insn_test_v1shru_X0.vgtest \
+	insn_test_v1shru_X1.stdout.exp insn_test_v1shru_X1.stderr.exp \
+	 insn_test_v1shru_X1.vgtest \
+	insn_test_v1shrui_X0.stdout.exp insn_test_v1shrui_X0.stderr.exp \
+	 insn_test_v1shrui_X0.vgtest \
+	insn_test_v1shrui_X1.stdout.exp insn_test_v1shrui_X1.stderr.exp \
+	 insn_test_v1shrui_X1.vgtest \
+	insn_test_v1sub_X0.stdout.exp insn_test_v1sub_X0.stderr.exp \
+	 insn_test_v1sub_X0.vgtest \
+	insn_test_v1sub_X1.stdout.exp insn_test_v1sub_X1.stderr.exp \
+	 insn_test_v1sub_X1.vgtest \
+	insn_test_v1subuc_X0.stdout.exp insn_test_v1subuc_X0.stderr.exp \
+	 insn_test_v1subuc_X0.vgtest \
+	insn_test_v1subuc_X1.stdout.exp insn_test_v1subuc_X1.stderr.exp \
+	 insn_test_v1subuc_X1.vgtest \
+	insn_test_v2add_X0.stdout.exp insn_test_v2add_X0.stderr.exp \
+	 insn_test_v2add_X0.vgtest \
+	insn_test_v2add_X1.stdout.exp insn_test_v2add_X1.stderr.exp \
+	 insn_test_v2add_X1.vgtest \
+	insn_test_v2addsc_X0.stdout.exp insn_test_v2addsc_X0.stderr.exp \
+	 insn_test_v2addsc_X0.vgtest \
+	insn_test_v2addsc_X1.stdout.exp insn_test_v2addsc_X1.stderr.exp \
+	 insn_test_v2addsc_X1.vgtest \
+	insn_test_v2adiffs_X0.stdout.exp insn_test_v2adiffs_X0.stderr.exp \
+	 insn_test_v2adiffs_X0.vgtest \
+	insn_test_v2avgs_X0.stdout.exp insn_test_v2avgs_X0.stderr.exp \
+	 insn_test_v2avgs_X0.vgtest \
+	insn_test_v2cmpeq_X0.stdout.exp insn_test_v2cmpeq_X0.stderr.exp \
+	 insn_test_v2cmpeq_X0.vgtest \
+	insn_test_v2cmpeq_X1.stdout.exp insn_test_v2cmpeq_X1.stderr.exp \
+	 insn_test_v2cmpeq_X1.vgtest \
+	insn_test_v2cmpeqi_X0.stdout.exp insn_test_v2cmpeqi_X0.stderr.exp \
+	 insn_test_v2cmpeqi_X0.vgtest \
+	insn_test_v2cmpeqi_X1.stdout.exp insn_test_v2cmpeqi_X1.stderr.exp \
+	 insn_test_v2cmpeqi_X1.vgtest \
+	insn_test_v2cmples_X0.stdout.exp insn_test_v2cmples_X0.stderr.exp \
+	 insn_test_v2cmples_X0.vgtest \
+	insn_test_v2cmples_X1.stdout.exp insn_test_v2cmples_X1.stderr.exp \
+	 insn_test_v2cmples_X1.vgtest \
+	insn_test_v2cmpleu_X0.stdout.exp insn_test_v2cmpleu_X0.stderr.exp \
+	 insn_test_v2cmpleu_X0.vgtest \
+	insn_test_v2cmpleu_X1.stdout.exp insn_test_v2cmpleu_X1.stderr.exp \
+	 insn_test_v2cmpleu_X1.vgtest \
+	insn_test_v2cmplts_X0.stdout.exp insn_test_v2cmplts_X0.stderr.exp \
+	 insn_test_v2cmplts_X0.vgtest \
+	insn_test_v2cmplts_X1.stdout.exp insn_test_v2cmplts_X1.stderr.exp \
+	 insn_test_v2cmplts_X1.vgtest \
+	insn_test_v2cmpltsi_X0.stdout.exp insn_test_v2cmpltsi_X0.stderr.exp \
+	 insn_test_v2cmpltsi_X0.vgtest \
+	insn_test_v2cmpltsi_X1.stdout.exp insn_test_v2cmpltsi_X1.stderr.exp \
+	 insn_test_v2cmpltsi_X1.vgtest \
+	insn_test_v2cmpltu_X0.stdout.exp insn_test_v2cmpltu_X0.stderr.exp \
+	 insn_test_v2cmpltu_X0.vgtest \
+	insn_test_v2cmpltu_X1.stdout.exp insn_test_v2cmpltu_X1.stderr.exp \
+	 insn_test_v2cmpltu_X1.vgtest \
+	insn_test_v2cmpltui_X0.stdout.exp insn_test_v2cmpltui_X0.stderr.exp \
+	 insn_test_v2cmpltui_X0.vgtest \
+	insn_test_v2cmpltui_X1.stdout.exp insn_test_v2cmpltui_X1.stderr.exp \
+	 insn_test_v2cmpltui_X1.vgtest \
+	insn_test_v2cmpne_X0.stdout.exp insn_test_v2cmpne_X0.stderr.exp \
+	 insn_test_v2cmpne_X0.vgtest \
+	insn_test_v2cmpne_X1.stdout.exp insn_test_v2cmpne_X1.stderr.exp \
+	 insn_test_v2cmpne_X1.vgtest \
+	insn_test_v2dotp_X0.stdout.exp insn_test_v2dotp_X0.stderr.exp \
+	 insn_test_v2dotp_X0.vgtest \
+	insn_test_v2dotpa_X0.stdout.exp insn_test_v2dotpa_X0.stderr.exp \
+	 insn_test_v2dotpa_X0.vgtest \
+	insn_test_v2int_h_X0.stdout.exp insn_test_v2int_h_X0.stderr.exp \
+	 insn_test_v2int_h_X0.vgtest \
+	insn_test_v2int_h_X1.stdout.exp insn_test_v2int_h_X1.stderr.exp \
+	 insn_test_v2int_h_X1.vgtest \
+	insn_test_v2int_l_X0.stdout.exp insn_test_v2int_l_X0.stderr.exp \
+	 insn_test_v2int_l_X0.vgtest \
+	insn_test_v2int_l_X1.stdout.exp insn_test_v2int_l_X1.stderr.exp \
+	 insn_test_v2int_l_X1.vgtest \
+	insn_test_v2maxs_X0.stdout.exp insn_test_v2maxs_X0.stderr.exp \
+	 insn_test_v2maxs_X0.vgtest \
+	insn_test_v2maxs_X1.stdout.exp insn_test_v2maxs_X1.stderr.exp \
+	 insn_test_v2maxs_X1.vgtest \
+	insn_test_v2mins_X0.stdout.exp insn_test_v2mins_X0.stderr.exp \
+	 insn_test_v2mins_X0.vgtest \
+	insn_test_v2mins_X1.stdout.exp insn_test_v2mins_X1.stderr.exp \
+	 insn_test_v2mins_X1.vgtest \
+	insn_test_v2mnz_X0.stdout.exp insn_test_v2mnz_X0.stderr.exp \
+	 insn_test_v2mnz_X0.vgtest \
+	insn_test_v2mnz_X1.stdout.exp insn_test_v2mnz_X1.stderr.exp \
+	 insn_test_v2mnz_X1.vgtest \
+	insn_test_v2mulfsc_X0.stdout.exp insn_test_v2mulfsc_X0.stderr.exp \
+	 insn_test_v2mulfsc_X0.vgtest \
+	insn_test_v2muls_X0.stdout.exp insn_test_v2muls_X0.stderr.exp \
+	 insn_test_v2muls_X0.vgtest \
+	insn_test_v2mults_X0.stdout.exp insn_test_v2mults_X0.stderr.exp \
+	 insn_test_v2mults_X0.vgtest \
+	insn_test_v2mz_X0.stdout.exp insn_test_v2mz_X0.stderr.exp \
+	 insn_test_v2mz_X0.vgtest \
+	insn_test_v2mz_X1.stdout.exp insn_test_v2mz_X1.stderr.exp \
+	 insn_test_v2mz_X1.vgtest \
+	insn_test_v2packh_X0.stdout.exp insn_test_v2packh_X0.stderr.exp \
+	 insn_test_v2packh_X0.vgtest \
+	insn_test_v2packh_X1.stdout.exp insn_test_v2packh_X1.stderr.exp \
+	 insn_test_v2packh_X1.vgtest \
+	insn_test_v2packl_X0.stdout.exp insn_test_v2packl_X0.stderr.exp \
+	 insn_test_v2packl_X0.vgtest \
+	insn_test_v2packl_X1.stdout.exp insn_test_v2packl_X1.stderr.exp \
+	 insn_test_v2packl_X1.vgtest \
+	insn_test_v2packuc_X0.stdout.exp insn_test_v2packuc_X0.stderr.exp \
+	 insn_test_v2packuc_X0.vgtest \
+	insn_test_v2packuc_X1.stdout.exp insn_test_v2packuc_X1.stderr.exp \
+	 insn_test_v2packuc_X1.vgtest \
+	insn_test_v2sadas_X0.stdout.exp insn_test_v2sadas_X0.stderr.exp \
+	 insn_test_v2sadas_X0.vgtest \
+	insn_test_v2sadau_X0.stdout.exp insn_test_v2sadau_X0.stderr.exp \
+	 insn_test_v2sadau_X0.vgtest \
+	insn_test_v2sads_X0.stdout.exp insn_test_v2sads_X0.stderr.exp \
+	 insn_test_v2sads_X0.vgtest \
+	insn_test_v2sadu_X0.stdout.exp insn_test_v2sadu_X0.stderr.exp \
+	 insn_test_v2sadu_X0.vgtest \
+	insn_test_v2shl_X0.stdout.exp insn_test_v2shl_X0.stderr.exp \
+	 insn_test_v2shl_X0.vgtest \
+	insn_test_v2shl_X1.stdout.exp insn_test_v2shl_X1.stderr.exp \
+	 insn_test_v2shl_X1.vgtest \
+	insn_test_v2shli_X0.stdout.exp insn_test_v2shli_X0.stderr.exp \
+	 insn_test_v2shli_X0.vgtest \
+	insn_test_v2shli_X1.stdout.exp insn_test_v2shli_X1.stderr.exp \
+	 insn_test_v2shli_X1.vgtest \
+	insn_test_v2shlsc_X0.stdout.exp insn_test_v2shlsc_X0.stderr.exp \
+	 insn_test_v2shlsc_X0.vgtest \
+	insn_test_v2shlsc_X1.stdout.exp insn_test_v2shlsc_X1.stderr.exp \
+	 insn_test_v2shlsc_X1.vgtest \
+	insn_test_v2shrs_X0.stdout.exp insn_test_v2shrs_X0.stderr.exp \
+	 insn_test_v2shrs_X0.vgtest \
+	insn_test_v2shrs_X1.stdout.exp insn_test_v2shrs_X1.stderr.exp \
+	 insn_test_v2shrs_X1.vgtest \
+	insn_test_v2shrsi_X0.stdout.exp insn_test_v2shrsi_X0.stderr.exp \
+	 insn_test_v2shrsi_X0.vgtest \
+	insn_test_v2shrsi_X1.stdout.exp insn_test_v2shrsi_X1.stderr.exp \
+	 insn_test_v2shrsi_X1.vgtest \
+	insn_test_v2shru_X0.stdout.exp insn_test_v2shru_X0.stderr.exp \
+	 insn_test_v2shru_X0.vgtest \
+	insn_test_v2shru_X1.stdout.exp insn_test_v2shru_X1.stderr.exp \
+	 insn_test_v2shru_X1.vgtest \
+	insn_test_v2shrui_X0.stdout.exp insn_test_v2shrui_X0.stderr.exp \
+	 insn_test_v2shrui_X0.vgtest \
+	insn_test_v2shrui_X1.stdout.exp insn_test_v2shrui_X1.stderr.exp \
+	 insn_test_v2shrui_X1.vgtest \
+	insn_test_v2sub_X0.stdout.exp insn_test_v2sub_X0.stderr.exp \
+	 insn_test_v2sub_X0.vgtest \
+	insn_test_v2sub_X1.stdout.exp insn_test_v2sub_X1.stderr.exp \
+	 insn_test_v2sub_X1.vgtest \
+	insn_test_v2subsc_X0.stdout.exp insn_test_v2subsc_X0.stderr.exp \
+	 insn_test_v2subsc_X0.vgtest \
+	insn_test_v2subsc_X1.stdout.exp insn_test_v2subsc_X1.stderr.exp \
+	 insn_test_v2subsc_X1.vgtest \
+	insn_test_v4add_X0.stdout.exp insn_test_v4add_X0.stderr.exp \
+	 insn_test_v4add_X0.vgtest \
+	insn_test_v4add_X1.stdout.exp insn_test_v4add_X1.stderr.exp \
+	 insn_test_v4add_X1.vgtest \
+	insn_test_v4addsc_X0.stdout.exp insn_test_v4addsc_X0.stderr.exp \
+	 insn_test_v4addsc_X0.vgtest \
+	insn_test_v4addsc_X1.stdout.exp insn_test_v4addsc_X1.stderr.exp \
+	 insn_test_v4addsc_X1.vgtest \
+	insn_test_v4int_h_X0.stdout.exp insn_test_v4int_h_X0.stderr.exp \
+	 insn_test_v4int_h_X0.vgtest \
+	insn_test_v4int_h_X1.stdout.exp insn_test_v4int_h_X1.stderr.exp \
+	 insn_test_v4int_h_X1.vgtest \
+	insn_test_v4int_l_X0.stdout.exp insn_test_v4int_l_X0.stderr.exp \
+	 insn_test_v4int_l_X0.vgtest \
+	insn_test_v4int_l_X1.stdout.exp insn_test_v4int_l_X1.stderr.exp \
+	 insn_test_v4int_l_X1.vgtest \
+	insn_test_v4packsc_X0.stdout.exp insn_test_v4packsc_X0.stderr.exp \
+	 insn_test_v4packsc_X0.vgtest \
+	insn_test_v4packsc_X1.stdout.exp insn_test_v4packsc_X1.stderr.exp \
+	 insn_test_v4packsc_X1.vgtest \
+	insn_test_v4shl_X0.stdout.exp insn_test_v4shl_X0.stderr.exp \
+	 insn_test_v4shl_X0.vgtest \
+	insn_test_v4shl_X1.stdout.exp insn_test_v4shl_X1.stderr.exp \
+	 insn_test_v4shl_X1.vgtest \
+	insn_test_v4shlsc_X0.stdout.exp insn_test_v4shlsc_X0.stderr.exp \
+	 insn_test_v4shlsc_X0.vgtest \
+	insn_test_v4shlsc_X1.stdout.exp insn_test_v4shlsc_X1.stderr.exp \
+	 insn_test_v4shlsc_X1.vgtest \
+	insn_test_v4shrs_X0.stdout.exp insn_test_v4shrs_X0.stderr.exp \
+	 insn_test_v4shrs_X0.vgtest \
+	insn_test_v4shrs_X1.stdout.exp insn_test_v4shrs_X1.stderr.exp \
+	 insn_test_v4shrs_X1.vgtest \
+	insn_test_v4shru_X0.stdout.exp insn_test_v4shru_X0.stderr.exp \
+	 insn_test_v4shru_X0.vgtest \
+	insn_test_v4shru_X1.stdout.exp insn_test_v4shru_X1.stderr.exp \
+	 insn_test_v4shru_X1.vgtest \
+	insn_test_v4sub_X0.stdout.exp insn_test_v4sub_X0.stderr.exp \
+	 insn_test_v4sub_X0.vgtest \
+	insn_test_v4sub_X1.stdout.exp insn_test_v4sub_X1.stderr.exp \
+	 insn_test_v4sub_X1.vgtest \
+	insn_test_v4subsc_X0.stdout.exp insn_test_v4subsc_X0.stderr.exp \
+	 insn_test_v4subsc_X0.vgtest \
+	insn_test_v4subsc_X1.stdout.exp insn_test_v4subsc_X1.stderr.exp \
+	 insn_test_v4subsc_X1.vgtest \
+	insn_test_wh64_X1.stdout.exp insn_test_wh64_X1.stderr.exp \
+	 insn_test_wh64_X1.vgtest \
+	insn_test_xor_X0.stdout.exp insn_test_xor_X0.stderr.exp \
+	 insn_test_xor_X0.vgtest \
+	insn_test_xor_X1.stdout.exp insn_test_xor_X1.stderr.exp \
+	 insn_test_xor_X1.vgtest \
+	insn_test_xor_Y0.stdout.exp insn_test_xor_Y0.stderr.exp \
+	 insn_test_xor_Y0.vgtest \
+	insn_test_xor_Y1.stdout.exp insn_test_xor_Y1.stderr.exp \
+	 insn_test_xor_Y1.vgtest \
+	insn_test_xori_X0.stdout.exp insn_test_xori_X0.stderr.exp \
+	 insn_test_xori_X0.vgtest \
+	insn_test_xori_X1.stdout.exp insn_test_xori_X1.stderr.exp \
+	 insn_test_xori_X1.vgtest
+endif
+
+bin_PROGRAMS  = gen_insn_test
+
+insn_tests =
+
+insn_tests += \
+	insn_test_move_X0  \
+	insn_test_move_X1  \
+	insn_test_move_Y0  \
+	insn_test_move_Y1  \
+	insn_test_movei_X0  \
+	insn_test_movei_X1  \
+	insn_test_movei_Y0  \
+	insn_test_movei_Y1  \
+	insn_test_moveli_X0  \
+	insn_test_moveli_X1  \
+	insn_test_prefetch_X1  \
+	insn_test_prefetch_Y2  \
+	insn_test_prefetch_l1_X1  \
+	insn_test_prefetch_l1_Y2  \
+	insn_test_prefetch_l2_X1  \
+	insn_test_prefetch_l2_Y2  \
+	insn_test_prefetch_l3_X1  \
+	insn_test_prefetch_l3_Y2  \
+	insn_test_add_X0  \
+	insn_test_add_X1  \
+	insn_test_add_Y0  \
+	insn_test_add_Y1  \
+	insn_test_addi_X0  \
+	insn_test_addi_X1  \
+	insn_test_addi_Y0  \
+	insn_test_addi_Y1  \
+	insn_test_addli_X0  \
+	insn_test_addli_X1  \
+	insn_test_addx_X0  \
+	insn_test_addx_X1  \
+	insn_test_addx_Y0  \
+	insn_test_addx_Y1  \
+	insn_test_addxi_X0  \
+	insn_test_addxi_X1  \
+	insn_test_addxi_Y0  \
+	insn_test_addxi_Y1  \
+	insn_test_addxli_X0  \
+	insn_test_addxli_X1  \
+	insn_test_addxsc_X0  \
+	insn_test_addxsc_X1  \
+	insn_test_and_X0  \
+	insn_test_and_X1  \
+	insn_test_and_Y0  \
+	insn_test_and_Y1  \
+	insn_test_andi_X0  \
+	insn_test_andi_X1  \
+	insn_test_andi_Y0  \
+	insn_test_andi_Y1  \
+	insn_test_beqz_X1  \
+	insn_test_beqzt_X1  \
+	insn_test_bfexts_X0  \
+	insn_test_bfextu_X0  \
+	insn_test_bfins_X0  \
+	insn_test_bgez_X1  \
+	insn_test_bgezt_X1  \
+	insn_test_bgtz_X1  \
+	insn_test_bgtzt_X1  \
+	insn_test_blbc_X1  \
+	insn_test_blbct_X1  \
+	insn_test_blbs_X1  \
+	insn_test_blbst_X1  \
+	insn_test_blez_X1  \
+	insn_test_blezt_X1  \
+	insn_test_bltz_X1  \
+	insn_test_bltzt_X1  \
+	insn_test_bnez_X1  \
+	insn_test_bnezt_X1  \
+	insn_test_clz_X0  \
+	insn_test_clz_Y0  \
+	insn_test_cmoveqz_X0  \
+	insn_test_cmoveqz_Y0  \
+	insn_test_cmovnez_X0  \
+	insn_test_cmovnez_Y0  \
+	insn_test_cmpeq_X0  \
+	insn_test_cmpeq_X1  \
+	insn_test_cmpeq_Y0  \
+	insn_test_cmpeq_Y1  \
+	insn_test_cmpeqi_X0  \
+	insn_test_cmpeqi_X1  \
+	insn_test_cmpeqi_Y0  \
+	insn_test_cmpeqi_Y1  \
+	insn_test_cmples_X0  \
+	insn_test_cmples_X1  \
+	insn_test_cmples_Y0  \
+	insn_test_cmples_Y1  \
+	insn_test_cmpleu_X0  \
+	insn_test_cmpleu_X1  \
+	insn_test_cmpleu_Y0  \
+	insn_test_cmpleu_Y1  \
+	insn_test_cmplts_X0  \
+	insn_test_cmplts_X1  \
+	insn_test_cmplts_Y0  \
+	insn_test_cmplts_Y1  \
+	insn_test_cmpltsi_X0  \
+	insn_test_cmpltsi_X1  \
+	insn_test_cmpltsi_Y0  \
+	insn_test_cmpltsi_Y1  \
+	insn_test_cmpltu_X0  \
+	insn_test_cmpltu_X1  \
+	insn_test_cmpltu_Y0  \
+	insn_test_cmpltu_Y1  \
+	insn_test_cmpltui_X0  \
+	insn_test_cmpltui_X1  \
+	insn_test_cmpne_X0  \
+	insn_test_cmpne_X1  \
+	insn_test_cmpne_Y0  \
+	insn_test_cmpne_Y1  \
+	insn_test_cmul_X0  \
+	insn_test_cmula_X0  \
+	insn_test_cmulaf_X0  \
+	insn_test_cmulf_X0  \
+	insn_test_cmulfr_X0  \
+	insn_test_cmulh_X0  \
+	insn_test_cmulhr_X0  \
+	insn_test_crc32_32_X0  \
+	insn_test_crc32_8_X0  \
+	insn_test_ctz_X0  \
+	insn_test_ctz_Y0  \
+	insn_test_dblalign_X0  \
+	insn_test_dblalign2_X0  \
+	insn_test_dblalign2_X1  \
+	insn_test_dblalign4_X0  \
+	insn_test_dblalign4_X1  \
+	insn_test_dblalign6_X0  \
+	insn_test_dblalign6_X1  \
+	insn_test_dtlbpr_X1  \
+	insn_test_fdouble_add_flags_X0  \
+	insn_test_fdouble_addsub_X0  \
+	insn_test_fdouble_mul_flags_X0  \
+	insn_test_fdouble_pack1_X0  \
+	insn_test_fdouble_pack2_X0  \
+	insn_test_fdouble_sub_flags_X0  \
+	insn_test_fdouble_unpack_max_X0  \
+	insn_test_fdouble_unpack_min_X0  \
+	insn_test_flushwb_X1  \
+	insn_test_fnop_X0  \
+	insn_test_fnop_X1  \
+	insn_test_fnop_Y0  \
+	insn_test_fnop_Y1  \
+	insn_test_fsingle_add1_X0  \
+	insn_test_fsingle_addsub2_X0  \
+	insn_test_fsingle_mul1_X0  \
+	insn_test_fsingle_mul2_X0  \
+	insn_test_fsingle_pack1_X0  \
+	insn_test_fsingle_pack1_Y0  \
+	insn_test_fsingle_pack2_X0  \
+	insn_test_fsingle_sub1_X0  \
+	insn_test_icoh_X1  \
+	insn_test_j_X1  \
+	insn_test_jal_X1  \
+	insn_test_jalr_X1  \
+	insn_test_jalr_Y1  \
+	insn_test_jalrp_X1  \
+	insn_test_jalrp_Y1  \
+	insn_test_jr_X1  \
+	insn_test_jr_Y1  \
+	insn_test_jrp_X1  \
+	insn_test_jrp_Y1  \
+	insn_test_ld_X1  \
+	insn_test_ld_Y2  \
+	insn_test_ld1s_X1  \
+	insn_test_ld1s_Y2  \
+	insn_test_ld1s_add_X1  \
+	insn_test_ld1u_X1  \
+	insn_test_ld1u_Y2  \
+	insn_test_ld1u_add_X1  \
+	insn_test_ld2s_X1  \
+	insn_test_ld2s_Y2  \
+	insn_test_ld2u_X1  \
+	insn_test_ld2u_Y2  \
+	insn_test_ld4s_X1  \
+	insn_test_ld4s_add_X1  \
+	insn_test_ld4u_X1  \
+	insn_test_ld4u_Y2  \
+	insn_test_ld4u_add_X1  \
+	insn_test_ld_add_X1  \
+	insn_test_ldna_X1  \
+	insn_test_ldna_add_X1  \
+	insn_test_ldnt_X1  \
+	insn_test_ldnt1s_X1  \
+	insn_test_ldnt1s_add_X1  \
+	insn_test_ldnt1u_X1  \
+	insn_test_ldnt1u_add_X1  \
+	insn_test_ldnt2s_X1  \
+	insn_test_ldnt2s_add_X1  \
+	insn_test_ldnt2u_add_X1  \
+	insn_test_ldnt4s_X1  \
+	insn_test_ldnt4s_add_X1  \
+	insn_test_ldnt4u_X1  \
+	insn_test_ldnt4u_add_X1  \
+	insn_test_ldnt_add_X1  \
+	insn_test_lnk_X1  \
+	insn_test_lnk_Y1  \
+	insn_test_mf_X1  \
+	insn_test_mm_X0  \
+	insn_test_mnz_X0  \
+	insn_test_mnz_X1  \
+	insn_test_mnz_Y0  \
+	insn_test_mnz_Y1  \
+	insn_test_mul_hs_hs_X0  \
+	insn_test_mul_hs_hs_Y0  \
+	insn_test_mul_hs_hu_X0  \
+	insn_test_mul_hs_ls_X0  \
+	insn_test_mul_hs_lu_X0  \
+	insn_test_mul_hu_hu_X0  \
+	insn_test_mul_hu_hu_Y0  \
+	insn_test_mul_hu_lu_X0  \
+	insn_test_mul_ls_ls_X0  \
+	insn_test_mul_ls_ls_Y0  \
+	insn_test_mul_ls_lu_X0  \
+	insn_test_mul_lu_lu_X0  \
+	insn_test_mul_lu_lu_Y0  \
+	insn_test_mula_hs_hs_X0  \
+	insn_test_mula_hs_hs_Y0  \
+	insn_test_mula_hs_hu_X0  \
+	insn_test_mula_hs_ls_X0  \
+	insn_test_mula_hs_lu_X0  \
+	insn_test_mula_hu_hu_X0  \
+	insn_test_mula_hu_hu_Y0  \
+	insn_test_mula_hu_ls_X0  \
+	insn_test_mula_hu_lu_X0  \
+	insn_test_mula_ls_ls_X0  \
+	insn_test_mula_ls_ls_Y0  \
+	insn_test_mula_ls_lu_X0  \
+	insn_test_mula_lu_lu_X0  \
+	insn_test_mula_lu_lu_Y0  \
+	insn_test_mulax_X0  \
+	insn_test_mulax_Y0  \
+	insn_test_mulx_X0  \
+	insn_test_mulx_Y0  \
+	insn_test_mz_X0  \
+	insn_test_mz_X1  \
+	insn_test_mz_Y0  \
+	insn_test_mz_Y1  \
+	insn_test_nop_X0  \
+	insn_test_nop_X1  \
+	insn_test_nop_Y0  \
+	insn_test_nop_Y1  \
+	insn_test_nor_X0  \
+	insn_test_nor_X1  \
+	insn_test_nor_Y0  \
+	insn_test_nor_Y1  \
+	insn_test_or_X0  \
+	insn_test_or_X1  \
+	insn_test_or_Y0  \
+	insn_test_or_Y1  \
+	insn_test_ori_X0  \
+	insn_test_ori_X1  \
+	insn_test_pcnt_X0  \
+	insn_test_pcnt_Y0  \
+	insn_test_revbits_X0  \
+	insn_test_revbits_Y0  \
+	insn_test_revbytes_X0  \
+	insn_test_revbytes_Y0  \
+	insn_test_rotl_X0  \
+	insn_test_rotl_X1  \
+	insn_test_rotl_Y0  \
+	insn_test_rotl_Y1  \
+	insn_test_rotli_X0  \
+	insn_test_rotli_X1  \
+	insn_test_rotli_Y0  \
+	insn_test_rotli_Y1  \
+	insn_test_shl_X0  \
+	insn_test_shl_X1  \
+	insn_test_shl_Y0  \
+	insn_test_shl_Y1  \
+	insn_test_shl16insli_X0  \
+	insn_test_shl16insli_X1  \
+	insn_test_shl1add_X0  \
+	insn_test_shl1add_X1  \
+	insn_test_shl1add_Y0  \
+	insn_test_shl1add_Y1  \
+	insn_test_shl1addx_X0  \
+	insn_test_shl1addx_X1  \
+	insn_test_shl1addx_Y0  \
+	insn_test_shl1addx_Y1  \
+	insn_test_shl2add_X0  \
+	insn_test_shl2add_X1  \
+	insn_test_shl2add_Y0  \
+	insn_test_shl2add_Y1  \
+	insn_test_shl2addx_X0  \
+	insn_test_shl2addx_X1  \
+	insn_test_shl2addx_Y0  \
+	insn_test_shl2addx_Y1  \
+	insn_test_shl3add_X0  \
+	insn_test_shl3add_X1  \
+	insn_test_shl3add_Y0  \
+	insn_test_shl3add_Y1  \
+	insn_test_shl3addx_X0  \
+	insn_test_shl3addx_X1  \
+	insn_test_shl3addx_Y0  \
+	insn_test_shl3addx_Y1  \
+	insn_test_shli_X0  \
+	insn_test_shli_X1  \
+	insn_test_shli_Y0  \
+	insn_test_shli_Y1  \
+	insn_test_shlx_X0  \
+	insn_test_shlx_X1  \
+	insn_test_shlxi_X0  \
+	insn_test_shlxi_X1  \
+	insn_test_shrs_X0  \
+	insn_test_shrs_X1  \
+	insn_test_shrs_Y0  \
+	insn_test_shrs_Y1  \
+	insn_test_shrsi_X0  \
+	insn_test_shrsi_X1  \
+	insn_test_shrsi_Y0  \
+	insn_test_shrsi_Y1  \
+	insn_test_shru_X0  \
+	insn_test_shru_X1  \
+	insn_test_shru_Y0  \
+	insn_test_shru_Y1  \
+	insn_test_shrui_X0  \
+	insn_test_shrui_X1  \
+	insn_test_shrui_Y0  \
+	insn_test_shrui_Y1  \
+	insn_test_shrux_X0  \
+	insn_test_shrux_X1  \
+	insn_test_shufflebytes_X0  \
+	insn_test_st_X1  \
+	insn_test_st_Y2  \
+	insn_test_st1_X1  \
+	insn_test_st1_Y2  \
+	insn_test_st1_add_X1  \
+	insn_test_st2_X1  \
+	insn_test_st2_Y2  \
+	insn_test_st2_add_X1  \
+	insn_test_st4_X1  \
+	insn_test_st4_Y2  \
+	insn_test_st4_add_X1  \
+	insn_test_st_add_X1  \
+	insn_test_stnt_X1  \
+	insn_test_stnt1_X1  \
+	insn_test_stnt2_X1  \
+	insn_test_stnt2_add_X1  \
+	insn_test_stnt4_X1  \
+	insn_test_stnt4_add_X1  \
+	insn_test_stnt_add_X1  \
+	insn_test_sub_X0  \
+	insn_test_sub_X1  \
+	insn_test_sub_Y0  \
+	insn_test_sub_Y1  \
+	insn_test_subx_X0  \
+	insn_test_subx_X1  \
+	insn_test_subx_Y0  \
+	insn_test_subx_Y1  \
+	insn_test_tblidxb0_X0  \
+	insn_test_tblidxb0_Y0  \
+	insn_test_tblidxb1_X0  \
+	insn_test_tblidxb1_Y0  \
+	insn_test_tblidxb2_X0  \
+	insn_test_tblidxb2_Y0  \
+	insn_test_tblidxb3_X0  \
+	insn_test_tblidxb3_Y0  \
+	insn_test_v1add_X0  \
+	insn_test_v1add_X1  \
+	insn_test_v1adduc_X0  \
+	insn_test_v1adduc_X1  \
+	insn_test_v1adiffu_X0  \
+	insn_test_v1avgu_X0  \
+	insn_test_v1cmpeq_X0  \
+	insn_test_v1cmpeq_X1  \
+	insn_test_v1cmpeqi_X0  \
+	insn_test_v1cmpeqi_X1  \
+	insn_test_v1cmples_X0  \
+	insn_test_v1cmples_X1  \
+	insn_test_v1cmpleu_X0  \
+	insn_test_v1cmpleu_X1  \
+	insn_test_v1cmplts_X0  \
+	insn_test_v1cmplts_X1  \
+	insn_test_v1cmpltu_X0  \
+	insn_test_v1cmpltu_X1  \
+	insn_test_v1cmpne_X0  \
+	insn_test_v1cmpne_X1  \
+	insn_test_v1ddotpu_X0  \
+	insn_test_v1ddotpua_X0  \
+	insn_test_v1ddotpus_X0  \
+	insn_test_v1ddotpusa_X0  \
+	insn_test_v1dotp_X0  \
+	insn_test_v1dotpa_X0  \
+	insn_test_v1dotpu_X0  \
+	insn_test_v1dotpua_X0  \
+	insn_test_v1dotpus_X0  \
+	insn_test_v1dotpusa_X0  \
+	insn_test_v1int_h_X0  \
+	insn_test_v1int_h_X1  \
+	insn_test_v1int_l_X0  \
+	insn_test_v1int_l_X1  \
+	insn_test_v1maxu_X0  \
+	insn_test_v1maxu_X1  \
+	insn_test_v1minu_X0  \
+	insn_test_v1minu_X1  \
+	insn_test_v1mnz_X0  \
+	insn_test_v1mnz_X1  \
+	insn_test_v1multu_X0  \
+	insn_test_v1mulu_X0  \
+	insn_test_v1mulus_X0  \
+	insn_test_v1mz_X0  \
+	insn_test_v1mz_X1  \
+	insn_test_v1sadau_X0  \
+	insn_test_v1sadu_X0  \
+	insn_test_v1shl_X0  \
+	insn_test_v1shl_X1  \
+	insn_test_v1shli_X0  \
+	insn_test_v1shli_X1  \
+	insn_test_v1shrs_X0  \
+	insn_test_v1shrs_X1  \
+	insn_test_v1shrsi_X0  \
+	insn_test_v1shrsi_X1  \
+	insn_test_v1shru_X0  \
+	insn_test_v1shru_X1  \
+	insn_test_v1shrui_X0  \
+	insn_test_v1shrui_X1  \
+	insn_test_v1sub_X0  \
+	insn_test_v1sub_X1  \
+	insn_test_v1subuc_X0  \
+	insn_test_v1subuc_X1  \
+	insn_test_v2add_X0  \
+	insn_test_v2add_X1  \
+	insn_test_v2addsc_X0  \
+	insn_test_v2addsc_X1  \
+	insn_test_v2adiffs_X0  \
+	insn_test_v2avgs_X0  \
+	insn_test_v2cmpeq_X0  \
+	insn_test_v2cmpeq_X1  \
+	insn_test_v2cmpeqi_X0  \
+	insn_test_v2cmpeqi_X1  \
+	insn_test_v2cmples_X0  \
+	insn_test_v2cmples_X1  \
+	insn_test_v2cmpleu_X0  \
+	insn_test_v2cmpleu_X1  \
+	insn_test_v2cmplts_X0  \
+	insn_test_v2cmplts_X1  \
+	insn_test_v2cmpltsi_X0  \
+	insn_test_v2cmpltsi_X1  \
+	insn_test_v2cmpltu_X0  \
+	insn_test_v2cmpltu_X1  \
+	insn_test_v2cmpltui_X0  \
+	insn_test_v2cmpltui_X1  \
+	insn_test_v2cmpne_X0  \
+	insn_test_v2cmpne_X1  \
+	insn_test_v2dotp_X0  \
+	insn_test_v2dotpa_X0  \
+	insn_test_v2int_h_X0  \
+	insn_test_v2int_h_X1  \
+	insn_test_v2int_l_X0  \
+	insn_test_v2int_l_X1  \
+	insn_test_v2maxs_X0  \
+	insn_test_v2maxs_X1  \
+	insn_test_v2mins_X0  \
+	insn_test_v2mins_X1  \
+	insn_test_v2mnz_X0  \
+	insn_test_v2mnz_X1  \
+	insn_test_v2mulfsc_X0  \
+	insn_test_v2muls_X0  \
+	insn_test_v2mults_X0  \
+	insn_test_v2mz_X0  \
+	insn_test_v2mz_X1  \
+	insn_test_v2packh_X0  \
+	insn_test_v2packh_X1  \
+	insn_test_v2packl_X0  \
+	insn_test_v2packl_X1  \
+	insn_test_v2packuc_X0  \
+	insn_test_v2packuc_X1  \
+	insn_test_v2sadas_X0  \
+	insn_test_v2sadau_X0  \
+	insn_test_v2sads_X0  \
+	insn_test_v2sadu_X0  \
+	insn_test_v2shl_X0  \
+	insn_test_v2shl_X1  \
+	insn_test_v2shli_X0  \
+	insn_test_v2shli_X1  \
+	insn_test_v2shlsc_X0  \
+	insn_test_v2shlsc_X1  \
+	insn_test_v2shrs_X0  \
+	insn_test_v2shrs_X1  \
+	insn_test_v2shrsi_X0  \
+	insn_test_v2shrsi_X1  \
+	insn_test_v2shru_X0  \
+	insn_test_v2shru_X1  \
+	insn_test_v2shrui_X0  \
+	insn_test_v2shrui_X1  \
+	insn_test_v2sub_X0  \
+	insn_test_v2sub_X1  \
+	insn_test_v2subsc_X0  \
+	insn_test_v2subsc_X1  \
+	insn_test_v4add_X0  \
+	insn_test_v4add_X1  \
+	insn_test_v4addsc_X0  \
+	insn_test_v4addsc_X1  \
+	insn_test_v4int_h_X0  \
+	insn_test_v4int_h_X1  \
+	insn_test_v4int_l_X0  \
+	insn_test_v4int_l_X1  \
+	insn_test_v4packsc_X0  \
+	insn_test_v4packsc_X1  \
+	insn_test_v4shl_X0  \
+	insn_test_v4shl_X1  \
+	insn_test_v4shlsc_X0  \
+	insn_test_v4shlsc_X1  \
+	insn_test_v4shrs_X0  \
+	insn_test_v4shrs_X1  \
+	insn_test_v4shru_X0  \
+	insn_test_v4shru_X1  \
+	insn_test_v4sub_X0  \
+	insn_test_v4sub_X1  \
+	insn_test_v4subsc_X0  \
+	insn_test_v4subsc_X1  \
+	insn_test_wh64_X1  \
+	insn_test_xor_X0  \
+	insn_test_xor_X1  \
+	insn_test_xor_Y0  \
+	insn_test_xor_Y1  \
+	insn_test_xori_X0  \
+	insn_test_xori_X1
 
 check_PROGRAMS = \
-	allexec
+	allexec \
+	$(insn_tests)
 
-AM_CFLAGS    += @FLAG_M64@
+AM_CFLAGS    += @FLAG_M64@ -w
 AM_CXXFLAGS  += @FLAG_M64@
 AM_CCASFLAGS += @FLAG_M64@
 
 allexec_CFLAGS          = $(AM_CFLAGS) @FLAG_W_NO_NONNULL@
+gen_insn_test_CFLAGS    = $(AM_CFLAGS) @FLAG_W_NO_NONNULL@ -I$(top_srcdir)/VEX/priv
+gen_insn_test_LDADD     = ../../../VEX/priv/tilegx_disasm.o
+
+$(addsuffix .c, $(insn_tests)) : gen_insn_test
+	@$(srcdir)/gen_test.sh $@
+
+$(addsuffix .stdout.exp, $(insn_tests)) : $(insn_tests)
+	./$(basename $(basename $@)) > $@
+
+$(addsuffix .stderr.exp, $(insn_tests)) :
+	touch  $@
+
+$(addsuffix .vgtest, $(insn_tests)) :
+	echo -e "prog: $(basename $@)\nvgopts: -q" > $@
+
+check-am : $(addsuffix .stdout.exp, $(insn_tests))  $(addsuffix .stderr.exp, $(insn_tests)) $(addsuffix .vgtest, $(insn_tests))
+
+clean-am :
+	@rm -f *.stderr.exp *.stdout.exp *.vgtest $(addsuffix .c, $(insn_tests))  $(addsuffix .o, $(insn_tests)) $(insn_tests)
+	@rm -f *.o  $(bin_PROGRAMS)
+
+distclean-am : clean-am
diff --git a/none/tests/tilegx/filter_stderr b/none/tests/tilegx/filter_stderr
new file mode 100644
index 0000000..616ce05
--- /dev/null
+++ b/none/tests/tilegx/filter_stderr
@@ -0,0 +1,4 @@
+#! /bin/sh
+
+../filter_stderr
+
diff --git a/none/tests/tilegx/gen_insn_test.c b/none/tests/tilegx/gen_insn_test.c
new file mode 100644
index 0000000..d3a6ad5
--- /dev/null
+++ b/none/tests/tilegx/gen_insn_test.c
@@ -0,0 +1,711 @@
+//gcc a.c ../../../VEX/priv/tilegx_disasm.c   -I ../../../  -I ../../../VEX/priv/  -I ../../../VEX/pub/
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h>
+#include "tilegx_disasm.h"
+
+#undef DGB
+
+static unsigned char op_abnorm[TILEGX_OPC_NONE] = {
+  /* Black list */
+  [ TILEGX_OPC_BPT      ] = 1,
+  [ TILEGX_OPC_INFO     ] = 1,
+  [ TILEGX_OPC_INFOL    ] = 1,
+  [ TILEGX_OPC_DRAIN    ] = 1,
+  [ TILEGX_OPC_IRET     ] = 1,
+  [ TILEGX_OPC_SWINT0   ] = 1,
+  [ TILEGX_OPC_SWINT1   ] = 1,
+  [ TILEGX_OPC_SWINT2   ] = 1,
+  [ TILEGX_OPC_SWINT3   ] = 1,
+  [ TILEGX_OPC_LD4S_TLS ] = 1,
+  [ TILEGX_OPC_LD_TLS   ] = 1,
+  [ TILEGX_OPC_MFSPR    ] = 1,
+  [ TILEGX_OPC_MTSPR    ] = 1,
+  [ TILEGX_OPC_ILL      ] = 1,
+  [ TILEGX_OPC_NAP      ] = 1,
+
+  /* mem load */
+  [ TILEGX_OPC_LD         ] = 2,
+  [ TILEGX_OPC_LD_ADD     ] = 2,
+  [ TILEGX_OPC_LD1S       ] = 2,
+  [ TILEGX_OPC_LD1S_ADD   ] = 2,
+  [ TILEGX_OPC_LD1U       ] = 2,
+  [ TILEGX_OPC_LD1U_ADD   ] = 2,
+  [ TILEGX_OPC_LD2S       ] = 2,
+  [ TILEGX_OPC_LD2S_ADD   ] = 2,
+  [ TILEGX_OPC_LD2U       ] = 2,
+  [ TILEGX_OPC_LD2U_ADD   ] = 2,
+  [ TILEGX_OPC_LD4S       ] = 2,
+  [ TILEGX_OPC_LD4S_ADD   ] = 2,
+  [ TILEGX_OPC_LD4U       ] = 2,
+  [ TILEGX_OPC_LD4U_ADD   ] = 2,
+  [ TILEGX_OPC_LDNA       ] = 2,
+  [ TILEGX_OPC_LDNA_ADD   ] = 2,
+  [ TILEGX_OPC_LDNT       ] = 2,
+  [ TILEGX_OPC_LDNT1S     ] = 2,
+  [ TILEGX_OPC_LDNT1S_ADD ] = 2,
+  [ TILEGX_OPC_LDNT1U     ] = 2,
+  [ TILEGX_OPC_LDNT1U_ADD ] = 2,
+  [ TILEGX_OPC_LDNT2S     ] = 2,
+  [ TILEGX_OPC_LDNT2S_ADD ] = 2,
+  [ TILEGX_OPC_LDNT2U     ] = 2,
+  [ TILEGX_OPC_LDNT2U_ADD ] = 2,
+  [ TILEGX_OPC_LDNT4S     ] = 2,
+  [ TILEGX_OPC_LDNT4S_ADD ] = 2,
+  [ TILEGX_OPC_LDNT4U     ] = 2,
+  [ TILEGX_OPC_LDNT4U_ADD ] = 2,
+  [ TILEGX_OPC_LDNT_ADD   ] = 2,
+
+  /* mem store */
+  [ TILEGX_OPC_ST         ] = 4,
+  [ TILEGX_OPC_ST1        ] = 4,
+  [ TILEGX_OPC_ST1_ADD    ] = 4,
+  [ TILEGX_OPC_ST2        ] = 4,
+  [ TILEGX_OPC_ST2_ADD    ] = 4,
+  [ TILEGX_OPC_ST4        ] = 4,
+  [ TILEGX_OPC_ST4_ADD    ] = 4,
+  [ TILEGX_OPC_ST_ADD     ] = 4,
+  [ TILEGX_OPC_STNT       ] = 4,
+  [ TILEGX_OPC_STNT1      ] = 4,
+  [ TILEGX_OPC_STNT1_ADD  ] = 4,
+  [ TILEGX_OPC_STNT2      ] = 4,
+  [ TILEGX_OPC_STNT2_ADD  ] = 4,
+  [ TILEGX_OPC_STNT4      ] = 4,
+  [ TILEGX_OPC_STNT4_ADD  ] = 4,
+  [ TILEGX_OPC_STNT_ADD   ] = 4,
+
+  /* conditional branch */
+  [ TILEGX_OPC_BEQZ       ] = 8,
+  [ TILEGX_OPC_BEQZT      ] = 8,
+  [ TILEGX_OPC_BGEZ       ] = 8,
+  [ TILEGX_OPC_BGEZT      ] = 8,
+  [ TILEGX_OPC_BGTZ       ] = 8,
+  [ TILEGX_OPC_BGTZT      ] = 8,
+  [ TILEGX_OPC_BLBC       ] = 8,
+  [ TILEGX_OPC_BLBCT      ] = 8,
+  [ TILEGX_OPC_BLBS       ] = 8,
+  [ TILEGX_OPC_BLBST      ] = 8,
+  [ TILEGX_OPC_BLEZ       ] = 8,
+  [ TILEGX_OPC_BLEZT      ] = 8,
+  [ TILEGX_OPC_BLTZ       ] = 8,
+  [ TILEGX_OPC_BLTZT      ] = 8,
+  [ TILEGX_OPC_BNEZ       ] = 8,
+  [ TILEGX_OPC_BNEZT      ] = 8,
+};
+
+
+static tilegx_bundle_bits
+encode_insn_tilegx_X (int p, struct tilegx_decoded_instruction decoded);
+
+static tilegx_bundle_bits
+encode_insn_tilegx_Y (int p, struct tilegx_decoded_instruction decoded);
+
+static int decode( tilegx_bundle_bits *p, int count, ULong pc );
+
+static uint64_t
+RAND(int round) {
+  static volatile uint64_t rand_seed = 0;
+  while (round-- > 0)
+    rand_seed = (rand_seed >> 8) * 201520052007 + 1971;
+#ifdef DBG
+  printf("RAND: %d\n", (int)rand_seed);
+#endif
+  return rand_seed;
+}
+
+
+int main(int argc, char* argv[])
+{
+  int i, start, end, pipe;
+  struct tilegx_decoded_instruction decoded;
+  if (argc == 1) {
+    pipe = 0x1F;
+    start = 0;
+    end = TILEGX_OPC_NONE;
+  } else if (argc == 3) {
+    start = atoi(argv[1]);
+
+    if (start >= TILEGX_OPC_NONE)
+      return -1;
+
+    end = start + 1;
+    /* pipes: X: bit 0,1; Y: bit 2-4 */
+    pipe = atoi(argv[2]);
+  } else {
+    return -1;
+  }
+
+  for (i = start; i < end; i++) {
+    memset(&decoded, 0, sizeof(decoded));
+    const struct tilegx_opcode *opcode = &tilegx_opcodes[i];
+    decoded.opcode = opcode;
+#ifdef DBG
+    const char *op_name = decoded.opcode->name;
+    printf("\n\n%d) %s\n", i, op_name);
+#endif
+
+    if (op_abnorm[i] & 1)
+      continue;
+
+    /* X0 pipeline */
+    if (tilegx_opcodes[i].pipes & 1 & pipe)
+      encode_insn_tilegx_X(0, decoded);
+
+    /* X1 pipeline */
+    if (tilegx_opcodes[i].pipes & 2 & pipe)
+      encode_insn_tilegx_X(1, decoded);
+
+    /* Y0 pipleline */
+    if (tilegx_opcodes[i].pipes & 4 & pipe)
+      encode_insn_tilegx_Y(0, decoded);
+
+    /* Y1 pipleline */
+    if (tilegx_opcodes[i].pipes & 8 & pipe)
+      encode_insn_tilegx_Y(1, decoded);
+
+    /* Y2 pipleline */
+    if (tilegx_opcodes[i].pipes & 16 & pipe)
+      encode_insn_tilegx_Y(2, decoded);
+  }
+
+  return 0;
+}
+
+static tilegx_bundle_bits
+encode_insn_tilegx_X(int p, struct tilegx_decoded_instruction decoded)
+{
+  const struct tilegx_opcode *opc =
+    decoded.opcode;
+  int op_idx =  decoded.opcode->mnemonic;
+
+  tilegx_bundle_bits insn = 0;
+  //int pipeX01 = (opc->pipes & 0x01) ? 0 : 1;
+  int op_num  = opc->num_operands;
+
+  /* Assume either X0 or X1. */
+  if ((opc->pipes & 3) == 0)
+    return -1;
+
+  /* Insert fnop in other pipe. */
+  insn = tilegx_opcodes[TILEGX_OPC_FNOP].
+    fixed_bit_values[p ? 0 : 1];
+#ifdef DBG
+  printf(" X%d, ", p);
+#endif
+
+  insn |= opc->fixed_bit_values[p];
+
+  printf("//file: _insn_test_%s_X%d.c\n", decoded.opcode->name, p);
+  printf("//op=%d\n", op_idx);
+  printf("#include <stdio.h>\n");
+  printf("#include <stdlib.h>\n");
+
+  printf("\n"
+	 "void func_exit(void) {\n"
+	 "     printf(\"%cs\\n\", __func__);\n"
+	 "     exit(0);\n"
+	 "}\n"
+	 "\n"
+	 "void func_call(void) {\n"
+	 "     printf(\"%cs\\n\", __func__);\n"
+	 "     exit(0);\n"
+	 "}\n"
+	 "\n"
+	 "unsigned long mem[2] = { 0x%lx, 0x%lx };\n"
+	 "\n", '%', '%', RAND(op_idx), RAND(op_idx));
+
+  printf("int main(void) {\n");
+  printf("    unsigned long a[4] = { 0, 0 };\n");
+
+  printf("    asm __volatile__ (\n");
+
+  int i, n = 0;
+
+  if (op_abnorm[op_idx] & 6)
+    {
+      /* loop for each operand. */
+      for (i = 0 ; i < op_num; i++)
+	{
+	  const struct tilegx_operand *opd =
+	    &tilegx_operands[opc->operands[p][i]];
+
+	  if (opd->type == TILEGX_OP_TYPE_REGISTER) {
+	    /* A register operand, pick register 0-50 randomly. */
+	    decoded.operand_values[i] = RAND(op_idx) % 51;
+	    int r = decoded.operand_values[i];
+	    int64_t d = RAND(op_idx);
+#ifdef DBG
+	    printf(" %d) r%-2d %016lx\n", i, (int)r, (unsigned long)d);
+#endif
+	    int k = 0;
+	    for (k = 3; k >= 0 ; k--) {
+	      if (d >> (16 * k) || k == 0) {
+		printf("                      \"moveli r%d, %d\\n\"\n", r, (int)(d >> (16 * k)));
+		for (k--; k >= 0; k--)
+		  printf("                      \"shl16insli r%d, r%d, %d\\n\"\n", r, r, (int)(int16_t)(d >> (16 * k)));
+		break;
+	      }
+	    }
+	  } else {
+	    /* An immediate operand, pick a random value. */
+	    decoded.operand_values[i] = RAND(op_idx);
+#ifdef DBG
+	    printf(" %d) %016lx\n", (int)i, (unsigned long)decoded.operand_values[i]);
+#endif
+	  }
+
+	  Long  op = decoded.operand_values[i];
+	  decoded.operands[i] = opd;
+	  ULong x = opd->insert(op);
+	  insn |= x;
+	}
+      printf("                      \"");
+      if (op_abnorm[op_idx] & 2)
+	printf("move r%d, %c2\\n\"\n",  (int)decoded.operand_values[1], '%');
+      else
+	printf("move r%d, %c2\\n\"\n",  (int)decoded.operand_values[0], '%');
+
+      printf("                      \"");
+      decode(&insn, 2, 0);
+      printf("\\n\"\n");
+
+      /* loop for each operand. */
+      n = 0;
+      for (i = 0 ; i < op_num; i++)
+	{
+	  const struct tilegx_operand *opd =
+	    &tilegx_operands[opc->operands[p][i]];
+
+	  if (opd->type == TILEGX_OP_TYPE_REGISTER) {
+	    /* A register operand */
+	    printf("                      \"move %c%d, r%d\\n\"\n", '%', n, (int)decoded.operand_values[i]);
+	    n++;
+	  }
+	}
+
+      printf("                      ");
+      if (n)
+	printf(":");
+      for (i = 0; i < n; i++)
+	{
+	  printf("\"=r\"(a[%d])", i);
+	  if (i != n - 1)
+	    printf(",");
+	}
+      printf(" : \"r\"(mem)");
+
+      printf(");\n");
+
+      printf("    printf(\"%c016lx %c016lx\\n\", mem[0], mem[1]);\n", '%', '%');
+
+    }
+  else if (op_idx == TILEGX_OPC_J)
+    {
+      printf("                     \"%s %c0\\n\"\n", decoded.opcode->name, '%');
+      printf("                     :: \"i\"(func_exit));\n");
+    }
+  else if (op_idx == TILEGX_OPC_JAL)
+    {
+      printf("                     \"%s %c0\\n\"\n", decoded.opcode->name, '%');
+      printf("                     :: \"i\"(func_call));\n");
+    }
+  else if (op_idx == TILEGX_OPC_JR || op_idx == TILEGX_OPC_JRP)
+    {
+      printf("                     \"%s %c0\\n\"\n", decoded.opcode->name, '%');
+      printf("                     :: \"r\"(func_exit));\n");
+    }
+  else if (op_idx == TILEGX_OPC_JALR || op_idx == TILEGX_OPC_JALRP )
+    {
+      printf("                     \"%s %c0\\n\"\n", decoded.opcode->name, '%');
+      printf("                     :: \"r\"(func_call));\n");
+    }
+  else if (op_abnorm[op_idx] & 8)
+    {
+      // OPC_BXXX  conditional branch
+      int r = RAND(op_idx) % 51;
+      int d = RAND(op_idx) & 1;
+      printf("                     \"movei r%d, %d\\n\"\n", r, d);
+      printf("                     \"%s r%d,  %c0\\n\"\n", decoded.opcode->name, r, '%');
+      printf("                     \"jal %c1\\n\"\n", '%');
+      printf("                     :: \"i\"(func_exit), \"i\"(func_call));\n");
+    }
+  else
+    {
+      /* loop for each operand. */
+      for (i = 0 ; i < op_num; i++)
+	{
+	  const struct tilegx_operand *opd =
+	    &tilegx_operands[opc->operands[p][i]];
+
+	  if (opd->type == TILEGX_OP_TYPE_REGISTER) {
+	    /* A register operand, pick register 0-50 randomly. */
+	    decoded.operand_values[i] = RAND(op_idx) % 51;
+	    int r = decoded.operand_values[i];
+	    int64_t d = RAND(op_idx);
+
+#ifdef DBG
+	    printf(" %d) r%-2d %016lx\n", i, (int)r, (unsigned long)d);
+#endif
+	    int k = 0;
+	    for (k = 3; k >= 0 ; k--) {
+	      if (d >> (16 * k) || k == 0) {
+		printf("                      \"moveli r%d, %d\\n\"\n", r, (int)(d >> (16 * k)));
+		for (k--; k >= 0; k--)
+		  printf("                      \"shl16insli r%d, r%d, %d\\n\"\n", r, r, (int)(int16_t)(d >> (16 * k)));
+		break;
+	      }
+	    }
+	  } else {
+	    /* An immediate operand, pick a random value. */
+	    decoded.operand_values[i] = RAND(op_idx);
+#ifdef DBG
+	    printf(" %d) %016lx\n", (int)i, (unsigned long)decoded.operand_values[i]);
+#endif
+	  }
+
+	  Long  op = decoded.operand_values[i];
+	  decoded.operands[i] = opd;
+	  ULong x = opd->insert(op);
+	  insn |= x;
+	}
+      printf("                      \"");
+      decode(&insn, 2, 0);
+      printf("\\n\"\n");
+
+      /* loop for each operand. */
+      n = 0;
+      for (i = 0 ; i < op_num; i++)
+	{
+	  const struct tilegx_operand *opd =
+	    &tilegx_operands[opc->operands[p][i]];
+
+	  if (opd->type == TILEGX_OP_TYPE_REGISTER) {
+	    /* A register operand */
+	    printf("                      \"move %c%d, r%d\\n\"\n", '%', n, (int)decoded.operand_values[i]);
+	    n++;
+	  }
+	}
+
+      printf("                      ");
+      if (n)
+	printf(":");
+      for (i = 0; i < n; i++)
+	{
+	  printf("\"=r\"(a[%d])", i);
+	  if (i != n - 1)
+	    printf(",");
+	}
+
+      printf(");\n");
+    }
+
+  for (i = 0; i < n; i++)
+    {
+      printf("    printf(\"%c016lx\\n\", a[%d]);\n", '%', i);
+    }
+  printf("    return 0;\n");
+  printf("}\n");
+  return insn;
+}
+
+static tilegx_bundle_bits
+encode_insn_tilegx_Y (int p, struct tilegx_decoded_instruction decoded )
+{
+  int i;
+  const struct tilegx_opcode *opc =
+    decoded.opcode;
+  int op_idx =  decoded.opcode->mnemonic;
+
+  const struct tilegx_operand *opd;
+
+  tilegx_bundle_bits insn = 0;
+  Int op_num  = opc->num_operands;
+
+  /* Insert fnop in Y0 and Y1 pipeline. */
+  if (p != 0)
+    insn |= tilegx_opcodes[TILEGX_OPC_FNOP].
+      fixed_bit_values[2];
+
+  if (p != 1)
+    insn |= tilegx_opcodes[TILEGX_OPC_FNOP].
+      fixed_bit_values[3];
+
+  /* Fill-in Y2 as dumy load "ld zero, sp" */
+  if (p != 2) {
+    insn |= tilegx_opcodes[TILEGX_OPC_LD].
+      fixed_bit_values[4];
+    opd = &tilegx_operands[tilegx_opcodes[TILEGX_OPC_LD].operands[4][0]];
+    insn |= opd->insert(63);
+    opd = &tilegx_operands[tilegx_opcodes[TILEGX_OPC_LD].operands[4][1]];
+    insn |= opd->insert(54);
+  }
+#ifdef DBG
+  printf(" Y%d, ", p);
+#endif
+
+  insn |= opc->fixed_bit_values[2 + p];
+
+  printf("//file: _insn_test_%s_Y%d.c\n", decoded.opcode->name, p);
+  printf("//op=%d\n", op_idx);
+  printf("#include <stdio.h>\n");
+  printf("#include <stdlib.h>\n");
+
+  printf("\n"
+	 "void func_exit(void) {\n"
+	 "     printf(\"%cs\\n\", __func__);\n"
+	 "     exit(0);\n"
+	 "}\n"
+	 "\n"
+	 "void func_call(void) {\n"
+	 "     printf(\"%cs\\n\", __func__);\n"
+	 "     exit(0);\n"
+	 "}\n"
+	 "\n"
+	 "unsigned long mem[2] = { 0x%lx, 0x%lx };\n"
+	 "\n", '%', '%', RAND(op_idx), RAND(op_idx));
+
+  printf("int main(void) {\n");
+  printf("    unsigned long a[4] = { 0, 0 };\n");
+
+  printf("    asm __volatile__ (\n");
+
+  int n = 0;
+
+  if (op_abnorm[op_idx] & 6)
+    {
+      /* loop for each operand. */
+      for (i = 0 ; i < op_num; i++)
+	{
+          opd = &tilegx_operands[opc->operands[2 + p][i]];
+
+	  if (opd->type == TILEGX_OP_TYPE_REGISTER) {
+	    /* A register operand, pick register 0-53 randomly. */
+	    decoded.operand_values[i] = RAND(op_idx) % 53;
+	    int r = decoded.operand_values[i];
+	    int64_t d = RAND(op_idx);
+#ifdef DBG
+	    printf(" %d) r%-2d %016lx\n", i, (int)r, (unsigned long)d);
+#endif
+	    int k = 0;
+	    for (k = 3; k >= 0 ; k--) {
+	      if (d >> (16 * k) || k == 0) {
+		printf("                      \"moveli r%d, %d\\n\"\n", r, (int)(d >> (16 * k)));
+		for (k--; k >= 0; k--)
+		  printf("                      \"shl16insli r%d, r%d, %d\\n\"\n", r, r, (int)(int16_t)(d >> (16 * k)));
+		break;
+	      }
+	    }
+	  } else {
+	    /* An immediate operand, pick a random value. */
+	    decoded.operand_values[i] = RAND(op_idx);
+#ifdef DBG
+	    printf(" %d) %016lx\n", (int)i, (unsigned long)decoded.operand_values[i]);
+#endif
+	  }
+
+	  Long  op = decoded.operand_values[i];
+	  decoded.operands[i] = opd;
+	  ULong x = opd->insert(op);
+	  insn |= x;
+	}
+      printf("                      \"");
+      if (op_abnorm[op_idx] & 2)
+	printf("move r%d, %c2\\n\"\n",  (int)decoded.operand_values[1], '%');
+      else
+	printf("move r%d, %c2\\n\"\n",  (int)decoded.operand_values[0], '%');
+
+      printf("                      \"");
+      decode(&insn, 3, 0);
+      printf("\\n\"\n");
+
+      /* loop for each operand. */
+      n = 0;
+      for (i = 0 ; i < op_num; i++)
+	{
+          opd = &tilegx_operands[opc->operands[2 + p][i]];
+
+	  if (opd->type == TILEGX_OP_TYPE_REGISTER) {
+	    /* A register operand */
+	    printf("                      \"move %c%d, r%d\\n\"\n", '%', n, (int)decoded.operand_values[i]);
+	    n++;
+	  }
+	}
+
+      printf("                      ");
+      if (n)
+	printf(":");
+      for (i = 0; i < n; i++)
+	{
+	  printf("\"=r\"(a[%d])", i);
+	  if (i != n - 1)
+	    printf(",");
+	}
+      printf(" : \"r\"(mem)");
+
+      printf(");\n");
+
+      printf("    printf(\"%c016lx %c016lx\\n\", mem[0], mem[1]);\n", '%', '%');
+
+    }
+  else if (op_idx == TILEGX_OPC_J)
+    {
+      printf("                     \"%s %c0\\n\"\n", decoded.opcode->name, '%');
+      printf("                     :: \"i\"(func_exit));\n");
+    }
+  else if (op_idx == TILEGX_OPC_JAL)
+    {
+      printf("                     \"%s %c0\\n\"\n", decoded.opcode->name, '%');
+      printf("                     :: \"i\"(func_call));\n");
+    }
+  else if (op_idx == TILEGX_OPC_JR || op_idx == TILEGX_OPC_JRP)
+    {
+      printf("                     \"%s %c0\\n\"\n", decoded.opcode->name, '%');
+      printf("                     :: \"r\"(func_exit));\n");
+    }
+  else if (op_idx == TILEGX_OPC_JALR || op_idx == TILEGX_OPC_JALRP )
+    {
+      printf("                     \"%s %c0\\n\"\n", decoded.opcode->name, '%');
+      printf("                     :: \"r\"(func_call));\n");
+    }
+  else if (op_abnorm[op_idx] & 8)
+    {
+      // OPC_BXXX  conditional branch
+      int r = RAND(op_idx) % 51;
+      int d = RAND(op_idx) & 1;
+      printf("                     \"movei r%d, %d\\n\"\n", r, d);
+      printf("                     \"%s r%d,  %c0\\n\"\n", decoded.opcode->name, r, '%');
+      printf("                     \"jal %c1\\n\"\n", '%');
+      printf("                     :: \"i\"(func_exit), \"i\"(func_call));\n");
+    }
+  else
+    {
+      /* loop for each operand. */
+      for (i = 0 ; i < op_num; i++)
+	{
+          opd = &tilegx_operands[opc->operands[2 + p][i]];
+
+	  if (opd->type == TILEGX_OP_TYPE_REGISTER) {
+	    /* A register operand, pick register 0-50 randomly. */
+	    decoded.operand_values[i] = RAND(op_idx) % 51;
+	    int r = decoded.operand_values[i];
+	    int64_t d = RAND(op_idx);
+
+#ifdef DBG
+	    printf(" %d) r%-2d %016lx\n", i, (int)r, (unsigned long)d);
+#endif
+	    int k = 0;
+	    for (k = 3; k >= 0 ; k--) {
+	      if (d >> (16 * k) || k == 0) {
+		printf("                      \"moveli r%d, %d\\n\"\n", r, (int)(d >> (16 * k)));
+		for (k--; k >= 0; k--)
+		  printf("                      \"shl16insli r%d, r%d, %d\\n\"\n", r, r, (int)(int16_t)(d >> (16 * k)));
+		break;
+	      }
+	    }
+	  } else {
+	    /* An immediate operand, pick a random value. */
+	    decoded.operand_values[i] = RAND(op_idx);
+#ifdef DBG
+	    printf(" %d) %016lx\n", (int)i, (unsigned long)decoded.operand_values[i]);
+#endif
+	  }
+
+	  Long  op = decoded.operand_values[i];
+	  decoded.operands[i] = opd;
+	  ULong x = opd->insert(op);
+	  insn |= x;
+	}
+      printf("                      \"");
+      decode(&insn, 3, 0);
+      printf("\\n\"\n");
+
+      /* loop for each operand. */
+      n = 0;
+      for (i = 0 ; i < op_num; i++)
+	{
+          opd = &tilegx_operands[opc->operands[2 + p][i]];
+
+	  if (opd->type == TILEGX_OP_TYPE_REGISTER) {
+	    /* A register operand */
+	    printf("                      \"move %c%d, r%d\\n\"\n", '%', n, (int)decoded.operand_values[i]);
+	    n++;
+	  }
+	}
+
+      printf("                      ");
+      if (n)
+	printf(":");
+      for (i = 0; i < n; i++)
+	{
+	  printf("\"=r\"(a[%d])", i);
+	  if (i != n - 1)
+	    printf(",");
+	}
+
+      printf(");\n");
+    }
+
+  for (i = 0; i < n; i++)
+    {
+      printf("    printf(\"%c016lx\\n\", a[%d]);\n", '%', i);
+    }
+  printf("    return 0;\n");
+  printf("}\n");
+  return insn;
+}
+
+static int display_insn ( struct tilegx_decoded_instruction
+                          decoded[1] )
+{
+  int i;
+  for (i = 0;
+       decoded[i].opcode && (i < 1);
+       i++) {
+    int n;
+    printf("%s ", decoded[i].opcode->name);
+
+    for (n = 0; n < decoded[i].opcode->num_operands; n++) {
+      const struct tilegx_operand *op = decoded[i].operands[n];
+
+      if (op->type == TILEGX_OP_TYPE_REGISTER)
+        printf("r%d", (int) decoded[i].operand_values[n]);
+      else
+        printf("%ld", (unsigned long)decoded[i].operand_values[n]);
+
+      if (n != (decoded[i].opcode->num_operands - 1))
+        printf(", ");
+    }
+    printf(" ");
+  }
+  return i;
+}
+
+int decode( tilegx_bundle_bits *p, int count, ULong pc )
+{
+  struct tilegx_decoded_instruction
+    decode[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE];
+
+  if (pc) {
+    printf("%012llx %016llx  ", pc, (ULong)p[0]);
+    pc += 8;
+  }
+  parse_insn_tilegx(p[0], 0, decode);
+
+  int k;
+
+  printf("{ ");
+
+  for(k = 0; decode[k].opcode && (k <TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE);
+      k++) {
+
+    display_insn(&decode[k]);
+    if (--count > 0)
+      printf("; ");
+  }
+
+  printf(" }");
+
+  return count;
+}
diff --git a/none/tests/tilegx/gen_test.sh b/none/tests/tilegx/gen_test.sh
new file mode 100755
index 0000000..1b6537e
--- /dev/null
+++ b/none/tests/tilegx/gen_test.sh
@@ -0,0 +1,600 @@
+#!/bin/bash
+
+FILES=( "5 	 1 	 insn_test_move_X0.c"
+        "5 	 2 	 insn_test_move_X1.c"
+        "5 	 4 	 insn_test_move_Y0.c"
+	"5 	 8 	 insn_test_move_Y1.c"
+	"6 	 1 	 insn_test_movei_X0.c"
+	"6 	 2 	 insn_test_movei_X1.c"
+	"6 	 4 	 insn_test_movei_Y0.c"
+	"6 	 8 	 insn_test_movei_Y1.c"
+	"7 	 1 	 insn_test_moveli_X0.c"
+	"7 	 2 	 insn_test_moveli_X1.c"
+	"8 	 2 	 insn_test_prefetch_X1.c"
+	"8 	 16 	 insn_test_prefetch_Y2.c"
+	"9 	 2 	 insn_test_prefetch_add_l1_X1.c"
+	"10 	 2 	 insn_test_prefetch_add_l1_fault_X1.c"
+	"11 	 2 	 insn_test_prefetch_add_l2_X1.c"
+	"12 	 2 	 insn_test_prefetch_add_l2_fault_X1.c"
+	"13 	 2 	 insn_test_prefetch_add_l3_X1.c"
+	"14 	 2 	 insn_test_prefetch_add_l3_fault_X1.c"
+	"15 	 2 	 insn_test_prefetch_l1_X1.c"
+	"15 	 16 	 insn_test_prefetch_l1_Y2.c"
+	"16 	 2 	 insn_test_prefetch_l1_fault_X1.c"
+	"16 	 16 	 insn_test_prefetch_l1_fault_Y2.c"
+	"17 	 2 	 insn_test_prefetch_l2_X1.c"
+	"17 	 16 	 insn_test_prefetch_l2_Y2.c"
+	"18 	 2 	 insn_test_prefetch_l2_fault_X1.c"
+	"18 	 16 	 insn_test_prefetch_l2_fault_Y2.c"
+	"19 	 2 	 insn_test_prefetch_l3_X1.c"
+	"19 	 16 	 insn_test_prefetch_l3_Y2.c"
+	"20 	 2 	 insn_test_prefetch_l3_fault_X1.c"
+	"20 	 16 	 insn_test_prefetch_l3_fault_Y2.c"
+	"21 	 2 	 insn_test_raise_X1.c"
+	"22 	 1 	 insn_test_add_X0.c"
+	"22 	 2 	 insn_test_add_X1.c"
+	"22 	 4 	 insn_test_add_Y0.c"
+	"22 	 8 	 insn_test_add_Y1.c"
+	"23 	 1 	 insn_test_addi_X0.c"
+	"23 	 2 	 insn_test_addi_X1.c"
+	"23 	 4 	 insn_test_addi_Y0.c"
+	"23 	 8 	 insn_test_addi_Y1.c"
+	"24 	 1 	 insn_test_addli_X0.c"
+	"24 	 2 	 insn_test_addli_X1.c"
+	"25 	 1 	 insn_test_addx_X0.c"
+	"25 	 2 	 insn_test_addx_X1.c"
+	"25 	 4 	 insn_test_addx_Y0.c"
+	"25 	 8 	 insn_test_addx_Y1.c"
+	"26 	 1 	 insn_test_addxi_X0.c"
+	"26 	 2 	 insn_test_addxi_X1.c"
+	"26 	 4 	 insn_test_addxi_Y0.c"
+	"26 	 8 	 insn_test_addxi_Y1.c"
+	"27 	 1 	 insn_test_addxli_X0.c"
+	"27 	 2 	 insn_test_addxli_X1.c"
+	"28 	 1 	 insn_test_addxsc_X0.c"
+	"28 	 2 	 insn_test_addxsc_X1.c"
+	"29 	 1 	 insn_test_and_X0.c"
+	"29 	 2 	 insn_test_and_X1.c"
+	"29 	 4 	 insn_test_and_Y0.c"
+	"29 	 8 	 insn_test_and_Y1.c"
+	"30 	 1 	 insn_test_andi_X0.c"
+	"30 	 2 	 insn_test_andi_X1.c"
+	"30 	 4 	 insn_test_andi_Y0.c"
+	"30 	 8 	 insn_test_andi_Y1.c"
+	"31 	 2 	 insn_test_beqz_X1.c"
+	"32 	 2 	 insn_test_beqzt_X1.c"
+	"33 	 1 	 insn_test_bfexts_X0.c"
+	"34 	 1 	 insn_test_bfextu_X0.c"
+	"35 	 1 	 insn_test_bfins_X0.c"
+	"36 	 2 	 insn_test_bgez_X1.c"
+	"37 	 2 	 insn_test_bgezt_X1.c"
+	"38 	 2 	 insn_test_bgtz_X1.c"
+	"39 	 2 	 insn_test_bgtzt_X1.c"
+	"40 	 2 	 insn_test_blbc_X1.c"
+	"41 	 2 	 insn_test_blbct_X1.c"
+	"42 	 2 	 insn_test_blbs_X1.c"
+	"43 	 2 	 insn_test_blbst_X1.c"
+	"44 	 2 	 insn_test_blez_X1.c"
+	"45 	 2 	 insn_test_blezt_X1.c"
+	"46 	 2 	 insn_test_bltz_X1.c"
+	"47 	 2 	 insn_test_bltzt_X1.c"
+	"48 	 2 	 insn_test_bnez_X1.c"
+	"49 	 2 	 insn_test_bnezt_X1.c"
+	"50 	 1 	 insn_test_clz_X0.c"
+	"50 	 4 	 insn_test_clz_Y0.c"
+	"51 	 1 	 insn_test_cmoveqz_X0.c"
+	"51 	 4 	 insn_test_cmoveqz_Y0.c"
+	"52 	 1 	 insn_test_cmovnez_X0.c"
+	"52 	 4 	 insn_test_cmovnez_Y0.c"
+	"53 	 1 	 insn_test_cmpeq_X0.c"
+	"53 	 2 	 insn_test_cmpeq_X1.c"
+	"53 	 4 	 insn_test_cmpeq_Y0.c"
+	"53 	 8 	 insn_test_cmpeq_Y1.c"
+	"54 	 1 	 insn_test_cmpeqi_X0.c"
+	"54 	 2 	 insn_test_cmpeqi_X1.c"
+	"54 	 4 	 insn_test_cmpeqi_Y0.c"
+	"54 	 8 	 insn_test_cmpeqi_Y1.c"
+	"55 	 2 	 insn_test_cmpexch_X1.c"
+	"56 	 2 	 insn_test_cmpexch4_X1.c"
+	"57 	 1 	 insn_test_cmples_X0.c"
+	"57 	 2 	 insn_test_cmples_X1.c"
+	"57 	 4 	 insn_test_cmples_Y0.c"
+	"57 	 8 	 insn_test_cmples_Y1.c"
+	"58 	 1 	 insn_test_cmpleu_X0.c"
+	"58 	 2 	 insn_test_cmpleu_X1.c"
+	"58 	 4 	 insn_test_cmpleu_Y0.c"
+	"58 	 8 	 insn_test_cmpleu_Y1.c"
+	"59 	 1 	 insn_test_cmplts_X0.c"
+	"59 	 2 	 insn_test_cmplts_X1.c"
+	"59 	 4 	 insn_test_cmplts_Y0.c"
+	"59 	 8 	 insn_test_cmplts_Y1.c"
+	"60 	 1 	 insn_test_cmpltsi_X0.c"
+	"60 	 2 	 insn_test_cmpltsi_X1.c"
+	"60 	 4 	 insn_test_cmpltsi_Y0.c"
+	"60 	 8 	 insn_test_cmpltsi_Y1.c"
+	"61 	 1 	 insn_test_cmpltu_X0.c"
+	"61 	 2 	 insn_test_cmpltu_X1.c"
+	"61 	 4 	 insn_test_cmpltu_Y0.c"
+	"61 	 8 	 insn_test_cmpltu_Y1.c"
+	"62 	 1 	 insn_test_cmpltui_X0.c"
+	"62 	 2 	 insn_test_cmpltui_X1.c"
+	"63 	 1 	 insn_test_cmpne_X0.c"
+	"63 	 2 	 insn_test_cmpne_X1.c"
+	"63 	 4 	 insn_test_cmpne_Y0.c"
+	"63 	 8 	 insn_test_cmpne_Y1.c"
+	"64 	 1 	 insn_test_cmul_X0.c"
+	"65 	 1 	 insn_test_cmula_X0.c"
+	"66 	 1 	 insn_test_cmulaf_X0.c"
+	"67 	 1 	 insn_test_cmulf_X0.c"
+	"68 	 1 	 insn_test_cmulfr_X0.c"
+	"69 	 1 	 insn_test_cmulh_X0.c"
+	"70 	 1 	 insn_test_cmulhr_X0.c"
+	"71 	 1 	 insn_test_crc32_32_X0.c"
+	"72 	 1 	 insn_test_crc32_8_X0.c"
+	"73 	 1 	 insn_test_ctz_X0.c"
+	"73 	 4 	 insn_test_ctz_Y0.c"
+	"74 	 1 	 insn_test_dblalign_X0.c"
+	"75 	 1 	 insn_test_dblalign2_X0.c"
+	"75 	 2 	 insn_test_dblalign2_X1.c"
+	"76 	 1 	 insn_test_dblalign4_X0.c"
+	"76 	 2 	 insn_test_dblalign4_X1.c"
+	"77 	 1 	 insn_test_dblalign6_X0.c"
+	"77 	 2 	 insn_test_dblalign6_X1.c"
+	"79 	 2 	 insn_test_dtlbpr_X1.c"
+	"80 	 2 	 insn_test_exch_X1.c"
+	"81 	 2 	 insn_test_exch4_X1.c"
+	"82 	 1 	 insn_test_fdouble_add_flags_X0.c"
+	"83 	 1 	 insn_test_fdouble_addsub_X0.c"
+	"84 	 1 	 insn_test_fdouble_mul_flags_X0.c"
+	"85 	 1 	 insn_test_fdouble_pack1_X0.c"
+	"86 	 1 	 insn_test_fdouble_pack2_X0.c"
+	"87 	 1 	 insn_test_fdouble_sub_flags_X0.c"
+	"88 	 1 	 insn_test_fdouble_unpack_max_X0.c"
+	"89 	 1 	 insn_test_fdouble_unpack_min_X0.c"
+	"90 	 2 	 insn_test_fetchadd_X1.c"
+	"91 	 2 	 insn_test_fetchadd4_X1.c"
+	"92 	 2 	 insn_test_fetchaddgez_X1.c"
+	"93 	 2 	 insn_test_fetchaddgez4_X1.c"
+	"94 	 2 	 insn_test_fetchand_X1.c"
+	"95 	 2 	 insn_test_fetchand4_X1.c"
+	"96 	 2 	 insn_test_fetchor_X1.c"
+	"97 	 2 	 insn_test_fetchor4_X1.c"
+	"98 	 2 	 insn_test_finv_X1.c"
+	"99 	 2 	 insn_test_flush_X1.c"
+	"100 	 2 	 insn_test_flushwb_X1.c"
+	"101 	 1 	 insn_test_fnop_X0.c"
+	"101 	 2 	 insn_test_fnop_X1.c"
+	"101 	 4 	 insn_test_fnop_Y0.c"
+	"101 	 8 	 insn_test_fnop_Y1.c"
+	"102 	 1 	 insn_test_fsingle_add1_X0.c"
+	"103 	 1 	 insn_test_fsingle_addsub2_X0.c"
+	"104 	 1 	 insn_test_fsingle_mul1_X0.c"
+	"105 	 1 	 insn_test_fsingle_mul2_X0.c"
+	"106 	 1 	 insn_test_fsingle_pack1_X0.c"
+	"106 	 4 	 insn_test_fsingle_pack1_Y0.c"
+	"107 	 1 	 insn_test_fsingle_pack2_X0.c"
+	"108 	 1 	 insn_test_fsingle_sub1_X0.c"
+	"109 	 2 	 insn_test_icoh_X1.c"
+	"111 	 2 	 insn_test_inv_X1.c"
+	"113 	 2 	 insn_test_j_X1.c"
+	"114 	 2 	 insn_test_jal_X1.c"
+	"115 	 2 	 insn_test_jalr_X1.c"
+	"115 	 8 	 insn_test_jalr_Y1.c"
+	"116 	 2 	 insn_test_jalrp_X1.c"
+	"116 	 8 	 insn_test_jalrp_Y1.c"
+	"117 	 2 	 insn_test_jr_X1.c"
+	"117 	 8 	 insn_test_jr_Y1.c"
+	"118 	 2 	 insn_test_jrp_X1.c"
+	"118 	 8 	 insn_test_jrp_Y1.c"
+	"119 	 2 	 insn_test_ld_X1.c"
+	"119 	 16 	 insn_test_ld_Y2.c"
+	"120 	 2 	 insn_test_ld1s_X1.c"
+	"120 	 16 	 insn_test_ld1s_Y2.c"
+	"121 	 2 	 insn_test_ld1s_add_X1.c"
+	"122 	 2 	 insn_test_ld1u_X1.c"
+	"122 	 16 	 insn_test_ld1u_Y2.c"
+	"123 	 2 	 insn_test_ld1u_add_X1.c"
+	"124 	 2 	 insn_test_ld2s_X1.c"
+	"124 	 16 	 insn_test_ld2s_Y2.c"
+	"125 	 2 	 insn_test_ld2s_add_X1.c"
+	"126 	 2 	 insn_test_ld2u_X1.c"
+	"126 	 16 	 insn_test_ld2u_Y2.c"
+	"127 	 2 	 insn_test_ld2u_add_X1.c"
+	"128 	 2 	 insn_test_ld4s_X1.c"
+	"128 	 16 	 insn_test_ld4s_Y2.c"
+	"129 	 2 	 insn_test_ld4s_add_X1.c"
+	"130 	 2 	 insn_test_ld4u_X1.c"
+	"130 	 16 	 insn_test_ld4u_Y2.c"
+	"131 	 2 	 insn_test_ld4u_add_X1.c"
+	"132 	 2 	 insn_test_ld_add_X1.c"
+	"133 	 2 	 insn_test_ldna_X1.c"
+	"134 	 2 	 insn_test_ldna_add_X1.c"
+	"135 	 2 	 insn_test_ldnt_X1.c"
+	"136 	 2 	 insn_test_ldnt1s_X1.c"
+	"137 	 2 	 insn_test_ldnt1s_add_X1.c"
+	"138 	 2 	 insn_test_ldnt1u_X1.c"
+	"139 	 2 	 insn_test_ldnt1u_add_X1.c"
+	"140 	 2 	 insn_test_ldnt2s_X1.c"
+	"141 	 2 	 insn_test_ldnt2s_add_X1.c"
+	"142 	 2 	 insn_test_ldnt2u_X1.c"
+	"143 	 2 	 insn_test_ldnt2u_add_X1.c"
+	"144 	 2 	 insn_test_ldnt4s_X1.c"
+	"145 	 2 	 insn_test_ldnt4s_add_X1.c"
+	"146 	 2 	 insn_test_ldnt4u_X1.c"
+	"147 	 2 	 insn_test_ldnt4u_add_X1.c"
+	"148 	 2 	 insn_test_ldnt_add_X1.c"
+	"149 	 2 	 insn_test_lnk_X1.c"
+	"149 	 8 	 insn_test_lnk_Y1.c"
+	"150 	 2 	 insn_test_mf_X1.c"
+	"152 	 1 	 insn_test_mm_X0.c"
+	"153 	 1 	 insn_test_mnz_X0.c"
+	"153 	 2 	 insn_test_mnz_X1.c"
+	"153 	 4 	 insn_test_mnz_Y0.c"
+	"153 	 8 	 insn_test_mnz_Y1.c"
+	"155 	 1 	 insn_test_mul_hs_hs_X0.c"
+	"155 	 4 	 insn_test_mul_hs_hs_Y0.c"
+	"156 	 1 	 insn_test_mul_hs_hu_X0.c"
+	"157 	 1 	 insn_test_mul_hs_ls_X0.c"
+	"158 	 1 	 insn_test_mul_hs_lu_X0.c"
+	"159 	 1 	 insn_test_mul_hu_hu_X0.c"
+	"159 	 4 	 insn_test_mul_hu_hu_Y0.c"
+	"160 	 1 	 insn_test_mul_hu_ls_X0.c"
+	"161 	 1 	 insn_test_mul_hu_lu_X0.c"
+	"162 	 1 	 insn_test_mul_ls_ls_X0.c"
+	"162 	 4 	 insn_test_mul_ls_ls_Y0.c"
+	"163 	 1 	 insn_test_mul_ls_lu_X0.c"
+	"164 	 1 	 insn_test_mul_lu_lu_X0.c"
+	"164 	 4 	 insn_test_mul_lu_lu_Y0.c"
+	"165 	 1 	 insn_test_mula_hs_hs_X0.c"
+	"165 	 4 	 insn_test_mula_hs_hs_Y0.c"
+	"166 	 1 	 insn_test_mula_hs_hu_X0.c"
+	"167 	 1 	 insn_test_mula_hs_ls_X0.c"
+	"168 	 1 	 insn_test_mula_hs_lu_X0.c"
+	"169 	 1 	 insn_test_mula_hu_hu_X0.c"
+	"169 	 4 	 insn_test_mula_hu_hu_Y0.c"
+	"170 	 1 	 insn_test_mula_hu_ls_X0.c"
+	"171 	 1 	 insn_test_mula_hu_lu_X0.c"
+	"172 	 1 	 insn_test_mula_ls_ls_X0.c"
+	"172 	 4 	 insn_test_mula_ls_ls_Y0.c"
+	"173 	 1 	 insn_test_mula_ls_lu_X0.c"
+	"174 	 1 	 insn_test_mula_lu_lu_X0.c"
+	"174 	 4 	 insn_test_mula_lu_lu_Y0.c"
+	"175 	 1 	 insn_test_mulax_X0.c"
+	"175 	 4 	 insn_test_mulax_Y0.c"
+	"176 	 1 	 insn_test_mulx_X0.c"
+	"176 	 4 	 insn_test_mulx_Y0.c"
+	"177 	 1 	 insn_test_mz_X0.c"
+	"177 	 2 	 insn_test_mz_X1.c"
+	"177 	 4 	 insn_test_mz_Y0.c"
+	"177 	 8 	 insn_test_mz_Y1.c"
+	"179 	 1 	 insn_test_nop_X0.c"
+	"179 	 2 	 insn_test_nop_X1.c"
+	"179 	 4 	 insn_test_nop_Y0.c"
+	"179 	 8 	 insn_test_nop_Y1.c"
+	"180 	 1 	 insn_test_nor_X0.c"
+	"180 	 2 	 insn_test_nor_X1.c"
+	"180 	 4 	 insn_test_nor_Y0.c"
+	"180 	 8 	 insn_test_nor_Y1.c"
+	"181 	 1 	 insn_test_or_X0.c"
+	"181 	 2 	 insn_test_or_X1.c"
+	"181 	 4 	 insn_test_or_Y0.c"
+	"181 	 8 	 insn_test_or_Y1.c"
+	"182 	 1 	 insn_test_ori_X0.c"
+	"182 	 2 	 insn_test_ori_X1.c"
+	"183 	 1 	 insn_test_pcnt_X0.c"
+	"183 	 4 	 insn_test_pcnt_Y0.c"
+	"184 	 1 	 insn_test_revbits_X0.c"
+	"184 	 4 	 insn_test_revbits_Y0.c"
+	"185 	 1 	 insn_test_revbytes_X0.c"
+	"185 	 4 	 insn_test_revbytes_Y0.c"
+	"186 	 1 	 insn_test_rotl_X0.c"
+	"186 	 2 	 insn_test_rotl_X1.c"
+	"186 	 4 	 insn_test_rotl_Y0.c"
+	"186 	 8 	 insn_test_rotl_Y1.c"
+	"187 	 1 	 insn_test_rotli_X0.c"
+	"187 	 2 	 insn_test_rotli_X1.c"
+	"187 	 4 	 insn_test_rotli_Y0.c"
+	"187 	 8 	 insn_test_rotli_Y1.c"
+	"188 	 1 	 insn_test_shl_X0.c"
+	"188 	 2 	 insn_test_shl_X1.c"
+	"188 	 4 	 insn_test_shl_Y0.c"
+	"188 	 8 	 insn_test_shl_Y1.c"
+	"189 	 1 	 insn_test_shl16insli_X0.c"
+	"189 	 2 	 insn_test_shl16insli_X1.c"
+	"190 	 1 	 insn_test_shl1add_X0.c"
+	"190 	 2 	 insn_test_shl1add_X1.c"
+	"190 	 4 	 insn_test_shl1add_Y0.c"
+	"190 	 8 	 insn_test_shl1add_Y1.c"
+	"191 	 1 	 insn_test_shl1addx_X0.c"
+	"191 	 2 	 insn_test_shl1addx_X1.c"
+	"191 	 4 	 insn_test_shl1addx_Y0.c"
+	"191 	 8 	 insn_test_shl1addx_Y1.c"
+	"192 	 1 	 insn_test_shl2add_X0.c"
+	"192 	 2 	 insn_test_shl2add_X1.c"
+	"192 	 4 	 insn_test_shl2add_Y0.c"
+	"192 	 8 	 insn_test_shl2add_Y1.c"
+	"193 	 1 	 insn_test_shl2addx_X0.c"
+	"193 	 2 	 insn_test_shl2addx_X1.c"
+	"193 	 4 	 insn_test_shl2addx_Y0.c"
+	"193 	 8 	 insn_test_shl2addx_Y1.c"
+	"194 	 1 	 insn_test_shl3add_X0.c"
+	"194 	 2 	 insn_test_shl3add_X1.c"
+	"194 	 4 	 insn_test_shl3add_Y0.c"
+	"194 	 8 	 insn_test_shl3add_Y1.c"
+	"195 	 1 	 insn_test_shl3addx_X0.c"
+	"195 	 2 	 insn_test_shl3addx_X1.c"
+	"195 	 4 	 insn_test_shl3addx_Y0.c"
+	"195 	 8 	 insn_test_shl3addx_Y1.c"
+	"196 	 1 	 insn_test_shli_X0.c"
+	"196 	 2 	 insn_test_shli_X1.c"
+	"196 	 4 	 insn_test_shli_Y0.c"
+	"196 	 8 	 insn_test_shli_Y1.c"
+	"197 	 1 	 insn_test_shlx_X0.c"
+	"197 	 2 	 insn_test_shlx_X1.c"
+	"198 	 1 	 insn_test_shlxi_X0.c"
+	"198 	 2 	 insn_test_shlxi_X1.c"
+	"199 	 1 	 insn_test_shrs_X0.c"
+	"199 	 2 	 insn_test_shrs_X1.c"
+	"199 	 4 	 insn_test_shrs_Y0.c"
+	"199 	 8 	 insn_test_shrs_Y1.c"
+	"200 	 1 	 insn_test_shrsi_X0.c"
+	"200 	 2 	 insn_test_shrsi_X1.c"
+	"200 	 4 	 insn_test_shrsi_Y0.c"
+	"200 	 8 	 insn_test_shrsi_Y1.c"
+	"201 	 1 	 insn_test_shru_X0.c"
+	"201 	 2 	 insn_test_shru_X1.c"
+	"201 	 4 	 insn_test_shru_Y0.c"
+	"201 	 8 	 insn_test_shru_Y1.c"
+	"202 	 1 	 insn_test_shrui_X0.c"
+	"202 	 2 	 insn_test_shrui_X1.c"
+	"202 	 4 	 insn_test_shrui_Y0.c"
+	"202 	 8 	 insn_test_shrui_Y1.c"
+	"203 	 1 	 insn_test_shrux_X0.c"
+	"203 	 2 	 insn_test_shrux_X1.c"
+	"204 	 1 	 insn_test_shruxi_X0.c"
+	"204 	 2 	 insn_test_shruxi_X1.c"
+	"205 	 1 	 insn_test_shufflebytes_X0.c"
+	"206 	 2 	 insn_test_st_X1.c"
+	"206 	 16 	 insn_test_st_Y2.c"
+	"207 	 2 	 insn_test_st1_X1.c"
+	"207 	 16 	 insn_test_st1_Y2.c"
+	"208 	 2 	 insn_test_st1_add_X1.c"
+	"209 	 2 	 insn_test_st2_X1.c"
+	"209 	 16 	 insn_test_st2_Y2.c"
+	"210 	 2 	 insn_test_st2_add_X1.c"
+	"211 	 2 	 insn_test_st4_X1.c"
+	"211 	 16 	 insn_test_st4_Y2.c"
+	"212 	 2 	 insn_test_st4_add_X1.c"
+	"213 	 2 	 insn_test_st_add_X1.c"
+	"214 	 2 	 insn_test_stnt_X1.c"
+	"215 	 2 	 insn_test_stnt1_X1.c"
+	"216 	 2 	 insn_test_stnt1_add_X1.c"
+	"217 	 2 	 insn_test_stnt2_X1.c"
+	"218 	 2 	 insn_test_stnt2_add_X1.c"
+	"219 	 2 	 insn_test_stnt4_X1.c"
+	"220 	 2 	 insn_test_stnt4_add_X1.c"
+	"221 	 2 	 insn_test_stnt_add_X1.c"
+	"222 	 1 	 insn_test_sub_X0.c"
+	"222 	 2 	 insn_test_sub_X1.c"
+	"222 	 4 	 insn_test_sub_Y0.c"
+	"222 	 8 	 insn_test_sub_Y1.c"
+	"223 	 1 	 insn_test_subx_X0.c"
+	"223 	 2 	 insn_test_subx_X1.c"
+	"223 	 4 	 insn_test_subx_Y0.c"
+	"223 	 8 	 insn_test_subx_Y1.c"
+	"224 	 1 	 insn_test_subxsc_X0.c"
+	"224 	 2 	 insn_test_subxsc_X1.c"
+	"229 	 1 	 insn_test_tblidxb0_X0.c"
+	"229 	 4 	 insn_test_tblidxb0_Y0.c"
+	"230 	 1 	 insn_test_tblidxb1_X0.c"
+	"230 	 4 	 insn_test_tblidxb1_Y0.c"
+	"231 	 1 	 insn_test_tblidxb2_X0.c"
+	"231 	 4 	 insn_test_tblidxb2_Y0.c"
+	"232 	 1 	 insn_test_tblidxb3_X0.c"
+	"232 	 4 	 insn_test_tblidxb3_Y0.c"
+	"233 	 1 	 insn_test_v1add_X0.c"
+	"233 	 2 	 insn_test_v1add_X1.c"
+	"234 	 1 	 insn_test_v1addi_X0.c"
+	"234 	 2 	 insn_test_v1addi_X1.c"
+	"235 	 1 	 insn_test_v1adduc_X0.c"
+	"235 	 2 	 insn_test_v1adduc_X1.c"
+	"236 	 1 	 insn_test_v1adiffu_X0.c"
+	"237 	 1 	 insn_test_v1avgu_X0.c"
+	"238 	 1 	 insn_test_v1cmpeq_X0.c"
+	"238 	 2 	 insn_test_v1cmpeq_X1.c"
+	"239 	 1 	 insn_test_v1cmpeqi_X0.c"
+	"239 	 2 	 insn_test_v1cmpeqi_X1.c"
+	"240 	 1 	 insn_test_v1cmples_X0.c"
+	"240 	 2 	 insn_test_v1cmples_X1.c"
+	"241 	 1 	 insn_test_v1cmpleu_X0.c"
+	"241 	 2 	 insn_test_v1cmpleu_X1.c"
+	"242 	 1 	 insn_test_v1cmplts_X0.c"
+	"242 	 2 	 insn_test_v1cmplts_X1.c"
+	"243 	 1 	 insn_test_v1cmpltsi_X0.c"
+	"243 	 2 	 insn_test_v1cmpltsi_X1.c"
+	"244 	 1 	 insn_test_v1cmpltu_X0.c"
+	"244 	 2 	 insn_test_v1cmpltu_X1.c"
+	"245 	 1 	 insn_test_v1cmpltui_X0.c"
+	"245 	 2 	 insn_test_v1cmpltui_X1.c"
+	"246 	 1 	 insn_test_v1cmpne_X0.c"
+	"246 	 2 	 insn_test_v1cmpne_X1.c"
+	"247 	 1 	 insn_test_v1ddotpu_X0.c"
+	"248 	 1 	 insn_test_v1ddotpua_X0.c"
+	"249 	 1 	 insn_test_v1ddotpus_X0.c"
+	"250 	 1 	 insn_test_v1ddotpusa_X0.c"
+	"251 	 1 	 insn_test_v1dotp_X0.c"
+	"252 	 1 	 insn_test_v1dotpa_X0.c"
+	"253 	 1 	 insn_test_v1dotpu_X0.c"
+	"254 	 1 	 insn_test_v1dotpua_X0.c"
+	"255 	 1 	 insn_test_v1dotpus_X0.c"
+	"256 	 1 	 insn_test_v1dotpusa_X0.c"
+	"257 	 1 	 insn_test_v1int_h_X0.c"
+	"257 	 2 	 insn_test_v1int_h_X1.c"
+	"258 	 1 	 insn_test_v1int_l_X0.c"
+	"258 	 2 	 insn_test_v1int_l_X1.c"
+	"259 	 1 	 insn_test_v1maxu_X0.c"
+	"259 	 2 	 insn_test_v1maxu_X1.c"
+	"260 	 1 	 insn_test_v1maxui_X0.c"
+	"260 	 2 	 insn_test_v1maxui_X1.c"
+	"261 	 1 	 insn_test_v1minu_X0.c"
+	"261 	 2 	 insn_test_v1minu_X1.c"
+	"262 	 1 	 insn_test_v1minui_X0.c"
+	"262 	 2 	 insn_test_v1minui_X1.c"
+	"263 	 1 	 insn_test_v1mnz_X0.c"
+	"263 	 2 	 insn_test_v1mnz_X1.c"
+	"264 	 1 	 insn_test_v1multu_X0.c"
+	"265 	 1 	 insn_test_v1mulu_X0.c"
+	"266 	 1 	 insn_test_v1mulus_X0.c"
+	"267 	 1 	 insn_test_v1mz_X0.c"
+	"267 	 2 	 insn_test_v1mz_X1.c"
+	"268 	 1 	 insn_test_v1sadau_X0.c"
+	"269 	 1 	 insn_test_v1sadu_X0.c"
+	"270 	 1 	 insn_test_v1shl_X0.c"
+	"270 	 2 	 insn_test_v1shl_X1.c"
+	"271 	 1 	 insn_test_v1shli_X0.c"
+	"271 	 2 	 insn_test_v1shli_X1.c"
+	"272 	 1 	 insn_test_v1shrs_X0.c"
+	"272 	 2 	 insn_test_v1shrs_X1.c"
+	"273 	 1 	 insn_test_v1shrsi_X0.c"
+	"273 	 2 	 insn_test_v1shrsi_X1.c"
+	"274 	 1 	 insn_test_v1shru_X0.c"
+	"274 	 2 	 insn_test_v1shru_X1.c"
+	"275 	 1 	 insn_test_v1shrui_X0.c"
+	"275 	 2 	 insn_test_v1shrui_X1.c"
+	"276 	 1 	 insn_test_v1sub_X0.c"
+	"276 	 2 	 insn_test_v1sub_X1.c"
+	"277 	 1 	 insn_test_v1subuc_X0.c"
+	"277 	 2 	 insn_test_v1subuc_X1.c"
+	"278 	 1 	 insn_test_v2add_X0.c"
+	"278 	 2 	 insn_test_v2add_X1.c"
+	"279 	 1 	 insn_test_v2addi_X0.c"
+	"279 	 2 	 insn_test_v2addi_X1.c"
+	"280 	 1 	 insn_test_v2addsc_X0.c"
+	"280 	 2 	 insn_test_v2addsc_X1.c"
+	"281 	 1 	 insn_test_v2adiffs_X0.c"
+	"282 	 1 	 insn_test_v2avgs_X0.c"
+	"283 	 1 	 insn_test_v2cmpeq_X0.c"
+	"283 	 2 	 insn_test_v2cmpeq_X1.c"
+	"284 	 1 	 insn_test_v2cmpeqi_X0.c"
+	"284 	 2 	 insn_test_v2cmpeqi_X1.c"
+	"285 	 1 	 insn_test_v2cmples_X0.c"
+	"285 	 2 	 insn_test_v2cmples_X1.c"
+	"286 	 1 	 insn_test_v2cmpleu_X0.c"
+	"286 	 2 	 insn_test_v2cmpleu_X1.c"
+	"287 	 1 	 insn_test_v2cmplts_X0.c"
+	"287 	 2 	 insn_test_v2cmplts_X1.c"
+	"288 	 1 	 insn_test_v2cmpltsi_X0.c"
+	"288 	 2 	 insn_test_v2cmpltsi_X1.c"
+	"289 	 1 	 insn_test_v2cmpltu_X0.c"
+	"289 	 2 	 insn_test_v2cmpltu_X1.c"
+	"290 	 1 	 insn_test_v2cmpltui_X0.c"
+	"290 	 2 	 insn_test_v2cmpltui_X1.c"
+	"291 	 1 	 insn_test_v2cmpne_X0.c"
+	"291 	 2 	 insn_test_v2cmpne_X1.c"
+	"292 	 1 	 insn_test_v2dotp_X0.c"
+	"293 	 1 	 insn_test_v2dotpa_X0.c"
+	"294 	 1 	 insn_test_v2int_h_X0.c"
+	"294 	 2 	 insn_test_v2int_h_X1.c"
+	"295 	 1 	 insn_test_v2int_l_X0.c"
+	"295 	 2 	 insn_test_v2int_l_X1.c"
+	"296 	 1 	 insn_test_v2maxs_X0.c"
+	"296 	 2 	 insn_test_v2maxs_X1.c"
+	"297 	 1 	 insn_test_v2maxsi_X0.c"
+	"297 	 2 	 insn_test_v2maxsi_X1.c"
+	"298 	 1 	 insn_test_v2mins_X0.c"
+	"298 	 2 	 insn_test_v2mins_X1.c"
+	"299 	 1 	 insn_test_v2minsi_X0.c"
+	"299 	 2 	 insn_test_v2minsi_X1.c"
+	"300 	 1 	 insn_test_v2mnz_X0.c"
+	"300 	 2 	 insn_test_v2mnz_X1.c"
+	"301 	 1 	 insn_test_v2mulfsc_X0.c"
+	"302 	 1 	 insn_test_v2muls_X0.c"
+	"303 	 1 	 insn_test_v2mults_X0.c"
+	"304 	 1 	 insn_test_v2mz_X0.c"
+	"304 	 2 	 insn_test_v2mz_X1.c"
+	"305 	 1 	 insn_test_v2packh_X0.c"
+	"305 	 2 	 insn_test_v2packh_X1.c"
+	"306 	 1 	 insn_test_v2packl_X0.c"
+	"306 	 2 	 insn_test_v2packl_X1.c"
+	"307 	 1 	 insn_test_v2packuc_X0.c"
+	"307 	 2 	 insn_test_v2packuc_X1.c"
+	"308 	 1 	 insn_test_v2sadas_X0.c"
+	"309 	 1 	 insn_test_v2sadau_X0.c"
+	"310 	 1 	 insn_test_v2sads_X0.c"
+	"311 	 1 	 insn_test_v2sadu_X0.c"
+	"312 	 1 	 insn_test_v2shl_X0.c"
+	"312 	 2 	 insn_test_v2shl_X1.c"
+	"313 	 1 	 insn_test_v2shli_X0.c"
+	"313 	 2 	 insn_test_v2shli_X1.c"
+	"314 	 1 	 insn_test_v2shlsc_X0.c"
+	"314 	 2 	 insn_test_v2shlsc_X1.c"
+	"315 	 1 	 insn_test_v2shrs_X0.c"
+	"315 	 2 	 insn_test_v2shrs_X1.c"
+	"316 	 1 	 insn_test_v2shrsi_X0.c"
+	"316 	 2 	 insn_test_v2shrsi_X1.c"
+	"317 	 1 	 insn_test_v2shru_X0.c"
+	"317 	 2 	 insn_test_v2shru_X1.c"
+	"318 	 1 	 insn_test_v2shrui_X0.c"
+	"318 	 2 	 insn_test_v2shrui_X1.c"
+	"319 	 1 	 insn_test_v2sub_X0.c"
+	"319 	 2 	 insn_test_v2sub_X1.c"
+	"320 	 1 	 insn_test_v2subsc_X0.c"
+	"320 	 2 	 insn_test_v2subsc_X1.c"
+	"321 	 1 	 insn_test_v4add_X0.c"
+	"321 	 2 	 insn_test_v4add_X1.c"
+	"322 	 1 	 insn_test_v4addsc_X0.c"
+	"322 	 2 	 insn_test_v4addsc_X1.c"
+	"323 	 1 	 insn_test_v4int_h_X0.c"
+	"323 	 2 	 insn_test_v4int_h_X1.c"
+	"324 	 1 	 insn_test_v4int_l_X0.c"
+	"324 	 2 	 insn_test_v4int_l_X1.c"
+	"325 	 1 	 insn_test_v4packsc_X0.c"
+	"325 	 2 	 insn_test_v4packsc_X1.c"
+	"326 	 1 	 insn_test_v4shl_X0.c"
+	"326 	 2 	 insn_test_v4shl_X1.c"
+	"327 	 1 	 insn_test_v4shlsc_X0.c"
+	"327 	 2 	 insn_test_v4shlsc_X1.c"
+	"328 	 1 	 insn_test_v4shrs_X0.c"
+	"328 	 2 	 insn_test_v4shrs_X1.c"
+	"329 	 1 	 insn_test_v4shru_X0.c"
+	"329 	 2 	 insn_test_v4shru_X1.c"
+	"330 	 1 	 insn_test_v4sub_X0.c"
+	"330 	 2 	 insn_test_v4sub_X1.c"
+	"331 	 1 	 insn_test_v4subsc_X0.c"
+	"331 	 2 	 insn_test_v4subsc_X1.c"
+	"332 	 2 	 insn_test_wh64_X1.c"
+	"333 	 1 	 insn_test_xor_X0.c"
+	"333 	 2 	 insn_test_xor_X1.c"
+	"333 	 4 	 insn_test_xor_Y0.c"
+	"333 	 8 	 insn_test_xor_Y1.c"
+	"334 	 1 	 insn_test_xori_X0.c"
+	"334 	 2 	 insn_test_xori_X1.c"
+)
+
+if [ $# -gt 0 ]; then
+#fname = "$1"
+
+for f in "${FILES[@]}"
+do
+    array=(${f// / })
+    if [ ${array[2]} = $1 ]; then
+        ./gen_insn_test ${array[0]} ${array[1]} > ${array[2]}
+        exit 0
+    fi
+done
+
+exit -1
+
+else
+
+for f in "${FILES[@]}"
+do
+        echo $i $f
+        array=(${f// / })
+        ./gen_insn_test ${array[0]} ${array[1]} > ${array[2]}
+done
+
+fi
+
+
+
diff --git a/none/tests/x86-darwin/Makefile.am b/none/tests/x86-darwin/Makefile.am
new file mode 100644
index 0000000..a11fd45
--- /dev/null
+++ b/none/tests/x86-darwin/Makefile.am
@@ -0,0 +1,17 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = \
+	filter_stderr
+
+EXTRA_DIST = \
+	bug341419.vgtest bug341419.stderr.exp \
+	bug350062.vgtest bug350062.stderr.exp
+
+check_PROGRAMS = \
+	bug341419 \
+	bug350062
+
+AM_CFLAGS    += @FLAG_M32@ $(FLAG_MMMX) $(FLAG_MSSE)
+AM_CXXFLAGS  += @FLAG_M32@ $(FLAG_MMMX) $(FLAG_MSSE)
+AM_CCASFLAGS += @FLAG_M32@
diff --git a/none/tests/x86-darwin/bug341419.c b/none/tests/x86-darwin/bug341419.c
new file mode 100644
index 0000000..ef2d52e
--- /dev/null
+++ b/none/tests/x86-darwin/bug341419.c
@@ -0,0 +1,203 @@
+/* This changes the definition of ucontext_t */
+#define _XOPEN_SOURCE 1
+#include <stdio.h>
+#include <unistd.h>
+#include <signal.h>
+#include <string.h>
+#include <stdbool.h>
+#include <valgrind.h>
+
+#define offsetof(type, fld)	((unsigned long)&((type *)0)->fld)
+#define stringify(x)		#x
+
+static int verbose = 0;
+
+#define _ASSERT_OP(a, op, b) \
+    do { \
+	unsigned long long _a = (unsigned long long)(a); \
+	unsigned long long _b = (unsigned long long)(b); \
+	if (verbose) \
+	    fprintf(stderr, "%s:%d: ASSERT(" stringify(a) \
+		    " " stringify(op) " " stringify(b) ")\n", \
+		    __FILE__, __LINE__); \
+	if (!(_a op _b)) { \
+	    fprintf(stderr, "%s:%d: FAILED ASSERT((" stringify(a) \
+		    "=0x%016llx) " stringify(op) " (" stringify(b) "=0x%016llx))\n", \
+		    __FILE__, __LINE__, _a, _b); \
+	    _exit(1); \
+	} \
+    } while(0)
+#define ASSERT_EQ(a, b) _ASSERT_OP(a, ==, b)
+#define ASSERT_NE(a, b) _ASSERT_OP(a, !=, b)
+#define ASSERT_LTE(a, b) _ASSERT_OP(a, <=, b)
+#define ASSERT_GTE(a, b) _ASSERT_OP(a, >=, b)
+#define ASSERT(e) \
+    do { \
+	if (verbose) \
+	    fprintf(stderr, "%s:%d: ASSERT(" stringify(e) ")\n", \
+		    __FILE__, __LINE__); \
+	if (!(e)) { \
+	    fprintf(stderr, "%s:%d: FAILED ASSERT(" stringify(e) ")\n", \
+		    __FILE__, __LINE__); \
+	    _exit(1); \
+	} \
+    } while(0)
+
+
+static bool using_int3 = false;
+static volatile int sig_count = 0;
+static volatile int ran_after_fault = 0;
+static void *top_of_stack;
+static void *bottom_of_stack;
+
+void this_function_halts(void)
+{
+    int foo;
+    bottom_of_stack = &foo - 4;
+    /* EAX is used by compiler-generated code to
+     * increment ran_after_fault, so we need to
+     * preserve it in our asm section */
+    unsigned long saved_eax;
+
+    /* Set up registers with known values which will be tested in the signal handler */
+    __asm__ volatile("movl %%eax, %0" : "=m"(saved_eax));
+    __asm__ volatile("movl $0xfeed0101,%eax");
+    __asm__ volatile("movl $0xfeed0202,%ebx");
+    __asm__ volatile("movl $0xfeed0303,%ecx");
+    __asm__ volatile("movl $0xfeed0404,%edx");
+    __asm__ volatile("movl $0xfeed0505,%edi");
+    __asm__ volatile("movl $0xfeed0606,%esi");
+    __asm__ volatile("hlt");
+    __asm__ volatile("movl %0, %%eax" : : "m"(saved_eax));
+    ran_after_fault++;
+}
+
+void this_function_int3s(void)
+{
+    int foo;
+    bottom_of_stack = &foo - 4;
+    unsigned long saved_eax;
+
+    /* Set up registers with known values which will be tested in the signal handler */
+    __asm__ volatile("movl %%eax, %0" : "=m"(saved_eax));
+    __asm__ volatile("movl $0xfeed0101,%eax");
+    __asm__ volatile("movl $0xfeed0202,%ebx");
+    __asm__ volatile("movl $0xfeed0303,%ecx");
+    __asm__ volatile("movl $0xfeed0404,%edx");
+    __asm__ volatile("movl $0xfeed0505,%edi");
+    __asm__ volatile("movl $0xfeed0606,%esi");
+    __asm__ volatile("int $3");
+    __asm__ volatile("movl %0, %%eax" : : "m"(saved_eax));
+    ran_after_fault++;
+}
+
+
+static void
+handle_signal(int sig, siginfo_t *si, void *vuc)
+{
+    ucontext_t *uc = (ucontext_t *)vuc;
+
+    if (verbose)
+    {
+	fprintf(stderr, "handle_signal\n");
+	fflush(stderr);
+    }
+
+    sig_count++;
+    ASSERT(sig_count == 1);
+
+    int expected_sig = (using_int3 ? SIGTRAP : SIGSEGV);
+    ASSERT_EQ(sig, expected_sig);
+    ASSERT_NE(si, NULL);
+    ASSERT_NE(uc, NULL);
+    ASSERT_NE(uc->uc_mcontext, NULL);
+
+    /* Test that the siginfo is set up right for this signal */
+    ASSERT_EQ(si->si_signo, expected_sig);
+    ASSERT_EQ(si->si_errno, 0);
+    int expected_code = (using_int3 ? 1 : 0);
+    ASSERT_EQ(si->si_code, expected_code);
+    ASSERT_EQ(si->si_pid, 0);
+    ASSERT_EQ(si->si_uid, 0);
+    ASSERT_EQ(si->si_status, 0);
+    ASSERT_EQ(si->si_addr, 0);
+    ASSERT_EQ(si->si_band, 0);
+
+    /* Test that various registers were saved in the signal ucontext */
+    ASSERT_EQ(uc->uc_mcontext->__ss.__eax, 0xfeed0101);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__ebx, 0xfeed0202);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__ecx, 0xfeed0303);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__edx, 0xfeed0404);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__edi, 0xfeed0505);
+    ASSERT_EQ(uc->uc_mcontext->__ss.__esi, 0xfeed0606);
+
+    /* Test that the saved EBP and ESP point into roughly the right
+     * part of the stack */
+    ASSERT_GTE(uc->uc_mcontext->__ss.__ebp, bottom_of_stack);
+    ASSERT_LTE(uc->uc_mcontext->__ss.__ebp, top_of_stack);
+    ASSERT_GTE(uc->uc_mcontext->__ss.__esp, bottom_of_stack);
+    ASSERT_LTE(uc->uc_mcontext->__ss.__esp, top_of_stack);
+
+    /* Test that the saved EIP points into roughly the
+     * right part of the text segment */
+    char *calling_fn = (using_int3 ? (char *)&this_function_int3s : (char *)&this_function_halts);
+    ASSERT_GTE(uc->uc_mcontext->__ss.__eip, calling_fn);
+    ASSERT_LTE(uc->uc_mcontext->__ss.__eip, calling_fn+400);
+
+    /*
+    printf("	    RFLAGS 0x%016llx\n", (unsigned long long)uc->uc_mcontext->__ss.__rflags);
+    */
+
+    /*
+     * Test that the EIP is restored from the signal ucontext;
+     * this should skip past the HLT/INT instruction and
+     * allow execution to continue back out to main()
+     */
+    if (verbose)
+    {
+	fprintf(stderr, "Setting up to return past the HLT\n");
+	fflush(stderr);
+    }
+    uc->uc_mcontext->__ss.__eip += (using_int3 ? 0 : 1);
+
+    if (verbose)
+    {
+	fprintf(stderr, "Returning from signal handler\n");
+	fflush(stderr);
+    }
+}
+
+int main(int argc, char **argv)
+{
+    int r;
+    struct sigaction act;
+
+    top_of_stack = (void *)&act;
+
+    if (argc > 1 && !strcmp(argv[1], "--verbose"))
+	verbose = 1;
+
+    if (verbose)
+	printf("Setting up signal handler\n");
+    memset(&act, 0, sizeof(act));
+    act.sa_sigaction = handle_signal;
+    act.sa_flags |= SA_SIGINFO;
+    if (RUNNING_ON_VALGRIND)
+	using_int3 = true;
+    r = sigaction((using_int3 ? SIGTRAP : SIGSEGV), &act, NULL);
+    ASSERT_EQ(r, 0);
+
+    if (verbose)
+    {
+	fprintf(stderr, "Calling function with a breakpoint insn in it\n");
+	fflush(stderr);
+    }
+    if (using_int3)
+	this_function_int3s();
+    else
+	this_function_halts();
+    ASSERT_EQ(ran_after_fault, 1);
+
+    fprintf(stderr, "PASS\n");
+    return 0;
+}
diff --git a/none/tests/x86-darwin/bug341419.stderr.exp b/none/tests/x86-darwin/bug341419.stderr.exp
new file mode 100644
index 0000000..7ef22e9
--- /dev/null
+++ b/none/tests/x86-darwin/bug341419.stderr.exp
@@ -0,0 +1 @@
+PASS
diff --git a/none/tests/x86-darwin/bug341419.vgtest b/none/tests/x86-darwin/bug341419.vgtest
new file mode 100644
index 0000000..baae689
--- /dev/null
+++ b/none/tests/x86-darwin/bug341419.vgtest
@@ -0,0 +1,3 @@
+prog: bug341419
+vgopts: -q
+cleanup: rm -f vgcore.*
diff --git a/none/tests/x86-darwin/bug350062.c b/none/tests/x86-darwin/bug350062.c
new file mode 100644
index 0000000..3da92a2
--- /dev/null
+++ b/none/tests/x86-darwin/bug350062.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+// Refer https://bugs.kde.org/show_bug.cgi?id=350062
+
+int main(int argc, char **argv)
+{
+    double x = 1.1;
+    double i = floor(x);
+    
+    (void)i;
+
+    fprintf(stderr, "PASS\n");
+    return 0;
+}
diff --git a/none/tests/x86-darwin/bug350062.stderr.exp b/none/tests/x86-darwin/bug350062.stderr.exp
new file mode 100644
index 0000000..7ef22e9
--- /dev/null
+++ b/none/tests/x86-darwin/bug350062.stderr.exp
@@ -0,0 +1 @@
+PASS
diff --git a/none/tests/x86-darwin/bug350062.vgtest b/none/tests/x86-darwin/bug350062.vgtest
new file mode 100644
index 0000000..f25f0d4
--- /dev/null
+++ b/none/tests/x86-darwin/bug350062.vgtest
@@ -0,0 +1,3 @@
+prog: bug350062
+vgopts: -q
+cleanup: rm -f vgcore.*
diff --git a/none/tests/x86-darwin/filter_stderr b/none/tests/x86-darwin/filter_stderr
new file mode 100755
index 0000000..587754a
--- /dev/null
+++ b/none/tests/x86-darwin/filter_stderr
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+dir=`dirname $0`
+
+# Remove ==pid== and --pid-- and **pid** strings 
+perl -p -e 's/(==|--|\*\*)[0-9]{1,7}\1 //' |
+
+perl -p -e 's/0x[0-9A-Fa-f]+/0x......../g'
+
+# NOTE: it is essential for the bug345887 testcase that the stderr
+#       filtering does *not* remove lines beginning with --
diff --git a/none/tests/x86-linux/Makefile.am b/none/tests/x86-linux/Makefile.am
index 4fa0fac..2c86693 100644
--- a/none/tests/x86-linux/Makefile.am
+++ b/none/tests/x86-linux/Makefile.am
@@ -2,7 +2,7 @@
 include $(top_srcdir)/Makefile.tool-tests.am
 
 dist_noinst_SCRIPTS = \
-	filter_stderr filter_minimal
+	filter_stderr
 
 EXTRA_DIST = \
 	bug345887.stderr.exp bug345887.vgtest \
diff --git a/none/tests/x86-linux/bug345887.vgtest b/none/tests/x86-linux/bug345887.vgtest
index c014423..e567c47 100644
--- a/none/tests/x86-linux/bug345887.vgtest
+++ b/none/tests/x86-linux/bug345887.vgtest
@@ -1,4 +1,4 @@
 prog: bug345887
 vgopts: -q
-stderr_filter: filter_minimal
+stderr_filter: filter_stderr
 cleanup: rm -f vgcore.*
diff --git a/none/tests/x86-linux/filter_minimal b/none/tests/x86-linux/filter_minimal
deleted file mode 100755
index e69398c..0000000
--- a/none/tests/x86-linux/filter_minimal
+++ /dev/null
@@ -1,20 +0,0 @@
-#! /bin/sh
-
-dir=`dirname $0`
-
-# Remove ==pid== and **pid** strings 
-perl -p -e 's/(==|\*\*)[0-9]{1,7}\1 //' |
-
-perl -p -e 's/0x[0-9A-Fa-f]+/0x......../g' |
-
-# Older bash versions print abnormal termination messages on the stderr
-# of the bash process. Newer bash versions redirect such messages properly.
-# Suppress any redirected abnormal termination messages. You can find the
-# complete list of messages in the bash source file siglist.c.
-perl -n -e 'print if !/^(Segmentation fault|Alarm clock|Aborted|Bus error)( \(core dumped\))?$/' |
-
-# Remove the size in "The main thread stack size..." message.
-sed "s/The main thread stack size used in this run was [0-9]*/The main thread stack size used in this run was .../"
-
-# NOTE: it is essential for the bug345887 testcase that the stderr
-#       filtering does *not* remove lines beginning with --
diff --git a/none/tests/x86-linux/hang.vgtest b/none/tests/x86-linux/hang.vgtest
index c3678bb..9b17ae0 100644
--- a/none/tests/x86-linux/hang.vgtest
+++ b/none/tests/x86-linux/hang.vgtest
@@ -3,3 +3,4 @@
 # Can only be reproduced on an x86 box running a 32-bit kernel.
 prog: hang
 vgopts: -q
+cleanup: rm -f vgcore.*
diff --git a/none/tests/x86-linux/seg_override.c b/none/tests/x86-linux/seg_override.c
index 0f8cb2d..b7619c9 100644
--- a/none/tests/x86-linux/seg_override.c
+++ b/none/tests/x86-linux/seg_override.c
@@ -34,6 +34,7 @@
     } HighWord;
 } LDT_ENTRY;
 
+#if 0
 inline static void *wine_ldt_get_base( const LDT_ENTRY *ent )
 {
     return (void *)(ent->BaseLow |
@@ -46,7 +47,7 @@
     if (ent->HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff;
     return limit;
 }
-
+#endif
 
 /* our copy of the ldt */
 LDT_ENTRY ldt_copy[8192];
diff --git a/none/tests/x86-solaris/Makefile.am b/none/tests/x86-solaris/Makefile.am
new file mode 100644
index 0000000..ee69b23
--- /dev/null
+++ b/none/tests/x86-solaris/Makefile.am
@@ -0,0 +1,25 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = \
+	coredump_single_thread_mdb \
+	coredump_single_thread_sse_mdb \
+	filter_stderr
+	
+
+EXTRA_DIST = \
+	coredump_single_thread.post.exp coredump_single_thread.stderr.exp \
+	coredump_single_thread.stdout.exp coredump_single_thread.vgtest \
+	coredump_single_thread_sse.post.exp coredump_single_thread_sse.stderr.exp \
+	coredump_single_thread_sse.stdout.exp coredump_single_thread_sse.vgtest \
+	syscalls.stderr.exp syscalls.stdout.exp syscalls.vgtest
+
+check_PROGRAMS = \
+	coredump_single_thread \
+	coredump_single_thread_sse \
+	syscalls
+
+AM_CFLAGS    += @FLAG_M32@
+AM_CXXFLAGS  += @FLAG_M32@
+AM_CCASFLAGS += @FLAG_M32@
+
diff --git a/none/tests/x86-solaris/coredump_single_thread.c b/none/tests/x86-solaris/coredump_single_thread.c
new file mode 100644
index 0000000..7f2d3a9
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread.c
@@ -0,0 +1,52 @@
+/* Tests that Valgrind coredump support works correctly by producing
+   a core dump analyzable by mdb. */ 
+
+#include <stdio.h>
+#include <sys/types.h>
+
+__attribute__((noinline))
+static void inner(void)
+{
+   uint16_t cs, ds, ss, es, fs, gs;
+
+   /* Print segment registers as they cannot be set to arbitrary
+      values. */
+   __asm__ __volatile__(
+      "movw %%cs, %0\n"
+      "movw %%ds, %1\n"
+      "movw %%ss, %2\n"
+      "movw %%es, %3\n"
+      "movw %%fs, %4\n"
+      "movw %%gs, %5\n"
+      : "=m" (cs), "=m" (ds), "=m" (ss), "=m" (es), "=m" (fs), "=m" (gs));
+   printf("cs=%#x ds=%#x ss=%#x es=%#x fs=%#x gs=%#x\n",
+          cs, ds, ss, es, fs, gs);
+
+   /* Set other registers to apriori known values. */
+   __asm__ __volatile__(
+      "movl $0x101, %%eax\n"
+      "movl $0x102, %%ebx\n"
+      "movl $0x103, %%ecx\n"
+      "movl $0x104, %%edx\n"
+      "movl $0x105, %%esi\n"
+      "movl $0x106, %%edi\n"
+      // not %ebp as mdb is then not able to reconstruct stack trace
+      "movl $0x108, %%esp\n"
+      "movl $0x1234, (%%eax)\n"  // should cause SEGV here
+      "ud2"                      // should never get here
+      : // no output registers
+      : // no input registers
+      : "memory", "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi", "%esp");
+}
+
+__attribute__((noinline))
+static void outer(void)
+{
+   inner();
+}
+
+int main(int argc, const char *argv[])
+{
+   outer();
+   return 0;
+}
diff --git a/none/tests/x86-solaris/coredump_single_thread.post.exp b/none/tests/x86-solaris/coredump_single_thread.post.exp
new file mode 100644
index 0000000..407f7ac
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread.post.exp
@@ -0,0 +1,27 @@
+---Status---
+debugging core file of coredump_single (32-bit) from ...
+initial argv: ./coredump_single_thread
+threading model: native threads
+status: process terminated by SIGSEGV (Segmentation Fault), addr=........
+
+---Registers---
+%cs = 0x........            %eax = 0x00000101 
+%ds = 0x........            %ebx = 0x00000102 
+%ss = 0x........            %ecx = 0x00000103 
+%es = 0x........            %edx = 0x00000104 
+%fs = 0x........            %esi = 0x00000105 
+%gs = 0x........            %edi = 0x00000106 
+
+ %eip = 0x........  coredump_single_thread`inner+0x........
+%kesp = 0x00000000
+
+
+   %esp = 0x00000108
+%trapno = 0x0
+   %err = 0x0
+
+---Stack trace---
+coredump_single_thread`inner
+coredump_single_thread`outer
+coredump_single_thread`main
+coredump_single_thread`_start
diff --git a/none/tests/x86-solaris/coredump_single_thread.stderr.exp b/none/tests/x86-solaris/coredump_single_thread.stderr.exp
new file mode 100644
index 0000000..9ef2a8d
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread.stderr.exp
@@ -0,0 +1,9 @@
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Access not within mapped region at address 0x........
+   at 0x........: inner (coredump_single_thread.c:26)
+ If you believe this happened as a result of a stack
+ overflow in your program's main thread (unlikely but
+ possible), you can try to increase the size of the
+ main thread stack using the --main-stacksize= flag.
+ The main thread stack size used in this run was ....
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/x86-solaris/coredump_single_thread.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/x86-solaris/coredump_single_thread.stdout.exp
diff --git a/none/tests/x86-solaris/coredump_single_thread.vgtest b/none/tests/x86-solaris/coredump_single_thread.vgtest
new file mode 100644
index 0000000..77604a0
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread.vgtest
@@ -0,0 +1,5 @@
+prereq: rm -f vgcore.*
+prog: coredump_single_thread
+vgopts: -q
+post: ./coredump_single_thread_mdb
+cleanup: rm -f vgcore.*
diff --git a/none/tests/x86-solaris/coredump_single_thread_mdb b/none/tests/x86-solaris/coredump_single_thread_mdb
new file mode 100755
index 0000000..c500478
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread_mdb
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Filters are not run for post-test check commands.
+# Filter everything here.
+
+echo "---Status---"
+echo "::status" | /usr/bin/mdb vgcore.* | \
+perl -p -e 's/from \S*$/from .../' | \
+perl -0 -p -e 's/^file: .+?^(initial argv:)/$1/ms' | \
+perl -p -e 's/addr=[0-9A-Fa-f]+/addr=......../g'
+
+echo "\n---Registers---"
+echo "::regs" | /usr/bin/mdb vgcore.* | \
+perl -p -e 's/(%[cdsefg]s)\s+=\s+0x[0-9A-Fa-f]+/$1 = 0x......../' | \
+perl -p -e 's/%eip\s+=\s+0x[0-9A-Fa-f]+(.*)\+0x[0-9A-Fa-f]+$/%eip = 0x........ $1+0x......../' | \
+sed '/%ebp/ d' | \
+sed '/^%eflags/ d' | \
+sed '/id=/ d' | \
+sed '/status=/ d'
+
+echo "\n---Stack trace---"
+echo "::stack ! perl -p -e 's/^(\S+)\+.*/\$1/g'" | /usr/bin/mdb vgcore.*
diff --git a/none/tests/x86-solaris/coredump_single_thread_sse.c b/none/tests/x86-solaris/coredump_single_thread_sse.c
new file mode 100644
index 0000000..2d8c883
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread_sse.c
@@ -0,0 +1,73 @@
+/* Tests that Valgrind coredump support for SSE registers works correctly
+   by producing a core dump analyzable by mdb.
+   Basic register set is tested in coredump_single_thread. */
+
+#include <stdio.h>
+#include <sys/types.h>
+
+__attribute__((noinline))
+static void inner(void)
+{
+   /* Set XMM registers to apriori known values.
+      Unfortunately there is no instruction to load
+      an immediate value directly into xmm register. */
+   __asm__ __volatile__("\n"
+      "pushl $0x12345678\n"
+      "pushl $0x9abcdef0\n"
+      "pushl $0xfedbca98\n"
+      "pushl $0x76543210\n"
+      "movups (%%esp), %%xmm0\n"
+      "pushl $0x23456789\n"
+      "pushl $0x09876543\n"
+      "pushl $0x21fedcba\n"
+      "pushl $0x9467feca\n"
+      "movups (%%esp), %%xmm1\n"
+      "pushl $0xabcdabcd\n"
+      "pushl $0xcedecede\n"
+      "pushl $0xfabafaba\n"
+      "pushl $0x50656754\n"
+      "movups (%%esp), %%xmm2\n"
+      "pushl $0x03050608\n"
+      "pushl $0x1d1b4b15\n"
+      "pushl $0x25272120\n"
+      "pushl $0x373a3d35\n"
+      "movups (%%esp), %%xmm3\n"
+      "pushl $0x9abcdef0\n"
+      "pushl $0x76543210\n"
+      "pushl $0x12345678\n"
+      "pushl $0xfedbca98\n"
+      "movups (%%esp), %%xmm4\n"
+      "pushl $0x9467feca\n"
+      "pushl $0x23456789\n"
+      "pushl $0x21fedcba\n"
+      "pushl $0x09876543\n"
+      "movups (%%esp), %%xmm5\n"
+      "pushl $0x50656754\n"
+      "pushl $0xcedecede\n"
+      "pushl $0xabcdabcd\n"
+      "pushl $0xfabafaba\n"
+      "movups (%%esp), %%xmm6\n"
+      "pushl $0x373a3d35\n"
+      "pushl $0x1d1b4b15\n"
+      "pushl $0x03050608\n"
+      "pushl $0x25272120\n"
+      "movups (%%esp), %%xmm7\n"
+      "movl $0x1, %%eax\n"
+      "movl $0x1234, (%%eax)\n"  // should cause SEGV here
+      : // no output registers
+      : // no input registers
+      : "memory", "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7");
+}
+
+__attribute__((noinline))
+static void outer(void)
+{
+   inner();
+}
+
+int main(int argc, const char *argv[])
+{
+   outer();
+   return 0;
+}
diff --git a/none/tests/x86-solaris/coredump_single_thread_sse.post.exp b/none/tests/x86-solaris/coredump_single_thread_sse.post.exp
new file mode 100644
index 0000000..d42da8a
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread_sse.post.exp
@@ -0,0 +1,15 @@
+---Status---
+debugging core file of coredump_single (32-bit) from ...
+initial argv: ./coredump_single_thread_sse
+threading model: native threads
+status: process terminated by SIGSEGV (Segmentation Fault), addr=........
+
+---SSE Registers---
+%xmm0  0x123456789abcdef0fedbca9876543210
+%xmm1  0x234567890987654321fedcba9467feca
+%xmm2  0xabcdabcdcedecedefabafaba50656754
+%xmm3  0x030506081d1b4b1525272120373a3d35
+%xmm4  0x9abcdef07654321012345678fedbca98
+%xmm5  0x9467feca2345678921fedcba09876543
+%xmm6  0x50656754cedecedeabcdabcdfabafaba
+%xmm7  0x373a3d351d1b4b150305060825272120
diff --git a/none/tests/x86-solaris/coredump_single_thread_sse.stderr.exp b/none/tests/x86-solaris/coredump_single_thread_sse.stderr.exp
new file mode 100644
index 0000000..7d8706a
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread_sse.stderr.exp
@@ -0,0 +1,11 @@
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Access not within mapped region at address 0x........
+   at 0x........: inner (coredump_single_thread_sse.c:14)
+   by 0x........: outer (coredump_single_thread_sse.c:66)
+   by 0x........: main (coredump_single_thread_sse.c:71)
+ If you believe this happened as a result of a stack
+ overflow in your program's main thread (unlikely but
+ possible), you can try to increase the size of the
+ main thread stack using the --main-stacksize= flag.
+ The main thread stack size used in this run was ....
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/x86-solaris/coredump_single_thread_sse.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/x86-solaris/coredump_single_thread_sse.stdout.exp
diff --git a/none/tests/x86-solaris/coredump_single_thread_sse.vgtest b/none/tests/x86-solaris/coredump_single_thread_sse.vgtest
new file mode 100644
index 0000000..efc880a
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread_sse.vgtest
@@ -0,0 +1,5 @@
+prereq: rm -f vgcore.* && ../../../tests/x86_amd64_features x86-sse
+prog: coredump_single_thread_sse
+vgopts: -q
+post: ./coredump_single_thread_sse_mdb
+cleanup: rm -f vgcore.*
diff --git a/none/tests/x86-solaris/coredump_single_thread_sse_mdb b/none/tests/x86-solaris/coredump_single_thread_sse_mdb
new file mode 100755
index 0000000..3cc5413
--- /dev/null
+++ b/none/tests/x86-solaris/coredump_single_thread_sse_mdb
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# Filters are not run for post-test check commands.
+# Filter everything here.
+
+echo "---Status---"
+echo "::status" | /usr/bin/mdb vgcore.* | \
+perl -p -e 's/from \S*$/from .../' | \
+perl -0 -p -e 's/^file: .+?^(initial argv:)/$1/ms' | \
+perl -p -e 's/addr=[0-9A-Fa-f]+/addr=......../g'
+
+echo "\n---SSE Registers---"
+echo "::fpregs" | /usr/bin/mdb vgcore.* | \
+perl -n -e '/^%xmm/ && print $_;'
+
diff --git a/none/tests/x86-solaris/filter_stderr b/none/tests/x86-solaris/filter_stderr
new file mode 100755
index 0000000..0ae9313
--- /dev/null
+++ b/none/tests/x86-solaris/filter_stderr
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr
diff --git a/none/tests/x86-solaris/syscalls.c b/none/tests/x86-solaris/syscalls.c
new file mode 100644
index 0000000..75040a0
--- /dev/null
+++ b/none/tests/x86-solaris/syscalls.c
@@ -0,0 +1,59 @@
+/* Test that all instructions that make syscalls are handled correctly.
+   Note that it isn't possible to run this program natively. */
+
+#include <stdio.h>
+#include <sys/syscall.h>
+#include <sys/trap.h>
+
+#define SYSCALL(instr, scnum, out) \
+do { \
+__asm__ __volatile__( \
+   "movl %1,%%eax\n" \
+   "leal 0f,%%edx\n" /* Set return address for SYSENTER. */ \
+   instr "\n" \
+   "0:\n" \
+   "movl %%eax,%0\n" \
+   : "=m" (out) \
+   : "i" (scnum) \
+   : "eax", "edx", "cc", "memory"); \
+} while (0)
+
+static void check_pid(int pid, int pid2, const char *instr)
+{
+   if (pid == pid2)
+      return;
+
+   fprintf(stderr, "Pid values differ, instruction: %s\n", instr);
+}
+
+int main(void)
+{
+   int pid, pid2, dummy;
+
+   /* Normal Solaris/x86 syscall instructions. */
+   SYSCALL("int $0x91", SYS_getpid, pid);
+
+   /* AMD's syscall instruction. */
+   SYSCALL("syscall", SYS_getpid, pid2);
+   check_pid(pid, pid2, "syscall");
+
+   /* Intel's sysenter instruction. */
+   SYSCALL("sysenter", SYS_getpid, pid2);
+   check_pid(pid, pid2, "sysenter");
+
+   /* Linux syscall instructions that are handled as "int $0x91". */
+   SYSCALL("int $0x80", SYS_getpid, pid2);
+   check_pid(pid, pid2, "int $0x80");
+
+   SYSCALL("int $0x81", SYS_getpid, pid2);
+   check_pid(pid, pid2, "int $0x81");
+
+   SYSCALL("int $0x82", SYS_getpid, pid2);
+   check_pid(pid, pid2, "int $0x82");
+
+   /* Fasttraps. */
+   SYSCALL("int $0xd2", T_GETHRTIME, dummy);
+
+   return 0;
+}
+
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/x86-solaris/syscalls.stderr.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/x86-solaris/syscalls.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stderr.exp b/none/tests/x86-solaris/syscalls.stdout.exp
similarity index 100%
copy from none/tests/scripts/shell_nointerp1.stderr.exp
copy to none/tests/x86-solaris/syscalls.stdout.exp
diff --git a/none/tests/x86-solaris/syscalls.vgtest b/none/tests/x86-solaris/syscalls.vgtest
new file mode 100644
index 0000000..16769d0
--- /dev/null
+++ b/none/tests/x86-solaris/syscalls.vgtest
@@ -0,0 +1,2 @@
+prog: syscalls
+vgopts: -q
diff --git a/none/tests/x86/Makefile.am b/none/tests/x86/Makefile.am
index e2465f7..2b35cd9 100644
--- a/none/tests/x86/Makefile.am
+++ b/none/tests/x86/Makefile.am
@@ -1,18 +1,29 @@
 
 include $(top_srcdir)/Makefile.tool-tests.am
 
-dist_noinst_SCRIPTS = filter_cpuid filter_stderr gen_insn_test.pl
+dist_noinst_SCRIPTS = filter_cpuid filter_inf_nan filter_stderr gen_insn_test.pl
 
 CLEANFILES = $(addsuffix .c,$(INSN_TESTS))
 
-INSN_TESTS = insn_basic insn_fpu insn_cmov insn_mmx insn_mmxext \
-		insn_sse insn_sse2
-if BUILD_SSE3_TESTS
-   INSN_TESTS += insn_sse3
-endif
+INSN_TESTS = insn_basic insn_cmov insn_mmx insn_mmxext
+
+if !COMPILER_IS_CLANG
+   INSN_TESTS += insn_sse insn_sse2
 if BUILD_SSSE3_TESTS
    INSN_TESTS += insn_ssse3
 endif
+if BUILD_SSE3_TESTS
+if !SOLARIS_SUN_STUDIO_AS
+# Sun Studio assembler fails to build some tests (illegal mnemonic).
+   INSN_TESTS += insn_sse3
+endif
+endif
+endif
+
+if !SOLARIS_SUN_STUDIO_AS
+# Sun Studio assembler fails to build some tests (illegal mnemonic).
+   INSN_TESTS += insn_fpu
+endif
 
 # Explicitly include insn_sse3 even if ! BUILD_SSE3_TESTS, 
 # to avoid packaging screwups if 'make dist' is run on a machine
@@ -22,7 +33,8 @@
 
 EXTRA_DIST = \
 	aad_aam.stdout.exp aad_aam.stderr.exp aad_aam.vgtest \
-	badseg.stderr.exp badseg.stdout.exp badseg.vgtest \
+	badseg.stderr.exp badseg.stdout.exp badseg.stdout.exp-solaris \
+	badseg.vgtest \
 	bt_everything.stderr.exp bt_everything.stdout.exp bt_everything.vgtest \
 	bt_literal.stderr.exp bt_literal.stdout.exp bt_literal.vgtest \
 	bug125959-x86.stderr.exp bug125959-x86.stdout.exp bug125959-x86.vgtest \
@@ -46,6 +58,9 @@
 	$(addsuffix .stderr.exp,$(INSN_TESTS)) \
 	$(addsuffix .stdout.exp,$(INSN_TESTS)) \
 	$(addsuffix .vgtest,$(INSN_TESTS)) \
+	insn_fpu.stdout.exp insn_fpu.stderr.exp insn_fpu.vgtest \
+	insn_sse.stdout.exp insn_sse.stderr.exp insn_sse.vgtest \
+	insn_sse2.stdout.exp insn_sse2.stderr.exp insn_sse2.vgtest \
 	insn_sse3.stdout.exp insn_sse3.stderr.exp insn_sse3.vgtest \
 	insn_ssse3.stdout.exp insn_ssse3.stderr.exp insn_ssse3.vgtest \
 	jcxz.stdout.exp jcxz.stderr.exp jcxz.vgtest \
@@ -91,7 +106,6 @@
 	lahf \
 	looper \
 	movx \
-	pushpopseg \
 	sbbmisc \
 	shift_ndep \
 	smc1 \
@@ -105,12 +119,23 @@
 if BUILD_LZCNT_TESTS
  check_PROGRAMS += lzcnt32
 endif
-if !VGCONF_OS_IS_DARWIN
- check_PROGRAMS += faultstatus
-endif
 if BUILD_MOVBE_TESTS
  check_PROGRAMS += movbe
 endif
+if !VGCONF_OS_IS_DARWIN
+if !SOLARIS_SUN_STUDIO_AS
+# Sun Studio assembler fails to assemble the bound instruction
+if !COMPILER_IS_CLANG
+# clang errors out complaining that %eax as the 1st operand in the bound
+# insn is an invalid operand.
+ check_PROGRAMS += faultstatus
+endif
+endif
+endif
+if !SOLARIS_SUN_STUDIO_AS
+# Sun Studio assembler fails to assemble pushw %fs, popw %fs
+ check_PROGRAMS += pushpopseg
+endif
 
 
 AM_CFLAGS    += @FLAG_M32@ $(FLAG_MMMX) $(FLAG_MSSE)
diff --git a/none/tests/x86/badseg.stdout.exp-solaris b/none/tests/x86/badseg.stdout.exp-solaris
new file mode 100644
index 0000000..fd45cc7
--- /dev/null
+++ b/none/tests/x86/badseg.stdout.exp-solaris
@@ -0,0 +1 @@
+info: sig=11 code=1 addr=0x0
diff --git a/none/tests/x86/bt_everything.c b/none/tests/x86/bt_everything.c
index b367c02..ebe57ac 100644
--- a/none/tests/x86/bt_everything.c
+++ b/none/tests/x86/bt_everything.c
@@ -3,6 +3,17 @@
 #include <stdlib.h>
 #include <assert.h>
 
+unsigned myrandom(void)
+{
+   /* Simple multiply-with-carry random generator. */
+   static unsigned m_w = 11;
+   static unsigned m_z = 13;
+
+   m_z = 36969 * (m_z & 65535) + (m_z >> 16);
+   m_w = 18000 * (m_w & 65535) + (m_w >> 16);
+
+   return (m_z << 16) + m_w;
+}
 
 unsigned int btsl_mem ( unsigned char* base, int bitno )
 {
@@ -155,8 +166,8 @@
    /* Valid bit offsets are -800 .. 799 inclusive. */
 
    for (n = 0; n < 10000; n++) {
-      bitoff = (random() % 1600) - 800;
-      op = random() % 4;
+      bitoff = (myrandom() % 1600) - 800;
+      op = myrandom() % 4;
       c = 2;
       switch (op) {
          case 0: c = btsl_mem(block, bitoff); break;
@@ -185,8 +196,8 @@
    reg = 0;
 
    for (n = 0; n < 1000; n++) {
-      bitoff = (random() % 100) - 50;
-      op = random() % 4;
+      bitoff = (myrandom() % 100) - 50;
+      op = myrandom() % 4;
       c = 2;
       switch (op) {
          case 0: c = btsl_reg(reg, bitoff, &reg); break;
diff --git a/none/tests/x86/bt_everything.stdout.exp b/none/tests/x86/bt_everything.stdout.exp
index fd67221..c02cc36 100644
--- a/none/tests/x86/bt_everything.stdout.exp
+++ b/none/tests/x86/bt_everything.stdout.exp
@@ -1,2 +1,2 @@
-MEM-L: final res 0xd2bfea53, carrydep 0x5b80deee
-REG-L: final res 0x605d78ff, carrydep 0x7c0dc86a
+MEM-L: final res 0x2e9fc392, carrydep 0x23a9479e
+REG-L: final res 0x46a4bd35, carrydep 0xddfae2da
diff --git a/none/tests/x86/cpuid_s.S b/none/tests/x86/cpuid_s.S
index 6d1dfbc..70040ce 100644
--- a/none/tests/x86/cpuid_s.S
+++ b/none/tests/x86/cpuid_s.S
@@ -1,7 +1,7 @@
 #include "tests/asm.h"
 	
 	.file	"oneparam.c"
-#if defined(VGO_linux)
+#if defined(VGO_linux) || defined(VGO_solaris)
 	.version	"01.01"
 #endif
 gcc2_compiled.:
diff --git a/none/tests/x86/filter_inf_nan b/none/tests/x86/filter_inf_nan
new file mode 100755
index 0000000..b4ddfc9
--- /dev/null
+++ b/none/tests/x86/filter_inf_nan
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+# Solaris libc prints 'Infinity' instead of 'inf' and 'NaN' instead of 'nan'.
+# Filter these differences here.
+sed "s/-Infinity/     -inf/g" |
+sed "s/Infinity/     inf/g"   |
+sed "s/NaN/nan/g"
+
+exit 0
+
diff --git a/none/tests/x86/fxtract.vgtest b/none/tests/x86/fxtract.vgtest
index 341b15a..4b5efc5 100644
--- a/none/tests/x86/fxtract.vgtest
+++ b/none/tests/x86/fxtract.vgtest
@@ -1 +1,2 @@
 prog: fxtract
+stdout_filter: filter_inf_nan
diff --git a/none/tests/x86/insn_sse.vgtest b/none/tests/x86/insn_sse.vgtest
index 8babe72..af2d281 100644
--- a/none/tests/x86/insn_sse.vgtest
+++ b/none/tests/x86/insn_sse.vgtest
@@ -1,3 +1,3 @@
 prog: ../../../none/tests/x86/insn_sse
-prereq: ../../../tests/x86_amd64_features x86-sse
+prereq: ../../../tests/x86_amd64_features x86-sse && test -e ../../../none/tests/x86/insn_sse
 vgopts: -q
diff --git a/none/tests/x86/insn_sse2.vgtest b/none/tests/x86/insn_sse2.vgtest
index 6ae6a74..b870719 100644
--- a/none/tests/x86/insn_sse2.vgtest
+++ b/none/tests/x86/insn_sse2.vgtest
@@ -1,3 +1,3 @@
 prog: ../../../none/tests/x86/insn_sse2
-prereq: ../../../tests/x86_amd64_features x86-sse2
+prereq: ../../../tests/x86_amd64_features x86-sse2 && test -e ../../../none/tests/x86/insn_sse2
 vgopts: -q
diff --git a/none/tests/x86/insn_sse3.vgtest b/none/tests/x86/insn_sse3.vgtest
index 42a9f2a..622c4b0 100644
--- a/none/tests/x86/insn_sse3.vgtest
+++ b/none/tests/x86/insn_sse3.vgtest
@@ -1,3 +1,3 @@
 prog: ../../../none/tests/x86/insn_sse3
-prereq: ../../../tests/x86_amd64_features x86-sse3
+prereq: ../../../tests/x86_amd64_features x86-sse3 && test -e ../../../none/tests/x86/insn_sse3
 vgopts: -q
diff --git a/none/tests/x86/movbe.c b/none/tests/x86/movbe.c
index d4f4953..8821462 100644
--- a/none/tests/x86/movbe.c
+++ b/none/tests/x86/movbe.c
@@ -2,7 +2,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
-#include <malloc.h>
+#include "tests/malloc.h"
 
 typedef  unsigned char           UChar;
 typedef  unsigned int            UInt;
@@ -43,7 +43,7 @@
     \
     __attribute__ ((noinline)) static void test_##_name ( void )   \
     { \
-       Block* b = memalign(32, sizeof(Block)); \
+       Block* b = memalign32(sizeof(Block)); \
        randBlock(b); \
        printf("%s\n", #_name); \
        showBlock("before", b); \
diff --git a/none/tests/x86/x86locked.c b/none/tests/x86/x86locked.c
index 38d1108..8b014cb 100644
--- a/none/tests/x86/x86locked.c
+++ b/none/tests/x86/x86locked.c
@@ -14,6 +14,18 @@
 typedef  unsigned long           UWord;
 typedef  char                    HChar;
 
+unsigned myrandom(void)
+{
+   /* Simple multiply-with-carry random generator. */
+   static unsigned m_w = 11;
+   static unsigned m_z = 13;
+
+   m_z = 36969 * (m_z & 65535) + (m_z >> 16);
+   m_w = 18000 * (m_w & 65535) + (m_w >> 16);
+
+   return (m_z << 16) + m_w;
+}
+
 /////////////////////////////////////////////////////////////////
 // BEGIN crc32 stuff                                           //
 /////////////////////////////////////////////////////////////////
@@ -571,8 +583,8 @@
    /* Valid bit offsets are -800 .. 799 inclusive. */
 
    for (n = 0; n < 10000; n++) {
-      bitoff = (random() % 1600) - 800;
-      op = random() % 4;
+      bitoff = (myrandom() % 1600) - 800;
+      op = myrandom() % 4;
       c = 2;
       switch (op) {
          case 0: c = btsl_mem(block, bitoff); break;
@@ -607,8 +619,8 @@
    /* Valid bit offsets are -800 .. 799 inclusive. */
 
    for (n = 0; n < 10000; n++) {
-      bitoff = (random() % 1600) - 800;
-      op = random() % 4;
+      bitoff = (myrandom() % 1600) - 800;
+      op = myrandom() % 4;
       c = 2;
       switch (op) {
          case 0: c = btsw_mem(block, bitoff); break;
@@ -848,7 +860,7 @@
   // confirm with
   // objdump -d ./x86locked | grep lock | grep -v do_lock | grep -v elf32 | wc
 
-  { UInt crcExpd = 0x8235DC9C;
+  { UInt crcExpd = 0xB2D75045;
     theCRC = crcFinalise( theCRC );
     if (theCRC == crcExpd) {
        printf("x86locked: PASS: CRCs actual 0x%08X expected 0x%08X\n",
diff --git a/none/tests/x86/x86locked.stdout.exp b/none/tests/x86/x86locked.stdout.exp
index e5145cc..826a1b5 100644
--- a/none/tests/x86/x86locked.stdout.exp
+++ b/none/tests/x86/x86locked.stdout.exp
@@ -1 +1 @@
-x86locked: PASS: CRCs actual 0x8235DC9C expected 0x8235DC9C
+x86locked: PASS: CRCs actual 0xB2D75045 expected 0xB2D75045
diff --git a/perf/Makefile.am b/perf/Makefile.am
index 2015085..ab504e9 100644
--- a/perf/Makefile.am
+++ b/perf/Makefile.am
@@ -33,7 +33,5 @@
 ffbench_LDADD	= -lm
 memrw_LDADD	= -lpthread
 
-tinycc_CFLAGS	= $(AM_CFLAGS) -Wno-shadow -Wno-inline
-if HAS_POINTER_SIGN_WARNING
-tinycc_CFLAGS  += -Wno-pointer-sign
-endif
+tinycc_CFLAGS	= $(AM_CFLAGS) -Wno-shadow -Wno-inline \
+                  @FLAG_W_NO_POINTER_SIGN@
diff --git a/perf/bigcode.c b/perf/bigcode.c
index 8e12d7b..ae31cbb 100644
--- a/perf/bigcode.c
+++ b/perf/bigcode.c
@@ -8,6 +8,19 @@
 // to make a difference), but under Valgrind the one running more code is
 // significantly slower due to the extra translation time.
 
+// 31 Aug 2015: this only "works" on x86/amd64/s390 by accident; the
+// test is essentially kludged.  This "generates" code into memory
+// (the mmap'd area) and the executes it.  But historically and even
+// after this commit (r15601), the test has been run without 
+// --smc-check=all or all-non-file.  That just happens to work because
+// the "generated" code is never modified, so there's never a
+// translated-vs-reality coherence problem.  Really we ought to run
+// with the new-as-of-r15601 default --smc-check=all-non-file, but that
+// hugely slows it down and makes the results non-comparable with
+// pre r15601 results, so instead the .vgperf files now specify the
+// old default value --smc-check=stack explicitly.
+
+
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
diff --git a/perf/bigcode1.vgperf b/perf/bigcode1.vgperf
index 2fdcb4c..ea5440f 100644
--- a/perf/bigcode1.vgperf
+++ b/perf/bigcode1.vgperf
@@ -1 +1,2 @@
 prog: bigcode
+vgopts: --smc-check=stack
diff --git a/perf/bigcode2.vgperf b/perf/bigcode2.vgperf
index e4a42c9..d7de3a1 100644
--- a/perf/bigcode2.vgperf
+++ b/perf/bigcode2.vgperf
@@ -1,2 +1,3 @@
 prog: bigcode
 args: 0
+vgopts: --smc-check=stack
diff --git a/perf/tinycc.c b/perf/tinycc.c
index e4ca37f..3b487c1 100644
--- a/perf/tinycc.c
+++ b/perf/tinycc.c
@@ -3080,7 +3080,7 @@
  DEF_FP(mul)
 
  DEF_ASM(fcom)
- DEF_ASM(fcom_1) /* non existant op, just to have a regular table */
+ DEF_ASM(fcom_1) /* non existent op, just to have a regular table */
  DEF_FP1(com)
 
  DEF_FP(comp)
@@ -4412,7 +4412,7 @@
  DEF_FP(mul)
 
  DEF_ASM(fcom)
- DEF_ASM(fcom_1) /* non existant op, just to have a regular table */
+ DEF_ASM(fcom_1) /* non existent op, just to have a regular table */
  DEF_FP1(com)
 
  DEF_FP(comp)
@@ -10433,7 +10433,7 @@
         bit_pos = (vtop->type.t >> VT_STRUCT_SHIFT) & 0x3f;
         bit_size = (vtop->type.t >> (VT_STRUCT_SHIFT + 6)) & 0x3f;
         /* remove bit field info to avoid loops */
-        vtop->type.t &= ~(VT_BITFIELD | (-1 << VT_STRUCT_SHIFT));
+        vtop->type.t &= ~(VT_BITFIELD | (~0U << VT_STRUCT_SHIFT));
         /* generate shifts */
         vpushi(32 - (bit_pos + bit_size));
         gen_op(TOK_SHL);
@@ -11930,7 +11930,7 @@
         bit_pos = (ft >> VT_STRUCT_SHIFT) & 0x3f;
         bit_size = (ft >> (VT_STRUCT_SHIFT + 6)) & 0x3f;
         /* remove bit field info to avoid loops */
-        vtop[-1].type.t = ft & ~(VT_BITFIELD | (-1 << VT_STRUCT_SHIFT));
+        vtop[-1].type.t = ft & ~(VT_BITFIELD | (~0U << VT_STRUCT_SHIFT));
 
         /* duplicate destination */
         vdup();
@@ -16970,7 +16970,7 @@
     }
 }
 
-/* generate prolog and epilog code for asm statment */
+/* generate prolog and epilog code for asm statement */
 static void asm_gen_code(ASMOperand *operands, int nb_operands, 
                          int nb_outputs, int is_output,
                          uint8_t *clobber_regs,
@@ -21285,7 +21285,7 @@
 
 void help(void)
 {
-    printf("tcc version " TCC_VERSION " - Tiny C Compiler - Copyright (C) 2001-2013 Fabrice Bellard\n"
+    printf("tcc version " TCC_VERSION " - Tiny C Compiler - Copyright (C) 2001-2015 Fabrice Bellard\n"
            "usage: tcc [-v] [-c] [-o outfile] [-Bdir] [-bench] [-Idir] [-Dsym[=val]] [-Usym]\n"
            "           [-Wwarn] [-g] [-b] [-bt N] [-Ldir] [-llib] [-shared] [-static]\n"
            "           [infile1 infile2...] [-run infile args...]\n"
diff --git a/perf/vg_perf.in b/perf/vg_perf.in
index 5c482ef..7a80cb0 100644
--- a/perf/vg_perf.in
+++ b/perf/vg_perf.in
@@ -6,7 +6,7 @@
 #  This file is part of Valgrind, a dynamic binary instrumentation
 #  framework.
 #
-#  Copyright (C) 2005-2013 Nicholas Nethercote
+#  Copyright (C) 2005-2015 Nicholas Nethercote
 #     njn@valgrind.org
 #
 #  This program is free software; you can redistribute it and/or
diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c
index d4e5449..005b679 100644
--- a/shared/vg_replace_strmem.c
+++ b/shared/vg_replace_strmem.c
@@ -8,7 +8,7 @@
 /*
    This file is part of Valgrind.
 
-   Copyright (C) 2000-2013 Julian Seward
+   Copyright (C) 2000-2015 Julian Seward
       jseward@acm.org
 
    This program is free software; you can redistribute it and/or
@@ -103,6 +103,15 @@
    20420 STPNCPY
 */
 
+#if defined(VGO_solaris)
+/*
+   Detour functions in the libc and the runtime linker. If a function isn't
+   much optimized (and no overlap checking is necessary) then redir the
+   function only in the libc. This way we can keep stacktraces in the tests
+   consistent.
+*/
+#endif
+
 
 /* Figure out if [dst .. dst+dstlen-1] overlaps with
                  [src .. src+srclen-1].
@@ -204,10 +213,15 @@
  //STRRCHR(VG_Z_DYLD,          strrchr)
  //STRRCHR(VG_Z_DYLD,          rindex)
  STRRCHR(VG_Z_LIBC_SONAME, strrchr)
-# if DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
+# if DARWIN_VERS >= DARWIN_10_9
   STRRCHR(libsystemZucZddylib, strrchr)
 # endif
 
+#elif defined(VGO_solaris)
+ STRRCHR(VG_Z_LIBC_SONAME,   strrchr)
+ STRRCHR(VG_Z_LIBC_SONAME,   rindex)
+ STRRCHR(VG_Z_LD_SO_1,       strrchr)
+
 #endif
 
 
@@ -245,11 +259,18 @@
 # if DARWIN_VERS == DARWIN_10_9
   STRCHR(libsystemZuplatformZddylib, _platform_strchr)
 # endif
-# if DARWIN_VERS == DARWIN_10_10
+# if DARWIN_VERS >= DARWIN_10_10
   /* _platform_strchr$VARIANT$Generic */
   STRCHR(libsystemZuplatformZddylib, _platform_strchr$VARIANT$Generic)
+  /* _platform_strchr$VARIANT$Haswell */
   STRCHR(libsystemZuplatformZddylib, _platform_strchr$VARIANT$Haswell)
 # endif
+
+#elif defined(VGO_solaris)
+ STRCHR(VG_Z_LIBC_SONAME,          strchr)
+ STRCHR(VG_Z_LIBC_SONAME,          index)
+ STRCHR(VG_Z_LD_SO_1,              strchr)
+
 #endif
 
 
@@ -285,6 +306,10 @@
 #elif defined(VGO_darwin)
  //STRCAT(VG_Z_LIBC_SONAME, strcat)
 
+#elif defined(VGO_solaris)
+ STRCAT(VG_Z_LIBC_SONAME, strcat)
+ STRCAT(VG_Z_LD_SO_1,     strcat)
+
 #endif
 
 
@@ -322,6 +347,9 @@
  //STRNCAT(VG_Z_LIBC_SONAME, strncat)
  //STRNCAT(VG_Z_DYLD,        strncat)
 
+#elif defined(VGO_solaris)
+ STRNCAT(VG_Z_LIBC_SONAME, strncat)
+
 #endif
 
 
@@ -370,6 +398,9 @@
  //STRLCAT(VG_Z_DYLD,        strlcat)
  STRLCAT(VG_Z_LIBC_SONAME, strlcat)
 
+#elif defined(VGO_solaris)
+ STRLCAT(VG_Z_LIBC_SONAME, strlcat)
+
 #endif
 
 
@@ -395,6 +426,9 @@
   STRNLEN(libsystemZucZddylib, strnlen)
 # endif
 
+#elif defined(VGO_solaris)
+ STRNLEN(VG_Z_LIBC_SONAME, strnlen)
+
 #endif
 
 
@@ -432,9 +466,14 @@
 
 #elif defined(VGO_darwin)
  STRLEN(VG_Z_LIBC_SONAME, strlen)
-# if DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
+# if DARWIN_VERS >= DARWIN_10_9
   STRLEN(libsystemZucZddylib, strlen)
 # endif
+
+#elif defined(VGO_solaris)
+ STRLEN(VG_Z_LIBC_SONAME,          strlen)
+ STRLEN(VG_Z_LD_SO_1,              strlen)
+
 #endif
 
 
@@ -473,6 +512,10 @@
   STRCPY(libsystemZucZddylib, strcpy)
 # endif
 
+#elif defined(VGO_solaris)
+ STRCPY(VG_Z_LIBC_SONAME, strcpy)
+ STRCPY(VG_Z_LD_SO_1,     strcpy)
+
 #endif
 
 
@@ -506,10 +549,14 @@
 
 #elif defined(VGO_darwin)
  STRNCPY(VG_Z_LIBC_SONAME, strncpy)
-# if DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
+# if DARWIN_VERS >= DARWIN_10_9
   STRNCPY(libsystemZucZddylib, strncpy)
 # endif
 
+#elif defined(VGO_solaris)
+ STRNCPY(VG_Z_LIBC_SONAME, strncpy)
+ STRNCPY(VG_Z_LD_SO_1,     strncpy)
+
 #endif
 
 
@@ -527,6 +574,8 @@
       HChar* dst_orig = dst; \
       SizeT m = 0; \
       \
+      STRLCPY_CHECK_FOR_DSTSIZE_ZERO \
+      \
       while (m < n-1 && *src) { m++; *dst++ = *src++; } \
       /* m non-nul bytes have now been copied, and m <= n-1. */ \
       /* Check for overlap after copying; all n bytes of dst are relevant, */ \
@@ -544,14 +593,26 @@
 
 #if defined(VGPV_arm_linux_android) || defined(VGPV_x86_linux_android) \
     || defined(VGPV_mips32_linux_android)
+ #define STRLCPY_CHECK_FOR_DSTSIZE_ZERO
  STRLCPY(VG_Z_LIBC_SONAME, strlcpy);
 #endif
 
 #elif defined(VGO_darwin)
+ #define STRLCPY_CHECK_FOR_DSTSIZE_ZERO
  //STRLCPY(VG_Z_LIBC_SONAME, strlcpy)
  //STRLCPY(VG_Z_DYLD,        strlcpy)
  STRLCPY(VG_Z_LIBC_SONAME, strlcpy)
 
+#elif defined(VGO_solaris)
+ /* special case for n == 0 which is undocumented but heavily used */
+ #define STRLCPY_CHECK_FOR_DSTSIZE_ZERO \
+    if (n == 0) { \
+       while (*src) src++; \
+       return src - src_orig; \
+    }
+
+ STRLCPY(VG_Z_LIBC_SONAME, strlcpy)
+
 #endif
 
 
@@ -585,10 +646,13 @@
 
 #elif defined(VGO_darwin)
  STRNCMP(VG_Z_LIBC_SONAME,        strncmp)
-# if DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
+# if DARWIN_VERS >= DARWIN_10_9
   STRNCMP(libsystemZuplatformZddylib, _platform_strncmp)
 # endif
 
+#elif defined(VGO_solaris)
+ STRNCMP(VG_Z_LIBC_SONAME, strncmp)
+
 #endif
 
 
@@ -627,6 +691,9 @@
 #elif defined(VGO_darwin)
  //STRCASECMP(VG_Z_LIBC_SONAME, strcasecmp)
 
+#elif defined(VGO_solaris)
+ STRCASECMP(VG_Z_LIBC_SONAME, strcasecmp)
+
 #endif
 
 
@@ -668,6 +735,9 @@
  //STRNCASECMP(VG_Z_LIBC_SONAME, strncasecmp)
  //STRNCASECMP(VG_Z_DYLD,        strncasecmp)
 
+#elif defined(VGO_solaris)
+ STRNCASECMP(VG_Z_LIBC_SONAME, strncasecmp)
+
 #endif
 
 
@@ -702,6 +772,8 @@
 #elif defined(VGO_darwin)
  //STRCASECMP_L(VG_Z_LIBC_SONAME, strcasecmp_l)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -739,6 +811,8 @@
  //STRNCASECMP_L(VG_Z_LIBC_SONAME, strncasecmp_l)
  //STRNCASECMP_L(VG_Z_DYLD,        strncasecmp_l)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -778,10 +852,14 @@
 
 #elif defined(VGO_darwin)
  STRCMP(VG_Z_LIBC_SONAME, strcmp)
-# if DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
+# if DARWIN_VERS >= DARWIN_10_9
   STRCMP(libsystemZuplatformZddylib, _platform_strcmp)
 # endif
 
+#elif defined(VGO_solaris)
+ STRCMP(VG_Z_LIBC_SONAME,          strcmp)
+ STRCMP(VG_Z_LD_SO_1,              strcmp)
+
 #endif
 
 
@@ -810,12 +888,17 @@
   MEMCHR(VG_Z_DYLD,                   memchr)
   MEMCHR(libsystemZuplatformZddylib, _platform_memchr)
 # endif
-# if DARWIN_VERS == DARWIN_10_10
+# if DARWIN_VERS >= DARWIN_10_10
   MEMCHR(VG_Z_DYLD,                   memchr)
   /* _platform_memchr$VARIANT$Generic */
   MEMCHR(libsystemZuplatformZddylib, _platform_memchr$VARIANT$Generic)
+  /* _platform_memchr$VARIANT$Haswell */
+  MEMCHR(libsystemZuplatformZddylib, _platform_memchr$VARIANT$Haswell)
 # endif
 
+#elif defined(VGO_solaris)
+ MEMCHR(VG_Z_LIBC_SONAME, memchr)
+
 #endif
 
 
@@ -842,6 +925,8 @@
  //MEMRCHR(VG_Z_LIBC_SONAME, memrchr)
  //MEMRCHR(VG_Z_DYLD,        memrchr)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -953,6 +1038,10 @@
  MEMCPY(VG_Z_LIBC_SONAME,  memcpyZDVARIANTZDsse3x) /* memcpy$VARIANT$sse3x */
  MEMCPY(VG_Z_LIBC_SONAME,  memcpyZDVARIANTZDsse42) /* memcpy$VARIANT$sse42 */
 
+#elif defined(VGO_solaris)
+ MEMCPY(VG_Z_LIBC_SONAME,  memcpy)
+ MEMCPY(VG_Z_LD_SO_1,      memcpy)
+
 #endif
 
 
@@ -1007,10 +1096,15 @@
  MEMCMP(VG_Z_LD_SO_1,     bcmp)
 
 #elif defined(VGO_darwin)
-# if DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
+# if DARWIN_VERS >= DARWIN_10_9
   MEMCMP(libsystemZuplatformZddylib, _platform_memcmp)
 # endif
 
+#elif defined(VGO_solaris)
+ MEMCMP(VG_Z_LIBC_SONAME, memcmp)
+ MEMCMP(VG_Z_LIBC_SONAME, bcmp)
+ MEMCMP(VG_Z_LD_SO_1,     memcmp)
+
 #endif
 
 
@@ -1053,6 +1147,9 @@
  //STPCPY(VG_Z_LIBC_SONAME,          stpcpy)
  //STPCPY(VG_Z_DYLD,                 stpcpy)
 
+#elif defined(VGO_solaris)
+ STPCPY(VG_Z_LIBC_SONAME,          stpcpy)
+
 #endif
 
 
@@ -1131,6 +1228,9 @@
  //MEMSET(VG_Z_DYLD,        memset)
  MEMSET(VG_Z_LIBC_SONAME, memset)
 
+#elif defined(VGO_solaris)
+ MEMSET(VG_Z_LIBC_SONAME, memset)
+
 #endif
 
 
@@ -1141,6 +1241,10 @@
 #if defined(VGO_linux)
  MEMMOVE(VG_Z_LIBC_SONAME, memmove)
  MEMMOVE(VG_Z_LIBC_SONAME, __GI_memmove)
+ /* See bug #349828 Override for ld64.so.1 like memcpy, because for some
+    arches MEMCPY_OK_FOR_FORWARD_MEMMOVE is set, which might cause memmove
+    to call memcpy.  */
+ MEMMOVE(VG_Z_LD64_SO_1, memmove)
 
 #elif defined(VGO_darwin)
 # if DARWIN_VERS <= DARWIN_10_6
@@ -1148,10 +1252,15 @@
 # endif
  MEMMOVE(VG_Z_LIBC_SONAME,  memmoveZDVARIANTZDsse3x) /* memmove$VARIANT$sse3x */
  MEMMOVE(VG_Z_LIBC_SONAME,  memmoveZDVARIANTZDsse42) /* memmove$VARIANT$sse42 */
-# if DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
+# if DARWIN_VERS >= DARWIN_10_9
   /* _platform_memmove$VARIANT$Ivybridge */
   MEMMOVE(libsystemZuplatformZddylib, ZuplatformZumemmoveZDVARIANTZDIvybridge)
 # endif
+
+#elif defined(VGO_solaris)
+ MEMMOVE(VG_Z_LIBC_SONAME, memmove)
+ MEMMOVE(VG_Z_LD_SO_1,     memmove)
+
 #endif
 
 
@@ -1184,6 +1293,9 @@
  //BCOPY(VG_Z_LIBC_SONAME, bcopy)
  //BCOPY(VG_Z_DYLD,        bcopy)
 
+#elif defined(VGO_darwin)
+ BCOPY(VG_Z_LIBC_SONAME, bcopy)
+
 #endif
 
 
@@ -1216,7 +1328,7 @@
       VALGRIND_PRINTF_BACKTRACE( \
          "*** memmove_chk: buffer overflow detected ***: " \
          "program terminated\n"); \
-     my_exit(127); \
+     my_exit(1); \
      /*NOTREACHED*/ \
      return NULL; \
    }
@@ -1226,6 +1338,8 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -1252,6 +1366,8 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -1278,6 +1394,8 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -1302,7 +1420,7 @@
       VALGRIND_PRINTF_BACKTRACE( \
          "*** strcpy_chk: buffer overflow detected ***: " \
          "program terminated\n"); \
-     my_exit(127); \
+     my_exit(1); \
      /*NOTREACHED*/ \
      return NULL; \
    }
@@ -1312,6 +1430,8 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -1335,7 +1455,7 @@
       VALGRIND_PRINTF_BACKTRACE( \
          "*** stpcpy_chk: buffer overflow detected ***: " \
          "program terminated\n"); \
-     my_exit(127); \
+     my_exit(1); \
      /*NOTREACHED*/ \
      return NULL; \
    }
@@ -1345,6 +1465,8 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -1391,6 +1513,8 @@
 #elif defined(VGO_darwin)
  //GLIBC25_MEMPCPY(VG_Z_LIBC_SONAME, mempcpy)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -1431,7 +1555,7 @@
       VALGRIND_PRINTF_BACKTRACE( \
          "*** memcpy_chk: buffer overflow detected ***: " \
          "program terminated\n"); \
-     my_exit(127); \
+     my_exit(1); \
      /*NOTREACHED*/ \
      return NULL; \
    }
@@ -1441,6 +1565,8 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+
 #endif
 
 
@@ -1490,6 +1616,9 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+ STRSTR(VG_Z_LIBC_SONAME,          strstr)
+
 #endif
 
 
@@ -1532,6 +1661,9 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+ STRPBRK(VG_Z_LIBC_SONAME,          strpbrk)
+
 #endif
 
 
@@ -1575,6 +1707,9 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+ STRCSPN(VG_Z_LIBC_SONAME,          strcspn)
+
 #endif
 
 
@@ -1619,6 +1754,9 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+ STRSPN(VG_Z_LIBC_SONAME,          strspn)
+
 #endif
 
 
@@ -1672,6 +1810,9 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+  STRCASESTR(VG_Z_LIBC_SONAME,      strcasestr)
+
 #endif
 
 
@@ -1698,6 +1839,9 @@
 
 #elif defined(VGO_darwin)
 
+#elif defined(VGO_solaris)
+ WCSLEN(VG_Z_LIBC_SONAME,          wcslen)
+
 #endif
 
 /*---------------------- wcscmp ----------------------*/
diff --git a/solaris/Makefile.am b/solaris/Makefile.am
new file mode 100644
index 0000000..6e66379
--- /dev/null
+++ b/solaris/Makefile.am
@@ -0,0 +1,9 @@
+# We need to list all files here to make sure they are included in
+# the make dist target.
+
+dist_noinst_SCRIPTS = build_solaris_package
+		
+EXTRA_DIST = \
+	gdb-sol-thread.patch \
+	valgrind.p5m \
+	vgpreload-solaris.mapfile
diff --git a/solaris/build_solaris_package b/solaris/build_solaris_package
new file mode 100755
index 0000000..78396c4
--- /dev/null
+++ b/solaris/build_solaris_package
@@ -0,0 +1,205 @@
+#!/usr/bin/ksh
+#
+# Builds a Solaris IPS package called "valgrind" from the source
+# directory. The Valgrind and VEX revisions are taken from that
+# source directory and written to solaris/valgrind.p5m IPS manifest.
+#
+# Requires the following packages to be installed on Solaris 11:
+# - data/xml-common		(install first before any docbook ones!)
+# - data/docbook/docbook-style-xsl
+# - data/docbook/docbook-dtds
+# - developer/build/autoconf
+# - developer/build/automake-111
+# - developer/debug/gdb
+# - developer/gnu-binutils
+# - developer/versioning/mercurial
+# - system/header
+# - and the latest developer/gcc package.
+#
+# Requires a pre-established IPS repository.
+# For example to create a file-based repository, do:
+# - pkgrepo create $repo_uri
+# - pkgrepo set -s $repo_uri publisher/prefix=valgrind
+#
+
+TMPDIR=/var/tmp/valgrind-build
+SRCDIR=$TMPDIR/sources
+INSTALLDIR=$TMPDIR/install
+IPS_MANIFEST=solaris/valgrind.p5m
+
+usage() {
+    echo "Usage:"
+    echo "build_solaris_package -p source_dir -s repo_uri [-r lint_repo_uri]"
+    echo "\t-p source_dir contains working copy of the Valgrind sources"
+    echo "\t-s repo_uri publishes to the repository located at the given URI"
+    echo "\t            or file system path"
+    echo "\t-r lint_repo_uri location of lint reference repository"
+}
+
+fail() {
+    msg=$1
+
+    echo "\n$msg"
+    echo "Additional information could be found in directory $TMPDIR."
+    exit 1
+}
+
+remove_dirs() {
+    rm -rf $TMPDIR
+}
+
+create_dirs() {
+    mkdir -p $TMPDIR
+    (( $? != 0 )) && fail "Failed to create directory $TMPDIR."
+
+    mkdir -p $INSTALLDIR
+    (( $? != 0 )) && fail "Failed to create directory $INSTALLDIR."
+}
+
+export_sources() {
+    printf "Exporting sources... "
+    svn export --quiet --ignore-externals $source_directory $SRCDIR \
+        2> $TMPDIR/svn-export-valgrind.log.stderr
+    (( $? != 0 )) && fail "Failed to export working copy from $source_directory."
+    svn export --quiet --ignore-externals $source_directory/VEX $SRCDIR/VEX \
+        2> $TMPDIR/svn-export-vex.log.stderr
+    (( $? != 0 )) && fail "Failed to export working copy from $source_directory/VEX."
+    printf "done.\n"
+}
+
+modify_ips_manifest() {
+    valgrind_rev=$( svn info $source_directory | grep Revision | sed -e 's/Revision: //' )
+    vex_rev=$( svn info $source_directory/VEX | grep Revision | sed -e 's/Revision: //' )
+
+    [[ -z $valgrind_rev ]] && fail "Failed to find Valgrind revision."
+    [[ -z $vex_rev ]] && fail "Failed to find VEX revision."
+
+    echo "Valgrind revision: $valgrind_rev, VEX revision $vex_rev."
+
+    sed -i -e "s/VVVVV-XXXX/${valgrind_rev}-${vex_rev}/" $SRCDIR/$IPS_MANIFEST
+}
+
+run_autogen() {
+    printf "Creating autotools support files... "
+    ./autogen.sh > $TMPDIR/autogen.log.stdout 2> $TMPDIR/autogen.log.stderr
+    (( $? != 0 )) && fail "Failed to generate autotools support files."
+    printf "done.\n"
+}
+
+run_configure() {
+    printf "Running configure... "
+    ./configure CC='gcc -m64' CXX='g++ -m64' --prefix=/usr > $TMPDIR/configure.log
+    (( $? != 0 )) && fail "Failed to run configure."
+    printf "done.\n"
+}
+
+run_make_docs() {
+   printf "Making docs... "
+   make --directory=docs html-docs > $TMPDIR/make-docs.log.stdout 2> $TMPDIR/make-docs.log.stderr
+   (( $? != 0 )) && fail "Failed to make html-docs."
+   printf "done.\n"
+}
+
+run_make_man_pages() {
+   printf "Making man pages... "
+   make --directory=docs man-pages > $TMPDIR/make-man-pages.log.stdout 2> $TMPDIR/make-man-pages.log.stderr
+   (( $? != 0 )) && fail "Failed to make man-pages."
+   printf "done.\n"
+}
+
+run_make() {
+    printf "Running make... "
+    make --quiet > $TMPDIR/make.log
+    (( $? != 0 )) && fail "Failed to run make."
+    printf "done.\n"
+}
+
+run_make_install() {
+    printf "Running 'make install'... "
+    make --quiet install DESTDIR=$INSTALLDIR > $TMPDIR/make-install.log
+    (( $? != 0 )) && fail "Failed to run 'make install'."
+
+    cp AUTHORS COPYING* NEWS NEWS.old README* $INSTALLDIR/usr/share/doc/valgrind
+    (( $? != 0 )) && fail "Failed to copy additional files to $INSTALLDIR."
+
+    printf "done.\n"
+}
+
+run_pkglint() {
+    printf "Running pkglint... "
+    pkglint -c $TMPDIR/lint-cache -r $lint_repo_uri $SRCDIR/$IPS_MANIFEST > $TMPDIR/pkglint.log
+    (( $? != 0 )) && fail "pkglint failed."
+    printf "done.\n"
+}
+
+publish_package() {
+    printf "Publishing package... "
+    pkgsend publish -s $repo_uri -d $INSTALLDIR $SRCDIR/solaris/valgrind.p5m > $TMPDIR/pkgsend.log
+    (( $? != 0 )) && fail "Failed to publish the package."
+    printf "done.\n"
+}
+
+while getopts "p:r:s:" args; do
+    case $args in
+    p)
+        source_directory=$OPTARG
+        ;;
+    r)
+        lint_repo_uri=$OPTARG
+        ;;
+    s)
+        repo_uri=$OPTARG
+        ;;
+    *)
+        usage
+        exit 1
+        ;;
+    esac
+done
+
+if [[ -z $source_directory ]]; then
+    echo "No source directory specified.\n"
+    usage
+    exit 1
+fi
+
+if [[ -z $repo_uri ]]; then
+    echo "No repo_uri specified.\n"
+    usage
+    exit 1
+fi
+
+# Determine the lint repo_uri to use from the current 'solaris' one
+# if not specified explicitly.
+if [[ -z $lint_repo_uri ]]; then
+    publisher=$( pkg publisher | grep solaris | tr -s ' ' )
+    if [[ $publisher == *sticky* ]]; then
+        lint_repo_uri=$( echo "$publisher" | cut -d ' ' -f 6 )
+    else
+        lint_repo_uri=$( echo "$publisher" | cut -d ' ' -f 5 )
+    fi
+    [[ -z $lint_repo_uri ]] && fail "Failed to determine solaris IPS publisher."
+    echo "lint_repo_uri determined as $lint_repo_uri"
+fi
+
+
+remove_dirs
+create_dirs
+cd $TMPDIR
+
+export_sources
+modify_ips_manifest
+cd $SRCDIR
+run_autogen
+run_configure
+run_make_docs
+run_make_man_pages
+run_make
+run_make_install
+
+cd $TMPDIR
+run_pkglint
+publish_package
+
+remove_dirs
+return 0
diff --git a/solaris/gdb-sol-thread.patch b/solaris/gdb-sol-thread.patch
new file mode 100644
index 0000000..d06415c
--- /dev/null
+++ b/solaris/gdb-sol-thread.patch
@@ -0,0 +1,13 @@
+--- gdb-7.6.2/gdb/sol-thread.c.orig	2013-12-26 22:02:08.930437615 +0000
++++ gdb-7.6.2/gdb/sol-thread.c	2013-12-26 22:05:06.506977611 +0000
+@@ -588,6 +588,10 @@
+   td_err_e err;
+   ptid_t ptid;
+ 
++  /* Don't attempt to use thread_db for remote targets.  */
++  if (!(target_can_run (&current_target) || core_bfd))
++    return;
++
+   /* Do nothing if we couldn't load libthread_db.so.1.  */
+   if (p_td_ta_new == NULL)
+     return;
diff --git a/solaris/valgrind.p5m b/solaris/valgrind.p5m
new file mode 100644
index 0000000..a5c8fc0
--- /dev/null
+++ b/solaris/valgrind.p5m
@@ -0,0 +1,153 @@
+set name=pkg.fmri value=developer/debug/valgrind@3.11.0,VVVVV-XXXX
+set name=pkg.description value="valgrind: instrumentation framework and tools to detect memory and threading problems"
+set name=pkg.summary value="Valgrind is an award-winning instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. You can also use Valgrind to build new tools. Currently x86 (32-bit) and amd64 (64-bit) platforms are supported."
+set name=variant.arch value=i386
+set name=info.classification value="org.opensolaris.category.2008:Development/System"
+set name=info.upstream-url value=https://bitbucket.org/iraisr/valgrind-solaris
+set name=info.source-url value=http://valgrind.org/
+
+# Contents:
+dir  path=usr/bin                       owner=root group=bin mode=0755
+file path=usr/bin/callgrind_annotate    owner=root group=bin mode=0755
+file path=usr/bin/callgrind_control     owner=root group=bin mode=0755
+file path=usr/bin/cg_annotate           owner=root group=bin mode=0755
+file path=usr/bin/cg_diff               owner=root group=bin mode=0755
+file path=usr/bin/cg_merge              owner=root group=bin mode=0755
+file path=usr/bin/ms_print              owner=root group=bin mode=0755
+file path=usr/bin/valgrind              owner=root group=bin mode=0755
+file path=usr/bin/valgrind-di-server    owner=root group=bin mode=0755
+file path=usr/bin/valgrind-listener     owner=root group=bin mode=0755
+file path=usr/bin/vgdb                  owner=root group=bin mode=0755
+
+dir  path=usr/include                                      owner=root group=bin mode=0755
+dir  path=usr/include/valgrind                             owner=root group=bin mode=0755
+file path=usr/include/valgrind/callgrind.h                 owner=root group=bin mode=0644
+file path=usr/include/valgrind/drd.h                       owner=root group=bin mode=0644
+file path=usr/include/valgrind/memcheck.h                  owner=root group=bin mode=0644
+file path=usr/include/valgrind/valgrind.h                  owner=root group=bin mode=0644
+
+dir  path=usr/lib/valgrind                                               owner=root group=bin mode=0755
+file path=usr/lib/valgrind/32bit-core-valgrind-s1.xml                    owner=root group=bin mode=0644
+file path=usr/lib/valgrind/32bit-core-valgrind-s2.xml                    owner=root group=bin mode=0644
+file path=usr/lib/valgrind/32bit-core.xml                                owner=root group=bin mode=0644
+file path=usr/lib/valgrind/32bit-sse-valgrind-s1.xml                     owner=root group=bin mode=0644
+file path=usr/lib/valgrind/32bit-sse-valgrind-s2.xml                     owner=root group=bin mode=0644
+file path=usr/lib/valgrind/32bit-sse.xml                                 owner=root group=bin mode=0644
+file path=usr/lib/valgrind/64bit-avx-valgrind-s1.xml                     owner=root group=bin mode=0644
+file path=usr/lib/valgrind/64bit-avx-valgrind-s2.xml                     owner=root group=bin mode=0644
+file path=usr/lib/valgrind/64bit-avx.xml                                 owner=root group=bin mode=0644
+file path=usr/lib/valgrind/64bit-core-valgrind-s1.xml                    owner=root group=bin mode=0644
+file path=usr/lib/valgrind/64bit-core-valgrind-s2.xml                    owner=root group=bin mode=0644
+file path=usr/lib/valgrind/64bit-core.xml                                owner=root group=bin mode=0644
+file path=usr/lib/valgrind/64bit-sse-valgrind-s1.xml                     owner=root group=bin mode=0644
+file path=usr/lib/valgrind/64bit-sse-valgrind-s2.xml                     owner=root group=bin mode=0644
+file path=usr/lib/valgrind/64bit-sse.xml                                 owner=root group=bin mode=0644
+file path=usr/lib/valgrind/amd64-avx-coresse-valgrind.xml                owner=root group=bin mode=0644
+file path=usr/lib/valgrind/amd64-avx-coresse.xml                         owner=root group=bin mode=0644
+file path=usr/lib/valgrind/amd64-coresse-valgrind.xml                    owner=root group=bin mode=0644
+file path=usr/lib/valgrind/cachegrind-amd64-solaris                      owner=root group=bin mode=0755
+file path=usr/lib/valgrind/cachegrind-x86-solaris                        owner=root group=bin mode=0755
+file path=usr/lib/valgrind/callgrind-amd64-solaris                       owner=root group=bin mode=0755
+file path=usr/lib/valgrind/callgrind-x86-solaris                         owner=root group=bin mode=0755
+file path=usr/lib/valgrind/default.supp                                  owner=root group=bin mode=0644
+file path=usr/lib/valgrind/drd-amd64-solaris                             owner=root group=bin mode=0755
+file path=usr/lib/valgrind/drd-x86-solaris                               owner=root group=bin mode=0755
+file path=usr/lib/valgrind/exp-bbv-amd64-solaris                         owner=root group=bin mode=0755
+file path=usr/lib/valgrind/exp-bbv-x86-solaris                           owner=root group=bin mode=0755
+file path=usr/lib/valgrind/exp-dhat-amd64-solaris                        owner=root group=bin mode=0755
+file path=usr/lib/valgrind/exp-dhat-x86-solaris                          owner=root group=bin mode=0755
+file path=usr/lib/valgrind/exp-sgcheck-amd64-solaris                     owner=root group=bin mode=0755
+file path=usr/lib/valgrind/exp-sgcheck-x86-solaris                       owner=root group=bin mode=0755
+file path=usr/lib/valgrind/getoff-amd64-solaris                          owner=root group=bin mode=0755
+file path=usr/lib/valgrind/getoff-x86-solaris                            owner=root group=bin mode=0755
+file path=usr/lib/valgrind/helgrind-amd64-solaris                        owner=root group=bin mode=0755
+file path=usr/lib/valgrind/helgrind-x86-solaris                          owner=root group=bin mode=0755
+file path=usr/lib/valgrind/i386-coresse-valgrind.xml                     owner=root group=bin mode=0644
+file path=usr/lib/valgrind/lackey-amd64-solaris                          owner=root group=bin mode=0755
+file path=usr/lib/valgrind/lackey-x86-solaris                            owner=root group=bin mode=0755
+file path=usr/lib/valgrind/massif-amd64-solaris                          owner=root group=bin mode=0755
+file path=usr/lib/valgrind/massif-x86-solaris                            owner=root group=bin mode=0755
+file path=usr/lib/valgrind/memcheck-amd64-solaris                        owner=root group=bin mode=0755
+file path=usr/lib/valgrind/memcheck-x86-solaris                          owner=root group=bin mode=0755
+file path=usr/lib/valgrind/none-amd64-solaris                            owner=root group=bin mode=0755
+file path=usr/lib/valgrind/none-x86-solaris                              owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_core-amd64-solaris.so               owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_core-x86-solaris.so                 owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_drd-amd64-solaris.so                owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_drd-x86-solaris.so                  owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_exp-dhat-amd64-solaris.so           owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_exp-dhat-x86-solaris.so             owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_exp-sgcheck-amd64-solaris.so        owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_exp-sgcheck-x86-solaris.so          owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_massif-amd64-solaris.so             owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_massif-x86-solaris.so               owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_memcheck-amd64-solaris.so           owner=root group=bin mode=0755
+file path=usr/lib/valgrind/vgpreload_memcheck-x86-solaris.so             owner=root group=bin mode=0755
+
+# Documentation from html-docs
+dir  path=usr/share/doc/valgrind					owner=root group=bin mode=0755
+dir  path=usr/share/doc/valgrind/html					owner=root group=bin mode=0755
+dir  path=usr/share/doc/valgrind/html/images				owner=root group=bin mode=0755
+file path=usr/share/doc/valgrind/html/bbv-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/cg-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/cl-format.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/cl-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/design-impl.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/dh-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/dist.authors.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/dist.html				owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/dist.news.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/dist.news.old.html		owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/dist.readme-developers.html	owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/dist.readme-missing.html		owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/dist.readme-solaris.html		owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/dist.readme.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/drd-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/faq.html				owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/FAQ.html  			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/hg-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/index.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/license.gfdl.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/license.gpl.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/licenses.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/lk-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/manual-core-adv.html		owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/manual-core.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/manual-intro.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/manual-writing-tools.html		owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/mc-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/ms-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/nl-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/quick-start.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/QuickStart.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/sg-manual.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/tech-docs.html			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/vg_basic.css			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/images/home.png			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/images/next.png			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/images/prev.png			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/html/images/up.png			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/AUTHORS				owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/COPYING				owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/COPYING.DOCS				owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/NEWS					owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/NEWS.old				owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/README					owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/README_DEVELOPERS			owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/README_DEVELOPERS_processes		owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/README_MISSING_SYSCALL_OR_IOCTL	owner=root group=bin mode=0644
+file path=usr/share/doc/valgrind/README.solaris				owner=root group=bin mode=0644
+
+# Man pages
+dir  path=usr/share/man					owner=root group=bin mode=0755
+dir  path=usr/share/man/man1				owner=root group=bin mode=0755
+file path=usr/share/man/man1/callgrind_annotate.1	owner=root group=bin mode=0644
+file path=usr/share/man/man1/callgrind_control.1	owner=root group=bin mode=0644
+file path=usr/share/man/man1/cg_annotate.1		owner=root group=bin mode=0644
+file path=usr/share/man/man1/cg_diff.1			owner=root group=bin mode=0644
+file path=usr/share/man/man1/cg_merge.1			owner=root group=bin mode=0644
+file path=usr/share/man/man1/ms_print.1			owner=root group=bin mode=0644
+file path=usr/share/man/man1/valgrind-listener.1	owner=root group=bin mode=0644
+file path=usr/share/man/man1/valgrind.1			owner=root group=bin mode=0644
+file path=usr/share/man/man1/vgdb.1			owner=root group=bin mode=0644
diff --git a/solaris/vgpreload-solaris.mapfile b/solaris/vgpreload-solaris.mapfile
new file mode 100644
index 0000000..da2abc3
--- /dev/null
+++ b/solaris/vgpreload-solaris.mapfile
@@ -0,0 +1,19 @@
+# Mapfile used for linking Valgrind preload libraries
+# (vgpreload_core-*.so and vgpreload_<tool>-*.so).
+#
+# Linking Valgrind with '-std=gnu99' causes the link editor
+# to include also symbols which alter Solaris libc behaviour.
+# This is undesirable: it would mean that non XPG-aware program
+# (conforming implicitly to XPG3) would behave differently when
+# run under Valgrind, due to preload libraries containing symbols
+# relevant to XPG6 (X/Open Portability Guide, Issue 6).
+#
+
+$mapfile_version 2
+
+SYMBOL_SCOPE {
+	ELIMINATE:
+		_lib_version;
+		__xpg4;
+		__xpg6;
+};
diff --git a/solaris11.supp b/solaris11.supp
new file mode 100644
index 0000000..6010936
--- /dev/null
+++ b/solaris11.supp
@@ -0,0 +1,43 @@
+# This is a real problem in the Solaris libc. It is caused by a read past the
+# FILE structure. It's an intentional hack to differentiate between two file
+# structures, FILE and xFILE.
+{
+   Solaris:snprintf
+   Memcheck:Cond
+   fun:getxfdat
+   ...
+   fun:_ndoprnt
+   fun:snprintf
+}
+
+# The same problem as above.
+{
+   Solaris:vsnprintf
+   Memcheck:Cond
+   fun:getxfdat
+   ...
+   fun:_ndoprnt
+   fun:vsnprintf
+}
+
+# Solaris libc doesn't deallocate I/O buffers on program exit.
+{
+   Solaris:file_buffer_malloc
+   Memcheck:Leak
+   fun:malloc
+   fun:_findbuf
+   obj:/lib/libc.so.1
+   obj:/lib/libc.so.1
+}
+
+#----------------------------------------------------------------------------#
+# Solaris libc reinitializes mutex udp->ld_lock in the child's post-fork
+# handler.
+{  
+   Solaris:postfork_child_mutex_reinit
+   drd:MutexErr
+   fun:mutex_init
+   fun:postfork1_child
+   fun:forkx
+}
+
diff --git a/solaris12.supp b/solaris12.supp
new file mode 100644
index 0000000..2c68508
--- /dev/null
+++ b/solaris12.supp
@@ -0,0 +1,168 @@
+# This is a real problem in the Solaris libc. It is caused by a read past the
+# FILE structure. It's an intentional hack to differentiate between two file
+# structures, FILE and xFILE.
+{
+   Solaris:sprintf
+   Memcheck:Cond
+   fun:getxfdat
+   fun:_set_memstream
+   fun:sprintf
+}
+
+# The same problem as above.
+{
+   Solaris:snprintf
+   Memcheck:Cond
+   fun:getxfdat
+   fun:_set_memstream
+   fun:snprintf
+}
+
+# The same problem as above.
+{
+   Solaris:snprintf
+   Memcheck:Cond
+   fun:getxfdat
+   fun:_realbufend
+   fun:_ndoprnt
+   fun:snprintf
+}
+
+# The same problem as above.
+{
+   Solaris:vsnprintf
+   Memcheck:Cond
+   fun:getxfdat
+   fun:_set_memstream
+   fun:vsnprintf
+}
+
+# The same problem as above.
+{
+   Solaris:vsnprintf
+   Memcheck:Cond
+   fun:getxfdat
+   fun:_realbufend
+   fun:_ndoprnt
+   fun:vsnprintf
+}
+
+#----------------------------------------------------------------------------#
+# Solaris libc doesn't deallocate I/O buffers on program exit.
+{
+   Solaris:file_buffer_malloc
+   Memcheck:Leak
+   fun:malloc
+   fun:_findbuf
+   obj:/lib/libc.so.1
+   obj:/lib/libc.so.1
+}
+
+#----------------------------------------------------------------------------#
+# Solaris libc doesn't deallocate netconfig list pointed to by netpp. 
+# This includes other allocated structures and strings contained there.
+{
+   Solaris:setnetconfig-fgetnetconfig
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:calloc
+   fun:fgetnetconfig
+   fun:getnetlist
+   fun:setnetconfig
+}
+
+# The same problem as above.
+{
+   Solaris:setnetconfig-fgetnetconfig-getlookups-strdup
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc
+   fun:strdup
+   fun:getlookups
+   fun:fgetnetconfig
+   fun:getnetlist
+   fun:setnetconfig
+}
+
+# The same problem as above.
+{
+   Solaris:setnetconfig-fgetnetconfig-getlookups-malloc
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc
+   fun:getlookups
+   fun:fgetnetconfig
+   fun:getnetlist
+   fun:setnetconfig
+}
+
+# The same problem as above.
+{
+   Solaris:setnetconfig-fgetnetconfig-gettoken
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc
+   fun:strdup
+   fun:gettoken
+   fun:fgetnetconfig
+   fun:getnetlist
+   fun:setnetconfig
+}
+
+# The same problem as above.
+{
+   Solaris:setnetconfig-getnetlist
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc
+   fun:getnetlist
+   fun:setnetconfig
+}
+
+#----------------------------------------------------------------------------#
+# Solaris libc doesn't deallocate static strings netid_tcp_main
+# and netid_tcp_udp allocated in __rpc_getconfip.
+{
+   Solaris:__rpc_getconfip-netid_tcp+udp_main
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc
+   fun:strdup
+   fun:__rpc_getconfip
+}
+
+#----------------------------------------------------------------------------#
+# Solaris libc doesn't deallocate global variable global_gt.
+{
+   Solaris:dgettext
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:calloc
+   fun:dgettext
+}
+
+#----------------------------------------------------------------------------#
+# Solaris libc reinitializes mutex udp->ld_lock in the child's post-fork
+# handler.
+{
+   Solaris:postfork_child_mutex_reinit
+   drd:MutexErr
+   fun:mutex_init
+   fun:postfork1_child
+   fun:forkx
+}
+
+#----------------------------------------------------------------------------#
+# Solaris libc implements pthread barrier with a mutex and a condition
+# variable. In pthread_barrier_wait(), the last thread returning with
+# SERIAL_THREAD first unlocks the mutex and then broadcasts the condition
+# variable. This is ok here because that mutex does not have any priorities
+# associated, therefore no unpredicatble scheduling behaviour can occurr.
+{
+   Solaris:pthread_barrier_wait
+   Helgrind:Misc
+   fun:pthread_cond_broadcast_WRK
+   fun:cond_broadcast
+   fun:pthread_barrier_wait
+}
+
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b01cfb7..9c0cc3a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,13 +1,30 @@
 
 include $(top_srcdir)/Makefile.tool-tests.am
 
+if HAS_ISA_2_05
+ISA_2_05_FLAG = -DHAS_ISA_2_05
+else
+ISA_2_05_FLAG =
+endif
+
+if HAS_ISA_2_06
+ISA_2_06_FLAG = -DHAS_ISA_2_06
+else
+ISA_2_06_FLAG =
+endif
+
+if HAS_ISA_2_07
+ISA_2_07_FLAG = -DHAS_ISA_2_07
+else
+ISA_2_07_FLAG =
+endif
+
+min_power_isa_FLAGS = $(ISA_2_05_FLAG)  $(ISA_2_06_FLAG) $(ISA_2_07_FLAG)
+
 dist_noinst_SCRIPTS = \
 	check_headers_and_includes \
-	check_isa-2_06_cap \
-	check_isa-2_07_cap \
 	check_makefile_consistency \
-	check_dfp_cap \
-	check_vmx_cap \
+	check_ppc64_auxv_cap \
 	filter_addresses \
 	filter_discards \
 	filter_libc \
@@ -32,7 +49,8 @@
 	s390x_features \
 	mips_features \
 	power_insn_available \
-	is_ppc64_BE
+	is_ppc64_BE \
+	min_power_isa
 
 AM_CFLAGS   += $(AM_FLAG_M3264_PRI)
 AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
@@ -43,3 +61,4 @@
 x86_amd64_features_CFLAGS = $(AM_CFLAGS)
 endif
 
+min_power_isa_CFLAGS = $(min_power_isa_FLAGS)
diff --git a/tests/arch_test.c b/tests/arch_test.c
index 81a12ec..d83f0e5 100644
--- a/tests/arch_test.c
+++ b/tests/arch_test.c
@@ -39,10 +39,12 @@
 
 static Bool go(char* arch)
 { 
-#if defined(VGP_x86_linux) || defined(VGP_x86_darwin)
+#if defined(VGP_x86_linux) || defined(VGP_x86_darwin) \
+   || defined(VGP_x86_solaris)
    if ( 0 == strcmp( arch, "x86"   ) ) return True;
 
-#elif defined(VGP_amd64_linux) || defined(VGP_amd64_darwin)
+#elif defined(VGP_amd64_linux) || defined(VGP_amd64_darwin) \
+   || defined(VGP_amd64_solaris)
 #if defined(VGA_SEC_x86)
    if ( 0 == strcmp( arch, "x86"   ) ) return True;
 #endif
diff --git a/tests/check_dfp_cap b/tests/check_dfp_cap
deleted file mode 100755
index d9bc273..0000000
--- a/tests/check_dfp_cap
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-# We use this script to check whether or not the processor supports Decimal Floating Point (DFP).
-
-LD_SHOW_AUXV=1 /bin/true | grep  dfp > /dev/null 2>&1
-if [ "$?" -ne "0" ]; then
-        exit 1
-else
-        exit 0
-fi
diff --git a/tests/check_headers_and_includes b/tests/check_headers_and_includes
index 3c53386..47491b2 100755
--- a/tests/check_headers_and_includes
+++ b/tests/check_headers_and_includes
@@ -14,6 +14,10 @@
 # (7) include/*.h and tool *.[ch] must not use vg_assert
 # (8) coregrind/ *.[ch] must not use VG_(tool_panic)
 # (9) include/*.h and tool *.[ch] must not use VG_(core_panic)
+# (10) *.S must unconditionally instantiate MARK_STACK_NO_EXEC
+#
+# There can be false positives as we don't really parse the source files.
+# Instead we only match regular expressions.
 #-------------------------------------------------------------------
 
 use strict;
@@ -66,7 +70,8 @@
     "perf" => 1,
     "tests" => 1,
     "gdbserver_tests" => 1,
-    "mpi" => 1
+    "mpi" => 1,
+    "solaris" => 1
     );
 
 my %tool_export_header = (
@@ -143,8 +148,8 @@
             next;
         }
 
-# Regular files; only interested in *.c and *.h
-        next if (! ($file =~ /\.[ch]$/));
+# Regular files; only interested in *.c, *.S and *.h
+        next if (! ($file =~ /\.[cSh]$/));
         my $path_name = defined $path ? "$path/$file" : $file;
         process_file($path_name);
     }
@@ -305,6 +310,36 @@
     }
 }
 
+#---------------------------------------------------------------------
+# Check an assembler file
+#---------------------------------------------------------------------
+sub check_assembler_file {
+    my ($path_name) = @_;
+    my $file = basename($path_name);
+    my $found = 0;
+
+    open(FILE, "<$file") || die "Cannot open file '$file'";
+
+    while (my $line = <FILE>) {
+        if ($line =~ /^\s*MARK_STACK_NO_EXEC/) {
+            $found = 1;
+            last;
+        }
+    }
+    if ($found == 0) {
+        error("File $path_name does not instantiate MARK_STACK_NO_EXEC\n");
+    } else {
+        while (my $line = <FILE>) {
+            if ($line =~ /^\s*#\s*endif/) {
+                error("File $path_name instantiates MARK_STACK_NO_EXEC"
+                      . " under a condition\n");
+                last;
+            }
+        }
+    }
+    close FILE;
+}
+
 sub process_file {
     my ($path_name) = @_;
 
@@ -317,6 +352,10 @@
     } elsif (is_tool_file($path_name)) {
         check_tool_file($path_name);
     }
+
+    if ($path_name =~ /\.S$/) {
+        check_assembler_file($path_name);
+    }
 }
 
 sub error {
diff --git a/tests/check_isa-2_06_cap b/tests/check_isa-2_06_cap
deleted file mode 100755
index b8ec37f..0000000
--- a/tests/check_isa-2_06_cap
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-# We use this script to check whether or not the processor supports Power ISA 2.06 or later.
-DIR="$( cd "$( dirname "$0" )" && pwd )"
-LD_SHOW_AUXV=1 $DIR/true | grep  arch_2_06 > /dev/null 2>&1
-
-if [ "$?" -ne "0" ]; then
-	exit 1
-else
-	exit 0
-fi
-
diff --git a/tests/check_isa-2_07_cap b/tests/check_isa-2_07_cap
deleted file mode 100755
index 8b991e5..0000000
--- a/tests/check_isa-2_07_cap
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-# We use this script to check whether or not the processor supports
-# Power ISA 2.07.
-DIR="$( cd "$( dirname "$0" )" && pwd )"
-LD_SHOW_AUXV=1 $DIR/true | grep  arch_2_07 > /dev/null 2>&1
-
-if [ "$?" -ne "0" ]; then
-	exit 1
-else
-	exit 0
-fi
diff --git a/tests/check_ppc64_auxv_cap b/tests/check_ppc64_auxv_cap
new file mode 100755
index 0000000..49d7856
--- /dev/null
+++ b/tests/check_ppc64_auxv_cap
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# Check if the passed in (CAPABILITY_WORD) matches a value found in the
+# current hwcap aux vector.
+
+# return '0' to indicate the capability was found.
+# return '1' for not found, or any other error condition.
+
+CAPABILITY_WORD=$1
+
+# SANITY CHECK Begin:
+# These are potential hwcap values as found in the glibc dl-procinfo.c
+# sources as of July 2015.
+P_HWCAP_1=" vsx arch_2_06 power6x dfp pa6t arch_2_05 ic_snoop smt booke"
+P_HWCAP_2=" cellbe power5+ power5 power4 notb efpdouble efpsingle spe"
+P_HWCAP_3=" ucache 4xxmac mmu fpu altivec ppc601 ppc64 ppc32 "
+P_HWCAP2_1=" tar isel ebb dscr htm arch_2_07 "
+CAPABILITY_FOUND="no"
+for POTENTIAL_CAP in $P_HWCAP_1 $P_HWCAP_2 $P_HWCAP_3 $P_HWCAP2_1 ; do
+	if [ "x$CAPABILITY_WORD" = "x$POTENTIAL_CAP" ]; then
+		CAPABILITY_FOUND="yes"
+		break
+	fi
+done
+if [ x$CAPABILITY_FOUND = "xno" ]; then
+	echo "Warning: did not find $CAPABILITY_WORD in the potential capabilities list."
+	echo "         LD_SHOW_AUXV=1 /bin/true | grep ^AT_HWCAP "
+	echo "         Double-check that the input value [$CAPABILITY_WORD] is valid."
+fi
+# SANITY CHECK End
+
+# Capability Check Begin:
+LD_SHOW_AUXV=1 /bin/true | grep ^AT_HWCAP | grep -w $CAPABILITY_WORD 2>&1 > /dev/null
+if [ "$?" -eq "0" ]; then
+	#echo "found the capability"
+	exit 0
+elif [ "$?" -eq "2" ]; then
+	# echo "grep failure"
+	exit 1
+else
+	#echo "did not find the capability"
+	exit 1
+fi
+
diff --git a/tests/check_vmx_cap b/tests/check_vmx_cap
deleted file mode 100755
index 12e5f68..0000000
--- a/tests/check_vmx_cap
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-# We use this script to check whether or not the processor supports VMX (aka "Altivec").
-
-LD_SHOW_AUXV=1 /bin/true | grep altivec > /dev/null 2>&1
-if [ "$?" -ne "0" ]; then
-	exit 1
-else
-	exit 0
-fi
-
diff --git a/tests/filter_libc b/tests/filter_libc
index dd30ef1..9a508b0 100755
--- a/tests/filter_libc
+++ b/tests/filter_libc
@@ -9,11 +9,9 @@
     s/ __GI___/ __/;
     s/ __([a-z]*)_nocancel / $1 /;
 
-    # "lib[S|s]ystem*" occurs on Darwin.
-    s/\(in \/.*(libc|libSystem).*\)$/(in \/...libc...)/;
-    s/\(within \/.*(libc|libSystem).*\)$/(within \/...libc...)/;
-    s/\(in \/.*(libc|libsystem).*\)$/(in \/...libc...)/;
-    s/\(within \/.*(libc|libsystem).*\)$/(within \/...libc...)/;
+    # "lib[S|s]ystem*" occurs on Darwin, "libsocket" on older Solaris/illumos.
+    s/\(in \/.*(libc|libSystem|libsystem|libsocket).*\)$/(in \/...libc...)/;
+    s/\(within \/.*(libc|libSystem|libsystem|libsocket).*\)$/(within \/...libc...)/;
 
     # Filter out dynamic loader
     s/ \(in \/.*ld-.*so\)$//;
@@ -38,6 +36,9 @@
     s/(at.*)__builtin_vec_delete/$1...operator delete[].../;
     s/(at.*)operator delete\[\]\(void\*\)/$1...operator delete[].../;
 
+    # Some glibc versions complain about unexpected futex syscall errors.
+    s/The futex facility returned an unexpected error code.//;
+
     print;
 }
 
diff --git a/tests/filter_stderr_basic b/tests/filter_stderr_basic
index c24cd5e..472cd8f 100755
--- a/tests/filter_stderr_basic
+++ b/tests/filter_stderr_basic
@@ -12,8 +12,9 @@
 # Remove ==pid== and --pid-- and **pid** strings 
 perl -p -e 's/(==|--|\*\*)[0-9]{1,7}\1 //' |
 
-# Remove any --pid:0: strings (debuglog level zero output)
-sed "/^--[0-9]\{1,7\}:0:*/d" |
+# Do NOT remove debug level output, i.e. lines beginning with --pid:
+# Doing so would also remove asserts from the address space manager
+# and we always to see those.
 
 # Remove "Command: line".  (If wrapping occurs, it won't remove the
 # subsequent lines...)
@@ -47,9 +48,12 @@
 # complete list of messages in the bash source file siglist.c.
 perl -n -e 'print if !/^(Segmentation fault|Alarm clock|Aborted|Bus error)( \(core dumped\))?$/' |
 
+# Similar as above, but for ksh on Solaris/illumos.
+perl -n -e 'print if !/^(Memory fault|Killed) $/' |
+
 # Translate intercepted glibc functions back to their canonical name
-perl -p -e "s/: memcpy\@\@?GLIBC_[.1-9]+ \(vg_replace_strmem.c:...\)/: memcpy \(vg_replace_strmem.c:...\)/" |
-sed -e "s/: \(__GI_\|__\|\)\(memcmp\|memcpy\|strcpy\|strncpy\|strchr\|strrchr\)\(\|_sse4_1\|_sse42\|_sse2_unaligned\) (vg_replace_strmem.c:/: \2 (vg_replace_strmem.c:/" |
+perl -p -e "s/: memcpy\@\@?GLIBC_[.1-9]+ \(vg_replace_strmem.c:.*?\)/: memcpy \(vg_replace_strmem.c:...\)/" |
+sed -e "s/: \(__GI_\|__\|\)\(memcmp\|memcpy\|strcpy\|strncpy\|strchr\|strrchr\)\(\|_sse4_1\|_sse42\|_sse2_unaligned\|_sse2\) (vg_replace_strmem.c:/: \2 (vg_replace_strmem.c:/" |
 
 # Remove any ": dumping core" message as the user might have a
 # limit set that prevents the core dump
diff --git a/tests/malloc.h b/tests/malloc.h
index 0179b38..146790e 100644
--- a/tests/malloc.h
+++ b/tests/malloc.h
@@ -16,12 +16,44 @@
    void* x;
 #if defined(VGO_darwin)
    // Darwin lacks memalign, but its malloc is always 16-aligned anyway.
-   x = malloc(szB);
+   posix_memalign((void **)&x, 16, szB);
 #else
    x = memalign(16, szB);
 #endif
    assert(x);
    assert(0 == ((16-1) & (unsigned long)x));
    return x;
-} 
+}
+
+// Allocates a 32-aligned block.  Asserts if the allocation fails.
+__attribute__((unused))
+static void* memalign32(size_t szB)
+{
+   void* x;
+#if defined(VGO_darwin)
+   // Darwin lacks memalign
+   posix_memalign((void **)&x, 32, szB);
+#else
+   x = memalign(32, szB);
+#endif
+   assert(x);
+   assert(0 == ((32-1) & (unsigned long)x));
+   return x;
+}
+
+// Allocates a 64-aligned block.  Asserts if the allocation fails.
+__attribute__((unused))
+static void* memalign64(size_t szB)
+{
+   void* x;
+#if defined(VGO_darwin)
+   // Darwin lacks memalign
+   posix_memalign((void **)&x, 64, szB);
+#else
+   x = memalign(64, szB);
+#endif
+   assert(x);
+   assert(0 == ((64-1) & (unsigned long)x));
+   return x;
+}
 
diff --git a/tests/min_power_isa.c b/tests/min_power_isa.c
new file mode 100644
index 0000000..efcf526
--- /dev/null
+++ b/tests/min_power_isa.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* main() */
+int main(int argc, char **argv)
+{
+   /* This program is passed in a minimum ISA that the underlying hardwre
+    * needs to support.  If the HW supports this ISA or newer, return 0
+    * for supported.  Otherwise, return 1 for not supported.  Return 2 for
+    * usage error.
+    *
+    *  First argument is required, it must be an ISA version number.
+    *  Second argument "-debug" is optional.  If passed, then the defined ISA
+    *  values are printed.
+    */
+   char *min_isa;
+   int isa_level = 0;
+   int debug = 0;
+
+   /* set the isa_level set by the Make */
+
+   if ((argc == 3) && (strcmp(argv[2], "-debug") == 0)) {
+      debug = 1;
+
+   } else if (argc != 2) {
+      fprintf(stderr, "usage: min_power_ISA <ISA> [-debug]\n" );
+      exit(2);
+   }
+
+   min_isa = argv[1];
+
+#ifdef HAS_ISA_2_05
+   if (debug) printf("HAS_ISA_2_05 is set\n");
+   isa_level = 5;
+#endif
+
+#ifdef HAS_ISA_2_06
+   if (debug) printf("HAS_ISA_2_06 is set\n");
+   isa_level = 6;
+#endif
+
+#ifdef HAS_ISA_2_07
+   if (debug) printf("HAS_ISA_2_07 is set\n");
+   isa_level = 7;
+#endif
+
+   /* return 0 for supported (success), 1 for not supported (failure) */
+   if (strcmp (min_isa, "2.05") == 0) {
+      return !(isa_level >= 5);
+
+   } else if (strcmp (min_isa, "2.06") == 0) {
+      return !(isa_level >= 6);
+
+   } else if (strcmp (min_isa, "2.07") == 0) {
+      return !(isa_level >= 7);
+
+   } else {
+      fprintf(stderr, "ERROR: invalid ISA version.  Valid versions numbers are:\n" );
+      fprintf(stderr, "       2.05, 2.06, 2.07\n" );
+      exit(2);
+   }
+
+   return 1;
+}
diff --git a/tests/os_test.c b/tests/os_test.c
index b755e30..d3c5a69 100644
--- a/tests/os_test.c
+++ b/tests/os_test.c
@@ -23,6 +23,7 @@
 char* all_OSes[] = {
    "linux",
    "darwin",
+   "solaris",
    NULL
 };
 
@@ -62,6 +63,9 @@
 #elif defined(VGO_darwin)
    if ( 0 == strcmp( OS, "darwin" ) ) return True;
 
+#elif defined(VGO_solaris)
+   if ( 0 == strcmp( OS, "solaris" ) ) return True;
+
 #else
 #  error Unknown OS
 #endif   // VGO_*
diff --git a/tests/platform_test b/tests/platform_test
index 43275c8..9653921 100644
--- a/tests/platform_test
+++ b/tests/platform_test
@@ -15,6 +15,7 @@
 all_platforms="$all_platforms arm-linux"
 all_platforms="$all_platforms s390x-linux mips32-linux mips64-linux"
 all_platforms="$all_platforms x86-darwin amd64-darwin"
+all_platforms="$all_platforms x86-solaris amd64-solaris"
 
 if [ $# -ne 2 ] ; then
     echo "usage: platform_test <arch-type> <OS-type>"
diff --git a/tests/vg_regtest.in b/tests/vg_regtest.in
index c8e1d2b..a441f42 100755
--- a/tests/vg_regtest.in
+++ b/tests/vg_regtest.in
@@ -6,7 +6,7 @@
 #  This file is part of Valgrind, a dynamic binary instrumentation
 #  framework.
 #
-#  Copyright (C) 2003-2013 Nicholas Nethercote
+#  Copyright (C) 2003-2015 Nicholas Nethercote
 #     njn@valgrind.org
 #
 #  This program is free software; you can redistribute it and/or
@@ -71,6 +71,7 @@
 #   - stderr_filter_args: <args for stderr_filter>  (default: basename of .vgtest file)
 #
 #   - progB:  <prog to run in parallel with prog>   (default: none)
+#   - envB: <environment variable for progB>        (default: none)
 #   - argsB:  <args for progB>                      (default: none)
 #   - stdinB: <input file for progB>                (default: none)
 #   - stdoutB_filter: <filter progB stdout through> (default: none)
@@ -91,6 +92,7 @@
 #
 # There can be more than one env: declaration. Here is an example:
 #   env: PATH=/opt/bin:$PATH
+# Likewise for envB.
 #
 # Expected stdout (filtered) is kept in <test>.stdout.exp* (can be more
 # than one expected output).  It can be missing if it would be empty.  Expected
@@ -162,6 +164,7 @@
 my $post;               # check command after running test
 my $cleanup;            # cleanup command to run
 my @env = ();           # environment variable to set prior calling $prog
+my @envB = ();          # environment variable to set prior calling $progB
 
 my @failures;           # List of failed tests
 
@@ -306,7 +309,7 @@
 	    next;
 	} elsif ($line =~ /^\s*vgopts:\s*(.*)$/) {
             my $addvgopts = $1;
-            $addvgopts =~ s/\${PWD}/$ENV{PWD}/g;
+            $addvgopts =~ s/\$\{PWD\}/$ENV{PWD}/g;
             $vgopts = $vgopts . " " . $addvgopts;   # Nb: Make sure there's a space!
         } elsif ($line =~ /^\s*prog:\s*(.*)$/) {
             $prog = validate_program(".", $1, 0, 0);
@@ -344,6 +347,8 @@
             $cleanup = $1;
         } elsif ($line =~ /^\s*env:\s*(.*)$/) {
             push @env,$1;
+        } elsif ($line =~ /^\s*envB:\s*(.*)$/) {
+            push @envB,$1;
         } else {
             die "Bad line in $f: $line\n";
         }
@@ -443,7 +448,7 @@
     read_vgtest_file($vgtest);
 
     if (defined $prereq) {
-        my $prereq_res = system("$prereq");
+        my $prereq_res = system("/bin/sh", "-c", $prereq);
         if (0 == $prereq_res) {
             # Do nothing (ie. continue with the test)
         } elsif (256 == $prereq_res) {
@@ -460,6 +465,11 @@
 
 
     if (defined $progB) {
+        # Collect environment variables, if any.
+        my $envBvars = "";
+        foreach my $e (@envB) {
+           $envBvars = "$envBvars $e";
+        }
         # If there is a progB, let's start it in background:
         printf("%-16s valgrind $extraopts $vgopts $prog $args (progB: $progB $argsB)\n",
                "$name:");
@@ -468,11 +478,13 @@
         # to e.g. redirect stdoutB to stderrB
         if (defined $stdinB) {
             mysystem("(rm -f progB.done;"
-                     . " < $stdinB > $name.stdoutB.out 2> $name.stderrB.out $progB $argsB;"
+                     . " < $stdinB > $name.stdoutB.out 2> $name.stderrB.out"
+                     . " $envBvars $progB $argsB;"
                      . "touch progB.done) &");
         } else {
             mysystem("(rm -f progB.done;"
-                     . " > $name.stdoutB.out 2> $name.stderrB.out $progB $argsB;"
+                     . " > $name.stdoutB.out 2> $name.stderrB.out"
+                     . "$envBvars $progB $argsB;"
                      . "touch progB.done)  &");
         }
     } else {